blob: 0ba10578f811b2cad1e0ce2b8367a70e857dba4d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
/*
* The Mana Client
* Copyright (C) 2004-2009 The Mana World Development Team
* Copyright (C) 2009-2012 The Mana Developers
*
* This file is part of The Mana Client.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <guichan/widgets/scrollarea.hpp>
/**
* 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!
*
* Also overrides several functions to support fixed-size scroll bar markers.
*
* \ingroup GUI
*/
class ScrollArea : public gcn::ScrollArea
{
public:
/**
* Constructor that takes no content. Needed for use with the DropDown
* class.
*/
ScrollArea();
/**
* Constructor.
*
* @param content the initial content to show in the scroll area
*/
ScrollArea(gcn::Widget *content);
/**
* Destructor. Also deletes the content.
*/
~ScrollArea() override;
/**
* Sets whether the scroll bar buttons are shown.
*/
void setShowButtons(bool showButtons);
/**
* Logic function optionally adapts width or height of contents. This
* depends on the scrollbar settings.
*/
void logic() override;
/**
* Overridden to draw the frame if its size is 0.
*/
void draw(gcn::Graphics *graphics) override;
/**
* Draws the background and border of the scroll area.
*/
void drawFrame(gcn::Graphics *graphics) override;
/**
* Applies clipping to the contents.
*/
void drawChildren(gcn::Graphics *graphics) override;
/**
* Sets whether the widget should draw its background or not.
*/
void setOpaque(bool opaque);
/**
* Returns whether the widget draws its background or not.
*/
bool isOpaque() const { return mOpaque; }
/**
* Called when the mouse moves in the widget area.
*/
void mouseMoved(gcn::MouseEvent &event) override;
/**
* Called when the mouse enteres the widget area.
*/
void mouseEntered(gcn::MouseEvent &event) override;
/**
* Called when the mouse leaves the widget area.
*/
void mouseExited(gcn::MouseEvent &event) override;
void mousePressed(gcn::MouseEvent &mouseEvent) override;
void mouseDragged(gcn::MouseEvent &mouseEvent) override;
protected:
/**
* Initializes the scroll area.
*/
void init();
void drawBackground(gcn::Graphics *graphics) override;
void drawUpButton(gcn::Graphics *graphics) override;
void drawDownButton(gcn::Graphics *graphics) override;
void drawLeftButton(gcn::Graphics *graphics) override;
void drawRightButton(gcn::Graphics *graphics) override;
void drawVBar(gcn::Graphics *graphics) override;
void drawHBar(gcn::Graphics *graphics) override;
void drawVMarker(gcn::Graphics *graphics) override;
void drawHMarker(gcn::Graphics *graphics) override;
void checkPolicies() override;
/**
* Shadowing these functions from gcn::ScrollArea with versions that
* support hiding the buttons. We need to make sure we always use these
* versions.
*/
gcn::Rectangle getUpButtonDimension();
gcn::Rectangle getDownButtonDimension();
gcn::Rectangle getLeftButtonDimension();
gcn::Rectangle getRightButtonDimension();
gcn::Rectangle getVerticalBarDimension();
gcn::Rectangle getHorizontalBarDimension();
/**
* Shadowing these functions from gcn::ScrollArea with versions that
* supports fixed-size scroll bar markers. We need to make sure we
* always use these versions.
*/
gcn::Rectangle getVerticalMarkerDimension();
gcn::Rectangle getHorizontalMarkerDimension();
int mX = 0;
int mY = 0;
bool mHasMouse = false;
bool mOpaque = true;
bool mShowButtons = true;
};
|