ManaPlus
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes
ScrollArea Class Reference

#include <scrollarea.h>

Inheritance diagram for ScrollArea:
BasicContainer MouseListener WidgetListener Widget WidgetDeathListener Widget2

Public Types

enum  ScrollPolicy { SHOW_ALWAYS = 0 , SHOW_NEVER , SHOW_AUTO }
 

Public Member Functions

 ScrollArea (Widget2 *const widget2, Widget *const widget, const Opaque opaque, const std::string &skin)
 
 ~ScrollArea ()
 
void logic ()
 
void updateAlpha ()
 
void draw (Graphics *const graphics)
 
void safeDraw (Graphics *const graphics)
 
void drawFrame (Graphics *const graphics)
 
void safeDrawFrame (Graphics *const graphics)
 
void setOpaque (Opaque opaque)
 
bool isOpaque () const
 
void mouseMoved (MouseEvent &event)
 
void mouseEntered (MouseEvent &event)
 
void mouseExited (MouseEvent &event)
 
void mousePressed (MouseEvent &event)
 
void mouseReleased (MouseEvent &event)
 
void mouseDragged (MouseEvent &event)
 
void widgetResized (const Event &event)
 
void widgetMoved (const Event &event)
 
Rect getVerticalBarDimension () const
 
Rect getHorizontalBarDimension () const
 
Rect getVerticalMarkerDimension ()
 
Rect getHorizontalMarkerDimension ()
 
Rect getUpButtonDimension () const
 
Rect getDownButtonDimension () const
 
Rect getLeftButtonDimension () const
 
Rect getRightButtonDimension () const
 
void setContent (Widget *widget)
 
WidgetgetContent ()
 
void setHorizontalScrollPolicy (const ScrollPolicy hPolicy)
 
ScrollPolicy getHorizontalScrollPolicy () const
 
void setVerticalScrollPolicy (const ScrollPolicy vPolicy)
 
ScrollPolicy getVerticalScrollPolicy () const
 
void setScrollPolicy (const ScrollPolicy hPolicy, const ScrollPolicy vPolicy)
 
void setVerticalScrollAmount (const int vScroll)
 
int getVerticalScrollAmount () const
 
void setHorizontalScrollAmount (int hScroll)
 
int getHorizontalScrollAmount () const
 
void setScrollAmount (const int hScroll, const int vScroll)
 
int getHorizontalMaxScroll ()
 
int getVerticalMaxScroll ()
 
void setScrollbarWidth (const int width)
 
int getScrollbarWidth () const
 
void setLeftButtonScrollAmount (const int amount)
 
void setRightButtonScrollAmount (const int amount)
 
void setUpButtonScrollAmount (const int amount)
 
void setDownButtonScrollAmount (const int amount)
 
int getLeftButtonScrollAmount () const
 
int getRightButtonScrollAmount () const
 
int getUpButtonScrollAmount () const
 
int getDownButtonScrollAmount () const
 
void showWidgetPart (Widget *const widget, const Rect &area)
 
Rect getChildrenArea ()
 
WidgetgetWidgetAt (int x, int y)
 
void setWidth (int width)
 
void setHeight (int height)
 
void setDimension (const Rect &dimension)
 
void mouseWheelMovedUp (MouseEvent &event)
 
void mouseWheelMovedDown (MouseEvent &event)
 
bool isSelectable () const
 
- Public Member Functions inherited from BasicContainer
 BasicContainer (const Widget2 *const widget)
 
 ~BasicContainer ()
 
void moveToTop (Widget *const widget)
 
void moveToBottom (Widget *const widget)
 
void focusNext ()
 
void focusPrevious ()
 
void setFocusHandler (FocusHandler *const focusHandler)
 
void setInternalFocusHandler (FocusHandler *const focusHandler)
 
void death (const Event &event)
 
WidgetfindFirstWidget (const std::set< Widget * > &list)
 
void add (Widget *const widget)
 
virtual void remove (Widget *const widget)
 
virtual void clear ()
 
- Public Member Functions inherited from Widget
 Widget (const Widget2 *const widget)
 
 ~Widget ()
 
void setFrameSize (const unsigned int frameSize)
 
unsigned int getFrameSize () const
 
WidgetgetParent () const
 
void setWidth (const int width)
 
int getWidth () const
 
void setHeight (const int height)
 
int getHeight () const
 
void setSize (const int width, const int height)
 
void setX (const int x)
 
int getX () const
 
void setY (const int y)
 
int getY () const
 
void setPosition (const int x, const int y)
 
void setDimension (const Rect &dimension)
 
const RectgetDimension () const
 
void setFocusable (const bool focusable)
 
bool isFocusable () const
 
virtual bool isFocused () const
 
void setEnabled (const bool enabled)
 
bool isEnabled () const
 
void setVisible (Visible visible)
 
bool isVisible () const
 
void setBaseColor (const Color &color)
 
const ColorgetBaseColor () const
 
void setForegroundColor (const Color &color)
 
const ColorgetForegroundColor () const
 
void setBackgroundColor (const Color &color)
 
const ColorgetBackgroundColor () const
 
virtual void requestFocus ()
 
virtual void requestMoveToTop ()
 
virtual void requestMoveToBottom ()
 
FocusHandlergetFocusHandler ()
 
void addActionListener (ActionListener *const actionListener)
 
void removeActionListener (ActionListener *const actionListener)
 
void addDeathListener (WidgetDeathListener *const deathListener)
 
void removeDeathListener (WidgetDeathListener *const deathListener)
 
void addMouseListener (MouseListener *const mouseListener)
 
void removeMouseListener (MouseListener *const mouseListener)
 
void addKeyListener (KeyListener *const keyListener)
 
void removeKeyListener (KeyListener *const keyListener)
 
void addFocusListener (FocusListener *const focusListener)
 
void removeFocusListener (FocusListener *const focusListener)
 
void addWidgetListener (WidgetListener *const widgetListener)
 
void removeWidgetListener (WidgetListener *const widgetListener)
 
void setActionEventId (const std::string &actionEventId)
 
const std::string & getActionEventId () const
 
virtual void getAbsolutePosition (int &x, int &y) const
 
virtual void setParent (Widget *parent)
 
FontgetFont () const
 
void setFont (Font *const font)
 
virtual void fontChanged ()
 
bool isTabInEnabled () const
 
void setTabInEnabled (const bool enabled)
 
bool isTabOutEnabled () const
 
void setTabOutEnabled (const bool enabled)
 
void requestModalFocus ()
 
virtual void requestModalMouseInputFocus ()
 
virtual void releaseModalFocus ()
 
virtual void releaseModalMouseInputFocus ()
 
virtual bool isModalFocused () const
 
virtual bool isModalMouseInputFocused () const
 
const std::list< MouseListener * > & getMouseListeners () const A_CONST
 
const std::list< KeyListener * > & getKeyListeners () const A_CONST
 
const std::list< FocusListener * > & getFocusListeners () const A_CONST
 
virtual FocusHandlergetInternalFocusHandler ()
 
void setInternalFocusHandler (FocusHandler *const internalFocusHandler)
 
void setId (const std::string &id)
 
const std::string & getId () const
 
virtual void showPart (const Rect &rectangle)
 
bool isAllowLogic () const
 
void setMouseConsume (const bool b)
 
bool isMouseConsume () const
 
void setRedraw (const bool b)
 
void setSelectable (const bool selectable)
 
void windowResized ()
 
virtual void postInit ()
 
- Public Member Functions inherited from Widget2
virtual ~Widget2 ()
 
const ColorgetThemeColor (const ThemeColorIdT type, const unsigned int alpha) const A_INLINE
 
const ColorgetThemeCharColor (const signed char c, bool &valid) const A_INLINE
 
virtual void setWidget2 (const Widget2 *const widget)
 
void setPalette (int palette)
 
void checkPalette ()
 
void setForegroundColor2 (const Color &color)
 
WidgetgetWindow () const
 
virtual void setWindow (Widget *const window)
 
- Public Member Functions inherited from WidgetDeathListener
virtual ~WidgetDeathListener ()
 
- Public Member Functions inherited from MouseListener
virtual ~MouseListener ()
 
virtual void mouseClicked (MouseEvent &event)
 
- Public Member Functions inherited from WidgetListener
virtual ~WidgetListener ()
 
virtual void widgetHidden (const Event &event)
 
virtual void widgetShown (const Event &event)
 

Protected Types

enum  BUTTON_DIR {
  UP = 0 , DOWN , LEFT , RIGHT ,
  BUTTONS_DIR
}
 
- Protected Types inherited from BasicContainer
typedef std::vector< Widget * > WidgetList
 
typedef WidgetList::iterator WidgetListIterator
 
typedef WidgetList::const_iterator WidgetListConstIterator
 
typedef WidgetList::reverse_iterator WidgetListReverseIterator
 
typedef WidgetList::const_reverse_iterator WidgetListCReverseIterator
 
- Protected Types inherited from Widget
typedef std::list< MouseListener * > MouseListenerList
 
typedef MouseListenerList::iterator MouseListenerIterator
 
typedef std::list< KeyListener * > KeyListenerList
 
typedef KeyListenerList::iterator KeyListenerIterator
 
typedef std::list< ActionListener * > ActionListenerList
 
typedef ActionListenerList::iterator ActionListenerIterator
 
typedef std::list< WidgetDeathListener * > WidgetDeathListenerList
 
typedef WidgetDeathListenerList::iterator WidgetDeathListenerIterator
 
typedef std::list< FocusListener * > FocusListenerList
 
typedef FocusListenerList::iterator FocusListenerIterator
 
typedef std::list< WidgetListener * > WidgetListenerList
 
typedef WidgetListenerList::iterator WidgetListenerIterator
 

Protected Member Functions

void init (std::string skinName)
 
void checkPolicies ()
 
void drawButton (Graphics *const graphics, const BUTTON_DIR dir)
 
void calcButton (Graphics *const graphics, const BUTTON_DIR dir)
 
void drawVBar (Graphics *const graphics) const
 
void drawHBar (Graphics *const graphics) const
 
void drawVMarker (Graphics *const graphics)
 
void drawHMarker (Graphics *const graphics)
 
void calcVBar (const Graphics *const graphics)
 
void calcHBar (const Graphics *const graphics)
 
void calcVMarker (Graphics *const graphics)
 
void calcHMarker (Graphics *const graphics)
 
ImagegetImageByState (Rect &dim, const BUTTON_DIR dir)
 
void updateCalcFlag (const Graphics *const graphics)
 
- Protected Member Functions inherited from BasicContainer
virtual void drawChildren (Graphics *const graphics)
 
virtual void safeDrawChildren (Graphics *const graphics)
 
virtual void logicChildren ()
 
- Protected Member Functions inherited from Widget
void distributeActionEvent ()
 
void distributeResizedEvent ()
 
void distributeMovedEvent ()
 
void distributeHiddenEvent ()
 
void distributeShownEvent ()
 
- Protected Member Functions inherited from Widget2
 Widget2 (const Widget2 *const widget)
 
- Protected Member Functions inherited from WidgetDeathListener
 WidgetDeathListener ()
 
- Protected Member Functions inherited from MouseListener
 MouseListener ()
 
- Protected Member Functions inherited from WidgetListener
 WidgetListener ()
 

Protected Attributes

ImageCollectionmVertexes
 
ImageCollectionmVertexes2
 
ScrollPolicy mHPolicy
 
ScrollPolicy mVPolicy
 
int mVScroll
 
int mHScroll
 
int mScrollbarWidth
 
int mUpButtonScrollAmount
 
int mDownButtonScrollAmount
 
int mLeftButtonScrollAmount
 
int mRightButtonScrollAmount
 
int mHorizontalMarkerDragOffset
 
int mVerticalMarkerDragOffset
 
int mX
 
int mY
 
int mClickX
 
int mClickY
 
int mXOffset
 
int mYOffset
 
int mDrawWidth
 
int mDrawHeight
 
bool mVBarVisible
 
bool mHBarVisible
 
bool mUpButtonPressed
 
bool mDownButtonPressed
 
bool mLeftButtonPressed
 
bool mRightButtonPressed
 
bool mIsVerticalMarkerDragged
 
bool mIsHorizontalMarkerDragged
 
Opaque mOpaque
 
bool mHasMouse
 
- Protected Attributes inherited from BasicContainer
WidgetList mWidgets
 
WidgetList mLogicWidgets
 
- Protected Attributes inherited from Widget
MouseListenerList mMouseListeners
 
KeyListenerList mKeyListeners
 
ActionListenerList mActionListeners
 
WidgetDeathListenerList mDeathListeners
 
FocusListenerList mFocusListeners
 
WidgetListenerList mWidgetListeners
 
Color mForegroundColor
 
Color mBackgroundColor
 
Color mBaseColor
 
Rect mDimension
 
std::string mActionEventId
 
std::string mId
 
FocusHandlermFocusHandler
 
FocusHandlermInternalFocusHandler
 
WidgetmParent
 
FontmCurrentFont
 
unsigned int mFrameSize
 
bool mFocusable
 
bool mTabIn
 
bool mTabOut
 
bool mEnabled
 
bool mAllowLogic
 
bool mMouseConsume
 
bool mRedraw
 
bool mSelectable
 
- Protected Attributes inherited from Widget2
int mPaletteOffset
 
WidgetmWindow
 
Color mForegroundColor2
 

Static Protected Attributes

static int instances = 0
 
static float mAlpha = 1.0
 
static bool mShowButtons = true
 
static int mMarkerSize = 0
 
static int mScrollbarSize = 12
 
static ImageRect background
 
static ImageRect vMarker
 
static ImageRect vMarkerHi
 
static ImageRect vBackground
 
static ImageRect hBackground
 
static Imagebuttons [4][2]
 
- Static Protected Attributes inherited from Widget
static FontmGlobalFont = 0
 

Additional Inherited Members

- Static Public Member Functions inherited from Widget
static void setGlobalFont (Font *const font)
 
static FontgetGloablFont ()
 
static void cleanGlobalFont ()
 
static bool widgetExists (const Widget *const widget)
 
static void distributeWindowResizeEvent ()
 
static WidgetcallPostInit (Widget *const widget)
 
- Data Fields inherited from Widget
Visible mVisible
 

Detailed Description

A scroll area.

Contrary to Guichan's scroll area, this scroll area takes ownership over its content. However, it won't delete a previously set content widget when setContent is called!

Definition at line 91 of file scrollarea.h.

Member Enumeration Documentation

◆ BUTTON_DIR

enum ScrollArea::BUTTON_DIR
protected
Enumerator
UP 
DOWN 
LEFT 
RIGHT 
BUTTONS_DIR 

Definition at line 434 of file scrollarea.h.

435  {
436  UP = 0,
437  DOWN,
438  LEFT,
439  RIGHT,
441  };

◆ ScrollPolicy

Scrollpolicies for the horizontal and vertical scrollbar. The policies are:

SHOW_ALWAYS - Always show the scrollbars no matter what. SHOW_NEVER - Never show the scrollbars no matter waht. SHOW_AUTO - Show the scrollbars only when needed. That is if the content grows larger then the ScrollArea.

Enumerator
SHOW_ALWAYS 
SHOW_NEVER 
SHOW_AUTO 

Definition at line 105 of file scrollarea.h.

106  {
107  SHOW_ALWAYS = 0,
108  SHOW_NEVER,
109  SHOW_AUTO
110  };

Constructor & Destructor Documentation

◆ ScrollArea()

ScrollArea::ScrollArea ( Widget2 *const  widget2,
Widget *const  widget,
const Opaque  opaque,
const std::string &  skin 
)

Definition at line 105 of file scrollarea.cpp.

108  :
109  BasicContainer(widget2),
110  MouseListener(),
111  WidgetListener(),
116  mVScroll(0),
117  mHScroll(0),
118  mScrollbarWidth(12),
125  mX(0),
126  mY(0),
127  mClickX(0),
128  mClickY(0),
129  mXOffset(0),
130  mYOffset(0),
131  mDrawWidth(0),
132  mDrawHeight(0),
133  mVBarVisible(false),
134  mHBarVisible(false),
135  mUpButtonPressed(false),
136  mDownButtonPressed(false),
137  mLeftButtonPressed(false),
138  mRightButtonPressed(false),
142  mHasMouse(false)
143 {
144  setContent(widget);
145  addMouseListener(this);
146  mOpaque = opaque;
147  init(skin);
148 }
int mDrawHeight
Definition: scrollarea.h:548
bool mLeftButtonPressed
Definition: scrollarea.h:573
bool mRightButtonPressed
Definition: scrollarea.h:578
int mDrawWidth
Definition: scrollarea.h:547
bool mIsHorizontalMarkerDragged
Definition: scrollarea.h:588
ScrollPolicy mHPolicy
Definition: scrollarea.h:489
bool mDownButtonPressed
Definition: scrollarea.h:568
int mVScroll
Definition: scrollarea.h:499
int mYOffset
Definition: scrollarea.h:546
int mHScroll
Definition: scrollarea.h:504
ScrollPolicy mVPolicy
Definition: scrollarea.h:494
Opaque mOpaque
Definition: scrollarea.h:594
int mScrollbarWidth
Definition: scrollarea.h:509
int mXOffset
Definition: scrollarea.h:545
bool mIsVerticalMarkerDragged
Definition: scrollarea.h:583
int mLeftButtonScrollAmount
Definition: scrollarea.h:524
int mRightButtonScrollAmount
Definition: scrollarea.h:529
bool mHasMouse
Definition: scrollarea.h:596
void setContent(Widget *widget)
ImageCollection * mVertexes2
Definition: scrollarea.h:484
ImageCollection * mVertexes
Definition: scrollarea.h:483
bool mUpButtonPressed
Definition: scrollarea.h:563
int mUpButtonScrollAmount
Definition: scrollarea.h:514
void init(std::string skinName)
Definition: scrollarea.cpp:182
int mHorizontalMarkerDragOffset
Definition: scrollarea.h:534
bool mHBarVisible
Definition: scrollarea.h:558
int mVerticalMarkerDragOffset
Definition: scrollarea.h:539
int mDownButtonScrollAmount
Definition: scrollarea.h:519
bool mVBarVisible
Definition: scrollarea.h:553
void addMouseListener(MouseListener *const mouseListener)
Definition: widget.cpp:292
friend class BasicContainer
Definition: widget.h:101
const bool Opaque_true
Definition: opaque.h:30

References Widget::addMouseListener(), init(), mOpaque, and setContent().

◆ ~ScrollArea()

ScrollArea::~ScrollArea ( )

Destructor. Also deletes the content.

Definition at line 150 of file scrollarea.cpp.

151 {
152  if (gui != nullptr)
153  gui->removeDragged(this);
154 
155  // Garbage collection
156  delete getContent();
157 
158  instances--;
159  if (instances == 0)
160  {
162  Theme::unloadRect(vMarker, 0, 8);
166  for (int i = 0; i < 2; i ++)
167  {
168  for (int f = UP; f < BUTTONS_DIR; f ++)
169  {
170  if (buttons[f][i] != nullptr)
171  buttons[f][i]->decRef();
172  }
173  }
174  }
175 
178 
179  setContent(nullptr);
180 }
void removeDragged(const Widget *const widget)
Definition: gui.cpp:1162
static ImageRect vMarkerHi
Definition: scrollarea.h:478
static ImageRect hBackground
Definition: scrollarea.h:480
static ImageRect vMarker
Definition: scrollarea.h:477
static ImageRect background
Definition: scrollarea.h:476
Widget * getContent()
static int instances
Definition: scrollarea.h:471
static ImageRect vBackground
Definition: scrollarea.h:479
static Image * buttons[4][2]
Definition: scrollarea.h:481
static void unloadRect(const ImageRect &rect, const int start, const int end)
Definition: theme.cpp:915
#define delete2(var)
Definition: delete2.h:25
Gui * gui
Definition: gui.cpp:111

References background, buttons, BUTTONS_DIR, delete2, getContent(), gui, hBackground, instances, mVertexes, mVertexes2, Gui::removeDragged(), setContent(), Theme::unloadRect(), UP, vBackground, vMarker, and vMarkerHi.

Member Function Documentation

◆ calcButton()

void ScrollArea::calcButton ( Graphics *const  graphics,
const BUTTON_DIR  dir 
)
protected

Definition at line 544 of file scrollarea.cpp.

546 {
547  Rect dim;
548  const Image *const image = getImageByState(dim, dir);
549 
550  if (image != nullptr)
551  {
552  static_cast<Graphics*>(graphics)->calcTileCollection(
553  mVertexes, image, dim.x, dim.y);
554  }
555 }
Definition: rect.h:74
int y
Definition: rect.h:214
int x
Definition: rect.h:209
Image * getImageByState(Rect &dim, const BUTTON_DIR dir)
Definition: scrollarea.cpp:503
void void calcTileCollection(ImageCollection *restrict const vertCol, const Image *restrict const image, int x, int y) restrict2 override final

References calcTileCollection(), getImageByState(), mVertexes, Rect::x, and Rect::y.

Referenced by draw().

◆ calcHBar()

void ScrollArea::calcHBar ( const Graphics *const  graphics)
protected

Definition at line 635 of file scrollarea.cpp.

636 {
637  const Rect &dim = getHorizontalBarDimension();
638 
639  if (hBackground.grid[4] != nullptr)
640  {
641  graphics->calcPattern(mVertexes,
642  hBackground.grid[4],
643  dim.x, dim.y,
644  dim.width, dim.height);
645  }
646 
647  if (hBackground.grid[3] != nullptr)
648  {
649  graphics->calcPattern(mVertexes,
650  hBackground.grid[3],
651  dim.x, dim.y,
652  hBackground.grid[3]->getWidth(), dim.height);
653  }
654 
655  if (hBackground.grid[5] != nullptr)
656  {
657  graphics->calcPattern(mVertexes,
658  hBackground.grid[5],
659  dim.x + dim.width - hBackground.grid[5]->getWidth(),
660  dim.y,
661  hBackground.grid[5]->getWidth(),
662  dim.height);
663  }
664 }
virtual void calcPattern(ImageVertexes *const vert, const Image *const image, const int x, const int y, const int w, const int h) const =0
Image * grid[9]
Definition: imagerect.h:42
int width
Definition: rect.h:219
int height
Definition: rect.h:224
Rect getHorizontalBarDimension() const
Definition: scrollarea.cpp:995

References Graphics::calcPattern(), getHorizontalBarDimension(), ImageRect::grid, hBackground, Rect::height, mVertexes, Rect::width, Rect::x, and Rect::y.

Referenced by draw().

◆ calcHMarker()

void ScrollArea::calcHMarker ( Graphics *const  graphics)
protected

Definition at line 723 of file scrollarea.cpp.

724 {
725  const Rect dim = getHorizontalMarkerDimension();
726 
727  if ((mHasMouse) && (mY > (mDimension.height - mScrollbarWidth)))
728  {
729  graphics->calcWindow(mVertexes,
730  dim.x, dim.y,
731  dim.width, dim.height,
732  vMarkerHi);
733  }
734  else
735  {
736  graphics->calcWindow(mVertexes,
737  dim.x, dim.y,
738  dim.width, dim.height,
739  vMarker);
740  }
741 }
virtual void calcWindow(ImageCollection *const vertCol, const int x, const int y, const int w, const int h, const ImageRect &imgRect)=0
Rect getHorizontalMarkerDimension()
Rect mDimension
Definition: widget.h:1101

References Graphics::calcWindow(), getHorizontalMarkerDimension(), Rect::height, Widget::mDimension, mHasMouse, mScrollbarWidth, mVertexes, mY, vMarker, vMarkerHi, Rect::width, Rect::x, and Rect::y.

Referenced by draw().

◆ calcVBar()

void ScrollArea::calcVBar ( const Graphics *const  graphics)
protected

Definition at line 580 of file scrollarea.cpp.

581 {
582  const Rect &dim = getVerticalBarDimension();
583 
584  if (vBackground.grid[4] != nullptr)
585  {
586  graphics->calcPattern(mVertexes,
587  vBackground.grid[4],
588  dim.x, dim.y,
589  dim.width, dim.height);
590  }
591  if (vBackground.grid[1] != nullptr)
592  {
593  graphics->calcPattern(mVertexes,
594  vBackground.grid[1],
595  dim.x, dim.y,
596  dim.width, vBackground.grid[1]->getHeight());
597  }
598  if (vBackground.grid[7] != nullptr)
599  {
600  graphics->calcPattern(mVertexes,
601  vBackground.grid[7],
602  dim.x, dim.height - vBackground.grid[7]->getHeight() + dim.y,
603  dim.width, vBackground.grid[7]->getHeight());
604  }
605 }
Rect getVerticalBarDimension() const
Definition: scrollarea.cpp:975

References Graphics::calcPattern(), getVerticalBarDimension(), ImageRect::grid, Rect::height, mVertexes, vBackground, Rect::width, Rect::x, and Rect::y.

Referenced by draw().

◆ calcVMarker()

void ScrollArea::calcVMarker ( Graphics *const  graphics)
protected

Definition at line 684 of file scrollarea.cpp.

685 {
686  const Rect &dim = getVerticalMarkerDimension();
687 
688  if ((mHasMouse) && (mX > (mDimension.width - mScrollbarWidth)))
689  {
690  graphics->calcWindow(mVertexes,
691  dim.x, dim.y,
692  dim.width, dim.height,
693  vMarkerHi);
694  }
695  else
696  {
697  graphics->calcWindow(mVertexes,
698  dim.x, dim.y,
699  dim.width, dim.height,
700  vMarker);
701  }
702 }
Rect getVerticalMarkerDimension()

References Graphics::calcWindow(), getVerticalMarkerDimension(), Rect::height, Widget::mDimension, mHasMouse, mScrollbarWidth, mVertexes, mX, vMarker, vMarkerHi, Rect::width, Rect::x, and Rect::y.

Referenced by draw().

◆ checkPolicies()

void ScrollArea::checkPolicies ( )
protected

Checks the policies for the scroll bars.

Definition at line 1382 of file scrollarea.cpp.

1383 {
1384  const int w = getWidth();
1385  const int h = getHeight();
1386 
1387  mHBarVisible = false;
1388  mVBarVisible = false;
1389 
1390  const Widget *const content = getContent();
1391  if (content == nullptr)
1392  {
1395  return;
1396  }
1397 
1398  if (mHPolicy == SHOW_AUTO &&
1399  mVPolicy == SHOW_AUTO)
1400  {
1401  if (content->getWidth() <= w
1402  && content->getHeight() <= h)
1403  {
1404  mHBarVisible = false;
1405  mVBarVisible = false;
1406  }
1407 
1408  if (content->getWidth() > w)
1409  {
1410  mHBarVisible = true;
1411  }
1412 
1413  if ((content->getHeight() > h)
1414  || (mHBarVisible && content->getHeight()
1415  > h - mScrollbarWidth))
1416  {
1417  mVBarVisible = true;
1418  }
1419 
1420  if (mVBarVisible && content->getWidth() > w - mScrollbarWidth)
1421  mHBarVisible = true;
1422 
1423  return;
1424  }
1425 
1426  switch (mHPolicy)
1427  {
1428  case SHOW_NEVER:
1429  mHBarVisible = false;
1430  break;
1431 
1432  case SHOW_ALWAYS:
1433  mHBarVisible = true;
1434  break;
1435 
1436  case SHOW_AUTO:
1437  if (mVPolicy == SHOW_NEVER)
1438  {
1439  mHBarVisible = (content->getWidth() > w);
1440  }
1441  else // (mVPolicy == SHOW_ALWAYS)
1442  {
1443  mHBarVisible = (content->getWidth()
1444  > w - mScrollbarWidth);
1445  }
1446  break;
1447 
1448  default:
1449  break;
1450  }
1451 
1452  switch (mVPolicy)
1453  {
1454  case SHOW_NEVER:
1455  mVBarVisible = false;
1456  break;
1457 
1458  case SHOW_ALWAYS:
1459  mVBarVisible = true;
1460  break;
1461 
1462  case SHOW_AUTO:
1463  if (mHPolicy == SHOW_NEVER)
1464  {
1465  mVBarVisible = (content->getHeight() > h);
1466  }
1467  else // (mHPolicy == SHOW_ALWAYS)
1468  {
1469  mVBarVisible = (content->getHeight()
1470  > h - mScrollbarWidth);
1471  }
1472  break;
1473  default:
1474  break;
1475  }
1476 }
Definition: widget.h:99
int getHeight() const
Definition: widget.h:240
int getWidth() const
Definition: widget.h:221

References getContent(), Widget::getHeight(), Widget::getWidth(), mHBarVisible, mHPolicy, mScrollbarWidth, mVBarVisible, mVPolicy, SHOW_ALWAYS, SHOW_AUTO, and SHOW_NEVER.

Referenced by getHorizontalMaxScroll(), getVerticalMaxScroll(), logic(), setContent(), setDimension(), setHeight(), setHorizontalScrollPolicy(), setScrollPolicy(), setVerticalScrollPolicy(), and setWidth().

◆ draw()

void ScrollArea::draw ( Graphics *const  graphics)
virtual

Draws the scroll area.

Implements Widget.

Definition at line 344 of file scrollarea.cpp.

345 {
346  BLOCK_START("ScrollArea::draw")
348  {
349  if (mOpaque == Opaque_false)
350  updateCalcFlag(graphics);
351  // need add caching or remove calc calls.
352 // if (mRedraw)
353  {
354  mVertexes->clear();
355  if (mVBarVisible)
356  {
357  if (mShowButtons)
358  {
359  calcButton(graphics, UP);
360  calcButton(graphics, DOWN);
361  }
362  calcVBar(graphics);
363  calcVMarker(graphics);
364  }
365 
366  if (mHBarVisible)
367  {
368  if (mShowButtons)
369  {
370  calcButton(graphics, LEFT);
371  calcButton(graphics, RIGHT);
372  }
373  calcHBar(graphics);
374  calcHMarker(graphics);
375  }
376  graphics->finalize(mVertexes);
377  }
378  graphics->drawTileCollection(mVertexes);
379  }
380 
381  updateAlpha();
382 
383  if (mRedraw)
384  {
385  const bool redraw = graphics->getRedraw();
386  graphics->setRedraw(true);
387  drawChildren(graphics);
388  graphics->setRedraw(redraw);
389  }
390  else
391  {
392  drawChildren(graphics);
393  }
394  mRedraw = false;
395  BLOCK_END("ScrollArea::draw")
396 }
virtual void drawChildren(Graphics *const graphics)
virtual void drawTileCollection(const ImageCollection *const vertCol)=0
bool getRedraw() const
Definition: graphics.h:287
virtual void finalize(ImageCollection *const col)
Definition: graphics.h:465
void setRedraw(const bool n)
Definition: graphics.h:284
void calcVBar(const Graphics *const graphics)
Definition: scrollarea.cpp:580
void calcHBar(const Graphics *const graphics)
Definition: scrollarea.cpp:635
void calcButton(Graphics *const graphics, const BUTTON_DIR dir)
Definition: scrollarea.cpp:544
void updateAlpha()
Definition: scrollarea.cpp:320
void calcVMarker(Graphics *const graphics)
Definition: scrollarea.cpp:684
void calcHMarker(Graphics *const graphics)
Definition: scrollarea.cpp:723
static bool mShowButtons
Definition: scrollarea.h:473
void updateCalcFlag(const Graphics *const graphics)
Definition: scrollarea.cpp:430
bool mRedraw
Definition: widget.h:1164
if(!vert) return
const bool Opaque_false
Definition: opaque.h:30
#define BLOCK_END(name)
Definition: perfomance.h:80
#define BLOCK_START(name)
Definition: perfomance.h:79

References BLOCK_END, BLOCK_START, calcButton(), calcHBar(), calcHMarker(), calcVBar(), calcVMarker(), ImageCollection::clear(), DOWN, BasicContainer::drawChildren(), Graphics::drawTileCollection(), Graphics::finalize(), Graphics::getRedraw(), LEFT, mHBarVisible, mOpaque, Widget::mRedraw, mShowButtons, mVBarVisible, mVertexes, Opaque_false, RIGHT, Graphics::setRedraw(), UP, updateAlpha(), and updateCalcFlag().

◆ drawButton()

void ScrollArea::drawButton ( Graphics *const  graphics,
const BUTTON_DIR  dir 
)
protected

Definition at line 534 of file scrollarea.cpp.

536 {
537  Rect dim;
538  const Image *const image = getImageByState(dim, dir);
539 
540  if (image != nullptr)
541  graphics->drawImage(image, dim.x, dim.y);
542 }
virtual void drawImage(const Image *const image, int dstX, int dstY)=0

References Graphics::drawImage(), getImageByState(), Rect::x, and Rect::y.

Referenced by safeDraw().

◆ drawFrame()

void ScrollArea::drawFrame ( Graphics *const  graphics)
virtual

Draws the background and border of the scroll area.

Reimplemented from Widget.

Definition at line 456 of file scrollarea.cpp.

457 {
458  BLOCK_START("ScrollArea::drawFrame")
459  if (mOpaque == Opaque_true)
460  {
461  updateCalcFlag(graphics);
462 
463  if (mRedraw)
464  {
465  const int bs = mFrameSize * 2;
466  const int w = mDimension.width + bs;
467  const int h = mDimension.height + bs;
468  mVertexes2->clear();
469  graphics->calcWindow(mVertexes2,
470  0, 0,
471  w, h,
472  background);
473  graphics->finalize(mVertexes2);
474  }
475  graphics->drawTileCollection(mVertexes2);
476  }
477  BLOCK_END("ScrollArea::drawFrame")
478 }
unsigned int mFrameSize
Definition: widget.h:1138

References background, BLOCK_END, BLOCK_START, Graphics::calcWindow(), ImageCollection::clear(), Graphics::drawTileCollection(), Graphics::finalize(), Rect::height, Widget::mDimension, Widget::mFrameSize, mOpaque, Widget::mRedraw, mVertexes2, Opaque_true, updateCalcFlag(), and Rect::width.

◆ drawHBar()

void ScrollArea::drawHBar ( Graphics *const  graphics) const
protected

Definition at line 607 of file scrollarea.cpp.

608 {
609  const Rect &dim = getHorizontalBarDimension();
610 
611  if (hBackground.grid[4] != nullptr)
612  {
613  graphics->drawPattern(hBackground.grid[4],
614  dim.x, dim.y,
615  dim.width, dim.height);
616  }
617 
618  if (hBackground.grid[3] != nullptr)
619  {
620  graphics->drawPattern(hBackground.grid[3],
621  dim.x, dim.y,
622  hBackground.grid[3]->getWidth(), dim.height);
623  }
624 
625  if (hBackground.grid[5] != nullptr)
626  {
627  graphics->drawPattern(hBackground.grid[5],
628  dim.x + dim.width - hBackground.grid[5]->getWidth(),
629  dim.y,
630  hBackground.grid[5]->getWidth(),
631  dim.height);
632  }
633 }
virtual void drawPattern(const Image *const image, const int x, const int y, const int w, const int h)=0

References Graphics::drawPattern(), getHorizontalBarDimension(), ImageRect::grid, hBackground, Rect::height, Rect::width, Rect::x, and Rect::y.

Referenced by safeDraw().

◆ drawHMarker()

void ScrollArea::drawHMarker ( Graphics *const  graphics)
protected

Definition at line 704 of file scrollarea.cpp.

705 {
706  const Rect dim = getHorizontalMarkerDimension();
707 
708  if ((mHasMouse) && (mY > (mDimension.height - mScrollbarWidth)))
709  {
710  graphics->drawImageRect(dim.x, dim.y,
711  dim.width, dim.height,
712  vMarkerHi);
713  }
714  else
715  {
716  graphics->drawImageRect(
717  dim.x, dim.y,
718  dim.width, dim.height,
719  vMarker);
720  }
721 }
virtual void drawImageRect(const int x, const int y, const int w, const int h, const ImageRect &imgRect)=0

References Graphics::drawImageRect(), getHorizontalMarkerDimension(), Rect::height, Widget::mDimension, mHasMouse, mScrollbarWidth, mY, vMarker, vMarkerHi, Rect::width, Rect::x, and Rect::y.

Referenced by safeDraw().

◆ drawVBar()

void ScrollArea::drawVBar ( Graphics *const  graphics) const
protected

Definition at line 557 of file scrollarea.cpp.

558 {
559  const Rect &dim = getVerticalBarDimension();
560 
561  if (vBackground.grid[4] != nullptr)
562  {
563  graphics->drawPattern(vBackground.grid[4],
564  dim.x, dim.y, dim.width, dim.height);
565  }
566  if (vBackground.grid[1] != nullptr)
567  {
568  graphics->drawPattern(vBackground.grid[1],
569  dim.x, dim.y,
570  dim.width, vBackground.grid[1]->getHeight());
571  }
572  if (vBackground.grid[7] != nullptr)
573  {
574  graphics->drawPattern(vBackground.grid[7],
575  dim.x, dim.height - vBackground.grid[7]->getHeight() + dim.y,
576  dim.width, vBackground.grid[7]->getHeight());
577  }
578 }

References Graphics::drawPattern(), getVerticalBarDimension(), ImageRect::grid, Rect::height, vBackground, Rect::width, Rect::x, and Rect::y.

Referenced by safeDraw().

◆ drawVMarker()

void ScrollArea::drawVMarker ( Graphics *const  graphics)
protected

Definition at line 666 of file scrollarea.cpp.

667 {
668  const Rect &dim = getVerticalMarkerDimension();
669 
670  if ((mHasMouse) && (mX > (mDimension.width - mScrollbarWidth)))
671  {
672  graphics->drawImageRect(dim.x, dim.y,
673  dim.width, dim.height,
674  vMarkerHi);
675  }
676  else
677  {
678  graphics->drawImageRect(dim.x, dim.y,
679  dim.width, dim.height,
680  vMarker);
681  }
682 }

References Graphics::drawImageRect(), getVerticalMarkerDimension(), Rect::height, Widget::mDimension, mHasMouse, mScrollbarWidth, mX, vMarker, vMarkerHi, Rect::width, Rect::x, and Rect::y.

Referenced by safeDraw().

◆ getChildrenArea()

Rect ScrollArea::getChildrenArea ( )
virtual

Gets the area of the widget occupied by the widget's children. By default this method returns an empty rectangle as not all widgets are containers. If you want to make a container this method should return the area where the children resides. This method is used when drawing children of a widget when computing clip rectangles for the children.

An example of a widget that overloads this method is ScrollArea. A ScrollArea has a view of its contant and that view is the children area. The size of a ScrollArea's children area might vary depending on if the scroll bars of the ScrollArea is shown or not.

Returns
The area of the widget occupied by the widget's children.
See also
BasicContainer
BasicContainer::getChildrenArea
BasicContainer::drawChildren

Reimplemented from BasicContainer.

Definition at line 1322 of file scrollarea.cpp.

1323 {
1324  const Rect area = Rect(0, 0,
1327 
1328  if (area.width < 0 || area.height < 0)
1329  return Rect();
1330 
1331  return area;
1332 }

References Widget::getHeight(), Widget::getWidth(), Rect::height, mHBarVisible, mScrollbarWidth, mVBarVisible, and Rect::width.

Referenced by getHorizontalMarkerDimension(), getHorizontalMaxScroll(), getVerticalMarkerDimension(), getVerticalMaxScroll(), getWidgetAt(), mousePressed(), mouseWheelMovedDown(), and mouseWheelMovedUp().

◆ getContent()

Widget * ScrollArea::getContent ( )

Gets the content.

Returns
The content of the scroll area.

Definition at line 1207 of file scrollarea.cpp.

1208 {
1209  if (!mWidgets.empty())
1210  return *mWidgets.begin();
1211 
1212  return nullptr;
1213 }
WidgetList mWidgets

References BasicContainer::mWidgets.

Referenced by checkPolicies(), getHorizontalMaxScroll(), getVerticalMaxScroll(), getWidgetAt(), logic(), showWidgetPart(), ShortcutWindow::widgetHidden(), widgetResized(), ~ScrollArea(), and Setup_Colors::~Setup_Colors().

◆ getDownButtonDimension()

Rect ScrollArea::getDownButtonDimension ( ) const

Definition at line 1144 of file scrollarea.cpp.

1145 {
1146  if (!mVBarVisible || !mShowButtons)
1147  return Rect(0, 0, 0, 0);
1148 
1149  if (mHBarVisible)
1150  {
1154  mScrollbarWidth);
1155  }
1156 
1160  mScrollbarWidth);
1161 }

References Rect::height, Widget::mDimension, mHBarVisible, mScrollbarWidth, mShowButtons, mVBarVisible, and Rect::width.

Referenced by getImageByState(), and mousePressed().

◆ getDownButtonScrollAmount()

int ScrollArea::getDownButtonScrollAmount ( ) const
inline

Gets the amount to scroll in pixels when the down scroll button is pushed.

Returns
The amount to scroll in pixels.
See also
setDownButtonScrollAmount

Definition at line 411 of file scrollarea.h.

412  { return mDownButtonScrollAmount; }

References mDownButtonScrollAmount.

◆ getHorizontalBarDimension()

Rect ScrollArea::getHorizontalBarDimension ( ) const

Definition at line 995 of file scrollarea.cpp.

996 {
997  if (!mHBarVisible)
998  return Rect(0, 0, 0, 0);
999 
1000  const int width = mShowButtons ? mScrollbarWidth : 0;
1001  if (mVBarVisible)
1002  {
1003  return Rect(width,
1005  mDimension.width - 2 * width - mScrollbarWidth,
1006  mScrollbarWidth);
1007  }
1008 
1009  return Rect(width,
1011  mDimension.width - 2 * width,
1012  mScrollbarWidth);
1013 }

References Rect::height, Widget::mDimension, mHBarVisible, mScrollbarWidth, mShowButtons, mVBarVisible, and Rect::width.

Referenced by calcHBar(), drawHBar(), mouseDragged(), and mousePressed().

◆ getHorizontalMarkerDimension()

Rect ScrollArea::getHorizontalMarkerDimension ( )

Definition at line 1073 of file scrollarea.cpp.

1074 {
1075  if (!mHBarVisible)
1076  return Rect(0, 0, 0, 0);
1077 
1078  int length;
1079  int pos;
1080  int width;
1081  const int w2 = mShowButtons
1082  ? mScrollbarWidth : mMarkerSize / 2;
1083  const Widget *content;
1084  if (!mWidgets.empty())
1085  content = *mWidgets.begin();
1086  else
1087  content = nullptr;
1088 
1089  if (mVBarVisible)
1090  width = mDimension.width - 2 * w2 - mScrollbarWidth;
1091  else
1092  width = mDimension.width - w2 - mScrollbarWidth;
1093 
1094  const int maxH = getHorizontalMaxScroll();
1095  if (mMarkerSize != 0 && maxH != 0)
1096  {
1097  pos = (mHScroll * width / maxH - mMarkerSize / 2);
1098  length = mMarkerSize;
1099  }
1100  else
1101  {
1102  if (content != nullptr)
1103  {
1104  const int w3 = content->getWidth();
1105  if (w3 != 0)
1106  length = (width * getChildrenArea().width) / w3;
1107  else
1108  length = width;
1109  }
1110  else
1111  {
1112  length = width;
1113  }
1114 
1115  if (length < mScrollbarWidth)
1116  length = mScrollbarWidth;
1117 
1118  if (length > width)
1119  length = width;
1120 
1121  if (maxH != 0)
1122  {
1123  pos = ((width - length) * mHScroll) / maxH;
1124  }
1125  else
1126  {
1127  pos = 0;
1128  }
1129  }
1130 
1131  return Rect(w2 + pos, mDimension.height - mScrollbarWidth,
1132  length, mScrollbarWidth);
1133 }
static int mMarkerSize
Definition: scrollarea.h:474
Rect getChildrenArea()
int getHorizontalMaxScroll()

References getChildrenArea(), getHorizontalMaxScroll(), Widget::getWidth(), Rect::height, Widget::mDimension, mHBarVisible, mHScroll, mMarkerSize, mScrollbarWidth, mShowButtons, mVBarVisible, BasicContainer::mWidgets, and Rect::width.

Referenced by calcHMarker(), drawHMarker(), mouseDragged(), and mousePressed().

◆ getHorizontalMaxScroll()

int ScrollArea::getHorizontalMaxScroll ( )

Gets the maximum amount of horizontal scroll.

Returns
The horizontal max scroll.

Definition at line 1266 of file scrollarea.cpp.

1267 {
1268  checkPolicies();
1269 
1270  const Widget *const content = getContent();
1271  if (content == nullptr)
1272  return 0;
1273 
1274  const int value = content->getWidth() - getChildrenArea().width +
1275  2 * content->getFrameSize();
1276 
1277  if (value < 0)
1278  return 0;
1279 
1280  return value;
1281 }
void checkPolicies()
unsigned int getFrameSize() const
Definition: widget.h:184

References checkPolicies(), getChildrenArea(), getContent(), Widget::getFrameSize(), Widget::getWidth(), and Rect::width.

Referenced by getHorizontalMarkerDimension(), mouseDragged(), mouseReleased(), and setHorizontalScrollAmount().

◆ getHorizontalScrollAmount()

int ScrollArea::getHorizontalScrollAmount ( ) const
inline

Gets the amount that is scrolled horizontally.

Returns
The scroll amount on horizontal scroll.
See also
setHorizontalScrollAmount, setScrollAmount

Definition at line 291 of file scrollarea.h.

292  { return mHScroll; }

References mHScroll.

◆ getHorizontalScrollPolicy()

ScrollPolicy ScrollArea::getHorizontalScrollPolicy ( ) const
inline

Gets the horizontal scrollbar policy. See enum with policies.

Returns
The policy for the horizontal scrollbar policy.
See also
setHorizontalScrollPolicy, setScrollPolicy

Definition at line 230 of file scrollarea.h.

231  { return mHPolicy; }

References mHPolicy.

◆ getImageByState()

Image * ScrollArea::getImageByState ( Rect dim,
const BUTTON_DIR  dir 
)
protected

Definition at line 503 of file scrollarea.cpp.

504 {
505  int state = 0;
506 
507  switch (dir)
508  {
509  case UP:
510  state = mUpButtonPressed ? 1 : 0;
511  dim = getUpButtonDimension();
512  break;
513  case DOWN:
514  state = mDownButtonPressed ? 1 : 0;
515  dim = getDownButtonDimension();
516  break;
517  case LEFT:
518  state = mLeftButtonPressed ? 1 : 0;
519  dim = getLeftButtonDimension();
520  break;
521  case RIGHT:
522  state = mRightButtonPressed ? 1 : 0;
523  dim = getRightButtonDimension();
524  break;
525  case BUTTONS_DIR:
526  default:
527  logger->log("ScrollArea::drawButton unknown dir: "
528  + toString(CAST_U32(dir)));
529  return nullptr;
530  }
531  return buttons[CAST_SIZE(dir)][state];
532 }
#define CAST_U32
Definition: cast.h:31
#define CAST_SIZE
Definition: cast.h:34
void log(const char *const log_text,...)
Definition: logger.cpp:269
Rect getLeftButtonDimension() const
Rect getDownButtonDimension() const
Rect getUpButtonDimension() const
Rect getRightButtonDimension() const
Logger * logger
Definition: logger.cpp:89
std::string toString(T const &value)
converts any type to a string
Definition: catch.hpp:1774

References buttons, BUTTONS_DIR, CAST_SIZE, CAST_U32, DOWN, getDownButtonDimension(), getLeftButtonDimension(), getRightButtonDimension(), getUpButtonDimension(), LEFT, Logger::log(), logger, mDownButtonPressed, mLeftButtonPressed, mRightButtonPressed, mUpButtonPressed, RIGHT, Catch::toString(), and UP.

Referenced by calcButton(), and drawButton().

◆ getLeftButtonDimension()

Rect ScrollArea::getLeftButtonDimension ( ) const

Definition at line 1163 of file scrollarea.cpp.

1164 {
1165  if (!mHBarVisible || !mShowButtons)
1166  return Rect(0, 0, 0, 0);
1167 
1168  return Rect(0, mDimension.height - mScrollbarWidth,
1170 }

References Rect::height, Widget::mDimension, mHBarVisible, mScrollbarWidth, and mShowButtons.

Referenced by getImageByState(), and mousePressed().

◆ getLeftButtonScrollAmount()

int ScrollArea::getLeftButtonScrollAmount ( ) const
inline

Gets the amount to scroll in pixels when the left scroll button is pushed.

Returns
The amount to scroll in pixels.
See also
setLeftButtonScrollAmount

Definition at line 381 of file scrollarea.h.

382  { return mLeftButtonScrollAmount; }

References mLeftButtonScrollAmount.

◆ getRightButtonDimension()

Rect ScrollArea::getRightButtonDimension ( ) const

Definition at line 1172 of file scrollarea.cpp.

1173 {
1174  if (!mHBarVisible || !mShowButtons)
1175  return Rect(0, 0, 0, 0);
1176 
1177  if (mVBarVisible)
1178  {
1179  return Rect(mDimension.width - mScrollbarWidth*2,
1182  mScrollbarWidth);
1183  }
1184 
1188  mScrollbarWidth);
1189 }

References Rect::height, Widget::mDimension, mHBarVisible, mScrollbarWidth, mShowButtons, mVBarVisible, and Rect::width.

Referenced by getImageByState(), and mousePressed().

◆ getRightButtonScrollAmount()

int ScrollArea::getRightButtonScrollAmount ( ) const
inline

Gets the amount to scroll in pixels when the right scroll button is pushed.

Returns
The amount to scroll in pixels.
See also
setRightButtonScrollAmount

Definition at line 391 of file scrollarea.h.

392  { return mRightButtonScrollAmount; }

References mRightButtonScrollAmount.

◆ getScrollbarWidth()

int ScrollArea::getScrollbarWidth ( ) const
inline

Gets the width of the scroll bars.

Returns
the width of the ScrollBar.
See also
setScrollbarWidth

Definition at line 331 of file scrollarea.h.

332  { return mScrollbarWidth; }

References mScrollbarWidth.

◆ getUpButtonDimension()

Rect ScrollArea::getUpButtonDimension ( ) const

Definition at line 1135 of file scrollarea.cpp.

1136 {
1137  if (!mVBarVisible || !mShowButtons)
1138  return Rect(0, 0, 0, 0);
1139 
1140  return Rect(mDimension.width - mScrollbarWidth, 0,
1142 }

References Widget::mDimension, mScrollbarWidth, mShowButtons, mVBarVisible, and Rect::width.

Referenced by getImageByState(), and mousePressed().

◆ getUpButtonScrollAmount()

int ScrollArea::getUpButtonScrollAmount ( ) const
inline

Gets the amount to scroll in pixels when the up scroll button is pushed.

Returns
The amount to scroll in pixels.
See also
setUpButtonScrollAmount

Definition at line 401 of file scrollarea.h.

402  { return mUpButtonScrollAmount; }

References mUpButtonScrollAmount.

◆ getVerticalBarDimension()

Rect ScrollArea::getVerticalBarDimension ( ) const

Definition at line 975 of file scrollarea.cpp.

976 {
977  if (!mVBarVisible)
978  return Rect(0, 0, 0, 0);
979 
980  const int height = mShowButtons ? mScrollbarWidth : 0;
981  if (mHBarVisible)
982  {
984  height,
986  mDimension.height - 2 * height - mScrollbarWidth);
987  }
988 
990  height,
992  mDimension.height - 2 * height);
993 }

References Rect::height, Widget::mDimension, mHBarVisible, mScrollbarWidth, mShowButtons, mVBarVisible, and Rect::width.

Referenced by calcVBar(), drawVBar(), mouseDragged(), and mousePressed().

◆ getVerticalMarkerDimension()

Rect ScrollArea::getVerticalMarkerDimension ( )

Definition at line 1015 of file scrollarea.cpp.

1016 {
1017  if (!mVBarVisible)
1018  return Rect(0, 0, 0, 0);
1019 
1020  int length;
1021  int pos;
1022  int height;
1023  const int h2 = mShowButtons
1024  ? mScrollbarWidth : mMarkerSize / 2;
1025  const Widget *content;
1026  if (!mWidgets.empty())
1027  content = *mWidgets.begin();
1028  else
1029  content = nullptr;
1030 
1031  if (mHBarVisible)
1032  height = mDimension.height - 2 * h2 - mScrollbarWidth;
1033  else
1034  height = mDimension.height - 2 * h2;
1035 
1036  const int maxV = getVerticalMaxScroll();
1037  if ((mMarkerSize != 0) && (maxV != 0))
1038  {
1039  pos = (mVScroll * height / maxV - mMarkerSize / 2);
1040  length = mMarkerSize;
1041  }
1042  else
1043  {
1044  if (content != nullptr)
1045  {
1046  const int h3 = content->getHeight();
1047  if (h3 != 0)
1048  length = (height * getChildrenArea().height) / h3;
1049  else
1050  length = height;
1051  }
1052  else
1053  {
1054  length = height;
1055  }
1056 
1057  if (length < mScrollbarWidth)
1058  length = mScrollbarWidth;
1059 
1060  if (length > height)
1061  length = height;
1062 
1063  if (maxV != 0)
1064  pos = ((height - length) * mVScroll) / maxV;
1065  else
1066  pos = 0;
1067  }
1068 
1069  return Rect(mDimension.width - mScrollbarWidth, h2 + pos,
1070  mScrollbarWidth, length);
1071 }
int getVerticalMaxScroll()

References getChildrenArea(), Widget::getHeight(), getVerticalMaxScroll(), Rect::height, Widget::mDimension, mHBarVisible, mMarkerSize, mScrollbarWidth, mShowButtons, mVBarVisible, mVScroll, BasicContainer::mWidgets, and Rect::width.

Referenced by calcVMarker(), drawVMarker(), mouseDragged(), and mousePressed().

◆ getVerticalMaxScroll()

int ScrollArea::getVerticalMaxScroll ( )

Gets the maximum amount of vertical scroll.

Returns
The vertical max scroll.

Definition at line 1283 of file scrollarea.cpp.

1284 {
1285  checkPolicies();
1286 
1287  const Widget *const content = getContent();
1288  if (content == nullptr)
1289  return 0;
1290 
1291  int value;
1292 
1293  value = content->getHeight() - getChildrenArea().height +
1294  2 * content->getFrameSize();
1295 
1296  if (value < 0)
1297  return 0;
1298 
1299  return value;
1300 }

References checkPolicies(), getChildrenArea(), getContent(), Widget::getFrameSize(), Widget::getHeight(), and Rect::height.

Referenced by ChatTab::addNewRow(), NpcDialog::addText(), NpcDialog::buildLayout(), ChatTab::chatLog(), getVerticalMarkerDimension(), UpdaterWindow::logic(), mouseDragged(), mouseReleased(), setVerticalScrollAmount(), WhoIsOnline::updateWindow(), and TabbedArea::widgetResized().

◆ getVerticalScrollAmount()

int ScrollArea::getVerticalScrollAmount ( ) const
inline

Gets the amount that is scrolled vertically.

Returns
The scroll amount on vertical scroll.
See also
setVerticalScrollAmount, setScrollAmount

Definition at line 274 of file scrollarea.h.

275  { return mVScroll; }

References mVScroll.

Referenced by ChatTab::addNewRow(), ChatTab::chatLog(), ChatTab::scroll(), WhoIsOnline::updateWindow(), and TabbedArea::widgetResized().

◆ getVerticalScrollPolicy()

ScrollPolicy ScrollArea::getVerticalScrollPolicy ( ) const
inline

Gets the vertical scrollbar policy. See enum with policies.

Returns
The policy for the vertical scrollbar.
See also
setVerticalScrollPolicy, setScrollPolicy

Definition at line 247 of file scrollarea.h.

248  { return mVPolicy; }

References mVPolicy.

◆ getWidgetAt()

Widget * ScrollArea::getWidgetAt ( int  x,
int  y 
)
virtual

Gets a widget from a certain position in the widget. This function is used to decide which gets mouse input, thus it can be overloaded to change that behaviour.

NOTE: This always returns NULL if the widget is not a container.

Parameters
xThe x coordinate of the widget to get.
yThe y coordinate of the widget to get.
Returns
The widget at the specified coodinate, NULL if no widget is found.

Reimplemented from BasicContainer.

Definition at line 1334 of file scrollarea.cpp.

1335 {
1336  if (getChildrenArea().isPointInRect(x, y))
1337  return getContent();
1338 
1339  return nullptr;
1340 }

References getChildrenArea(), getContent(), x, and y.

◆ init()

void ScrollArea::init ( std::string  skinName)
protected

Initializes the scroll area.

Definition at line 182 of file scrollarea.cpp.

183 {
185 
190 
191  if (instances == 0)
192  {
193  for (int f = 0; f < 9; f ++)
194  {
195  background.grid[f] = nullptr;
196  vMarker.grid[f] = nullptr;
197  vMarkerHi.grid[f] = nullptr;
198  vBackground.grid[f] = nullptr;
199  hBackground.grid[f] = nullptr;
200  }
201 
202  // +++ here probably need move background from static
203  if (skinName.empty())
204  skinName = "scroll_background.xml";
205  if (theme != nullptr)
206  {
208  skinName,
209  "scroll_background.xml",
210  0,
211  8);
213  "scroll.xml",
214  "",
215  0,
216  8);
218  "scroll_highlighted.xml",
219  "scroll.xml",
220  0,
221  8);
223  "scroll_vbackground.xml",
224  "",
225  0,
226  8);
228  "scroll_hbackground.xml",
229  "",
230  0,
231  8);
232  }
233 
234  for (int i = 0; i < 2; i ++)
235  {
236  Skin *skin = nullptr;
237  if (theme != nullptr)
238  {
239  skin = theme->load(buttonFiles[i],
240  "scrollbuttons.xml",
241  true,
243  }
244  if (skin != nullptr)
245  {
246  const ImageRect &rect = skin->getBorder();
247  for (int f = UP; f < BUTTONS_DIR; f ++)
248  {
249  if (rect.grid[f] != nullptr)
250  rect.grid[f]->incRef();
251  buttons[f][i] = rect.grid[f];
252  }
253  if (i == 0)
254  {
255  mShowButtons = (skin->getOption("showbuttons", 1) == 1);
256  mMarkerSize = skin->getOption("markersize", 0);
257  mScrollbarSize = skin->getOption("scrollbarsize", 12);
258  }
259  }
260  else
261  {
262  for (int f = UP; f < BUTTONS_DIR; f ++)
263  buttons[f][i] = nullptr;
264  }
265  if (theme != nullptr)
266  theme->unload(skin);
267  }
268  }
270  instances++;
271 }
void setUpButtonScrollAmount(const int amount)
Definition: scrollarea.h:361
void setRightButtonScrollAmount(const int amount)
Definition: scrollarea.h:351
void setDownButtonScrollAmount(const int amount)
Definition: scrollarea.h:371
static int mScrollbarSize
Definition: scrollarea.h:475
void setOpaque(Opaque opaque)
Definition: scrollarea.cpp:497
void setLeftButtonScrollAmount(const int amount)
Definition: scrollarea.h:341
Definition: skin.h:37
int getOption(const std::string &name) const
Definition: skin.h:106
const ImageRect & getBorder() const
Definition: skin.h:68
void unload(Skin *const skin)
Definition: theme.cpp:250
static std::string getThemePath()
Definition: theme.h:67
Skin * load(const std::string &filename, const std::string &filename2, const bool full, const std::string &defaultPath)
Definition: theme.cpp:179
void loadRect(ImageRect &image, const std::string &name, const std::string &name2, const int start, const int end)
Definition: theme.cpp:883
static std::string const buttonFiles[2]
Definition: scrollarea.cpp:99
Theme * theme
Definition: theme.cpp:62

References background, buttonFiles, buttons, BUTTONS_DIR, Skin::getBorder(), Skin::getOption(), Theme::getThemePath(), ImageRect::grid, hBackground, instances, Theme::load(), Theme::loadRect(), mMarkerSize, mOpaque, mScrollbarSize, mScrollbarWidth, mShowButtons, setDownButtonScrollAmount(), setLeftButtonScrollAmount(), setOpaque(), setRightButtonScrollAmount(), setUpButtonScrollAmount(), theme, Theme::unload(), UP, vBackground, vMarker, and vMarkerHi.

Referenced by ScrollArea().

◆ isOpaque()

bool ScrollArea::isOpaque ( ) const
inline

Returns whether the widget draws its background or not.

Definition at line 158 of file scrollarea.h.

159  { return mOpaque == Opaque_true; }

References mOpaque, and Opaque_true.

◆ isSelectable()

bool ScrollArea::isSelectable ( ) const
virtual

Reimplemented from Widget.

Definition at line 1478 of file scrollarea.cpp.

1479 {
1480  if (mVBarVisible || mHBarVisible)
1481  return true;
1482  return Widget::isSelectable();
1483 }
virtual bool isSelectable() const
Definition: widget.h:945

References Widget::isSelectable(), mHBarVisible, and mVBarVisible.

◆ logic()

void ScrollArea::logic ( )
virtual

Logic function optionally adapts width or height of contents. This depends on the scrollbar settings.

Reimplemented from BasicContainer.

Definition at line 273 of file scrollarea.cpp.

274 {
275  BLOCK_START("ScrollArea::logic")
276  if (!isVisible())
277  {
278  BLOCK_END("ScrollArea::logic")
279  return;
280  }
281 
282  checkPolicies();
283 
286 
287  Widget *const content = getContent();
288  if (content != nullptr)
289  {
290  unsigned int frameSize = content->getFrameSize();
291  content->setPosition(-mHScroll + frameSize, -mVScroll + frameSize);
292  content->logic();
293 
294  // When no scrollbar in a certain direction,
295  // adapt content size to match the content dimension exactly.
296  frameSize = 2 * content->getFrameSize();
298  {
299  content->setWidth((mVBarVisible ? (mDimension.width
300  - mScrollbarWidth) : mDimension.width) - frameSize);
301  }
303  {
304  content->setHeight((mHBarVisible ? (mDimension.height
305  - mScrollbarWidth) : mDimension.height) - frameSize);
306  }
307  }
308 
309  if (mUpButtonPressed)
311  else if (mDownButtonPressed)
313  else if (mLeftButtonPressed)
315  else if (mRightButtonPressed)
317  BLOCK_END("ScrollArea::logic")
318 }
void setVerticalScrollAmount(const int vScroll)
void setHorizontalScrollAmount(int hScroll)
bool isVisible() const
Definition: widget.h:378

References BLOCK_END, BLOCK_START, checkPolicies(), getContent(), Widget::getFrameSize(), Rect::height, Widget::isVisible(), Widget::logic(), Widget::mDimension, mDownButtonPressed, mDownButtonScrollAmount, mHBarVisible, mHPolicy, mHScroll, mLeftButtonPressed, mLeftButtonScrollAmount, mRightButtonPressed, mRightButtonScrollAmount, mScrollbarWidth, mUpButtonPressed, mUpButtonScrollAmount, mVBarVisible, mVPolicy, mVScroll, Widget::setHeight(), setHorizontalScrollAmount(), Widget::setPosition(), setVerticalScrollAmount(), Widget::setWidth(), SHOW_NEVER, and Rect::width.

Referenced by ChatTab::addNewRow(), ChatTab::chatLog(), UpdaterWindow::logic(), and WhoIsOnline::logic().

◆ mouseDragged()

void ScrollArea::mouseDragged ( MouseEvent event)
virtual

Called when the mouse has moved and the mouse has previously been pressed on the widget.

Parameters
eventDescribes the event.

Reimplemented from MouseListener.

Definition at line 933 of file scrollarea.cpp.

934 {
936  {
937  const Rect barDim = getVerticalBarDimension();
938  const int length = getVerticalMarkerDimension().height;
939 
940  if ((barDim.height - length) > 0)
941  {
942  const int pos = event.getY() - barDim.y
945  / (barDim.height - length));
946  }
947  else
948  {
950  }
951  }
952 
954  {
955  const Rect barDim = getHorizontalBarDimension();
956  const int length = getHorizontalMarkerDimension().width;
957 
958  if ((barDim.width - length) > 0)
959  {
960  const int pos = event.getX() - barDim.x
963  / (barDim.width - length));
964  }
965  else
966  {
968  }
969  }
970 
971  event.consume();
972  mRedraw = true;
973 }

References getHorizontalBarDimension(), getHorizontalMarkerDimension(), getHorizontalMaxScroll(), getVerticalBarDimension(), getVerticalMarkerDimension(), getVerticalMaxScroll(), Rect::height, mHorizontalMarkerDragOffset, mIsHorizontalMarkerDragged, mIsVerticalMarkerDragged, Widget::mRedraw, mVerticalMarkerDragOffset, setHorizontalScrollAmount(), setVerticalScrollAmount(), Rect::width, Rect::x, and Rect::y.

◆ mouseEntered()

void ScrollArea::mouseEntered ( MouseEvent event)
virtual

Called when the mouse enteres the widget area.

Reimplemented from MouseListener.

Definition at line 749 of file scrollarea.cpp.

750 {
751  mHasMouse = true;
752 }

References mHasMouse.

◆ mouseExited()

void ScrollArea::mouseExited ( MouseEvent event)
virtual

Called when the mouse leaves the widget area.

Reimplemented from MouseListener.

Definition at line 754 of file scrollarea.cpp.

755 {
756  mHasMouse = false;
757 }

References mHasMouse.

◆ mouseMoved()

void ScrollArea::mouseMoved ( MouseEvent event)
virtual

Called when the mouse moves in the widget area.

Reimplemented from MouseListener.

Definition at line 743 of file scrollarea.cpp.

744 {
745  mX = event.getX();
746  mY = event.getY();
747 }

References mX, and mY.

◆ mousePressed()

void ScrollArea::mousePressed ( MouseEvent event)
virtual

Called when a mouse button has been pressed on the widget area.

NOTE: A mouse press is NOT equal to a mouse click. Use mouseClickMessage to check for mouse clicks.

Parameters
eventDescribes the event.

Reimplemented from MouseListener.

Definition at line 776 of file scrollarea.cpp.

777 {
778  const int x = event.getX();
779  const int y = event.getY();
780 
781  if (getUpButtonDimension().isPointInRect(x, y))
782  {
785  mUpButtonPressed = true;
786  event.consume();
787  }
788  else if (getDownButtonDimension().isPointInRect(x, y))
789  {
792  mDownButtonPressed = true;
793  event.consume();
794  }
795  else if (getLeftButtonDimension().isPointInRect(x, y))
796  {
799  mLeftButtonPressed = true;
800  event.consume();
801  }
802  else if (getRightButtonDimension().isPointInRect(x, y))
803  {
806  mRightButtonPressed = true;
807  event.consume();
808  }
809  else if (getVerticalMarkerDimension().isPointInRect(x, y))
810  {
813 
815  event.consume();
816  }
817  else if (getVerticalBarDimension().isPointInRect(x, y))
818  {
820  {
822  - CAST_S32(getChildrenArea().height * 0.1));
823  }
824  else
825  {
827  + CAST_S32(getChildrenArea().height * 0.1));
828  }
829  event.consume();
830  }
831  else if (getHorizontalMarkerDimension().isPointInRect(x, y))
832  {
834  mIsVerticalMarkerDragged = false;
836  event.consume();
837  }
838  else if (getHorizontalBarDimension().isPointInRect(x, y))
839  {
841  {
843  - CAST_S32(getChildrenArea().width * 0.1));
844  }
845  else
846  {
848  + CAST_S32(getChildrenArea().width * 0.1));
849  }
850  event.consume();
851  }
852 
853  if (event.getButton() == MouseButton::LEFT &&
854  !event.isConsumed())
855  {
856  mClickX = event.getX();
857  mClickY = event.getY();
858  }
859 }
#define CAST_S32
Definition: cast.h:30
bool isConsumed() const
MouseButtonT getButton() const
Definition: mouseevent.h:116

References CAST_S32, MouseEvent::getButton(), getChildrenArea(), getDownButtonDimension(), getHorizontalBarDimension(), getHorizontalMarkerDimension(), getLeftButtonDimension(), getRightButtonDimension(), getUpButtonDimension(), getVerticalBarDimension(), getVerticalMarkerDimension(), InputGuiEvent::isConsumed(), MouseButton::LEFT, mClickX, mClickY, mDownButtonPressed, mDownButtonScrollAmount, mHorizontalMarkerDragOffset, mHScroll, mIsHorizontalMarkerDragged, mIsVerticalMarkerDragged, mLeftButtonPressed, mLeftButtonScrollAmount, mRightButtonPressed, mRightButtonScrollAmount, mUpButtonPressed, mUpButtonScrollAmount, mVerticalMarkerDragOffset, mVScroll, setHorizontalScrollAmount(), setVerticalScrollAmount(), Rect::x, x, Rect::y, and y.

◆ mouseReleased()

void ScrollArea::mouseReleased ( MouseEvent event)
virtual

Called when a mouse button has been released on the widget area.

Parameters
eventDescribes the event.

Reimplemented from MouseListener.

Definition at line 861 of file scrollarea.cpp.

862 {
863  if (event.getButton() == MouseButton::LEFT &&
864  mClickX != 0 &&
865  mClickY != 0)
866  {
867  if (!event.isConsumed())
868  {
869 #ifdef ANDROID
870  int dx = mClickX - event.getX();
871  int dy = mClickY - event.getY();
872 #else // ANDROID
873 
874  int dx = event.getX() - mClickX;
875  int dy = event.getY() - mClickY;
876 #endif // ANDROID
877 
878  if ((dx < 20 && dx > 0) || (dx > -20 && dx < 0))
879  dx = 0;
880 
881  if ((dy < 20 && dy > 0) || (dy > -20 && dy < 0))
882  dy = 0;
883 
884  if (abs(dx) > abs(dy))
885  {
886  int s = mHScroll + dx;
887  if (s < 0)
888  {
889  s = 0;
890  }
891  else
892  {
893  const int maxH = getHorizontalMaxScroll();
894  if (s > maxH)
895  s = maxH;
896  }
897 
899  }
900  else if (dy != 0)
901  {
902  int s = mVScroll + dy;
903  if (s < 0)
904  {
905  s = 0;
906  }
907  else
908  {
909  const int maxV = getVerticalMaxScroll();
910  if (s > maxV)
911  s = maxV;
912  }
913 
915  }
916  mClickX = 0;
917  mClickY = 0;
918  if (mMouseConsume && ((dx != 0) || (dy != 0)))
919  event.consume();
920  }
921  }
922  mUpButtonPressed = false;
923  mDownButtonPressed = false;
924  mLeftButtonPressed = false;
925  mRightButtonPressed = false;
927  mIsVerticalMarkerDragged = false;
928  if (mMouseConsume)
929  event.consume();
930  mRedraw = true;
931 }
bool mMouseConsume
Definition: widget.h:1162

References MouseEvent::getButton(), getHorizontalMaxScroll(), getVerticalMaxScroll(), InputGuiEvent::isConsumed(), MouseButton::LEFT, mClickX, mClickY, mDownButtonPressed, mHScroll, mIsHorizontalMarkerDragged, mIsVerticalMarkerDragged, mLeftButtonPressed, Widget::mMouseConsume, Widget::mRedraw, mRightButtonPressed, mUpButtonPressed, mVScroll, setHorizontalScrollAmount(), and setVerticalScrollAmount().

◆ mouseWheelMovedDown()

void ScrollArea::mouseWheelMovedDown ( MouseEvent event)
virtual

Called when the mouse wheel has moved down on the widget area.

Parameters
eventDescribes the event.

Reimplemented from MouseListener.

Definition at line 1371 of file scrollarea.cpp.

1372 {
1373  if (event.isConsumed())
1374  return;
1375 
1377  + getChildrenArea().height / 8);
1378 
1379  event.consume();
1380 }

References getChildrenArea(), InputGuiEvent::isConsumed(), mVScroll, and setVerticalScrollAmount().

◆ mouseWheelMovedUp()

void ScrollArea::mouseWheelMovedUp ( MouseEvent event)
virtual

Called when the mouse wheel has moved up on the widget area.

Parameters
eventDescribes the event.

Reimplemented from MouseListener.

Definition at line 1360 of file scrollarea.cpp.

1361 {
1362  if (event.isConsumed())
1363  return;
1364 
1366  - getChildrenArea().height / 8);
1367 
1368  event.consume();
1369 }

References getChildrenArea(), InputGuiEvent::isConsumed(), mVScroll, and setVerticalScrollAmount().

◆ safeDraw()

void ScrollArea::safeDraw ( Graphics *const  graphics)
virtual

Implements Widget.

Definition at line 398 of file scrollarea.cpp.

399 {
400  BLOCK_START("ScrollArea::draw")
401  if (mVBarVisible)
402  {
403  if (mShowButtons)
404  {
405  drawButton(graphics, UP);
406  drawButton(graphics, DOWN);
407  }
408  drawVBar(graphics);
409  drawVMarker(graphics);
410  }
411 
412  if (mHBarVisible)
413  {
414  if (mShowButtons)
415  {
416  drawButton(graphics, LEFT);
417  drawButton(graphics, RIGHT);
418  }
419  drawHBar(graphics);
420  drawHMarker(graphics);
421  }
422 
423  updateAlpha();
424 
425  safeDrawChildren(graphics);
426  mRedraw = false;
427  BLOCK_END("ScrollArea::draw")
428 }
virtual void safeDrawChildren(Graphics *const graphics)
void drawVBar(Graphics *const graphics) const
Definition: scrollarea.cpp:557
void drawVMarker(Graphics *const graphics)
Definition: scrollarea.cpp:666
void drawHBar(Graphics *const graphics) const
Definition: scrollarea.cpp:607
void drawHMarker(Graphics *const graphics)
Definition: scrollarea.cpp:704
void drawButton(Graphics *const graphics, const BUTTON_DIR dir)
Definition: scrollarea.cpp:534

References BLOCK_END, BLOCK_START, DOWN, drawButton(), drawHBar(), drawHMarker(), drawVBar(), drawVMarker(), LEFT, mHBarVisible, Widget::mRedraw, mShowButtons, mVBarVisible, RIGHT, BasicContainer::safeDrawChildren(), UP, and updateAlpha().

◆ safeDrawFrame()

void ScrollArea::safeDrawFrame ( Graphics *const  graphics)
virtual

Reimplemented from Widget.

Definition at line 480 of file scrollarea.cpp.

481 {
482  BLOCK_START("ScrollArea::drawFrame")
483  if (mOpaque == Opaque_true)
484  {
485  const int bs = mFrameSize * 2;
486  const int w = mDimension.width + bs;
487  const int h = mDimension.height + bs;
488 
489  updateCalcFlag(graphics);
490  graphics->drawImageRect(0, 0,
491  w, h,
492  background);
493  }
494  BLOCK_END("ScrollArea::drawFrame")
495 }

References background, BLOCK_END, BLOCK_START, Graphics::drawImageRect(), Rect::height, Widget::mDimension, Widget::mFrameSize, mOpaque, Opaque_true, updateCalcFlag(), and Rect::width.

◆ setContent()

void ScrollArea::setContent ( Widget widget)

Sets the content.

Parameters
widgetThe content of the scroll area.

Definition at line 1191 of file scrollarea.cpp.

1192 {
1193  if (widget != nullptr)
1194  {
1195  clear();
1196  add(widget);
1197  widget->setPosition(0, 0);
1198  }
1199  else
1200  {
1201  clear();
1202  }
1203 
1204  checkPolicies();
1205 }
void add(Widget *const widget)
virtual void clear()
void setPosition(const int x, const int y)
Definition: widget.cpp:161

References BasicContainer::add(), checkPolicies(), BasicContainer::clear(), and Widget::setPosition().

Referenced by ScrollArea(), ShopWindow::updateSelection(), Setup_Colors::valueChanged(), and ~ScrollArea().

◆ setDimension()

void ScrollArea::setDimension ( const Rect dimension)

Definition at line 1354 of file scrollarea.cpp.

1355 {
1356  Widget::setDimension(dimension);
1357  checkPolicies();
1358 }
void setDimension(const Rect &dimension)
Definition: widget.cpp:169

References checkPolicies(), and Widget::setDimension().

Referenced by WhoIsOnline::postInit().

◆ setDownButtonScrollAmount()

void ScrollArea::setDownButtonScrollAmount ( const int  amount)
inline

Sets the amount to scroll in pixels when the down scroll button is pushed.

Parameters
amountThe amount to scroll in pixels.
See also
getDownButtonScrollAmount

Definition at line 371 of file scrollarea.h.

372  { mDownButtonScrollAmount = amount; }

References mDownButtonScrollAmount.

Referenced by init().

◆ setHeight()

void ScrollArea::setHeight ( int  height)

◆ setHorizontalScrollAmount()

void ScrollArea::setHorizontalScrollAmount ( int  hScroll)

Sets the amount to scroll horizontally.

Parameters
hScrollThe amount to scroll.
See also
getHorizontalScrollAmount

Definition at line 1248 of file scrollarea.cpp.

1249 {
1250  const int max = getHorizontalMaxScroll();
1251 
1252  mHScroll = hScroll;
1253 
1254  if (hScroll > max)
1255  mHScroll = max;
1256  else if (hScroll < 0)
1257  mHScroll = 0;
1258 }

References getHorizontalMaxScroll(), and mHScroll.

Referenced by logic(), mouseDragged(), mousePressed(), mouseReleased(), setScrollAmount(), and showWidgetPart().

◆ setHorizontalScrollPolicy()

void ScrollArea::setHorizontalScrollPolicy ( const ScrollPolicy  hPolicy)

◆ setLeftButtonScrollAmount()

void ScrollArea::setLeftButtonScrollAmount ( const int  amount)
inline

Sets the amount to scroll in pixels when the left scroll button is pushed.

Parameters
amountThe amount to scroll in pixels.
See also
getLeftButtonScrollAmount

Definition at line 341 of file scrollarea.h.

342  { mLeftButtonScrollAmount = amount; }

References mLeftButtonScrollAmount.

Referenced by init().

◆ setOpaque()

void ScrollArea::setOpaque ( Opaque  opaque)

Sets whether the widget should draw its background or not.

Definition at line 497 of file scrollarea.cpp.

498 {
499  mOpaque = opaque;
500  setFrameSize(mOpaque == Opaque_true ? 2 : 0);
501 }
void setFrameSize(const unsigned int frameSize)
Definition: widget.h:168

References mOpaque, Opaque_true, and Widget::setFrameSize().

Referenced by init().

◆ setRightButtonScrollAmount()

void ScrollArea::setRightButtonScrollAmount ( const int  amount)
inline

Sets the amount to scroll in pixels when the right scroll button is pushed.

Parameters
amountThe amount to scroll in pixels.
See also
getRightButtonScrollAmount

Definition at line 351 of file scrollarea.h.

352  { mRightButtonScrollAmount = amount; }

References mRightButtonScrollAmount.

Referenced by init().

◆ setScrollAmount()

void ScrollArea::setScrollAmount ( const int  hScroll,
const int  vScroll 
)

Sets the amount to scroll horizontally and vertically.

Parameters
hScrollThe amount to scroll on horizontal scroll.
vScrollThe amount to scroll on vertical scroll.
See also
getHorizontalScrollAmount, getVerticalScrollAmount

Definition at line 1260 of file scrollarea.cpp.

1261 {
1262  setHorizontalScrollAmount(hScroll);
1263  setVerticalScrollAmount(vScroll);
1264 }

References setHorizontalScrollAmount(), and setVerticalScrollAmount().

Referenced by ChatTab::ChatTab().

◆ setScrollbarWidth()

void ScrollArea::setScrollbarWidth ( const int  width)

Sets the width of the scroll bars.

Parameters
widthThe width of the scroll bars.
See also
getScrollbarWidth

Definition at line 1302 of file scrollarea.cpp.

1303 {
1304  if (width > 0)
1305  mScrollbarWidth = width;
1306 }

References mScrollbarWidth.

◆ setScrollPolicy()

void ScrollArea::setScrollPolicy ( const ScrollPolicy  hPolicy,
const ScrollPolicy  vPolicy 
)

Sets the horizontal and vertical scrollbar policy.

Parameters
hPolicyThe policy for the horizontal scrollbar.
vPolicyThe policy for the vertical scrollbar.
See also
getVerticalScrollPolicy, getHorizontalScrollPolicy

Definition at line 1227 of file scrollarea.cpp.

1229 {
1230  mHPolicy = hPolicy;
1231  mVPolicy = vPolicy;
1232  checkPolicies();
1233 }

References checkPolicies(), mHPolicy, and mVPolicy.

Referenced by ChatTab::ChatTab(), NpcDialog::NpcDialog(), and Setup_Colors::Setup_Colors().

◆ setUpButtonScrollAmount()

void ScrollArea::setUpButtonScrollAmount ( const int  amount)
inline

Sets the amount to scroll in pixels when the up scroll button is pushed.

Parameters
amountThe amount to scroll in pixels.
See also
getUpButtonScrollAmount

Definition at line 361 of file scrollarea.h.

362  { mUpButtonScrollAmount = amount; }

References mUpButtonScrollAmount.

Referenced by init().

◆ setVerticalScrollAmount()

void ScrollArea::setVerticalScrollAmount ( const int  vScroll)

◆ setVerticalScrollPolicy()

void ScrollArea::setVerticalScrollPolicy ( const ScrollPolicy  vPolicy)

Sets the vertical scrollbar policy. See enum with policies.

Parameters
vPolicyThe policy for the vertical scrollbar.
See also
getVerticalScrollPolicy

Definition at line 1221 of file scrollarea.cpp.

1222 {
1223  mVPolicy = vPolicy;
1224  checkPolicies();
1225 }

References checkPolicies(), and mVPolicy.

Referenced by SkillDialog::addDefaultTab(), SocialTab::createControls(), SkillDialog::loadXmlFile(), NpcDialog::NpcDialog(), PopupMenu::PopupMenu(), EmoteWindow::postInit(), SetupTabScroll::SetupTabScroll(), StatsPage::StatsPage(), and StatsPageBasic::StatsPageBasic().

◆ setWidth()

void ScrollArea::setWidth ( int  width)

Definition at line 1342 of file scrollarea.cpp.

1343 {
1344  Widget::setWidth(width);
1345  checkPolicies();
1346 }
void setWidth(const int width)
Definition: widget.cpp:133

References checkPolicies(), and Widget::setWidth().

Referenced by PopupList::adjustSize(), Setup_Video::Setup_Video(), PopupMenu::showPopup(), and SetupTabScroll::widgetResized().

◆ showWidgetPart()

void ScrollArea::showWidgetPart ( Widget *const  widget,
const Rect area 
)
virtual

Shows a certain part of a widget in the basic container. Used when widgets want a specific part to be visible in its parent. An example is a TextArea that wants a specific part of its text to be visible when a TextArea is a child of a ScrollArea.

Parameters
widgetThe widget whom wants a specific part of itself to be visible.
areaThe rectangle to be visible.

Reimplemented from BasicContainer.

Definition at line 1308 of file scrollarea.cpp.

1309 {
1310  const Widget *const content = getContent();
1311  if (widget != content || (content == nullptr))
1312  return;
1313 
1314  BasicContainer::showWidgetPart(widget, area);
1315 
1317  - content->getX());
1319  - content->getY());
1320 }
void showWidgetPart(Widget *const widget, const Rect &area)
int getY() const
Definition: widget.h:288
int getX() const
Definition: widget.h:269

References getContent(), Widget::getFrameSize(), Widget::getX(), Widget::getY(), setHorizontalScrollAmount(), setVerticalScrollAmount(), and BasicContainer::showWidgetPart().

◆ updateAlpha()

void ScrollArea::updateAlpha ( )

Update the alpha value to the graphic components.

Definition at line 320 of file scrollarea.cpp.

321 {
322  const float alpha = std::max(settings.guiAlpha,
324 
325  if (alpha != mAlpha)
326  {
327  mAlpha = alpha;
328  for (int a = 0; a < 9; a++)
329  {
330  if (background.grid[a] != nullptr)
331  background.grid[a]->setAlpha(mAlpha);
332  if (hBackground.grid[a] != nullptr)
333  hBackground.grid[a]->setAlpha(mAlpha);
334  if (vBackground.grid[a] != nullptr)
335  vBackground.grid[a]->setAlpha(mAlpha);
336  if (vMarker.grid[a] != nullptr)
337  vMarker.grid[a]->setAlpha(mAlpha);
338  if (vMarkerHi.grid[a] != nullptr)
339  vMarkerHi.grid[a]->setAlpha(mAlpha);
340  }
341  }
342 }
static float mAlpha
Definition: scrollarea.h:472
float guiAlpha
Definition: settings.h:131
float getMinimumOpacity() const
Definition: theme.h:124
Settings settings
Definition: settings.cpp:32

References background, Theme::getMinimumOpacity(), ImageRect::grid, Settings::guiAlpha, hBackground, mAlpha, settings, theme, vBackground, vMarker, and vMarkerHi.

Referenced by draw(), and safeDraw().

◆ updateCalcFlag()

void ScrollArea::updateCalcFlag ( const Graphics *const  graphics)
protected

Definition at line 430 of file scrollarea.cpp.

431 {
432  if (!mRedraw)
433  {
434  // because we don't know where parent windows was moved,
435  // need recalc vertexes
436  const ClipRect &rect = graphics->getTopClip();
437  if (rect.xOffset != mXOffset || rect.yOffset != mYOffset)
438  {
439  mRedraw = true;
440  mXOffset = rect.xOffset;
441  mYOffset = rect.yOffset;
442  }
443  else if (rect.width != mDrawWidth || rect.height != mDrawHeight)
444  {
445  mRedraw = true;
446  mDrawWidth = rect.width;
447  mDrawHeight = rect.height;
448  }
449  else if (graphics->getRedraw())
450  {
451  mRedraw = true;
452  }
453  }
454 }
int yOffset
Definition: cliprect.h:127
int xOffset
Definition: cliprect.h:122
ClipRect & getTopClip() const
Definition: graphics.h:281

References Graphics::getRedraw(), Graphics::getTopClip(), Rect::height, mDrawHeight, mDrawWidth, Widget::mRedraw, mXOffset, mYOffset, Rect::width, ClipRect::xOffset, and ClipRect::yOffset.

Referenced by draw(), drawFrame(), and safeDrawFrame().

◆ widgetMoved()

void ScrollArea::widgetMoved ( const Event event)
virtual

Invoked when a widget is moved.

Parameters
eventDescribes the event.

Reimplemented from WidgetListener.

Definition at line 771 of file scrollarea.cpp.

772 {
773  mRedraw = true;
774 }

References Widget::mRedraw.

◆ widgetResized()

void ScrollArea::widgetResized ( const Event event)
virtual

Invoked when a widget changes its size.

Parameters
eventDescribes the event.

Reimplemented from WidgetListener.

Definition at line 759 of file scrollarea.cpp.

760 {
761  mRedraw = true;
762  Widget *const content = getContent();
763  if (content != nullptr)
764  {
765  const unsigned int frameSize = 2 * mFrameSize;
766  content->setSize(mDimension.width - frameSize,
767  mDimension.height - frameSize);
768  }
769 }
void setSize(const int width, const int height)
Definition: widget.cpp:367

References getContent(), Rect::height, Widget::mDimension, Widget::mFrameSize, Widget::mRedraw, Widget::setSize(), and Rect::width.

Field Documentation

◆ background

ImageRect ScrollArea::background
staticprotected

Definition at line 476 of file scrollarea.h.

Referenced by drawFrame(), init(), safeDrawFrame(), updateAlpha(), and ~ScrollArea().

◆ buttons

Image * ScrollArea::buttons
staticprotected

Definition at line 481 of file scrollarea.h.

Referenced by getImageByState(), init(), and ~ScrollArea().

◆ hBackground

ImageRect ScrollArea::hBackground
staticprotected

Definition at line 480 of file scrollarea.h.

Referenced by calcHBar(), drawHBar(), init(), updateAlpha(), and ~ScrollArea().

◆ instances

int ScrollArea::instances = 0
staticprotected

Definition at line 471 of file scrollarea.h.

Referenced by init(), and ~ScrollArea().

◆ mAlpha

float ScrollArea::mAlpha = 1.0
staticprotected

Definition at line 472 of file scrollarea.h.

Referenced by updateAlpha().

◆ mClickX

int ScrollArea::mClickX
protected

Definition at line 543 of file scrollarea.h.

Referenced by mousePressed(), and mouseReleased().

◆ mClickY

int ScrollArea::mClickY
protected

Definition at line 544 of file scrollarea.h.

Referenced by mousePressed(), and mouseReleased().

◆ mDownButtonPressed

bool ScrollArea::mDownButtonPressed
protected

True if the down button is pressed, false otherwise.

Definition at line 568 of file scrollarea.h.

Referenced by getImageByState(), logic(), mousePressed(), and mouseReleased().

◆ mDownButtonScrollAmount

int ScrollArea::mDownButtonScrollAmount
protected

Holds the down button scroll amount.

Definition at line 519 of file scrollarea.h.

Referenced by getDownButtonScrollAmount(), logic(), mousePressed(), and setDownButtonScrollAmount().

◆ mDrawHeight

int ScrollArea::mDrawHeight
protected

Definition at line 548 of file scrollarea.h.

Referenced by updateCalcFlag().

◆ mDrawWidth

int ScrollArea::mDrawWidth
protected

Definition at line 547 of file scrollarea.h.

Referenced by updateCalcFlag().

◆ mHasMouse

bool ScrollArea::mHasMouse
protected

◆ mHBarVisible

bool ScrollArea::mHBarVisible
protected

◆ mHorizontalMarkerDragOffset

int ScrollArea::mHorizontalMarkerDragOffset
protected

Holds the horizontal markers drag offset.

Definition at line 534 of file scrollarea.h.

Referenced by mouseDragged(), and mousePressed().

◆ mHPolicy

ScrollPolicy ScrollArea::mHPolicy
protected

Holds the horizontal scroll bar policy.

Definition at line 489 of file scrollarea.h.

Referenced by checkPolicies(), getHorizontalScrollPolicy(), logic(), setHorizontalScrollPolicy(), and setScrollPolicy().

◆ mHScroll

int ScrollArea::mHScroll
protected

Holds the horizontal scroll amount.

Definition at line 504 of file scrollarea.h.

Referenced by getHorizontalMarkerDimension(), getHorizontalScrollAmount(), logic(), mousePressed(), mouseReleased(), and setHorizontalScrollAmount().

◆ mIsHorizontalMarkerDragged

bool ScrollArea::mIsHorizontalMarkerDragged
protected

True if the horizontal marked is dragged.

Definition at line 588 of file scrollarea.h.

Referenced by mouseDragged(), mousePressed(), and mouseReleased().

◆ mIsVerticalMarkerDragged

bool ScrollArea::mIsVerticalMarkerDragged
protected

True if the vertical marked is dragged.

Definition at line 583 of file scrollarea.h.

Referenced by mouseDragged(), mousePressed(), and mouseReleased().

◆ mLeftButtonPressed

bool ScrollArea::mLeftButtonPressed
protected

True if the left button is pressed, false otherwise.

Definition at line 573 of file scrollarea.h.

Referenced by getImageByState(), logic(), mousePressed(), and mouseReleased().

◆ mLeftButtonScrollAmount

int ScrollArea::mLeftButtonScrollAmount
protected

Holds the left button scroll amount.

Definition at line 524 of file scrollarea.h.

Referenced by getLeftButtonScrollAmount(), logic(), mousePressed(), and setLeftButtonScrollAmount().

◆ mMarkerSize

int ScrollArea::mMarkerSize = 0
staticprotected

Definition at line 474 of file scrollarea.h.

Referenced by getHorizontalMarkerDimension(), getVerticalMarkerDimension(), and init().

◆ mOpaque

Opaque ScrollArea::mOpaque
protected

True if the scroll area should be opaque (that is display its background), false otherwise.

Definition at line 594 of file scrollarea.h.

Referenced by draw(), drawFrame(), init(), isOpaque(), safeDrawFrame(), ScrollArea(), and setOpaque().

◆ mRightButtonPressed

bool ScrollArea::mRightButtonPressed
protected

True if the right button is pressed, false otherwise.

Definition at line 578 of file scrollarea.h.

Referenced by getImageByState(), logic(), mousePressed(), and mouseReleased().

◆ mRightButtonScrollAmount

int ScrollArea::mRightButtonScrollAmount
protected

Holds the right button scroll amount.

Definition at line 529 of file scrollarea.h.

Referenced by getRightButtonScrollAmount(), logic(), mousePressed(), and setRightButtonScrollAmount().

◆ mScrollbarSize

int ScrollArea::mScrollbarSize = 12
staticprotected

Definition at line 475 of file scrollarea.h.

Referenced by init().

◆ mScrollbarWidth

int ScrollArea::mScrollbarWidth
protected

◆ mShowButtons

bool ScrollArea::mShowButtons = true
staticprotected

◆ mUpButtonPressed

bool ScrollArea::mUpButtonPressed
protected

True if the up button is pressed, false otherwise.

Definition at line 563 of file scrollarea.h.

Referenced by getImageByState(), logic(), mousePressed(), and mouseReleased().

◆ mUpButtonScrollAmount

int ScrollArea::mUpButtonScrollAmount
protected

Holds the up button scroll amount.

Definition at line 514 of file scrollarea.h.

Referenced by getUpButtonScrollAmount(), logic(), mousePressed(), and setUpButtonScrollAmount().

◆ mVBarVisible

bool ScrollArea::mVBarVisible
protected

◆ mVertexes

ImageCollection* ScrollArea::mVertexes
protected

Definition at line 483 of file scrollarea.h.

Referenced by calcButton(), calcHBar(), calcHMarker(), calcVBar(), calcVMarker(), draw(), and ~ScrollArea().

◆ mVertexes2

ImageCollection* ScrollArea::mVertexes2
protected

Definition at line 484 of file scrollarea.h.

Referenced by drawFrame(), and ~ScrollArea().

◆ mVerticalMarkerDragOffset

int ScrollArea::mVerticalMarkerDragOffset
protected

Holds the vertical markers drag offset.

Definition at line 539 of file scrollarea.h.

Referenced by mouseDragged(), and mousePressed().

◆ mVPolicy

ScrollPolicy ScrollArea::mVPolicy
protected

Holds the vertical scroll bar policy.

Definition at line 494 of file scrollarea.h.

Referenced by checkPolicies(), getVerticalScrollPolicy(), logic(), setScrollPolicy(), and setVerticalScrollPolicy().

◆ mVScroll

int ScrollArea::mVScroll
protected

◆ mX

int ScrollArea::mX
protected

Definition at line 541 of file scrollarea.h.

Referenced by calcVMarker(), drawVMarker(), and mouseMoved().

◆ mXOffset

int ScrollArea::mXOffset
protected

Definition at line 545 of file scrollarea.h.

Referenced by updateCalcFlag().

◆ mY

int ScrollArea::mY
protected

Definition at line 542 of file scrollarea.h.

Referenced by calcHMarker(), drawHMarker(), and mouseMoved().

◆ mYOffset

int ScrollArea::mYOffset
protected

Definition at line 546 of file scrollarea.h.

Referenced by updateCalcFlag().

◆ vBackground

ImageRect ScrollArea::vBackground
staticprotected

Definition at line 479 of file scrollarea.h.

Referenced by calcVBar(), drawVBar(), init(), updateAlpha(), and ~ScrollArea().

◆ vMarker

ImageRect ScrollArea::vMarker
staticprotected

◆ vMarkerHi

ImageRect ScrollArea::vMarkerHi
staticprotected

The documentation for this class was generated from the following files: