summaryrefslogtreecommitdiff
path: root/gui/src
diff options
context:
space:
mode:
Diffstat (limited to 'gui/src')
-rw-r--r--gui/src/chainImage.cpp63
-rw-r--r--gui/src/chainImage.h11
2 files changed, 66 insertions, 8 deletions
diff --git a/gui/src/chainImage.cpp b/gui/src/chainImage.cpp
index 643bb2e..032b54c 100644
--- a/gui/src/chainImage.cpp
+++ b/gui/src/chainImage.cpp
@@ -19,14 +19,43 @@ void chainImage::start(){
time=ofGetElapsedTimef();
setUseTexture(true);
scale=linkScale;
+
+ path.clear();
+
+ path.addVertex(linkPos);
+ //path.addVertex(linkPos+(link->linkPos*linkScale));
+
+ ofPoint destination=linkPos+(link->linkPos*linkScale);
+ ofPoint previous=linkPos+(link->linkPos*linkScale*(1.0f-BEZIER_IN));
+
+ path.bezierTo(
+ linkPos.x*(1.0f+BEZIER_OUT),linkPos.y*(1.0f+BEZIER_OUT),
+ previous.x,previous.y,
+ destination.x,destination.y);
+
+ //totalframes=log(1.0f/256)/log(decayRatio);
+ //framecount=0;
}
bool chainImage::update(float decayRatio){
scale*=decayRatio;
+ //framecount++;
+
+ //find n such that decayRatio^n=1/256
+ //logarithm of x base b = log(x)/log(b)
+
+ //log(decayRatio,decayRatio^n)
+
+ //n = log(decayRatio,1/256)
+
+
transition=-(scale-linkScale)/(linkScale-(linkScale*link->linkScale));
+ //transition=min(1.0f,((float)framecount)/totalframes);
+
+
if (scale>linkScale*link->linkScale) return false;
else {
transition = 1.0f;
@@ -35,9 +64,13 @@ bool chainImage::update(float decayRatio){
}
ofVec3f chainImage::getTransform(){
- ofVec3f _scaledTarget = link->linkPos * linkScale;
+ //ofVec3f _scaledTarget = link->linkPos * linkScale;
- return linkPos + ( _scaledTarget * transition );
+ //return linkPos + ( _scaledTarget * transition );
+
+ //ofPoint
+
+ return path.getPointAtPercent(transition);
}
float chainImage::getScale(){
@@ -328,6 +361,24 @@ void chainImageSet::keyPressed(ofKeyEventArgs &keyargs){
case OF_KEY_RIGHT:
selected->linkPos.x++;
break;
+ case OF_KEY_BACKSPACE:{
+ images.clear();
+ /*
+ auto previous=selected;
+ previous--;
+ if (previous==images.end()){
+ previous=images.end()--;
+ }
+ previous->link=selected->link;
+ printf("DELETED: %s \n",selected->filename.c_str());
+ images.erase(selected);
+ selected=previous++;
+ if (selected==images.end()){
+ selected=images.begin();
+ }
+ break;
+ */
+ }
case 's':
case 83: {
//printf("Saving... keyargs modifiers:%i\n",keyargs.modifiers);
@@ -455,13 +506,13 @@ bool chainImageSet::loadJson(std::string _filename){
}
void chainImageSet::update(){
- float decay_factor=0.995;
- if (images.size()){
- if (currentImage->update(decay_factor)){ //if returns true, switch images
+
+ if (images.size()){
+ if (currentImage->update(decayFactor)){ //if returns true, switch images
currentImage=currentImage->link;
currentImage->start();
ofLogNotice() << "Switched images";
- currentImage->update(decay_factor);
+ currentImage->update(decayFactor);
}
}
}
diff --git a/gui/src/chainImage.h b/gui/src/chainImage.h
index 2ac3566..8eec4bf 100644
--- a/gui/src/chainImage.h
+++ b/gui/src/chainImage.h
@@ -5,7 +5,9 @@
#define THUMB_BORDER_RATIO 0.8
#define THUMB_SIZE 160
-#define DEFAULT_FADEIN 0.3
+#define DEFAULT_FADEIN 1.0
+#define BEZIER_OUT 0.2
+#define BEZIER_IN 0.5
class chainImage : public ofImage{
//todo: threaded image loader
@@ -57,7 +59,9 @@ class chainImage : public ofImage{
float time;
float scale;
-
+ ofPolyline path;
+
+ //int totalframes,framecount;
};
@@ -67,6 +71,7 @@ class chainImageSet{
currentDefaultImageRatio=0.3;
filename="";
outputSize=ofPoint(1024,576);
+ decayFactor=.999;
}
void drawGui();
void drawOutput();
@@ -94,4 +99,6 @@ class chainImageSet{
std::string filename;
chainImage *currentImage;
+
+ float decayFactor;
}; \ No newline at end of file