Re: proposal: gdk_draw_focus_rectangle
- From: Owen Taylor <otaylor redhat com>
- To: Hans Breuer <hans breuer org>
- Cc: gtk-devel-list gnome org
- Subject: Re: proposal: gdk_draw_focus_rectangle
- Date: 24 May 2001 12:24:23 -0400
Hans Breuer <hans breuer org> writes:
> To give you an impression of what is possible with standard
> GDI functions I've attached a small image.
> It contains vertical lines with all available linestyles.
> The border is drawn with DrawFocusRect().
Hmmm, this is pretty limiting. But I can't believe that it isn't
possible to draw a 1-pixel dotted line in Win32 at a somewhat
reasonable speed.
(Note that I'm pretty positive that drawing focus rectangles as a
series of points would be fast enough.)
One possibility, is that for rectangles and 1 pixel horizontal
and vertical lines, if you have a functional stipple implementation,
to draw solid lines with a 2 pixel
X
X
Stipple. In fact, we could probably even make gtk_default_draw_focus() do
this at the GTK+ level. (The current drawing under X isn't completely
satisfactory either.)
> >>From gtkstyle.c/gtk_default_draw_focus:
> >
> > if (detail && !strcmp (detail, "add-mode"))
> > gdk_gc_set_dashes (style->black_gc, 0, "\4\4", 2);
> > else
> > gdk_gc_set_dashes (style->black_gc, 0, "\1\1", 2);
> >
> >[ "add-mode" is basically unused ]
> >
> >So if you have to implement it with:
> >
> > You use the GDI dotted style if it is 4/4
> > You use the GDI "focus" style if it is 1/1
>
> The "focus" style isn't available for drawing lines with GDI (win9x).
>
> It is only available from DrawFocusRect(), which can't be (miss-)used
> to draw lines because of it's XOR semantics.
>
> IMO it would be a really small compromise to wrap the focus
> rectangle drawing into it's own gdk function, but obviously
> it is simplier to put all the burden on the non X backends ...
Suprisingly, I'm not actually out to screw the Win32 backend.
(If we didn't care about Win32, well, we wouldn't have incorporated
into the GTK+ tree, we wouldn't have spent the time to virtualize
GDK, and so forth.)
However, I think your proposal doesn't quite fit into the way
that GTK+/GDK works.
- GDK is about drawing graphics primitives
- These primitives should behave (as much as possible) the same on
all platforms.
- How widgets are drawn depends is up to the widget implementation
and theme.
So, either DrawFocus() is deterministic, and your proposal boils
down to adding a:
"draw a dotted xor'ed rectangle"
primitive to GDK, or you are proposing a drawing call that could
be different on different backends. Neither seems right to me.
Regards,
Owen
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]