Review Request: Plasma::IconWidget: Add support for constrained size hints
Ingomar Wesp
ingomar at wesp.name
Mon Oct 11 13:24:30 CEST 2010
> On 2010-10-11 08:34:14, Marco Martin wrote:
> > > The reported preferredSize is not bounded by the maximumSize.
> >
> > you don't have to call maximumSize(), it's the hardcoded overriding size hint that you can set from the outside ith setMaximumSize.
> >
> > you just have to obtain it in hte same way you use in sizeHint:
> > sizeFromIconSize(qMax(d->maximumIconSize.height(), d->maximumIconSize.width()));
> >
> > and yes, size hints are cached, that's (besides the existence of setMaximum/MinimumSize) why sizeHint() is protected and effectiveSizeHint exists
>> The reported preferredSize is not bounded by the maximumSize.
>
> you don't have to call maximumSize(), it's the hardcoded overriding size
> hint that you can set from the outside ith setMaximumSize.
Err... but maximumSize() delegates to sizeHint() if no maximum size has been explicitly set, no?
> you just have to obtain it in hte same way you use in sizeHint:
> sizeFromIconSize(qMax(d->maximumIconSize.height(),
> d->maximumIconSize.width()));
This has crossed my mind as well. It works if there is a valid maximumIconSize set. Otherwise, falling back to QGraphicsLayoutItem::sizeHint(Qt::MaximumSize) would probably be the way to go. Unfortunately, if the logic for the maximumSize in sizeHint ever changes, we'll need to duplicate this here as well.
I will change the patch accordingly.
> and yes, size hints are cached, that's (besides the existence of
> setMaximum/MinimumSize) why sizeHint() is protected and effectiveSizeHint
> exists
I know, I just found it surprising that effectiveSizeHint tries to fetch all size hints and that it apparently even uses the previously given constraint for that...
- Ingomar
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://svn.reviewboard.kde.org/r/5580/#review8073
-----------------------------------------------------------
On 2010-10-11 01:40:48, Ingomar Wesp wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://svn.reviewboard.kde.org/r/5580/
> -----------------------------------------------------------
>
> (Updated 2010-10-11 01:40:48)
>
>
> Review request for Plasma.
>
>
> Summary
> -------
>
> I poked around the IconWidget class and came up with the following patch that
> implements handling of constraints in sizeHint(...). It basically pulls the
> code that determines the icon size for a given widget size out of
> layoutIcons(...) into an the a new iconSizeForWidgetSize(...) method so that
> it can be reused by sizeHint(...).
>
> I've also changed the signatures of elidedText(...) and layoutText(...) by
> removing the need to pass a QStyleOptionGraphicsItem*, since it wasn't used
> there anyway. If there's some reason why this could be a bad idea, I'll put it
> back in.
>
> The patch changes the behavior of sizeHint(...) in the following way:
>
> - If there is no constraint, the behavior remains unchanged.
>
> - Likweise, the minimum and maximum sizes are unaffected by constraints. I
> don't see how limiting the available width/height would affect either one?
>
> - The preferred size computation now uses the constraint to compute the
> expected size of the icon and adjusts the returned value accordingly.
>
> I must admit that I'm not entirely happy with the solution as it has (at
> least ;) the following issues:
>
> - The reported preferredSize is not bounded by the maximumSize. Unfortunately
> I can't call maximumSize() and its derivatives from within sizeHint, since
> this might cause QGraphicsLayoutItem to update all sizeHints, which might in
> turn lead to unbound recursion, since it apparently also caches the
> previously passed constraints :/
>
> This is why I'm setting any unconstrained dimension to QWIDGETSIZE_MAX for
> the purpose of determining the icon size that fits within.
>
> - I'm not very fond of having to initialize and pass around
> QStyleOptionGraphicsItem objects, especially since they are apparently only
> used for determining whether we've got an RTL layout.
>
> Any testing / feedback would be greatly appreciated.
>
>
> Diffs
> -----
>
> /trunk/KDE/kdelibs/plasma/widgets/iconwidget.cpp 1182894
> /trunk/KDE/kdelibs/plasma/widgets/iconwidget_p.h 1182894
>
> Diff: http://svn.reviewboard.kde.org/r/5580/diff
>
>
> Testing
> -------
>
>
> Thanks,
>
> Ingomar
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/plasma-devel/attachments/20101011/7f828b10/attachment.htm
More information about the Plasma-devel
mailing list