diff options
Diffstat (limited to 'gui/src/chainImageSet.cpp')
| -rw-r--r-- | gui/src/chainImageSet.cpp | 240 |
1 files changed, 140 insertions, 100 deletions
diff --git a/gui/src/chainImageSet.cpp b/gui/src/chainImageSet.cpp index 5a538cb..7952d7c 100644 --- a/gui/src/chainImageSet.cpp +++ b/gui/src/chainImageSet.cpp @@ -8,6 +8,8 @@ void chainImageSet::drawOutput(){ camera_throw*=fitFactor; //fudge factor to allow tweening + //printf("Drawing chain: %i images\n",images.size()); + if (images.size()){ /* @@ -17,18 +19,26 @@ void chainImageSet::drawOutput(){ */ glMatrixMode ( GL_MODELVIEW ); glLoadIdentity ( ); - gluLookAt( currentImage->getTransform().x, - currentImage->getTransform().y, // i1.linkPos.y+(xform.y*intervalpoint), - currentImage->getWidth()*camera_throw*currentImage->getScale(), - currentImage->getTransform().x, - currentImage->getTransform().y, // i1.linkPos.y+(xform.y*intervalpoint), + glOrtho( + 0, + (*currentImage)->getTransform().x*2, + 0, + (*currentImage)->getTransform().y*2, + -100, + (*currentImage)->getTransform().x*4 + ); + gluLookAt( (*currentImage)->getTransform().x, + (*currentImage)->getTransform().y, // i1.linkPos.y+(xform.y*intervalpoint), + (*currentImage)->getWidth()*camera_throw*(*currentImage)->getScale(), + (*currentImage)->getTransform().x, + (*currentImage)->getTransform().y, // i1.linkPos.y+(xform.y*intervalpoint), 0, - sin(-currentImage->getRotation()*(PI/180)), - cos(-currentImage->getRotation()*(PI/180)), + sin(-(*currentImage)->getRotation()*(PI/180)), + cos(-(*currentImage)->getRotation()*(PI/180)), 0); - currentImage->drawChain(DEFAULT_FADEIN,additive,intensity); + (*currentImage)->drawChain(DEFAULT_FADEIN,additive,intensity); } @@ -53,42 +63,46 @@ void chainImageSet::drawGui(int x,int y,bool is_selected){ glTranslatef(x,y,0); - for(std::list<chainImage>::iterator ii=images.begin(); ii != images.end(); ii++){ + for(auto 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(); + 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.setAnchorPercent(0.5,0.5); - ii->thumbnail.draw( - t_xoffs+borderwidth+thumbx, - borderwidth+thumby, - ii->thumbnail.getWidth(), - ii->thumbnail.getHeight() + if ((*ii)->thumbnail.isAllocated()){ + (*ii)->thumbnail.setUseTexture(true); + (*ii)->thumbnail.draw( + t_xoffs+borderwidth+thumbx, + borderwidth+thumby, + (*ii)->thumbnail.getWidth(), + (*ii)->thumbnail.getHeight() ); + } + ofSetColor(255,255,255); if (ii==selected) ofSetColor(255,0,0); - if (&(*ii)==currentImage) ofSetColor(0,255,0); + if (ii==currentImage) ofSetColor(0,255,0); 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+(*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); ofSetColor(255,255,255); - if (ii->link){ - ofPoint lp=ii->linkPos; + if ((*ii)->link){ + ofPoint lp=(*ii)->linkPos; if (ii==selected){ lp+=dragPoint; } @@ -99,7 +113,7 @@ void chainImageSet::drawGui(int x,int y,bool is_selected){ ofDrawLine( subpictx, subpicty, - t_xoffs+(borderwidth*3)+ii->thumbnail.getWidth(), + t_xoffs+(borderwidth*3)+(*ii)->thumbnail.getWidth(), borderwidth+thumby ); @@ -108,38 +122,40 @@ void chainImageSet::drawGui(int x,int y,bool is_selected){ glTranslatef(subpictx,subpicty,0); - float r=ii->linkRot; + float r=(*ii)->linkRot; if (ii==selected) r+=dragRotate; glRotatef(r,0,0,1); //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.setAnchorPercent(0.5,0.5); - float thescale=ii->linkScale; + float thescale=(*ii)->linkScale; if (ii==selected){ thescale*=(1.0f+dragScale); } - - ii->link->thumbnail.draw( - 0, - 0, - ii->link->thumbnail.getWidth()*thescale, - ii->link->thumbnail.getHeight()*thescale - ); + if ((*ii)->link->thumbnail.isAllocated()){ + + (*ii)->link->thumbnail.draw( + 0, + 0, + (*ii)->link->thumbnail.getWidth()*thescale, + (*ii)->link->thumbnail.getHeight()*thescale + ); + } ofPoint p1=ofPoint( - -(ii->link->thumbnail.getWidth()*thescale*0.5), - -(ii->link->thumbnail.getHeight()*thescale*0.5)); + -((*ii)->link->thumbnail.getWidth()*thescale*0.5), + -((*ii)->link->thumbnail.getHeight()*thescale*0.5)); ofPoint p2=ofPoint( - (ii->link->thumbnail.getWidth()*thescale*0.5), - -(ii->link->thumbnail.getHeight()*thescale*0.5)); + ((*ii)->link->thumbnail.getWidth()*thescale*0.5), + -((*ii)->link->thumbnail.getHeight()*thescale*0.5)); ofPoint p3=ofPoint( - (ii->link->thumbnail.getWidth()*thescale*0.5), - (ii->link->thumbnail.getHeight()*thescale*0.5)); + ((*ii)->link->thumbnail.getWidth()*thescale*0.5), + ((*ii)->link->thumbnail.getHeight()*thescale*0.5)); ofPoint p4=ofPoint( - -(ii->link->thumbnail.getWidth()*thescale*0.5), - (ii->link->thumbnail.getHeight()*thescale*0.5)); + -((*ii)->link->thumbnail.getWidth()*thescale*0.5), + ((*ii)->link->thumbnail.getHeight()*thescale*0.5)); ofDrawLine(p1,p2); ofDrawLine(p2,p3); @@ -153,7 +169,7 @@ void chainImageSet::drawGui(int x,int y,bool is_selected){ } - t_xoffs+=ii->thumbnail.getWidth()+(borderwidth*2); + t_xoffs+=(*ii)->thumbnail.getWidth()+(borderwidth*2); } @@ -181,21 +197,24 @@ attempt to add file to chain. find if file exists in data folder if not make a symbolic link */ - chainImage *image=new chainImage(); // - - loadingImages.push_back(image); - - loader.loadFromDisk(*image,"bogwaterreeds/IMG_9819.JPG"); //filename); + auto image=std::make_unique<chainImage>(); - //if (image.load(filename)){ - image->init(ofPoint(0,0), - currentDefaultImageRatio, + 0.3, //currentDefaultImageRatio, 0 //default rotation ); - printf("Loading file: %s at %f,%f \n",filename.c_str(),pos.x,pos.y); + printf("Loading file: %s linkscale %f\n", + filename.c_str(), + image->linkScale); + + loader.loadFromDisk(*image,filename); + + loadingImages.push_back(std::move(image)); + //if (image.load(filename)){ + + //loadingImages.push_back(image); @@ -223,16 +242,16 @@ void chainImageSet::keyPressed(ofKeyEventArgs &keyargs){ } break; case OF_KEY_UP: - selected->linkPos.y--; + (*selected)->linkPos.y--; break; case OF_KEY_DOWN: - selected->linkPos.y++; + (*selected)->linkPos.y++; break; case OF_KEY_LEFT: - selected->linkPos.x--; + (*selected)->linkPos.x--; break; case OF_KEY_RIGHT: - selected->linkPos.x++; + (*selected)->linkPos.x++; break; case OF_KEY_BACKSPACE:{ images.clear(); @@ -300,15 +319,15 @@ void chainImageSet::keyPressed(ofKeyEventArgs &keyargs){ 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()/ofGetWindowHeight()); + dragPoint=ofPoint(x-clickPoint.x,y-clickPoint.y)*((*selected)->getHeight()/ofGetWindowHeight()); break; case OF_MOUSE_BUTTON_2: //alt-click - dragRotate=((clickPoint.x-x)/(selected->thumbnail.getWidth()))*180.0f; + dragRotate=((clickPoint.x-x)/((*selected)->thumbnail.getWidth()))*180.0f; break; case OF_MOUSE_BUTTON_3: //control-click - dragScale=(y-clickPoint.y)/(selected->thumbnail.getHeight()); + dragScale=(y-clickPoint.y)/((*selected)->thumbnail.getHeight()); //if (dragScale*selected->linkScale<0.15){ // dragScale=0.15/selected->linkScale; //} @@ -325,11 +344,11 @@ void chainImageSet::mousePressed(int x, int y, int button){ //-------------------------------------------------------------- void chainImageSet::mouseReleased(int x, int y, int button){ if (images.size()){ - selected->linkPos+=dragPoint; + (*selected)->linkPos+=dragPoint; dragPoint=ofPoint(0,0); - selected->linkScale*=(1.0f+dragScale); + (*selected)->linkScale*=(1.0f+dragScale); dragScale=0.0f; - selected->linkRot+=dragRotate; + (*selected)->linkRot+=dragRotate; dragRotate=0.0f; } } @@ -339,8 +358,8 @@ bool chainImageSet::saveJson(std::string filename){ json["images"] = Json::Value(Json::arrayValue); - for(std::list<chainImage>::iterator ii=images.begin(); ii != images.end(); ii++){ - json["images"].append(ii->toJson()); + for(auto ii=images.begin(); ii != images.end(); ii++){ + json["images"].append((*ii)->toJson()); } @@ -356,23 +375,23 @@ bool chainImageSet::loadJson(std::string _filename){ images.clear(); for (int i=0;i<json["images"].size();i++){ - chainImage image; - if (image.fromJson(json["images"][i])){ - images.push_back(image); + auto image=std::make_unique<chainImage>(); + if (image->fromJson(json["images"][i])){ + images.push_back(std::move(image)); } } - for (std::list<chainImage>::iterator ii=images.begin(); ii != images.end(); ii++){ + for (auto ii=images.begin(); ii != images.end(); ii++){ auto li=ii; li++; if (li==images.end()) { li=images.begin(); } - ii->link=&(*li); + (*ii)->link=&(*(*li)); } selected=images.begin(); - currentImage=&(*images.begin()); - currentImage->start(); + currentImage=images.begin(); + (*currentImage)->start(); filename=_filename; return true; @@ -386,33 +405,41 @@ void chainImageSet::updateOutput(){ for (auto i=loadingImages.begin();i!=loadingImages.end();){ - printf("Checking loadingImage: %s\n",(*i)->filename.c_str()); + //printf("Checking loadingImage: %s\n",(*i)->filename.c_str()); - if ((*i)->isAllocated()){ - printf("Finished loadingImage: %s\n",(*i)->filename.c_str()); + if ((*i)->isLoaded){ + printf("Finished loadingImage: %s, linkscale %f\n", + (*i)->filename.c_str(), + (*i)->linkScale + ); - images.push_back(*(*i)); - (*images.rbegin()).link=&(*images.begin()); + images.push_back(std::move(*i)); + (*images.rbegin())->link=&(*(*images.begin())); + (*images.rbegin())->setUseTexture(true); printf("Linked: %s to %s\n", - images.rbegin()->filename.c_str(), - images.begin()->filename.c_str()); + (*images.rbegin())->filename.c_str(), + (*images.rbegin())->link->filename.c_str()); if (images.size()>1){ - (++images.rbegin())->link=&(*(images.rbegin())); + (*(++images.rbegin()))->link=&(*(*images.rbegin())); printf("Linked: %s to %s\n", - (++images.rbegin())->filename.c_str(), - images.rbegin()->filename.c_str()); + (*(++images.rbegin()))->filename.c_str(), + (*(++images.rbegin()))->link->filename.c_str()); } else { selected=images.begin(); - currentImage=&(*images.begin()); - currentImage->start(); + currentImage=images.begin(); + (*currentImage)->start(); + } loadingImages.erase(i); + printf("Images: %i loadingImages %i\n", + images.size(), + loadingImages.size()); } else i++; @@ -420,31 +447,44 @@ void chainImageSet::updateOutput(){ if (images.size()){ - int switchResponse=currentImage->updateOutput(decayFactor); + int switchResponse=(*currentImage)->updateOutput(decayFactor); + switch(switchResponse){ case SWITCH_FORWARD:{ - currentImage=currentImage->link; - currentImage->start(); - ofLogNotice() << "Switched images forward"; - currentImage->updateOutput(decayFactor); + + currentImage++; + + if (currentImage==images.end()){ + currentImage=images.begin(); + } + + ofLogNotice() << "Switched image forward to " << (*currentImage)->filename; + + + (*currentImage)->start(); + (*currentImage)->updateOutput(decayFactor); + break; } case SWITCH_NONE: break; case SWITCH_REVERSE:{ - for (auto ii=images.begin();ii!=images.end();++ii){ - if (ii->link->filename==currentImage->filename){ - currentImage=&(*ii); - currentImage->start(true); - ofLogNotice() << "Switched images reverse"; - currentImage->updateOutput(decayFactor); - break; - } + + if (currentImage==images.begin()){ + currentImage=images.end(); } + + currentImage--; + + (*currentImage)->start(); + ofLogNotice() << "Switched images backward to " << (*currentImage)->filename; + (*currentImage)->updateOutput(decayFactor); break; + } } } + } |
