On Tue, Jul 09, 2002 at 08:18:33AM +0200, Olivier Chapuis wrote:
> On Tue, May 14, 2002 at 10:37:09AM +0200, Dominik Vogt wrote:
> > On Mon, May 13, 2002 at 04:40:20PM +0200, Olivier Chapuis wrote:
> > > On Mon, May 13, 2002 at 12:07:20PM +0200, Dominik Vogt wrote:
> > > > On Sat, May 11, 2002 at 06:38:25PM +0200, Olivier Chapuis wrote:
> > > > > On Fri, May 10, 2002 at 12:33:47PM +0200, Dominik Vogt wrote:
> > > > > > But why make a special case if there is a mini icon?  If we need
> > > > > > a tint colour, shouldn't it be applicable to any forground, not
> > > > > > just icons?  I see no reason why, for example, text shouldn't
> > > > > > benefit from tinting.
> > > > > >
> > > > > 
> > > > > I do not think that tint should be applied to fg, *Gradient and
> > > > > even the transparent part of the background of a pixmap (i.e., bg).
> > > > > At the present time Tint tints the transparent part of the background
> > > > > the cs pixmap for *Pixmap colorset (as TintMask does not) and now
> > > > > I think this is not a good idea.
> > > > 
> > > > > The reason is that I do not see the interset to tint a colour,
> > > > > the user can do that by just changing the color in the Colorset
> > > > > cmd.
> > > > 
> > > > But the user does not know the algorithm in fvwm.  Consider this:
> > > > You have a button button with text and an icon in FvwmButtons.  It
> > > > shall visually indicate if the internet connection is up.  One
> > > > might want to do this by tinting the whole button.  You could
> > > > simply say
> > > > 
> > > >   Colorset 123 tint blue
> > > > 
> > > > Very comfortable to use and very flexible.  We might want to
> > > > distinguish between a foreground and background tint.
> > > >
> > > 
> > > So we should have fgTint, bgTint (for the bg and the gradients),
> > > PixmapTint (for the non transparent part of the pixmap) and
> > > IconTint for the contextual (mini-)icon.
> > > Pixmaptint and IconTint are really natural with Xrender
> > 
> > Hm, why not make a whole 'tint colour set':
> > 
> >   Colorset 123 fg blue, bg red, sh orange, hi green
> >   Colorset 234 tintcolorset 123
> > 
> 
> This does not work as you should specify the % of the tinting
> and it is natural to have different  tinting % for fg, bg, ...etc.
> We can add a new cmd
> 
> EffectSet 123 fg blue 30, bg red 50, PixmapTint black 10, IconTint black 10, \
>         fg_text 80
> 
> The advantage is that one EffectSet can be used for multiple colorset. The
> disadvantage come from updating problems: at "startup" there is no pbs,
> you define EffectSet 123 and after colorset 234 which use Effect 123 when
> the main colorset pixmap is created. But now if you want to change
> the pixmap of the colorset 234 and its tint you should do
> 
> Effectset 123 PixmapTint white 10 # -> we should update the main pixmap of
>                                      colorset 123 (and maybe others) and
>                                      send it to the modules
> Colorset 234 Pixmap New.xpm     # -> update and send again ...
> 
> So it seems we should have two "EffectSet" command: EffectSet (just the
> definition of the tints and alpha's) and EffectSetAndUpdate (tint/alpha
> def + update all the colorset which use the tint set).
> IMHO, I think that just having bgTint, fgTint, shTint, hiTint,
> PixmapTint and IconTint _into_ the Colorset command is a simple
> and good solution. So if there is no "strong" vote for EffectSet
> and  EffectSetAndUpdate I will implement tinting this way.

I still think it's not a good idea to overload colour sets with
too many parameters.  The solution you propose (and I think it's
the one I had originally in mind) has one major flaw:  If the
EffectSet is a subordinate part of a colour set, you still have to
define different colour sets for each effect:  Let's assume there
are two buttons that share the same colours, but different
effects.  You need

  Button A
    - colour set A
       - effect set A

  Button B
    - colour set B
       - effect set B

But colour sets A and B are identical (except for the effect set
pointer).  It would be better to separate them:

           Button A
  colour set A - effect set A
  ...

(BTW, I wouldn't call it EffectSet - it suggests it's a set of
items of similar types.  But it's actually just a definition of
one (complex) effect.)

Eventually, I'd like to have a structure that defines "GUI
objects" as a combination of

  - colours to draw various parts
  - the object to draw in the foreground (e.g. text or a picture)
  - the object to draw in the background
  - a relief definition
  - position information of the previous three objects
  - effect definitions

How about this hierarchy of objects:

  gui_object
  - relief_object
    - size and position
    - raised/sunk/flat/...
    - fill pattern
  - fore_object
    - size and position
    - text
      - font
    - graphics
    - effects
  - back_object
    see above
  - colours

Our current colour set would be promoted to gui objects with the
colour and grpahics definitions moved into subordinate structures.
For example,

  Colorset 1 fg red, bg green, Pixmap foo.xpm

would become:

  NewColorSet 1 fg red, bg green
  GfxObject 1 Pixmap foo.xpm
  GuiObject BackGfxObject 1, NewColorSet 1

In addition, this can be used to not just define module
backgorounds, but individual elements of the graphics.  Here's a
hypothetical config for FvwmButtons:

  # general button drawing colours
  NewColorSet 1 fg black, bg gray
  # module background
  GfxObject 1 BGradient 128 blue red
  # button background
  GfxObject 2 ParentRelative
  # button foregrounds
  GfxEffects 1 Tint red, Tintpct 50
  GfxObject 3 Pixmap move.xpm, Effects 1
  GfxObject 4 Pixmap resize.xpm, Text "bla", \
    Font lucidasanstypewriter-12, TextBelowIcon
  # GUI objects
  GuiObject 1 NewColorSet 1, BackGfxObject 1
  GuiObject 1 NewColorSet 1, BackGfxObject 2, ForeGfxObject 3
  GuiObject 1 NewColorSet 1, BackGfxObject 2, ForeGfxObject 4
  
etc.  I don't suggest implementing something like this now, but
whatever we do now, it should not require to rewrite the syntax
completely if we ever move to the "GuiObject" approach.

Hm, just think of the possibilities:  90% of the module drawing
code moved into a single library; the looks of all module elements
(buttons, reliefs, background, shape, etc. configurable at run
time with only the code to call the library routines when anything
changes); module configuration lines reduce to

  *FvwmPager: MainGuiObject 1
  *FvwmPager: WindowGuiObject 2
  *FvwmPager: HilightGuiObject 3
  *FvwmIconMan: MainGuiObject 1
  *FvwmButtons: MainGuiObject 1
  *FvwmButtons: (GuiObject 101)
  *FvwmButtons: (GuiObject 102)
  ...

replacing dozens of individual module options.

(I'm aware that the above is vastly inconsistent and won't work
out of the box).

> In addition of tint I would like to implement user defined alpha-blending
> and Add*Pixmap. We already have fg_alpha (maybe this should be fgAlpha),
> and I would like to have:
> 
>   PixmapAlpha percent # apply the pixmap with a fading effect
>                       # determined by percent
>   IconAlpha   percent # the same thing for the contextual (mini-)icon
> 
> Finally I think it will be good to be able to add _one_ pixmap:
> 
> Extra{,Tiled,Aspect}Pixmap image_file
> 
> (together with ExtraPixmapTint and ExtraPixmapAlpha)
> 
> Mikhael suggests to use Alpha*Pixmap in the place of Extra*Pixmap,
> but I think that "Alpha" will be confusing. Also Mikhael
> suggests to use an other syntax by using "Image" in the place
> of "Pixmap" everywhere. I am not sure we should change the
> syntax (even with back compatibility).
> 
> So, may I go?

To summarize the abouve:  yes.  Do whatever you think is best, but
try to encapsulate the functionality as good as possible so that
it may be taken out en-bloc one day.

Bye

Dominik ^_^  ^_^

 --
Dominik Vogt, mail: [EMAIL PROTECTED], phone: 0721/91374-382
Schlund + Partner AG, Erbprinzenstr. 4-12, D-76133 Karlsruhe
--
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