<div dir="ltr"><div><font face="verdana,sans-serif">Hi all,</font></div>
<div><font face="Verdana"></font>&nbsp;</div>
<div><font face="Verdana">I&#39;m trying to optimize the &quot;cairo_show_text&quot; for the &quot;DirectFB/freetype&quot; backend.</font></div>
<div><font face="Verdana">So I added the following function to the cairo-directfb-surface.c.</font></div>
<div><font face="Verdana"></font>&nbsp;</div>
<div><font face="Verdana">It compiles fine.</font></div>
<div><font face="Verdana"></font>&nbsp;</div>
<div><font face="Verdana">but calling it from the cairo_show_text,</font></div>
<div><font face="Verdana"></font>&nbsp;</div>
<div><font face="Verdana">I got the &quot;printf&quot;&nbsp; put at the end of the function but NOTHING on the screen.</font></div>
<div><font face="Verdana"></font>&nbsp;</div>
<div><font face="Verdana">any Idea?</font></div>
<div><font face="Verdana"></font>&nbsp;</div>
<div><font face="Verdana">Notice:</font></div>
<div><font face="Verdana"></font>&nbsp;</div>
<ul>
<li><font face="Verdana">&nbsp;I took the same code of &quot;</font><font face="Courier New">_cairo_directfb_surface_show_glyphs&quot; </font><font face="verdana,sans-serif">and juste modified it a bit to call the DrawString.</font></li>

<li><font face="Verdana">&nbsp;I don&#39;t know how to set the Font File so I setting it in a envirement Variable.</font></li>
<li><font face="Verdana">I failed to enable the debug messages from cairo. Do they need the build to be in debug mode ?</font></li></ul>
<div><font face="Verdana">regards.</font></div>
<div>&nbsp;</div>
<div><font face="courier new,monospace"></font>&nbsp;</div>
<div><font face="courier new,monospace"></font>&nbsp;</div>
<div><font face="courier new,monospace">_cairo_directfb_surface_show_text (cairo_surface_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *surface,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cairo_operator_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cairo_pattern_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *pattern,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *utf8,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cairo_scaled_font_t&nbsp; *scaled_font)<br>
{<br>&nbsp;&nbsp;&nbsp; cairo_directfb_surface_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *dst = surface;<br>&nbsp;&nbsp;&nbsp; cairo_directfb_font_cache_t&nbsp;&nbsp; *cache;<br>&nbsp;&nbsp;&nbsp; cairo_status_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret;<br>&nbsp;&nbsp;&nbsp; DFBSurfaceBlittingFlags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flags;<br>&nbsp;&nbsp;&nbsp; DFBSurfaceBlendFunction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sblend;<br>
&nbsp;&nbsp;&nbsp; DFBSurfaceBlendFunction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dblend;<br>&nbsp;&nbsp;&nbsp; DFBColor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; color;<br>&nbsp;&nbsp;&nbsp; /********** SEE the _cairo_directfb_surface_show_glyphs *********<br>&nbsp;&nbsp;&nbsp;&nbsp; * going to call the IDirectFBSurface-&gt;DrawString(...)<br>
&nbsp;&nbsp;&nbsp;&nbsp; * need to prepare the font<br>&nbsp;&nbsp;&nbsp;&nbsp; * the drawing flags<br>&nbsp;&nbsp;&nbsp;&nbsp; * the font size */<br>&nbsp;&nbsp;&nbsp;&nbsp; if (pattern-&gt;type != CAIRO_PATTERN_TYPE_SOLID)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return CAIRO_INT_STATUS_UNSUPPORTED;</font></div>
<p><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp; if (_directfb_get_operator (op, &amp;sblend, &amp;dblend) ||<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sblend == DSBF_DESTALPHA || sblend == DSBF_INVDESTALPHA)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return CAIRO_INT_STATUS_UNSUPPORTED;<br>
/*<br>&nbsp;&nbsp;&nbsp; ret = _directfb_acquire_font_cache (dst, scaled_font, glyphs, num_glyphs,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;cache, &amp;rects[0], &amp;points[0], &amp;num);<br>&nbsp;&nbsp;&nbsp; if (ret) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ret == CAIRO_INT_STATUS_NOTHING_TO_DO)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = CAIRO_STATUS_SUCCESS;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ret;<br>&nbsp;&nbsp;&nbsp; }<br>*/</font></p>
<p><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; color.a = ((cairo_solid_pattern_t *)pattern)-&gt;color.alpha_short &gt;&gt; 8;<br>&nbsp;&nbsp;&nbsp; color.r = ((cairo_solid_pattern_t *)pattern)-&gt;color.red_short&nbsp;&nbsp; &gt;&gt; 8;<br>&nbsp;&nbsp;&nbsp; color.g = ((cairo_solid_pattern_t *)pattern)-&gt;color.green_short &gt;&gt; 8;<br>
&nbsp;&nbsp;&nbsp; color.b = ((cairo_solid_pattern_t *)pattern)-&gt;color.blue_short&nbsp; &gt;&gt; 8;</font></p>
<p><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; flags = DSBLIT_BLEND_ALPHACHANNEL | DSBLIT_COLORIZE;<br>&nbsp;&nbsp;&nbsp; if (color.a != 0xff)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flags |= DSBLIT_BLEND_COLORALPHA;</font></p>
<p><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; if (!_directfb_argb_font) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (sblend == DSBF_ONE) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sblend = DSBF_SRCALPHA;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dblend == DSBF_ZERO)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dblend = DSBF_INVSRCALPHA;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; dst-&gt;dfbsurface-&gt;SetBlittingFlags (dst-&gt;dfbsurface, flags);<br>&nbsp;&nbsp;&nbsp; dst-&gt;dfbsurface-&gt;SetSrcBlendFunction (dst-&gt;dfbsurface, sblend);<br>&nbsp;&nbsp;&nbsp; dst-&gt;dfbsurface-&gt;SetDstBlendFunction (dst-&gt;dfbsurface, dblend);<br>
&nbsp;&nbsp;&nbsp; dst-&gt;dfbsurface-&gt;SetColor (dst-&gt;dfbsurface, color.r, color.g, color.b, color.a);</font></p>
<p><font face="courier new,monospace">&nbsp;&nbsp;&nbsp; dst-&gt;dfbsurface-&gt;GetFont(dst-&gt;dfbsurface, &amp;font);<br>&nbsp;&nbsp;&nbsp; if (font == NULL)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DFBFontDescription font_dsc;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *defaultFont = getenv(&quot;DEFAULT_FONT_FILE&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;dst-&gt;dfbsurface-&gt;Getfont : returned NULL \n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dst-&gt;dfb-&gt;CreateFont (dst-&gt;dfb, ((defaultFont == NULL) ? &quot;./default.ttf&quot; : defaultFont), &amp;font_dsc, &amp;font);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dst-&gt;dfbsurface-&gt;SetFont(dst-&gt;dfbsurface, font);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; /*RUN_CLIPPED(dst, NULL,&nbsp; (dst-&gt;dfbsurface-&gt;DrawString(dst-&gt;dfbsurface, utf8, -1, (int)x, (int)y, DSTF_LEFT)));*/<br>&nbsp; dst-&gt;dfbsurface-&gt;DrawString(dst-&gt;dfbsurface, utf8, -1, (int)x, (int)y, DSTF_LEFT);<br>
printf(&quot;RMH : DrawString : %s , %d, %d\n&quot;, utf8, ((int)x), ((int)y));<br>&nbsp;&nbsp;&nbsp; return CAIRO_STATUS_SUCCESS;</font></p>
<p><font face="courier new,monospace">&nbsp;}<br></font></p></div>