~3v1n0/nux/x11-conffile-on-unity-only

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
/*
 * Copyright 2010 Inalogic® Inc.
 *
 * This program is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License, as
 * published by the  Free Software Foundation; either version 2.1 or 3.0
 * of the License.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranties of
 * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
 * PURPOSE.  See the applicable version of the GNU Lesser General Public
 * License for more details.
 *
 * You should have received a copy of both the GNU Lesser General Public
 * License along with this program. If not, see <http://www.gnu.org/licenses/>
 *
 * Authored by: Jay Taoko <jaytaoko@inalogic.com>
 *
 */


#ifndef HSCROLLBAR_H
#define HSCROLLBAR_H

#include "TimerProc.h"
#include "ScrollBar.h"

namespace nux
{
  class HLayout;

  class HScrollBar : public ScrollBar
  {
  public:
    HScrollBar(NUX_FILE_LINE_PROTO);
    ~HScrollBar();

    void DrawLeftTriangle(GraphicsEngine &graphics_engine, int width, int height, const Geometry &geo, BasePainter &painter);
    void DrawRightTriangle(GraphicsEngine &graphics_engine, int width, int height, const Geometry &geo, BasePainter &painter);

    virtual void Draw(GraphicsEngine &graphics_engine, bool force_draw);
  private:
    virtual void DrawContent(GraphicsEngine & /* graphics_engine */, bool /* force_draw */) {};

    void HScrollBarHandler(void *v);
    void ScrollRight(void *v);
    void ScrollLeft(void *v);
    void TrackLeft(void *v);
    void TrackRight(void *v);

  public:
    void SetContainerSize(int x, int y, int w, int h);
    void SetContentSize(int x, int y, int w, int h);
    void SetContentOffset(float dx, float dy);
    void ComputeScrolling();

    /////////////////
    //  RECEIVERS  //
    /////////////////
    void SetValue(float value);
    void SetParameterName(const char *parameter_name);
    ////////////////
    //  EMITTERS  //
    ////////////////
    void RecvStartScrollRight(int x, int y, unsigned long button_flags, unsigned long key_flags);
    void RecvStartScrollLeft(int x, int y, unsigned long button_flags, unsigned long key_flags);
    void RecvEndScrollRight(int x, int y, unsigned long button_flags, unsigned long key_flags);
    void RecvEndScrollLeft(int x, int y, unsigned long button_flags, unsigned long key_flags);

    void RecvTrackMouseDown(int x, int y, unsigned long button_flags, unsigned long key_flags);
    void RecvTrackMouseUp(int x, int y, unsigned long button_flags, unsigned long key_flags);
    void RecvTrackMouseDrag(int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags);

    void OnSliderMouseDown(int x, int y, unsigned long button_flags, unsigned long key_flags);
    void OnSliderMouseUp(int x, int y, unsigned long button_flags, unsigned long key_flags);
    void OnSliderMouseDrag(int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags);

    ///////////////
    //  SIGNALS  //
    ///////////////
    sigc::signal<void> sigClick;
    sigc::signal<void, float, int> OnScrollLeft;
    sigc::signal<void, float, int> OnScrollRight;
    sigc::signal<void> sigHScrollBarSliderMouseDown;

    bool b_MouseDownTimer;
    bool b_MouseUpTimer;
    float m_color_factor;

  protected:
    // When the Scrollbar is used standalone, it is necessary to call ComputeScrolling at the end of the layout.
    virtual long PostLayoutManagement(long LayoutResult);

    virtual Area* FindAreaUnderMouse(const Point& mouse_position, NuxEventType event_type);

    bool AtMinimum();
    bool AtMaximum();

    HLayout *hlayout;
    BasicView *_slider;
    BasicView *_scroll_left_button;
    BasicView *_scroll_right_button;
    BasicView *_track;

    int content_width_;
    int content_height_;
    float content_offset_x_;
    float content_offset_y_;

    int container_width_;
    int container_height_;

    int m_TrackWidth;
    int m_TrackHeight;

    int m_SlideBarOffsetX;
    int m_SlideBarOffsetY;

    float stepX;
    float stepY;

    int m_SliderDragPositionX;
    int m_SliderDragPositionY;

    TimerFunctor *callback;
    TimerFunctor *left_callback;
    TimerFunctor *right_callback;
    TimerFunctor *trackleft_callback;
    TimerFunctor *trackright_callback;
    TimerHandle m_LeftTimerHandler;
    TimerHandle m_RightTimerHandler;
    TimerHandle m_TrackLeftTimerHandler;
    TimerHandle m_TrackRightTimerHandler;

    Point m_TrackMouseCoord;
    friend class HLayout;
    friend class ScrollView;
  };

}

#endif // HSCROLLBAR_H