MyGUI
3.4.3
Main Page
Related Pages
Namespaces
Data Structures
Files
Examples
File List
Globals
MyGUIEngine
src
MyGUI_ScrollViewBase.cpp
Go to the documentation of this file.
1
/*
2
* This source file is part of MyGUI. For the latest info, see http://mygui.info/
3
* Distributed under the MIT License
4
* (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5
*/
6
7
#include "
MyGUI_Precompiled.h
"
8
#include "
MyGUI_ScrollViewBase.h
"
9
#include "
MyGUI_ScrollBar.h
"
10
11
namespace
MyGUI
12
{
13
14
void
ScrollViewBase::updateScrollSize
()
15
{
16
if
(
mScrollViewClient
==
nullptr
)
17
return
;
18
19
eraseContent
();
20
IntSize
contentSize =
getContentSize
();
21
IntSize
viewSize =
getViewSize
();
22
23
// вертикальный контент не помещается
24
if
(contentSize.
height
> viewSize.
height
)
25
{
26
if
(
mVScroll
!=
nullptr
)
27
{
28
if
(!
mVScroll
->
getVisible
() &&
mVisibleVScroll
)
29
{
30
mVScroll
->
setVisible
(
true
);
31
mScrollViewClient
->
setSize
(
32
mScrollViewClient
->
getWidth
() -
mVScroll
->
getWidth
(),
33
mScrollViewClient
->
getHeight
());
34
35
// размер может измениться
36
if
(
mChangeContentByResize
)
37
{
38
eraseContent
();
39
contentSize =
getContentSize
();
40
viewSize =
getViewSize
();
41
}
42
43
if
(
mHScroll
!=
nullptr
)
44
{
45
mHScroll
->
setSize
(
mHScroll
->
getWidth
() -
mVScroll
->
getWidth
(),
mHScroll
->
getHeight
());
46
47
// если показали вертикальный скрол бар, уменьшилось вью по горизонтали,
48
// пересчитываем горизонтальный скрол на предмет показа
49
if
((contentSize.
width
> viewSize.
width
) && (!
mHScroll
->
getVisible
()) && (
mVisibleHScroll
))
50
{
51
mHScroll
->
setVisible
(
true
);
52
mScrollViewClient
->
setSize
(
53
mScrollViewClient
->
getWidth
(),
54
mScrollViewClient
->
getHeight
() -
mHScroll
->
getHeight
());
55
mVScroll
->
setSize
(
mVScroll
->
getWidth
(),
mVScroll
->
getHeight
() -
mHScroll
->
getHeight
());
56
57
// размер может измениться
58
if
(
mChangeContentByResize
)
59
{
60
eraseContent
();
61
contentSize =
getContentSize
();
62
viewSize =
getViewSize
();
63
}
64
}
65
}
66
}
67
}
68
}
69
// вертикальный контент помещается
70
else
71
{
72
if
(
mVScroll
!=
nullptr
)
73
{
74
if
(
mVScroll
->
getVisible
())
75
{
76
mVScroll
->
setVisible
(
false
);
77
mScrollViewClient
->
setSize
(
78
mScrollViewClient
->
getWidth
() +
mVScroll
->
getWidth
(),
79
mScrollViewClient
->
getHeight
());
80
81
// размер может измениться
82
if
(
mChangeContentByResize
)
83
{
84
eraseContent
();
85
contentSize =
getContentSize
();
86
viewSize =
getViewSize
();
87
}
88
89
if
(
mHScroll
!=
nullptr
)
90
{
91
mHScroll
->
setSize
(
mHScroll
->
getWidth
() +
mVScroll
->
getWidth
(),
mHScroll
->
getHeight
());
92
93
// если скрыли вертикальный скрол бар, увеличилось вью по горизонтали,
94
// пересчитываем горизонтальный скрол на предмет скрытия
95
if
((contentSize.
width
<= viewSize.
width
) && (
mHScroll
->
getVisible
()))
96
{
97
mHScroll
->
setVisible
(
false
);
98
mScrollViewClient
->
setSize
(
99
mScrollViewClient
->
getWidth
(),
100
mScrollViewClient
->
getHeight
() +
mHScroll
->
getHeight
());
101
mVScroll
->
setSize
(
mVScroll
->
getWidth
(),
mVScroll
->
getHeight
() +
mHScroll
->
getHeight
());
102
103
// размер может измениться
104
if
(
mChangeContentByResize
)
105
{
106
eraseContent
();
107
contentSize =
getContentSize
();
108
viewSize =
getViewSize
();
109
}
110
}
111
}
112
}
113
}
114
}
115
116
117
// горизонтальный контент не помещается
118
if
(contentSize.
width
> viewSize.
width
)
119
{
120
if
(
mHScroll
!=
nullptr
)
121
{
122
if
(!
mHScroll
->
getVisible
() &&
mVisibleHScroll
)
123
{
124
mHScroll
->
setVisible
(
true
);
125
mScrollViewClient
->
setSize
(
126
mScrollViewClient
->
getWidth
(),
127
mScrollViewClient
->
getHeight
() -
mHScroll
->
getHeight
());
128
129
// размер может измениться
130
if
(
mChangeContentByResize
)
131
{
132
eraseContent
();
133
contentSize =
getContentSize
();
134
viewSize =
getViewSize
();
135
}
136
137
if
(
mVScroll
!=
nullptr
)
138
{
139
mVScroll
->
setSize
(
mVScroll
->
getWidth
(),
mVScroll
->
getHeight
() -
mHScroll
->
getHeight
());
140
141
// если показали горизонтальный скрол бар, уменьшилось вью по вертикали,
142
// пересчитываем вертикальный скрол на предмет показа
143
if
((contentSize.
height
> viewSize.
height
) && (!
mVScroll
->
getVisible
()) && (
mVisibleVScroll
))
144
{
145
mVScroll
->
setVisible
(
true
);
146
mScrollViewClient
->
setSize
(
147
mScrollViewClient
->
getWidth
() -
mVScroll
->
getWidth
(),
148
mScrollViewClient
->
getHeight
());
149
mHScroll
->
setSize
(
mHScroll
->
getWidth
() -
mVScroll
->
getWidth
(),
mHScroll
->
getHeight
());
150
151
// размер может измениться
152
if
(
mChangeContentByResize
)
153
{
154
eraseContent
();
155
contentSize =
getContentSize
();
156
viewSize =
getViewSize
();
157
}
158
}
159
}
160
}
161
}
162
}
163
// горизонтальный контент помещается
164
else
165
{
166
if
(
mHScroll
!=
nullptr
)
167
{
168
if
(
mHScroll
->
getVisible
())
169
{
170
mHScroll
->
setVisible
(
false
);
171
mScrollViewClient
->
setSize
(
172
mScrollViewClient
->
getWidth
(),
173
mScrollViewClient
->
getHeight
() +
mHScroll
->
getHeight
());
174
175
// размер может измениться
176
if
(
mChangeContentByResize
)
177
{
178
eraseContent
();
179
contentSize =
getContentSize
();
180
viewSize =
getViewSize
();
181
}
182
183
if
(
mVScroll
!=
nullptr
)
184
{
185
mVScroll
->
setSize
(
mVScroll
->
getWidth
(),
mVScroll
->
getHeight
() +
mHScroll
->
getHeight
());
186
187
// если скрыли горизонтальный скрол бар, увеличилось вью по вертикали,
188
// пересчитываем вертикальный скрол на предмет скрытия
189
if
((contentSize.
height
<= viewSize.
height
) && (
mVScroll
->
getVisible
()))
190
{
191
mVScroll
->
setVisible
(
false
);
192
mScrollViewClient
->
setSize
(
193
mScrollViewClient
->
getWidth
() +
mVScroll
->
getWidth
(),
194
mScrollViewClient
->
getHeight
());
195
mHScroll
->
setSize
(
mHScroll
->
getWidth
() +
mVScroll
->
getWidth
(),
mHScroll
->
getHeight
());
196
197
// размер может измениться
198
if
(
mChangeContentByResize
)
199
{
200
eraseContent
();
201
contentSize =
getContentSize
();
202
viewSize =
getViewSize
();
203
}
204
}
205
}
206
}
207
}
208
}
209
210
mVRange
= (viewSize.
height
>= contentSize.
height
) ? 0 : contentSize.
height
- viewSize.
height
;
211
mHRange
= (viewSize.
width
>= contentSize.
width
) ? 0 : contentSize.
width
- viewSize.
width
;
212
213
if
(
mVScroll
!=
nullptr
)
214
{
215
size_t
page =
getVScrollPage
();
216
mVScroll
->
setScrollPage
(page);
217
mVScroll
->
setScrollViewPage
(viewSize.
height
> (
int
)page ? viewSize.
height
: page);
218
mVScroll
->
setScrollRange
(
mVRange
+ 1);
219
if
(contentSize.
height
)
220
mVScroll
->
setTrackSize
(
221
int
(
float
(
mVScroll
->
getLineSize
() * viewSize.
height
) /
float
(contentSize.
height
)));
222
}
223
if
(
mHScroll
!=
nullptr
)
224
{
225
size_t
page =
getHScrollPage
();
226
mHScroll
->
setScrollPage
(page);
227
mHScroll
->
setScrollViewPage
(viewSize.
width
> (
int
)page ? viewSize.
width
: page);
228
mHScroll
->
setScrollRange
(
mHRange
+ 1);
229
if
(contentSize.
width
)
230
mHScroll
->
setTrackSize
(
int
(
float
(
mHScroll
->
getLineSize
() * viewSize.
width
) /
float
(contentSize.
width
)));
231
}
232
}
233
234
void
ScrollViewBase::updateScrollPosition
()
235
{
236
// размер контекста
237
IntSize
contentSize =
getContentSize
();
238
// текущее смещение контекста
239
IntPoint
contentPoint =
getContentPosition
();
240
// расчетное смещение
241
IntPoint
offset = contentPoint;
242
243
IntSize
viewSize =
getViewSize
();
244
245
Align
align =
getContentAlign
();
246
247
if
(contentSize.
width
> viewSize.
width
)
248
{
249
// максимальный выход влево
250
if
((offset.
left
+ viewSize.
width
) > contentSize.
width
)
251
{
252
offset.
left
= contentSize.
width
- viewSize.
width
;
253
}
254
// максимальный выход вправо
255
else
if
(offset.
left
< 0)
256
{
257
offset.
left
= 0;
258
}
259
}
260
else
261
{
262
if
(align.
isLeft
())
263
{
264
offset.
left
= 0;
265
}
266
else
if
(align.
isRight
())
267
{
268
offset.
left
= contentSize.
width
- viewSize.
width
;
269
}
270
else
271
{
272
offset.
left
= (contentSize.
width
- viewSize.
width
) / 2;
273
}
274
}
275
276
if
(contentSize.
height
> viewSize.
height
)
277
{
278
// максимальный выход вверх
279
if
((offset.
top
+ viewSize.
height
) > contentSize.
height
)
280
{
281
offset.
top
= contentSize.
height
- viewSize.
height
;
282
}
283
// максимальный выход вниз
284
else
if
(offset.
top
< 0)
285
{
286
offset.
top
= 0;
287
}
288
}
289
else
290
{
291
if
(align.
isTop
())
292
{
293
offset.
top
= 0;
294
}
295
else
if
(align.
isBottom
())
296
{
297
offset.
top
= contentSize.
height
- viewSize.
height
;
298
}
299
else
300
{
301
offset.
top
= (contentSize.
height
- viewSize.
height
) / 2;
302
}
303
}
304
305
if
(offset != contentPoint)
306
{
307
if
(
nullptr
!=
mVScroll
)
308
mVScroll
->
setScrollPosition
(offset.
top
);
309
if
(
nullptr
!=
mHScroll
)
310
mHScroll
->
setScrollPosition
(offset.
left
);
311
setContentPosition
(offset);
312
}
313
}
314
315
IntSize
ScrollViewBase::getContentSize
()
const
316
{
317
return
{};
318
}
319
320
IntPoint
ScrollViewBase::getContentPosition
()
const
321
{
322
return
{};
323
}
324
325
void
ScrollViewBase::setContentPosition
(
const
IntPoint
& _value)
326
{
327
}
328
329
IntSize
ScrollViewBase::getViewSize
()
const
330
{
331
return
{};
332
}
333
334
size_t
ScrollViewBase::getHScrollPage
()
const
335
{
336
return
1;
337
}
338
339
size_t
ScrollViewBase::getVScrollPage
()
const
340
{
341
return
1;
342
}
343
344
Align
ScrollViewBase::getContentAlign
()
const
345
{
346
return
Align::Center
;
347
}
348
349
void
ScrollViewBase::eraseContent
()
350
{
351
}
352
353
}
// namespace MyGUI
MyGUI_Precompiled.h
MyGUI_ScrollBar.h
MyGUI_ScrollViewBase.h
MyGUI::ICroppedRectangle::getWidth
int getWidth() const
Definition
MyGUI_ICroppedRectangle.h:113
MyGUI::ICroppedRectangle::getHeight
int getHeight() const
Definition
MyGUI_ICroppedRectangle.h:118
MyGUI::ScrollBar::getLineSize
int getLineSize() const
Definition
MyGUI_ScrollBar.cpp:423
MyGUI::ScrollBar::setTrackSize
void setTrackSize(int _size)
Definition
MyGUI_ScrollBar.cpp:366
MyGUI::ScrollBar::setScrollPosition
void setScrollPosition(size_t _position)
Definition
MyGUI_ScrollBar.cpp:335
MyGUI::ScrollBar::setScrollViewPage
void setScrollViewPage(size_t _value)
Definition
MyGUI_ScrollBar.cpp:611
MyGUI::ScrollBar::setSize
void setSize(const IntSize &_size) override
Definition
MyGUI_ScrollBar.cpp:352
MyGUI::ScrollBar::setScrollRange
void setScrollRange(size_t _range)
Definition
MyGUI_ScrollBar.cpp:325
MyGUI::ScrollBar::setScrollPage
void setScrollPage(size_t _value)
Definition
MyGUI_ScrollBar.cpp:601
MyGUI::ScrollViewBase::getViewSize
virtual IntSize getViewSize() const
Definition
MyGUI_ScrollViewBase.cpp:329
MyGUI::ScrollViewBase::mHScroll
ScrollBar * mHScroll
Definition
MyGUI_ScrollViewBase.h:44
MyGUI::ScrollViewBase::mVRange
size_t mVRange
Definition
MyGUI_ScrollViewBase.h:50
MyGUI::ScrollViewBase::getHScrollPage
virtual size_t getHScrollPage() const
Definition
MyGUI_ScrollViewBase.cpp:334
MyGUI::ScrollViewBase::updateScrollPosition
void updateScrollPosition()
Definition
MyGUI_ScrollViewBase.cpp:234
MyGUI::ScrollViewBase::setContentPosition
virtual void setContentPosition(const IntPoint &_value)
Definition
MyGUI_ScrollViewBase.cpp:325
MyGUI::ScrollViewBase::mHRange
size_t mHRange
Definition
MyGUI_ScrollViewBase.h:51
MyGUI::ScrollViewBase::mScrollViewClient
Widget * mScrollViewClient
Definition
MyGUI_ScrollViewBase.h:45
MyGUI::ScrollViewBase::mVisibleVScroll
bool mVisibleVScroll
Definition
MyGUI_ScrollViewBase.h:48
MyGUI::ScrollViewBase::getContentPosition
virtual IntPoint getContentPosition() const
Definition
MyGUI_ScrollViewBase.cpp:320
MyGUI::ScrollViewBase::mChangeContentByResize
bool mChangeContentByResize
Definition
MyGUI_ScrollViewBase.h:54
MyGUI::ScrollViewBase::mVisibleHScroll
bool mVisibleHScroll
Definition
MyGUI_ScrollViewBase.h:47
MyGUI::ScrollViewBase::getContentAlign
virtual Align getContentAlign() const
Definition
MyGUI_ScrollViewBase.cpp:344
MyGUI::ScrollViewBase::getContentSize
virtual IntSize getContentSize() const
Definition
MyGUI_ScrollViewBase.cpp:315
MyGUI::ScrollViewBase::updateScrollSize
void updateScrollSize()
Definition
MyGUI_ScrollViewBase.cpp:14
MyGUI::ScrollViewBase::mVScroll
ScrollBar * mVScroll
Definition
MyGUI_ScrollViewBase.h:43
MyGUI::ScrollViewBase::eraseContent
virtual void eraseContent()
Definition
MyGUI_ScrollViewBase.cpp:349
MyGUI::ScrollViewBase::getVScrollPage
virtual size_t getVScrollPage() const
Definition
MyGUI_ScrollViewBase.cpp:339
MyGUI::Widget::setSize
void setSize(const IntSize &_size) override
Definition
MyGUI_Widget.cpp:693
MyGUI::Widget::setVisible
virtual void setVisible(bool _value)
Definition
MyGUI_Widget.cpp:1022
MyGUI::Widget::getVisible
bool getVisible() const
Definition
MyGUI_Widget.cpp:1327
MyGUI
Definition
MyGUI_ActionController.h:15
MyGUI::Align
Definition
MyGUI_Align.h:20
MyGUI::Align::Center
@ Center
Definition
MyGUI_Align.h:25
MyGUI::Align::isTop
bool isTop() const
Definition
MyGUI_Align.h:74
MyGUI::Align::isRight
bool isRight() const
Definition
MyGUI_Align.h:64
MyGUI::Align::isLeft
bool isLeft() const
Definition
MyGUI_Align.h:59
MyGUI::Align::isBottom
bool isBottom() const
Definition
MyGUI_Align.h:79
MyGUI::types::TPoint< int >
MyGUI::types::TPoint::left
T left
Definition
MyGUI_TPoint.h:19
MyGUI::types::TPoint::top
T top
Definition
MyGUI_TPoint.h:20
MyGUI::types::TSize< int >
MyGUI::types::TSize::width
T width
Definition
MyGUI_TSize.h:19
MyGUI::types::TSize::height
T height
Definition
MyGUI_TSize.h:20
Generated by
1.12.0