Re: "undrawing" a line



Davina Armstrong wrote:
> 
> I posted earlier that I was trying to draw decorations around a GtkLabel
> (which is actually part of a composite widget I wrote that packs a
> GtkLabel and GtkEntry into a GtkHBox), which I've done successfully -
> thanks.  The idea is that I want the decorations to be drawn when
> MyWidget gets focus, and "undraw" them when it loses the focus.  I wrote
> the following draw_focus function, which is called from
> my_widget_focus_in() and my_widget_focus_out():
> 
> static void my_widget_draw_focus(GtkWidget* widget)
> {
>     g_return_if_fail(widget != NULL);
>     g_return_if_fail(IS_MY_WIDGET(widget));
> 
>     if (GTK_WIDGET_HAS_FOCUS(widget)) {
>         /* draw the decoration */
>     } else {
>         gtk_widget_draw(widget, NULL);
>     }
> }
> 
> The decorations draw when MyWidget gets focus, but don't go away when it
> loses the focus.  I've verified that gtk_widget_draw() is being called.
> Can anyone tell me what I'm doing wrong?
> 
> Thanks!
> Davina


Davina,

My guess is that the extra decorations don't go away because the
gtk_widget_draw doesn't erase any of the backgrounds your decorations
are drawn on -- they normally come erased for you in the exposure
callback. You could easily verify this by de-focusing your widget and
causing it to redraw by invalidating it by another window. The part that
you invalidate should redraw without the decorations.

Pavel




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