Re: Font-related question...

Philip Schneider <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
OK, I think I understand part of this now. What I was doing was this:

	FT_Library  library;
	FT_Face     face;
        
 	int error = FT_Init_FreeType(&library);
	error = FT_New_Memory_Face(library,
 				   (const FT_Byte*)buffer.getData(),
				   498124,
				   0,
				   &face);
        
	cairo_font_face_t   *testFace = 0;
	cairo_scaled_font_t *testFont = 0;

        testFace = cairo_ft_font_face_create_for_ft_face(face, 0);
        
        cairo_matrix_t font_matrix;
        cairo_matrix_init_identity(&font_matrix);
        cairo_matrix_scale(&font_matrix, 19, 19);
        
        cairo_matrix_t ctm;
        cairo_matrix_init_identity(&ctm);
        
        cairo_font_options_t *options = cairo_font_options_create();
        
        testFont =  cairo_scaled_font_create(testFace,
                                             &font_matrix,
                                             &ctm,
                                             options);

But it seems you might be suggesting that this be used instead:

	FT_Library  library;
	FT_Face     face;
        
 	int error = FT_Init_FreeType(&library);
	error = FT_New_Memory_Face(library,
 				   (const FT_Byte*)buffer.getData(),
				   498124,
				   0,
				   &face);
        
	cairo_font_face_t   *testFace = 0;
	cairo_scaled_font_t *testFont = 0;

	testFace = cairo_ft_font_face_create_for_ft_face(face, 0);

	cairo_set_font_face(cr, testFace);

	cairo_set_font_size(cr, 19);

	// Can get the font pointer, if need be..
	testFont = cairo_get_scaled_font(cr);
        

OK…but while this second alternative may be effectively equivalent, my concern is more with memory footprint and performance…The docs say "A cairo_scaled_font_t is a font scaled to a particular size and device resolution. A cairo_scaled_font_t is most useful for low-level font usage where a library or application wants to cache a reference to a scaled font to speed up the computation of metrics."  This suggests to me that I could create my three different fonts at their three different sizes, and perhaps see improved performance for querying font metrics. I suppose the trade-off might be that maintaining three separate fonts would use up more memory…this is basically the motivation for my question… :-) I guess the time-vs-space tradeoff is something I'd have to measure myself...

-- Philip

On Mar 21, 2013, at 1:33 PM, Behdad Esfahbod <[email protected]> wrote:

> On 13-03-21 04:20 PM, Philip Schneider wrote:
>> Greetings -
>> 
>> The doc for cairo_scaled_font_create() suggests that the font_matrix can be
>> used to set the point size N (by making the matrix contain a scale of N). But
>> there's also cairo_set_font_size, which seems to act to replace the matrix one
>> has set in the creation call. If my application makes use of the same face,
>> but at say 3 font sizes (10, 16, 24), would it be better to create and retain
>> three separate instances (each at one of the three desired sizes), or just
>> create a single instance and use cairo_set_font_size() whenever I need to
>> switch between sizes?
> 
> Normally you shouldn't need to use cairo_scaled_font_create().  Cairo does
> that automatically for you.  cairo_set_font_size() is a convenience wrapper
> for cairo_set_font_matrix().
> 
> -- 
> behdad
> http://behdad.org/
>

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.