// EXTERNAL INCLUDES
#include <dali/public-api/animation/constraints.h>
+#include <dali/devel-api/rendering/renderer-devel.h>
#include <dali/devel-api/text-abstraction/text-abstraction-definitions.h>
// INTERNAL HEADER
const char * const SHADOW_PROPERTY( "shadow" );
const char * const UNDERLINE_PROPERTY( "underline" );
const char * const OUTLINE_PROPERTY( "outline" );
+const char * const BACKGROUND_PROPERTY( "textBackground" );
const Vector4 FULL_TEXTURE_RECT( 0.f, 0.f, 1.f, 1.f );
varying mediump vec2 vTexCoord;\n
uniform sampler2D sTexture;\n
uniform lowp vec4 uTextColorAnimatable;\n
- uniform mediump vec4 uAtlasRect;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float opacity;\n
uniform lowp float preMultipliedAlpha;\n
\n
- lowp vec4 visualMixColor()\n
- {\n
- return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
- }\n
- \n
void main()\n
{\n
- mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
- mediump float textTexture = texture2D( sTexture, texCoord ).r;\n
+ mediump float textTexture = texture2D( sTexture, vTexCoord ).r;\n
// Set the color of the text to what it is animated to.
- gl_FragColor = uTextColorAnimatable * textTexture * uColor * visualMixColor();
+ gl_FragColor = uTextColorAnimatable * textTexture * uColor * vec4( mixColor, 1.0 );
}\n
);
const char* FRAGMENT_SHADER_MULTI_COLOR_TEXT = DALI_COMPOSE_SHADER(
varying mediump vec2 vTexCoord;\n
uniform sampler2D sTexture;\n
- uniform mediump vec4 uAtlasRect;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float opacity;\n
uniform lowp float preMultipliedAlpha;\n
\n
- lowp vec4 visualMixColor()\n
- {\n
- return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
- }\n
- \n
void main()\n
{\n
- mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
- mediump vec4 textTexture = texture2D( sTexture, texCoord );\n
+ mediump vec4 textTexture = texture2D( sTexture, vTexCoord );\n
textTexture.rgb *= mix( 1.0, textTexture.a, preMultipliedAlpha );\n
- gl_FragColor = textTexture * uColor * visualMixColor();
+ gl_FragColor = textTexture * uColor * vec4( mixColor, 1.0 );
}\n
);
uniform sampler2D sTexture;\n
uniform sampler2D sStyle;\n
uniform lowp vec4 uTextColorAnimatable;\n
- uniform mediump vec4 uAtlasRect;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float opacity;\n
uniform lowp float preMultipliedAlpha;\n
\n
- lowp vec4 visualMixColor()\n
- {\n
- return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
- }\n
- \n
void main()\n
{\n
- mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
- mediump float textTexture = texture2D( sTexture, texCoord ).r;\n
- mediump vec4 styleTexture = texture2D( sStyle, texCoord );\n
+ mediump float textTexture = texture2D( sTexture, vTexCoord ).r;\n
+ mediump vec4 styleTexture = texture2D( sStyle, vTexCoord );\n
// Draw the text as overlay above the style
- gl_FragColor = ( uTextColorAnimatable * textTexture + styleTexture * ( 1.0 - textTexture ) ) * uColor * visualMixColor();\n
+ gl_FragColor = ( uTextColorAnimatable * textTexture + styleTexture * ( 1.0 - textTexture ) ) * uColor * vec4( mixColor, 1.0 );\n
}\n
);
varying mediump vec2 vTexCoord;\n
uniform sampler2D sTexture;\n
uniform sampler2D sStyle;\n
- uniform mediump vec4 uAtlasRect;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float opacity;\n
uniform lowp float preMultipliedAlpha;\n
\n
- lowp vec4 visualMixColor()\n
- {\n
- return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
- }\n
- \n
void main()\n
{\n
- mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
- mediump vec4 textTexture = texture2D( sTexture, texCoord );\n
- mediump vec4 styleTexture = texture2D( sStyle, texCoord );\n
+ mediump vec4 textTexture = texture2D( sTexture, vTexCoord );\n
+ mediump vec4 styleTexture = texture2D( sStyle, vTexCoord );\n
textTexture.rgb *= mix( 1.0, textTexture.a, preMultipliedAlpha );\n
// Draw the text as overlay above the style
- gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * visualMixColor();\n
+ gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * vec4( mixColor, 1.0 );\n
}\n
);
uniform sampler2D sTexture;\n
uniform sampler2D sMask;\n
uniform lowp vec4 uTextColorAnimatable;\n
- uniform mediump vec4 uAtlasRect;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float opacity;\n
uniform lowp float preMultipliedAlpha;\n
\n
- lowp vec4 visualMixColor()\n
- {\n
- return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
- }\n
- \n
void main()\n
{\n
- mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
- mediump vec4 textTexture = texture2D( sTexture, texCoord );\n
- mediump float maskTexture = texture2D( sMask, texCoord ).r;\n
+ mediump vec4 textTexture = texture2D( sTexture, vTexCoord );\n
+ mediump float maskTexture = texture2D( sMask, vTexCoord ).r;\n
// Set the color of non-transparent pixel in text to what it is animated to.
// Markup text with multiple text colors are not animated (but can be supported later on if required).
textTexture.rgb = mix( textTexture.rgb, uTextColorAnimatable.rgb, vstep * maskTexture ) * mix( 1.0, textTexture.a, preMultipliedAlpha );\n
// Draw the text as overlay above the style
- gl_FragColor = textTexture * uColor * visualMixColor();\n
+ gl_FragColor = textTexture * uColor * vec4( mixColor, 1.0 );\n
}\n
);
uniform sampler2D sMask;\n
uniform lowp float uHasMultipleTextColors;\n
uniform lowp vec4 uTextColorAnimatable;\n
- uniform mediump vec4 uAtlasRect;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float opacity;\n
uniform lowp float preMultipliedAlpha;\n
\n
- lowp vec4 visualMixColor()\n
- {\n
- return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );\n
- }\n
- \n
void main()\n
{\n
- mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n
- mediump vec4 textTexture = texture2D( sTexture, texCoord );\n
- mediump vec4 styleTexture = texture2D( sStyle, texCoord );\n
- mediump float maskTexture = texture2D( sMask, texCoord ).r;\n
+ mediump vec4 textTexture = texture2D( sTexture, vTexCoord );\n
+ mediump vec4 styleTexture = texture2D( sStyle, vTexCoord );\n
+ mediump float maskTexture = texture2D( sMask, vTexCoord ).r;\n
// Set the color of non-transparent pixel in text to what it is animated to.
// Markup text with multiple text colors are not animated (but can be supported later on if required).
textTexture.rgb = mix( textTexture.rgb, uTextColorAnimatable.rgb, vstep * maskTexture * ( 1.0 - uHasMultipleTextColors ) ) * mix( 1.0, textTexture.a, preMultipliedAlpha );\n
// Draw the text as overlay above the style
- gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * visualMixColor();\n
+ gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * vec4( mixColor, 1.0 );\n
}\n
);
{
result = Toolkit::DevelTextVisual::Property::OUTLINE;
}
+ else if( stringKey == BACKGROUND_PROPERTY )
+ {
+ result = Toolkit::DevelTextVisual::Property::BACKGROUND;
+ }
return result;
}
+void OpacityConstraint( float& current, const PropertyInputContainer& inputs )
+{
+ current = inputs[0]->GetVector4().a;
+}
+
} // unnamed namespace
TextVisualPtr TextVisual::New( VisualFactoryCache& factoryCache, const Property::Map& properties )
GetOutlineProperties( mController, value, Text::EffectStyle::DEFAULT );
map.Insert( Toolkit::DevelTextVisual::Property::OUTLINE, value );
+
+ GetBackgroundProperties( mController, value, Text::EffectStyle::DEFAULT );
+ map.Insert( Toolkit::DevelTextVisual::Property::BACKGROUND, value );
}
void TextVisual::DoCreateInstancePropertyMap( Property::Map& map ) const
// Create constraint for the animatable text's color Property with uTextColorAnimatable in the renderer.
if( shaderTextColorIndex != Property::INVALID_INDEX )
{
- Constraint constraint = Constraint::New<Vector4>( mImpl->mRenderer, shaderTextColorIndex, EqualToConstraint() );
- constraint.AddSource( Source( actor, mAnimatableTextColorPropertyIndex ) );
- constraint.Apply();
+ Constraint colorConstraint = Constraint::New<Vector4>( mImpl->mRenderer, shaderTextColorIndex, EqualToConstraint() );
+ colorConstraint.AddSource( Source( actor, mAnimatableTextColorPropertyIndex ) );
+ colorConstraint.Apply();
+
+ Constraint opacityConstraint = Constraint::New< float >( mImpl->mRenderer, Dali::DevelRenderer::Property::OPACITY, OpacityConstraint );
+ opacityConstraint.AddSource( Source( actor, mAnimatableTextColorPropertyIndex ) );
+ opacityConstraint.Apply();
}
}
SetOutlineProperties( mController, propertyValue, Text::EffectStyle::DEFAULT );
break;
}
+ case Toolkit::DevelTextVisual::Property::BACKGROUND:
+ {
+ SetBackgroundProperties( mController, propertyValue, Text::EffectStyle::DEFAULT );
+ break;
+ }
}
}
const bool underlineEnabled = mController->GetTextModel()->IsUnderlineEnabled();
const bool outlineEnabled = ( mController->GetTextModel()->GetOutlineWidth() > Math::MACHINE_EPSILON_1 );
+ const bool backgroundEnabled = mController->GetTextModel()->IsBackgroundEnabled();;
- const bool styleEnabled = ( shadowEnabled || underlineEnabled || outlineEnabled );
+ const bool styleEnabled = ( shadowEnabled || underlineEnabled || outlineEnabled || backgroundEnabled );
TextureSet textureSet = GetTextTexture( relayoutSize, hasMultipleTextColors, containsColorGlyph, styleEnabled );
mImpl->mRenderer.SetTextures( textureSet );
mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED;
- Vector4 atlasRect = FULL_TEXTURE_RECT;
- mImpl->mRenderer.RegisterProperty( ATLAS_RECT_UNIFORM_NAME, atlasRect );
mImpl->mRenderer.RegisterProperty( "uHasMultipleTextColors", static_cast<float>( hasMultipleTextColors ) );
mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON);