Re: CVS olicha: * Fixed transparent animated menu

2002-01-07 Thread Dmitry Yu. Bolkhovityanov
Hi!

Nice to hear that fvwm will have support for that fancy 
transparency feature.  Just a few comments.

On Sat, 5 Jan 2002, Dominik Vogt wrote:

[SNIP]
  Unfortunately, it does not seems that there is a standard
  for this but some programs use the ESETROOT_PMAP_ID and the
  _XROOTPMAP_ID atoms.
 
 Anyway, ParentRelative doe not really give transparency for top
 level windows.  You don't see what is behind the window, only the
 contents of the root window there.  

Of course, ParentRelative gives you not the contents of the
parent window, but only its BackgroundPixmap with a correct offset.  So,
if there's something more than just a wallpaper on a root window (e.g.
Windoze-style icons/shortcuts), they aren't copied.  Of course, unless
they are drawn on the same pixmap that is a BackgroundPixmap.

[SNIP]
  In any case, a pixmap copy of the root window may be better
  than the ParentRelative pixmap under certain situation.
 
 Both approchaes have one big problem:  X doesn't do the updates
 itself.  When you move a 'transparent' window, X moves whatever
 background it has.  You have to redraw the background yourself.
 This looks very unpleasant.  The right way to do transparency in X
 is to use the Shape extension.  But then, applications have to be
 specifically written to use it.

You don't have to redraw the background yourself, all you have to
do is call XClearArea().  The server will update the background itself and
send you an ExposeEvent, upon receipt of which the app should only redraw
all foreground elements.  

I.e., in no case should the app redraw the background -- if either
the BackgroundPixmap or BackgroundPixel are specified, the server will do
the dirty work itself.  This feature significantly improves performance,
especially if the server and the app are on different machines.  The only
exception is when BackgroundPixmap=None, but that means that app knows
what it is doing.

[SNIP] 
 Also, remember that a copy of the screen can be very big:i
 1600x1200 pixels with 32 bit planes = 7.5 MB.  That's the reason
 why I did not go this way in the past.
 
  But what do you mean by double buffer.
 
 Keep a copy of the screen in a pixmap, draw into the pixmap, then
 copy the pixmap (or parts of it) onto the screen.

There's an extension of double buffering: when the same pixmap is
used as a BackgroundPixmap and as a shadow buffer.  In that case one has
to manually copy parts of that pixmap onto the screen only upon changes,
and all the subsequent redraws are done by the server -- the app may
completely ignore Expose events for such shadow-buffered windows.

As to ParentRelative in general: I've tried to use it in Motif
apps to make nice wallpapered dialog windows.  This feature *is* useful,
since you don't have to manually put/assign parent's background pixmap to
all widgets (labels, checkboxes etc.).  But a lot of work yet have to be
done by the program, since the top/bottom shadows, focused widget
rectangles etc. should be correctly generated taking the background into
account.

_
  Dmitry Yu. Bolkhovityanov
  The Budker Institute of Nuclear Physics
  Novosibirsk, Russia

--
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]


Re: CVS olicha: * Fixed transparent animated menu

2002-01-05 Thread Dominik Vogt
On Sat, Jan 05, 2002 at 12:50:44AM +0100, Olivier Chapuis wrote:
 On Fri, Jan 04, 2002 at 06:27:43PM +0100, Dominik Vogt wrote:
  On Fri, Jan 04, 2002 at 05:52:36PM +0100, Olivier Chapuis wrote:
   On Fri, Jan 04, 2002 at 02:23:55PM +0100, Dominik Vogt wrote:
On Fri, Jan 04, 2002 at 07:08:45AM -0600, fvwm-workers wrote:
 CVSROOT:  /home/cvs/fvwm
 Module name:  fvwm
 Changes by:   olicha  02/01/04 07:08:45
 
 Modified files:
   .  : ChangeLog 
   fvwm   : menus.c menus.h move_resize.c move_resize.h 
 
 Log message:
 * Fixed transparent animated menu
 * The result is not perfect with big menu, do I have to add a new
 menu style AnimatedTransparentUpdate pix ?

What would that style do?
   
   
   Hum, I do not know exactly. With big menus redrawing the menu during
   the animation take some times (maybe some improvement is possible
   in ParentalMenuRePaint). Even with a very few animation step this
   gives an hashed animation. So, my idea was to skip some of the redraw,
   but I am afraid that there is no good solution. Any suggestions is
   welcome.
  
  I wouldn't put much effort into transparency.  X has no proper
  implementation, so you'd have to write it yourself.
 
 Yes, but I think it will be great that colorsets work everywhere
 as it is possible and Parental Relativity seems to give not so
 bad results. The main problem (for me) is window background
 update, but it is possible to fix this: xpmroot may send a
 message to the root window, then fvwm2 can get this message
 and ask the modules to update the transparent colorset.

Hm, seems to be worth a try.

 Unfortunately, it does not seems that there is a standard
 for this but some programs use the ESETROOT_PMAP_ID and the
 _XROOTPMAP_ID atoms.

Anyway, ParentRelative doe not really give transparency for top
level windows.  You don't see what is behind the window, only the
contents of the root window there.  

  The only
  thing I can think of is to double buffer the whole screen in a
  pixmap, calculate the animation in the pixmap and then copy the
  changed parts onto the screen (with the server grabbed).
 
 How can you dump the whole screen in a pixmap? If I use XCopyArea
 then the areas of the root window where there is a window is black.
 I try something like that:
 
 pix = XCreatePixmap(dpy, win, screen_w, screen_h, Pdepth);
 XGrabServer(dpy);
 XCopyArea(dpy, Root, pix, gc, 0, 0, screen_w, screen_h, 0, 0);
 XUngrabServer(dpy)

Good question.

*** 10 minutes later ***

If you set the subwindow_mode member of the used GC to
IncludeInferiors, XCopyArea copies what's actually visible.  I
verified this with these lines:

  XSetSubwindowMode(dpy, Scr.TitleGC, IncludeInferiors);
  XCopyArea(dpy, Scr.Root, Scr.Root, Scr.TitleGC, 0, 0, 100, 100, 500, 0);
  XSetSubwindowMode(dpy, Scr.TitleGC, ClipByChildren);

  I guess
  some other window managers are already doing this. Enlightenment
  has a nice feature:  You can move a window with partial
  transparency so you can see through the window while you move it.
  But that is quite slow and probably uses a lot of memory.
 
 
 I think that  Enlightenment use the ESETROOT_PMAP_ID and the
 _XROOTPMAP_ID atoms which give the id of a pixmap which is a
 copy of the root window (KDE2 use these atoms too). Maybe we can
 add EsetRoot as a pixmap argument for FvwmTheme?

That's not what I meant.  This is not real transparency because
you can only see the root window through the transparent parts,
not the windows that are in between.

 In any case, a pixmap copy of the root window may be better
 than the ParentRelative pixmap under certain situation.

Both approchaes have one big problem:  X doesn't do the updates
itself.  When you move a 'transparent' window, X moves whatever
background it has.  You have to redraw the background yourself.
This looks very unpleasant.  The right way to do transparency in X
is to use the Shape extension.  But then, applications have to be
specifically written to use it.

Also, remember that a copy of the screen can be very big:i
1600x1200 pixels with 32 bit planes = 7.5 MB.  That's the reason
why I did not go this way in the past.

 But what do you mean by double buffer.

Keep a copy of the screen in a pixmap, draw into the pixmap, then
copy the pixmap (or parts of it) onto the screen.

Feel free to try anything to improve transparency of top level
windows - though I believe any attempt to implement it properly in
FvwmTHeme in a general way is doomed to fail.

Bye

Dominik ^_^  ^_^

 --
Dominik Vogt, [EMAIL PROTECTED]
Reply-To: [EMAIL PROTECTED]
--
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]


CVS olicha: * Fixed transparent animated menu

2002-01-04 Thread FVWM CVS
CVSROOT:/home/cvs/fvwm
Module name:fvwm
Changes by: olicha  02/01/04 07:08:45

Modified files:
.  : ChangeLog 
fvwm   : menus.c menus.h move_resize.c move_resize.h 

Log message:
* Fixed transparent animated menu
* The result is not perfect with big menu, do I have to add a new
menu style AnimatedTransparentUpdate pix ?

--
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]


Re: CVS olicha: * Fixed transparent animated menu

2002-01-04 Thread Dominik Vogt
On Fri, Jan 04, 2002 at 07:08:45AM -0600, fvwm-workers wrote:
 CVSROOT:  /home/cvs/fvwm
 Module name:  fvwm
 Changes by:   olicha  02/01/04 07:08:45
 
 Modified files:
   .  : ChangeLog 
   fvwm   : menus.c menus.h move_resize.c move_resize.h 
 
 Log message:
 * Fixed transparent animated menu
 * The result is not perfect with big menu, do I have to add a new
 menu style AnimatedTransparentUpdate pix ?

What would that style do?

Bye

Dominik ^_^  ^_^

-- 
Dominik Vogt, email: [EMAIL PROTECTED]
LifeBits Aktiengesellschaft, Albrechtstr. 9, D-72072 Tuebingen
fon: ++49 (0) 7071/7965-0, fax: ++49 (0) 7071/7965-20
--
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]


Re: CVS olicha: * Fixed transparent animated menu

2002-01-04 Thread Dominik Vogt
On Fri, Jan 04, 2002 at 05:52:36PM +0100, Olivier Chapuis wrote:
 On Fri, Jan 04, 2002 at 02:23:55PM +0100, Dominik Vogt wrote:
  On Fri, Jan 04, 2002 at 07:08:45AM -0600, fvwm-workers wrote:
   CVSROOT:  /home/cvs/fvwm
   Module name:  fvwm
   Changes by:   olicha  02/01/04 07:08:45
   
   Modified files:
 .  : ChangeLog 
 fvwm   : menus.c menus.h move_resize.c move_resize.h 
   
   Log message:
   * Fixed transparent animated menu
   * The result is not perfect with big menu, do I have to add a new
   menu style AnimatedTransparentUpdate pix ?
  
  What would that style do?
 
 
 Hum, I do not know exactly. With big menus redrawing the menu during
 the animation take some times (maybe some improvement is possible
 in ParentalMenuRePaint). Even with a very few animation step this
 gives an hashed animation. So, my idea was to skip some of the redraw,
 but I am afraid that there is no good solution. Any suggestions is
 welcome.

I wouldn't put much effort into transparency.  X has no proper
implementation, so you'd have to write it yourself.  The only
thing I can think of is to double buffer the whole screen in a
pixmap, calculate the animation in the pixmap and then copy the
changed parts onto the screen (with the server grabbed).  I guess
some other window managers are already doing this.  Enlightenment
has a nice feature:  You can move a window with partial
transparency so you can see through the window while you move it.
But that is quite slow and probably uses a lot of memory.

Bye

Dominik ^_^  ^_^

-- 
Dominik Vogt, email: [EMAIL PROTECTED]
LifeBits Aktiengesellschaft, Albrechtstr. 9, D-72072 Tuebingen
fon: ++49 (0) 7071/7965-0, fax: ++49 (0) 7071/7965-20
--
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]


Re: CVS olicha: * Fixed transparent animated menu

2002-01-04 Thread Olivier Chapuis
On Fri, Jan 04, 2002 at 06:27:43PM +0100, Dominik Vogt wrote:
 On Fri, Jan 04, 2002 at 05:52:36PM +0100, Olivier Chapuis wrote:
  On Fri, Jan 04, 2002 at 02:23:55PM +0100, Dominik Vogt wrote:
   On Fri, Jan 04, 2002 at 07:08:45AM -0600, fvwm-workers wrote:
CVSROOT:/home/cvs/fvwm
Module name:fvwm
Changes by: olicha  02/01/04 07:08:45

Modified files:
.  : ChangeLog 
fvwm   : menus.c menus.h move_resize.c move_resize.h 

Log message:
* Fixed transparent animated menu
* The result is not perfect with big menu, do I have to add a new
menu style AnimatedTransparentUpdate pix ?
   
   What would that style do?
  
  
  Hum, I do not know exactly. With big menus redrawing the menu during
  the animation take some times (maybe some improvement is possible
  in ParentalMenuRePaint). Even with a very few animation step this
  gives an hashed animation. So, my idea was to skip some of the redraw,
  but I am afraid that there is no good solution. Any suggestions is
  welcome.
 
 I wouldn't put much effort into transparency.  X has no proper
 implementation, so you'd have to write it yourself.

Yes, but I think it will be great that colorsets work everywhere
as it is possible and Parental Relativity seems to give not so
bad results. The main problem (for me) is window background
update, but it is possible to fix this: xpmroot may send a
message to the root window, then fvwm2 can get this message
and ask the modules to update the transparent colorset.
Unfortunately, it does not seems that there is a standard
for this but some programs use the ESETROOT_PMAP_ID and the
_XROOTPMAP_ID atoms.

 The only
 thing I can think of is to double buffer the whole screen in a
 pixmap, calculate the animation in the pixmap and then copy the
 changed parts onto the screen (with the server grabbed).

How can you dump the whole screen in a pixmap? If I use XCopyArea
then the areas of the root window where there is a window is black.
I try something like that:

pix = XCreatePixmap(dpy, win, screen_w, screen_h, Pdepth);
XGrabServer(dpy);
XCopyArea(dpy, Root, pix, gc, 0, 0, screen_w, screen_h, 0, 0);
XUngrabServer(dpy)

 I guess
 some other window managers are already doing this. Enlightenment
 has a nice feature:  You can move a window with partial
 transparency so you can see through the window while you move it.
 But that is quite slow and probably uses a lot of memory.


I think that  Enlightenment use the ESETROOT_PMAP_ID and the
_XROOTPMAP_ID atoms which give the id of a pixmap which is a
copy of the root window (KDE2 use these atoms too). Maybe we can
add EsetRoot as a pixmap argument for FvwmTheme?

In any case, a pixmap copy of the root window may be better
than the ParentRelative pixmap under certain situation.
But what do you mean by double buffer.

Olivier
--
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]