namespace
{
-
-// Property names - common properties defined in visual-string-constants.h/cpp
-const char * const FONT_FAMILY_PROPERTY( "fontFamily" );
-const char * const FONT_STYLE_PROPERTY( "fontStyle" );
-const char * const POINT_SIZE_PROPERTY( "pointSize" );
-const char * const MULTI_LINE_PROPERTY( "multiLine" );
-const char * const HORIZONTAL_ALIGNMENT_PROPERTY( "horizontalAlignment" );
-const char * const VERTICAL_ALIGNMENT_PROPERTY( "verticalAlignment" );
-const char * const TEXT_COLOR_PROPERTY( "textColor" );
-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 );
const char* VERTEX_SHADER = DALI_COMPOSE_SHADER(
attribute mediump vec2 aPosition;\n
- uniform mediump mat4 uMvpMatrix;\n
+ uniform highp mat4 uMvpMatrix;\n
uniform mediump vec3 uSize;\n
uniform mediump vec4 pixelArea;\n
- uniform mediump mat4 uModelMatrix;\n
- uniform mediump mat4 uViewMatrix;\n
- uniform mediump mat4 uProjection;\n
-
varying mediump vec2 vTexCoord;\n
//Visual size and offset
void main()\n
{\n
- mediump vec4 nonAlignedVertex = uViewMatrix*uModelMatrix*ComputeVertexPosition();\n
- mediump vec4 pixelAlignedVertex = vec4 ( floor(nonAlignedVertex.xyz), 1.0 );\n
- mediump vec4 vertexPosition = uProjection*pixelAlignedVertex;\n
-
+ gl_Position = uMvpMatrix * ComputeVertexPosition();\n
vTexCoord = pixelArea.xy+pixelArea.zw*(aPosition + vec2(0.5) );\n
- gl_Position = vertexPosition;\n
}\n
);
uniform lowp vec4 uTextColorAnimatable;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float preMultipliedAlpha;\n
\n
void main()\n
{\n
uniform sampler2D sTexture;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float preMultipliedAlpha;\n
\n
void main()\n
{\n
mediump vec4 textTexture = texture2D( sTexture, vTexCoord );\n
- textTexture.rgb *= mix( 1.0, textTexture.a, preMultipliedAlpha );\n
gl_FragColor = textTexture * uColor * vec4( mixColor, 1.0 );
}\n
uniform lowp vec4 uTextColorAnimatable;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float preMultipliedAlpha;\n
\n
void main()\n
{\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 * vec4( mixColor, 1.0 );\n
+ gl_FragColor = ( uTextColorAnimatable * textTexture + styleTexture * ( 1.0 - uTextColorAnimatable.a * textTexture ) ) * uColor * vec4( mixColor, 1.0 );\n
}\n
);
uniform sampler2D sStyle;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float preMultipliedAlpha;\n
\n
void main()\n
{\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 * vec4( mixColor, 1.0 );\n
uniform lowp vec4 uTextColorAnimatable;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float preMultipliedAlpha;\n
\n
void main()\n
{\n
// 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
+ textTexture.rgb = mix( textTexture.rgb, uTextColorAnimatable.rgb, vstep * maskTexture );\n
// Draw the text as overlay above the style
gl_FragColor = textTexture * uColor * vec4( mixColor, 1.0 );\n
uniform lowp vec4 uTextColorAnimatable;\n
uniform lowp vec4 uColor;\n
uniform lowp vec3 mixColor;\n
- uniform lowp float preMultipliedAlpha;\n
\n
void main()\n
{\n
// 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
+ textTexture.rgb = mix( textTexture.rgb, uTextColorAnimatable.rgb, vstep * maskTexture * ( 1.0 - uHasMultipleTextColors ) );\n
// Draw the text as overlay above the style
gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * vec4( mixColor, 1.0 );\n
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;
+}
+
void OpacityConstraint( float& current, const PropertyInputContainer& inputs )
{
- current = inputs[0]->GetVector4().a;
+ // Make zero if the alpha value of text color is zero to skip rendering text
+ if( EqualsZero( inputs[0]->GetVector4().a ) )
+ {
+ current = 0.0f;
+ }
+ else
+ {
+ current = 1.0f;
+ }
}
} // unnamed namespace
// Create constraint for the animatable text's color Property with uTextColorAnimatable in the renderer.
if( shaderTextColorIndex != Property::INVALID_INDEX )
{
- Constraint colorConstraint = Constraint::New<Vector4>( mImpl->mRenderer, shaderTextColorIndex, EqualToConstraint() );
+ Constraint colorConstraint = Constraint::New<Vector4>( mImpl->mRenderer, shaderTextColorIndex, TextColorConstraint );
colorConstraint.AddSource( Source( actor, mAnimatableTextColorPropertyIndex ) );
colorConstraint.Apply();
+ // Make zero if the alpha value of text color is zero to skip rendering text
Constraint opacityConstraint = Constraint::New< float >( mImpl->mRenderer, Dali::DevelRenderer::Property::OPACITY, OpacityConstraint );
opacityConstraint.AddSource( Source( actor, mAnimatableTextColorPropertyIndex ) );
opacityConstraint.Apply();
return;
}
- const Text::Controller::UpdateTextType updateTextType = mController->Relayout( relayoutSize );
+ Dali::LayoutDirection::Type layoutDirection = static_cast<Dali::LayoutDirection::Type>( control.GetProperty( Dali::Actor::Property::LAYOUT_DIRECTION ).Get<int>() );
+
+ const Text::Controller::UpdateTextType updateTextType = mController->Relayout( relayoutSize, layoutDirection );
if( Text::Controller::NONE_UPDATED != ( Text::Controller::MODEL_UPDATED & updateTextType )
|| mRendererUpdateNeeded )