From 8d46c09ccf7b437403b52303b679e5027e6ae395 Mon Sep 17 00:00:00 2001 From: that Date: Thu, 26 Feb 2015 01:30:04 +0100 Subject: gui: kinetic scrolling for console - Rebase console on ScrollList - Add fastscroll bar to console - ScrollList now has a mode that ignores selections - Increase kinetic scrolling speed for lists showing many items Change-Id: I6298d717d2e403f3e85e2c633d53c4284a066012 --- gui/objects.hpp | 112 ++++++++++++++++++++++++++------------------------------ 1 file changed, 51 insertions(+), 61 deletions(-) (limited to 'gui/objects.hpp') diff --git a/gui/objects.hpp b/gui/objects.hpp index d5c3b2738..a86747afb 100644 --- a/gui/objects.hpp +++ b/gui/objects.hpp @@ -366,67 +366,6 @@ protected: int simulate; }; -class GUIConsole : public GUIObject, public RenderObject, public ActionObject -{ -public: - GUIConsole(xml_node<>* node); - -public: - // Render - Render the full object to the GL surface - // Return 0 on success, <0 on error - virtual int Render(void); - - // Update - Update any UI component animations (called <= 30 FPS) - // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error - virtual int Update(void); - - // SetRenderPos - Update the position of the object - // Return 0 on success, <0 on error - virtual int SetRenderPos(int x, int y, int w = 0, int h = 0); - - // IsInRegion - Checks if the request is handled by this object - // Return 1 if this object handles the request, 0 if not - virtual int IsInRegion(int x, int y); - - // NotifyTouch - Notify of a touch event - // Return 0 on success, >0 to ignore remainder of touch, and <0 on error (Return error to allow other handlers) - virtual int NotifyTouch(TOUCH_STATE state, int x, int y); - -protected: - enum SlideoutState - { - hidden = 0, - visible, - request_hide, - request_show - }; - - FontResource* mFont; - ImageResource* mSlideoutImage; - COLOR mForegroundColor; - COLOR mBackgroundColor; - COLOR mScrollColor; - int mFontHeight; - int mCurrentLine; // index of last line to show; -1 to keep tracking last line - size_t mLastCount; // lines from gConsole that are already split and copied into rConsole - size_t RenderCount; // total number of lines after wrapping - int mMaxRows; // height of console in text rows - int mStartY; - int mSlideoutX, mSlideoutY, mSlideoutW, mSlideoutH; - int mSlideinX, mSlideinY, mSlideinW, mSlideinH; - int mConsoleX, mConsoleY, mConsoleW, mConsoleH; - int mLastTouchX, mLastTouchY; - int mSlideout; - SlideoutState mSlideoutState; - std::vector rConsole; - std::vector rConsoleColor; - bool mRender; - -protected: - virtual int RenderSlideout(void); - virtual int RenderConsole(void); -}; - class GUIButton : public GUIObject, public RenderObject, public ActionObject { public: @@ -606,6 +545,7 @@ protected: int firstDisplayedItem; // this item goes at the top of the display list - may only be partially visible int scrollingSpeed; // on a touch release, this is set based on the difference in the y-axis between the last 2 touches and indicates how fast the kinetic scrolling will go int y_offset; // this is how many pixels offset in the y axis for per pixel scrolling, is always <= 0 and should never be < -actualItemHeight + bool allowSelection; // true if touched item can be selected, false for pure read-only lists and the console size_t selectedItem; // selected item index after the initial touch, set to -1 if we are scrolling int touchDebounce; // debounce for touches, minimum of 6 pixels but may be larger calculated based actualItemHeight / 3 int lastY, last2Y; // last 2 touch locations, used for tracking kinetic scroll speed @@ -741,6 +681,56 @@ protected: bool updateList; }; +class GUIConsole : public GUIScrollList +{ +public: + GUIConsole(xml_node<>* node); + +public: + // Render - Render the full object to the GL surface + // Return 0 on success, <0 on error + virtual int Render(void); + + // Update - Update any UI component animations (called <= 30 FPS) + // Return 0 if nothing to update, 1 on success and contiue, >1 if full render required, and <0 on error + virtual int Update(void); + + // IsInRegion - Checks if the request is handled by this object + // Return 1 if this object handles the request, 0 if not + virtual int IsInRegion(int x, int y); + + // NotifyTouch - Notify of a touch event + // Return 0 on success, >0 to ignore remainder of touch, and <0 on error (Return error to allow other handlers) + virtual int NotifyTouch(TOUCH_STATE state, int x, int y); + + // ScrollList interface + virtual size_t GetItemCount(); + virtual void RenderItem(size_t itemindex, int yPos, bool selected); + virtual void NotifySelect(size_t item_selected); +protected: + enum SlideoutState + { + hidden = 0, + visible, + request_hide, + request_show + }; + + ImageResource* mSlideoutImage; + size_t mLastCount; // lines from gConsole that are already split and copied into rConsole + bool scrollToEnd; // true if we want to keep tracking the last line + int mSlideoutX, mSlideoutY, mSlideoutW, mSlideoutH; + int mSlideout; + SlideoutState mSlideoutState; + std::vector rConsole; + std::vector rConsoleColor; + +protected: + bool AddLines(); + int RenderSlideout(void); + int RenderConsole(void); +}; + // GUIAnimation - Used for animations class GUIAnimation : public GUIObject, public RenderObject { -- cgit v1.2.3