[cairo] scale with text

Tobias Ceglarek dev at ceglarek.eu
Wed Feb 28 09:16:10 PST 2007


On Fri, 2007-02-23 at 20:53 +0000, Damon Chaplin wrote:
> On Fri, 2007-02-23 at 19:14 +0100, Tobias Ceglarek wrote:
> > > > 1. Turn off the hinting
> > > > 
> > > >    You can do this with cairo_font_options_set_hint_style and
> > > >    cairo_font_options_set_hint_metrics. See the example I attached
> > > >    below for details. (And note that I also explicitly set
> > > >    ANTIALIAS_GRAY since you really don't want ANTIALIAS_SUBPIXEL
> > > >    without hinting).
> > > > 
> > > >    This is the right answer if you want to be able to scale without
> > > >    any change in shape, (for example, if you're animating a zoom with
> > > >    text, the changes in shape and position can be very
> > > >    undesirable). But, without hinting, text can also be much less
> > > >    legible, so it's not necessarily always the right thing.
> > > 
> > > For me this is the best/quickest solution. Thank you very very much for
> > > your help!!!
> > 
> > :-(
> > 
> > I have detect a difficulty. Yet I have testet my scenario with pygtk: a
> > drawingarea in a window.
> > 
> > Now I have inserted the drawingarea in a viewport, the viewport in a
> > scrolledwindow, the scrolledwindow in a vbox an the vbox in the window.
> > 
> > suddenly the settings
> > 
> > ...
> > set_hint_style (cairo.HINT_STYLE_NONE)
> > set_hint_metrics (cairo.HINT_METRICS_OFF)
> > fopt.set_antialias (cairo.ANTIALIAS_GRAY)
> > ...
> > 
> > seem to be overwritten. My problem is present again.
> 
> Are you using Pango? If you are, you need to set the font options on the
> pango context rather than the cairo context (this one took me ages to
> figure out):
> 
>   font_options = cairo_font_options_create ();
>   cairo_font_options_set_hint_metrics (font_options,
>                                        CAIRO_HINT_METRICS_OFF);
>   cairo_font_options_set_hint_style (font_options,
>                                      CAIRO_HINT_STYLE_NONE);
>   context = pango_layout_get_context (layout);
>   pango_cairo_context_set_font_options (context, font_options);
>   cairo_font_options_destroy (font_options);
> 
> Damon
> 
> 

I have figured out it now. You are right. I have done it too
complicated.

Now I use a textbuffer with a textview. Pygtk then uses cairo
automaticly!

Now I am working on a printing tool with the ability to print exactly
what I see in the textview.

I have not discovered the optimal way to do this .. but I am on the way.

Can I change the surface of
textview.get_window(gtk.TEXT_WINDOW_TEXT).cairo_create() (this is the
context of the textbuffer)?

Or have I create a new context?

Best,

Tobias



More information about the cairo mailing list