root / trunk / Linux / addons / ofxNCore / src / Controls / ofxGuiXYPad.cpp @ 59

View | Annotate | Download (5.3 KB)

1 59 jimbo
/*
2 59 jimbo
 *  ofxGuiXYPad.cpp
3 59 jimbo
 *  openFrameworks
4 59 jimbo
 *
5 59 jimbo
 *  Created by Stefan Kirch on 18.06.08.
6 59 jimbo
 *  Copyright 2008 alphakanal. All rights reserved.
7 59 jimbo
 *
8 59 jimbo
 */
9 59 jimbo
10 59 jimbo
//        ----------------------------------------------------------------------------------------------------
11 59 jimbo
12 59 jimbo
#include "ofxGuiXYPad.h"
13 59 jimbo
14 59 jimbo
//        ----------------------------------------------------------------------------------------------------
15 59 jimbo
16 59 jimbo
ofxGuiXYPad::ofxGuiXYPad()
17 59 jimbo
{
18 59 jimbo
        mParamType = kofxGui_Object_XYPad;
19 59 jimbo
}
20 59 jimbo
21 59 jimbo
//        ----------------------------------------------------------------------------------------------------
22 59 jimbo
23 59 jimbo
void ofxGuiXYPad::init(int id, string name, int x, int y, int width, int height, ofxPoint2f min, ofxPoint2f max, ofxPoint2f value, int display, int steps)
24 59 jimbo
{
25 59 jimbo
        int        textHeight        = (name == "") ? 0 : mGlobals->mParamFontHeight;
26 59 jimbo
27 59 jimbo
        mParamId                = id;
28 59 jimbo
        mParamName                = name;
29 59 jimbo
30 59 jimbo
        mObjX                        = x;
31 59 jimbo
        mObjY                        = y;
32 59 jimbo
33 59 jimbo
        mObjWidth                = width;
34 59 jimbo
        mObjHeight                = textHeight + height;
35 59 jimbo
36 59 jimbo
        mDisplay                = display;
37 59 jimbo
        mSteps                        = steps;
38 59 jimbo
39 59 jimbo
        setRange(min, max);
40 59 jimbo
        setValue(value);
41 59 jimbo
        setControlRegion(0, textHeight, width, height);
42 59 jimbo
}
43 59 jimbo
44 59 jimbo
//        ----------------------------------------------------------------------------------------------------
45 59 jimbo
46 59 jimbo
void ofxGuiXYPad::setValue(ofxPoint2f value)
47 59 jimbo
{
48 59 jimbo
        mValue = value;
49 59 jimbo
}
50 59 jimbo
51 59 jimbo
//        ----------------------------------------------------------------------------------------------------
52 59 jimbo
53 59 jimbo
void ofxGuiXYPad::setRange(ofxPoint2f min, ofxPoint2f max)
54 59 jimbo
{
55 59 jimbo
        mMinVal        = min;
56 59 jimbo
        mMaxVal        = max;
57 59 jimbo
        mValDlt        = mMaxVal / mMinVal;
58 59 jimbo
}
59 59 jimbo
60 59 jimbo
//        ----------------------------------------------------------------------------------------------------
61 59 jimbo
62 59 jimbo
bool ofxGuiXYPad::update(int id, int task, void* data, int length)
63 59 jimbo
{
64 59 jimbo
        bool handled = false;
65 59 jimbo
66 59 jimbo
        if(id == mParamId && length == sizeof(ofxPoint2f))
67 59 jimbo
        {
68 59 jimbo
                setValue(*(ofxPoint2f*)data);
69 59 jimbo
                handled = true;
70 59 jimbo
        }
71 59 jimbo
72 59 jimbo
        return handled;
73 59 jimbo
}
74 59 jimbo
75 59 jimbo
//        ----------------------------------------------------------------------------------------------------
76 59 jimbo
77 59 jimbo
void ofxGuiXYPad::draw()
78 59 jimbo
{
79 59 jimbo
        glPushMatrix();
80 59 jimbo
81 59 jimbo
                glTranslatef(mObjX, mObjY, 0.0f);
82 59 jimbo
83 59 jimbo
                if(mParamName != "")
84 59 jimbo
                        drawParamString(0.0, 0.0, mParamName + ": " + pointToString(mValue, mDisplay), false);
85 59 jimbo
86 59 jimbo
                ofxPoint2f        p        = fractionToLocal(valueToFraction(mValue));
87 59 jimbo
88 59 jimbo
                float                d        = mGlobals->mPointSize;
89 59 jimbo
                float                r        = d / 2.0;
90 59 jimbo
91 59 jimbo
                ofFill();
92 59 jimbo
93 59 jimbo
                //        background
94 59 jimbo
                glColor4f(mGlobals->mCoverColor.r, mGlobals->mCoverColor.g, mGlobals->mCoverColor.b, mGlobals->mCoverColor.a);
95 59 jimbo
                ofRect(mCtrX, mCtrY, mCtrWidth, mCtrHeight);
96 59 jimbo
97 59 jimbo
                //        x-bar
98 59 jimbo
                glColor4f(mGlobals->mAxisColor.r, mGlobals->mAxisColor.g, mGlobals->mAxisColor.b, mGlobals-> mAxisColor.a);
99 59 jimbo
                ofLine(p.x + 0.5, mCtrY, p.x + 0.5, mCtrBottom);
100 59 jimbo
101 59 jimbo
                //        y-bar
102 59 jimbo
                glColor4f(mGlobals->mAxisColor.r, mGlobals->mAxisColor.g, mGlobals->mAxisColor.b, mGlobals->mAxisColor.a);
103 59 jimbo
                ofLine(mCtrX, p.y + 0.5, mCtrRight, p.y + 0.5);
104 59 jimbo
105 59 jimbo
                ofNoFill();
106 59 jimbo
107 59 jimbo
                //        handle
108 59 jimbo
                glColor4f(mGlobals->mHandleColor.r, mGlobals->mHandleColor.g, mGlobals->mHandleColor.b, mGlobals->mHandleColor.a);
109 59 jimbo
                ofRect(p.x - r, p.y - r, d, d);
110 59 jimbo
111 59 jimbo
                //        frame
112 59 jimbo
                glColor4f(mGlobals->mFrameColor.r, mGlobals->mFrameColor.g, mGlobals->mFrameColor.b, mGlobals->mFrameColor.a);
113 59 jimbo
                ofRect(mCtrX, mCtrY, mCtrWidth, mCtrHeight);
114 59 jimbo
115 59 jimbo
        glPopMatrix();
116 59 jimbo
}
117 59 jimbo
118 59 jimbo
//        ----------------------------------------------------------------------------------------------------
119 59 jimbo
120 59 jimbo
bool ofxGuiXYPad::mouseDragged(int x, int y, int button)
121 59 jimbo
{
122 59 jimbo
        if(mMouseIsDown)
123 59 jimbo
        {
124 59 jimbo
                ofxPoint2f value = fractionToValue(mouseToFraction(mouseToLocal(x, y)));
125 59 jimbo
126 59 jimbo
                if(value != mValue)
127 59 jimbo
                {
128 59 jimbo
                        setValue(value);
129 59 jimbo
                        mGlobals->mListener->handleGui(mParamId, kofxGui_Set_Point, &mValue, sizeof(ofxPoint2f));
130 59 jimbo
                }
131 59 jimbo
        }
132 59 jimbo
133 59 jimbo
        return mMouseIsDown;
134 59 jimbo
}
135 59 jimbo
136 59 jimbo
//        ----------------------------------------------------------------------------------------------------
137 59 jimbo
138 59 jimbo
bool ofxGuiXYPad::mousePressed(int x, int y, int button)
139 59 jimbo
{
140 59 jimbo
        mMouseIsDown = isPointInsideMe(mouseToLocal(x, y));
141 59 jimbo
142 59 jimbo
        if(mMouseIsDown)
143 59 jimbo
                mouseDragged(x, y, button);
144 59 jimbo
145 59 jimbo
        return mMouseIsDown;
146 59 jimbo
}
147 59 jimbo
148 59 jimbo
//        ----------------------------------------------------------------------------------------------------
149 59 jimbo
150 59 jimbo
bool ofxGuiXYPad::mouseReleased(int x, int y, int button)
151 59 jimbo
{
152 59 jimbo
        bool handled = mMouseIsDown;
153 59 jimbo
154 59 jimbo
        if(mMouseIsDown)
155 59 jimbo
                mMouseIsDown = false;
156 59 jimbo
157 59 jimbo
        return handled;
158 59 jimbo
}
159 59 jimbo
160 59 jimbo
//        ----------------------------------------------------------------------------------------------------
161 59 jimbo
162 59 jimbo
void ofxGuiXYPad::buildFromXml()
163 59 jimbo
{
164 59 jimbo
        mGlobals->mListener->handleGui(mParamId, kofxGui_Set_Point, &mValue, sizeof(ofxPoint2f));
165 59 jimbo
}
166 59 jimbo
167 59 jimbo
//        ----------------------------------------------------------------------------------------------------
168 59 jimbo
169 59 jimbo
void ofxGuiXYPad::saveToXml()
170 59 jimbo
{
171 59 jimbo
        int id = saveObjectData();
172 59 jimbo
173 59 jimbo
        mGlobals->mXml.setValue("OBJECT:MIN_X", mMinVal.x, id);
174 59 jimbo
        mGlobals->mXml.setValue("OBJECT:MIN_Y", mMinVal.y, id);
175 59 jimbo
        mGlobals->mXml.setValue("OBJECT:MAX_X", mMaxVal.x, id);
176 59 jimbo
        mGlobals->mXml.setValue("OBJECT:MAX_Y", mMaxVal.y, id);
177 59 jimbo
        mGlobals->mXml.setValue("OBJECT:VALUE_X", mValue.x, id);
178 59 jimbo
        mGlobals->mXml.setValue("OBJECT:VALUE_Y", mValue.y, id);
179 59 jimbo
}
180 59 jimbo
181 59 jimbo
//        ----------------------------------------------------------------------------------------------------
182 59 jimbo
183 59 jimbo
ofxPoint2f ofxGuiXYPad::valueToFraction(ofxPoint2f value)
184 59 jimbo
{
185 59 jimbo
        return ofxPoint2f((value.x - mMinVal.x) / mValDlt.x, (value.y - mMinVal.y) / mValDlt.y);
186 59 jimbo
}
187 59 jimbo
188 59 jimbo
//        ----------------------------------------------------------------------------------------------------
189 59 jimbo
190 59 jimbo
ofxPoint2f ofxGuiXYPad::fractionToValue(ofxPoint2f fraction)
191 59 jimbo
{
192 59 jimbo
        return ofxPoint2f((mValDlt.x * fraction.x) + mMinVal.x, (mValDlt.y * fraction.y) + mMinVal.y);
193 59 jimbo
}
194 59 jimbo
195 59 jimbo
//        ----------------------------------------------------------------------------------------------------