Home » U++ Library support » U++ Library : Other (not classified elsewhere) » ScrollBarSize() - Is it (possibly) a bug?
ScrollBarSize() - Is it (possibly) a bug? [message #58936] |
Tue, 27 September 2022 01:35 |
Lance
Messages: 526 Registered: March 2007
|
Contributor |
|
|
I was looking for some member function in ScrollBar to retieve the scrollbar size, or expose the const Style *style
which can in turn access the barsize value, but to no avail. Until I find this function
inline int ScrollBarSize() { return ScrollBar::StyleDefault().barsize; }//!!
A search in the Upp src indicates many libraries make use of this function, including in HeaderCtrl
void HeaderCtrl::FrameLayout(Rect& r)
{
LayoutFrameTop(r, this, invisible ? 0 : GetHeight());
LayoutFrameBottom(r, &sb, sb.IsShown() ? ScrollBarSize() : 0);
}
void HeaderCtrl::FrameAddSize(Size& sz)
{
if(!invisible)
sz.cy += GetHeight();
if(sb.IsVisible())
sz.cy += ScrollBarSize();
}
Does this imply that a customized ScrollBar Style shall not disagree on barsize with the default ScrollBar Style? Is this restriction necessary? or shall we expose int ScrollBar::ScrollBarSize()const(elevate it to a public member function from a private one as it is now)?
|
|
|
Re: ScrollBarSize() - Is it (possibly) a bug? [message #59335 is a reply to message #58936] |
Sat, 17 December 2022 14:15 |
|
mirek
Messages: 13975 Registered: November 2005
|
Ultimate Member |
|
|
Lance wrote on Tue, 27 September 2022 01:35I was looking for some member function in ScrollBar to retieve the scrollbar size, or expose the const Style *style
which can in turn access the barsize value, but to no avail. Until I find this function
inline int ScrollBarSize() { return ScrollBar::StyleDefault().barsize; }//!!
A search in the Upp src indicates many libraries make use of this function, including in HeaderCtrl
void HeaderCtrl::FrameLayout(Rect& r)
{
LayoutFrameTop(r, this, invisible ? 0 : GetHeight());
LayoutFrameBottom(r, &sb, sb.IsShown() ? ScrollBarSize() : 0);
}
void HeaderCtrl::FrameAddSize(Size& sz)
{
if(!invisible)
sz.cy += GetHeight();
if(sb.IsVisible())
sz.cy += ScrollBarSize();
}
Does this imply that a customized ScrollBar Style shall not disagree on barsize with the default ScrollBar Style? Is this restriction necessary? or shall we expose int ScrollBar::ScrollBarSize()const(elevate it to a public member function from a private one as it is now)?
What a nice grey corner have you sumpled upon...
Well, I would say, for now it means that if you use ScrollBar::SetStyle, you cannot expect your styled ScollBar be well integrated is some other widgets unless scrollbarsize is the same...
In practice, in over 15 years I do not remember single instance of custom Scrollbar style, so while this should be fixed, it is really low priority.
|
|
|
Re: ScrollBarSize() - Is it (possibly) a bug? [message #59342 is a reply to message #59335] |
Sun, 18 December 2022 04:32 |
Lance
Messages: 526 Registered: March 2007
|
Contributor |
|
|
Thank you, Mirek!
It so happened that a widget I wrote used both vertical ScrollBar and horizontal ScrollBar with both scrollbars set to autohide. An edge case arose that if I set the page width, page height, total width, total height programmatically and I set the page width=total width = width of the view, and when the total height is (maybe slightly) greater than view height, an oscillation kind of events happened: a change in the visibility of one scrollbar causes the change in the visibility of the other scrollbar, the GUI keeps flickering and no user input can be processed.
I have lost my old code, am not sure if I remember what happened exactly, and am not sure if I can still reproduce the event, but I swear it happened to me.
To remedy that, I decided to disable native ScrollBar autohide behaviour and write the autohide logic myself. For that purpose, I need to query the ScrollBarSize(), ideally not in a hackish way. Currently I use the exposed global function but are feeling unsure/uncomfortable
[Updated on: Sun, 18 December 2022 04:41] Report message to a moderator
|
|
|
Goto Forum:
Current Time: Fri Mar 29 13:37:24 CET 2024
Total time taken to generate the page: 0.00961 seconds
|