Reset Autoscrolling on TextLabel relayout 22/122222/2
authorAgnelo Vaz <agnelo.vaz@samsung.com>
Thu, 30 Mar 2017 12:26:00 +0000 (13:26 +0100)
committerAgnelo Vaz <agnelo.vaz@samsung.com>
Thu, 30 Mar 2017 16:21:19 +0000 (17:21 +0100)
Change-Id: I4756d4b82a9354460a7f7458b2a58b0f11b1f20e

automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp
dali-toolkit/internal/text/text-scroller.cpp

index 9e00636..5cd0063 100644 (file)
@@ -553,6 +553,59 @@ int UtcDaliToolkitTextlabelScrollingP(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
+int UtcDaliToolkitTextlabelScrollingInterruptedP(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline(" UtcDaliToolkitTextlabelScrollingInterruptedP");
+  TextLabel label = TextLabel::New("Some text to scroll");
+  DALI_TEST_CHECK( label );
+  // Avoid a crash when core load gl resources.
+  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
+  Stage::GetCurrent().Add( label );
+  label.SetSize( 360.0f, 20.f );
+  // Turn on all the effects
+  label.SetProperty( TextLabel::Property::MULTI_LINE, false );
+  label.SetProperty( TextLabel::Property::AUTO_SCROLL_GAP, 50.0f );
+  label.SetProperty( TextLabel::Property::AUTO_SCROLL_LOOP_COUNT, 3 );
+  label.SetProperty( TextLabel::Property::AUTO_SCROLL_SPEED, 80.0f );
+
+  // Render the text.
+  application.SendNotification();
+  application.Render();
+
+  unsigned int actorCount1 = label.GetChildCount();
+  tet_printf("Initial actor count is(%d)\n", actorCount1 );
+
+  try
+  {
+    // Render some text with the shared atlas backend
+    label.SetProperty( TextLabel::Property::ENABLE_AUTO_SCROLL, true );
+    application.SendNotification();
+    application.Render(2000);
+
+    unsigned int actorCount1 = label.GetChildCount();
+    tet_printf("Actor count after scrolling is(%d)\n", actorCount1 );
+
+    label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
+
+    // Render the text.
+    application.SendNotification();
+    application.Render();
+
+    unsigned int actorCount2 = label.GetChildCount();
+    tet_printf("After changing color the actor count is(%d)\n", actorCount2 );
+
+    DALI_TEST_EQUALS( actorCount1, actorCount2, TEST_LOCATION );
+
+  }
+  catch( ... )
+  {
+    tet_result(TET_FAIL);
+  }
+
+  END_TEST;
+}
+
 int UtcDaliToolkitTextlabelScrollingN(void)
 {
   ToolkitTestApplication application;
 int UtcDaliToolkitTextlabelScrollingN(void)
 {
   ToolkitTestApplication application;
index d2f9348..172cc2f 100644 (file)
@@ -268,6 +268,13 @@ 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 );
 
   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 );
 
+  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;
 
   FrameBufferImage offscreenRenderTargetForText = FrameBufferImage::New( offScreenSize.width, offScreenSize.height, Pixel::RGBA8888 );
   Renderer renderer;