Re: font size change only in large steps
Alois Treindl <[email protected]> Sat, 29 Sep 2018 10:52:00 +0200
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
I added font size changes to the example, and print extents with metric on and off. The problem which I am addressing appears: font size changes only in steps. 9.0 pt on Size: 49x7 9.0 pt off Size: 45.7764x7 9.1 pt on Size: 49x7 9.1 pt off Size: 45.7764x7 9.2 pt on Size: 49x7 9.2 pt off Size: 45.7764x7 9.3 pt on Size: 49x7 9.3 pt off Size: 45.7764x7 9.4 pt on Size: 49x7 9.4 pt off Size: 45.7764x7 9.5 pt on Size: 51x7 9.5 pt off Size: 50.5293x7 9.6 pt on Size: 51x7 9.6 pt off Size: 50.5293x7 9.7 pt on Size: 51x7 9.7 pt off Size: 50.5293x7 9.8 pt on Size: 51x7 9.8 pt off Size: 50.5293x7 9.9 pt on Size: 51x7 9.9 pt off Size: 50.5293x7 10.0 pt on Size: 51x7 10.0 pt off Size: 50.5293x7 I ran also the same example but with PDF surface, and get as output: ctest2 9.0 pt on Size: 45.4951x6.8125 9.0 pt off Size: 45.4951x6.8125 9.1 pt on Size: 45.4951x6.8125 9.1 pt off Size: 45.4951x6.8125 9.2 pt on Size: 45.4951x6.8125 9.2 pt off Size: 45.4951x6.8125 9.3 pt on Size: 45.4951x6.8125 9.3 pt off Size: 45.4951x6.8125 9.4 pt on Size: 45.4951x6.8125 9.4 pt off Size: 45.4951x6.8125 9.5 pt on Size: 50.5605x7.5625 9.5 pt off Size: 50.5605x7.5625 9.6 pt on Size: 50.5605x7.5625 9.6 pt off Size: 50.5605x7.5625 9.7 pt on Size: 50.5605x7.5625 9.7 pt off Size: 50.5605x7.5625 9.8 pt on Size: 50.5605x7.5625 9.8 pt off Size: 50.5605x7.5625 9.9 pt on Size: 50.5605x7.5625 9.9 pt off Size: 50.5605x7.5625 10.0 pt on Size: 50.5605x7.5625 10.0 pt off Size: 50.5605x7.5625 with PDF, metrics on or off makes no difference. But the font size changes are in steps. On 29.09.18 08:12, Uli Schlachter wrote: Hi, On 28.09.2018 14:10, Alois Treindl wrote: I noticed that cairo does not allow me to set a precise font size, like 9.4 pt or 9.7 pt. What I get is exactly the same font size, for a range of font sizes. Try disabling metrics hinting via CAIRO_HINT_METRICS_OFF. See the attached example program. Per the docs, this metrics hinting quantizises font metrics so that they are integer values in device space, i.e. does exactly what you are trying to get rid of. You might also want to do cairo_font_options_set_hint_style(opt, CAIRO_HINT_STYLE_NONE), depending on, well, if you want the font outlines to be hinted or not. Cheers, Uli -- cairo mailing list [email protected] https://lists.cairographics.org/mailman/listinfo/cairo
ctest1.c
(text/plain, 984 B)
#include <cairo.h>
#include <stdio.h>
static void measure(cairo_t *cr, char *s)
{
cairo_text_extents_t exts;
cairo_text_extents(cr, "Some text", &exts);
printf("%s Size: %gx%g", s, exts.width, exts.height);
}
int main()
{
int i;
char t[80];
double pt;
cairo_surface_t *s = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1000, 1000);
cairo_t *cr = cairo_create(s);
cairo_font_options_t *opt, *opt0 = cairo_font_options_create();
cairo_get_font_options(cr, opt0);
opt = cairo_font_options_copy(opt0);
cairo_font_options_set_hint_metrics(opt, CAIRO_HINT_METRICS_OFF);
for (i = 90; i <= 100; i++) {
pt = i * 0.1;
cairo_set_font_size(cr, pt);
cairo_set_font_options(cr, opt0);
sprintf(t, "%.1lf pt on ", pt);
measure(cr, t);
cairo_set_font_options(cr, opt);
sprintf(t, "\t%.1lf pt off ", pt);
measure(cr, t);
printf("\n");
}
cairo_font_options_destroy(opt);
cairo_destroy(cr);
cairo_surface_destroy(s);
return 0;
}