Commit Graph
100 Commits
Author SHA1 Message Date
Augustin Cavalier 8539dfdac2 BScrollBar: Use the minimum as the preferred size in the alternate axis.
This was the behavior before the commit yesterday that unified the
two methods of computing the preferred size. It seems some applications
expect this to be callable without a window lock, so this works when
the other method does not.

Fixes #16372.
2020-07-06 21:40:51 -04:00
Augustin Cavalier bdfb3cd7cd BScrollBar: Report a more correct maximum size.
This way, BScrollBar will now be scaled appropriately when used
within layouts, as it is in e.g. Tracker.
2020-07-05 19:07:44 -04:00
Augustin Cavalier b29bb4bec5 BScrollBar: Apply font scaling to preferred sizes.
As BScrollView has already been adjusted to use this, most applications
will now have properly scaled scrollbars on HiDPI systems.

All unadjusted controls and applications will still be able to use
the hard-coded constants as before, but these should eventually
be deprecated altogether and then removed.
2020-07-05 18:37:48 -04:00
Augustin Cavalier 9481a1ec39 BScrollBar: Unify PreferredSize computations.
Reduces code duplication. This should not significantly affect
actually computed sizes.
2020-07-05 18:37:48 -04:00
Augustin Cavalier 9fe3529f3e BScrollBar: Remove DISABLE_ON_WINDOW_DEACTIVATION constant.
It was always enabled, and disabling it would break ABI.
If we want to make it disable-able, it needs to be a setting,
but I don't really see a reason for that.
2020-07-05 18:37:48 -04:00
Augustin Cavalier e9815ed8b6 BScrollBar: Move SCROLL_BAR_{...}_KNOB_SIZE constants into the source.
They were not used anywhere else in the tree anyway. Resolves a TODO.
2020-07-05 18:37:48 -04:00
John Scipione 494e256474 BScrollBar: Redraw scroll bar button on click
DrawScrollBarButton passes B_ACTIVATED flag to HaikuControlLook which
draws the button as down.

This regression was introduced in hrev54032.

Fixes #15960

Change-Id: I87dbaa9e8c9169c67dd7cb463d3604d9727ae28f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2577
Reviewed-by: waddlesplash <[email protected]>
2020-05-05 00:49:13 +00:00
John Scipione 1482b250a7 IK: Update scroll bars for alternative control look
Scroll bars should look and work identically to before on
HaikuControlLook.

Add DrawScrollBarButton() and DrawScrollBarThumb() and
DrawScrollBarBorder() methods. These methods are used to draw scroll
bars in a generic way so that they can be drawn differently by alternative
control look's (e.g. BeControlLook). Also it gives us back drawing of
scroll bar knobs.  However the knob setting is not exposed in the
interface in this commit.

These methods are in addition to the 2 existing DrawScrollBarBackground()
methods that draw the scroll bar background. One draws the area above and
below the thumb and the other is called by the first to actually draw the
area.

The rest of the drawing besides the backgrounds was being done in
BScrollBar before. To draw the scroll bar arrows and thumb we were recyling
other ControlLook methods, while this worked well enough on HaikuControlLook
it wasn't flexible enough for alternative control looks.

DrawScrollBarButton() is used to draw the four scroll buttons and is
typically (so far) used in combination with DrawArrowShape().

DrawScrollBarThumb() draws the scroll bar thumb.

DrawScrollBarBorder() draws a 1px border around the entire scroll bar,
potentially B_KEYBOARD_NAVIGATION_COLOR if focused (although this is
feature not currently used.)

Draw unscrollable scroll bars as if they were disabled including the
buttons with their arrow shapes, background, and thumb.

Add FBC backwords compatibility macros in ControlLook.cpp

Change-Id: I9237c5ce45d17d674785111d51de951e5686306b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/351
Reviewed-by: Adrien Destugues <[email protected]>
2020-04-11 16:57:54 +00:00
Adrien Destugues 6967695c4e PVS V547: always false comparisons
Change-Id: I1c7790ff0aa537b974bdc0fd65d76f277ea5f8cf
Reviewed-on: https://review.haiku-os.org/c/1647
Reviewed-by: waddlesplash <[email protected]>
2019-07-27 15:16:31 +00:00
waddlesplash fe66a314c8 Revert "BScrollBar: Add lines and dots knob styles to scroll bar"
This reverts commit ec1b18c58a.

This was not well enough reviewed, and it seems that at least some
consumers of the old API (e.g. WebPositive) need more than the new one provides.

Change-Id: Ie7ad1fc70dab889922424298661504b00f66d31d
2018-07-22 18:26:06 +00:00
John Scipione ec1b18c58a BScrollBar: Add lines and dots knob styles to scroll bar
Fixes #9137

Move scroll bar drawing into HaikuControlLook

Added B_SCROLLABLE flag to BControlLook

Update FakeScrollBar in Appearance to also draw using HaikuControlLook.

Focus works on scroll bars again, used by FakeScrollBar... and probably
nowhere else.

Added private _ScrollingEnabled() convenience method to BScrollBar and
use it in a few places making.

Create ScrollBarPrivate.h header to share a couple of scroll bar related
enums with HaikuControlLook that come from BeOS Scroll Bar prefs.

Stuff arrow_direction enum into BScrollBar::Private as it has been
succeeded by a similar enum already present in BControlLook and is only
around now for BScrollBar::Private::DrawScrollBarButton.

Change-Id: Idc31ee41de091ba45ded2f0315a004af00143803
2018-07-16 16:11:46 +00:00
John Scipione 1f424632be Style fixes to IK, focus on docs 2014-06-13 17:27:01 -04:00
Adrien Destugues 1d09e9cee3 BScrollbar: remove unused field.
* Nothing ever reads fTargetName in the scrollbar code, so remove the
field.
* Frees one reserved slot, and a little memory, as the target name was
copied with strdup.
2014-04-29 16:46:00 +02:00
John Scipione 5d98ee1e4d Revert "BScrollView: Increase small scroll step size from 1 to 3"
This reverts commit bdcfc07617.
2014-03-08 15:18:35 -05:00
John Scipione bdcfc07617 BScrollView: Increase small scroll step size from 1 to 3
... and then don't multiply by 3 in BView
2014-03-07 19:11:37 -05:00
John Scipione b7929c0574 BScrollBar: style fixes, update copyright header 2014-03-07 19:11:33 -05:00
John Scipione e724b26f23 Remove enum elaborated type specifier
...from orientation params. Elaborated type specifiers are not needed
for C++ code and removing them makes doxygen happy. Verified working
on both gcc2h and gcc4h builds.
2013-07-08 19:29:11 -04:00
John Scipione 9f24981a56 Add B_SCROLL_BAR_THUMB_COLOR constant.
This allows you to change the scrollbar thumb color in Appearance preferences.
The default color is 216, 216, 216 so the scroll bar thumb looks the same by
default. Perhaps someday this can be updated to something a bit more colorful.
2013-04-05 19:26:41 -04:00
Ryan Leavengood dca92a6c75 Removed unused colors from BScrollBar Draw. 2013-03-03 17:50:51 -05:00
Ryan Leavengood f9b1a47fa3 Use be_control_look for BScrollBar and FakeScrollBar.
Remove all code which checks for be_control_look being NULL.

Also fix the DrawArrowShape method in be_control_look so the arrow is aligned,
as per the previous commit. In addition the code to offset the arrow when the
scroll button is pressed was unnecessary.

There is still some room for improvement, and I am not happy with the
BControlLook behavior here, as noted in some TODOs.
2013-03-03 17:50:51 -05:00
Ryan Leavengood 8a9200992e Fix Scrollbar arrow button alignment.
The arrow symbol on the right and down buttons was off by one pixel.

Because of the resurrected FakeScrollbar in the Appearance preflet I had to
change this code in two places, which makes me unhappy. This needs to be pulled
into BControlLook.

Fixes #9104.
2013-03-03 17:50:51 -05:00
Adrien Destugues 95a11c765d Style fix. 2013-01-25 22:29:41 +01:00
Adrien Destugues fdb61e9836 Don't allow setting a scrollbar position to nan.
Since nan != nan, the scrollbar would otherwise try to move the view to
the new position, the view would try to set the scrollbar value again,
and so on.
2013-01-25 22:17:59 +01:00
Oliver Tappe 21f50d63e6 Use SHIFT to accelerate scrolling via the bar arrows. 2012-11-05 09:38:22 +01:00
John Scipione b5446310e9 Remove the scroll bar knobs and corresponding setting 2012-11-04 15:37:57 -05:00
John Scipione a4f0328efe Rename hextent and vextent to knobWidth and knobHeight 2012-11-02 19:08:11 -04:00
John Scipione dfa8cf8c05 Change SCROLL_KNOB_* constants to B_SCROLL_KNOB_* 2012-11-02 19:08:09 -04:00
John Scipione 4b5a6861f2 Add the scrollbar constants enum to the header.
Also make some minor tweaks in ScrollBar.cpp
2012-11-02 01:06:59 -04:00
John Scipione 51e2ba81f1 Variable name refactoring. They are knobs, not marks 2012-11-02 01:06:58 -04:00
John Scipione a0e61cdf4c Implement BeOS style scrollbar knobs.
Not hooked up to a setting yet.
2012-11-02 01:06:58 -04:00
Ryan Leavengood 57c5b09e1a Use be_control_look != NULL everywhere in the Interface Kit.
Should not be a functional change. It is not in the Haiku Coding Guidelines but
I feel like 'if (object != NULL)' is generally preferred to 'if (object)', plus
in this case of be_control_look that is the more common style.
2012-08-05 18:07:23 -04:00
Ryan Leavengood 9f5864ab09 Handle the scroll wheel changing over scrollbars.
* Extract the scrollbar change based on the mouse wheel delta into a protected
  method of BView.
* Call that method from BScrollBar's MessageReceived.

With this change it is now a bit easier to scroll horizontally around the
system by putting the mouse cursor over a horizontal scrollbar and using the
wheel.

Fixes #8631.
2012-06-24 10:50:42 -04:00
Alex Wilson eee4243d35 De-virtualize BView::InvalidateLayout() and introduce LayoutInvalidated() hook, like BLayout. 2011-10-28 14:16:43 -06:00
Stephan Aßmus 26fe41417d Small coding style fixes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36216 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 13:35:22 +00:00
Stephan Aßmus 0161825261 Fixed an annoying problem with the scroll bar repeat feature. If you clicked
a button or within the bar background within the timeout for the repeat-thread,
the thread would exit and there would be no repeating. I think there is still
a race condition somewhere since I managed to see it stall once again, probably
because it locks the looper twice in the loop...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33666 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-19 20:40:15 +00:00
Stephan Aßmus 89208c77f1 Finished unifying the Interface Kit headers:
* Fixed copyrights (puncuation and capitalization, removed authors from
  headers)
* Updated indentation style
* Unified pointer/reference style
* Re-ordered some methods for better grouping where it could be done
  (abd adopted source accordingly)
* Small coding style fixes here and there

No functional change intended.

+alphabranch


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-27 11:12:41 +00:00
Philippe Saint-Pierre a7ed06cedd There was an "off by one" error in the routine used to detect if a click was inside the arrow buttons.
Reported by mmadia in ticket #3611.  Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30596 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-03 01:23:12 +00:00
Stephan Aßmus 4ab94faa39 The BMessage constructor of BScrollBar had a couple of rather important
omissions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30319 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-04-22 09:17:38 +00:00
Stephan Aßmus da34a08541 Do not scale the scroll bar thumb size between min size and max size, but
between 0 and max size and restrict to min size afterwards. This leads to more
consistent behavior and a more reasonable scroll bar size until the minimum
size is reached. And it also fixes #3801. Probably also fixes the bug where
some Pe windows could not be scrolled, or only scrolled very little. I assume
this because a special trick is used for proportional scroll bars in Pe. It
does not set the proportion, but only large steps and then the proportion is
calculated from that. But since the minimum size was not taken into account
before, it would have exactly this inconsistency. Since the size now ranges
from 0 to max, this should now be in sync. But I didn't have a Pe window handy
which exposed this bug to confirm my assumption...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30309 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-04-21 22:12:27 +00:00
Stephan Aßmus 2f86ba4557 Implemented a new look for the Haiku interface controls. It was
overheard that they looked too ninety-ish.
TODO: The code behind this is work in progress. The basic idea
is to extract all drawing code into a new class BControlLook,
of which there is a global instance be_control_look, instantiated
in InterfaceDefs.cpp. At the moment, all the old drawing code is
still there, and the usage of be_control_look is inside if-bodies
checking the instance against NULL. In another words, by not
instanitating be_control_look, you can revert back to the old look.
BControlLook's job is to provide reusable methods for drawing
certain types of frames, backgrounds and labels, so that application
developers can make controls that re-use the same drawing code
as built-in controls and adopt to changes made there. I have added
the notion of "borders". Each of the frame drawing methods can be
made to draw certain borders only, which is supposed to help when
controls shall visually attach. This feature is not fully explored
at all ATM.
TODO: Update BColumnListView header view and BStringItem text
spacing. Update other apps where it makes sense to use BControlLook.
For the moment, only Tracker and LaunchBox are updated. More...
NOTE: The new look is not very radically different, so that existing
apps do not immediately look too ugly or out of place.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29221 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-02-15 18:23:19 +00:00
Oliver Tappe 39fbf5509b bonefish + zooey:
* Fixed a general problem with respect to overriding of the reserved
  virtual function slots: instead of statically invoking the method
  that corresponds to the reserved slot on the class that contains the
  slot, we now invoke the virtual Perform() method. Perform() then dispatches 
  the method invocation to the "proper" class, i.e. the highest class in the 
  hierarchy that  actually implements the requested method.
  This fixes a crash in apps that use liblayout's MSlider class and
  should fix one or other spurious bug with old apps or libraries, too.
* added new header folder 'binary_compatibility' that contains files that
  define the method codes and data structures required by Perform()
* looked for and implemented all used reserved virtual slot functions to
  invoke Perform() where necessary or to pass on the method call statically
  (for slots that were already maintained by Be)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28124 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-15 09:29:06 +00:00
Stephan Aßmus 21bb6bd22b * Update header indentation.
* Added BScrollBar::SetOrientation().
* Improved _DrawArrowButton() to have a good visual result even when the
  scroll bar does not have the standard width or height.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27494 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-13 19:20:18 +00:00
Stephan Aßmus 1b0471487a Added layout friendly constructor (untested).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27407 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-10 21:07:32 +00:00
Stephan Aßmus 7bf5abf425 Implemented BSize returning layout methods.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27406 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-10 20:34:10 +00:00
Stephan Aßmus 749a3c1ee3 Scrollbars do not need a pointer history.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26662 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-07-28 18:43:47 +00:00
Stephan Aßmus 188ba2f72a * SetTarget((BView*)NULL) needs to unset the previous target's pointer to
the scrollbar.
* Added notes about BeOS behavior to SetTarget(const char*).
* Reuse SetTarget(NULL) in the destructor.
* Initialize fTarget and fTargetName in the archive constructor.
* Added TODO about possibly restoring the target in the archive constructor.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26057 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-21 08:39:14 +00:00
Alexandre Deckner 6d4ab8b00e - The bug in Tracker (previous commit) uncovered a bug in BScrollBar's thumb positioning. The + 1.0 was well intented and produced the right effect unless fMax-fMin was too close to 1.0. It could
leave a unusable gap on the right (or down) of the thumb.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-10 00:53:16 +00:00
Stephan Aßmus 205cf95ff6 More cleanup, disabled accidentally left on tracing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24840 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-06 17:53:43 +00:00
Stephan Aßmus 2f8dc04583 More style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24839 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-06 16:56:30 +00:00
Stephan Aßmus 1158eeac58 According to my tests on R5, a BScrollBar with a proportion of 0.0, the value
that it has when you never set it, uses the large step to figure out the
proportion it should display. This fixes Pe's scroll bars to display the
"correct" proportion. Of course the proportion is only correct if the large
step indeed equals the page size. Fixes #1758.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24838 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-06 16:47:43 +00:00