Опишу немного, как работает:
Code:
kolibri_boxlib_init();
Загрузка boxlib
Code:
FT_Library value;
FT_Error status;
FT_Face face;
cairo_t *c;
cairo_surface_t *cs;
cairo_font_face_t * ct;
cs = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
c = cairo_create (cs);
const char* filename = "font.ttf";
status = FT_Init_FreeType (& value);
if (status != 0) {
fprintf (stderr, "Error %d opening library.\n", status);
exit (EXIT_FAILURE);
}
status = FT_New_Face (value, filename, 0, & face);
if (status != 0) {
fprintf (stderr, "Error %d opening %s.\n", status, filename);
exit (EXIT_FAILURE);
}
ct = cairo_ft_font_face_create_for_ft_face (face, 0);
cairo_set_font_face (c, ct);
Инициализация Freetype и Cairo
Code:
// FONT CONFIG
int x = 25, y = 50, font_size = 30;
/////////// DRAW TEXT /////////////////
cairo_set_font_size (c, font_size);
// set BG color
cairo_set_source_rgb(c, 1, 1, 1);
cairo_paint(c);
cairo_set_source_rgb (c, 0, 0, 0);
cairo_move_to (c, x, y);
for (int i = 0; i<30; i++) {
if ((i%2) == 0) cairo_show_text (c, "Четная строка"); else cairo_show_text (c, "Нечетная строка");
newline(c, x, &y, font_size);
}
/////////// END DRAW TEXT /////////////////
Описание переменных позиции, и размера. Отрисовка текста.
Code:
winstride = cairo_image_surface_get_stride(cs);
winbitmap = cairo_image_surface_get_data(cs);
Запись данных в буфер, которые потом выведутся на экран Blit()'ом.
Code:
void newline(cairo_t *c, int x, int *y, int fontsize) {
(*y) += fontsize;
cairo_move_to (c, x, *y);
}
Самодельная функция перехода на новую строку
Еще нужно понять, как определять current в scrollbar.
Еще хотелось бы что бы кто-нибудь посмотрел код, и оценил, указал на неточности.