X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Ftext%2Ftext-visual.cpp;h=abca28163e8a8201f5c59a4d9d9b033d2712ed42;hb=45fc50ae7d1c0b9d33d47da82e2ac8e928e992f9;hp=e7b40a88fb263eb57de0411e4da4f55c7a92519a;hpb=dcee19c07c4f38251b88ca0ad849c9a666cf20eb;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 e7b40a8..abca281 100644 --- a/dali-toolkit/internal/visuals/text/text-visual.cpp +++ b/dali-toolkit/internal/visuals/text/text-visual.cpp @@ -40,8 +40,7 @@ namespace Internal namespace { -// Property names. -const char * const TEXT_PROPERTY( "text" ); +// 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" ); @@ -94,9 +93,13 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump mat4 uMvpMatrix;\n uniform mediump vec3 uSize;\n uniform mediump vec4 pixelArea; + + uniform mediump mat4 uModelMatrix;\n + uniform mediump mat4 uViewMatrix;\n + uniform mediump mat4 uProjection;\n + varying mediump vec2 vTexCoord;\n \n - //Visual size and offset uniform mediump vec2 offset;\n uniform mediump vec2 size;\n @@ -113,7 +116,10 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( void main()\n {\n - mediump vec4 vertexPosition = uMvpMatrix *ComputeVertexPosition();\n + mediump vec4 nonAlignedVertex = uViewMatrix*uModelMatrix*ComputeVertexPosition();\n + mediump vec4 pixelAlignedVertex = vec4 ( floor(nonAlignedVertex.xyz), 1.0 );\n + mediump vec4 vertexPosition = uProjection*pixelAlignedVertex;\n + vTexCoord = pixelArea.xy+pixelArea.zw*(aPosition + vec2(0.5) );\n gl_Position = vertexPosition;\n }\n @@ -124,22 +130,25 @@ const char* FRAGMENT_SHADER_ATLAS_CLAMP = DALI_COMPOSE_SHADER( uniform sampler2D sTexture;\n uniform mediump vec4 uAtlasRect;\n uniform lowp vec4 uColor;\n + uniform lowp vec4 mixColor;\n \n void main()\n {\n mediump vec2 texCoord = clamp( mix( uAtlasRect.xy, uAtlasRect.zw, vTexCoord ), uAtlasRect.xy, uAtlasRect.zw );\n - gl_FragColor = texture2D( sTexture, texCoord ) * uColor;\n + gl_FragColor = texture2D( sTexture, texCoord ) * uColor * mixColor;\n }\n ); } // unnamed namespace -TextVisualPtr TextVisual::New( VisualFactoryCache& factoryCache ) +TextVisualPtr TextVisual::New( VisualFactoryCache& factoryCache, const Property::Map& properties ) { - return new TextVisual( factoryCache ); + TextVisualPtr TextVisualPtr( new TextVisual( factoryCache ) ); + TextVisualPtr->SetProperties( properties ); + return TextVisualPtr; } -float TextVisual::GetHeightForWidth( float width ) const +float TextVisual::GetHeightForWidth( float width ) { return mController->GetHeightForWidth( width ); } @@ -260,19 +269,15 @@ void TextVisual::DoSetOnStage( Actor& actor ) mControl = actor; Geometry geometry = mFactoryCache.GetGeometry( VisualFactoryCache::QUAD_GEOMETRY ); - if( !geometry ) - { - geometry = VisualFactoryCache::CreateQuadGeometry(); - mFactoryCache.SaveGeometry( VisualFactoryCache::QUAD_GEOMETRY , geometry ); - } - Shader shader = mFactoryCache.GetShader( VisualFactoryCache::IMAGE_SHADER_ATLAS_DEFAULT_WRAP ); - if( !shader ) + Shader shader = mFactoryCache.GetShader( VisualFactoryCache::TEXT_SHADER ); + if( ! shader ) { shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER_ATLAS_CLAMP ); - mFactoryCache.SaveShader( VisualFactoryCache::IMAGE_SHADER_ATLAS_DEFAULT_WRAP, shader ); + shader.RegisterProperty( PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT ); + + mFactoryCache.SaveShader( VisualFactoryCache::TEXT_SHADER, shader ); } - shader.RegisterProperty( PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT ); mImpl->mRenderer = Renderer::New( geometry, shader ); mImpl->mRenderer.SetProperty( Dali::Renderer::Property::DEPTH_INDEX, Toolkit::DepthIndex::TEXT ); @@ -430,29 +435,23 @@ void TextVisual::UpdateRenderer() PixelData data = mTypesetter->Render( relayoutSize ); Vector4 atlasRect = FULL_TEXTURE_RECT; - TextureSet textureSet = mFactoryCache.GetAtlasManager()->Add( atlasRect, data ); - if( textureSet ) - { - mImpl->mFlags |= Impl::IS_ATLASING_APPLIED; - } - else - { - // It may happen the image atlas can't handle a pixel data it exceeds the maximum size. - // In that case, create a texture. TODO: should tile the text. + // Texture set not retrieved from Atlas Manager whilst pixel offset visible. - Texture texture = Texture::New( Dali::TextureType::TEXTURE_2D, - data.GetPixelFormat(), - data.GetWidth(), - data.GetHeight() ); + // It may happen the image atlas can't handle a pixel data it exceeds the maximum size. + // In that case, create a texture. TODO: should tile the text. - texture.Upload( data ); + Texture texture = Texture::New( Dali::TextureType::TEXTURE_2D, + data.GetPixelFormat(), + data.GetWidth(), + data.GetHeight() ); - textureSet = TextureSet::New(); - textureSet.SetTexture( 0u, texture ); + texture.Upload( data ); - mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED; - } + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture( 0u, texture ); + + mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED; mImpl->mRenderer.RegisterProperty( ATLAS_RECT_UNIFORM_NAME, atlasRect );