X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-scroller.cpp;h=ac2af53f9a7fb6a4b0758b4649d5239b53f37748;hb=3f83c5b8d17c02cb06043bd1d30ce4d4321f941c;hp=605e5b19ee2579b143333e08789d3a12de889576;hpb=debc1fd9a7d6033c14e469d0812b4baccb57c7de;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/text-scroller.cpp b/dali-toolkit/internal/text/text-scroller.cpp index 605e5b1..ac2af53 100644 --- a/dali-toolkit/internal/text/text-scroller.cpp +++ b/dali-toolkit/internal/text/text-scroller.cpp @@ -19,15 +19,15 @@ #include // EXTERNAL INCLUDES -#include -#include -#include -#include -#include -#include #include #include #include +#include +#include +#include +#include +#include +#include // INTERNAL INCLUDES #include @@ -51,7 +51,9 @@ const char* VERTEX_SHADER_SCROLL = DALI_COMPOSE_SHADER( attribute mediump vec2 aPosition;\n varying highp vec2 vTexCoord;\n varying highp float vRatio;\n - uniform mediump mat4 uMvpMatrix;\n + uniform mediump mat4 uModelMatrix;\n + uniform mediump mat4 uViewMatrix;\n + uniform mediump mat4 uProjection;\n uniform mediump vec3 uSize;\n uniform mediump float uDelta;\n uniform mediump vec2 uTextureSize; @@ -61,25 +63,29 @@ const char* VERTEX_SHADER_SCROLL = DALI_COMPOSE_SHADER( void main()\n {\n {\n - mediump vec4 vertexPosition = vec4(aPosition*uSize.xy, 0.0, 1.0);\n + highp vec4 vertexPosition = vec4(aPosition*uSize.xy, 0.0, 1.0);\n + vertexPosition = uViewMatrix * uModelMatrix * vertexPosition ;\n + vertexPosition.x = floor( vertexPosition.x ) + 0.5; + vertexPosition.y = floor( vertexPosition.y ) + 0.5; float smallTextPadding = max(uSize.x - uTextureSize.x, 0. );\n float gap = max( uGap, smallTextPadding );\n - vTexCoord.x = ( uDelta + ( uRtl * ( uTextureSize.x - uSize.x ) ) + ( aPosition.x * uSize.x ) )/ ( uTextureSize.x+gap );\n - vTexCoord.y = aPosition.y;\n + float delta = floor ( uDelta ) + 0.5; + vTexCoord.x = ( delta + ( uRtl * ( uTextureSize.x - uSize.x ) ) + ( aPosition.x * uSize.x ) )/ ( uTextureSize.x + gap );\n + vTexCoord.y = ( 0.5 + floor( aPosition.y * uSize.y ) )/ ( uTextureSize.y ) ;\n vRatio = uTextureSize.x / ( uTextureSize.x + gap );\n - gl_Position = uMvpMatrix * vertexPosition;\n + gl_Position = uProjection * vertexPosition; }\n }\n ); const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( - varying mediump vec2 vTexCoord;\n + varying highp vec2 vTexCoord;\n varying highp float vRatio;\n uniform sampler2D sTexture;\n \n void main()\n {\n - mediump vec2 texCoord;\n + highp vec2 texCoord;\n texCoord.y = vTexCoord.y;\n texCoord.x = fract( vTexCoord.x ) / vRatio;\n if ( texCoord.x > 1.0 )\n @@ -166,10 +172,10 @@ void CreateGeometry( Geometry& geometry ) */ void CreateRenderer( FrameBufferImage frameBufferImage, Dali::Renderer& renderer ) { - Shader shader = Shader::New( VERTEX_SHADER_SCROLL , FRAGMENT_SHADER, Shader::HINT_NONE ); + Shader shader = Shader::New( VERTEX_SHADER_SCROLL , FRAGMENT_SHADER, Shader::Hint::NONE ); Sampler sampler = Sampler::New(); - sampler.SetFilterMode(FilterMode::NEAREST, FilterMode::NEAREST ); + sampler.SetFilterMode(FilterMode::LINEAR, FilterMode::LINEAR ); TextureSet textureSet = TextureSet::New(); TextureSetImage( textureSet, 0u, frameBufferImage ); @@ -239,6 +245,16 @@ int TextScroller::GetLoopCount() const return mLoopCount; } +void TextScroller::SetLoopDelay( float delay ) +{ + mLoopDelay = delay; +} + +float TextScroller::GetLoopDelay() const +{ + return mLoopDelay; +} + Actor TextScroller::GetSourceCamera() const { return mOffscreenCameraActor; @@ -253,6 +269,7 @@ TextScroller::TextScroller( ScrollerInterface& scrollerInterface ) : mScrollerIn mScrollDeltaIndex( Property::INVALID_INDEX ), mScrollSpeed( MINIMUM_SCROLL_SPEED ), mLoopCount( 1 ), + mLoopDelay( 0.0f ), mWrapGap( 0.0f ) { DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextScroller Default Constructor\n" ); @@ -268,7 +285,14 @@ void TextScroller::SetParameters( Actor sourceActor, const Size& controlSize, co DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextScroller::SetParameters controlSize[%f,%f] offscreenSize[%f,%f] direction[%d] alignmentOffset[%f]\n", controlSize.x, controlSize.y, offScreenSize.x, offScreenSize.y, direction, alignmentOffset ); - FrameBufferImage offscreenRenderTargetForText = FrameBufferImage::New( offScreenSize.width, offScreenSize.height, Pixel::RGBA8888, Dali::Image::UNUSED ); + CleanUp(); // If already scrolling then restart with new parameters + + if ( mScrollAnimation ) + { + mScrollAnimation.Clear(); + } + + FrameBufferImage offscreenRenderTargetForText = FrameBufferImage::New( offScreenSize.width, offScreenSize.height, Pixel::RGBA8888 ); Renderer renderer; CreateCameraActor( offScreenSize, mOffscreenCameraActor ); @@ -320,7 +344,7 @@ void TextScroller::StartScrolling( float scrollAmount, float scrollDuration, int DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextScroller::StartScrolling scrollAmount[%f] scrollDuration[%f], loop[%d] speed[%d]\n", scrollAmount, scrollDuration, loopCount, mScrollSpeed ); mScrollAnimation = Animation::New( scrollDuration ); - mScrollAnimation.AnimateTo( Property( mScrollingTextActor, mScrollDeltaIndex ), scrollAmount ); + mScrollAnimation.AnimateTo( Property( mScrollingTextActor, mScrollDeltaIndex ), scrollAmount, TimePeriod( mLoopDelay, scrollDuration ) ); mScrollAnimation.SetEndAction( Animation::Discard ); mScrollAnimation.SetLoopCount( loopCount ); mScrollAnimation.FinishedSignal().Connect( this, &TextScroller::AutoScrollAnimationFinished );