52
52
m_RightTimerHandler = 0;
54
54
hlayout = new HLayout (NUX_TRACKER_LOCATION);
55
m_LeftThumb = new InputArea (NUX_TRACKER_LOCATION);
56
m_Track = new InputArea (NUX_TRACKER_LOCATION);
57
m_RightThumb = new InputArea (NUX_TRACKER_LOCATION);
58
m_SlideBar = new InputArea (NUX_TRACKER_LOCATION);
55
_scroll_left_button = new InputArea (NUX_TRACKER_LOCATION);
56
_track = new InputArea (NUX_TRACKER_LOCATION);
57
_scroll_right_button = new InputArea (NUX_TRACKER_LOCATION);
58
_slider = new InputArea (NUX_TRACKER_LOCATION);
59
_slider->SetParentObject(this);
60
61
// Set Original State
61
62
SetMinimumSize (AREA_MIN_WIDTH, HSCROLLBAR_HEIGHT);
62
63
SetMaximumSize (AREA_MAX_WIDTH, HSCROLLBAR_HEIGHT);
64
m_RightThumb->OnMouseDown.connect ( sigc::mem_fun (this, &HScrollBar::RecvStartScrollRight) );
65
m_RightThumb->OnMouseUp.connect ( sigc::mem_fun (this, &HScrollBar::RecvEndScrollRight) );
66
m_LeftThumb->OnMouseDown.connect ( sigc::mem_fun (this, &HScrollBar::RecvStartScrollLeft) );
67
m_LeftThumb->OnMouseUp.connect ( sigc::mem_fun (this, &HScrollBar::RecvEndScrollLeft) );
69
m_SlideBar->OnMouseDown.connect ( sigc::mem_fun (this, &HScrollBar::OnSliderMouseDown) );
70
m_SlideBar->OnMouseUp.connect ( sigc::mem_fun (this, &HScrollBar::OnSliderMouseUp) );
71
m_SlideBar->OnMouseDrag.connect ( sigc::mem_fun (this, &HScrollBar::OnSliderMouseDrag) );
73
m_Track->OnMouseDown.connect ( sigc::mem_fun (this, &HScrollBar::RecvTrackMouseDown) );
74
m_Track->OnMouseUp.connect ( sigc::mem_fun (this, &HScrollBar::RecvTrackMouseUp) );
75
m_Track->OnMouseDrag.connect ( sigc::mem_fun (this, &HScrollBar::RecvTrackMouseDrag) );
65
_scroll_right_button->OnMouseDown.connect ( sigc::mem_fun (this, &HScrollBar::RecvStartScrollRight) );
66
_scroll_right_button->OnMouseUp.connect ( sigc::mem_fun (this, &HScrollBar::RecvEndScrollRight) );
67
_scroll_left_button->OnMouseDown.connect ( sigc::mem_fun (this, &HScrollBar::RecvStartScrollLeft) );
68
_scroll_left_button->OnMouseUp.connect ( sigc::mem_fun (this, &HScrollBar::RecvEndScrollLeft) );
70
_slider->OnMouseDown.connect ( sigc::mem_fun (this, &HScrollBar::OnSliderMouseDown) );
71
_slider->OnMouseUp.connect ( sigc::mem_fun (this, &HScrollBar::OnSliderMouseUp) );
72
_slider->OnMouseDrag.connect ( sigc::mem_fun (this, &HScrollBar::OnSliderMouseDrag) );
74
_track->OnMouseDown.connect ( sigc::mem_fun (this, &HScrollBar::RecvTrackMouseDown) );
75
_track->OnMouseUp.connect ( sigc::mem_fun (this, &HScrollBar::RecvTrackMouseUp) );
76
_track->OnMouseDrag.connect ( sigc::mem_fun (this, &HScrollBar::RecvTrackMouseDrag) );
78
m_RightThumb->SetMinimumSize (HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT);
79
m_RightThumb->SetMaximumSize (HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT);
80
m_RightThumb->SetGeometry (Geometry (0, 0, HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT) );
81
m_LeftThumb->SetMinimumSize (HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT);
82
m_LeftThumb->SetMaximumSize (HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT);
83
m_LeftThumb->SetGeometry (Geometry (0, 0, HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT) );
86
hlayout->AddView (m_LeftThumb, 0, eCenter, eFix);
87
hlayout->AddView (m_Track, 1, eCenter, eFull);
88
hlayout->AddView (m_RightThumb, 0, eCenter, eFix);
79
_scroll_right_button->SetMinimumSize (HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT);
80
_scroll_right_button->SetMaximumSize (HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT);
81
_scroll_right_button->SetGeometry (Geometry (0, 0, HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT) );
82
_scroll_left_button->SetMinimumSize (HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT);
83
_scroll_left_button->SetMaximumSize (HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT);
84
_scroll_left_button->SetGeometry (Geometry (0, 0, HSCROLLBAR_WIDTH, HSCROLLBAR_HEIGHT) );
87
hlayout->AddView (_scroll_left_button, 0, eCenter, eFix);
88
hlayout->AddView (_track, 1, eCenter, eFull);
89
hlayout->AddView (_scroll_right_button, 0, eCenter, eFix);
90
91
callback = new TimerFunctor;
91
92
callback->OnTimerExpired.connect (sigc::mem_fun (this, &HScrollBar::HScrollBarHandler) );
257
258
long HScrollBar::ProcessEvent (IEvent &ievent, long TraverseInfo, long ProcessEventInfo)
259
260
long ret = TraverseInfo;
260
ret = m_RightThumb->OnEvent (ievent, ret, ProcessEventInfo);
261
ret = m_LeftThumb->OnEvent (ievent, ret, ProcessEventInfo);
262
ret = m_SlideBar->OnEvent (ievent, ret, ProcessEventInfo);
263
ret = m_Track->OnEvent (ievent, ret, ProcessEventInfo);
261
ret = _scroll_right_button->OnEvent (ievent, ret, ProcessEventInfo);
262
ret = _scroll_left_button->OnEvent (ievent, ret, ProcessEventInfo);
263
ret = _slider->OnEvent (ievent, ret, ProcessEventInfo);
264
ret = _track->OnEvent (ievent, ret, ProcessEventInfo);
264
265
ret = PostProcessEvent2 (ievent, ret, ProcessEventInfo);
270
Area* HScrollBar::FindAreaUnderMouse(const Point& mouse_position, NuxEventType event_type)
272
bool mouse_inside = TestMousePointerInclusionFilterMouseWheel(mouse_position, event_type);
274
if(mouse_inside == false)
277
NUX_RETURN_VALUE_IF_TRUE(_scroll_right_button->TestMousePointerInclusion(mouse_position, event_type), _scroll_right_button);
278
NUX_RETURN_VALUE_IF_TRUE(_scroll_left_button->TestMousePointerInclusion(mouse_position, event_type), _scroll_left_button);
279
NUX_RETURN_VALUE_IF_TRUE(_slider->TestMousePointerInclusion(mouse_position, event_type), _slider);
280
NUX_RETURN_VALUE_IF_TRUE(_track->TestMousePointerInclusion(mouse_position, event_type), _track);
282
if((event_type == NUX_MOUSE_WHEEL) && (!AcceptMouseWheelEvent()))
269
287
void HScrollBar::Draw (GraphicsEngine &GfxContext, bool force_draw)
271
289
Geometry base = GetGeometry();
275
293
GetPainter().PaintShape (GfxContext, base,
276
294
Color (COLOR_SCROLLBAR_TRACK), eHSCROLLBAR, false);
278
GetPainter().PaintShape (GfxContext, m_LeftThumb->GetGeometry(), Color (0xFFFFFFFF), eSCROLLBAR_TRIANGLE_LEFT);
279
GetPainter().PaintShape (GfxContext, m_RightThumb->GetGeometry(), Color (0xFFFFFFFF), eSCROLLBAR_TRIANGLE_RIGHT);
296
GetPainter().PaintShape (GfxContext, _scroll_left_button->GetGeometry(), Color (0xFFFFFFFF), eSCROLLBAR_TRIANGLE_LEFT);
297
GetPainter().PaintShape (GfxContext, _scroll_right_button->GetGeometry(), Color (0xFFFFFFFF), eSCROLLBAR_TRIANGLE_RIGHT);
281
GetPainter().PaintShape (GfxContext, m_SlideBar->GetGeometry(),
299
GetPainter().PaintShape (GfxContext, _slider->GetGeometry(),
282
300
Color (0.2156 * m_color_factor, 0.2156 * m_color_factor, 0.2156 * m_color_factor, 1.0f),
283
301
eHSCROLLBAR, true);
286
304
void HScrollBar::SetContainerSize (int x, int y, int w, int h)
288
306
// x and y are not needed
289
m_containerWidth = w;
290
m_containerHeight = h;
307
container_width_ = w;
308
container_height_ = h;
291
309
ComputeScrolling();
294
312
void HScrollBar::SetContentSize (int x, int y, int w, int h)
296
314
// x and y are not needed
299
317
ComputeScrolling();
302
320
void HScrollBar::SetContentOffset (float dx, float dy)
304
m_contentOffsetX = dx;
305
m_contentOffsetY = dy;
322
content_offset_x_ = dx;
323
content_offset_y_ = dy;
306
324
ComputeScrolling();
309
327
void HScrollBar::ComputeScrolling()
311
float percentage = 0;
313
if (m_contentWidth == 0)
329
if (content_width_ == 0)
331
visibility_percentage_ = 100.0f;
319
percentage = 100.0f * (float) m_containerWidth / (float) m_contentWidth;
322
if (percentage > 100.0f)
327
if (percentage < 0.0f)
332
m_TrackWidth = m_Track->GetBaseWidth();
334
int slider_height = m_LeftThumb->GetBaseHeight();
335
int slider_width = m_TrackWidth * percentage / 100.0f;
335
visibility_percentage_ = Clamp<float>(100.0f * (float) container_width_ / (float) content_width_, 0.0f, 100.0f);
338
m_TrackWidth = _track->GetBaseWidth();
340
int slider_height = _scroll_left_button->GetBaseHeight();
341
int slider_width = m_TrackWidth * visibility_percentage_ / 100.0f;
337
343
if (slider_width < 15)
339
345
slider_width = 15;
342
m_SlideBar->SetBaseWidth (slider_width);
343
m_SlideBar->SetBaseHeight (slider_height);
344
m_SlideBar->SetBaseY (m_LeftThumb->GetBaseY() );
348
_slider->SetBaseWidth (slider_width);
349
_slider->SetBaseHeight (slider_height);
350
_slider->SetBaseY (_scroll_left_button->GetBaseY() );
349
if (m_contentWidth - m_containerWidth > 0)
350
pct = - (float) m_contentOffsetX / (float) (m_contentWidth - m_containerWidth);
355
if (content_width_ - container_width_ > 0)
356
pct = - (float) content_offset_x_ / (float) (content_width_ - container_width_);
354
int x = m_Track->GetBaseX() + pct * (m_TrackWidth - slider_width);
355
m_SlideBar->SetBaseX (x);
360
int x = _track->GetBaseX() + pct * (m_TrackWidth - slider_width);
361
_slider->SetBaseX (x);