From 4b2edf78e3c61374b6f259a727e46adef300492f Mon Sep 17 00:00:00 2001 From: bitplane Date: Wed, 19 Sep 2007 15:59:46 +0000 Subject: [PATCH] scrollbar fix, updated readme git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@988 dfc29bdd-3216-0410-991c-e03cc46cb475 --- changes.txt | 1 + source/Irrlicht/CGUIScrollBar.cpp | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/changes.txt b/changes.txt index 5df2d784..f0d9dc74 100644 --- a/changes.txt +++ b/changes.txt @@ -200,6 +200,7 @@ GUI: Scrollbars are now only visible when the list doesn't fit in the visible area. You can now type an item's text to select it. + - IGUIScrollBar new methods set/getLargeStep ------------------------------------------- Changes in version 1.3.1 (20 Jun 2007) diff --git a/source/Irrlicht/CGUIScrollBar.cpp b/source/Irrlicht/CGUIScrollBar.cpp index 691ef632..4356462f 100644 --- a/source/Irrlicht/CGUIScrollBar.cpp +++ b/source/Irrlicht/CGUIScrollBar.cpp @@ -151,6 +151,7 @@ bool CGUIScrollBar::OnEvent(const SEvent& event) { Dragging = true; DraggedBySlider = SliderRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y)); + TrayClick = !DraggedBySlider; DesiredPos = getPosFromMousePos(event.MouseInput.X, event.MouseInput.Y); return true; } @@ -229,19 +230,27 @@ void CGUIScrollBar::draw() { LastChange = now; + s32 oldPos = Pos; + if (DesiredPos >= Pos + LargeStep) setPos(Pos + LargeStep); else - if (DesiredPos >= Pos + SmallStep) - setPos(Pos + SmallStep); - else if (DesiredPos <= Pos - LargeStep) setPos(Pos - LargeStep); else - if (DesiredPos <= Pos - SmallStep) - setPos(Pos - SmallStep); - } + if (DesiredPos >= Pos - LargeStep && DesiredPos <= Pos + LargeStep) + setPos(DesiredPos); + if (Pos != oldPos && Parent) + { + SEvent newEvent; + newEvent.EventType = EET_GUI_EVENT; + newEvent.GUIEvent.Caller = this; + newEvent.GUIEvent.Element = 0; + newEvent.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED; + Parent->OnEvent(newEvent); + } + } SliderRect = AbsoluteRect;