Code transitions - Theme transitions

Thomas Lübking thomas.luebking at web.de
Mon Nov 17 21:07:58 GMT 2008


Am Monday 17 November 2008 schrieb Rafael Fernández López:
> I have the feeling (haven't tested it though) that when I switch between
> config pages, it is somehow "slow", so I think maybe they are both trying
> to do the same transition.
yes. i suppress the visual aspect of KFadeWidgetEffect,  but could not prevent 
it from doing the actual job (i.e. rendering widgets) until i read below...
=>-)

> So I want to both ask and suggest something.
>
> - Who should take care of asking KGlobalSettings::graphicEffectsLevel(),
> the style or someone else on our code ?
whoever wants to provide some animation, i assume.

> If we decide that some part of our code (as it is right now), we should
> make it very clear to the style that it shouldn't alter the settings that
> have been set somewhere else
i don't (bespin doesn't link kde and usually i wouldn't change foreign 
settings myself, at least not w/o informing the user and/or pass him/her to 
the native UI dialog if there's)
i manipulate widgets though (styles are used to do that)
boyond that, you simply won't be able to prevent so. from doing so.

> I ask this mainly because I have read on IRC that QTreeView::setAnimated()
> seems to work fine and is nice.
i had e.g. problems w/ amarok and other treeviews w/ transparent (or not 
autofilling) bgs.
don't know if this is meanwhile fixed, but it seems as if the treeview 
internal anim code doesn't take this into account and just paints a plain base 
color bg during the anim - leads to flicker

> I was tempted to write the attached patch,
> and later I wondered: "should this be really done by kstyle?".
switching this particular thing on  in kstyle should be fine, because the 
worst thing would be non kstyle inheritors wouldn't take it into account and 
some inheritors might redisable it as "misfit" (just think of visual FX in 
e.g. Motif =D


radom thoughts:
1. visual FX are part of the look, the look is up to the style and it should 
thus somehow be taken into account regarding the outcome (currently 
KFadeWidgetEffect "only" crossfades, but bespin e.g. provides sliding or 
scanline fading what might fit a style's general laf much better)
2. whoever (inside KDE) wants to animate sth. should respect 
KGlobalSettings::graphicEffectsLevel att
3. there're two different kinds of UI animations:
a) integrated (like in qtreeview)
b) post applied (like fading two stacked widgets, hovering buttons, etc.)

"a"'s no big deal as everything happens inside the widget and outsiders aren't 
even informed on when to animate or have no access to data required to perform 
a usable (efficient) animation or at least know: "hey, there's this feature i 
(hopefully) can toggle and must prevent to interfere"

"b" is more problematic.
as it's (probably) not possible to test for interference without 
runtimebehaviour analysis (grettings to all M$ users and their able virus 
checkers ;-P) style and app can easily interfere at anytime, just because one 
implements a feature the other one already provided not knowing (from 
apps/widgets side) or because being unhappy with the current state (style 
side) (to state that clear: bespin was first! ;-P)

both approaches (app/widget vs. style implementation) have their drawbacks:

widget internal is the cleaner one but will remain a set of isles (think of 
the config pages, they're animated, all other stacks aren't, even worse would 
be: KPushButton: animated, QPushButton: not... :-( whoever sells this to joe 
user: it's not me ;-)
another drawback is the rather fixed look that may misfit the style (though 
this could be catched by asking styles to render transition states...)

styles
provide a more general hook (as they get touched to every widget during 
polishment),
have natural support for custom solutions (kstyle provides the infrastructure, 
so inheritors don't have to, but can reimplement) and
can take other needs into account (i chose to hide KFadeWidgetEffect, mainly 
because it lead to flicker as plain QWidget::render is (was?) unable to handle 
non plain bgs. it has (had?) trouble with scrollareas as well, btw.)

but the implementation isn't that clean (as they alter the apps and/or widgets 
behaviour without informing the widget) and thus a little tricky (QPointer is 
your frind, trust me)

as for commiunication between styles and apps/widgets:
you could add a property to the widget that says: "Do not animate me" and v.v. 
could ask a stylehint on whether a certain animation should be not performed 
(must be inverse, SH default return is false...)


Regards,
Thomas








More information about the kde-core-devel mailing list