mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-01-06 19:00:22 +01:00
[test/ft-text-*] Check for errors from fontconfig.
If a match cannot be found, or if any other error occured, then fontconfig will return NULL. Check and propagate.
This commit is contained in:
parent
336eddfdbb
commit
eaec1caa94
3 changed files with 78 additions and 15 deletions
|
|
@ -42,8 +42,9 @@ static const cairo_test_t test = {
|
|||
draw
|
||||
};
|
||||
|
||||
static cairo_scaled_font_t *
|
||||
create_scaled_font (cairo_t * cr)
|
||||
static cairo_status_t
|
||||
create_scaled_font (cairo_t * cr,
|
||||
cairo_scaled_font_t **out)
|
||||
{
|
||||
FcPattern *pattern, *resolved;
|
||||
FcResult result;
|
||||
|
|
@ -51,6 +52,7 @@ create_scaled_font (cairo_t * cr)
|
|||
cairo_scaled_font_t *scaled_font;
|
||||
cairo_font_options_t *font_options;
|
||||
cairo_matrix_t font_matrix, ctm;
|
||||
cairo_status_t status;
|
||||
double pixel_size;
|
||||
|
||||
font_options = cairo_font_options_create ();
|
||||
|
|
@ -58,6 +60,8 @@ create_scaled_font (cairo_t * cr)
|
|||
cairo_get_font_options (cr, font_options);
|
||||
|
||||
pattern = FcPatternCreate ();
|
||||
if (pattern == NULL)
|
||||
return CAIRO_STATUS_NO_MEMORY;
|
||||
|
||||
FcPatternAddString (pattern, FC_FAMILY, (FcChar8 *)"Bitstream vera sans");
|
||||
FcPatternAddDouble (pattern, FC_SIZE, TEXT_SIZE);
|
||||
|
|
@ -67,6 +71,10 @@ create_scaled_font (cairo_t * cr)
|
|||
|
||||
FcDefaultSubstitute (pattern);
|
||||
resolved = FcFontMatch (NULL, pattern, &result);
|
||||
if (resolved == NULL) {
|
||||
FcPatternDestroy (pattern);
|
||||
return CAIRO_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
/* turn antialiasing off */
|
||||
FcPatternDel (resolved, FC_ANTIALIAS);
|
||||
|
|
@ -91,14 +99,22 @@ create_scaled_font (cairo_t * cr)
|
|||
FcPatternDestroy (pattern);
|
||||
FcPatternDestroy (resolved);
|
||||
|
||||
return scaled_font;
|
||||
status = cairo_scaled_font_status (scaled_font);
|
||||
if (status) {
|
||||
cairo_scaled_font_destroy (scaled_font);
|
||||
return status;
|
||||
}
|
||||
|
||||
*out = scaled_font;
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static cairo_test_status_t
|
||||
draw (cairo_t *cr, int width, int height)
|
||||
{
|
||||
cairo_text_extents_t extents;
|
||||
cairo_scaled_font_t * scaled_font;
|
||||
cairo_scaled_font_t *scaled_font;
|
||||
cairo_status_t status;
|
||||
const char black[] = "black", blue[] = "blue";
|
||||
|
||||
/* We draw in the default black, so paint white first. */
|
||||
|
|
@ -107,7 +123,12 @@ draw (cairo_t *cr, int width, int height)
|
|||
cairo_paint (cr);
|
||||
cairo_restore (cr);
|
||||
|
||||
scaled_font = create_scaled_font (cr);
|
||||
status = create_scaled_font (cr, &scaled_font);
|
||||
if (status) {
|
||||
return cairo_test_status_from_status (cairo_test_get_context (cr),
|
||||
status);
|
||||
}
|
||||
|
||||
cairo_set_scaled_font (cr, scaled_font);
|
||||
|
||||
cairo_set_source_rgb (cr, 0, 0, 0); /* black */
|
||||
|
|
|
|||
|
|
@ -43,8 +43,9 @@ static const cairo_test_t test = {
|
|||
draw
|
||||
};
|
||||
|
||||
static cairo_scaled_font_t *
|
||||
create_scaled_font (cairo_t * cr)
|
||||
static cairo_status_t
|
||||
create_scaled_font (cairo_t * cr,
|
||||
cairo_scaled_font_t **out)
|
||||
{
|
||||
FcPattern *pattern, *resolved;
|
||||
FcResult result;
|
||||
|
|
@ -52,6 +53,7 @@ create_scaled_font (cairo_t * cr)
|
|||
cairo_scaled_font_t *scaled_font;
|
||||
cairo_font_options_t *font_options;
|
||||
cairo_matrix_t font_matrix, ctm;
|
||||
cairo_status_t status;
|
||||
double pixel_size;
|
||||
|
||||
font_options = cairo_font_options_create ();
|
||||
|
|
@ -59,6 +61,8 @@ create_scaled_font (cairo_t * cr)
|
|||
cairo_get_font_options (cr, font_options);
|
||||
|
||||
pattern = FcPatternCreate ();
|
||||
if (pattern == NULL)
|
||||
return CAIRO_STATUS_NO_MEMORY;
|
||||
|
||||
FcPatternAddString (pattern, FC_FAMILY, (FcChar8 *)"Nimbus Sans L");
|
||||
FcPatternAddDouble (pattern, FC_PIXEL_SIZE, TEXT_SIZE);
|
||||
|
|
@ -68,6 +72,10 @@ create_scaled_font (cairo_t * cr)
|
|||
|
||||
FcDefaultSubstitute (pattern);
|
||||
resolved = FcFontMatch (NULL, pattern, &result);
|
||||
if (resolved == NULL) {
|
||||
FcPatternDestroy (pattern);
|
||||
return CAIRO_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
/* set layout to vertical */
|
||||
FcPatternDel (resolved, FC_VERTICAL_LAYOUT);
|
||||
|
|
@ -93,14 +101,22 @@ create_scaled_font (cairo_t * cr)
|
|||
FcPatternDestroy (pattern);
|
||||
FcPatternDestroy (resolved);
|
||||
|
||||
return scaled_font;
|
||||
status = cairo_scaled_font_status (scaled_font);
|
||||
if (status) {
|
||||
cairo_scaled_font_destroy (scaled_font);
|
||||
return status;
|
||||
}
|
||||
|
||||
*out = scaled_font;
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static cairo_test_status_t
|
||||
draw (cairo_t *cr, int width, int height)
|
||||
{
|
||||
cairo_text_extents_t extents;
|
||||
cairo_scaled_font_t * scaled_font;
|
||||
cairo_scaled_font_t *scaled_font;
|
||||
cairo_status_t status;
|
||||
const char text[] = "i-W";
|
||||
double line_width, x, y;
|
||||
|
||||
|
|
@ -112,7 +128,12 @@ draw (cairo_t *cr, int width, int height)
|
|||
cairo_paint (cr);
|
||||
cairo_restore (cr);
|
||||
|
||||
scaled_font = create_scaled_font (cr);
|
||||
status = create_scaled_font (cr, &scaled_font);
|
||||
if (status) {
|
||||
return cairo_test_status_from_status (cairo_test_get_context (cr),
|
||||
status);
|
||||
}
|
||||
|
||||
cairo_set_scaled_font (cr, scaled_font);
|
||||
|
||||
cairo_set_line_width (cr, 1.0);
|
||||
|
|
|
|||
|
|
@ -42,8 +42,9 @@ static const cairo_test_t test = {
|
|||
draw
|
||||
};
|
||||
|
||||
static cairo_scaled_font_t *
|
||||
create_scaled_font (cairo_t * cr)
|
||||
static cairo_status_t
|
||||
create_scaled_font (cairo_t * cr,
|
||||
cairo_scaled_font_t **out)
|
||||
{
|
||||
FcPattern *pattern, *resolved;
|
||||
FcResult result;
|
||||
|
|
@ -51,6 +52,7 @@ create_scaled_font (cairo_t * cr)
|
|||
cairo_scaled_font_t *scaled_font;
|
||||
cairo_font_options_t *font_options;
|
||||
cairo_matrix_t font_matrix, ctm;
|
||||
cairo_status_t status;
|
||||
double pixel_size;
|
||||
|
||||
font_options = cairo_font_options_create ();
|
||||
|
|
@ -58,6 +60,8 @@ create_scaled_font (cairo_t * cr)
|
|||
cairo_get_font_options (cr, font_options);
|
||||
|
||||
pattern = FcPatternCreate ();
|
||||
if (pattern == NULL)
|
||||
return CAIRO_STATUS_NO_MEMORY;
|
||||
|
||||
FcPatternAddString (pattern, FC_FAMILY, (FcChar8 *)"Bitstream Vera Sans");
|
||||
FcPatternAddDouble (pattern, FC_PIXEL_SIZE, TEXT_SIZE);
|
||||
|
|
@ -67,6 +71,10 @@ create_scaled_font (cairo_t * cr)
|
|||
|
||||
FcDefaultSubstitute (pattern);
|
||||
resolved = FcFontMatch (NULL, pattern, &result);
|
||||
if (resolved == NULL) {
|
||||
FcPatternDestroy (pattern);
|
||||
return CAIRO_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
/* set layout to vertical */
|
||||
FcPatternDel (resolved, FC_VERTICAL_LAYOUT);
|
||||
|
|
@ -92,14 +100,22 @@ create_scaled_font (cairo_t * cr)
|
|||
FcPatternDestroy (pattern);
|
||||
FcPatternDestroy (resolved);
|
||||
|
||||
return scaled_font;
|
||||
status = cairo_scaled_font_status (scaled_font);
|
||||
if (status) {
|
||||
cairo_scaled_font_destroy (scaled_font);
|
||||
return status;
|
||||
}
|
||||
|
||||
*out = scaled_font;
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static cairo_test_status_t
|
||||
draw (cairo_t *cr, int width, int height)
|
||||
{
|
||||
cairo_text_extents_t extents;
|
||||
cairo_scaled_font_t * scaled_font;
|
||||
cairo_scaled_font_t *scaled_font;
|
||||
cairo_status_t status;
|
||||
const char text[] = "i-W";
|
||||
double line_width, x, y;
|
||||
|
||||
|
|
@ -111,7 +127,12 @@ draw (cairo_t *cr, int width, int height)
|
|||
cairo_paint (cr);
|
||||
cairo_restore (cr);
|
||||
|
||||
scaled_font = create_scaled_font (cr);
|
||||
status = create_scaled_font (cr, &scaled_font);
|
||||
if (status) {
|
||||
return cairo_test_status_from_status (cairo_test_get_context (cr),
|
||||
status);
|
||||
}
|
||||
|
||||
cairo_set_scaled_font (cr, scaled_font);
|
||||
|
||||
cairo_set_line_width (cr, 1.0);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue