Notes from "Async and representation"
Marco Martin
notmart at gmail.com
Fri Jan 17 19:06:35 UTC 2014
On Friday 17 January 2014, Eike Hein wrote:
> General comment: Please note that these size hints aren't only
> there so the shell can decide which representation to pick, but
> at times also do things like:
>
> * Set useful default sizes (e.g. for popups from panels) *before*
> appearance.
> * Affect interaction behavior (e.g. lock down resizing in one
> axis but allow it in the other, by setting min/max accordingly).
> * Programmatically resize things while shown.
>
> Consider the Homerun Kicker launcher menu:
>
> http://i.imgur.com/eiq6D5w.png
> http://i.imgur.com/h9Y5jH2.png
> http://i.imgur.com/o3s3Bzk.png
> http://i.imgur.com/KG2R98u.png
>
> Here's a collection of things it does with sizing:
>
> * Not shown on the screenshot, but the compact representation
> shown on the panel supports custom non-square images that it
> scales while preserving aspect ratio, so it needs to hint
> that to the panel layout.
>
> * When the popup opens with the full representation inside,
> it's default size is optimized for its content.
>
> * It lets you adjust the height of the popup, but not the
> width ... which actually feels really nice when resizing,
> but is actually just a side-effect (more on this later).
>
> * It programmatically resizes its popup depending on the
> appearance of thos extra search result columns.
>
> Let's please avoid getting side-tracked with discussion over
> whether those specific use cases are things that should be
> done; the more interesting point is that someone ended up
> doing them in the real world, and that the set of legitimate
> use cases is at least conceivably really that wide.
>
> The other thing is that this was actually pretty hard to pull
> off in Plasma 1. There are some redundant APIs in the
> plasmoid API in Plasma 1 - some prop-based, some procedural -
> and not all of them actually work. There are syncing and
> ordering problems with applying the root props to the popup
> applet, which e.g. necessitated locking down the horizontal
> axis to also be able to do the programmatic resize. I also got
> the feeling that props on the root vs. props on the compact
> repr were getting confused depending on the order in which
> things were set ... but I don't remember the details, sorry,
> I should have kept more extensive notes.
>
> I think the guiding principle for redesigning this stuff in
> Plasma 2 should be "explicit is better than implicit". Let's
> try to avoid doing magic props that mean this thing in this
> circumstance and this other thing in this other circumstance,
> it's better to be expressive and be able to specify the props
> for each circumstance and give applet authors control. There
> is always another pressure acting on them not to abuse the
> control: Users don't like crap UI that does dumb things, so
> policing these things hard often isn't necessary and ends up
> limiting use cases instead.
so, at the moment, in my branch things are something like that:
root object is called Applet, so it has "real" properties
compactRepresentation/fullRepresentation
those two components support an attached property called SizeHint,
so you have something like:
Applet {
compactRepresentation: Component {
PlasmaComponents.Button {
text: i18n("Click me")
onClicked: plasmoid.expanded = !plasmoid.expanded
}
}
fullRepresentation: Component {
PlasmaComponents.Label {
SizeHint.minimumHeight: 300
SizeHint.minimumWidth: 200
//PlasmaCore.SizeHint.minimumHeight: 300
text: i18n("Hello world")
}
}
}
dimensions of the applet in the panel or the dimensions of the pospup should
follow size hints
to correctly switch it would also need something like a
switchHeight/switchWidth properties in Applet, since fullRepresentation may
not exist
this should cover most of the things you wrote about
(like a compactRepresentation that has minimumWidth: height*ratio should work
just fine)
another thing that will be necessary is a way to make applets providing a
single representation, like the taskbar doesn't have a compact one
only thing i'm afraid of, it becomes cooomplex, code-wise and for new
developers to understand
Cheers,
Marco Martin
More information about the Plasma-devel
mailing list