diff UI code/ButtronXY.mm @ 0:a223551fdc1f

First commit - copy from tweakathlon.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Fri, 10 Oct 2014 11:46:42 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UI code/ButtronXY.mm	Fri Oct 10 11:46:42 2014 +0100
@@ -0,0 +1,132 @@
+//
+//  ButtronXY.cpp
+//  tweakathlon
+//
+//  Created by Robert Tubb on 25/06/2013.
+//
+//
+
+#include "ButtronXY.h"
+
+ButtronXY::ButtronXY(float ax,
+                             float ay,
+                             float awidth, // width same as height
+                             float athickness,
+                             float aradius,
+                             ofColor aforegroundHi,
+                             ofColor abackgroundHi,
+                             ofColor aforegroundLo,
+                             ofColor abackgroundLo) :
+Buttron(ax,ay,awidth,awidth,athickness,aradius,aforegroundHi,abackgroundHi,aforegroundLo,abackgroundLo)
+
+{
+    
+    cout << "ButtronXY constructor\n";
+    init();
+}
+
+ButtronXY::ButtronXY(float ax,
+          float ay,
+          const UIProps& props) :
+Buttron(ax,ay,props.XYsize ,props.XYsize,props)
+{
+    cout << "ButtronXY constructor\n";
+    init();
+};
+void ButtronXY::init(){
+    xvalue = 0.6;
+    yvalue = 0.7;
+    minVal = 0.;
+    maxVal = 127.;
+    myType = XYPAD;
+    labelNamex = "xxx";
+    labelNamey = "yyy";
+}
+//---------------------------------------------------------------------
+void ButtronXY::drawIndicator(){
+    if(hintShowing) drawHintIndicator();
+    
+    if(on){
+        ofSetColor(foregroundHi);
+    }else{
+        ofSetColor(foregroundLo);
+        
+    }
+    if(inactive){
+        ofSetColor(fgInactive);
+    }
+    
+    // circle and cross hairs
+    ofFill();
+
+    double left = x + thickness + radius;
+    double top = y + radius + thickness;
+    double activeWidth = width - 2*(radius + thickness);
+    double cx = left + xvalue*activeWidth;
+    double cy = top + (1-yvalue)*activeWidth;
+    
+    ofLine(cx,y,cx,y+height);
+    ofLine(x, cy, x+ width, cy);
+    
+    
+    ofEllipse(cx,cy , 2*radius,2*radius);
+
+    
+}
+//---------------------------------------------------------------------
+void ButtronXY::drawHintIndicator(){
+    double left = x + thickness + radius;
+    double top = y + radius + thickness;
+    double activeWidth = width - 2*(radius + thickness);
+
+    // loc = y + hthick +  (1 - hintValue)*(height-3*hthick);
+    ofSetColor(255,255,255);
+    float hthick = 1;
+    double locx = left + hintValuex*activeWidth;
+    double locy = top + (1 - hintValuey)*activeWidth;
+    ofEllipse(locx,locy, hthick,hthick);
+    
+    // draw target dart board thingy
+    ofNoFill();
+    ofSetLineWidth(2);
+    // yellow red blue
+    ofSetColor(255,255,0,166);
+    
+    float rband = activeWidth*TARGET_SCORE_CC_BAND*sqrt(2.0)/127.;
+    ofCircle(locx, locy, rband);
+    ofSetColor(255,0,0,166);
+    ofCircle(locx, locy, rband*2);
+    ofSetColor(45,45,255,166);
+    ofCircle(locx, locy, rband*3);
+    ofSetColor(0,255,0,166);
+    ofCircle(locx, locy, rband*4); // within 20 cc vals?
+    ofFill();
+    
+}
+//---------------------------------------------------------------------
+
+
+bool ButtronXY::handleMyTouch(int tx, int ty, touchType ttype, int touchID){
+
+    double lx = tx - x - thickness - radius;
+    double ly = ty - y - thickness - radius;
+    
+    double propx,propy;
+    propx = lx/(width - 2 * (thickness + radius));
+    propy = 1 - ly/(height - 2 * (thickness + radius));
+    if(propx > 1.) propx = 1.;
+    if(propx < 0.) propx = 0.;
+    if(propy > 1.) propy = 1.;
+    if(propy < 0.) propy = 0.;
+    //cout << "propx: " << propx << endl;
+    setValue(propx,propy);
+    
+    int scaleValx = int((maxVal - minVal)*propx + minVal);
+    int scaleValy = int((maxVal - minVal)*propy + minVal);
+
+    if(callback) callback(myParamIDX,scaleValx);
+    if(callback) callback(myParamIDY,scaleValy);
+    return true;
+}
+
+//---------------------------------------------------------------------
\ No newline at end of file