From 4f2f46ef1bd793a712df045178b3d00d027e3ba6 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 30 Oct 2008 19:14:07 +0000 Subject: [PATCH] Restore the ability to choose the internal font. Behdad wants to include the feature with 1.10, so we enable it as early as possible in 1.9 dev cycle to generate as much feedback as possible. The first change is to use "" as being a name unlikely to clash with any real font names. This reverts commits: a824d284be23793a5c48b9ae833dcb7b2d5fff80, 292233685534aed712dfd45e8ccf498b792ce496, e0046aaf417a61da008dc6374871fa3687ba94ab, f534bd549e1e2283735d1eabb60c015a5949a735. --- perf/Makefile.am | 1 + perf/cairo-perf.c | 1 + perf/cairo-perf.h | 1 + perf/twin.c | 50 +++++++++++++++++++++++++++++++++ src/cairo-font-face.c | 6 ++-- src/cairoint.h | 1 + test/.gitignore | 1 + test/Makefile.am | 6 ++++ test/twin-ps2-ref.png | Bin 0 -> 1167 bytes test/twin-ps3-ref.png | Bin 0 -> 1167 bytes test/twin-ref.png | Bin 0 -> 1836 bytes test/twin-svg11-ref.png | Bin 0 -> 1773 bytes test/twin-svg12-ref.png | Bin 0 -> 1773 bytes test/twin.c | 60 ++++++++++++++++++++++++++++++++++++++++ 14 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 perf/twin.c create mode 100644 test/twin-ps2-ref.png create mode 100644 test/twin-ps3-ref.png create mode 100644 test/twin-ref.png create mode 100644 test/twin-svg11-ref.png create mode 100644 test/twin-svg12-ref.png create mode 100644 test/twin.c diff --git a/perf/Makefile.am b/perf/Makefile.am index 3ac13a6f1..daec8e4ef 100644 --- a/perf/Makefile.am +++ b/perf/Makefile.am @@ -35,6 +35,7 @@ cairo_perf_SOURCES = \ subimage_copy.c \ tessellate.c \ text.c \ + twin.c \ unaligned-clip.c \ world-map.c \ world-map.h \ diff --git a/perf/cairo-perf.c b/perf/cairo-perf.c index 613d15cf9..a6d59a579 100644 --- a/perf/cairo-perf.c +++ b/perf/cairo-perf.c @@ -458,5 +458,6 @@ const cairo_perf_case_t perf_cases[] = { { rounded_rectangles, 512, 512}, { long_dashed_lines, 512, 512}, { composite_checker, 16, 512}, + { twin, 800, 800}, { NULL } }; diff --git a/perf/cairo-perf.h b/perf/cairo-perf.h index 57fe85f11..0cedb6913 100644 --- a/perf/cairo-perf.h +++ b/perf/cairo-perf.h @@ -172,5 +172,6 @@ CAIRO_PERF_DECL (rectangles); CAIRO_PERF_DECL (rounded_rectangles); CAIRO_PERF_DECL (long_dashed_lines); CAIRO_PERF_DECL (composite_checker); +CAIRO_PERF_DECL (twin); #endif diff --git a/perf/twin.c b/perf/twin.c new file mode 100644 index 000000000..adedb25f6 --- /dev/null +++ b/perf/twin.c @@ -0,0 +1,50 @@ +#define WIDTH 1350 +#define HEIGHT 900 + +#include "cairo-perf.h" + +static cairo_perf_ticks_t +do_twin (cairo_t *cr, + int width, + int height) +{ + int i, j, h; + unsigned char s[2] = {0, 0}; + + cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */ + cairo_paint (cr); + cairo_set_source_rgb (cr, 0, 0, 0); + + cairo_perf_timer_start (); + + cairo_select_font_face (cr, + "", + CAIRO_FONT_SLANT_NORMAL, + CAIRO_FONT_WEIGHT_NORMAL); + + h = 2; + for (i = 8; i < 48; i >= 24 ? i+=3 : i++) { + cairo_set_font_size (cr, i); + for (j = 33; j < 128; j++) { + if (j == 33 || (j == 80 && i > 24)) { + h += i + 2; + cairo_move_to (cr, 10, h); + } + s[0] = j; + cairo_text_path (cr, (const char *) s); + } + } + cairo_fill (cr); + + cairo_perf_timer_stop (); + return cairo_perf_timer_elapsed (); +} + +void +twin (cairo_perf_t *perf, + cairo_t *cr, + int width, + int height) +{ + cairo_perf_run (perf, "twin", do_twin); +} diff --git a/src/cairo-font-face.c b/src/cairo-font-face.c index 30c8d9fb3..6cea39585 100644 --- a/src/cairo-font-face.c +++ b/src/cairo-font-face.c @@ -578,7 +578,8 @@ _cairo_toy_font_face_scaled_font_get_implementation (void *abstra if (font_face->base.status) return font_face->base.status; - if (CAIRO_SCALED_FONT_BACKEND_DEFAULT != &_cairo_user_scaled_font_backend) + if (CAIRO_SCALED_FONT_BACKEND_DEFAULT != &_cairo_user_scaled_font_backend && + 0 != strcmp (font_face->family, CAIRO_USER_FONT_FAMILY_DEFAULT)) { const cairo_scaled_font_backend_t * backend = CAIRO_SCALED_FONT_BACKEND_DEFAULT; @@ -617,7 +618,8 @@ _cairo_toy_font_face_scaled_font_create (void *abstract_font_face if (status) return status; - if (CAIRO_SCALED_FONT_BACKEND_DEFAULT != &_cairo_user_scaled_font_backend) + if (CAIRO_SCALED_FONT_BACKEND_DEFAULT != &_cairo_user_scaled_font_backend && + 0 != strcmp (font_face->family, CAIRO_USER_FONT_FAMILY_DEFAULT)) { const cairo_scaled_font_backend_t * backend = CAIRO_SCALED_FONT_BACKEND_DEFAULT; diff --git a/src/cairoint.h b/src/cairoint.h index 281034835..f94e68214 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -938,6 +938,7 @@ typedef struct _cairo_traps { #define CAIRO_WIN32_FONT_FAMILY_DEFAULT "Arial" #define CAIRO_QUARTZ_FONT_FAMILY_DEFAULT "Helvetica" #define CAIRO_FT_FONT_FAMILY_DEFAULT "" +#define CAIRO_USER_FONT_FAMILY_DEFAULT "" #if CAIRO_HAS_WIN32_FONT diff --git a/test/.gitignore b/test/.gitignore index 8da34a007..675315a69 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -233,6 +233,7 @@ transforms translate-show-surface trap-clip truetype-tables +twin unantialiased-shapes unbounded-operator user-data diff --git a/test/Makefile.am b/test/Makefile.am index 887bd73aa..026ce9a50 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -180,6 +180,7 @@ transforms$(EXEEXT) \ translate-show-surface$(EXEEXT) \ trap-clip$(EXEEXT) \ truetype-tables$(EXEEXT) \ +twin$(EXEEXT) \ unantialiased-shapes$(EXEEXT) \ unbounded-operator$(EXEEXT) \ user-data$(EXEEXT) \ @@ -929,6 +930,11 @@ REFERENCE_IMAGES = \ trap-clip-pdf-rgb24-ref.png \ trap-clip-ps2-argb32-ref.png \ trap-clip-ps2-rgb24-ref.png \ + twin-ref.png \ + twin-ps2-ref.png \ + twin-ps3-ref.png \ + twin-svg11-ref.png \ + twin-svg12-ref.png \ unantialiased-shapes-ref.png \ unantialiased-shapes-quartz-ref.png \ unbounded-operator-ref.png \ diff --git a/test/twin-ps2-ref.png b/test/twin-ps2-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..a58dc5b639f75866fe50d353142d8f76ec1ca7cd GIT binary patch literal 1167 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 + */ + +#include "cairo-test.h" + +static cairo_test_draw_function_t draw; + +static const cairo_test_t test = { + "twin", + "Tests the internal font", + 128, 20, + draw +}; + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + cairo_set_source_rgb (cr, 0, 0, 0); + + cairo_select_font_face (cr, + "", + CAIRO_FONT_SLANT_NORMAL, + CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size (cr, 16); + + cairo_move_to (cr, 4, 14); + cairo_show_text (cr, "Is cairo's twin giza?"); + + return CAIRO_TEST_SUCCESS; +} + +int +main (void) +{ + return cairo_test (&test); +}