[cairo] How to render 1bpp bitmaps normally & selected (in GTK+ 3)
Maarten Bosmans
mkbosmans at gmail.com
Tue Jul 12 01:47:17 PDT 2011
2011/7/11 Mark Leisher <mleisher at gmail.com>:
> On 07/11/2011 12:40 PM, Maarten Bosmans wrote:
>>
>> 2011/7/11 Mark Leisher<mleisher at gmail.com>:
>>>
>>> It took a while to piece this together, so for future reference.
>>>
>>> Is there a more elegant solution?
>>
>> From the subject it seems that you want the bitmap to draw inverted
>> when the widget is selected. Why don't you just give the right
>> GtkStateFlags to gtk_style_context_get_color? That would take care of
>> the right forground/background colors for normal/selected and gives a
>> result more consistent with the current theme.
>>
>
> What I'm working on is porting
> http://www.math.nmsu.edu/~mleisher/Software/gbdfed to Gtk+ 3. I need to be
> able to select/deselect individual glyph bitmaps in discrete rectangular
> areas. Sort of like a spreadsheet for glyph bitmaps. Selected is not really
> a state that applies to this custom widget as a whole.
Ah, right. That provides a useful bit of context.
I still think you should use the correct gtk style instead of just
inverting. Something like:
if (invert)
state = GTK_STATE_FLAG_SELECTED;
else
state = GTK_STATE_FLAG_NORMAL;
gtk_style_context_get_background_color(ctx,flag,&c);
cairo_set_source_rgb(cr,c.red,c.green,c.blue);
cairo_rectangle(cr, 1, 1, 13, 22);
cairo_fill(cr);
gtk_style_context_get_color(ctx,flag,&c);
cairo_set_source_rgb(cr,c.red,c.green,c.blue);
cairo_mask_surface(cr,s,2.0,1.0);
> In response to your reply on gtk-list:
>
> 1. You mention the XOR operator. I never could get it to work (OpenSuSE 11.4
> 32-bit/Gtk+ 3.0.10/cairo 1.10.2) and never managed to dig up any examples
> that did. The DIFFERENCE operator worked exactly as advertised, but it
> wasn't quite what I was looking for. Before I dig into the cairo sources,
> any pointers to XOR examples that work?
No, never used it, so I'm not sure if/how it works. It's a bit of an
old school operation that's not that useful most of the times anyway.
> 2. The rectangle geometry and bitmap offsets are just chosen as an example
> "cell" in the "spreadsheet."
Rather than drawing the background rectangle with cairo, consider
using gtk's paint functions like gtk_render_background, which give a
nice themed selection background.
> Mark Leisher
Maarten
More information about the cairo
mailing list