Hi, Thanks for your replay, attached png example I managed to reproduce it with GtkFixed and 2 GtkLabels but this can not support ellipsize in a trivial way (one will have to manage ellipsize logic and call set_size_request )
BTW, if you evet get carries away with the SVG filters, please let us know :) Regards, Jonathan On Wed, Mar 11, 2009 at 6:43 AM, Dov Grobgeld <dov.grobg...@gmail.com>wrote: > Please create a snapshot of what you mean and preferably also with what > you expect. > > There are two things to note here though: > > - Antialiasing creates additional gray levels that are a mixture of the > background and the color you chose. > - One pixel shift is far too little to create a visible drop shadow. > You need at least 5 pixels. > > Related to this I started thinking that it would be cool to create a label > that would implement at least some of the effects of SVG filters, see > http://www.w3.org/TR/SVG/filters.html , with the effect applied controlled > by properties and style sheets. But I guess that I am being carried away. > :-) > > Regards, > Dov > > 2009/3/11 jonathan david <jod...@gmail.com> > > Hi, >> I am trying to follow your example to render another font variant: I need >> font with 2 colors and 1pixel shift in x,y between each color >> that would create a shadow. >> >> cairo_t *cr = gdk_cairo_create(widget->window); >> PangoLayout *layout = gtk_label_get_layout(GTK_LABEL(widget)); >> int width=-1, height=-1; >> >> pango_layout_get_size(layout, &width, &height); >> /* add 1 pixel to x and y and draw white shadow */ >> cairo_move_to(cr, widget->allocation.x + >> (widget->allocation.width - width / PANGO_SCALE) / 2 +1, >> height / PANGO_SCALE / 2 +1); >> cairo_set_source_rgb(cr, 1, 1, 1); >> cairo_set_line_width(cr, 1.0); >> pango_cairo_show_layout(cr, layout); >> pango_cairo_layout_path(cr, layout); >> cairo_stroke(cr); >> >> /* draw black font */ >> cairo_set_source_rgb(cr, 0, 0, 0); >> cairo_set_line_width(cr, 1.0); >> cairo_move_to(cr, widget->allocation.x + >> (widget->allocation.width - width / PANGO_SCALE) / 2, >> height / PANGO_SCALE / 2); >> cairo_set_line_join(cr, CAIRO_LINE_JOIN_BEVEL); >> pango_cairo_layout_path(cr, layout); >> cairo_stroke(cr); >> >> the problem is that I get blurred fonts. >> >> when I draw only one of the colors - the font looks blurred at the >> edges, I need all the pixels to be in the same color but what I get is >> black in the middle and gray edges >> when I draw the 2 colors one over the other - I get smudged font, looks >> line the white background emerges through the black foreground >> >> I tried calling cairo_set_line_join with all options but I am probably >> missing something with the font definition >> >> Thanks for your help, >> Jonathan >> >> >> >> >> 2009/3/7 Dov Grobgeld <dov.grobg...@gmail.com> >> >>> Note that it is not completely trivial to use pango_show_layout_line >>> instead of pango_show_layout as they have different anchor points. >>> pango_show_layout draws with the current point at the upper logical extent >>> of the layout, and pango_show_layout_line draws with respect to the baseline >>> of the text. See: >>> >>> http://live.gnome.org/PangoLayoutLineBbox >>> >>> Thus it does not make sense to create a binding for just one of them. >>> >>> Regards, >>> Dov >>> >>> 2009/3/7 Chris Vine <ch...@cvine.freeserve.co.uk> >>> >>> On Fri, 06 Mar 2009 12:14:53 +0100 >>>> Christian Schaubschlaeger <c...@gup.uni-linz.ac.at> wrote: >>>> > Dov Grobgeld schrieb: >>>> > > I cleaned up my example a bit and put it in GnomeLive. See: >>>> > > >>>> > > http://live.gnome.org/OutlineLabel >>>> > >>>> > Thanks for the example! >>>> > I'm just trying to port it to gtkmm. Unfortunately I >>>> > cannot find the corresponding C++ construct for the >>>> > "Pango.cairo_show_layout()" call in Dov's Vala code. >>>> > Would that be a pangocairo function? I could not find >>>> > C++ bindings for the pangocairo lib. Are there any? >>>> > However, I'm not sure if the code snippet below is >>>> > correct at all, I'm (unfortunately) new to Pango and >>>> > Cairo... >>>> > >>>> > Thanks and best regards >>>> > Christian >>>> > >>>> > bool >>>> > OutlineLabel::on_expose(GdkEventExpose *event) >>>> > { >>>> > //Gdk::cairo_create(this->window); >>>> > Cairo::RefPtr<Cairo::ImageSurface> surface; >>>> > Cairo::RefPtr<Cairo::Context> cr; >>>> > Glib::RefPtr<Pango::Layout> layout; >>>> > int width,height; >>>> > >>>> > layout = this->get_layout(); >>>> > width = -1; height = -1; >>>> > layout->get_size(width,height); >>>> > >>>> > surface = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, >>>> > width, height); cr = Cairo::Context::create(surface); >>>> > >>>> cr->move_to((this->get_allocation().get_width()-width/Pango::SCALE)/2,0); >>>> > cr->set_sorce_rgba(1,0,0,1); >>>> > >>>> > // in VALA: Pango.cairo_show_layout(cr,layout); >>>> > // in C++? >>>> > ... >>>> > >>>> > } >>>> >>>> pango_cairo_show_layout() does not appear to be wrapped, but >>>> pango_cairo_show_layout_line() is (as >>>> Pango::LayoutLine::show_in_cairo_context()), so I suggest you use that >>>> with Pango::Layout::get_line() and/or Pango::Layout::get_lines(). >>>> >>>> Chris >>>> >>> >>> >>> _______________________________________________ >>> gtk-list mailing list >>> gtk-list@gnome.org >>> http://mail.gnome.org/mailman/listinfo/gtk-list >>> >>> >> >
<<attachment: Shift.PNG>>
_______________________________________________ gtk-list mailing list gtk-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-list