letterDelay for variations
This commit is contained in:
parent
24c52521e4
commit
297542abc9
5 changed files with 13 additions and 9 deletions
|
@ -74,9 +74,10 @@ void GPUFontLayer::setProps(const Props & props){
|
||||||
for(const char c : props.text){
|
for(const char c : props.text){
|
||||||
ofxGPUFont::GlyphIdentity glyphIdentity;
|
ofxGPUFont::GlyphIdentity glyphIdentity;
|
||||||
glyphIdentity.charcode = ofxGPUFont::decodeCharcode(&c);
|
glyphIdentity.charcode = ofxGPUFont::decodeCharcode(&c);
|
||||||
for(const auto & fv : props.fontVariations){
|
const Props & vProps = getProps(i * props.letterDelay);
|
||||||
|
for(const auto & fv : vProps.fontVariations){
|
||||||
glyphIdentity.coords.push_back(
|
glyphIdentity.coords.push_back(
|
||||||
std::move(ofxGPUFont::float2f16dot16(round(fv.value))) // convert to FT
|
std::move(ofxGPUFont::float2f16dot16(round(fv.value * 0.1) * 10)) // convert to FT
|
||||||
// NOTE: we are also rounding here, since in practice a variation
|
// NOTE: we are also rounding here, since in practice a variation
|
||||||
// of 100.0 will not look much different than 100.124
|
// of 100.0 will not look much different than 100.124
|
||||||
);
|
);
|
||||||
|
@ -84,18 +85,20 @@ void GPUFontLayer::setProps(const Props & props){
|
||||||
variationText[i] = std::move(glyphIdentity);
|
variationText[i] = std::move(glyphIdentity);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if(props.fontPath != propsBuffer[0].fontPath){
|
if(props.fontPath != propsBuffer[0].fontPath){
|
||||||
notHappyWithMom = true;
|
notHappyWithMom = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(propsBuffer.size() > max(0, int(settings.maxBufferSize - 1))){
|
while(propsBuffer.size() > max(0, int(props.letterDelay * 30 * props.text.size()))){
|
||||||
propsBuffer.pop_back();
|
propsBuffer.pop_back();
|
||||||
}
|
}
|
||||||
propsBuffer.push_front(props);
|
propsBuffer.push_front(props);
|
||||||
}
|
}
|
||||||
const Layer::Props & GPUFontLayer::getProps() const {
|
const Layer::Props & GPUFontLayer::getProps(float delay) const {
|
||||||
return propsBuffer[0]; // gets newest
|
int index = max(0, min(int(propsBuffer.size() - 1), int(delay * 30)));
|
||||||
|
return propsBuffer[index]; // gets newest
|
||||||
}
|
}
|
||||||
const glm::vec4 & GPUFontLayer::getColor() const {
|
const glm::vec4 & GPUFontLayer::getColor() const {
|
||||||
return color;
|
return color;
|
||||||
|
|
|
@ -22,7 +22,7 @@ class GPUFontLayer : public Layer {
|
||||||
float scale = 1,
|
float scale = 1,
|
||||||
ofxVariableLab::FontVariation fontVariation = ofxVariableLab::FontVariation()) override;
|
ofxVariableLab::FontVariation fontVariation = ofxVariableLab::FontVariation()) override;
|
||||||
void setProps(const Props & props) override;
|
void setProps(const Props & props) override;
|
||||||
const Props & getProps() const override;
|
const Props & getProps(float delay = 0) const override;
|
||||||
const glm::vec4 & getColor() const;
|
const glm::vec4 & getColor() const;
|
||||||
void clearPropsBuffer() override;
|
void clearPropsBuffer() override;
|
||||||
void setId(const LayerID & id) override;
|
void setId(const LayerID & id) override;
|
||||||
|
@ -69,5 +69,6 @@ class GPUFontLayer : public Layer {
|
||||||
glm::vec4 color;
|
glm::vec4 color;
|
||||||
ofNode outerNode;
|
ofNode outerNode;
|
||||||
ofNode innerNode;
|
ofNode innerNode;
|
||||||
|
int letterDelayBufferSize = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ class Layer {
|
||||||
float scale = 1,
|
float scale = 1,
|
||||||
ofxVariableLab::FontVariation fontVariation = ofxVariableLab::FontVariation()) = 0;
|
ofxVariableLab::FontVariation fontVariation = ofxVariableLab::FontVariation()) = 0;
|
||||||
virtual void setProps(const Props & props) = 0;
|
virtual void setProps(const Props & props) = 0;
|
||||||
virtual const Props & getProps() const = 0;
|
virtual const Props & getProps(float delay = 0) const = 0;
|
||||||
virtual const glm::vec4 & getColor() const = 0;
|
virtual const glm::vec4 & getColor() const = 0;
|
||||||
virtual void clearPropsBuffer() = 0;
|
virtual void clearPropsBuffer() = 0;
|
||||||
virtual void setId(const LayerID & id) = 0;
|
virtual void setId(const LayerID & id) = 0;
|
||||||
|
|
|
@ -324,7 +324,7 @@ void MsdfLayer::setProps(const Props & props){
|
||||||
}
|
}
|
||||||
propsBuffer.push_front(props);
|
propsBuffer.push_front(props);
|
||||||
}
|
}
|
||||||
const Layer::Props & MsdfLayer::getProps() const {
|
const Layer::Props & MsdfLayer::getProps(float delay) const {
|
||||||
return propsBuffer[0];
|
return propsBuffer[0];
|
||||||
}
|
}
|
||||||
const glm::vec4 & MsdfLayer::getColor() const {
|
const glm::vec4 & MsdfLayer::getColor() const {
|
||||||
|
|
|
@ -21,7 +21,7 @@ class MsdfLayer : public Layer {
|
||||||
float scale = 1,
|
float scale = 1,
|
||||||
ofxVariableLab::FontVariation fontVariation = ofxVariableLab::FontVariation()) override;
|
ofxVariableLab::FontVariation fontVariation = ofxVariableLab::FontVariation()) override;
|
||||||
void setProps(const Props & props) override;
|
void setProps(const Props & props) override;
|
||||||
const Props & getProps() const override;
|
const Props & getProps(float delay = 0) const override;
|
||||||
const glm::vec4 & getColor() const;
|
const glm::vec4 & getColor() const;
|
||||||
void clearPropsBuffer() override;
|
void clearPropsBuffer() override;
|
||||||
void setId(const LayerID & id) override;
|
void setId(const LayerID & id) override;
|
||||||
|
|
Loading…
Reference in a new issue