+const char* FRAGMENT_SHADER_MULTI_COLOR_TEXT_WITH_STYLE = DALI_COMPOSE_SHADER(
+ 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
+ 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
+ }\n
+);
+
+const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_EMOJI = DALI_COMPOSE_SHADER(
+ varying mediump vec2 vTexCoord;\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
+
+ // 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).
+ // Emoji color are not animated.
+ mediump float vstep = step( 0.0001, textTexture.a );\n
+ 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
+ }\n
+);
+
+const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_STYLE_AND_EMOJI = DALI_COMPOSE_SHADER(
+ varying mediump vec2 vTexCoord;\n
+ uniform sampler2D sTexture;\n
+ uniform sampler2D sStyle;\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
+
+ // 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).
+ // Emoji color are not animated.
+ mediump float vstep = step( 0.0001, textTexture.a );\n
+ 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
+ }\n
+);
+
+/**
+ * Return Property index for the given string key
+ * param[in] stringKey the string index key
+ * return the key as an index
+ */
+
+Dali::Property::Index StringKeyToIndexKey( const std::string& stringKey )
+{
+ Dali::Property::Index result = Property::INVALID_KEY;
+
+ if( stringKey == VISUAL_TYPE )
+ {
+ result = Toolkit::Visual::Property::TYPE;
+ }
+ else if( stringKey == TEXT_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::TEXT;
+ }
+ else if( stringKey == FONT_FAMILY_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::FONT_FAMILY;
+ }
+ else if( stringKey == FONT_STYLE_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::FONT_STYLE;
+ }
+ else if( stringKey == POINT_SIZE_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::POINT_SIZE;
+ }
+ else if( stringKey == MULTI_LINE_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::MULTI_LINE;
+ }
+ else if( stringKey == HORIZONTAL_ALIGNMENT_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::HORIZONTAL_ALIGNMENT;
+ }
+ else if( stringKey == VERTICAL_ALIGNMENT_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::VERTICAL_ALIGNMENT;
+ }
+ else if( stringKey == TEXT_COLOR_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::TEXT_COLOR;
+ }
+ else if( stringKey == ENABLE_MARKUP_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::ENABLE_MARKUP;
+ }
+ else if( stringKey == SHADOW_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::SHADOW;
+ }
+ else if( stringKey == UNDERLINE_PROPERTY )
+ {
+ result = Toolkit::TextVisual::Property::UNDERLINE;
+ }
+ else if( stringKey == OUTLINE_PROPERTY )
+ {
+ result = Toolkit::DevelTextVisual::Property::OUTLINE;
+ }
+
+ return result;
+}
+
+void TextColorConstraint( Vector4& current, const PropertyInputContainer& inputs )
+{
+ Vector4 color = inputs[0]->GetVector4();
+ current.r = color.r * color.a;
+ current.g = color.g * color.a;
+ current.b = color.b * color.a;
+ current.a = color.a;
+}
+