fvwm-workers@fvwm.org wrote:
> Actually, neither my solution nor Mikhael's work.  We forgot to
> consider tiled pixmap borders.  These have to be drawn in a single
> window in order to prevent seams between the pixmaps of the
> different windows (when resizing).

This would make it easier to implement colorset support for borders. I
know it wouldn't look all that good when resizing.

> To further complicate things,
> pixmap borders even may have an inner and outer relief.  The clean
> way to solve this requires
>
> With pixmap background:
>
>  8 invisible handles for the cursor shape
>  1 big window with the pixmap background
>  8 windows for the outer relief (4 sides + 4 corners)
>  8 windows for the inner relief
>  8 windows for the bevels
>  ----------------------------------------------------
>  = 33 windows

I don't think this will do it, the DepressableBorder style makes the
corner reliefs be inverted so the bit from the bevel to the corner can't
use the side reliefs. I think you need an extra four windows per corner
to get this right and still have a smooth background pixmap.

  Total: 49 windows!


There may be a way to reduce the total number of windows given that fvwm
only ever resizes or shades one window at a time. All the other windows
only need the frame window with a pixmap background (everything drawn in
it including bevels) and the 8 invisible cursor windows.  The window
being resized/shaded can have the extra windows necessary to do smooth
resizing

I think a working scheme might look like this:

At startup:
   create the extra windows, don't map them
     8 outer relief
     8 inner relief
     8 bevels
     4 depressed corner relief (only one corner is pressed at a time)
       these can be used to un-depress the corners if a side is
       depressed.

When adding a window
   create the frame window
   create a pixmap for it
   draw the background into the pixmap (XFillArea with a tiling GC)
   draw the reliefs into the pixmap
   set the frame window background from the pixmap
   do the mapping

When resizing/shading
   resize the extra windows
   create backround pixmaps for each and set
   reparent the extra windows in to the frame window
   restack the extra windows
   create the frame background pixmap from the colorset/tiled-pixmap
     without any frame marks
   set the new pixmap to the frame window (no need to refresh)
   perform the resize/shade loop
   create the frame background pixmap from the colorset/tiled-pixmap
     and include the relief marks for the new size
   unmap the 40 extra windows
   reparent them back to the root (optional I think)


I think you can restack windows before mapping them, hopefully this
means that a careful restack followed by mapping in the right order
would result in no visible sign that the extra windows had mapped over
the frame window reliefs and marks (it's going to be laborious to check).

I don't think you can use XMapSubWindows of the frame window since that
may map subwindows of the client (someone correct me please), if you
keep the decor window then it's OK and might make the restacking easier.

Unmapping the extra windows after the frame window has it's new
background set should also not give any visible sign that the extra
windows have gone away.

Cheers,
Tim.


--
Visit the official FVWM web page at <URL:http://www.fvwm.org/>.
To unsubscribe from the list, send "unsubscribe fvwm-workers" in the
body of a message to [EMAIL PROTECTED]
To report problems, send mail to [EMAIL PROTECTED]

Reply via email to