summaryrefslogtreecommitdiff
path: root/gui/src/chainImage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/src/chainImage.cpp')
-rw-r--r--gui/src/chainImage.cpp88
1 files changed, 84 insertions, 4 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<chainImage>::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;
+}
+