OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
MyScrollbar Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/Scrollbar.hpp>

Inheritance diagram for MyScrollbar:
Collaboration diagram for MyScrollbar:

Public Member Functions

 MyScrollbar (wxWindow *parent, wxWindowID id, wxPoint position, wxSize size, ScrolledWindow *scrolledWindow, long direction, int scrollbarWidth, int tipLength=0)
void SetViewStart (int start)
void SetTipColor (wxColour color)
void SetMarginColor (wxColour color)
void SetScrollbarColor (wxColour color)
void SetScrollbarTip (int len)
void SetVirtualDim (int pixelsPerUnit, int noUnits)

Private Member Functions

void OnPaint (wxPaintEvent &event)
void OnSize (wxSizeEvent &WXUNUSED(event))
void OnEraseBackground (wxEraseEvent &event)
void OnMouseLeftDown (wxMouseEvent &event)
void OnMouseLeftUp (wxMouseEvent &event)
void OnMouseMove (wxMouseEvent &event)
void OnMouseWheel (wxMouseEvent &event)

Private Attributes

long m_direction
int m_virtualDim
int m_actualDim
int m_pixelsPerUnit
int m_viewStartInPixels
int m_viewStartInScrollUnits
int m_scrollbarWidth
int m_marginWidth
int m_previousMouse
int m_mouseLocation
int m_tipLength
int m_minSliderSize
wxColour m_tipColor
wxColour m_marginColor
wxColour m_scrollbarColor
ScrolledWindow * m_scrolledWindow

Detailed Description

Constructor & Destructor Documentation

◆ MyScrollbar()

MyScrollbar::MyScrollbar ( wxWindow * parent,
wxWindowID id,
wxPoint position,
wxSize size,
ScrolledWindow * scrolledWindow,
long direction,
int scrollbarWidth,
int tipLength = 0 )
14 : wxPanel(parent, id, position, size)
15{
16 m_parent = parent;
17 m_direction = direction;
18 m_tipLength = tipLength;
19 if (m_direction == wxVSCROLL)
20 m_virtualDim = size.GetHeight();
21 else
22 m_virtualDim = size.GetWidth(); // default values
23
24 m_actualDim = GetSize().GetHeight();
25
28 m_minSliderSize = 30;
29
30 m_scrollbarWidth = scrollbarWidth;
31 m_marginWidth = scrollbarWidth;
32
33 m_tipColor = m_parent->GetBackgroundColour(); // default value. Can be changed with SetTipColour
34 m_marginColor = m_parent->GetBackgroundColour(); // default value. Can be changed with SetMarginColour
35 m_scrollbarColor = wxColour(255,255,255); // default value. Can be changed with SetScrollbarColour
36 m_scrolledWindow = scrolledWindow;
37
38 Bind(wxEVT_PAINT, &MyScrollbar::OnPaint, this);
39 Bind(wxEVT_SIZE, &MyScrollbar::OnSize, this);
40 Bind(wxEVT_ERASE_BACKGROUND, &MyScrollbar::OnEraseBackground, this);
41 Bind(wxEVT_LEFT_DOWN, &MyScrollbar::OnMouseLeftDown, this);
42 Bind(wxEVT_LEFT_UP, &MyScrollbar::OnMouseLeftUp, this);
43 Bind(wxEVT_MOTION, &MyScrollbar::OnMouseMove, this);
44 Bind(wxEVT_MOUSEWHEEL, &MyScrollbar::OnMouseWheel, this);
45}
void OnMouseWheel(wxMouseEvent &event)
Definition Scrollbar.cpp:273
long m_direction
Definition Scrollbar.hpp:38
wxColour m_marginColor
Definition Scrollbar.hpp:51
void OnSize(wxSizeEvent &WXUNUSED(event))
Definition Scrollbar.cpp:80
void OnEraseBackground(wxEraseEvent &event)
Definition Scrollbar.cpp:190
wxColour m_tipColor
Definition Scrollbar.hpp:50
void OnPaint(wxPaintEvent &event)
Definition Scrollbar.cpp:100
ScrolledWindow * m_scrolledWindow
Definition Scrollbar.hpp:53
void OnMouseLeftDown(wxMouseEvent &event)
Definition Scrollbar.cpp:196
int m_virtualDim
Definition Scrollbar.hpp:39
int m_viewStartInPixels
Definition Scrollbar.hpp:42
int m_actualDim
Definition Scrollbar.hpp:40
wxColour m_scrollbarColor
Definition Scrollbar.hpp:52
int m_scrollbarWidth
Definition Scrollbar.hpp:44
int m_viewStartInScrollUnits
Definition Scrollbar.hpp:43
int m_minSliderSize
Definition Scrollbar.hpp:49
void OnMouseLeftUp(wxMouseEvent &event)
Definition Scrollbar.cpp:219
void OnMouseMove(wxMouseEvent &event)
Definition Scrollbar.cpp:228
int m_tipLength
Definition Scrollbar.hpp:48
int m_marginWidth
Definition Scrollbar.hpp:45

References m_actualDim, m_direction, m_marginColor, m_marginWidth, m_minSliderSize, m_scrollbarColor, m_scrollbarWidth, m_scrolledWindow, m_tipColor, m_tipLength, m_viewStartInPixels, m_viewStartInScrollUnits, m_virtualDim, OnEraseBackground(), OnMouseLeftDown(), OnMouseLeftUp(), OnMouseMove(), OnMouseWheel(), OnPaint(), and OnSize().

Here is the call graph for this function:

Member Function Documentation

◆ OnEraseBackground()

void MyScrollbar::OnEraseBackground ( wxEraseEvent & event)
private
191{
192 // necessary to avoid automatic background erasing
193 SetBackgroundColour(wxColor(255,255,255));
194}

Referenced by MyScrollbar().

Here is the caller graph for this function:

◆ OnMouseLeftDown()

void MyScrollbar::OnMouseLeftDown ( wxMouseEvent & event)
private
197{
198 int scrollbarStart, scrollbarLength, eventPos ;
199
200 if (m_direction == wxVSCROLL)
201 eventPos = event.m_y;
202 else
203 eventPos = event.m_x;
204
205 int actualDim = m_actualDim;
206 scrollbarStart = (m_pixelsPerUnit*actualDim*m_viewStartInScrollUnits) / (float)m_virtualDim + 0.5; // + 0.5 is a cheap way to round the float value
207 scrollbarLength = MAX((actualDim*actualDim) / (float)m_virtualDim + 0.5, m_minSliderSize);
208
209 m_previousMouse = eventPos;
210 /*eventPos >= scrollbarStart &&*/
211 if (eventPos < scrollbarStart + scrollbarLength)
213 else
215
216 CaptureMouse();
217}
@ BEFORE_SCROLLBAR
Definition Scrollbar.hpp:21
@ ON_SCROLLBAR
Definition Scrollbar.hpp:21
#define MAX(a, b)
Definition Scrollbar.hpp:18
int m_pixelsPerUnit
Definition Scrollbar.hpp:41
int m_previousMouse
Definition Scrollbar.hpp:46
int m_mouseLocation
Definition Scrollbar.hpp:47

References BEFORE_SCROLLBAR, m_actualDim, m_direction, m_minSliderSize, m_mouseLocation, m_pixelsPerUnit, m_previousMouse, m_viewStartInScrollUnits, m_virtualDim, MAX, and ON_SCROLLBAR.

Referenced by MyScrollbar().

Here is the caller graph for this function:

◆ OnMouseLeftUp()

void MyScrollbar::OnMouseLeftUp ( wxMouseEvent & event)
private
220{
221 if (HasCapture())
222 {
223 ReleaseMouse();
224 }
226}
@ NOWHERE
Definition Scrollbar.hpp:21

References m_mouseLocation, and NOWHERE.

Referenced by MyScrollbar().

Here is the caller graph for this function:

◆ OnMouseMove()

void MyScrollbar::OnMouseMove ( wxMouseEvent & event)
private
229{
230 int dMotion, actualDim;
231 if (!event.Dragging())
232 return; // button is not pressed, the user doesn't scroll
233
234 actualDim = m_actualDim;
235
236 if (m_direction == wxVSCROLL && m_mouseLocation == ON_SCROLLBAR)
237 {
238 dMotion = event.m_y - m_previousMouse;
239 m_viewStartInPixels += (dMotion*m_virtualDim) / (float)actualDim + 0.5; // in pixels
240
241 if (m_viewStartInPixels < 0)
243 else if (m_viewStartInPixels + actualDim >= m_virtualDim)
244 m_viewStartInPixels = m_virtualDim - actualDim;
245
246 m_viewStartInScrollUnits = m_viewStartInPixels / (float)m_pixelsPerUnit + 0.5; // in scroll units
247 m_scrolledWindow->Scroll(-1, m_viewStartInScrollUnits); // -1 means no change in this direction
249 m_previousMouse = event.m_y;
250 }
251 else if (m_direction == wxHSCROLL && m_mouseLocation == ON_SCROLLBAR)
252 {
253 if (m_scrolledWindow->IsBothDirections())
254 actualDim -= m_marginWidth; // must take into account the right margin
255
256 dMotion = event.m_x - m_previousMouse;
257 m_viewStartInPixels += (dMotion*m_virtualDim) / (float)actualDim + 0.5; // in pixels
258
259 if (m_viewStartInPixels < 0)
261 else if (m_viewStartInPixels + actualDim >= m_virtualDim)
262 m_viewStartInPixels = m_virtualDim - actualDim;
263
264 m_viewStartInScrollUnits = m_viewStartInPixels / (float)m_pixelsPerUnit + 0.5; // in scroll units
265 m_scrolledWindow->Scroll(m_viewStartInScrollUnits, -1); // -1 means no change in this direction
267 m_previousMouse = event.m_x;
268 }
269 Refresh();
270 Update();
271}
void SetViewStart(int start)
Definition Scrollbar.cpp:47

References m_actualDim, m_direction, m_marginWidth, m_mouseLocation, m_pixelsPerUnit, m_previousMouse, m_scrolledWindow, m_viewStartInPixels, m_viewStartInScrollUnits, m_virtualDim, ON_SCROLLBAR, and SetViewStart().

Referenced by MyScrollbar().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnMouseWheel()

void MyScrollbar::OnMouseWheel ( wxMouseEvent & event)
private
274{
275 int dMotion, actualDim;
276 if (event.GetWheelRotation() > 0)
277 //dMotion = -m_pixelsPerUnit;
278 dMotion = -SCROLL_D_MOTION;
279 else
280 // dMotion = m_pixelsPerUnit;
281 dMotion = SCROLL_D_MOTION;
282
283 //m_previousMouse += dMotion;
284 actualDim = m_actualDim;
285
286 if (m_direction == wxVSCROLL)
287 {
288 m_viewStartInPixels += (dMotion*m_virtualDim) / (float)actualDim + 0.5; // in pixels
289
290 if (m_viewStartInPixels < 0)
292 else if (m_viewStartInPixels + actualDim >= m_virtualDim)
293 m_viewStartInPixels = m_virtualDim - actualDim;
294
295 m_viewStartInScrollUnits = m_viewStartInPixels / (float)m_pixelsPerUnit + 0.5; // in scroll units
296 m_scrolledWindow->Scroll(-1, m_viewStartInScrollUnits); // -1 means no change in this direction
298 }
299 else
300 {
301 dMotion = -dMotion;
302 if (m_scrolledWindow->IsBothDirections())
303 actualDim -= m_marginWidth; // must take into account the right margin
304
305 m_viewStartInPixels += (dMotion*m_virtualDim) / (float)actualDim + 0.5; // in pixels
306
307 if (m_viewStartInPixels < 0)
309 else if (m_viewStartInPixels + actualDim >= m_virtualDim)
310 m_viewStartInPixels = m_virtualDim - actualDim;
311
312 m_viewStartInScrollUnits = m_viewStartInPixels / (float)m_pixelsPerUnit + 0.5; // in scroll units
313 m_scrolledWindow->Scroll(m_viewStartInScrollUnits, -1); // -1 means no change in this direction
315 }
316 Refresh();
317 Update();
318}
#define SCROLL_D_MOTION
Definition Scrollbar.hpp:22

References m_actualDim, m_direction, m_marginWidth, m_pixelsPerUnit, m_scrolledWindow, m_viewStartInPixels, m_viewStartInScrollUnits, m_virtualDim, SCROLL_D_MOTION, and SetViewStart().

Referenced by MyScrollbar().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnPaint()

void MyScrollbar::OnPaint ( wxPaintEvent & event)
private
102{
103 int scrollbarStart, scrollbarLength, scrollbarSide;
104 //wxBufferedPaintDC dc(this);
105 wxClientDC dc(this);
106 PrepareDC(dc);
107 int actualDim = m_actualDim;
108
109 //m_marginWidth = 10;
110 //m_scrollbarWidth = 10;
111
112 if (m_direction == wxVSCROLL && actualDim < m_virtualDim) // if actualDim >= m_virtualDim, the scrollbar is hidden, no need to paint it
113 {
114 scrollbarSide = (m_marginWidth - m_scrollbarWidth) / 2;
115 scrollbarStart = (m_pixelsPerUnit*actualDim*m_viewStartInScrollUnits) / (float)m_virtualDim + 0.5; // + 0.5 is a cheap way to round the float value
116 scrollbarLength = (actualDim*actualDim) / (float)m_virtualDim + 0.5;
117
118 if (scrollbarLength < m_minSliderSize)
119 {
120 scrollbarStart = (actualDim - m_minSliderSize)*(m_viewStartInScrollUnits*m_pixelsPerUnit / (float)(m_virtualDim - actualDim)) + 0.5;
121 scrollbarLength = m_minSliderSize;
122 }
123
124 if (scrollbarStart < 0) // the mouse is out of the panel
125 scrollbarStart = 0;
126 else if (scrollbarStart + scrollbarLength >= actualDim)
127 scrollbarStart = actualDim - scrollbarLength;
128
129 // draw the upper and lower tips
130 dc.SetPen(m_tipColor);
131 dc.SetBrush(m_tipColor);
132 dc.DrawRectangle(scrollbarSide, 0, m_scrollbarWidth, m_tipLength); // upper tip
133 dc.DrawRectangle(scrollbarSide, actualDim - m_tipLength, m_scrollbarWidth, m_tipLength); // lower tip
134
135 // draw the margins
136 dc.SetPen(m_marginColor);
137 dc.SetBrush(m_marginColor);
138 dc.DrawRectangle(scrollbarSide, m_tipLength, m_scrollbarWidth, scrollbarStart + m_tipLength); // above the scrollbar
139 dc.DrawRectangle(scrollbarSide, scrollbarStart + scrollbarLength - m_tipLength, m_scrollbarWidth, actualDim - scrollbarLength - scrollbarStart); // below the scrollbar
140 dc.DrawRectangle(0, 0, scrollbarSide, actualDim); // left side of the scrollbar
141 dc.DrawRectangle(m_marginWidth - scrollbarSide, 0, scrollbarSide, actualDim); // right side of the scrollbar
142
143 // draw the scrollbar
144 dc.SetPen(m_scrollbarColor);
145 dc.SetBrush(m_scrollbarColor);
146 dc.DrawRectangle(scrollbarSide, scrollbarStart + m_tipLength, m_scrollbarWidth, scrollbarLength - 2 * m_tipLength);
147 }
148 else if (m_direction == wxHSCROLL && actualDim < m_virtualDim) // if actualDim >= m_virtualDim, the scrollbar is hidden, no need to paint it
149 {
150 if (m_scrolledWindow->IsBothDirections())
151 actualDim -= m_marginWidth; // must take into account the right margin
152
153 scrollbarSide = (m_marginWidth - m_scrollbarWidth) / 2;
154 scrollbarStart = (m_pixelsPerUnit*actualDim*m_viewStartInScrollUnits) / (float)m_virtualDim + 0.5; // + 0.5 is a cheap way round the float value
155 scrollbarLength = (actualDim*actualDim) / (float)m_virtualDim + 0.5;
156
157 if (scrollbarLength < m_minSliderSize)
158 {
159 scrollbarStart = (actualDim - m_minSliderSize)*(m_viewStartInScrollUnits*m_pixelsPerUnit / (float)(m_virtualDim - actualDim)) + 0.5;
160 scrollbarLength = m_minSliderSize;
161 }
162
163 if (scrollbarStart < 0) // the mouse is out of the panel
164 scrollbarStart = 0;
165 else if (scrollbarStart + scrollbarLength >= actualDim)
166 scrollbarStart = actualDim - scrollbarLength;
167
168 // draw the left and right tips
169 dc.SetPen(m_tipColor);
170 dc.SetBrush(m_tipColor);
171 dc.DrawRectangle(0, scrollbarSide, m_tipLength, m_scrollbarWidth); // left tip
172 dc.DrawRectangle(actualDim - m_tipLength, scrollbarSide, m_tipLength, m_scrollbarWidth); // right tip
173
174 // draw the margins
175 dc.SetPen(m_marginColor);
176 dc.SetBrush(m_marginColor);
177 dc.DrawRectangle(m_tipLength, scrollbarSide, scrollbarStart + m_tipLength, m_scrollbarWidth); // left of the scrollbar
178 dc.DrawRectangle(scrollbarStart + scrollbarLength - m_tipLength, scrollbarSide, actualDim - scrollbarLength - scrollbarStart, m_scrollbarWidth); // right of the scrollbar
179 dc.DrawRectangle(0, 0, actualDim, scrollbarSide); // above the scrollbar
180 dc.DrawRectangle(0, m_marginWidth - scrollbarSide, actualDim, scrollbarSide); // below the scrollbar
181 dc.DrawRectangle(actualDim, 0, m_marginWidth, m_marginWidth); // lower right corner of the scrolled window
182
183 // draw the scrollbar
184 dc.SetPen(m_scrollbarColor);
185 dc.SetBrush(m_scrollbarColor);
186 dc.DrawRectangle(scrollbarStart + m_tipLength, scrollbarSide, scrollbarLength - 2 * m_tipLength, m_scrollbarWidth);
187 }
188}

References m_actualDim, m_direction, m_marginColor, m_marginWidth, m_minSliderSize, m_pixelsPerUnit, m_scrollbarColor, m_scrollbarWidth, m_scrolledWindow, m_tipColor, m_tipLength, m_viewStartInScrollUnits, and m_virtualDim.

Referenced by MyScrollbar().

Here is the caller graph for this function:

◆ OnSize()

void MyScrollbar::OnSize ( wxSizeEvent & WXUNUSEDevent)
private
81{
82 if (m_direction == wxVSCROLL)
83 {
84 m_actualDim = GetSize().GetHeight();
86 m_marginWidth = GetSize().GetWidth();
87 else
88 m_marginWidth = 0;
89 }
90 else
91 {
92 m_actualDim = GetSize().GetWidth();
94 m_marginWidth = GetSize().GetHeight();
95 else
96 m_marginWidth = 0;
97 }
98}

References m_actualDim, m_direction, m_marginWidth, and m_virtualDim.

Referenced by MyScrollbar().

Here is the caller graph for this function:

◆ SetMarginColor()

void MyScrollbar::SetMarginColor ( wxColour color)
59{
60 m_marginColor = color;
61}

References m_marginColor.

◆ SetScrollbarColor()

void MyScrollbar::SetScrollbarColor ( wxColour color)
64{
65 m_scrollbarColor = color;
66}

References m_scrollbarColor.

◆ SetScrollbarTip()

void MyScrollbar::SetScrollbarTip ( int len)
69{
70 m_tipLength = len ;
71}

References m_tipLength.

◆ SetTipColor()

void MyScrollbar::SetTipColor ( wxColour color)
54{
55 m_tipColor = color;
56}

References m_tipColor.

◆ SetViewStart()

void MyScrollbar::SetViewStart ( int start)
48{
50 m_viewStartInPixels = start;
51}

References m_viewStartInPixels, and m_viewStartInScrollUnits.

Referenced by OnMouseMove(), and OnMouseWheel().

Here is the caller graph for this function:

◆ SetVirtualDim()

void MyScrollbar::SetVirtualDim ( int pixelsPerUnit,
int noUnits )
74{
75 m_virtualDim = pixelsPerUnit* noUnits;
76 m_pixelsPerUnit = pixelsPerUnit;
77 Refresh();
78}

References m_pixelsPerUnit, and m_virtualDim.

Member Data Documentation

◆ m_actualDim

int MyScrollbar::m_actualDim
private

◆ m_direction

long MyScrollbar::m_direction
private

◆ m_marginColor

wxColour MyScrollbar::m_marginColor
private

◆ m_marginWidth

int MyScrollbar::m_marginWidth
private

◆ m_minSliderSize

int MyScrollbar::m_minSliderSize
private

◆ m_mouseLocation

int MyScrollbar::m_mouseLocation
private

◆ m_pixelsPerUnit

int MyScrollbar::m_pixelsPerUnit
private

◆ m_previousMouse

int MyScrollbar::m_previousMouse
private

Referenced by OnMouseLeftDown(), and OnMouseMove().

◆ m_scrollbarColor

wxColour MyScrollbar::m_scrollbarColor
private

◆ m_scrollbarWidth

int MyScrollbar::m_scrollbarWidth
private

Referenced by MyScrollbar(), and OnPaint().

◆ m_scrolledWindow

ScrolledWindow* MyScrollbar::m_scrolledWindow
private

◆ m_tipColor

wxColour MyScrollbar::m_tipColor
private

Referenced by MyScrollbar(), OnPaint(), and SetTipColor().

◆ m_tipLength

int MyScrollbar::m_tipLength
private

◆ m_viewStartInPixels

int MyScrollbar::m_viewStartInPixels
private

◆ m_viewStartInScrollUnits

int MyScrollbar::m_viewStartInScrollUnits
private

◆ m_virtualDim

int MyScrollbar::m_virtualDim
private

The documentation for this class was generated from the following files:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/Scrollbar.hpp
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/Scrollbar.cpp