diff options
| author | Tim Redfern <tim@getdrop.com> | 2017-08-28 23:22:30 +0100 |
|---|---|---|
| committer | Tim Redfern <tim@getdrop.com> | 2017-08-28 23:22:30 +0100 |
| commit | 50d670c523ef4ee563ba961bd479b432516cefaf (patch) | |
| tree | ed6d9ea45f84f2ad62b25dee7ad564d1c1a174b0 /gui/src/chainImage.cpp | |
| parent | d8a46a6409286b3834bc609e4f34a09d48a8ae58 (diff) | |
initial chainimageset
Diffstat (limited to 'gui/src/chainImage.cpp')
| -rw-r--r-- | gui/src/chainImage.cpp | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/gui/src/chainImage.cpp b/gui/src/chainImage.cpp new file mode 100644 index 0000000..2ac6074 --- /dev/null +++ b/gui/src/chainImage.cpp @@ -0,0 +1,214 @@ +#include "chainImage.h" + +#define min(a,b) ((a) < (b) ? (a) : (b)) +#define max(a,b) ((a) > (b) ? (a) : (b)) + +void chainImage::init(ofPoint _linkPos,float _linkScale,float _linkRot){ + linkPos=_linkPos; + linkScale=_linkScale; + linkRot=_linkRot; + setAnchorPercent(0.5,0.5); +} + +void chainImage::start(){ + transition=0.0f; + time=ofGetElapsedTimef(); + setUseTexture(true); + scale=linkScale; +} + +bool chainImage::update(float decayRatio){ + + scale*=decayRatio; + + transition=-(scale-linkScale)/(linkScale-(linkScale*link->linkScale)); + + if (scale>linkScale*link->linkScale) return false; + else { + transition = 1.0f; + return true; + } +} +ofVec3f chainImage::getTransform(){ + + ofVec3f _scaledTarget = link->linkPos * linkScale; + + return linkPos + ( _scaledTarget * transition ); +} +float chainImage::getScale(){ + + return scale; + +} +void chainImage::makeThumbnail(){ + thumbnail=(const ofImage)*this; //copy the ofImage itself + + float thumbheight=ofGetHeight()*THUMB_BORDER_RATIO; + float thumbwidth=(thumbnail.getWidth()/thumbnail.getHeight())*thumbheight; + + float borderwidth=ofGetHeight()*(1.0-THUMB_BORDER_RATIO)*0.5; + + printf("Rescaling: %fx%f to %fx%f for screen %fx%f, border %f\n", + thumbnail.getWidth(),thumbnail.getHeight(), + thumbwidth,thumbheight, + (float)ofGetWidth(),(float)ofGetHeight(), + borderwidth); + + thumbnail.resize(thumbwidth,thumbheight); + + thumbnail.setAnchorPoint(thumbnail.getWidth()/2,thumbnail.getHeight()/2); +} + +void chainImage::drawChain(float fadeIn){ + + glPushMatrix(); + + ofDisableAlphaBlending(); + + ofSetColor(255,255,255,255); + + draw(0,0,getWidth(),getHeight()); + + glTranslatef(linkPos.x,linkPos.y,0); + + glScalef(linkScale,linkScale,linkScale); + + ofEnableAlphaBlending(); + + ofSetColor(255,255,255,255*min(1.0,transition/fadeIn)); + + link->draw(0,0,link->getWidth(),link->getHeight()); + + glPopMatrix(); +} + +void chainImageSet::drawGui(){ + float t_xoffs=0.0; + float borderwidth=ofGetHeight()*(1.0-THUMB_BORDER_RATIO)*0.5; + + //draw each image, outlined + + for(std::list<chainImage>::iterator ii=images.begin(); ii != images.end(); ii++){ + + float thumbx=ii->thumbnail.getWidth()/2; + float thumby=ii->thumbnail.getHeight()/2; + float thumbscale=ii->thumbnail.getWidth()/ii->getWidth(); + + //why do I have to set this every time?? + ii->thumbnail.setAnchorPercent(0.5,0.5); + + ii->thumbnail.draw( + t_xoffs+borderwidth+thumbx, + borderwidth+thumby, + ii->thumbnail.getWidth(), + ii->thumbnail.getHeight() + ); + + ofSetColor(255,255,255); + + ofDrawLine(t_xoffs+borderwidth,borderwidth, + t_xoffs+borderwidth+ii->thumbnail.getWidth(),borderwidth); + ofDrawLine(t_xoffs+borderwidth+ii->thumbnail.getWidth(),borderwidth, + t_xoffs+borderwidth+ii->thumbnail.getWidth(),borderwidth+ii->thumbnail.getHeight()); + ofDrawLine(t_xoffs+borderwidth+ii->thumbnail.getWidth(),borderwidth+ii->thumbnail.getHeight(), + t_xoffs+borderwidth,borderwidth+ii->thumbnail.getHeight()); + ofDrawLine(t_xoffs+borderwidth,borderwidth+ii->thumbnail.getHeight(), + t_xoffs+borderwidth,borderwidth); + + if (ii->link){ + + float subpictx=t_xoffs+borderwidth+thumbx+(ii->linkPos.x*thumbscale); + float subpicty=borderwidth+thumby+(ii->linkPos.y*thumbscale); + + ofDrawLine( + subpictx, + subpicty, + t_xoffs+(borderwidth*3)+ii->thumbnail.getWidth(), + borderwidth+thumby + + ); + + //printf("Sub image: centre at %f,%f \n",ii->link->thumbnail.getAnchorPoint().x,ii->link->thumbnail.getAnchorPoint().y); + + ii->link->thumbnail.setAnchorPercent(0.5,0.5); + + ii->link->thumbnail.draw( + subpictx, + subpicty, + ii->link->thumbnail.getWidth()*ii->linkScale, + ii->link->thumbnail.getHeight()*ii->linkScale + ); + + ofPoint p1=ofPoint( + subpictx-(ii->link->thumbnail.getWidth()*ii->linkScale*0.5), + subpicty-(ii->link->thumbnail.getHeight()*ii->linkScale*0.5)); + ofPoint p2=ofPoint( + subpictx+(ii->link->thumbnail.getWidth()*ii->linkScale*0.5), + subpicty-(ii->link->thumbnail.getHeight()*ii->linkScale*0.5)); + ofPoint p3=ofPoint( + subpictx+(ii->link->thumbnail.getWidth()*ii->linkScale*0.5), + subpicty+(ii->link->thumbnail.getHeight()*ii->linkScale*0.5)); + ofPoint p4=ofPoint( + subpictx-(ii->link->thumbnail.getWidth()*ii->linkScale*0.5), + subpicty+(ii->link->thumbnail.getHeight()*ii->linkScale*0.5)); + + ofDrawLine(p1,p2); + ofDrawLine(p2,p3); + ofDrawLine(p3,p4); + ofDrawLine(p4,p1); + + + } + + + t_xoffs+=ii->thumbnail.getWidth()+(borderwidth*2) ; + } + +} + +bool chainImageSet::add(std::string filename,glm::vec2 pos){ + printf("Dropped file: %s at %f,%f \n",filename.c_str(),pos.x,pos.y); +/* +attempt to add file to chain. +find if file exists in data folder +if not make a symbolic link +*/ + chainImage image; + if (image.load(filename)){ + image.makeThumbnail(); + + //could there be a way to load without committing the texture + image.setUseTexture(false); + image.init(ofPoint(0,0), + currentDefaultImageRatio, + 0 //default rotation + ); + + printf("Loaded file: %s at %f,%f \n",filename.c_str(),pos.x,pos.y); + + + images.push_back(image); + (*images.rbegin()).link=&(*images.begin()); + + printf("Linked: %s to %s\n", + images.rbegin()->filename.c_str(), + images.begin()->filename.c_str()); + + + if (images.size()>1){ + (++images.rbegin())->link=&(*(images.rbegin())); + printf("Linked: %s to %s\n", + (++images.rbegin())->filename.c_str(), + images.rbegin()->filename.c_str()); + } + + + + return true; + } + printf("Could not load file: %s \n",filename.c_str()); + + return false; +} + + |
