Re: font size change only in large steps
Alois Treindl <[email protected]> Sat, 29 Sep 2018 10:57:35 +0200
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
sorry, sent html message again which this list dos not accept. I send a second time. ---- 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;
}