From 9090618078eff67634a0217b9c37b2151183f78d Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Tue, 29 Aug 2017 00:55:14 +0100 Subject: starting to shape up --- gui/src/chainImage.cpp | 88 ++++++++++++++++++++++++++++++++++++++++++++++--- gui/src/chainImage.h | 8 +++++ gui/src/main.cpp | 2 +- gui/src/ofApp.cpp | 8 ++--- imgtest/.DS_Store | Bin 6148 -> 6148 bytes 5 files changed, 97 insertions(+), 9 deletions(-) diff --git a/gui/src/chainImage.cpp b/gui/src/chainImage.cpp index 2ac6074..9a759eb 100644 --- a/gui/src/chainImage.cpp +++ b/gui/src/chainImage.cpp @@ -2,6 +2,11 @@ #define min(a,b) ((a) < (b) ? (a) : (b)) #define max(a,b) ((a) > (b) ? (a) : (b)) +#define distance(a,b) + +float distance(ofPoint p1,ofPoint p2){ + return pow(pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2),0.5); +} void chainImage::init(ofPoint _linkPos,float _linkScale,float _linkRot){ linkPos=_linkPos; @@ -71,7 +76,7 @@ void chainImage::drawChain(float fadeIn){ glTranslatef(linkPos.x,linkPos.y,0); - glScalef(linkScale,linkScale,linkScale); + glScalef(linkScale,linkScale,_linkScale); ofEnableAlphaBlending(); @@ -90,6 +95,8 @@ void chainImageSet::drawGui(){ for(std::list::iterator ii=images.begin(); ii != images.end(); ii++){ + ofSetColor(255,255,255); + float thumbx=ii->thumbnail.getWidth()/2; float thumby=ii->thumbnail.getHeight()/2; float thumbscale=ii->thumbnail.getWidth()/ii->getWidth(); @@ -104,7 +111,8 @@ void chainImageSet::drawGui(){ ii->thumbnail.getHeight() ); - ofSetColor(255,255,255); + if (ii==selected) ofSetColor(255,255,0); + else ofSetColor(255,255,255); ofDrawLine(t_xoffs+borderwidth,borderwidth, t_xoffs+borderwidth+ii->thumbnail.getWidth(),borderwidth); @@ -114,11 +122,17 @@ void chainImageSet::drawGui(){ t_xoffs+borderwidth,borderwidth+ii->thumbnail.getHeight()); ofDrawLine(t_xoffs+borderwidth,borderwidth+ii->thumbnail.getHeight(), t_xoffs+borderwidth,borderwidth); + + ofSetColor(255,255,255); if (ii->link){ + ofPoint lp=ii->linkPos; + if (ii==selected){ + lp+=dragPoint; + } - float subpictx=t_xoffs+borderwidth+thumbx+(ii->linkPos.x*thumbscale); - float subpicty=borderwidth+thumby+(ii->linkPos.y*thumbscale); + float subpictx=t_xoffs+borderwidth+thumbx+(lp.x*thumbscale); + float subpicty=borderwidth+thumby+(lp.y*thumbscale); ofDrawLine( subpictx, @@ -132,6 +146,11 @@ void chainImageSet::drawGui(){ ii->link->thumbnail.setAnchorPercent(0.5,0.5); + float thescale=ii->linkScale; + if (ii==selected){ + thescale*=dragScale; + } + ii->link->thumbnail.draw( subpictx, subpicty, @@ -201,6 +220,9 @@ if not make a symbolic link (++images.rbegin())->filename.c_str(), images.rbegin()->filename.c_str()); } + else { + selected=images.begin(); + } @@ -211,4 +233,62 @@ if not make a symbolic link return false; } +void chainImageSet::keyPressed(int key){ + switch(key){ + case '[': + if (selected==images.begin()){ + selected=--images.end(); + } + else --selected; + break; + case ']': + ++selected; + if (selected==images.end()){ + selected=images.begin(); + } + break; + case OF_KEY_UP: + selected->linkPos.y--; + break; + case OF_KEY_DOWN: + selected->linkPos.y++; + break; + case OF_KEY_LEFT: + selected->linkPos.x--; + break; + case OF_KEY_RIGHT: + selected->linkPos.x++; + break; + } +} + +//-------------------------------------------------------------- +void chainImageSet::mouseDragged(int x, int y, int button){ + switch (button){ + case OF_MOUSE_BUTTON_1: + dragPoint=ofPoint(x-clickPoint.x,y-clickPoint.y)*(selected->getHeight()/ofGetHeight()); + break; + case OF_MOUSE_BUTTON_2: + //alt-click + break; + case OF_MOUSE_BUTTON_3: + //control-click + dragScale=distance(clickPoint,ofPoint(x,y))/selected->getHeight(); + break; + } + } + +//-------------------------------------------------------------- +void chainImageSet::mousePressed(int x, int y, int button){ + clickPoint=ofPoint(x,y); +} + +//-------------------------------------------------------------- +void chainImageSet::mouseReleased(int x, int y, int button){ + selected->linkPos+=dragPoint; + dragPoint=ofPoint(0,0); + selected->linkScale*=(1.0f+dragScale); + dragScale=0.0f; +} + diff --git a/gui/src/chainImage.h b/gui/src/chainImage.h index 03089a2..3db4cb2 100644 --- a/gui/src/chainImage.h +++ b/gui/src/chainImage.h @@ -50,7 +50,15 @@ class chainImageSet{ } void drawGui(); bool add(std::string filename,glm::vec2 pos); + void keyPressed(int key); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); std::list images; float currentDefaultImageRatio; + std::list::iterator selected; + ofPoint clickPoint; + ofPoint dragPoint; + float dragScale; }; \ No newline at end of file diff --git a/gui/src/main.cpp b/gui/src/main.cpp index 0346c1e..072f406 100644 --- a/gui/src/main.cpp +++ b/gui/src/main.cpp @@ -3,7 +3,7 @@ //======================================================================== int main(int argc, char *argv[]){ - ofSetupOpenGL(1600,250,OF_WINDOW); // <-------- setup the GL context + ofSetupOpenGL(1600,200,OF_WINDOW); // <-------- setup the GL context // this kicks off the running of my app // can be OF_WINDOW or OF_FULLSCREEN diff --git a/gui/src/ofApp.cpp b/gui/src/ofApp.cpp index 4000461..4ab2dc4 100644 --- a/gui/src/ofApp.cpp +++ b/gui/src/ofApp.cpp @@ -27,7 +27,7 @@ void ofApp::draw(){ //-------------------------------------------------------------- void ofApp::keyPressed(int key){ - + images.keyPressed(key); } //-------------------------------------------------------------- @@ -42,17 +42,17 @@ void ofApp::mouseMoved(int x, int y ){ //-------------------------------------------------------------- void ofApp::mouseDragged(int x, int y, int button){ - + images.mouseDragged(x,y,button); } //-------------------------------------------------------------- void ofApp::mousePressed(int x, int y, int button){ - + images.mousePressed(x,y,button); } //-------------------------------------------------------------- void ofApp::mouseReleased(int x, int y, int button){ - + images.mouseReleased(x,y,button); } //-------------------------------------------------------------- diff --git a/imgtest/.DS_Store b/imgtest/.DS_Store index 095a462..dbfa0dd 100644 Binary files a/imgtest/.DS_Store and b/imgtest/.DS_Store differ -- cgit v1.2.3