Re: Howto use a GdkFont in Cairo?
- From: "Clemens Eisserer" <linuxhippy gmail com>
- To: gtk-list gnome org
- Subject: Re: Howto use a GdkFont in Cairo?
- Date: Fri, 8 Feb 2008 18:45:49 +0100
Sorry for disturbing again,
> GdkFont is from a very old era, predating inovations like Xft, Pango or
> cairo. Most propably you want to use
> pango_cairo_show_layout_line() and friends.
For me the lines of code that drive me crazy are below.
Maybe they return a GdkFont only because they don't want to break the ABI?
I am a bit confused about the intention of the code below:
1.) If the current private_font_desc and the public font_desc free
both and set them null?
2.) If the private font is null, load a new one / copy the existing?
Why is everything done twice for font_desc and font and why are there
public and private font/font_desc fields?
Wouldn't it be ok, to simply return private_font_desc instead of
private_font and pass that to cairo?
The code:
static GdkFont *
gtk_style_get_font_internal (GtkStyle *style)
{
  g_return_val_if_fail (GTK_IS_STYLE (style), NULL);
  if (style->private_font && style->private_font_desc)
    {
      if (!style->font_desc ||
	  !pango_font_description_equal (style->private_font_desc, style->font_desc))
	{
	  gdk_font_unref (style->private_font);
	  style->private_font = NULL;
	
	  if (style->private_font_desc)
	    {
	      pango_font_description_free (style->private_font_desc);
	      style->private_font_desc = NULL;
	    }
	}
    }
  if (!style->private_font)
    {
      GdkDisplay *display;
      if (style->colormap)
	{
	  display = gdk_screen_get_display (gdk_colormap_get_screen (style->colormap));
	}
      else
	{
	  display = gdk_display_get_default ();
	  GTK_NOTE (MULTIHEAD,
		    g_warning ("gtk_style_get_font() should not be called on an
unattached style"));
	}
      if (style->font_desc)
	{
	  style->private_font = gdk_font_from_description_for_display
(display, style->font_desc);
	  style->private_font_desc = pango_font_description_copy (style->font_desc);
	}
      if (!style->private_font)
	style->private_font = gdk_font_load_for_display (display, "fixed");
      if (!style->private_font)
	g_error ("Unable to load \"fixed\" font");
    }
  return style->private_font;
}
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]