X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Ftext%2Ftext-visual.cpp;h=7729bb79e5fefaadeb0679990de058411f8d121a;hb=refs%2Fchanges%2F91%2F170491%2F7;hp=0f43d7d2faecbe01df76b59c6ef4cda19dc3a29b;hpb=c25ab6d22aec336cd938bd186987291517081355;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/text/text-visual.cpp b/dali-toolkit/internal/visuals/text/text-visual.cpp index 0f43d7d..7729bb7 100755 --- a/dali-toolkit/internal/visuals/text/text-visual.cpp +++ b/dali-toolkit/internal/visuals/text/text-visual.cpp @@ -20,6 +20,7 @@ // EXTERNAL INCLUDES #include +#include #include // INTERNAL HEADER @@ -61,6 +62,7 @@ const char * const ENABLE_MARKUP_PROPERTY( "enableMarkup" ); 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 ); @@ -108,21 +110,15 @@ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT = DALI_COMPOSE_SHADER( 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 // 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 ); @@ -132,21 +128,15 @@ const char* FRAGMENT_SHADER_MULTI_COLOR_TEXT = DALI_COMPOSE_SHADER( 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 textTexture.rgb *= mix( 1.0, textTexture.a, preMultipliedAlpha );\n - gl_FragColor = textTexture * uColor * visualMixColor(); + gl_FragColor = textTexture * uColor * vec4( mixColor, 1.0 ); }\n ); @@ -158,14 +148,8 @@ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_STYLE = DALI_COMPOSE_SHADER( 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 @@ -173,7 +157,7 @@ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_STYLE = DALI_COMPOSE_SHADER( mediump vec4 styleTexture = texture2D( sStyle, texCoord );\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 ); @@ -184,14 +168,8 @@ const char* FRAGMENT_SHADER_MULTI_COLOR_TEXT_WITH_STYLE = DALI_COMPOSE_SHADER( 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 @@ -200,7 +178,7 @@ const char* FRAGMENT_SHADER_MULTI_COLOR_TEXT_WITH_STYLE = DALI_COMPOSE_SHADER( 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 ); @@ -212,14 +190,8 @@ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_EMOJI = DALI_COMPOSE_SHADER( 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 @@ -233,7 +205,7 @@ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_EMOJI = DALI_COMPOSE_SHADER( 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 ); @@ -247,14 +219,8 @@ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_STYLE_AND_EMOJI = DALI_COMPOS 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 @@ -269,7 +235,7 @@ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_STYLE_AND_EMOJI = DALI_COMPOS 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 ); @@ -335,10 +301,19 @@ Dali::Property::Index StringKeyToIndexKey( const std::string& stringKey ) { 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 ) @@ -415,6 +390,9 @@ void TextVisual::DoCreatePropertyMap( Property::Map& map ) const 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 @@ -487,9 +465,13 @@ void TextVisual::DoSetOnStage( Actor& actor ) // Create constraint for the animatable text's color Property with uTextColorAnimatable in the renderer. if( shaderTextColorIndex != Property::INVALID_INDEX ) { - Constraint constraint = Constraint::New( mImpl->mRenderer, shaderTextColorIndex, EqualToConstraint() ); - constraint.AddSource( Source( actor, mAnimatableTextColorPropertyIndex ) ); - constraint.Apply(); + Constraint colorConstraint = Constraint::New( 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(); } } @@ -608,6 +590,11 @@ void TextVisual::DoSetProperty( Dali::Property::Index index, const Dali::Propert SetOutlineProperties( mController, propertyValue, Text::EffectStyle::DEFAULT ); break; } + case Toolkit::DevelTextVisual::Property::BACKGROUND: + { + SetBackgroundProperties( mController, propertyValue, Text::EffectStyle::DEFAULT ); + break; + } } } @@ -702,8 +689,9 @@ void TextVisual::UpdateRenderer() 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 );