summaryrefslogtreecommitdiff
path: root/gui/src/chainImageSet.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@getdrop.com>2017-09-18 22:32:45 +0100
committerTim Redfern <tim@getdrop.com>2017-09-18 22:32:45 +0100
commitb28a850a8ab4532ee425439446f5b4e01f9471a9 (patch)
tree21609dc7bf5a96336fbb4e071e0c15146d57caa5 /gui/src/chainImageSet.cpp
parentb4972d6ba659cec3759fd87d6f0489a040e0fbf6 (diff)
threading working
Diffstat (limited to 'gui/src/chainImageSet.cpp')
-rw-r--r--gui/src/chainImageSet.cpp240
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;
+
}
}
}
+
}