Re: improvement of font selection



Hello,

I filed your request as a bug here:

  http://bugzilla.gnome.org/show_bug.cgi?id=334392

Can you add yourself to the bug CC and also comment there about
what uses you see for this patch?

Thanks
behdad




On Mon, 13 Mar 2006, Kenichi Handa wrote:

> Hi,
>
> I'd like to suggest the attached patch to
> pango/pango-context.c.
>
> Pango's shaper engine (struct _PangoEngineShapeClass) can
> have a callback function "covers", but it seems that it is
> not utilized that much.  In the function
> get_shaper_and_font_foreach(), the return value of
> (PangoCoverageLevel) _pango_engine_shape_covers() is simply
> checked against PANGO_COVERAGE_NONE, and if any other value
> is returned, that font is accepted.
>
> I think it is better to try another font if
> PANGO_COVERAGE_FALLBACK or PANGO_COVERAGE_APPROXIMATE is
> returned here until PANGO_COVERAGE_EXACT is returned.
>
> That way, pango can use a font most preferred by a shaper
> engine while falling back to APPROXIMATE or FALLBACK font.
>
> What do you think?
>
> If the patch is accepted, the next step will be to modify
> each shape engine to supply proper "covers" function if the
> default "covers" function is not enough.  For instance,
> indic shaper should accept only proper OTFs.
>
> ---
> Kenichi Handa
> handa m17n org
>
> *** pango-context.c	04 Apr 2005 14:07:57 +0900	1.74
> --- pango-context.c	22 Jul 2005 16:59:41 +0900
> ***************
> *** 867,872 ****
> --- 867,873 ----
>     GSList *engines;
>     PangoEngineShape *shape_engine;
>     PangoFont *font;
> +   PangoCoverageLevel level;
>   } GetShaperFontInfo;
>
>   static gboolean
> ***************
> *** 884,894 ****
>
>         level = _pango_engine_shape_covers (engine, font,
>   					  info->lang, info->wc);
> !       if (level != PANGO_COVERAGE_NONE)
>   	{
>   	  info->shape_engine = engine;
>   	  info->font = g_object_ref (font);
> ! 	  return TRUE;
>   	}
>       }
>
> --- 885,899 ----
>
>         level = _pango_engine_shape_covers (engine, font,
>   					  info->lang, info->wc);
> !       if (level > info->level)
>   	{
>   	  info->shape_engine = engine;
> + 	  if (info->font)
> + 	    g_object_unref (info->font);
>   	  info->font = g_object_ref (font);
> ! 	  info->level = level;
> ! 	  if (level == PANGO_COVERAGE_EXACT)
> ! 	    return TRUE;
>   	}
>       }
>
> ***************
> *** 926,931 ****
> --- 931,937 ----
>     info.wc = wc;
>     info.shape_engine = NULL;
>     info.font = NULL;
> +   info.level = PANGO_COVERAGE_NONE;
>
>     info.engines = state->exact_engines;
>     if (state->enable_fallback)
> _______________________________________________
> gtk-i18n-list mailing list
> gtk-i18n-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtk-i18n-list
>
>

--behdad
http://behdad.org/

"Commandment Three says Do Not Kill, Amendment Two says Blood Will Spill"
	-- Dan Bern, "New American Language"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]