Merge remote-tracking branch 'origin/tizen' into new_text 10/38010/1
authorPaul Wisbey <p.wisbey@samsung.com>
Thu, 9 Apr 2015 12:21:16 +0000 (13:21 +0100)
committerPaul Wisbey <p.wisbey@samsung.com>
Thu, 9 Apr 2015 12:22:40 +0000 (13:22 +0100)
Change-Id: Iba714851799e17a461ac18d8431204835675c67b

228 files changed:
README
automated-tests/src/dali-toolkit-internal/CMakeLists.txt
automated-tests/src/dali-toolkit-internal/utc-Dali-PushButton.cpp
automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-HelperAndDebug.cpp [deleted file]
automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-Processor-Types.cpp [deleted file]
automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-Processor.cpp [deleted file]
automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-Relayout-Utilities.cpp [deleted file]
automated-tests/src/dali-toolkit/CMakeLists.txt
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/dali-test-suite-utils.h
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/dummy-control.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/dummy-control.h
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-platform-abstraction.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-platform-abstraction.h
automated-tests/src/dali-toolkit/utc-Dali-Builder.cpp
automated-tests/src/dali-toolkit/utc-Dali-MarkupProcessor.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-NavigationControl.cpp
automated-tests/src/dali-toolkit/utc-Dali-Popup.cpp
automated-tests/src/dali-toolkit/utc-Dali-PushButton.cpp
automated-tests/src/dali-toolkit/utc-Dali-RadioButton.cpp
build/tizen/configure.ac
build/tizen/dali-toolkit/Makefile.am
dali-toolkit/dali-toolkit.h
dali-toolkit/internal/atlas-manager/atlas-manager-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/atlas-manager/atlas-manager-impl.h [new file with mode: 0644]
dali-toolkit/internal/atlas-manager/atlas-manager.cpp [new file with mode: 0644]
dali-toolkit/internal/atlas-manager/atlas-manager.h [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/button-impl.cpp
dali-toolkit/internal/controls/buttons/push-button-impl.cpp
dali-toolkit/internal/controls/buttons/radio-button-impl.h
dali-toolkit/internal/controls/navigation-frame/navigation-title-bar.cpp
dali-toolkit/internal/controls/navigation-frame/navigation-title-bar.h
dali-toolkit/internal/controls/navigation-frame/navigation-tool-bar.h
dali-toolkit/internal/controls/popup/popup-impl.cpp
dali-toolkit/internal/controls/popup/popup-impl.h
dali-toolkit/internal/controls/slider/slider-impl.cpp
dali-toolkit/internal/controls/slider/slider-impl.h
dali-toolkit/internal/controls/text-controls/text-field-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-controls/text-field-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-controls/text-label-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-controls/text-label-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-input/text-input-decorator-impl.cpp [deleted file]
dali-toolkit/internal/controls/text-input/text-input-decorator-impl.h [deleted file]
dali-toolkit/internal/controls/text-input/text-input-handles-impl.cpp [deleted file]
dali-toolkit/internal/controls/text-input/text-input-handles-impl.h [deleted file]
dali-toolkit/internal/controls/text-input/text-input-impl.cpp [deleted file]
dali-toolkit/internal/controls/text-input/text-input-impl.h [deleted file]
dali-toolkit/internal/controls/text-input/text-input-popup-impl.cpp [deleted file]
dali-toolkit/internal/controls/text-input/text-input-popup-impl.h [deleted file]
dali-toolkit/internal/controls/text-input/text-input-popup-new-impl.h [deleted file]
dali-toolkit/internal/controls/text-input/text-input-text-highlight-impl.cpp [deleted file]
dali-toolkit/internal/controls/text-input/text-input-text-highlight-impl.h [deleted file]
dali-toolkit/internal/controls/text-input/text-input-text-style-impl.h [deleted file]
dali-toolkit/internal/controls/text-input/textview-character-positions-impl.h [deleted file]
dali-toolkit/internal/controls/text-view/relayout-utilities.cpp [deleted file]
dali-toolkit/internal/controls/text-view/relayout-utilities.h [deleted file]
dali-toolkit/internal/controls/text-view/split-by-char-policies.cpp [deleted file]
dali-toolkit/internal/controls/text-view/split-by-char-policies.h [deleted file]
dali-toolkit/internal/controls/text-view/split-by-new-line-char-policies.cpp [deleted file]
dali-toolkit/internal/controls/text-view/split-by-new-line-char-policies.h [deleted file]
dali-toolkit/internal/controls/text-view/split-by-word-policies.cpp [deleted file]
dali-toolkit/internal/controls/text-view/split-by-word-policies.h [deleted file]
dali-toolkit/internal/controls/text-view/text-actor-cache.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-actor-cache.h [deleted file]
dali-toolkit/internal/controls/text-view/text-processor-bidirectional-info.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-processor-bidirectional-info.h [deleted file]
dali-toolkit/internal/controls/text-view/text-processor.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-processor.h [deleted file]
dali-toolkit/internal/controls/text-view/text-view-character-processor.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-view-impl.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-view-impl.h [deleted file]
dali-toolkit/internal/controls/text-view/text-view-paragraph-processor.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-view-paragraph-processor.h [deleted file]
dali-toolkit/internal/controls/text-view/text-view-processor-dbg.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-view-processor-dbg.h [deleted file]
dali-toolkit/internal/controls/text-view/text-view-processor-helper-functions.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-view-processor-helper-functions.h [deleted file]
dali-toolkit/internal/controls/text-view/text-view-processor-types.h [deleted file]
dali-toolkit/internal/controls/text-view/text-view-processor.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-view-processor.h [deleted file]
dali-toolkit/internal/controls/text-view/text-view-word-processor.cpp [deleted file]
dali-toolkit/internal/controls/text-view/text-view-word-processor.h [deleted file]
dali-toolkit/internal/file.list
dali-toolkit/internal/styling/style-manager-impl.cpp
dali-toolkit/internal/styling/style-manager-impl.h
dali-toolkit/internal/text/bidirectional-line-info-run.h [new file with mode: 0644]
dali-toolkit/internal/text/bidirectional-paragraph-info-run.h [new file with mode: 0644]
dali-toolkit/internal/text/bidirectional-support.cpp [new file with mode: 0644]
dali-toolkit/internal/text/bidirectional-support.h [new file with mode: 0644]
dali-toolkit/internal/text/character-run.h [new file with mode: 0644]
dali-toolkit/internal/text/character-set-conversion.cpp [new file with mode: 0644]
dali-toolkit/internal/text/character-set-conversion.h [new file with mode: 0644]
dali-toolkit/internal/text/clipping/text-clipper.cpp [new file with mode: 0644]
dali-toolkit/internal/text/clipping/text-clipper.h [new file with mode: 0644]
dali-toolkit/internal/text/decorator/text-decorator.cpp [new file with mode: 0644]
dali-toolkit/internal/text/decorator/text-decorator.h [new file with mode: 0644]
dali-toolkit/internal/text/font-run.h [new file with mode: 0644]
dali-toolkit/internal/text/layouts/layout-engine.cpp [new file with mode: 0644]
dali-toolkit/internal/text/layouts/layout-engine.h [new file with mode: 0644]
dali-toolkit/internal/text/layouts/layout-parameters.h [new file with mode: 0644]
dali-toolkit/internal/text/line-run.h [new file with mode: 0644]
dali-toolkit/internal/text/logical-model-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/text/logical-model-impl.h [new file with mode: 0644]
dali-toolkit/internal/text/multi-language-support-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/text/multi-language-support-impl.h [new file with mode: 0644]
dali-toolkit/internal/text/multi-language-support.cpp [new file with mode: 0644]
dali-toolkit/internal/text/multi-language-support.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager-impl.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager.cpp [new file with mode: 0644]
dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp [new file with mode: 0644]
dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/basic/text-basic-renderer.cpp [new file with mode: 0644]
dali-toolkit/internal/text/rendering/basic/text-basic-renderer.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/shaders/text-basic-shader.cpp [new file with mode: 0644]
dali-toolkit/internal/text/rendering/shaders/text-basic-shader.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/shaders/text-basic-shadow-shader.cpp [new file with mode: 0644]
dali-toolkit/internal/text/rendering/shaders/text-basic-shadow-shader.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/shaders/text-bgra-shader.cpp [new file with mode: 0644]
dali-toolkit/internal/text/rendering/shaders/text-bgra-shader.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/text-backend-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/text/rendering/text-backend-impl.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/text-backend.cpp [new file with mode: 0644]
dali-toolkit/internal/text/rendering/text-backend.h [new file with mode: 0644]
dali-toolkit/internal/text/rendering/text-renderer.cpp [moved from plugins/dali-script-v8/src/actors/text-actor-api.h with 59% similarity]
dali-toolkit/internal/text/rendering/text-renderer.h [new file with mode: 0644]
dali-toolkit/internal/text/script-run.h [new file with mode: 0644]
dali-toolkit/internal/text/segmentation.cpp [new file with mode: 0644]
dali-toolkit/internal/text/segmentation.h [new file with mode: 0644]
dali-toolkit/internal/text/shaper.cpp [new file with mode: 0644]
dali-toolkit/internal/text/shaper.h [new file with mode: 0644]
dali-toolkit/internal/text/text-control-interface.cpp [new file with mode: 0644]
dali-toolkit/internal/text/text-control-interface.h [new file with mode: 0644]
dali-toolkit/internal/text/text-controller.cpp [new file with mode: 0644]
dali-toolkit/internal/text/text-controller.h [new file with mode: 0644]
dali-toolkit/internal/text/text-definitions.h [new file with mode: 0644]
dali-toolkit/internal/text/text-io.cpp [new file with mode: 0644]
dali-toolkit/internal/text/text-io.h [new file with mode: 0644]
dali-toolkit/internal/text/text-view-interface.cpp [new file with mode: 0644]
dali-toolkit/internal/text/text-view-interface.h [new file with mode: 0644]
dali-toolkit/internal/text/text-view.cpp [new file with mode: 0644]
dali-toolkit/internal/text/text-view.h [new file with mode: 0644]
dali-toolkit/internal/text/visual-model-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/text/visual-model-impl.h [new file with mode: 0644]
dali-toolkit/public-api/controls/control-impl.cpp
dali-toolkit/public-api/controls/control-impl.h
dali-toolkit/public-api/controls/control.cpp
dali-toolkit/public-api/controls/control.h
dali-toolkit/public-api/controls/default-controls/solid-color-actor.cpp
dali-toolkit/public-api/controls/navigation-frame/navigation-bar-style.h
dali-toolkit/public-api/controls/popup/popup.cpp
dali-toolkit/public-api/controls/popup/popup.h
dali-toolkit/public-api/controls/text-controls/text-field.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/text-controls/text-field.h [new file with mode: 0644]
dali-toolkit/public-api/controls/text-controls/text-label.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/text-controls/text-label.h [new file with mode: 0644]
dali-toolkit/public-api/controls/text-controls/text-selection-popup.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/text-controls/text-selection-popup.h [new file with mode: 0644]
dali-toolkit/public-api/controls/text-input/text-input.cpp [deleted file]
dali-toolkit/public-api/controls/text-input/text-input.h [deleted file]
dali-toolkit/public-api/controls/text-view/text-view.cpp [deleted file]
dali-toolkit/public-api/controls/text-view/text-view.h [deleted file]
dali-toolkit/public-api/file.list
dali-toolkit/public-api/markup-processor/markup-processor.cpp [deleted file]
dali-toolkit/public-api/markup-processor/markup-processor.h [deleted file]
dali-toolkit/public-api/shader-effects/carousel-effect.cpp
dali-toolkit/public-api/shader-effects/ripple-effect.cpp
dali-toolkit/public-api/shader-effects/shear-effect.cpp
dali-toolkit/public-api/text/rendering-backend.h [new file with mode: 0644]
dali-toolkit/styles/mobile/tizen-dark-theme.json [new file with mode: 0644]
dali-toolkit/styles/mobile/tizen-default-theme.json [new symlink]
dali-toolkit/styles/tizen-dark-theme.json
docs/content/images/background/BackgroundTextLabel.png [moved from docs/content/images/background/BackgroundTextView.png with 100% similarity]
docs/content/images/text-controls/ArabicBegin.png [new file with mode: 0644]
docs/content/images/text-controls/ArabicCenter.png [new file with mode: 0644]
docs/content/images/text-controls/ArabicEnd.png [new file with mode: 0644]
docs/content/images/text-controls/LatinBegin.png [new file with mode: 0644]
docs/content/images/text-controls/LatinCenter.png [new file with mode: 0644]
docs/content/images/text-controls/LatinEnd.png [new file with mode: 0644]
docs/content/images/text-controls/TextLabelCenter.png [new file with mode: 0644]
docs/content/images/text-controls/TextLabelTopLeft.png [new file with mode: 0644]
docs/content/images/text-view/AlessBlessC.png [deleted file]
docs/content/images/text-view/Black-Shadow.png [deleted file]
docs/content/images/text-view/Blue-Glow.png [deleted file]
docs/content/images/text-view/Bold.png [deleted file]
docs/content/images/text-view/FontAppendix01.png [deleted file]
docs/content/images/text-view/FontAppendix02.png [deleted file]
docs/content/images/text-view/FontAppendix03.png [deleted file]
docs/content/images/text-view/FontAppendix04.png [deleted file]
docs/content/images/text-view/FontAppendix05.png [deleted file]
docs/content/images/text-view/FreeSerifFont.png [deleted file]
docs/content/images/text-view/Italic.png [deleted file]
docs/content/images/text-view/Red-Outline.png [deleted file]
docs/content/images/text-view/Smooth-Text.png [deleted file]
docs/content/images/text-view/Underline.png [deleted file]
docs/content/images/text-view/text-view-example-01.png [deleted file]
docs/content/images/text-view/text-view-example-02.png [deleted file]
docs/content/images/text-view/text-view-example-03.png [deleted file]
docs/content/images/text-view/text-view-example-04.png [deleted file]
docs/content/images/text-view/text-view-example-05.png [deleted file]
docs/content/images/text-view/text-view-example-06.png [deleted file]
docs/content/images/text-view/text-view-example-07.png [deleted file]
docs/content/images/text-view/text-view-example-08.png [deleted file]
docs/content/images/text-view/text-view.png [deleted file]
docs/content/main-page.h
docs/content/programming-guide/background.h
docs/content/programming-guide/image-mesh-actor.h [moved from docs/content/programming-guide/image-text-mesh-actor.h with 66% similarity]
docs/content/programming-guide/markup-processor.h [deleted file]
docs/content/programming-guide/text-input.h [deleted file]
docs/content/programming-guide/text-label.h [new file with mode: 0644]
docs/content/programming-guide/text-view.h [deleted file]
packaging/dali-toolkit-mobile.spec [new file with mode: 0644]
packaging/dali-toolkit.spec
plugins/dali-script-v8/file.list
plugins/dali-script-v8/src/actors/actor-api.cpp
plugins/dali-script-v8/src/actors/actor-api.h
plugins/dali-script-v8/src/actors/actor-wrapper.cpp
plugins/dali-script-v8/src/actors/actor-wrapper.h
plugins/dali-script-v8/src/actors/text-actor-api.cpp [deleted file]
plugins/dali-script-v8/src/dali-wrapper.cpp
plugins/dali-script-v8/src/shader-effects/shader-effect-api.cpp
plugins/dali-script-v8/src/text/font-api.cpp [deleted file]
plugins/dali-script-v8/src/text/font-api.h [deleted file]
plugins/dali-script-v8/src/text/font-wrapper.cpp [deleted file]
plugins/dali-script-v8/src/text/font-wrapper.h [deleted file]
plugins/dali-script-v8/src/toolkit/builder/builder-api.cpp

diff --git a/README b/README
index dc7b5af..de9499c 100644 (file)
--- a/README
+++ b/README
@@ -23,7 +23,10 @@ T.O.C.
 
  gbs build -A [TARGET_ARCH] --define "%enable_dali_smack_rules 1"
 
+1.3. MOBILE Profile
+-------------------
 
+ gbs build -A [TARGET_ARCH] --spec dali-toolkit-mobile.spec
 
 2. Building for Ubuntu desktop
 ==============================
index 029c12d..e7dc7cb 100644 (file)
@@ -8,10 +8,6 @@ SET(CAPI_LIB "dali-toolkit-internal")
 # List of test case sources (Only these get parsed for test cases)
 SET(TC_SOURCES
  utc-Dali-PushButton.cpp
- utc-Dali-TextView-HelperAndDebug.cpp
- utc-Dali-TextView-Processor-Types.cpp
- utc-Dali-TextView-Processor.cpp
- utc-Dali-TextView-Relayout-Utilities.cpp
 )
 
 # Append list of test harness files (Won't get parsed for test cases)
index 05ced5a..8d2734b 100644 (file)
@@ -713,7 +713,7 @@ int UtcDaliPushButtonProperties(void)
   //  Button::PROPERTY_LABEL_ACTOR
   {
     button.SetLabel( "LABEL_TEXT_CUSTOM" );
-    DALI_TEST_EQUALS( "TextView", button.GetProperty( Button::Property::LABEL_ACTOR ).GetValue( "type" ).Get< std::string >(), TEST_LOCATION );
+    DALI_TEST_EQUALS( "TextLabel", button.GetProperty( Button::Property::LABEL_ACTOR ).GetValue( "type" ).Get< std::string >(), TEST_LOCATION );
 
     Property::Map map;
     map[ "type" ] = "Actor";
diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-HelperAndDebug.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-HelperAndDebug.cpp
deleted file mode 100644 (file)
index f5e39e6..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-// Internal headers are allowed here
-#include <dali-toolkit/internal/controls/text-view/split-by-new-line-char-policies.h>
-#include <dali-toolkit/internal/controls/text-view/text-view-impl.h>
-#include <dali-toolkit/internal/controls/text-view/text-view-processor.h>
-#include <dali-toolkit/internal/controls/text-view/text-view-processor-helper-functions.h>
-#include <dali-toolkit/internal/controls/text-view/text-view-processor-dbg.h>
-
-using namespace Dali;
-using namespace Dali::Toolkit;
-using namespace Dali::Toolkit::Internal;
-
-void dali_text_view_helper_and_debug_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void dali_text_view_helper_and_debug_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-namespace
-{
-// Data structures used to create an 'experiment' in TET cases
-
-const Toolkit::Internal::TextView::LayoutParameters DEFAULT_LAYOUT_PARAMETERS;
-const Toolkit::Internal::TextView::VisualParameters DEFAULT_VISUAL_PARAMETERS;
-
-struct GetIndicesFromGlobalCharacterIndexTest
-{
-  std::string description;
-  std::string input;
-  std::size_t position;
-  std::size_t paragraphIndex;
-  std::size_t wordIndex;
-  std::size_t characterIndex;
-};
-
-/**
- * Gets the paragraph, word, and character indices for a given text and a given position and checks the results with the given indices.
- *
- * If the test fails it prints a short description and the line where this function was called.
- *
- * @param description Short description of the experiment.
- * @param input The input text.
- * @param position Global position of the character. i.e in a text with with 1000 characters, position could be any value from 0 to 1000.
- * @param resultParagraphIndex Index to the paragraph where the character is located.
- * @param resultWordIndex Index to the word within the paragraph where the character is located.
- * @param resultCharacterIndex Index to the character within the word where the character is located.
- * @param location Where this function has been called.
- *
- * @return \e true if the experiment is successful. Otherwise returns \e false.
- */
-bool TestGetIndicesFromGlobalCharacterIndex( const std::string& description,
-                                             const std::string& input,
-                                             const std::size_t position,
-                                             const std::size_t resultParagraphIndex,
-                                             const std::size_t resultWordIndex,
-                                             const std::size_t resultCharacterIndex,
-                                             const char* location )
-{
-  tet_printf( "%s", description.c_str() );
-
-  // Create natural size, layout and text-actor info for the input word.
-  Toolkit::Internal::TextView::RelayoutData relayoutData;
-  TextViewProcessor::TextLayoutInfo& inputLayout( relayoutData.mTextLayoutInfo );
-
-  MarkupProcessor::StyledTextArray inputStyledText;
-  MarkupProcessor::GetStyledTextArray( input, inputStyledText, true );
-
-  TextViewProcessor::CreateTextInfo( inputStyledText,
-                                     DEFAULT_LAYOUT_PARAMETERS,
-                                     relayoutData );
-
-  TextViewProcessor::TextInfoIndices indices;
-  TextViewProcessor::GetIndicesFromGlobalCharacterIndex( position,
-                                                         inputLayout,
-                                                         indices );
-
-  if( indices.mParagraphIndex != resultParagraphIndex )
-  {
-    tet_printf( "Fail. different paragraph index. %s", location );
-    return false;
-  }
-  if( indices.mWordIndex != resultWordIndex )
-  {
-    tet_printf( "Fail. different word index. %s", location );
-    return false;
-  }
-  if( indices.mCharacterIndex != resultCharacterIndex )
-  {
-    tet_printf( "Fail. different character index. %s", location );
-    return false;
-  }
-
-  return true;
-}
-
-//////////////////////////////////////////////////////////////////
-} // namespace
-
-
-int UtcDaliTextViewGetIndicesFromGlobalCharacterIndex(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewGetIndicesFromGlobalCharacterIndex : ");
-  struct GetIndicesFromGlobalCharacterIndexTest getIndicesFromGlobalCharacterIndexTests[] =
-  {
-    {
-      std::string( "Test position 0" ),
-      std::string( "text te<font size='30'>xt text te</font>xt text\n"
-                   "text t<font size='30'>ext טקסט טקסט te</font>xt\n"
-                   "text text text text text\n"
-                   "\n" ),
-      0,
-      0,
-      0,
-      0
-    },
-    {
-      std::string( "Test position 76. (just after the last \\n)" ),
-      std::string( "t<font size='30'>ext text te</font>xt text text\n"
-                   "text text טקסט טקסט text\n"
-                   "text text te<font size='30'>xt text</font> text\n"
-                   "\n" ),
-      76,
-      4,
-      0,
-      0
-    },
-    {
-      std::string( "Test position 73. (the last \\n)" ),
-      std::string( "text te<font size='30'>xt text text </font>text\n"
-                   "text text טק<font size='30'>סט טקס</font>ט text\n"
-                   "text text text text text\n"
-                   "\n" ),
-      75,
-      3,
-      0,
-      0
-    },
-    {
-      std::string( "Test position 35. (first hebrew character)" ),
-      std::string( "text text text text text\n"
-                   "text text טקסט טקסט text\n"
-                   "text text text text text\n"
-                   "\n" ),
-      35,
-      1,
-      4,
-      0
-    },
-    {
-      std::string( "Test position 3. (end of the first word)" ),
-      std::string( "text te<font size='30'>xt text text text\n</font>"
-                   "text text טק<font size='30'>סט טקסט </font>text\n"
-                   "text te<font size='30'>xt text text</font> text\n"
-                   "\n" ),
-      3,
-      0,
-      0,
-      3
-    },
-    {
-      std::string( "Test position 33. (end of the second word of the second paragraph)" ),
-      std::string( "text te<font size='30'>xt text text text\n</font>"
-                   "text text טק<font size='30'>סט טקסט </font>text\n"
-                   "text te<font size='30'>xt text text</font> text\n"
-                   "\n" ),
-      33,
-      1,
-      2,
-      3
-    },
-    {
-      std::string( "Test position 43. (last hebrew character)" ),
-      std::string( "text te<font size='30'>xt text text text\n</font>"
-                   "text text טק<font size='30'>סט טקסט </font>text\n"
-                   "text te<font size='30'>xt text text</font> text\n"
-                   "\n" ),
-      43,
-      1,
-      6,
-      3
-    },
-  };
-  const std::size_t numberOfTests( 7 );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const GetIndicesFromGlobalCharacterIndexTest& test = getIndicesFromGlobalCharacterIndexTests[index];
-
-    if( !TestGetIndicesFromGlobalCharacterIndex( test.description, test.input, test.position, test.paragraphIndex, test.wordIndex, test.characterIndex, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
-
-int UtcDaliTextViewDebugCouts(void)
-{
-  /////////////////////////////////////////////////////
-  // Text debug functions to not to penalize coverage
-  /////////////////////////////////////////////////////
-
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewDebugCouts : ");
-
-  Toolkit::Internal::TextView::RelayoutData relayoutData;
-
-  MarkupProcessor::StyledTextArray inputStyledText;
-  MarkupProcessor::GetStyledTextArray( std::string( "Hello world\nhello world" ), inputStyledText, true );
-
-  TextViewProcessor::CreateTextInfo( inputStyledText,
-                                     DEFAULT_LAYOUT_PARAMETERS,
-                                     relayoutData );
-
-  Actor dummy = Actor::New();
-  Toolkit::Internal::SplitByNewLineChar::Relayout( dummy,
-                                                   Toolkit::Internal::TextView::RELAYOUT_ALL,
-                                                   DEFAULT_LAYOUT_PARAMETERS,
-                                                   DEFAULT_VISUAL_PARAMETERS,
-                                                   relayoutData );
-
-  TextViewProcessor::dbgPrint( relayoutData.mTextLayoutInfo );
-
-  TextStyle textStyle;
-  TextViewProcessor::dbgPrint( textStyle );
-
-  TextViewProcessor::TextInfoIndices indices;
-  TextViewProcessor::dbgPrint( indices );
-
-  TextViewProcessor::dbgPrint( inputStyledText );
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-Processor-Types.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-Processor-Types.cpp
deleted file mode 100644 (file)
index 44e25c0..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-
-// Internal headers are allowed here
-#include <dali-toolkit/internal/controls/text-view/text-view-processor-types.h>
-
-using namespace Dali;
-using namespace Dali::Toolkit;
-using namespace Dali::Toolkit::Internal;
-
-void dali_text_view_processor_types_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void dali_text_view_processor_types_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-namespace
-{
-// Data structures used to create an 'experiment' in TET cases
-
-//////////////////////////////////////////////////////////////////
-} // namespace
-
-
-int UtcDaliTextViewDefaultConstructorDestructor_PT(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewDefaultConstructorDestructor : ");
-
-  TextViewProcessor::TextInfoIndices indices;
-  DALI_TEST_EQUALS( indices.mParagraphIndex, 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( indices.mWordIndex, 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( indices.mCharacterIndex, 0u, TEST_LOCATION );
-
-  TextViewProcessor::CharacterLayoutInfo characterLayoutInfo;
-  DALI_TEST_EQUALS( characterLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo.mBearing, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo.mPosition, Vector3::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo.mOffset, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo.mUnderlineThickness, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo.mUnderlinePosition, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_CHECK( !characterLayoutInfo.mGlyphActor );
-  DALI_TEST_EQUALS( characterLayoutInfo.mColorAlpha, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_CHECK( NULL == characterLayoutInfo.mGradientInfo );
-  DALI_TEST_CHECK( characterLayoutInfo.mIsVisible );
-  DALI_TEST_CHECK( !characterLayoutInfo.mSetText );
-  DALI_TEST_CHECK( !characterLayoutInfo.mSetStyle );
-
-  TextViewProcessor::WordLayoutInfo wordLayoutInfo;
-  DALI_TEST_EQUALS( wordLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( wordLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( wordLayoutInfo.mType, TextViewProcessor::NoSeparator, TEST_LOCATION );
-  DALI_TEST_EQUALS( wordLayoutInfo.mCharactersLayoutInfo.size(), 0u, TEST_LOCATION );
-
-  TextViewProcessor::ParagraphLayoutInfo paragraphLayoutInfo;
-  DALI_TEST_EQUALS( paragraphLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo.mLineHeightOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo.mWordsLayoutInfo.size(), 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
-
-  TextViewProcessor::TextLayoutInfo textLayoutInfo;
-  DALI_TEST_EQUALS( textLayoutInfo.mWholeTextSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo.mMaxWordWidth, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo.mParagraphsLayoutInfo.size(), 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo.mMaxItalicsOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mType, TextViewProcessor::NoSeparator, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mCharactersLayoutInfo.size(), 0u, TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliTextViewCopyConstructorOperator(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewCopyConstructorOperator : ");
-
-  TextViewProcessor::CharacterLayoutInfo characterLayoutInfo;
-  characterLayoutInfo.mSize = Vector2( 1.f, 1.f );
-  characterLayoutInfo.mBearing = 1.f;
-  characterLayoutInfo.mPosition = Vector3( 1.f, 1.f, 1.f );
-  characterLayoutInfo.mOffset = Vector2( 1.f, 1.f );
-  characterLayoutInfo.mAscender = 1.f;
-  characterLayoutInfo.mUnderlineThickness = 1.f;
-  characterLayoutInfo.mUnderlinePosition = 1.f;
-
-  characterLayoutInfo.mGlyphActor = TextActor::New( "Hello" );
-
-  TextViewProcessor::GradientInfo* info = new TextViewProcessor::GradientInfo();
-  info->mGradientColor = Vector4( 1.f, 1.f, 1.f, 1.f );
-  info->mStartPoint = Vector2( 1.f, 1.f );
-  info->mEndPoint = Vector2( 1.f, 1.f );
-
-  characterLayoutInfo.mColorAlpha = 0.f;
-  characterLayoutInfo.mGradientInfo = info;
-
-  characterLayoutInfo.mIsVisible = false;
-  characterLayoutInfo.mSetText = false;
-  characterLayoutInfo.mSetStyle = false;
-
-  TextViewProcessor::CharacterLayoutInfo characterLayoutInfo1;
-  characterLayoutInfo1 = characterLayoutInfo;
-
-  DALI_TEST_EQUALS( characterLayoutInfo1.mBearing, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mPosition, Vector3( 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mOffset, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mUnderlineThickness, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mUnderlinePosition, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_CHECK( characterLayoutInfo1.mGlyphActor );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mColorAlpha, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mGradientInfo->mGradientColor, Vector4( 1.f, 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mGradientInfo->mStartPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo1.mGradientInfo->mEndPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_CHECK( !characterLayoutInfo1.mIsVisible );
-  DALI_TEST_CHECK( !characterLayoutInfo1.mSetText );
-  DALI_TEST_CHECK( !characterLayoutInfo1.mSetStyle );
-
-  TextViewProcessor::CharacterLayoutInfo characterLayoutInfo2( characterLayoutInfo );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mBearing, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mPosition, Vector3( 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mOffset, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mUnderlineThickness, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mUnderlinePosition, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_CHECK( characterLayoutInfo2.mGlyphActor );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mColorAlpha, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mGradientInfo->mGradientColor, Vector4( 1.f, 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mGradientInfo->mStartPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( characterLayoutInfo2.mGradientInfo->mEndPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_CHECK( !characterLayoutInfo2.mIsVisible );
-  DALI_TEST_CHECK( !characterLayoutInfo2.mSetText );
-  DALI_TEST_CHECK( !characterLayoutInfo2.mSetStyle );
-
-  // Increases coverage.
-  characterLayoutInfo2.mGlyphActor.Reset();
-  characterLayoutInfo1 = characterLayoutInfo2;
-  DALI_TEST_CHECK( !characterLayoutInfo1.mGlyphActor );
-
-  TextViewProcessor::WordLayoutInfo wordLayoutInfo;
-  wordLayoutInfo.mSize = Vector2( 1.f, 1.f );
-  wordLayoutInfo.mAscender = 1.f;
-  wordLayoutInfo.mType = TextViewProcessor::ParagraphSeparator;
-
-  TextViewProcessor::WordLayoutInfo wordLayoutInfo1;
-  wordLayoutInfo1 = wordLayoutInfo;
-
-  DALI_TEST_EQUALS( wordLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( wordLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( wordLayoutInfo1.mType, TextViewProcessor::ParagraphSeparator, TEST_LOCATION );
-
-  TextViewProcessor::WordLayoutInfo wordLayoutInfo2( wordLayoutInfo );
-
-  DALI_TEST_EQUALS( wordLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( wordLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( wordLayoutInfo2.mType, TextViewProcessor::ParagraphSeparator, TEST_LOCATION );
-
-  TextViewProcessor::ParagraphLayoutInfo paragraphLayoutInfo;
-  paragraphLayoutInfo.mSize = Vector2( 1.f, 1.f );
-  paragraphLayoutInfo.mAscender = 1.f;
-  paragraphLayoutInfo.mLineHeightOffset = 1.f;
-  paragraphLayoutInfo.mNumberOfCharacters = 1u;
-
-  TextViewProcessor::ParagraphLayoutInfo paragraphLayoutInfo1;
-  paragraphLayoutInfo1 = paragraphLayoutInfo;
-
-  DALI_TEST_EQUALS( paragraphLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo1.mLineHeightOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo1.mNumberOfCharacters, 1u, TEST_LOCATION );
-
-  TextViewProcessor::ParagraphLayoutInfo paragraphLayoutInfo2( paragraphLayoutInfo );
-
-  DALI_TEST_EQUALS( paragraphLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo2.mLineHeightOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( paragraphLayoutInfo2.mNumberOfCharacters, 1u, TEST_LOCATION );
-
-  TextViewProcessor::TextLayoutInfo textLayoutInfo;
-  textLayoutInfo.mWholeTextSize = Vector2( 1.f, 1.f );
-  textLayoutInfo.mMaxWordWidth = 1.f;
-  textLayoutInfo.mNumberOfCharacters = 1u;
-  textLayoutInfo.mMaxItalicsOffset = 1.f;
-
-  TextViewProcessor::TextLayoutInfo textLayoutInfo1;
-  textLayoutInfo1 = textLayoutInfo;
-
-  DALI_TEST_EQUALS( textLayoutInfo1.mWholeTextSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo1.mMaxWordWidth, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo1.mNumberOfCharacters, 1u, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo1.mMaxItalicsOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-
-  TextViewProcessor::TextLayoutInfo textLayoutInfo2( textLayoutInfo );
-
-  DALI_TEST_EQUALS( textLayoutInfo2.mWholeTextSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo2.mMaxWordWidth, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo2.mNumberOfCharacters, 1u, TEST_LOCATION );
-  DALI_TEST_EQUALS( textLayoutInfo2.mMaxItalicsOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliTextViewEqualityOperator(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewEqualityOperator : ");
-
-  TextViewProcessor::TextInfoIndices indices;
-  TextViewProcessor::TextInfoIndices indices1( 1u, 1u, 1u );
-
-  DALI_TEST_CHECK( !( indices == indices1 ) );
-
-  indices = indices1;
-
-  DALI_TEST_CHECK( indices == indices1 );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-Processor.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-Processor.cpp
deleted file mode 100644 (file)
index 8fef857..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-// Internal headers are allowed here
-#include <dali-toolkit/internal/controls/text-view/text-processor.h>
-#include <dali-toolkit/internal/controls/text-view/text-processor-bidirectional-info.h>
-
-using namespace Dali;
-using namespace Dali::Toolkit;
-using namespace Dali::Toolkit::Internal;
-
-void dali_text_view_processor_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void dali_text_view_processor_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-namespace
-{
-// Data structures used to create an 'experiment' in TET cases
-
-//////////////////////////////////////////////////////////////////
-
-struct BeginsRightToLeftCharacterTest
-{
-  std::string description;
-  std::string input;
-  bool result;
-};
-
-bool TestBeginsRightToLeftCharacter( const std::string& description, const std::string& input, const bool result, const char* location )
-{
-  // Creates a text with the string.
-  Text text( input );
-
-  const bool ret = ( result == TextProcessor::BeginsRightToLeftCharacter( text ) );
-
-  if( !ret )
-  {
-    tet_printf( "Fail. %s", location );
-    tet_printf( "Input : %s", input.c_str() );
-  }
-
-  return ret;
-}
-
-//////////////////////////////////////////////////////////////////
-
-struct ContainsRightToLeftCharacterTest
-{
-  std::string description;
-  std::string input;
-  bool result;
-};
-
-bool TestContainsRightToLeftCharacter( const std::string& description, const std::string& input, const bool result, const char* location )
-{
-  // Creates a text with the string.
-  Text text( input );
-
-  const bool ret = ( result == TextProcessor::ContainsRightToLeftCharacter( text ) );
-
-  if( !ret )
-  {
-    tet_printf( "Fail. %s", location );
-    tet_printf( "Input : %s", input.c_str() );
-  }
-
-  return ret;
-}
-
-//////////////////////////////////////////////////////////////////
-
-struct FindNearestWordTest
-{
-  std::string description;
-  std::string input;
-  std::size_t offset;
-  std::size_t start;
-  std::size_t end;
-};
-
-bool TestFindNearestWord( const std::string& description, const std::string& input, const std::size_t offset, const std::size_t startResult, const std::size_t endResult, const char* location )
-{
-  // Creates a styled text with the markup or plain string.
-  MarkupProcessor::StyledTextArray styledText;
-  MarkupProcessor::GetStyledTextArray( input, styledText, true );
-
-  std::size_t start;
-  std::size_t end;
-  TextProcessor::FindNearestWord( styledText, offset, start, end );
-
-  const bool ret = ( start == startResult ) && ( end == endResult );
-
-  if( !ret )
-  {
-    tet_printf( "Fail. %s", location );
-    tet_printf( "Input : %s, offset %d, start %d, end %d", input.c_str(), offset, start, end );
-  }
-
-  return ret;
-}
-
-//////////////////////////////////////////////////////////////////
-
-struct SplitInParagraphsTest
-{
-  std::string inputText;
-
-  std::size_t resultNumberOfParagraphs;
-};
-
-bool TestSplitInParagraphs( const SplitInParagraphsTest& test, const char* location )
-{
-  // Creates a styled text with the markup or plain string.
-  MarkupProcessor::StyledTextArray styledText;
-  MarkupProcessor::GetStyledTextArray( test.inputText, styledText, true );
-
-  std::vector<Text> paragraphs;
-  std::vector< Vector<TextStyle*> > styles;
-
-  TextProcessor::SplitInParagraphs( styledText,
-                                    paragraphs,
-                                    styles );
-
-  if( paragraphs.size() != test.resultNumberOfParagraphs )
-  {
-    tet_printf( "Fail. %s", location );
-    tet_printf( "Different number of paragraphs, result %d, expected result %d", paragraphs.size(), test.resultNumberOfParagraphs );
-
-    return false;
-  }
-
-  return true;
-}
-
-//////////////////////////////////////////////////////////////////
-
-struct SplitInWordsTest
-{
-  std::string inputText;
-
-  std::size_t resultNumberOfSeparators;
-};
-
-bool TestSplitInWords( const SplitInWordsTest& test, const char* location )
-{
-  // Creates a text with the string.
-  Text text( test.inputText );
-
-  Vector<std::size_t> positions;
-
-  TextProcessor::SplitInWords( text,
-                               positions );
-
-  if( positions.Count() != test.resultNumberOfSeparators )
-  {
-    tet_printf( "Fail. %s", location );
-    tet_printf( "Different number of separators, result %d, expected result %d", positions.Count(), test.resultNumberOfSeparators );
-
-    return false;
-  }
-
-  return true;
-}
-
-//////////////////////////////////////////////////////////////////
-
-} // namespace
-
-
-int UtcDaliTextViewSplitInParagraphs(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewSplitInParagraphs : ");
-
-  struct SplitInParagraphsTest splitInParagraphsTest[] =
-  {
-    {
-      std::string( "Hello world\nhello world." ),
-      2
-    },
-    {
-      std::string( "Hello world\nhello world.\n\n" ),
-      4
-    }
-  };
-  const std::size_t numberOfTests( 2 );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const SplitInParagraphsTest& test = splitInParagraphsTest[index];
-
-    if( !TestSplitInParagraphs( test, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
-
-int UtcDaliTextViewSplitInWords(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewSplitInWords : ");
-
-  struct SplitInWordsTest splitInWordsTest[] =
-  {
-    {
-      std::string( "Hello world, hello word!" ),
-      3u
-    },
-    {
-      std::string( "Hello world\n" ),
-      2u
-    }
-  };
-  const std::size_t numberOfTests( 2u );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const SplitInWordsTest& test = splitInWordsTest[index];
-
-    if( !TestSplitInWords( test, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
-
-int UtcDaliTextViewBeginsRightToLeftCharacter(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewBeginsRightToLeftCharacter : ");
-
-  struct BeginsRightToLeftCharacterTest beginsRightToLeftCharacterTest[] =
-  {
-    {
-      std::string( "Test if it begins with a right to left character. Should return false." ),
-      std::string( "Hello world مرحبا العالم." ),
-      false
-    },
-    {
-      std::string( "Test if it begins with a right to left character. Should return true." ),
-      std::string( "مرحبا العالم Hola mundo." ),
-      true
-    }
-  };
-  const std::size_t numberOfTests( 2 );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const BeginsRightToLeftCharacterTest& test = beginsRightToLeftCharacterTest[index];
-
-    if( !TestBeginsRightToLeftCharacter( test.description, test.input, test.result, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
-
-int UtcDaliTextViewContainsRightToLeftCharacter(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewContainsRightToLeftCharacter : ");
-
-  struct ContainsRightToLeftCharacterTest containsRightToLeftCharacterTest[] =
-  {
-    {
-      std::string( "Test if it contains a right to left character. Should return true." ),
-      std::string( "Hello world مرحبا العالم." ),
-      true
-    },
-    {
-      std::string( "Test if it contains a right to left character. Should return true." ),
-      std::string( "مرحبا العالم Hola mundo." ),
-      true
-    },
-    {
-      std::string( "Test if it contains a right to left character. Should return false." ),
-      std::string( "Hello world." ),
-      false
-    },
-    {
-      std::string( "Test if it contains a right to left character. Should return true." ),
-      std::string( "مرحبا العالم." ),
-      true
-    }
-  };
-  const std::size_t numberOfTests( 4 );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const ContainsRightToLeftCharacterTest& test = containsRightToLeftCharacterTest[index];
-
-    if( !TestContainsRightToLeftCharacter( test.description, test.input, test.result, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
-
-int UtcDaliTextViewFindNearestWord(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewFindNearestWord : ");
-
-  struct FindNearestWordTest findNearestWordTest[] =
-  {
-    {
-      std::string( "" ),
-      std::string( "Hello world, hola mundo" ),
-      0u,
-      0u,
-      5u
-    },
-    {
-      std::string( "" ),
-      std::string( "Hello world, hola mundo" ),
-      7u,
-      6u,
-      12u
-    },
-    {
-      std::string( "" ),
-      std::string( "Hello world, hola mundo" ),
-      11u,
-      6u,
-      12u
-    },
-    {
-      std::string( "" ),
-      std::string( "Hello world, hola mundo" ),
-      23u,
-      18u,
-      23u
-    },
-    {
-      std::string( "" ),
-      std::string( "Hello world, hola mundo" ),
-      5u,
-      0u,
-      5u
-    },
-    {
-      std::string( "" ),
-      std::string( "Hello world, hola mundo  مرحبا العالم" ),
-      24u,
-      25u,
-      30u
-    }
-  };
-
-  const std::size_t numberOfTests( 6 );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const FindNearestWordTest& test = findNearestWordTest[index];
-
-    if( !TestFindNearestWord( test.description, test.input, test.offset, test.start, test.end, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-Relayout-Utilities.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextView-Relayout-Utilities.cpp
deleted file mode 100644 (file)
index 3bf0a46..0000000
+++ /dev/null
@@ -1,833 +0,0 @@
-/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-// Internal headers are allowed here
-#include <dali-toolkit/internal/controls/text-view/relayout-utilities.h>
-#include <dali-toolkit/internal/controls/text-view/text-view-processor.h>
-
-using namespace Dali;
-using namespace Dali::Toolkit;
-using namespace Dali::Toolkit::Internal;
-
-void dali_text_view_relayout_utils_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void dali_text_view_relayout_utils_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-namespace
-{
-
-const Toolkit::Internal::TextView::LayoutParameters DEFAULT_LAYOUT_PARAMETERS;
-
-// Data structures used to create an 'experiment' in TET cases
-
-
-bool TestEqual( float x, float y )
-{
-  return ( fabsf( x - y ) < Math::MACHINE_EPSILON_1000 );
-}
-
-//////////////////////////////////////////////////////////////////
-
-struct CalculateLineLayoutTest
-{
-  std::string description;
-  std::string inputParagraph;
-  float parentWidth;
-  std::size_t wordIndex;
-  std::size_t characterIndex;
-  std::size_t characterParagraphIndex;
-  TextViewRelayout::HorizontalWrapType splitPolicy;
-  float shrinkFactor;
-
-  float resultLineLength;
-  float resultMaxCharHeight;
-  float resultMaxAscender;
-};
-
-bool TestCalculateLineLayout( const CalculateLineLayoutTest& test,  const char* location )
-{
-  tet_printf( "%s", test.description.c_str() );
-
-  // Create styled text.
-  MarkupProcessor::StyledTextArray inputStyledText;
-  MarkupProcessor::GetStyledTextArray( test.inputParagraph, inputStyledText, true );
-
-  // Create styled text layout info.
-  Toolkit::Internal::TextView::RelayoutData relayoutData;
-  TextViewProcessor::CreateTextInfo( inputStyledText,
-                                     DEFAULT_LAYOUT_PARAMETERS,
-                                     relayoutData );
-
-  // Prepare input parameters and the result structure and call the function to be tested.
-
-  // Creaqte indices.
-  TextViewProcessor::TextInfoIndices indices( 0u, test.wordIndex, test.characterIndex );
-  indices.mCharacterParagraphIndex = test.characterParagraphIndex;
-
-  // Get the input paragraph.
-  TextViewProcessor::ParagraphLayoutInfo inputParagraphLayout;
-
-  if( !relayoutData.mTextLayoutInfo.mParagraphsLayoutInfo.empty() )
-  {
-    inputParagraphLayout = *relayoutData.mTextLayoutInfo.mParagraphsLayoutInfo.begin();
-  }
-
-  // Result struct.
-  TextViewRelayout::LineLayoutInfo resultLayoutInfo;
-
-  CalculateLineLayout( test.parentWidth,
-                       indices,
-                       inputParagraphLayout,
-                       test.splitPolicy,
-                       test.shrinkFactor,
-                       resultLayoutInfo  );
-
-  // Check results.
-  if( !TestEqual( test.resultLineLength, resultLayoutInfo.mLineLength ) )
-  {
-    tet_printf( "Fail. different line length %f == %f. %s", test.resultLineLength, resultLayoutInfo.mLineLength, location );
-    return false;
-  }
-
-  if( !TestEqual( test.resultMaxCharHeight, resultLayoutInfo.mMaxCharHeight ) )
-  {
-    tet_printf( "Fail. different max character height %f == %f. %s", test.resultMaxCharHeight, resultLayoutInfo.mMaxCharHeight, location );
-    return false;
-  }
-
-  if( !TestEqual( test.resultMaxAscender, resultLayoutInfo.mMaxAscender ) )
-  {
-    tet_printf( "Fail. different max ascender %f == %f. %s", test.resultMaxAscender, resultLayoutInfo.mMaxAscender, location );
-    return false;
-  }
-
-  return true;
-}
-
-//////////////////////////////////////////////////////////////////
-
-struct AlignmentOffsetTest
-{
-  Toolkit::Alignment::Type alignment;
-  float parentSize;
-  float wholeTextSize;
-
-  float resultOffset;
-};
-
-bool TestAlignmentOffset( const AlignmentOffsetTest& test, const char* location )
-{
-  float offset = 0.f;
-
-  switch( test.alignment )
-  {
-    case Toolkit::Alignment::HorizontalLeft:
-    case Toolkit::Alignment::HorizontalCenter:
-    case Toolkit::Alignment::HorizontalRight:
-    {
-      offset = TextViewRelayout::CalculateXoffset( test.alignment, test.parentSize, test.wholeTextSize );
-      break;
-    }
-    case Toolkit::Alignment::VerticalTop:
-    case Toolkit::Alignment::VerticalCenter:
-    case Toolkit::Alignment::VerticalBottom:
-    {
-      offset = TextViewRelayout::CalculateYoffset( test.alignment, test.parentSize, test.wholeTextSize );
-      break;
-    }
-  }
-
-  // Check results.
-  if( !TestEqual( test.resultOffset, offset ) )
-  {
-    tet_printf( "Fail. different offset %f == %f. %s", test.resultOffset, offset, location );
-    return false;
-  }
-
-  return true;
-}
-
-//////////////////////////////////////////////////////////////////
-
-struct JustificationOffsetTest
-{
-  Toolkit::TextView::LineJustification justification;
-  float wholeTextWidth;
-  float lineLength;
-
-  float resultOffset;
-};
-
-bool TestJustificationOffset( const JustificationOffsetTest& test, const char* location )
-{
-  float offset = TextViewRelayout::CalculateJustificationOffset( test.justification, test.wholeTextWidth, test.lineLength );
-
-  // Check results.
-  if( !TestEqual( test.resultOffset, offset ) )
-  {
-    tet_printf( "Fail. different offset %f == %f. %s", test.resultOffset, offset, location );
-    return false;
-  }
-
-  return true;
-}
-
-//////////////////////////////////////////////////////////////////
-
-struct CalculateVisibilityTest
-{
-  Vector3 position;
-  Size size;
-  Size parentSize;
-  TextViewRelayout::VisibilityTestType type;
-
-  bool resultVisible;
-};
-
-bool TestCalculateVisibility( const CalculateVisibilityTest& test, const char* location )
-{
-  if( test.resultVisible != TextViewRelayout::IsVisible( test.position, test.size, test.parentSize, test.type ) )
-  {
-    tet_printf( "Fail. different visibility. Type %d, %s", test.type, location );
-    return false;
-  }
-
-  return true;
-}
-
-//////////////////////////////////////////////////////////////////
-
-} // namespace
-
-
-int UtcDaliTextViewDefaultConstructorDestructor_RU(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewDefaultConstructorDestructor : ");
-
-  // Test RelayoutParameters defaults.
-  TextViewRelayout::RelayoutParameters relayoutParameters;
-
-  DALI_TEST_EQUALS( relayoutParameters.mPositionOffset, Vector3::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( relayoutParameters.mParagraphSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( relayoutParameters.mWordSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( relayoutParameters.mCharacterSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( relayoutParameters.mIndices.mParagraphIndex, 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( relayoutParameters.mIndices.mWordIndex, 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( relayoutParameters.mIndices.mCharacterIndex, 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( relayoutParameters.mCharacterGlobalIndex, 0u, TEST_LOCATION );
-  DALI_TEST_CHECK( !relayoutParameters.mIsFirstCharacter );
-  DALI_TEST_CHECK( !relayoutParameters.mIsFirstCharacterOfWord );
-  DALI_TEST_CHECK( !relayoutParameters.mIsNewLine );
-  DALI_TEST_CHECK( !relayoutParameters.mIsNewParagraphCharacter );
-  DALI_TEST_CHECK( !relayoutParameters.mIsWhiteSpace );
-  DALI_TEST_CHECK( !relayoutParameters.mIsVisible );
-
-  // Test FadeParameter defaults
-  TextViewRelayout::FadeParameters fadeParameters;
-
-  DALI_TEST_EQUALS( fadeParameters.mRightFadeBoundary, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mRightFadeThreshold, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mRightFadeBoundaryOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mRightFadeThresholdOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mRightAlphaCoeficients, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mLeftFadeBoundary, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mLeftFadeThreshold, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mLeftFadeBoundaryOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mLeftFadeThresholdOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mLeftAlphaCoeficients, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mTopFadeBoundary, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mTopFadeThreshold, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mTopFadeBoundaryOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mTopFadeThresholdOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mTopAlphaCoeficients, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mBottomFadeBoundary, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mBottomFadeThreshold, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mBottomFadeBoundaryOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mBottomFadeThresholdOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( fadeParameters.mBottomAlphaCoeficients, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_CHECK( !fadeParameters.mIsPartiallyVisible );
-
-  // Test EllipsizeParameters defaults
-  TextViewRelayout::EllipsizeParameters ellipsizeParameters;
-
-  DALI_TEST_EQUALS( ellipsizeParameters.mPosition, Vector3::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( ellipsizeParameters.mLineDescender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( ellipsizeParameters.mLineWidth, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( ellipsizeParameters.mEllipsizeBoundary, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( ellipsizeParameters.mFirstIndex, 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( ellipsizeParameters.mLastIndex, 0u, TEST_LOCATION );
-  DALI_TEST_CHECK( !ellipsizeParameters.mEllipsizeLine );
-  DALI_TEST_CHECK( !ellipsizeParameters.mIsLineWidthFullyVisible );
-  DALI_TEST_CHECK( !ellipsizeParameters.mIsLineHeightFullyVisible );
-  DALI_TEST_CHECK( !ellipsizeParameters.mIsNextLineFullyVisibleHeight );
-  DALI_TEST_CHECK( !ellipsizeParameters.mCreateEllipsizedTextActors );
-  DALI_TEST_CHECK( !ellipsizeParameters.mLineFits );
-  DALI_TEST_CHECK( !ellipsizeParameters.mWordFits );
-
-  // Test UnderlineInfo defaults
-  TextViewRelayout::UnderlineInfo underlineInfo;
-
-  DALI_TEST_EQUALS( underlineInfo.mMaxHeight, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( underlineInfo.mMaxThickness, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( underlineInfo.mPosition, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-
-  // Test TextUnderlineStatus defaults
-  TextViewRelayout::TextUnderlineStatus textUnderlineStatus;
-
-  DALI_TEST_CHECK( textUnderlineStatus.mUnderlineInfo.empty() );
-  DALI_TEST_EQUALS( textUnderlineStatus.mCharacterGlobalIndex, 0u, TEST_LOCATION );
-  DALI_TEST_EQUALS( textUnderlineStatus.mLineGlobalIndex, 0u, TEST_LOCATION );
-  DALI_TEST_CHECK( !textUnderlineStatus.mCurrentUnderlineStatus );
-
-  // Test LineLayoutInfo defaults
-  TextViewRelayout::LineLayoutInfo lineLayoutInfo;
-
-  DALI_TEST_EQUALS( lineLayoutInfo.mLineLength, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( lineLayoutInfo.mMaxCharHeight, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  DALI_TEST_EQUALS( lineLayoutInfo.mMaxAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliTextViewCalculateLineLayout(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewCalculateLineLayout : ");
-
-  struct CalculateLineLayoutTest calculateLineLayoutTest[] =
-  {
-    //WrapByCharacter
-    {
-      "The paragraph is wraped by character. All characters have the same size.",
-      "Hello world", // input paragraph
-      100.f,         // parent width
-      0,             // indices
-      0,
-      0,
-      TextViewRelayout::WrapByCharacter, // split policy
-      1.f,
-      // results
-      91.041672f, // line length. (only fits 8 characters 8x11.38)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-    {
-      "The paragraph is wraped by character. There are characters with different sizes.",
-      "Hello <font size='14'>world</font>", // input paragraph
-      100.f,         // parent width
-      0,              // indices
-      0,
-      0,
-      TextViewRelayout::WrapByCharacter, // split policy
-      1.f,
-      // results
-      94.835075f, // line length. (only fits 8 characters 6x11.38 + 2x13.27)
-      13.276911f, // max character height
-      11.949220f  // max ascender
-    },
-    {
-      "The paragraph is wraped by character. There are characters with different sizes. It calculates the layout for the second line.",
-      "Hello <font size='14'>wo</font>rld hell<font size='14'>o world</font>", // input paragraph
-      100.f,         // parent width
-      2,              // indices. The third character of the third word starts in a new line.
-      2,
-      8,
-      TextViewRelayout::WrapByCharacter, // split policy
-      1.f,
-      // results
-      91.041672f, // line length. (only fits 8 characters 8x11.38)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-    {
-      "The paragraph is wraped by character. There are characters with different sizes. It calculates the layout for the third line.",
-      "Hello <font size='14'>wo</font>rld hell<font size='14'>o world</font>", // input paragraph
-      100.f,         // parent width
-      4,              // indices. The fifth character of the fifth word starts in a new line.
-      4,
-      16,
-      TextViewRelayout::WrapByCharacter, // split policy
-      1.f,
-      // results
-      92.938377f, // line length. (only fits 8 characters 8x11.38)
-      13.276911f, // max character height
-      11.949220f  // max ascender
-    },
-
-    //WrapByWord
-    {
-      "The paragraph is wraped by word. All characters have the same size.",
-      "Hello world", // input paragraph
-      100.f,         // parent width
-      0,              // indices. It shouldn't use the index character so 9999999 shouldn't make it crash.
-      9999999,
-      9999999,
-      TextViewRelayout::WrapByWord, // split policy
-      1.f,
-      // results
-      56.901047f, // line length. (only fits 5 characters 5x11.38, white space is not counted)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-    {
-      "The paragraph is wraped by word. There are characters with different sizes.",
-      "Hell<font size='14'>o</font> world", // input paragraph
-      100.f,         // parent width
-      0,              // indices.
-      0,
-      0,
-      TextViewRelayout::WrapByWord, // split policy
-      1.f,
-      // results
-      58.797747f, // line length. (only fits 5 characters 4x11.38 + 13.276911, white space is not counted)
-      13.276911f, // max character height
-      11.949220f  // max ascender
-    },
-    {
-      "The paragraph is wraped by word. There are characters with different sizes. It calculates the layout for the second line.",
-      "Hello <font size='14'>wo</font>rld <font size='16'>hello world</font>", // input paragraph
-      100.f,         // parent width
-      2,              // indices. The third word starts in a new line.
-      0,
-      6,
-      TextViewRelayout::WrapByWord, // split policy
-      1.f,
-      // results
-      60.694449f, // line length. (only fits 5 characters 2x13.276911 + 3x11.38)
-      13.276911f, // max character height
-      11.949220f  // max ascender
-    },
-    {
-      "The paragraph is wraped by word. The word doen't fit.",
-      "Hello world", // input paragraph
-      40.f,          // parent width
-      0,              // indices. The third word starts in a new line.
-      0,
-      0,
-      TextViewRelayout::WrapByWord, // split policy
-      1.f,
-      // results
-      0.f,        // line length. (The word doesn't fit)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-
-    //WrapByWordAndSplit
-    {
-      "The paragraph is wraped by word and by character. All characters have the same size. There is not a long word.",
-      "Hello world hello world", // input paragraph
-      100.f,         // parent width
-      0,              // indices.
-      0,
-      0,
-      TextViewRelayout::WrapByWordAndSplit, // split policy
-      1.f,
-      // results
-      56.901047f, // line length. (only fits 5 characters 5x11.38, white space is not counted)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-    {
-      "The paragraph is wraped by word and by character. All characters have the same size. There is a long word.",
-      "Helloooooooo world", // input paragraph
-      100.f,         // parent width
-      0,              // indices.
-      0,
-      0,
-      TextViewRelayout::WrapByWordAndSplit, // split policy
-      1.f,
-      // results
-      91.041672f, // line length. (only fits 8 characters 8x11.38)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-    {
-      "The paragraph is wraped by word and by character. There are characters with different sizes. There is a long word. It calculates the layout for the second line.",
-      "Helloooooooo <font size='14'>world</font>", // input paragraph
-      100.f,         // parent width
-      0,              // indices.
-      8,
-      8,
-      TextViewRelayout::WrapByWordAndSplit, // split policy
-      1.f,
-      // results
-      45.520836f, // line length. (only fits 8 characters 8x11.38)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-    {
-      "The paragraph is wraped by word and by character. There are characters with different sizes. There is a shrink factor.",
-      "Helloooooooo<font size='14'> world</font>", // input paragraph
-      100.f,         // parent width
-      0,              // indices.
-      8,
-      8,
-      TextViewRelayout::WrapByWordAndSplit, // split policy
-      0.7f,
-      // results
-      95.593755f, // line length. (only fits 12 characters 8x11.38)
-      7.9661463f, // max character height
-      7.169531f  // max ascender
-    },
-
-    //WrapByParagraphCharacterAndSplit
-    {
-      "The paragraph is wraped by end of paragraph and by character. All characters have the same size.",
-      "Hello world", // input paragraph
-      100.f,         // parent width
-      0,              // indices
-      0,
-      0,
-      TextViewRelayout::WrapByParagraphCharacterAndSplit, // split policy
-      1.f,
-      // results
-      91.041672f, // line length. (only fits 8 characters 8x11.38)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-    {
-      "The paragraph fits in the width.",
-      "Hello", // input paragraph
-      100.f,         // parent width
-      0,             // indices
-      0,
-      0,
-      TextViewRelayout::WrapByParagraphCharacterAndSplit, // split policy
-      1.f,
-      // results
-      56.901047f, // line length. (only fits 5 characters 5x11.38)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-    {
-      "The paragraph is wraped by end of paragraph and by character. All characters have the same size. It calculates the layout for the second line.",
-      "Hello world, hello world", // input paragraph
-      100.f,         // parent width
-      2,             // indices
-      2,
-      8,
-      TextViewRelayout::WrapByParagraphCharacterAndSplit, // split policy
-      1.f,
-      // results
-      91.041672f, // line length. (only fits 8 characters 8x11.38)
-      11.380209f, // max character height
-      10.242188f  // max ascender
-    },
-  };
-  const std::size_t numberOfTests( 15 );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const CalculateLineLayoutTest& test = calculateLineLayoutTest[index];
-
-    if( !TestCalculateLineLayout( test, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
-
-int UtcDaliTextViewCalculateAlignmentOffsets(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewCalculateAlignmentOffsets : ");
-
-  struct AlignmentOffsetTest alignmentOffsetTest[] =
-  {
-    {
-      Toolkit::Alignment::HorizontalLeft,
-      100.f,
-      75.f,
-      0.f
-    },
-    {
-      Toolkit::Alignment::HorizontalCenter,
-      100.f,
-      75.f,
-      12.5f
-    },
-    {
-      Toolkit::Alignment::HorizontalRight,
-      100.f,
-      75.f,
-      25.f
-    },
-    {
-      Toolkit::Alignment::VerticalTop,
-      100.f,
-      75.f,
-      0.f
-    },
-    {
-      Toolkit::Alignment::VerticalCenter,
-      100.f,
-      75.f,
-      12.5f
-    },
-    {
-      Toolkit::Alignment::VerticalBottom,
-      100.f,
-      75.f,
-      25.f
-    }
-  };
-  const std::size_t numberOfTests( 6 );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const AlignmentOffsetTest& test = alignmentOffsetTest[index];
-
-    if( !TestAlignmentOffset( test, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
-
-int UtcDaliTextViewCalculateJustificationOffsets(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewCalculateJustificationOffsets : ");
-
-  struct JustificationOffsetTest justificationOffsetTest[] =
-  {
-    {
-      Toolkit::TextView::Left,
-      100.f,
-      75.f,
-      0.f
-    },
-    {
-      Toolkit::TextView::Justified,
-      100.f,
-      75.f,
-      0.f
-    },
-    {
-      Toolkit::TextView::Center,
-      100.f,
-      150.f,
-      -25.f
-    },
-    {
-      Toolkit::TextView::Right,
-      100.f,
-      75.f,
-      25.f
-    },
-  };
-  const std::size_t numberOfTests( 4 );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const JustificationOffsetTest& test = justificationOffsetTest[index];
-
-    if( !TestJustificationOffset( test, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
-
-
-int UtcDaliTextViewCalculateVisibility(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewCalculateVisibility : ");
-
-  struct CalculateVisibilityTest calculateVisibilityTest[] =
-  {
-    {
-      Vector3( 0.f, 10.f, 0.f ),
-      Size( 10.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::FULLY_VISIBLE,
-      true
-    },
-    {
-      Vector3( 10.f, 10.f, 0.f ),
-      Size( 10.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::FULLY_VISIBLE,
-      true
-    },
-    {
-      Vector3( 0.f, 10.f, 0.f ),
-      Size( 150.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::FULLY_VISIBLE,
-      false
-    },
-    {
-      Vector3( 0.f, 10.f, 0.f ),
-      Size( 10.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::FULLY_VISIBLE_WIDTH,
-      true
-    },
-    {
-      Vector3( 95.f, 10.f, 0.f ),
-      Size( 10.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::FULLY_VISIBLE_WIDTH,
-      false
-    },
-    {
-      Vector3( 0.f, 10.f, 0.f ),
-      Size( 10.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::FULLY_VISIBLE_HEIGHT,
-      true
-    },
-    {
-      Vector3( 0.f, 0.f, 0.f ),
-      Size( 10.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::FULLY_VISIBLE_HEIGHT,
-      false
-    },
-    {
-      Vector3( -10.f, 10.f, 0.f ),
-      Size( 150.f, 150.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::PARTIALLY_VISIBLE,
-      true
-    },
-    {
-      Vector3( -100.f, -100.f, 0.f ),
-      Size( 10.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::PARTIALLY_VISIBLE,
-      false
-    },
-    {
-      Vector3( -10.f, 10.f, 0.f ),
-      Size( 50.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::PARTIALLY_VISIBLE_WIDTH,
-      true
-    },
-    {
-      Vector3( 110.f, 10.f, 0.f ),
-      Size( 10.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::PARTIALLY_VISIBLE_WIDTH,
-      false
-    },
-    {
-      Vector3( 0.f, 20.f, 0.f ),
-      Size( 10.f, 50.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::PARTIALLY_VISIBLE_HEIGHT,
-      true
-    },
-    {
-      Vector3( 0.f, -10.f, 0.f ),
-      Size( 10.f, 10.f ),
-      Size( 100.f, 100.f ),
-      TextViewRelayout::PARTIALLY_VISIBLE_HEIGHT,
-      false
-    },
-  };
-  const std::size_t numberOfTests( 13 );
-
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const CalculateVisibilityTest& test = calculateVisibilityTest[index];
-
-    if( !TestCalculateVisibility( test, TEST_LOCATION ) )
-    {
-      tet_result( TET_FAIL );
-    }
-  }
-
-  tet_result( TET_PASS );
-  END_TEST;
-}
-
-int UtcDaliTextViewMiscelaneousAsserts(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliTextViewMiscelaneousAsserts : ");
-
-  float offset = 0.f;
-
-  bool assert1 = false;
-  bool assert2 = false;
-  try
-  {
-    offset = Toolkit::Internal::TextViewRelayout::CalculateXoffset( Toolkit::Alignment::VerticalTop, 100.f, 50.f );
-  }
-  catch( Dali::DaliException& e )
-  {
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_EQUALS( e.condition, "!\"TextViewRelayout::CalculateXoffset: Wrong horizontal text alignment. Did you set a vertical one?\"", TEST_LOCATION );
-    assert1 = true;
-  }
-  catch( ... )
-  {
-    tet_result( TET_FAIL );
-  }
-  DALI_TEST_EQUALS( offset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-
-  try
-  {
-    offset = Toolkit::Internal::TextViewRelayout::CalculateYoffset( Toolkit::Alignment::HorizontalRight, 100.f, 50.f );
-  }
-  catch( Dali::DaliException& e )
-  {
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_EQUALS( e.condition, "!\"TextViewRelayout::CalculateXoffset: Wrong vertical text alignment. Did you set an horizontal one?\"", TEST_LOCATION );
-    assert2 = true;
-  }
-  catch( ... )
-  {
-    tet_result( TET_FAIL );
-  }
-  DALI_TEST_EQUALS( offset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
-
-  DALI_TEST_CHECK( assert1 && assert2 );
-
-  END_TEST;
-}
index a3f7172..5c19f09 100644 (file)
@@ -51,7 +51,6 @@ SET(TC_SOURCES
    utc-Dali-ItemLayout.cpp
    utc-Dali-ItemView.cpp
    utc-Dali-KeyboardFocusManager.cpp
-   utc-Dali-MarkupProcessor.cpp
    utc-Dali-MaskEffect.cpp
    utc-Dali-NinePatchMaskEffect.cpp
    utc-Dali-Popup.cpp
index 4217d55..88315d4 100644 (file)
@@ -296,41 +296,6 @@ void DALI_TEST_EQUALS( const std::string &str1, const char* str2, const char* lo
 void DALI_TEST_EQUALS( const char* str1, const std::string &str2, const char* location);
 
 /**
- * Test whether two UTF32 strings are equal.
- * @param[in] str1 The first string
- * @param[in] str2 The second string
- * @param[in] location The TEST_LOCATION macro should be used here
- */
-template<>
-inline void DALI_TEST_EQUALS<const Integration::TextArray&>( const Integration::TextArray& str1, const Integration::TextArray& str2, const char* location)
-{
-  if( !std::equal( str1.Begin(), str1.End(), str2.Begin() ) )
-  {
-    fprintf(stderr, "%s, checking '", location);
-
-    for( unsigned int i = 0; i < str1.Count(); ++i )
-    {
-      fprintf(stderr, "%c", str1[i]);
-    }
-
-    fprintf(stderr, "' == '");
-
-    for( unsigned int i = 0; i < str2.Count(); ++i )
-    {
-      fprintf(stderr, "%c", str2[i]);
-    }
-
-    fprintf(stderr, "'\n");
-
-    tet_result(TET_FAIL);
-  }
-  else
-  {
-    tet_result(TET_PASS);
-  }
-}
-
-/**
  * Test whether one unsigned integer value is greater than another.
  * Test succeeds if value1 > value2
  * @param[in] value1 The first value
index e2b419e..3557c0d 100644 (file)
@@ -110,8 +110,7 @@ DummyControlImplOverride::~DummyControlImplOverride() { }
 
 
 void DummyControlImplOverride::OnInitialize() { initializeCalled = true; }
-void DummyControlImplOverride::OnThemeChange(StyleManager change) { themeChangeCalled = true;}
-void DummyControlImplOverride::OnFontChange(bool defaultFontChange, bool defaultFontSizeChange) { fontChangeCalled = true; }
+void DummyControlImplOverride::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange change ) { themeChangeCalled = change.themeChange; fontChangeCalled = change.defaultFontSizeChange; }
 void DummyControlImplOverride::OnPinch(const PinchGesture& pinch) { pinchCalled = true; }
 void DummyControlImplOverride::OnPan(const PanGesture& pan) { panCalled = true; }
 void DummyControlImplOverride::OnTap(const TapGesture& tap) { tapCalled = true; }
index d923ac1..473a01d 100644 (file)
@@ -102,8 +102,7 @@ private:
 private: // From Internal::Control
 
   virtual void OnInitialize();
-  virtual void OnThemeChange( StyleManager styleManager );
-  virtual void OnFontChange(bool defaultFontChange, bool defaultFontSizeChange);
+  virtual void OnStyleChange( Toolkit::StyleManager styleManager, StyleChange change );
   virtual void OnPinch(const PinchGesture& pinch);
   virtual void OnPan(const PanGesture& pan);
   virtual void OnTap(const TapGesture& tap);
index 5ab4b7d..3d4d1d5 100644 (file)
@@ -80,23 +80,13 @@ void TestPlatformAbstraction::GetClosestImageSize( Integration::ResourcePointer
   mTrace.PushCall("GetClosestImageSize", "");
 }
 
-
 /**
  * @copydoc PlatformAbstraction::LoadResource()
  */
 void TestPlatformAbstraction::LoadResource(const Integration::ResourceRequest& request)
 {
   std::ostringstream out;
-  out << "Type:";
-  if( request.GetType()->id == Integration::ResourceText )
-  {
-    out << "Text";
-  }
-  else
-  {
-    out << request.GetType()->id;
-  }
-  out << ", Path: " << request.GetPath() << std::endl ;
+  out << "Type:" << request.GetType()->id << ", Path: " << request.GetPath() << std::endl;
 
   mTrace.PushCall("LoadResource", out.str());
   if(mRequest != NULL)
@@ -170,145 +160,20 @@ bool TestPlatformAbstraction::IsLoading()
 }
 
 /**
- * @copydoc PlatformAbstraction::GetDefaultFontFamily()
+ * @copydoc PlatformAbstraction::GetDefaultFontDescription()
  */
-const std::string& TestPlatformAbstraction::GetDefaultFontFamily() const
+void TestPlatformAbstraction::GetDefaultFontDescription( std::string& family, std::string& style ) const
 {
-  mTrace.PushCall("GetDefaultFontFamily", "");
-  return mGetDefaultFontFamilyResult;
+  // TODO
 }
 
 /**
  * @copydoc PlatformAbstraction::GetDefaultFontSize()
  */
-float TestPlatformAbstraction::GetDefaultFontSize() const
-{
-  mTrace.PushCall("GetDefaultFontSize", "");
-  return mGetDefaultFontSizeResult;
-}
-
-PixelSize TestPlatformAbstraction::GetFontLineHeightFromCapsHeight(const std::string& fontFamily, const std::string& fontStyle, CapsHeight capsHeight) const
-{
-  mTrace.PushCall("GetFontLineHeightFromCapsHeight", "");
-  // LineHeight will be bigger than CapsHeight, so return capsHeight + 1
-  return PixelSize(capsHeight + 1);
-}
-
-/**
- * @copydoc PlatformAbstraction::GetGlyphData()
- */
-
-Integration::GlyphSet* TestPlatformAbstraction::GetGlyphData ( const Integration::TextResourceType& textRequest,
-                                                               const std::string& fontFamily,
-                                                               bool getBitmap) const
-{
-  if( getBitmap )
-  {
-    mTrace.PushCall("GetGlyphData", "getBitmap:true");
-  }
-  else
-  {
-    mTrace.PushCall("GetGlyphData", "getBitmap:false");
-  }
-
-  // It creates fake metrics for the received characters.
-
-  Integration::GlyphSet* set = new Dali::Integration::GlyphSet();
-  Integration::BitmapPtr bitmapData;
-
-  std::set<uint32_t> characters;
-
-  for( Integration::TextResourceType::CharacterList::const_iterator it = textRequest.mCharacterList.begin(), endIt = textRequest.mCharacterList.end(); it != endIt; ++it )
-  {
-    if( characters.find( it->character ) == characters.end() )
-    {
-      characters.insert( it->character );
-      Integration::GlyphMetrics character = {it->character, Integration::GlyphMetrics::LOW_QUALITY,  10.0f,  10.0f, 9.0f, 1.0f, 10.0f, it->xPosition, it->yPosition };
-
-      if( getBitmap )
-      {
-        bitmapData = Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::DISCARD);
-        bitmapData->GetPackedPixelsProfile()->ReserveBuffer(Pixel::A8, 64, 64);
-        PixelBuffer* pixelBuffer = bitmapData->GetBuffer();
-        memset( pixelBuffer, it->character, 64*64 );
-      }
-
-      set->AddCharacter(bitmapData, character);
-    }
-  }
-
-  set->mLineHeight = 10.0f;
-  set->mAscender = 9.0f;
-  set->mUnitsPerEM = 2048.0f/64.0f;
-  set->SetAtlasResourceId( textRequest.mTextureAtlasId );
-  set->mFontHash = textRequest.mFontHash;
-
-  return set;
-}
-
-/**
- * @copydoc PlatformAbstraction::GetCachedGlyphData()
- */
-
-Integration::GlyphSet* TestPlatformAbstraction::GetCachedGlyphData( const Integration::TextResourceType& textRequest,
-                                                                    const std::string& fontFamily ) const
-{
-  mTrace.PushCall("GetCachedGlyphData", "");
-
-  // It creates fake metrics and bitmap for received numeric characters '0' through '9'.
-  Integration::GlyphSet* set = new Dali::Integration::GlyphSet();
-  Integration::BitmapPtr bitmapData;
-
-  std::set<uint32_t> characters;
-
-  for( Integration::TextResourceType::CharacterList::const_iterator it = textRequest.mCharacterList.begin(), endIt = textRequest.mCharacterList.end(); it != endIt; ++it )
-  {
-    if( it->character >= '0' && it->character <= '9' && characters.find( it->character ) == characters.end() )
-    {
-      characters.insert( it->character );
-      Integration::GlyphMetrics character = {it->character, Integration::GlyphMetrics::HIGH_QUALITY,  10.0f,  10.0f, 9.0f, 1.0f, 10.0f, it->xPosition, it->yPosition };
-
-      bitmapData = Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::DISCARD);
-      bitmapData->GetPackedPixelsProfile()->ReserveBuffer(Pixel::A8, 64, 64);
-      PixelBuffer* pixelBuffer = bitmapData->GetBuffer();
-      memset( pixelBuffer, it->character, 64*64 );
-      set->AddCharacter(bitmapData, character);
-    }
-  }
-
-  set->mLineHeight = 10.0f;
-  set->mAscender = 9.0f;
-  set->mUnitsPerEM = 2048.0f/64.0f;
-  set->SetAtlasResourceId( textRequest.mTextureAtlasId );
-  set->mFontHash = textRequest.mFontHash;
-
-  return set;
-}
-
-
-/**
- * @copydoc PlatformAbstraction::GetGlobalMetrics()
- */
-void TestPlatformAbstraction::GetGlobalMetrics( const std::string& fontFamily,
-                                                const std::string& fontStyle,
-                                                Integration::GlobalMetrics& globalMetrics ) const
+int TestPlatformAbstraction::GetDefaultFontSize() const
 {
-  globalMetrics.lineHeight = 10.0f;
-  globalMetrics.ascender = 9.0f;
-  globalMetrics.unitsPerEM = 2048.0f/64.0f;
-  globalMetrics.underlineThickness = 2.f;
-  globalMetrics.underlinePosition = 1.f;
-}
-
-/**
- * @copydoc PlatformAbstraction::GetFontPath()
- */
-std::string TestPlatformAbstraction::GetFontPath(const std::string& family, bool bold, bool italic) const
-{
-  mTrace.PushCall("GetFontPath", "");
-  return mGetFontPathResult;
-
-  // Do nothing with arguments
+  // TODO
+  return int();
 }
 
 /**
@@ -320,42 +185,6 @@ void TestPlatformAbstraction::SetDpi (unsigned int dpiHorizontal, unsigned int d
 }
 
 /**
- * @copydoc PlatformAbstraction::GetFontFamilyForChars()
- */
-const std::string& TestPlatformAbstraction::GetFontFamilyForChars(const Integration::TextArray& charsRequested) const
-{
-  mTrace.PushCall("GetFontFamilyForChars", "");
-  return mGetDefaultFontFamilyResult;
-}
-
-/**
- * @copydoc PlatformAbstraction::AllGlyphsSupported()
- */
-bool TestPlatformAbstraction::AllGlyphsSupported(const std::string& name, const std::string& fontStyle, const Integration::TextArray& text) const
-{
-  mTrace.PushCall("AllGlyphsSupported", "");
-  return true;
-}
-
-/**
- * @copydoc PlatformAbstraction::ValidateFontFamilyName()
- */
-bool TestPlatformAbstraction::ValidateFontFamilyName(const std::string& fontFamily, const std::string& fontStyle, bool& isDefaultSystemFont, std::string& closestMatch, std::string& closestStyleMatch) const
-{
-  mTrace.PushCall("ValidateFontFamilyName", "");
-  return true;
-}
-
-/**
- * @copydoc PlatformAbstraction::GetFontList()
- */
-void TestPlatformAbstraction::GetFontList( PlatformAbstraction::FontListMode mode, std::vector<std::string>& fonstList ) const
-{
-  mFontListMode = mode;
-  mTrace.PushCall("ValidateGetFontList", "");
-}
-
-/**
  * @copydoc PlatformAbstraction::LoadFile()
  */
 bool TestPlatformAbstraction::LoadFile( const std::string& filename, std::vector< unsigned char >& buffer ) const
@@ -397,102 +226,21 @@ void TestPlatformAbstraction::JoinLoaderThreads()
   mTrace.PushCall("JoinLoaderThreads", "");
 }
 
-void TestPlatformAbstraction::UpdateDefaultsFromDevice()
-{
-  mTrace.PushCall("UpdateDefaultsFromDevice", "");
-  mGetDefaultFontFamilyResult+=1.0f;
-}
-
 Integration::DynamicsFactory* TestPlatformAbstraction::GetDynamicsFactory()
 {
   mTrace.PushCall("GetDynamicsFactory", "");
   return NULL;
 }
 
-bool TestPlatformAbstraction::ReadGlobalMetricsFromCache( const std::string& fontFamily,
-                                                          const std::string& fontStyle,
-                                                          Integration::GlobalMetrics& globalMetrics )
-{
-  mTrace.PushCall("ReadGlobalMetricsFromCacheFile", "");
-  globalMetrics = mReadGlobalMetrics; // Want to copy contents...
-  return mReadGlobalMetricsResult; // Default false (will be set to true on subsequent write)
-}
-
-void TestPlatformAbstraction::WriteGlobalMetricsToCache( const std::string& fontFamily,
-                                                         const std::string& fontStyle,
-                                                         const Integration::GlobalMetrics& globalMetrics )
-{
-  // Copy so next read uses written values. TODO: Could add method
-  // to turn this behaviour off for more extensive testing.
-  mReadGlobalMetrics = globalMetrics;
-  mReadGlobalMetricsResult = true;
-
-  mTrace.PushCall("WriteGlobalMetricsToCacheFile", "");
-}
-
-bool TestPlatformAbstraction::ReadMetricsFromCache( const std::string& fontFamily,
-                                                    const std::string& fontStyle,
-                                                    std::vector<Integration::GlyphMetrics>& glyphMetricsContainer )
-{
-  mTrace.PushCall("ReadMetricsFromCacheFile", "");
-  glyphMetricsContainer = mReadMetrics;
-  return mReadMetricsResult; // Default false (will be set to true on subsequent write)
-}
-
-void TestPlatformAbstraction::WriteMetricsToCache( const std::string& fontFamily,
-                                                   const std::string& fontStyle,
-                                                   const Integration::GlyphSet& glyphSet )
-{
-  // Copy so next read uses written values. TODO: Could add method
-  // to turn this behaviour off for more extensive testing.
-  const Integration::GlyphSet::CharacterList& charList =  glyphSet.GetCharacterList();
-  mReadMetrics.clear();
-  for(std::size_t i=0, end=charList.size(); i<end; ++i)
-  {
-    mReadMetrics.push_back(charList[i].second);
-  }
-  mReadMetricsResult = true;
-
-  mTrace.PushCall("WriteMetricsToCacheFile", "");
-}
-
-
-void TestPlatformAbstraction::GetFileNamesFromDirectory( const std::string& directoryName,
-                                                         std::vector<std::string>& fileNames )
-{
-  fileNames.push_back( std::string( "u1f004.png" ) );
-  fileNames.push_back( std::string( "u1f0cf.png" ) );
-  fileNames.push_back( std::string( "u1f170.png" ) );
-  fileNames.push_back( std::string( "u1f601.png" ) );
-}
-
-
-Integration::BitmapPtr TestPlatformAbstraction::GetGlyphImage( const std::string& fontFamily, const std::string& fontStyle, float fontSize, uint32_t character ) const
-{
-  Integration::BitmapPtr image = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::DISCARD );
-  image->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, 1, 1 );
-
-  mTrace.PushCall("GetGlyphImage", "");
-
-  return image;
-}
-
-
 /** Call this every test */
 void TestPlatformAbstraction::Initialize()
 {
   mTrace.Reset();
   mTrace.Enable(true);
   memset(&mResources, 0, sizeof(Resources));
-  memset(&mReadGlobalMetrics, 0, sizeof(Integration::GlobalMetrics));
   mSeconds=0;
   mMicroSeconds=0;
   mIsLoadingResult=false;
-  mGetDefaultFontFamilyResult = "HelveticaNeue";
-  mGetDefaultFontSizeResult=12.0f;
-  mGetFontPathResult="helvetica-12";
-  mReadMetricsResult=false;
-  mReadGlobalMetricsResult=false;
 
   if(mRequest)
   {
@@ -517,24 +265,9 @@ bool TestPlatformAbstraction::WasCalled(TestFuncEnum func)
     case CancelLoadFunc:                      return mTrace.FindMethod("CancelLoad");
     case GetResourcesFunc:                    return mTrace.FindMethod("GetResources");
     case IsLoadingFunc:                       return mTrace.FindMethod("IsLoading");
-    case GetDefaultFontFamilyFunc:            return mTrace.FindMethod("GetDefaultFontFamily");
-    case GetDefaultFontSizeFunc:              return mTrace.FindMethod("GetDefaultFontSize");
-    case GetFontLineHeightFromCapsHeightFunc: return mTrace.FindMethod("GetFontLineHeightFromCapsHeight");
-    case GetGlyphDataFunc:                    return mTrace.FindMethod("GetGlyphData");
-    case GetCachedGlyphDataFunc:              return mTrace.FindMethod("GetCachedGlyphData");
-    case GetFontPathFunc:                     return mTrace.FindMethod("GetFontPath");
     case SetDpiFunc:                          return mTrace.FindMethod("SetDpi");
     case JoinLoaderThreadsFunc:               return mTrace.FindMethod("JoinLoaderThreads");
-    case GetFontFamilyForCharsFunc:           return mTrace.FindMethod("GetFontFamilyForChars");
-    case AllGlyphsSupportedFunc:              return mTrace.FindMethod("AllGlyphsSupported");
-    case ValidateFontFamilyNameFunc:          return mTrace.FindMethod("ValidateFontFamilyName");
-    case UpdateDefaultsFromDeviceFunc:        return mTrace.FindMethod("UpdateDefaultsFromDevice");
     case GetDynamicsFactoryFunc:              return mTrace.FindMethod("GetDynamicsFactory");
-    case ValidateGetFontListFunc:             return mTrace.FindMethod("ValidateGetFontList");
-    case ReadGlobalMetricsFromCacheFileFunc:  return mTrace.FindMethod("ReadGlobalMetricsFromCacheFile");
-    case WriteGlobalMetricsToCacheFileFunc:   return mTrace.FindMethod("WriteGlobalMetricsToCacheFile");
-    case ReadMetricsFromCacheFileFunc:        return mTrace.FindMethod("ReadMetricsFromCacheFile");
-    case WriteMetricsToCacheFileFunc:         return mTrace.FindMethod("WriteMetricsToCacheFile");
   }
   return false;
 }
@@ -559,21 +292,6 @@ void TestPlatformAbstraction::SetIsLoadingResult(bool result)
   mIsLoadingResult = result;
 }
 
-void TestPlatformAbstraction::SetGetDefaultFontFamilyResult(std::string result)
-{
-  mGetDefaultFontFamilyResult = result;
-}
-
-void TestPlatformAbstraction::SetGetDefaultFontSizeResult(float result)
-{
-  mGetDefaultFontSizeResult = result;
-}
-
-void TestPlatformAbstraction::SetGetFontPathResult(std::string& result)
-{
-  mGetFontPathResult = result;
-}
-
 void TestPlatformAbstraction::ClearReadyResources()
 {
   memset(&mResources, 0, sizeof(Resources));
@@ -643,21 +361,4 @@ void TestPlatformAbstraction::SetSaveFileResult( bool result )
   mSaveFileResult = result;
 }
 
-Integration::PlatformAbstraction::FontListMode TestPlatformAbstraction::GetLastFontListMode( )
-{
-  return mFontListMode;
-}
-
-void TestPlatformAbstraction::SetReadGlobalMetricsResult( bool success, Integration::GlobalMetrics& globalMetrics )
-{
-  mReadGlobalMetricsResult = success;
-  mReadGlobalMetrics = globalMetrics;
-}
-
-void TestPlatformAbstraction::SetReadMetricsResult( bool success, std::vector<Integration::GlyphMetrics>& glyphMetricsContainer )
-{
-  mReadMetricsResult = success;
-  mReadMetrics = glyphMetricsContainer; // copy
-}
-
 } // namespace Dali
index 41b06cd..a4ec8d3 100644 (file)
@@ -26,7 +26,6 @@
 #include <dali/public-api/common/set-wrapper.h>
 #include <dali/integration-api/platform-abstraction.h>
 
-#include <dali/integration-api/glyph-set.h>
 #include "test-trace-call-stack.h"
 
 
@@ -137,71 +136,19 @@ public:
   virtual bool IsLoading();
 
   /**
-   * @copydoc PlatformAbstraction::GetDefaultFontFamily()
+   * @copydoc PlatformAbstraction::GetDefaultFontDescription()
    */
-  virtual const std::string& GetDefaultFontFamily() const;
+  virtual void GetDefaultFontDescription( std::string& family, std::string& style ) const;
 
   /**
    * @copydoc PlatformAbstraction::GetDefaultFontSize()
    */
-  virtual float GetDefaultFontSize() const;
-
-  /**
-   * @copydoc PlatformAbstraction::GetFontLineHeightFromCapsHeight()
-   */
-  virtual Dali::PixelSize GetFontLineHeightFromCapsHeight(const std::string& fontFamily, const std::string& fontStyle, CapsHeight capsHeight) const;
-
-  /**
-   * @copydoc PlatformAbstraction::GetGlyphData()
-   */
-  virtual Integration::GlyphSet* GetGlyphData ( const Integration::TextResourceType& textRequest,
-                                                const std::string& fontFamily,
-                                                bool getBitmap) const;
-
-  /**
-   * @copydoc PlatformAbstraction::GetCachedGlyphData()
-   */
-  virtual Integration::GlyphSet* GetCachedGlyphData( const Integration::TextResourceType& textRequest,
-                                                     const std::string& fontFamily ) const;
-
-
-  /**
-   * @copydoc PlatformAbstraction::GetGlobalMetrics()
-   */
-  virtual void GetGlobalMetrics( const std::string& fontFamily,
-                                 const std::string& fontStyle,
-                                 Integration::GlobalMetrics& globalMetrics ) const;
-
-  /**
-   * @copydoc PlatformAbstraction::GetFontPath()
-   */
-  virtual std::string GetFontPath(const std::string& family, bool bold, bool italic) const;
+  virtual int GetDefaultFontSize() const;
 
   /**
    * @copydoc PlatformAbstraction::SetDpi()
    */
   virtual void SetDpi (unsigned int dpiHorizontal, unsigned int dpiVertical);
-
-  /**
-   * @copydoc PlatformAbstraction::GetFontFamilyForChars()
-   */
-  virtual const std::string& GetFontFamilyForChars(const Integration::TextArray& charsRequested) const;
-
-  /**
-   * @copydoc PlatformAbstraction::AllGlyphsSupported()
-   */
-  virtual bool AllGlyphsSupported(const std::string& name, const std::string& fontStyle, const Integration::TextArray& text) const;
-
-  /**
-   * @copydoc PlatformAbstraction::ValidateFontFamilyName()
-   */
-  virtual bool ValidateFontFamilyName(const std::string& fontFamily, const std::string& fontStyle, bool& isDefaultSystemFont, std::string& closestMatch, std::string& closestStyleMatch) const;
-
-  /**
-   * @copydoc PlatformAbstraction::GetFontList()
-   */
-  virtual void GetFontList( PlatformAbstraction::FontListMode mode, std::vector<std::string>& fontList ) const;
-
   /**
    * @copydoc PlatformAbstraction::LoadFile()
    */
@@ -219,31 +166,8 @@ public:
 
   virtual void JoinLoaderThreads();
 
-  virtual void UpdateDefaultsFromDevice();
-
   virtual Integration::DynamicsFactory* GetDynamicsFactory();
 
-  virtual bool ReadGlobalMetricsFromCache( const std::string& fontFamily,
-                                           const std::string& fontStyle,
-                                           Integration::GlobalMetrics& globalMetrics );
-
-  virtual void WriteGlobalMetricsToCache( const std::string& fontFamily,
-                                          const std::string& fontStyle,
-                                          const Integration::GlobalMetrics& globalMetrics );
-
-  virtual bool ReadMetricsFromCache( const std::string& fontFamily,
-                                     const std::string& fontStyle,
-                                     std::vector<Integration::GlyphMetrics>& glyphMetricsContainer );
-  virtual void WriteMetricsToCache( const std::string& fontFamily,
-                                    const std::string& fontStyle,
-                                    const Integration::GlyphSet& glyphSet );
-
-
-  virtual void GetFileNamesFromDirectory( const std::string& directoryName,
-                                          std::vector<std::string>& fileNames );
-
-  virtual Integration::BitmapPtr GetGlyphImage( const std::string& fontFamily, const std::string& fontStyle, float fontSize, uint32_t character ) const;
-
 public: // TEST FUNCTIONS
 
   // Enumeration of Platform Abstraction methods
@@ -260,24 +184,9 @@ public: // TEST FUNCTIONS
     CancelLoadFunc,
     GetResourcesFunc,
     IsLoadingFunc,
-    GetDefaultFontFamilyFunc,
-    GetDefaultFontSizeFunc,
-    GetFontLineHeightFromCapsHeightFunc,
-    GetGlyphDataFunc,
-    GetCachedGlyphDataFunc,
     SetDpiFunc,
-    GetFontPathFunc,
     JoinLoaderThreadsFunc,
-    GetFontFamilyForCharsFunc,
-    AllGlyphsSupportedFunc,
-    ValidateFontFamilyNameFunc,
-    UpdateDefaultsFromDeviceFunc,
     GetDynamicsFactoryFunc,
-    ValidateGetFontListFunc,
-    ReadGlobalMetricsFromCacheFileFunc,
-    WriteGlobalMetricsToCacheFileFunc,
-    ReadMetricsFromCacheFileFunc,
-    WriteMetricsToCacheFileFunc,
   } TestFuncEnum;
 
   /** Call this every test */
@@ -326,33 +235,18 @@ public: // TEST FUNCTIONS
 
   void SetSaveFileResult( bool result );
 
-  PlatformAbstraction::FontListMode GetLastFontListMode( );
-
-  void SetReadGlobalMetricsResult( bool success, Integration::GlobalMetrics& globalMetrics );
-
-  void SetReadMetricsResult( bool success, std::vector<Integration::GlyphMetrics>& glyphMetricsContainer );
-
-
 private:
   mutable TraceCallStack        mTrace;
   size_t                        mSeconds;
   size_t                        mMicroSeconds;
   bool                          mIsLoadingResult;
-  std::string                   mGetDefaultFontFamilyResult;
-  float                         mGetDefaultFontSizeResult;
-  std::string                   mGetFontPathResult;
   Resources                     mResources;
   Integration::ResourceRequest* mRequest;
   Vector2                       mSize;
   Vector2                       mClosestSize;
-  bool                          mReadGlobalMetricsResult;
-  bool                          mReadMetricsResult;
-  Integration::GlobalMetrics mReadGlobalMetrics;
-  std::vector<Integration::GlyphMetrics> mReadMetrics;
 
   LoadFileResult                mLoadFileResult;
   bool                          mSaveFileResult;
-  mutable FontListMode          mFontListMode;
 };
 
 } // Dali
index d403477..cc03bb1 100644 (file)
@@ -26,131 +26,6 @@ using namespace Toolkit;
 
 namespace
 {
-//
-// Note: To avoid escaping double quotes single quotes are used and then replaced
-//       before parsing. JSON uses double quotes
-//
-
-  std::string JSON_TEXT_ACTOR("\
-{                                                              \
-  'templates':                                                 \
-  {                                                            \
-    'basic-text':                                              \
-    {                                                          \
-      'type':'TextActor',                                      \
-      'text':'Template Hello',                                 \
-      'size': [150,170,1],                                     \
-      'position':[-10,10,0]                                    \
-    }                                                          \
-  },                                                           \
-  'styles':                                                    \
-  {                                                            \
-    'basic-text':                                              \
-    {                                                          \
-      'text':'Hello',                                          \
-      'font':'',                                               \
-      'parent-origin':[0.0,0.0,0],                             \
-      'anchor-point' :[0.5,0.5,0],                             \
-      'size': [150,170,1],                                     \
-      'position':[-10,10,0]                                    \
-    }                                                          \
-  },                                                           \
-  'animations':                                                \
-  {                                                            \
-    'rotate':                                                  \
-    {                                                          \
-      'duration': 10,                                          \
-      'properties':                                            \
-      [                                                        \
-        {                                                      \
-          'actor':'text',                                      \
-          'property':'orientation',                            \
-          'value':[0, 3, 0, 0],                                \
-          'alpha-function': 'EASE_IN_OUT',                     \
-          'time-period': {'delay': 0, 'duration': 3 }          \
-        }                                                      \
-      ]                                                        \
-    }                                                          \
-  },                                                           \
-  'stage':                                                     \
-  [                                                            \
-    {                                                          \
-      'name':'text',                                           \
-      'type':'basic-text',                                     \
-      'text':'Hello'                                           \
-    },                                                         \
-    {                                                          \
-      'name':'text2',                                          \
-      'type':'basic-text',                                     \
-      'text':'Hello',                                          \
-      'signals':                                               \
-      [                                                        \
-        { 'name': 'on-stage', 'action':'set', 'actor':'text2', 'property':'text', 'value':'Jaylo' } \
-      ]                                                        \
-    }                                                          \
-  ],                                                           \
-  'other':                                                     \
-  [                                                            \
-    {                                                          \
-      'name':'other-text',                                     \
-      'type':'basic-text',                                     \
-      'text':'Hello'                                           \
-    }                                                          \
-  ]                                                            \
-}                                                              \
-");
-
-
-  std::string JSON_CORE_ACTOR_TREE("\
-{                                                                                         \
-    'templates':                                                                          \
-    {                                                                                     \
-        'my-camera': {                                                                    \
-                      'type':'CameraActor',                                               \
-                      'camera-type':'FreeLook',                                           \
-                      'field-of-view': 0.125,                                             \
-                      'aspect-ratio':5.0,                                                 \
-                      'near-plane-distance': 100,                                         \
-                      'far-plane-distance': 200                                           \
-                      },                                                                  \
-        'basic-text': {                                                                   \
-                    'type':'TextActor',                                                   \
-                    'text':'Hello',                                                       \
-                    'font':'Freesans',                                                    \
-                    'smooth-edge':0.2,                                                    \
-                    'position': [-10.0, 10.0, -1000.0],                                   \
-                    'size': [300.0, 250.0, 0.0]                                           \
-                   }                                                                      \
-    },                                                                                    \
-    'styles':                                                                             \
-    {                                                                                     \
-       'theme2-text': {                                                                   \
-                   'type':'TextActor',                                                    \
-                   'text':'Hello',                                                        \
-                   'font':'Freesans',                                                     \
-                   'smooth-edge':0.8                                                      \
-                  }                                                                       \
-    },                                                                                    \
-    'stage':                                                                              \
-    [                                                                                     \
-        {'name':'txt1',                                                                   \
-         'type':'TextActor',                                                              \
-         'text':'Hello World',                                                            \
-         'font':'freesans',                                                               \
-         'parent-origin':'CENTER',                                                        \
-         'actors':                                                                        \
-         [                                                                                \
-           { 'type':'basic-text', 'text':'Hello', 'position-y':50 },                      \
-           { 'type':'basic-text', 'text':'Hello', 'position-y':100 },                     \
-           { 'type':'basic-text', 'text':'Hello', 'position-y':150 },                     \
-           { 'type':'basic-text', 'text':'Hello', 'position-y':200 },                     \
-           { 'type':'basic-text', 'text':'Hello', 'position-y':250 }                      \
-         ]                                                                                \
-        }                                                                                 \
-    ]                                                                                     \
-}                                                                                         \
-");
-
 
 std::string ReplaceQuotes(const std::string &in_s)
 {
@@ -189,263 +64,6 @@ void builder_cleanup(void)
   test_return_value = TET_PASS;
 }
 
-int UtcDaliBuilderTextActorCreate(void)
-{
-  ToolkitTestApplication application;
-  Stage stage = Stage::GetCurrent();
-
-  tet_infoline(" UtcDaliBuilderTextActorCreate");
-
-  Builder builder = Builder::New();
-
-  builder.LoadFromString(ReplaceQuotes(JSON_TEXT_ACTOR));
-
-  TextActor actor( TextActor::DownCast( builder.Create("basic-text") ) );
-
-  DALI_TEST_CHECK( actor );
-
-  stage.GetRootLayer().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  Vector3 v;
-
-  v = actor.GetCurrentPosition();
-  DALI_TEST_CHECK(v.x == -10.0);
-  DALI_TEST_CHECK(v.y ==  10.0);
-  DALI_TEST_CHECK(v.z ==  0.0);
-
-  v = actor.GetCurrentSize();
-  DALI_TEST_CHECK(v.x == 150.0);
-  DALI_TEST_CHECK(v.y == 170.0);
-  DALI_TEST_CHECK(v.z == 1.0);
-
-  DALI_TEST_CHECK(actor.GetText() == "Template Hello");
-
-  actor = TextActor::DownCast( builder.Create("*(&^") );
-  DALI_TEST_CHECK(!actor);
-
-  END_TEST;
-}
-
-int UtcDaliBuilderTextActorCreateAnimation(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliBuilderTextActorCreateAnimation");
-
-  Builder builder = Builder::New();
-
-  builder.LoadFromString(ReplaceQuotes(JSON_TEXT_ACTOR));
-
-  builder.AddActors( Stage::GetCurrent().GetRootLayer() );
-
-  Animation anim = builder.CreateAnimation("rotate");
-  DALI_TEST_CHECK( anim );
-
-  DALI_TEST_CHECK( 10.0f == anim.GetDuration() );
-
-  END_TEST;
-}
-
-int UtcDaliBuilderTextActorApplyFromStyle(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliBuilderTextActorApplyFromStyle");
-
-  Builder builder = Builder::New();
-
-  builder.LoadFromString(ReplaceQuotes(JSON_TEXT_ACTOR));
-
-  TextActor actor = TextActor::New("a");
-
-  builder.ApplyStyle("basic-text", actor);
-
-  DALI_TEST_CHECK( actor );
-
-  Stage::GetCurrent().GetRootLayer().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  Vector3 v;
-
-  v = actor.GetCurrentPosition();
-  DALI_TEST_CHECK(v.x == -10.0);
-  DALI_TEST_CHECK(v.y ==  10.0);
-  DALI_TEST_CHECK(v.z ==  0.0);
-
-  v = actor.GetCurrentSize();
-  DALI_TEST_CHECK(v.x == 150.0);
-  DALI_TEST_CHECK(v.y == 170.0);
-  DALI_TEST_CHECK(v.z == 1.0);
-
-  DALI_TEST_CHECK(actor.GetText() == "Hello");
-
-  END_TEST;
-}
-
-int UtcDaliBuilderAddActors(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliBuilderAddActors");
-
-  Builder builder = Builder::New();
-
-  builder.LoadFromString(ReplaceQuotes(JSON_TEXT_ACTOR));
-
-  builder.AddActors( Stage::GetCurrent().GetRootLayer() );
-
-  application.SendNotification();
-  application.Render();
-
-  TextActor actor = TextActor::DownCast( Stage::GetCurrent().GetRootLayer().FindChildByName("text") );
-
-  DALI_TEST_CHECK( actor );
-  DALI_TEST_CHECK(actor.GetText() == "Hello");
-
-  END_TEST;
-}
-
-int UtcDaliBuilderAddActorsOther(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliBuilderAddActorsOther");
-
-  Actor rootActor = Stage::GetCurrent().GetRootLayer();
-
-  Builder builder = Builder::New();
-
-  builder.LoadFromString(ReplaceQuotes(JSON_TEXT_ACTOR));
-
-  builder.AddActors( "other", rootActor  );
-
-  application.SendNotification();
-  application.Render();
-
-  TextActor actor = TextActor::DownCast( Stage::GetCurrent().GetRootLayer().FindChildByName("other-text") );
-
-  DALI_TEST_CHECK( actor );
-  DALI_TEST_CHECK(actor.GetText() == "Hello");
-
-  END_TEST;
-}
-
-
-int UtcDaliBuilderStyles(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliBuilderStyles");
-
-  Builder builder = Builder::New();
-
-  builder.LoadFromString(ReplaceQuotes(JSON_CORE_ACTOR_TREE));
-
-  BaseHandle handle = builder.Create("my-camera");
-  CameraActor camera = CameraActor::DownCast(handle);
-
-  DALI_TEST_CHECK(camera);
-
-  Property::Value v;
-
-  v = camera.GetProperty( camera.GetPropertyIndex("field-of-view") );
-  DALI_TEST_CHECK( 0.125f == v.Get<float>() );
-
-  v = camera.GetProperty( camera.GetPropertyIndex("aspect-ratio") );
-  DALI_TEST_CHECK( 5.0f == v.Get<float>() );
-
-  handle   = builder.Create("basic-text");
-  TextActor textActor = TextActor::DownCast(handle);
-
-  v = textActor.GetProperty( textActor.GetPropertyIndex("smooth-edge") );
-
-  DALI_TEST_CHECK( 0.2f == v.Get<float>() );
-
-  // test ApplyStyle another
-  builder.ApplyStyle("theme2-text", textActor);
-
-  v = textActor.GetProperty( textActor.GetPropertyIndex("smooth-edge") );
-  DALI_TEST_CHECK( 0.8f == v.Get<float>() );
-
-  END_TEST;
-}
-
-int UtcDaliBuilderSetProperty(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliBuilderSetProperty");
-
-  Builder builder = Builder::New();
-
-  builder.LoadFromString(ReplaceQuotes(JSON_TEXT_ACTOR));
-
-  builder.AddActors( Stage::GetCurrent().GetRootLayer() );
-
-  application.SendNotification();
-  application.Render();
-
-  TextActor actor = TextActor::DownCast( Stage::GetCurrent().GetRootLayer().FindChildByName("text2") );
-
-  DALI_TEST_CHECK( actor );
-  DALI_TEST_CHECK( actor.GetText() == "Jaylo" );
-
-  END_TEST;
-}
-
-int UtcDaliBuilderCreateFromJson(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliBuilderCreateFromJson");
-
-  Builder builder = Builder::New();
-
-  TextActor actor = TextActor::DownCast( builder.CreateFromJson("foobar") );
-
-  DALI_TEST_CHECK( !actor );
-
-  actor = TextActor::DownCast(
-    builder.CreateFromJson(
-      ReplaceQuotes("{'type':'TextActor','text':'Hi'}") ) );
-
-  DALI_TEST_CHECK( actor );
-
-  DALI_TEST_CHECK( actor.GetText() == "Hi" );
-
-  END_TEST;
-}
-
-int UtcDaliBuilderApplyFromJson(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliBuilderApplyFromJson");
-
-  Builder builder = Builder::New();
-
-  TextActor actor = TextActor::DownCast(
-    builder.CreateFromJson(
-      ReplaceQuotes("{'type':'TextActor','text':'Hi'}") ) );
-
-  DALI_TEST_CHECK( actor );
-
-  DALI_TEST_CHECK( actor.GetText() == "Hi" );
-
-  DALI_TEST_CHECK( !builder.ApplyFromJson(actor, ReplaceQuotes("foobar") ) );
-
-  builder.ApplyFromJson(actor, ReplaceQuotes("{'text':'low'}") );
-
-  DALI_TEST_CHECK( actor.GetText() == "low" );
-
-  END_TEST;
-}
-
 int UtcDaliBuilderQuitSignal(void)
 {
   ToolkitTestApplication application;
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-MarkupProcessor.cpp b/automated-tests/src/dali-toolkit/utc-Dali-MarkupProcessor.cpp
deleted file mode 100644 (file)
index d2317a7..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-
-// Need to override adaptor classes for toolkit test harness, so include
-// test harness headers before dali headers.
-#include <dali-toolkit-test-suite-utils.h>
-
-#include <dali.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-void utc_dali_toolkit_markup_processor_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void utc_dali_toolkit_markup_processor_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-namespace
-{
-
-struct MarkupStringTest
-{
-  std::string input;
-  std::string expectedResult;
-};
-
-bool TestMarkupString( const std::string& input, const std::string& expectedResult, std::string& result )
-{
-  Toolkit::MarkupProcessor::StyledTextArray styledTextArray;
-
-  GetStyledTextArray( input, styledTextArray, true );
-  GetMarkupString( styledTextArray, result );
-
-  return expectedResult == result;
-}
-
-} // namespace
-
-
-// Positive test case for a method
-int UtcDaliMarkupProcessor(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliMarkupProcessor ");
-
-  const std::string text1( "Text" );
-  const std::string text2( "< font  face ='FreeSerif'  color= 'green' >t< / font >" );
-  const std::string text3( "<  font face =  'FreeSerif' size=  '16' style = 'Bold' color='red'>< i><u >Styled< / u> Text< /i >< / font >< br / >" );
-  const std::string text4( "<font face='FreeSerif' size='14' color='0xaadd8744'><b><u>Styled</u> Te<font size='20'>x</font>t</b></font>< br/>" );
-  const std::string text5( "< shadow color   =   'blue' paramx =   '1' paramy = '0.75'  >Shadow< / shadow><br />" );
-  const std::string text6( "<smooth     param=  '0.75'  >< glow   color =   'red' param  = '0.1'  >Glow</glow></smooth>< br />" );
-  const std::string text7( "<font color='green''><   outline color = 'red'   paramx  =  '0.7' paramy  =  '0.7' >Outline< / outline  >< /font  ><  br  /  >" );
-  const std::string text8( "<smooth param='0.75'>Smooth</smooth><  br /   >" );
-  const std::string text9( "\\<" );
-  const std::string text10( "\\>" );
-
-  char crlf[2];
-  crlf[0] = 0x0D;
-  crlf[1] = 0x0A;
-  const std::string text11( crlf, 2 );
-
-  const std::string result1( text1 );
-  const std::string result2( "<font face='FreeSerif' color='green'>t</font>" );
-  const std::string result3( "<font face='FreeSerif' style='Bold' size='16' color='red'><i><u>Styled</u></i></font><font face='FreeSerif' style='Bold' size='16' color='red'><i> Text</i></font><br />" );
-  const std::string result4( "<font face='FreeSerif' size='14' color='0xaadd8744'><b><u>Styled</u></b></font><font face='FreeSerif' size='14' color='0xaadd8744'><b> Te</b></font><font face='FreeSerif' size='20' color='0xaadd8744'><b>x</b></font><font face='FreeSerif' size='14' color='0xaadd8744'><b>t</b></font><br />" );
-  const std::string result5( "<shadow color='blue' paramx='1' paramy='0.75'>Shadow</shadow><br />" );
-  const std::string result6( "<smooth param='0.75'><glow color='red' param='0.1'>Glow</glow></smooth><br />" );
-  const std::string result7( "<font color='green'><outline color='red' paramx='0.7' paramy='0.7'>Outline</outline></font><br />" );
-  const std::string result8( "<smooth param='0.75'>Smooth</smooth><br />" );
-  const std::string result9( text9 );
-  const std::string result10( text10 );
-  const std::string result11( "<br />" );
-
-  std::string markupString;
-  Toolkit::MarkupProcessor::StyledTextArray styledTextArray;
-
-  GetStyledTextArray( text1, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-  DALI_TEST_EQUALS( result1, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text2, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-  DALI_TEST_EQUALS( result2, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text3, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-  DALI_TEST_EQUALS( result3, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text4, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-  DALI_TEST_EQUALS( result4, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text5, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-  DALI_TEST_EQUALS( result5, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text6, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-  DALI_TEST_EQUALS( result6, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text7, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-  DALI_TEST_EQUALS( result7, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text8, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-  DALI_TEST_EQUALS( result8, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text9, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-  DALI_TEST_EQUALS( result9, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text10, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-
-  DALI_TEST_EQUALS( result10, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text11, styledTextArray, true );
-  GetMarkupString( styledTextArray, markupString );
-
-  DALI_TEST_EQUALS( result11, markupString, TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliMarkupProcessorSetTextStyle01(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliMarkupProcessorSetTextStyle01 ");
-
-  const std::string text1( "Text with no defined style" );
-  const std::string result1( "<font color='green'><i>Text with no defined style</i></font>" );
-  const std::string result2( "Text with <font color='green'><i>no defined</i></font> style" );
-
-  std::string markupString;
-  Toolkit::MarkupProcessor::StyledTextArray styledTextArray;
-
-  GetStyledTextArray( text1, styledTextArray, true );
-
-  TextStyle style;
-  style.SetItalics( true );
-  style.SetTextColor( Color::GREEN );
-
-  SetTextStyle( styledTextArray, style );
-  GetMarkupString( styledTextArray, markupString );
-
-  DALI_TEST_EQUALS( result1, markupString, TEST_LOCATION );
-
-  styledTextArray.clear();
-  SetTextStyle( text1, styledTextArray, style );
-  GetMarkupString( styledTextArray, markupString );
-
-  DALI_TEST_EQUALS( result1, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text1, styledTextArray, true );
-  SetTextStyleToRange( styledTextArray, style, TextStyle::ALL, 0, text1.size() - 1 );
-  GetMarkupString( styledTextArray, markupString );
-
-  DALI_TEST_EQUALS( result1, markupString, TEST_LOCATION );
-
-  GetStyledTextArray( text1, styledTextArray, true );
-  SetTextStyleToRange( styledTextArray, style, TextStyle::ALL, 10, 19 );
-  GetMarkupString( styledTextArray, markupString );
-
-  DALI_TEST_EQUALS( result2, markupString, TEST_LOCATION );
-
-  std::string plainString;
-  GetPlainString( styledTextArray, plainString );
-
-  DALI_TEST_EQUALS( text1, plainString, TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliMarkupProcessorSetTextStyle02(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline(" UtcDaliMarkupProcessorSetTextStyle02 ");
-
-  Toolkit::MarkupProcessor::StyledTextArray styledTextArray;
-
-  // Test style applied to and empty string doesn't crash
-
-  TextStyle style;
-  style.SetItalics( true );
-  style.SetTextColor( Color::GREEN );
-
-  bool fails = false;
-  try
-  {
-    SetTextStyle( styledTextArray, style );
-  }
-  catch( ... )
-  {
-    fails = true;
-  }
-
-  DALI_TEST_CHECK( !fails );
-  END_TEST;
-}
-
-int UtcDaliMarkupProcessorTestColors(void)
-{
-  ToolkitTestApplication application;
-
-  tet_infoline("UtcDaliMarkupProcessorTestColors  ");
-
-  struct MarkupStringTest colorTests[] =
-  {
-    {
-      std::string( "<font color='0xFF000000'>black</font>" ),
-      std::string( "<font color='black'>black</font>" )
-    },
-    {
-      std::string( "<font color='0xFFFFFFFF'>white</font>" ),
-      std::string( "white" )
-    },
-    {
-      std::string( "<font color='0xFFFF0000'>red</font>" ),
-      std::string( "<font color='red'>red</font>" )
-    },
-    {
-      std::string( "<font color='0xFF00FF00'>green</font>" ),
-      std::string( "<font color='green'>green</font>" )
-    },
-    {
-      std::string( "<font color='0xFF0000FF'>blue</font>" ),
-      std::string( "<font color='blue'>blue</font>" )
-    },
-    {
-      std::string( "<font color='0xFFFFFF00'>yellow</font>" ),
-      std::string( "<font color='yellow'>yellow</font>" )
-    },
-    {
-      std::string( "<font color='0xFFFF00FF'>magenta</font>" ),
-      std::string( "<font color='magenta'>magenta</font>" )
-    },
-    {
-      std::string( "<font color='0xFF00FFFF'>cyan</font>" ),
-      std::string( "<font color='cyan'>cyan</font>" )
-    },
-    {
-      std::string( "<font color='0x00000000'>transparent</font>" ),
-      std::string( "<font color='transparent'>transparent</font>" )
-    },
-    {
-      std::string( "<font color='#000000'>black</font>" ),
-      std::string( "<font color='black'>black</font>" )
-    },
-    {
-      std::string( "<font color='#FFFFFF'>white</font>" ),
-      std::string( "white" )
-    },
-    {
-      std::string( "<font color='#FF0000'>red</font>" ),
-      std::string( "<font color='red'>red</font>" )
-    },
-    {
-      std::string( "<font color='#00FF00'>green</font>" ),
-      std::string( "<font color='green'>green</font>" )
-    },
-    {
-      std::string( "<font color='#0000FF'>blue</font>" ),
-      std::string( "<font color='blue'>blue</font>" )
-    },
-    {
-      std::string( "<font color='#FFFF00'>yellow</font>" ),
-      std::string( "<font color='yellow'>yellow</font>" )
-    },
-    {
-      std::string( "<font color='#FF00FF'>magenta</font>" ),
-      std::string( "<font color='magenta'>magenta</font>" )
-    },
-    {
-      std::string( "<font color='#00FFFF'>cyan</font>" ),
-      std::string( "<font color='cyan'>cyan</font>" )
-    },
-    {
-      std::string( "<font color='#000'>black</font>" ),
-      std::string( "<font color='black'>black</font>" )
-    },
-    {
-      std::string( "<font color='#FFF'>white</font>" ),
-      std::string( "white" )
-    },
-    {
-      std::string( "<font color='#F00'>red</font>" ),
-      std::string( "<font color='red'>red</font>" )
-    },
-    {
-      std::string( "<font color='#0F0'>green</font>" ),
-      std::string( "<font color='green'>green</font>" )
-    },
-    {
-      std::string( "<font color='#00F'>blue</font>" ),
-      std::string( "<font color='blue'>blue</font>" )
-    },
-    {
-      std::string( "<font color='#FF0'>yellow</font>" ),
-      std::string( "<font color='yellow'>yellow</font>" )
-    },
-    {
-      std::string( "<font color='#F0F'>magenta</font>" ),
-      std::string( "<font color='magenta'>magenta</font>" )
-    },
-    {
-      std::string( "<font color='#0FF'>cyan</font>" ),
-      std::string( "<font color='cyan'>cyan</font>" )
-    },
-    {
-      std::string( "<font color='0x000000'>black</font>" ),
-      std::string( "<font color='black'>black</font>" )
-    },
-    {
-      std::string( "<font color='black'>black</font>" ),
-      std::string( "<font color='black'>black</font>" )
-    },
-    {
-      std::string( "<font color='white'>white</font>" ),
-      std::string( "white" )
-    },
-    {
-      std::string( "<font color='red'>red</font>" ),
-      std::string( "<font color='red'>red</font>" )
-    },
-    {
-      std::string( "<font color='0xFF00FF00'>green</font>" ),
-      std::string( "<font color='green'>green</font>" )
-    },
-    {
-      std::string( "<font color='blue'>blue</font>" ),
-      std::string( "<font color='blue'>blue</font>" )
-    },
-    {
-      std::string( "<font color='yellow'>yellow</font>" ),
-      std::string( "<font color='yellow'>yellow</font>" )
-    },
-    {
-      std::string( "<font color='magenta'>magenta</font>" ),
-      std::string( "<font color='magenta'>magenta</font>" )
-    },
-    {
-      std::string( "<font color='cyan'>cyan</font>" ),
-      std::string( "<font color='cyan'>cyan</font>" )
-    },
-    {
-      std::string( "<font color='transparent'>transparent</font>" ),
-      std::string( "<font color='transparent'>transparent</font>" )
-    },
-    {
-      std::string( "<outline color='white'>outline</outline>" ),
-      std::string( "<outline color='white'>outline</outline>" )
-    },
-  };
-
-  const std::size_t numberOfTests( 36 );
-
-  bool fails = false;
-  for( std::size_t index = 0; index < numberOfTests; ++index )
-  {
-    const MarkupStringTest& test = colorTests[index];
-
-    std::string result;
-    if( !TestMarkupString( test.input, test.expectedResult, result ) )
-    {
-      TestMarkupString( test.input, test.expectedResult, result );
-      tet_printf( "%s\n          input : %s\nexpected result : %s\n         result : %s\n", TEST_LOCATION, test.input.c_str(), test.expectedResult.c_str(), result.c_str() );
-
-      fails = true;
-    }
-  }
-
-  DALI_TEST_CHECK( !fails );
-  END_TEST;
-}
index a2c7d54..4e81bf6 100644 (file)
@@ -327,13 +327,12 @@ int UtcDaliNavigationControlCreateNavigationTitleBar(void)
   tet_infoline( "UtcDaliNavigationControlCreateNavigationTitleBar" );
 
   ImageActor background = CreateSolidColorActor( Color::RED );
-  TextStyle textStyle;
   Stage stage = Stage::GetCurrent();
 
   NavigationControl naviControl = NavigationControl::New();
   stage.Add( naviControl );
 
-  Toolkit::NaviTitleBarStyle titleBarStyle( background, textStyle, textStyle, 720, 111, 68, 48, 34, 16, 11, 45, 63, 26, 14, 22 );
+  Toolkit::NaviTitleBarStyle titleBarStyle( background, 720, 111, 68, 48, 34, 16, 11, 45, 63, 26, 14, 22 );
   naviControl.CreateNavigationTitleBar( titleBarStyle, titleBarStyle );
 
   Page naviItem = Page::New();
index 0ba0800..0aaf295 100644 (file)
@@ -168,7 +168,7 @@ int UtcDaliPopoupSetProperty(void)
   //Test properties
   std::string testString = "Hello World";
   popup.SetProperty(popup.GetPropertyIndex("title"), testString);
-  DALI_TEST_EQUALS( testString, popup.GetTitle().GetText(), TEST_LOCATION );
+  DALI_TEST_EQUALS( testString, popup.GetTitle(), TEST_LOCATION );
   END_TEST;
 }
 
@@ -200,54 +200,10 @@ int UtcDaliPopupSetTitle(void)
   // Put in show state so it's layer is connected to popup (for ancestor check).
   popup.SetState(Popup::POPUP_SHOW, 0.0f);
 
-  TextView titleActor = TextView::New();
-  titleActor.SetText("title");
-
-  DALI_TEST_CHECK( !popup.GetTitle() );
-  popup.SetTitle(titleActor);
-  DALI_TEST_CHECK( popup.GetTitle() == titleActor );
-  DALI_TEST_CHECK( (popup.GetTitle()) && (popup.GetTitle().GetText() == "title") );
-  // verify titleActor is actually inside popup, and not elsewhere on stage, or off even.
-  DALI_TEST_CHECK( HasAncestor(titleActor, popup) );
-
-  TextView titleActor2 = TextView::New();
-  titleActor2.SetText("anothertitle");
-  popup.SetTitle(titleActor2);
-  DALI_TEST_CHECK( popup.GetTitle() != titleActor );
-  DALI_TEST_CHECK( popup.GetTitle() == titleActor2 );
-  DALI_TEST_CHECK( (popup.GetTitle()) && (popup.GetTitle().GetText() == "anothertitle") );
-  // verify titleActor is actually inside popup, and not elsewhere on stage, or off even.
-  DALI_TEST_CHECK( HasAncestor(titleActor2, popup) );
-  END_TEST;
-}
-
-int UtcDaliPopupSetTitleText(void)
-{
-  ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
-  tet_infoline(" UtcDaliPopupSetTitleText");
+  popup.SetTitle("title");
 
-  // Create the Popup actor
-  Popup popup = Popup::New();
-  Stage::GetCurrent().Add( popup );
-  // Put in show state so it's layer is connected to popup (for ancestor check).
-  popup.SetState(Popup::POPUP_SHOW, 0.0f);
+  DALI_TEST_CHECK( popup.GetTitle() == "title" );
 
-  TextView titleActor = TextView::New();
-  titleActor.SetText("title");
-
-  DALI_TEST_CHECK( !popup.GetTitle() );
-  popup.SetTitle(titleActor);
-  DALI_TEST_CHECK( popup.GetTitle() == titleActor );
-  DALI_TEST_CHECK( (popup.GetTitle()) && (popup.GetTitle().GetText() == "title") );
-  // verify titleActor is actually inside popup, and not elsewhere on stage, or off even.
-  DALI_TEST_CHECK( HasAncestor(titleActor, popup) );
-
-  // this text should replace titleImage actor.
-  popup.SetTitle("newtext");
-  DALI_TEST_CHECK( popup.GetTitle() != titleActor );
-  DALI_TEST_CHECK( (popup.GetTitle()) && (popup.GetTitle().GetText() == "newtext") );
-  // verify titleActor is no longer inside popup. (been displaced by newtext actor)
-  DALI_TEST_CHECK( !HasAncestor(titleActor, popup) );
   END_TEST;
 }
 
index 84a020e..0d259d9 100644 (file)
@@ -314,18 +314,11 @@ int UtcDaliPushButtonSetLabelText(void)
   application.SendNotification();
   application.Render();
 
-  TextView textView;
-
   pushButton.SetLabel( STR );
 
-  textView = TextView::DownCast( pushButton.GetLabel() );
-  DALI_TEST_CHECK( STR == textView.GetText() );
-
-  TextView text = TextView::New( STR );
-  pushButton.SetLabel( text );
+  TextLabel label = TextLabel::DownCast( pushButton.GetLabel() );
+  DALI_TEST_CHECK( STR == label.GetProperty<std::string>( TextLabel::Property::TEXT ) );
 
-  textView = TextView::DownCast( pushButton.GetLabel() );
-  DALI_TEST_CHECK( STR == textView.GetText() );
   END_TEST;
 }
 
index d53084c..c20a167 100644 (file)
@@ -105,12 +105,12 @@ int UtcDaliRadioButtonLabelActor(void)
 {
   ToolkitTestApplication application;
 
-  TextView actor1 = TextView::New( "test actor 1" );
+  TextLabel actor1 = TextLabel::New( "test actor 1" );
 
   RadioButton radioButton = RadioButton::New( actor1 );
   DALI_TEST_CHECK( actor1 == radioButton.GetLabel() );
 
-  TextView actor2 = TextView::New( "test actor 2" );
+  TextLabel actor2 = TextLabel::New( "test actor 2" );
   radioButton.SetLabel( actor2 );
   DALI_TEST_CHECK( actor2 == radioButton.GetLabel() );
 
index 1e94aa3..006e192 100644 (file)
@@ -30,7 +30,6 @@ AC_SUBST(DALI_TOOLKIT_VERSION)
 
 PKG_CHECK_MODULES(DALICORE, dali-core)
 PKG_CHECK_MODULES(DALI, dali)
-PKG_CHECK_MODULES(FRIBIDI, fribidi)
 
 DALI_TOOLKIT_CFLAGS=-DPLATFORM_TIZEN
 
@@ -90,6 +89,10 @@ else
   dataReadOnlyDir=${prefix}/share/dali/
 fi
 
+DALI_TOOLKIT_CFLAGS="$DALI_TOOLKIT_CFLAGS -DDALI_PROFILE_${enable_profile}"
+AM_CONDITIONAL([COMMON_PROFILE], [test x$enable_profile = xCOMMON])
+AM_CONDITIONAL([MOBILE_PROFILE], [test x$enable_profile = xMOBILE])
+
 # v8 version 4+ requires c++11
 PKG_CHECK_MODULES(V8, v8 = 3.32.7, [ pkg_check_v8=yes ],  [ pkg_check_v8=no  ] )
 
index e966482..18ed54d 100644 (file)
 
 toolkit_images_dir = ../../../dali-toolkit/images
 toolkit_sounds_dir = ../../../dali-toolkit/sounds
-toolkit_styles_dir = ../../../dali-toolkit/styles
 toolkit_src_dir    = ../../../dali-toolkit/internal
 public_api_src_dir = ../../../dali-toolkit/public-api
 
+if MOBILE_PROFILE
+toolkit_styles_dir = ../../../dali-toolkit/styles/mobile
+else
+toolkit_styles_dir = ../../../dali-toolkit/styles
+endif
+
 include ../../../dali-toolkit/images/file.list
 include ../../../dali-toolkit/sounds/file.list
 include ../../../dali-toolkit/styles/file.list
@@ -99,19 +104,17 @@ publicapishadowviewdir = $(publicapicontrolsdir)/shadow-view
 publicapisliderdir = $(publicapicontrolsdir)/slider
 publicapisuperblurviewdir = $(publicapicontrolsdir)/super-blur-view
 publicapitableviewdir = $(publicapicontrolsdir)/table-view
-publicapitextviewdir = $(publicapicontrolsdir)/text-view
-publicapitextinputdir = $(publicapicontrolsdir)/text-input
+publicapitextcontrolsdir = $(publicapidir)/controls/text-controls
 publicapitoolbardir = $(publicapicontrolsdir)/tool-bar
 publicapiviewdir = $(publicapicontrolsdir)/view
-
 publicapibuilderdir = $(publicapidir)/builder
 publicapifocusmanagerdir = $(publicapidir)/focus-manager
-publicapimarkupprocessordir = $(publicapidir)/markup-processor
 publicapishadereffectsdir = $(publicapidir)/shader-effects
 publicapibubbleeffectdir = $(publicapidir)/shader-effects/bubble-effect
 publicapistylingdir = $(publicapidir)/styling
 publicapitransitioneffectsdir = $(publicapidir)/transition-effects
 publicapiscriptingdir = $(publicapidir)/scripting
+publicapirenderingbackenddir = $(publicapidir)/text
 
 publicapi_HEADERS = $(public_api_header_files)
 publicapicontrols_HEADERS = $(public_api_controls_header_files)
@@ -139,17 +142,15 @@ publicapishadowview_HEADERS = $(public_api_shadow_view_header_files)
 publicapislider_HEADERS = $(public_api_slider_header_files)
 publicapisuperblurview_HEADERS = $(public_api_super_blur_view_header_files)
 publicapitableview_HEADERS = $(public_api_table_view_header_files)
-publicapitextview_HEADERS = $(public_api_text_view_header_files)
-publicapitextinput_HEADERS = $(public_api_text_input_header_files)
+publicapitextcontrols_HEADERS = $(public_api_text_controls_header_files)
 publicapitoolbar_HEADERS = $(public_api_tool_bar_header_files)
 publicapiview_HEADERS = $(public_api_view_header_files)
-
 publicapibuilder_HEADERS = $(public_api_builder_header_files)
 publicapifocusmanager_HEADERS = $(public_api_focus_manager_header_files)
-publicapimarkupprocessor_HEADERS = $(public_api_markup_processor_header_files)
 publicapishadereffects_HEADERS = $(public_api_shader_effects_header_files)
 publicapibubbleeffect_HEADERS = $(public_api_bubble_effect_header_files)
 publicapistyling_HEADERS = $(public_api_styling_header_files)
 publicapitransitioneffects_HEADERS = $(public_api_transition_effects_header_files)
 publicapiscripting_HEADERS = $(public_api_scripting_header_files)
+publicapirenderingbackend_HEADERS = $(public_api_rendering_backend_header_files)
 
index ea7bec4..0e705e2 100644 (file)
@@ -73,8 +73,8 @@
 #include <dali-toolkit/public-api/controls/slider/slider.h>
 #include <dali-toolkit/public-api/controls/super-blur-view/super-blur-view.h>
 #include <dali-toolkit/public-api/controls/table-view/table-view.h>
-#include <dali-toolkit/public-api/controls/text-input/text-input.h>
-#include <dali-toolkit/public-api/controls/text-view/text-view.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-field.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
 #include <dali-toolkit/public-api/controls/tool-bar/tool-bar.h>
 #include <dali-toolkit/public-api/controls/view/view.h>
 
 #include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
 #include <dali-toolkit/public-api/focus-manager/keyinput-focus-manager.h>
 
-#include <dali-toolkit/public-api/markup-processor/markup-processor.h>
-
 #include <dali-toolkit/public-api/scripting/script.h>
 #include <dali-toolkit/public-api/scripting/script-plugin.h>
 
+#include <dali-toolkit/public-api/text/rendering-backend.h>
+
 #include <dali-toolkit/public-api/shader-effects/alpha-discard-effect.h>
 #include <dali-toolkit/public-api/shader-effects/bendy-effect.h>
 #include <dali-toolkit/public-api/shader-effects/blind-effect.h>
 #include <dali-toolkit/public-api/shader-effects/ripple2d-effect.h>
 #include <dali-toolkit/public-api/shader-effects/swirl-effect.h>
 
+#include <dali-toolkit/public-api/styling/style-manager.h>
+
 #include <dali-toolkit/public-api/transition-effects/cube-transition-effect.h>
 #include <dali-toolkit/public-api/transition-effects/cube-transition-wave-effect.h>
 #include <dali-toolkit/public-api/transition-effects/cube-transition-cross-effect.h>
diff --git a/dali-toolkit/internal/atlas-manager/atlas-manager-impl.cpp b/dali-toolkit/internal/atlas-manager/atlas-manager-impl.cpp
new file mode 100644 (file)
index 0000000..83bb423
--- /dev/null
@@ -0,0 +1,851 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// CLASS HEADER
+#include <dali-toolkit/internal/atlas-manager/atlas-manager-impl.h>
+
+// EXTERNAL INCLUDE
+#include <iostream>
+#include <string.h>
+#include <dali/integration-api/debug.h>
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Internal
+{
+
+namespace
+{
+  const Vector2 DEFAULT_ATLAS_SIZE( 512.0f, 512.0f );
+  const Vector2 DEFAULT_BLOCK_SIZE( 32.0f, 32.0f );
+  const uint32_t SINGLE_PIXEL_PADDING( 1u );
+  const uint32_t DOUBLE_PIXEL_PADDING( SINGLE_PIXEL_PADDING << 1 );
+  const uint32_t FILLED_PIXEL( -1 );
+}
+
+AtlasManager::AtlasManager()
+: mNewAtlasSize( DEFAULT_ATLAS_SIZE ),
+  mNewBlockSize( DEFAULT_BLOCK_SIZE ),
+  mAddFailPolicy( Toolkit::AtlasManager::FAIL_ON_ADD_CREATES ),
+  mFilledPixel( FILLED_PIXEL )
+{
+}
+
+AtlasManagerPtr AtlasManager::New()
+{
+  AtlasManagerPtr internal = new AtlasManager();
+  return internal;
+}
+
+AtlasManager::~AtlasManager()
+{
+  for ( uint32_t i = 0; i < mAtlasList.size(); ++i )
+  {
+    delete[] mAtlasList[ i ].mStripBuffer;
+  }
+}
+
+Toolkit::AtlasManager::AtlasId AtlasManager::CreateAtlas( SizeType width,
+                                                          SizeType height,
+                                                          SizeType blockWidth,
+                                                          SizeType blockHeight,
+                                                          Pixel::Format pixelformat )
+{
+  // Check to see if the atlas is large enough to hold a single block even ?
+  if ( blockWidth > width || blockHeight > height )
+  {
+    DALI_LOG_ERROR("Atlas %i x %i too small. Dimensions need to be at least %ix%i\n",
+                    width, height, blockWidth, blockHeight );
+    return 0;
+  }
+
+  Dali::Atlas atlas = Dali::Atlas::New( width, height, pixelformat );
+  AtlasDescriptor atlasDescriptor;
+  atlasDescriptor.mAtlas = atlas;
+  atlasDescriptor.mWidth = width;
+  atlasDescriptor.mHeight = height;
+  atlasDescriptor.mBlockWidth = blockWidth;
+  atlasDescriptor.mBlockHeight = blockHeight;
+  atlasDescriptor.mPixelFormat = pixelformat;
+  std::stringstream materialLabel;
+  materialLabel << "Atlas Material - ";
+  materialLabel << mAtlasList.size();
+  atlasDescriptor.mMaterial = Material::New( materialLabel.str() );
+  atlasDescriptor.mMaterial.SetDiffuseTexture( atlas );
+  atlasDescriptor.mNextFreeBlock = 1u; // indicate next free block will be the first ( +1 )
+
+  // What size do we need for this atlas' strip buffer ( assume 32bit pixel format )?
+  uint32_t neededStripSize =( blockWidth > blockHeight - DOUBLE_PIXEL_PADDING ? blockWidth : blockHeight - DOUBLE_PIXEL_PADDING ) << 2;
+  atlasDescriptor.mStripBuffer = new PixelBuffer[ neededStripSize ];
+  memset( atlasDescriptor.mStripBuffer, 0, neededStripSize );
+
+  atlasDescriptor.mHorizontalStrip = BufferImage::New( atlasDescriptor.mStripBuffer,
+                                                       blockWidth,
+                                                       SINGLE_PIXEL_PADDING,
+                                                       pixelformat );
+
+  atlasDescriptor.mVerticalStrip = BufferImage::New( atlasDescriptor.mStripBuffer,
+                                                     SINGLE_PIXEL_PADDING,
+                                                     blockHeight - DOUBLE_PIXEL_PADDING,
+                                                     pixelformat );
+  atlasDescriptor.mFilledPixelImage = BufferImage::New( reinterpret_cast< PixelBuffer* >( &mFilledPixel ), 1, 1, pixelformat );
+  atlas.Upload( atlasDescriptor.mFilledPixelImage, 0, 0 );
+  mAtlasList.push_back( atlasDescriptor );
+  return mAtlasList.size();
+}
+
+void AtlasManager::SetAddPolicy( Toolkit::AtlasManager::AddFailPolicy policy )
+{
+  mAddFailPolicy = policy;
+}
+
+void AtlasManager::Add( const BufferImage& image,
+                        Toolkit::AtlasManager::AtlasSlot& slot,
+                        Toolkit::AtlasManager::AtlasId atlas )
+{
+  // See if there's a slot in an atlas that matches the requirements of this image
+  // A bitmap must be sliceable into a single atlas
+  Pixel::Format pixelFormat = image.GetPixelFormat();
+  SizeType width = image.GetWidth();
+  SizeType height = image.GetHeight();
+  SizeType blockArea = 0;
+  SizeType totalBlocks = 0;
+  SizeType foundAtlas = 0;
+  SizeType index = 0;
+  slot.mImageId = 0;
+
+  AtlasSlotDescriptor desc;
+
+  // If there is a preferred atlas then check for room in that first
+  if ( atlas-- )
+  {
+    foundAtlas = CheckAtlas( atlas, width, height, pixelFormat, blockArea, totalBlocks );
+  }
+
+  // Search current atlases to see if there is a good match
+
+  while( !foundAtlas && index < mAtlasList.size() )
+  {
+    foundAtlas = CheckAtlas( index, width, height, pixelFormat, blockArea, totalBlocks );
+    ++index;
+  }
+
+  // If we can't find a suitable atlas then check the policy to determine action
+  if ( !foundAtlas-- )
+  {
+    if ( Toolkit::AtlasManager::FAIL_ON_ADD_CREATES == mAddFailPolicy )
+    {
+      SizeType newAtlas = CreateAtlas( mNewAtlasSize.x, mNewAtlasSize.y, mNewBlockSize.x, mNewBlockSize.y, pixelFormat );
+      if ( !newAtlas-- )
+      {
+        return;
+      }
+      else
+      {
+        foundAtlas = CheckAtlas( newAtlas, width, height, pixelFormat, blockArea, totalBlocks );
+      }
+    }
+
+    if ( Toolkit::AtlasManager::FAIL_ON_ADD_FAILS == mAddFailPolicy || !foundAtlas-- )
+    {
+      // Haven't found an atlas for this image!!!!!!
+          return;
+    }
+  }
+
+  // Work out where the blocks are we're going to use
+  for ( SizeType i = 0; i < blockArea; ++i )
+  {
+    // Is there currently a next free block available ?
+    if ( mAtlasList[ foundAtlas ].mNextFreeBlock )
+    {
+      // Yes, so use this for our next block
+      SizeType selectedBlock = mAtlasList[ foundAtlas ].mNextFreeBlock - 1u;
+      desc.mBlocksList.PushBack( selectedBlock );
+
+      // Any blocks going to be available after this one (adjust to store +1 )?
+      selectedBlock++;
+      selectedBlock++;
+      if ( selectedBlock > totalBlocks )
+      {
+        // No so start trying to use free blocks list
+        selectedBlock = 0;
+      }
+      mAtlasList[ foundAtlas ].mNextFreeBlock = selectedBlock;
+    }
+    else
+    {
+      // Our next block must be from the free list, fetch from the start of the list
+      desc.mBlocksList.PushBack( mAtlasList[ foundAtlas ].mFreeBlocksList[ 0 ] );
+      mAtlasList[ foundAtlas ].mFreeBlocksList.Remove( mAtlasList[ foundAtlas ].mFreeBlocksList.Begin() );
+    }
+  }
+
+  desc.mImageWidth = width;
+  desc.mImageHeight = height;
+  desc.mAtlasId = foundAtlas + 1u;
+  desc.mCount = 1u;
+
+  // See if there's a previously freed image ID that we can assign to this new image
+  uint32_t imageId = 0;
+  for ( uint32_t i = 0; i < mImageList.size(); ++i )
+  {
+    if ( !mImageList[ i ].mCount )
+    {
+      imageId = i + 1u;
+      break;
+    }
+  }
+  if ( !imageId )
+  {
+    mImageList.push_back( desc );
+    slot.mImageId = mImageList.size();
+  }
+  else
+  {
+    mImageList[ imageId - 1u ] = desc;
+    slot.mImageId = imageId;
+  }
+  slot.mAtlasId = foundAtlas + 1u;
+  UploadImage( image, desc );
+}
+
+AtlasManager::SizeType AtlasManager::CheckAtlas( SizeType atlas,
+                                                 SizeType width,
+                                                 SizeType height,
+                                                 Pixel::Format pixelFormat,
+                                                 SizeType& blockArea,
+                                                 SizeType& totalBlocks )
+{
+  if ( pixelFormat == mAtlasList[ atlas ].mPixelFormat )
+  {
+    // Check to see if there are any unused blocks in this atlas to accomodate our image
+    SizeType blocksInX = mAtlasList[ atlas ].mWidth / mAtlasList[ atlas ].mBlockWidth;
+    SizeType blocksInY = mAtlasList[ atlas ].mHeight / mAtlasList[ atlas ].mBlockHeight;
+    totalBlocks = blocksInX * blocksInY;
+    SizeType blocksFree = mAtlasList[ atlas ].mNextFreeBlock ?
+                          totalBlocks - mAtlasList[ atlas ].mNextFreeBlock + 1u :
+                          mAtlasList[ atlas ].mFreeBlocksList.Size();
+
+    // Check to see if the image will fit in these blocks, if not we'll need to create a new atlas
+    if ( blocksFree
+         && width + DOUBLE_PIXEL_PADDING <= mAtlasList[ atlas ].mBlockWidth
+         && height + DOUBLE_PIXEL_PADDING <= mAtlasList[ atlas ].mBlockHeight )
+    {
+      blockArea = 1u;
+      return ( atlas + 1u );
+    }
+  }
+  return 0;
+}
+
+void AtlasManager::CreateMesh( SizeType atlas,
+                               SizeType imageWidth,
+                               SizeType imageHeight,
+                               const Vector2& position,
+                               SizeType widthInBlocks,
+                               SizeType heightInBlocks,
+                               Dali::MeshData& meshData,
+                               AtlasSlotDescriptor& desc )
+{
+  Dali::MeshData::Vertex vertex;
+  Dali::MeshData::VertexContainer vertices;
+  Dali::MeshData::FaceIndices faces;
+  Dali::MeshData::FaceIndex faceIndex = 0;
+  meshData.SetHasNormals( false );
+  meshData.SetHasColor( true );
+  meshData.SetHasTextureCoords( true );
+
+  SizeType blockWidth = mAtlasList[ atlas ].mBlockWidth;
+  SizeType blockHeight = mAtlasList[ atlas ].mBlockHeight;
+
+  float vertexBlockWidth = static_cast< float >( blockWidth );
+  float vertexBlockHeight = static_cast< float >( blockHeight );
+
+  SizeType width = mAtlasList[ atlas ].mWidth;
+  SizeType height = mAtlasList[ atlas ].mHeight;
+
+  SizeType atlasWidthInBlocks = width / blockWidth;
+
+  // Get the normalized size of a texel in both directions
+  // TODO when texture resizing and passing texture size via uniforms is available,
+  //      we will encode pixel positions into the vertex data rather than normalized
+  //      meaning that geometry needn't be changed on an atlas resize
+  float texelX = 1.0f / static_cast< float >( width );
+  float texelY = 1.0f / static_cast< float >( height );
+
+  // Get the normalized size of a block in texels
+  float texelBlockWidth = texelX * vertexBlockWidth;
+  float texelBlockHeight = texelY * vertexBlockHeight;
+
+  // Get partial block space
+  float vertexEdgeWidth = static_cast< float >( imageWidth % blockWidth );
+  float vertexEdgeHeight = static_cast< float >( imageHeight % blockHeight );
+
+  // And in texels
+  float texelEdgeWidth = vertexEdgeWidth * texelX;
+  float texelEdgeHeight = vertexEdgeHeight * texelY;
+
+   // Block by block create the two triangles for the quad
+  SizeType blockIndex = 0;
+  float ndcWidth;
+  float ndcHeight;
+  float ndcVWidth;
+  float ndcVHeight;
+
+  Vector2 topLeft = position;
+
+  for ( SizeType y = 0; y < heightInBlocks; ++y )
+  {
+
+    float currentX = position.x;
+
+    if ( ( heightInBlocks - 1u ) == y && vertexEdgeHeight > 0.0f )
+    {
+      ndcHeight = texelEdgeHeight;
+      ndcVHeight = vertexEdgeHeight;
+    }
+    else
+    {
+      ndcHeight = texelBlockHeight;
+      ndcVHeight = vertexBlockHeight;
+    }
+
+    for ( SizeType x = 0; x < widthInBlocks; ++x )
+    {
+      SizeType block = desc.mBlocksList[ blockIndex++ ];
+
+      float fBlockX = texelBlockWidth * static_cast< float >( block % atlasWidthInBlocks );
+      float fBlockY = texelBlockHeight * static_cast< float >( block / atlasWidthInBlocks );
+
+      // Add on texture filtering compensation
+      fBlockX += texelX;
+      fBlockY += texelY;
+
+      if (  ( widthInBlocks - 1u ) == x && vertexEdgeWidth > 0.0f )
+      {
+        ndcWidth = texelEdgeWidth;
+        ndcVWidth = vertexEdgeWidth;
+      }
+      else
+      {
+        ndcWidth = texelBlockWidth;
+        ndcVWidth = vertexBlockWidth;
+      }
+
+      // Top left
+      vertex.x = topLeft.x;
+      vertex.y = topLeft.y;
+      vertex.z = 0.0f;
+      vertex.u = fBlockX;
+      vertex.v = fBlockY;
+
+      vertices.push_back( vertex );
+
+      // Top Right
+      vertex.x = topLeft.x + ndcVWidth;
+      vertex.y = topLeft.y;
+      vertex.z = 0.0f;
+      vertex.u = fBlockX + ndcWidth;
+      vertex.v = fBlockY;
+
+      vertices.push_back( vertex );
+
+      // Bottom Left
+      vertex.x = topLeft.x;
+      vertex.y = topLeft.y + ndcVHeight;
+      vertex.z = 0.0f;
+      vertex.u = fBlockX;
+      vertex.v = fBlockY + ndcHeight;
+
+      vertices.push_back( vertex );
+
+      // Bottom Right
+      topLeft.x += ndcVWidth;
+      vertex.x = topLeft.x;
+      vertex.y = topLeft.y + ndcVHeight;
+      vertex.z = 0.0f;
+      vertex.u = fBlockX + ndcWidth;
+      vertex.v = fBlockY + ndcHeight;
+
+      vertices.push_back( vertex );
+
+      // Six indices in counter clockwise winding
+      faces.push_back( faceIndex + 1u );
+      faces.push_back( faceIndex );
+      faces.push_back( faceIndex + 2u );
+      faces.push_back( faceIndex + 2u );
+      faces.push_back( faceIndex + 3u );
+      faces.push_back( faceIndex + 1u );
+      faceIndex += 4;
+    }
+
+    // Move down a row
+    topLeft.x = currentX;
+    topLeft.y += vertexBlockHeight;
+  }
+
+  // If there's only one block then skip this next vertex optimisation
+  if ( widthInBlocks * heightInBlocks > 1 )
+  {
+    Dali::MeshData::VertexContainer optimizedVertices;
+    OptimizeVertices( vertices, faces, optimizedVertices );
+    meshData.SetVertices( optimizedVertices );
+  }
+  else
+  {
+    meshData.SetVertices( vertices );
+  }
+
+  meshData.SetFaceIndices( faces );
+  meshData.SetMaterial( mAtlasList[ atlas ].mMaterial );
+}
+
+void AtlasManager::PrintMeshData( const MeshData& meshData )
+{
+  std::cout << "\nMesh Data for Image: VertexCount = " << meshData.GetVertexCount();
+  std::cout << ", Triangles = " << meshData.GetFaceCount() << std::endl;
+
+  Dali::MeshData::VertexContainer vertices = meshData.GetVertices();
+  Dali::MeshData::FaceIndices faces = meshData.GetFaces();
+
+  for ( SizeType v = 0; v < vertices.size(); ++v )
+  {
+    std::cout << " Vertex(" << v << ") x = " << vertices[v].x << ", ";
+    std::cout << "y = " << vertices[v].y << ", " << "z = " << vertices[v].z << ", ";
+    std::cout << "u = " << vertices[v].u << ", " << "v = " << vertices[v].v << std::endl;
+  }
+
+  std::cout << "\n Indices: ";
+  for ( SizeType i = 0; i < faces.size(); ++i )
+  {
+    std::cout << " " << faces[ i ];
+  }
+  std::cout << std::endl;
+}
+
+void AtlasManager::OptimizeVertices( const MeshData::VertexContainer& in,
+                                     MeshData::FaceIndices& faces,
+                                     MeshData::VertexContainer& out )
+{
+  unsigned short vertexIndex = 0;
+
+  // We could check to see if blocks are next to each other, but it's probably just as quick to compare verts
+  for ( SizeType i = 0; i < faces.size(); ++i )
+  {
+    // Fetch a vertex, has it already been assigned?
+    bool foundVertex = false;
+    Dali::MeshData::Vertex v = in[ faces [ i ] ];
+    for ( SizeType j = 0; j < vertexIndex; ++j )
+    {
+      if ( v.x == out[ j ].x && v.y == out[ j ].y && v.z == out[ j ].z &&
+           v.u == out[ j ].u && v.v == out[ j ].v && v.nX == out[ j ].nX &&
+           v.nY == out[ j ].nY && v.nZ == out[ j ].nZ )
+      {
+        // Yes, so store this down as the vertex to use
+        faces[ i ] = j;
+        foundVertex = true;
+        break;
+      }
+    }
+
+    // Did we find a vertex ?
+    if ( !foundVertex )
+    {
+      // Add a new vertex
+      faces[ i ] = vertexIndex++;
+      out.push_back( v );
+    }
+  }
+}
+
+void AtlasManager::StitchMesh( MeshData& first,
+                               const MeshData& second,
+                               bool optimize )
+{
+
+  // Would be much quicker to be able to get a non-const reference to these containers and update in situ
+  MeshData::VertexContainer v1 = first.GetVertices();
+  MeshData::VertexContainer v2 = second.GetVertices();
+  MeshData::FaceIndices f1 = first.GetFaces();
+  MeshData::FaceIndices f2 = second.GetFaces();
+
+  uint32_t vc1 = first.GetVertexCount();
+  uint32_t vc2 = second.GetVertexCount();
+
+  for ( uint32_t v = 0; v < vc2; ++v )
+  {
+    v1.push_back( v2[ v ] );
+  }
+
+  for ( uint32_t f = 0; f < f2.size(); ++f )
+  {
+    f1.push_back( f2[ f ] + vc1 );
+  }
+
+  if ( optimize )
+  {
+    MeshData::VertexContainer optimizedVertices;
+    OptimizeVertices( v1, f1, optimizedVertices );
+    first.SetVertices( optimizedVertices );
+  }
+  else
+  {
+    first.SetVertices( v1 );
+  }
+
+  first.SetFaceIndices( f1 );
+}
+
+void AtlasManager::StitchMesh( const MeshData& first,
+                               const MeshData& second,
+                               MeshData& out,
+                               bool optimize )
+{
+  MeshData::VertexContainer v1 = first.GetVertices();
+  MeshData::VertexContainer v2 = second.GetVertices();
+  MeshData::FaceIndices f1 = first.GetFaces();
+  MeshData::FaceIndices f2 = second.GetFaces();
+
+  uint32_t vc1 = first.GetVertexCount();
+  uint32_t vc2 = second.GetVertexCount();
+
+  MeshData::VertexContainer vertices;
+
+  MeshData::FaceIndices faces;
+
+  MeshData::Vertex vertex;
+
+  for ( uint32_t v = 0; v < vc1; ++v )
+  {
+    vertices.push_back( v1[ v ] );
+  }
+
+  for ( uint32_t v = 0; v < vc2; ++v )
+  {
+    vertices.push_back( v2[ v  ] );
+  }
+
+  for ( uint32_t f = 0; f < f1.size(); ++f )
+  {
+    faces.push_back( f1[ f ] );
+  }
+
+  for ( uint32_t f = 0; f < f2.size(); ++f )
+  {
+    faces.push_back( f2[ f ] + vc1 );
+  }
+
+  if ( optimize )
+  {
+    MeshData::VertexContainer optimizedVertices;
+    OptimizeVertices( vertices, faces, optimizedVertices );
+    out.SetVertices( optimizedVertices );
+  }
+  else
+  {
+    out.SetVertices( vertices );
+  }
+
+  out.SetMaterial( first.GetMaterial() );
+  out.SetFaceIndices( faces );
+}
+
+void AtlasManager::UploadImage( const BufferImage& image,
+                                const AtlasSlotDescriptor& desc )
+{
+  // Get the atlas to upload the image to
+  SizeType atlas = desc.mAtlasId - 1u;
+
+  // Check to see that the pixel formats are compatible
+  if ( image.GetPixelFormat() != mAtlasList[ atlas ].mPixelFormat )
+  {
+    DALI_LOG_ERROR("Cannot upload an image with a different PixelFormat to the Atlas.\n");
+    return;
+  }
+
+  SizeType atlasBlockWidth = mAtlasList[ atlas ].mBlockWidth;
+  SizeType atlasBlockHeight = mAtlasList[ atlas ].mBlockHeight;
+  SizeType atlasWidthInBlocks = mAtlasList[ atlas ].mWidth / mAtlasList[ atlas ].mBlockWidth;
+
+  SizeType block = desc.mBlocksList[ 0 ];
+  SizeType blockX = block % atlasWidthInBlocks;
+  SizeType blockY = block / atlasWidthInBlocks;
+  SizeType blockOffsetX = blockX * atlasBlockWidth;
+  SizeType blockOffsetY = blockY * atlasBlockHeight;
+
+  SizeType width = image.GetWidth();
+  SizeType height = image.GetHeight();
+
+  // Blit image 1 pixel to the right and down into the block to compensate for texture filtering
+  if ( !mAtlasList[ atlas ].mAtlas.Upload( image,
+                                           blockOffsetX + SINGLE_PIXEL_PADDING,
+                                           blockOffsetY + SINGLE_PIXEL_PADDING ) )
+  {
+    DALI_LOG_ERROR("Uploading image to Atlas Failed!.\n");
+  }
+
+  // If this is the first block then we need to keep the first pixel free for underline texture
+  if ( block )
+  {
+
+    // Blit top strip
+    if ( !mAtlasList[ atlas ].mAtlas.Upload( mAtlasList[ atlas ].mHorizontalStrip,
+                                             blockOffsetX,
+                                             blockOffsetY ) )
+    {
+      DALI_LOG_ERROR("Uploading top strip to Atlas Failed!\n");
+    }
+
+    // Blit left strip
+    if ( !mAtlasList[ atlas ].mAtlas.Upload( mAtlasList[ atlas ].mVerticalStrip,
+                                             blockOffsetX,
+                                             blockOffsetY + SINGLE_PIXEL_PADDING ) )
+    {
+      DALI_LOG_ERROR("Uploading left strip to Atlas Failed!\n");
+    }
+  }
+
+  // Blit bottom strip
+  if ( blockOffsetY + height + DOUBLE_PIXEL_PADDING <= mAtlasList[ atlas ].mHeight )
+  {
+    if ( !mAtlasList[ atlas ].mAtlas.Upload( mAtlasList[ atlas ].mHorizontalStrip,
+                                             blockOffsetX,
+                                             blockOffsetY + height + SINGLE_PIXEL_PADDING ) )
+    {
+      DALI_LOG_ERROR("Uploading bottom strip to Atlas Failed!.\n");
+    }
+  }
+
+  // Blit right strip
+  if ( blockOffsetX + width + DOUBLE_PIXEL_PADDING <= mAtlasList[ atlas ].mWidth )
+  {
+    if ( !mAtlasList[ atlas ].mAtlas.Upload( mAtlasList[ atlas ].mVerticalStrip,
+                                             blockOffsetX + width + SINGLE_PIXEL_PADDING,
+                                             blockOffsetY + SINGLE_PIXEL_PADDING ) )
+    {
+      DALI_LOG_ERROR("Uploading right strip to Atlas Failed!.\n");
+    }
+  }
+}
+
+void AtlasManager::GenerateMeshData( ImageId id,
+                                     const Vector2& position,
+                                     MeshData& meshData )
+{
+  // Read the atlas Id to use for this image
+  SizeType imageId = id - 1u;
+  SizeType atlas = mImageList[ imageId ].mAtlasId - 1u;
+  SizeType width = mImageList[ imageId ].mImageWidth;
+  SizeType height = mImageList[ imageId ].mImageHeight;
+
+  SizeType widthInBlocks = width / mAtlasList[ atlas ].mBlockWidth;
+  if ( width % mAtlasList[ atlas ].mBlockWidth )
+  {
+    widthInBlocks++;
+  }
+  SizeType heightInBlocks = height / mAtlasList[ atlas ].mBlockHeight;
+  if ( height % mAtlasList[ atlas ].mBlockHeight )
+  {
+    heightInBlocks++;
+  }
+
+  CreateMesh( atlas, width, height, position, widthInBlocks, heightInBlocks, meshData, mImageList[ imageId ] );
+
+  // Mesh created so increase the reference count
+  mImageList[ imageId ].mCount++;
+}
+
+Dali::Atlas AtlasManager::GetAtlasContainer( AtlasId atlas ) const
+{
+  Dali::Atlas null;
+  if ( !atlas || atlas > mAtlasList.size( ) )
+  {
+
+    DALI_LOG_ERROR("Cannot get Atlas from AtlasID ( doesn't exist ).\n");
+    return null;
+  }
+  return mAtlasList[ atlas -1u ].mAtlas;
+}
+
+bool AtlasManager::Remove( ImageId id )
+{
+  // Decrements the reference count of this image, and removes the blocks if zero.
+  SizeType imageId = id - 1u;
+  bool removed = false;
+
+  if ( id > mImageList.size() )
+     {
+    DALI_LOG_ERROR("Atlas was asked to free an invalid imageID: %i\n", id );
+    return false;
+  }
+
+  // If we attempt to free an image that is already freed then do nothing, other than log
+  if ( !mImageList[ imageId ].mCount )
+  {
+    DALI_LOG_ERROR("Atlas was asked to free an imageID: %i, that has already been freed!\n", id );
+    return false;
+  }
+
+  if ( 1u == --mImageList[ imageId ].mCount )
+  {
+    // 'Remove the blocks' from this image and add to the atlas' freelist
+    removed = true;
+    mImageList[ imageId ].mCount = 0;
+    SizeType atlas = mImageList[ imageId ].mAtlasId - 1u;
+    for ( uint32_t i = 0; i < mImageList[ imageId ].mBlocksList.Size(); ++i )
+    {
+      mAtlasList[ atlas ].mFreeBlocksList.PushBack( mImageList[ imageId ].mBlocksList[ i ] );
+    }
+  }
+  return removed;
+}
+
+AtlasManager::AtlasId AtlasManager::GetAtlas( ImageId id ) const
+{
+  if ( id && id <= mImageList.size() )
+  {
+    return mImageList[ id - 1u ].mAtlasId;
+  }
+  else
+  {
+    return 0;
+  }
+}
+
+void AtlasManager::SetNewAtlasSize( const Vector2& size,
+                                    const Vector2& blockSize )
+{
+  mNewAtlasSize = size;
+  mNewBlockSize = blockSize;
+}
+
+Vector2 AtlasManager::GetBlockSize( AtlasId atlas )
+{
+  if ( atlas && atlas <= mAtlasList.size() )
+  {
+  return Vector2( static_cast< float >( mAtlasList[ atlas - 1u ].mBlockWidth ),
+                  static_cast< float >( mAtlasList[ atlas - 1u ].mBlockHeight) );
+  }
+  else
+  {
+    return Vector2::ZERO;
+  }
+}
+
+Vector2 AtlasManager::GetAtlasSize( AtlasId atlas )
+{
+  if ( atlas && atlas <= mAtlasList.size() )
+  {
+    return Vector2( static_cast< float >( mAtlasList[ atlas - 1u ].mWidth ),
+                    static_cast< float >( mAtlasList[ atlas - 1u ].mHeight ) );
+  }
+  else
+  {
+    return Vector2::ZERO;
+  }
+}
+
+AtlasManager::SizeType AtlasManager::GetFreeBlocks( AtlasId atlas ) const
+{
+  if ( atlas && atlas <= mAtlasList.size() )
+  {
+    uint32_t index = atlas - 1u;
+    uint32_t width = mAtlasList[ index ].mWidth;
+    uint32_t height = mAtlasList[ index ].mHeight;
+    uint32_t blockWidth = mAtlasList[ index ].mBlockWidth;
+    uint32_t blockHeight = mAtlasList[ index ].mBlockHeight;
+
+    SizeType widthInBlocks = width / blockWidth;
+    SizeType heightInBlocks = height / blockHeight;
+    uint32_t blockCount = widthInBlocks * heightInBlocks;
+
+    // Check free previously unallocated blocks and any free blocks
+    blockCount -= mAtlasList[ index ].mNextFreeBlock - mAtlasList[ index ].mFreeBlocksList.Size();
+    return blockCount;
+  }
+  else
+  {
+    return 0;
+  }
+}
+
+AtlasManager::SizeType AtlasManager::GetAtlasCount() const
+{
+  return mAtlasList.size();
+}
+
+Pixel::Format AtlasManager::GetPixelFormat( AtlasId atlas )
+{
+  if ( !atlas || atlas > mAtlasList.size( ) )
+  {
+
+    DALI_LOG_ERROR("Cannot get Atlas from AtlasID ( doesn't exist ).\n");
+    return Pixel::L8;
+  }
+  return mAtlasList[ atlas -1u ].mPixelFormat;
+}
+
+void AtlasManager::GetMetrics( Toolkit::AtlasManager::Metrics& metrics )
+{
+  Toolkit::AtlasManager::AtlasMetricsEntry entry;
+  uint32_t textureMemoryUsed = 0;
+  uint32_t atlasCount = mAtlasList.size();
+  metrics.mAtlasCount = atlasCount;
+  metrics.mAtlasMetrics.Resize(0);
+
+  for ( uint32_t i = 0; i < atlasCount; ++i )
+  {
+    SizeType width = mAtlasList[ i ].mWidth;
+    SizeType height = mAtlasList[ i ].mHeight;
+    SizeType blockWidth = mAtlasList[ i ].mBlockWidth;
+    SizeType blockHeight = mAtlasList[ i ].mBlockHeight;
+
+    entry.mWidth = width;
+    entry.mHeight = height;
+    entry.mBlockWidth = blockWidth;
+    entry.mBlockHeight = blockHeight;
+    entry.mTotalBlocks = ( width / blockWidth ) * ( height / blockHeight );
+    uint32_t reuseBlocks = mAtlasList[ i ].mFreeBlocksList.Size();
+    entry.mBlocksUsed = mAtlasList[ i ].mNextFreeBlock ? mAtlasList[ i ].mNextFreeBlock - reuseBlocks - 1u: entry.mTotalBlocks - reuseBlocks;
+    entry.mPixelFormat = GetPixelFormat( i + 1 );
+
+      metrics.mAtlasMetrics.PushBack( entry );
+
+    uint32_t size = width * height;
+    if ( entry.mPixelFormat == Pixel::BGRA8888 )
+    {
+      size <<= 2;
+    }
+
+    textureMemoryUsed += size;
+
+  }
+  metrics.mTextureMemoryUsed = textureMemoryUsed;
+}
+
+
+} // namespace Internal
+
+} // namespace Toolkit
+
+} // namespace Dali
+
+
diff --git a/dali-toolkit/internal/atlas-manager/atlas-manager-impl.h b/dali-toolkit/internal/atlas-manager/atlas-manager-impl.h
new file mode 100644 (file)
index 0000000..0656da7
--- /dev/null
@@ -0,0 +1,249 @@
+#ifndef __DALI_TOOLKIT_ATLAS_MANAGER_IMPL_H__
+#define __DALI_TOOLKIT_ATLAS_MANAGER_IMPL_H__
+
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/common/vector-wrapper.h>
+#include <dali/public-api/object/base-object.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/internal/atlas-manager/atlas-manager.h>
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+class AtlasManager;
+
+} // namespace Toolkit
+
+namespace Toolkit
+{
+
+namespace Internal
+{
+
+typedef Dali::Vector< Toolkit::AtlasManager::AtlasSlot > slotContainer;
+
+class AtlasManager;
+typedef IntrusivePtr<AtlasManager> AtlasManagerPtr;
+
+class AtlasManager : public Dali::BaseObject
+{
+public:
+
+  typedef uint32_t SizeType;
+  typedef SizeType AtlasId;
+  typedef SizeType ImageId;
+
+  /**
+   * @brief Internal storage of atlas attributes and image upload results
+   */
+  struct AtlasDescriptor
+  {
+    Dali::Atlas mAtlas;                                                 // atlas image
+    SizeType mWidth;                                                    // width of atlas
+    SizeType mHeight;                                                   // height of atlas
+    SizeType mBlockWidth;                                               // width of a block in atlas
+    SizeType mBlockHeight;                                              // height of a block in atlas
+    Pixel::Format mPixelFormat;                                         // pixel format used by atlas
+    BufferImage mHorizontalStrip;                                       // Image used to pad upload
+    BufferImage mVerticalStrip;                                         // Image used to pad upload
+    BufferImage mFilledPixelImage;                                      // Image used by atlas for operations such as underline
+    PixelBuffer* mStripBuffer;                                          // Blank image buffer used to pad upload
+    Material mMaterial;                                                 // material used for atlas texture
+    SizeType mNextFreeBlock;                                            // next free block will be placed here ( actually +1 )
+    Dali::Vector< SizeType > mFreeBlocksList;                           // unless there are any previously freed blocks
+  };
+
+  struct AtlasSlotDescriptor
+  {
+    SizeType mCount;                                                    // Reference count for this slot
+    SizeType mImageWidth;                                               // Width of image stored
+    SizeType mImageHeight;                                              // Height of image stored
+    AtlasId mAtlasId;                                                   // Image is stored in this Atlas
+    Dali::Vector< SizeType > mBlocksList;                               // List of blocks within atlas used for image
+  };
+
+  AtlasManager();
+
+  /**
+   * Create a new AtlasManager
+   */
+  static AtlasManagerPtr New();
+
+  virtual ~AtlasManager();
+
+  /**
+   * @copydoc: Toolkit::AtlasManager::CreateAtlas
+   */
+  AtlasId CreateAtlas( SizeType width,
+                       SizeType height,
+                       SizeType blockWidth,
+                       SizeType blockHeight,
+                       Pixel::Format pixelformat );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::SetAddPolicy
+   */
+  void SetAddPolicy( Toolkit::AtlasManager::AddFailPolicy policy );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::Add
+   */
+  void Add( const BufferImage& image,
+            Toolkit::AtlasManager::AtlasSlot& slot,
+            Toolkit::AtlasManager::AtlasId atlas );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::GenerateMeshData
+   */
+  void GenerateMeshData( ImageId id,
+                         const Vector2& position,
+                         MeshData& mesh );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::StitchMesh
+   */
+  void StitchMesh( MeshData& first,
+                   const MeshData& second,
+                   bool optimize );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::StitchMesh
+   */
+  void StitchMesh( const MeshData& first,
+                   const MeshData& second,
+                   MeshData& out, bool optimize );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::Remove
+   */
+  bool Remove( ImageId id );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::GetAtlasContainer
+   */
+  Dali::Atlas GetAtlasContainer( AtlasId atlas ) const;
+
+  /**
+   * @copydoc Toolkit::AtlasManager::GetAtlas
+   */
+  AtlasId GetAtlas( ImageId id ) const;
+
+  /**
+   * @copydoc Toolkit::AtlasManager::SetNewAtlasSize
+   */
+  void SetNewAtlasSize( const Vector2& size,
+                        const Vector2& blockSize );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::GetAtlasSize
+   */
+  Vector2 GetAtlasSize( AtlasId atlas );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::GetBlockSize
+   */
+  Vector2 GetBlockSize( AtlasId atlas );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::GetFreeBlocks
+   */
+  SizeType GetFreeBlocks( AtlasId atlas ) const;
+
+  /*
+   * @copydoc Toolkit::AtlasManager::GetAtlasCount
+   */
+  SizeType GetAtlasCount() const;
+
+  /**
+   * @copydoc Toolkit::AtlasManager::GetPixelFormat
+   */
+  Pixel::Format GetPixelFormat( AtlasId atlas );
+
+  /**
+   * @copydoc Toolkit::AtlasManager::GetMetrics
+   */
+  void GetMetrics( Toolkit::AtlasManager::Metrics& metrics );
+
+private:
+
+  std::vector< AtlasDescriptor > mAtlasList;        // List of atlases created
+  std::vector< AtlasSlotDescriptor > mImageList;  // List of bitmaps store in atlases
+
+  SizeType CheckAtlas( SizeType atlas,
+                       SizeType width,
+                       SizeType height,
+                       Pixel::Format pixelFormat,
+                       SizeType& blockArea,
+                       SizeType& totalBlocks );
+
+  void CreateMesh( SizeType atlas,
+                   SizeType imageWidth,
+                   SizeType imageHeight,
+                   const Vector2& position,
+                   SizeType widthInBlocks,
+                   SizeType heightInBlocks,
+                   Dali::MeshData& meshData,
+                   AtlasSlotDescriptor& desc );
+
+  void OptimizeVertices( const MeshData::VertexContainer& in,
+                         MeshData::FaceIndices& faces,
+                         MeshData::VertexContainer& out );
+
+  void UploadImage( const BufferImage& image,
+                    const AtlasSlotDescriptor& desc );
+
+  void PrintMeshData( const MeshData& meshData );
+
+  Vector2 mNewAtlasSize;
+  Vector2 mNewBlockSize;
+  Toolkit::AtlasManager::AddFailPolicy mAddFailPolicy;
+  uint32_t mFilledPixel;
+};
+
+} // namespace Internal
+
+inline const Internal::AtlasManager& GetImplementation(const Toolkit::AtlasManager& manager)
+{
+  DALI_ASSERT_ALWAYS( manager && "AtlasManager handle is empty" );
+
+  const BaseObject& handle = manager.GetBaseObject();
+
+  return static_cast<const Internal::AtlasManager&>(handle);
+}
+
+inline Internal::AtlasManager& GetImplementation(Toolkit::AtlasManager& manager)
+{
+  DALI_ASSERT_ALWAYS( manager && "AtlasManager handle is empty" );
+
+  BaseObject& handle = manager.GetBaseObject();
+
+  return static_cast<Internal::AtlasManager&>(handle);
+}
+
+} // namespace Toolkit
+
+} // namespace Dali
+
+
+ #endif // __DALI_TOOLKIT_ATLAS_MANAGER_IMPL_H__
\ No newline at end of file
diff --git a/dali-toolkit/internal/atlas-manager/atlas-manager.cpp b/dali-toolkit/internal/atlas-manager/atlas-manager.cpp
new file mode 100644 (file)
index 0000000..6d21245
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// CLASS HEADER
+#include <dali-toolkit/internal/atlas-manager/atlas-manager.h>
+
+ // INTERNAL INCLUDES
+#include <dali-toolkit/internal/atlas-manager/atlas-manager-impl.h>
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+AtlasManager::AtlasManager()
+{
+}
+
+AtlasManager::~AtlasManager()
+{
+}
+
+AtlasManager AtlasManager::New()
+{
+  Internal::AtlasManagerPtr internal = Internal::AtlasManager::New();
+  return AtlasManager(internal.Get());
+}
+
+AtlasManager::AtlasManager(Internal::AtlasManager *impl)
+  : BaseHandle(impl)
+{
+}
+
+AtlasManager::AtlasId AtlasManager::CreateAtlas( SizeType width,
+                                                 SizeType height,
+                                                 SizeType blockWidth,
+                                                 SizeType blockHeight,
+                                                 Pixel::Format pixelformat )
+{
+  return GetImplementation(*this).CreateAtlas( width, height, blockWidth, blockHeight, pixelformat );
+}
+
+void AtlasManager::SetAddPolicy( AddFailPolicy policy )
+{
+  GetImplementation(*this).SetAddPolicy( policy );
+}
+
+void AtlasManager::Add( const BufferImage& image,
+                        AtlasManager::AtlasSlot& slot,
+                        AtlasManager::AtlasId atlas )
+{
+  GetImplementation(*this).Add( image, slot, atlas );
+}
+
+bool AtlasManager::Remove( ImageId id )
+{
+  return GetImplementation(*this).Remove( id );
+}
+
+void AtlasManager::GenerateMeshData( ImageId id,
+                                     const Vector2& position,
+                                     MeshData& meshData)
+{
+  GetImplementation(*this).GenerateMeshData( id,
+                                             position,
+                                             meshData );
+}
+
+void AtlasManager::StitchMesh( MeshData& first,
+                               const MeshData& second,
+                               bool optimize )
+{
+  GetImplementation(*this).StitchMesh( first, second, optimize );
+}
+
+void AtlasManager::StitchMesh( const MeshData& first,
+                               const MeshData& second,
+                               MeshData& out,
+                               bool optimize )
+{
+  GetImplementation(*this).StitchMesh( first, second, out, optimize );
+}
+
+Dali::Atlas AtlasManager::GetAtlasContainer( AtlasId atlas ) const
+{
+  return GetImplementation(*this).GetAtlasContainer( atlas );
+}
+
+AtlasManager::AtlasId AtlasManager::GetAtlas( ImageId id )
+{
+  return GetImplementation(*this).GetAtlas( id );
+}
+
+Vector2 AtlasManager::GetBlockSize( AtlasId atlas )
+{
+  return GetImplementation(*this).GetBlockSize( atlas );
+}
+
+Vector2 AtlasManager::GetAtlasSize( AtlasId atlas )
+{
+  return GetImplementation(*this).GetAtlasSize( atlas );
+}
+
+AtlasManager::SizeType AtlasManager::GetFreeBlocks( AtlasId atlas )
+{
+  return GetImplementation(*this).GetFreeBlocks( atlas );
+}
+
+void AtlasManager::SetNewAtlasSize( const Vector2& size,
+                                    const Vector2& blockSize )
+{
+  GetImplementation(*this).SetNewAtlasSize( size, blockSize );
+}
+
+AtlasManager::SizeType AtlasManager::GetAtlasCount() const
+{
+  return GetImplementation(*this).GetAtlasCount();
+}
+
+Pixel::Format AtlasManager::GetPixelFormat( AtlasId atlas )
+{
+  return GetImplementation(*this).GetPixelFormat( atlas );
+}
+
+void AtlasManager::GetMetrics( Metrics& metrics )
+{
+  return GetImplementation(*this).GetMetrics( metrics );
+}
+
+} // namespace Toolkit
+
+} // namespace Dali
diff --git a/dali-toolkit/internal/atlas-manager/atlas-manager.h b/dali-toolkit/internal/atlas-manager/atlas-manager.h
new file mode 100644 (file)
index 0000000..9263ea4
--- /dev/null
@@ -0,0 +1,396 @@
+#ifndef __DALI_TOOLKIT_ATLAS_MANAGER_H__
+#define __DALI_TOOLKIT_ATLAS_MANAGER_H__
+
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// EXTERNAL INCLUDES
+#include <stdint.h>
+#include <dali/public-api/common/dali-vector.h>
+#include <dali/public-api/geometry/mesh-data.h>
+#include <dali/public-api/images/atlas.h>
+#include <dali/public-api/images/buffer-image.h>
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Internal DALI_INTERNAL
+{
+
+class AtlasManager;
+
+} // namespace Internal
+
+/**
+ * AtlasManager
+ * ------------
+ *
+ * Creates and manages additions and removals of images from Texture Atlases
+ *
+ * The AtlasManager will match pixeltype and optimal block use to determine
+ * the appropriate atlas to upload an image to.
+ *
+ * A policy can be specified to determine the action the AtlasManager will carry
+ * out, should it not be able to add an image. This can return an error, or create
+ * a new atlas of pre-determined dimensions to accomodate the new image.
+ *
+ * Images are referenced by an ImageId once they have been successfully uploaded.
+ *
+ * Once an image has been successfully uploaded, Geometry can be generated by passing
+ * the ImageId to the GenerateMeshData method and geometry can be consolidated via
+ * the StitchMesh method.
+ *
+ * Images are reference counted once mesh data has been generated. An image is removed
+ * from the Atlas via the Remove( ImageId ) method. This unreferences the image and only
+ * physically removes it from the atlas once all references have been freed.
+ *
+ * If the AddPolicy is set to generate and error if an image can't be uploaded, then it
+ * is the applications responsibility to deal with the situation. An error will be indicated
+ * with an ImageId of 0.
+ *
+ * Examples using the AtlasManager
+ *
+ * Create or obtain the AtlasManager
+ * @code
+ *
+ * AtlasManager manager = AtlasManager::Get();
+ *
+ * @endcode
+ *
+ * Set the AtlasManager AddPolicy
+ *
+ * @code
+ *
+ * // Tell the atlas manager to create a new atlas, if it needs to
+ * manager.SetAddPolicy( FAIL_ON_ADD_CREATES );
+ *
+ * // Tell the atlas manager to return an error, if it can't add an image
+ * manager.SetAddPolicy( FAIL_ON_ADD_FAILS );
+ *
+ * @endcode
+ *
+ * Simple add and removal of BufferImage to and from an atlas
+ *
+ * @code
+ *
+ * // Structure returned by AtlasManager operations
+ * AtlasSlot slot;
+ *
+ * // Add image to an atlas ( will be created if none suitable exists )
+ * manager.Add( bitmapImage, slot );
+ *
+ * // slot.mImage returns the imageId for the bitmap, slot.mAtlas indicates the atlasId
+ * // that the image was added to. The imageId is used to communicate with the AtlasManager
+ * uint32_t imageId = slot.mImage;
+ * if ( !imageId )
+ * {
+ *  // Addition has failed.....
+ * }
+ * ...
+ * ...
+ * // Done with image, so remove from atlas, if not being used elsewhere
+ * manager.Remove( imageId );
+ *
+ * @endcode
+ *
+ * Create a Specific Atlas for adding BufferImages to
+ *
+ * @code
+ *
+ * // Create an RGB888 atlas of 2048x2848, with a blocksize of 128x128
+ * uint32_t atlas = manager.CreateAtlas( 2048u, 2048u, 128u, 128u, Pixel::RGB888 );
+ *
+ * // Add an image to a preferred atlas ( note not specifying atlas may still result
+ * // in the bitmap being added to the atlas above )
+ * manager.Add( bitmapImage, slot, atlas );
+ *
+ * @endcode
+ *
+ * Create Geometry for a previously added image
+ *
+ * @code
+ *
+ * // Top left corner of geometry to be generated
+ * Vector2 position( 1.0f, 1.0f );
+ *
+ * // Geometry will end up here!
+ * MeshData meshData;
+ * manager.GenerateMeshData( imageId, position, meshData );
+ *
+ * @endcode
+ *
+ * Generating Geometry from multiple images in the same atlas
+ *
+ * @code
+ *
+ * MeshData firstMesh;
+ * MeshData secondMesh;
+ * manager.GenerateMeshData( imageid_1, position_1, firstMesh );
+ * manager.GenerateMeshData( imageid_2, position_2, secondMesh );
+ *
+ * // Combine the two meshes. Passing MESH_OPTIMIZE as an optional third parameter will remove duplicate vertices
+ * manager.StitchMesh( first, second );
+ *
+ * @endcode
+ *
+ */
+
+class AtlasManager : public BaseHandle
+{
+public:
+
+  typedef uint32_t SizeType;
+  typedef SizeType AtlasId;
+  typedef SizeType ImageId;
+  static const bool MESH_OPTIMIZE = true;
+
+  /**
+   * Metrics structures to describe Atlas Manager state
+   *
+   */
+  struct AtlasMetricsEntry
+  {
+    SizeType mWidth;                 // width of the atlas in pixels
+    SizeType mHeight;;               // height of the atlas in pixels
+    SizeType mBlockWidth;            // width of a block in pixels
+    SizeType mBlockHeight;           // height of a block in pixels
+    SizeType mBlocksUsed;            // number of blocks used in the atlas
+    SizeType mTotalBlocks;           // total blocks used by atlas
+    Pixel::Format mPixelFormat;      // pixel format of the atlas
+  };
+
+  struct Metrics
+  {
+    SizeType mAtlasCount;                               // number of atlases
+    SizeType mTextureMemoryUsed;                        // texture memory used by atlases
+    Dali::Vector< AtlasMetricsEntry > mAtlasMetrics;    // container of atlas information
+  };
+
+  /**
+   * Create an AtlasManager handle; this can be initialised with AtlasManager::New()
+   * Calling member functions with an uninitialised handle is not allowed.
+   */
+  AtlasManager();
+
+  /**
+   * @brief Get new instance of AtlasManager object.
+   *
+   * @return A handle to the AtlasManager control.
+   */
+  static AtlasManager New();
+
+  /**
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
+   */
+  ~AtlasManager();
+
+  /**
+   * Policy on failing to add an image
+   */
+  enum AddFailPolicy
+  {
+    FAIL_ON_ADD_FAILS,
+    FAIL_ON_ADD_CREATES
+  };
+
+  /**
+   * @brief Container to hold result of placing texture into atlas
+   */
+  struct AtlasSlot
+  {
+    ImageId mImageId;                           // Id of stored Image
+    AtlasId mAtlasId;                           // Id of Atlas containing this slot
+  };
+
+  typedef Dali::Vector< AtlasManager::AtlasSlot > slotContainer;
+
+  /**
+   * @brief Create a blank atlas of specific dimensions and pixel format with a certain block size
+   *
+   * @param[in] width desired atlas width in pixels
+   * @param[in] height desired atlas height in pixels
+   * @param[in] blockWidth block width to use in atlas in pixels
+   * @param[in] blockHeight block height to use in atlas in pixels
+   * @param[in] pixelformat format of a pixel in atlas
+   *
+   * @return atlas Id
+   */
+  AtlasId CreateAtlas(  SizeType width,
+                        SizeType height,
+                        SizeType blockWidth,
+                        SizeType blockHeight,
+                        Pixel::Format pixelformat = Pixel::RGBA8888 );
+
+  /**
+   * @brief Set the policy on failure to add an image to an atlas
+   *
+   * @param policy policy to carry out if add fails
+   */
+  void SetAddPolicy( AddFailPolicy policy );
+
+  /**
+   * @brief Attempts to add an image to the most suitable atlas
+   *
+   * @details Add Policy may dictate that a new atlas is created if it can't presently be placed.
+   *          If an add is made before an atlas is created under this policy,
+   *          then a default size atlas will be created
+   *
+   * @param[in] image reference to a bitmapimage
+   * @param[out] slot result of add operation
+   * @param[in] atlas optional preferred atlas
+   */
+  void Add( const BufferImage& image,
+            AtlasSlot& slot,
+            AtlasId atlas = 0 );
+
+  /**
+   * @brief Remove previously added bitmapimage from atlas
+   *
+   * @param[in] id ImageId returned in the AtlasSlot from the add operation
+   *
+   * @return if true then image has been removed from the atlas
+   */
+  bool Remove( ImageId id );
+
+  /**
+   * @brief Generate mesh data for a previously added image
+   *
+   * @param[in] id Image Id returned in the AtlasSlot from the add operation
+   * @param[in] position position of the resulting mesh in model space
+   * @param[out] mesh Mesh Data Object to populate with mesh data
+   */
+  void GenerateMeshData( ImageId id,
+                         const Vector2& position,
+                         MeshData& mesh );
+
+  /**
+   * @brief Append second mesh to the first mesh
+   *
+   * @param[in] first First mesh
+   * @param[in] second Second mesh
+   * @param[in] optimize should we optimize vertex data
+   */
+  void StitchMesh( MeshData& first,
+                   const MeshData& second,
+                   bool optimize = false );
+
+  /**
+   * @brief Combine two meshes, outputting the result into a new mesh
+   *
+   * @param[in] first First mesh
+   * @param[in] second Second mesh
+   * @param[in] optimize should we optimize vertex data
+   * @param[out] out resulting mesh
+   */
+  void StitchMesh( const MeshData& first,
+                   const MeshData& second,
+                   MeshData& out,
+                   bool optimize = false );
+
+  /**
+   * @brief Get the BufferImage containing an atlas
+   *
+   * @param[in] atlas AtlasId returned when atlas was created
+   *
+   * @return Atlas Handle
+   */
+  Dali::Atlas GetAtlasContainer( AtlasId atlas ) const;
+
+  /**
+   * @brief Get the Id of the atlas containing an image
+   *
+   * @param[in] id ImageId
+   *
+   * @return Atlas Id
+   */
+  AtlasId GetAtlas( ImageId id );
+
+  /**
+   * @brief Get the size of the blocks used in an atlas
+   *
+   * @param[in] atlas AtlasId
+   *
+   * @return width and height of the blocks used
+   */
+  Vector2 GetBlockSize( AtlasId atlas );
+
+  /**
+   * @brief Get the current size of an atlas
+   *
+   * @param[in] atlas AtlasId
+   *
+   * @return width and height of the atlas
+   */
+  Vector2 GetAtlasSize( AtlasId atlas );
+
+  /**
+   * @brief Get the number of blocks available in an atlas
+   *
+   * @param[in] atlas AtlasId
+   *
+   * @return Number of blocks free in this atlas
+   */
+  SizeType GetFreeBlocks( AtlasId atlas );
+
+  /**
+   * @brief Sets the pixel area of any new atlas and also the individual block size
+   *
+   * @param[in] size pixel area of atlas
+   *
+   * @param blockSize pixel area in atlas for a block
+   */
+  void SetNewAtlasSize( const Vector2& size,
+                        const Vector2& blockSize );
+
+  /**
+   * @brief Get the number of atlases created
+   *
+   * @return number of atlases
+   */
+  SizeType GetAtlasCount() const;
+
+  /**
+   * @brief Get the pixel format used by an atlas
+   *
+   * @param[in] atlas AtlasId
+   *
+   * @return Pixel format used by this atlas
+   */
+  Pixel::Format GetPixelFormat( AtlasId atlas );
+
+  /**
+   * @brief Fill in a metrics structure showing current status of this Atlas Manager
+   *
+   * @param[in] metrics metrics structure to be filled
+   */
+  void GetMetrics( Metrics& metrics );
+
+private:
+
+  explicit DALI_INTERNAL AtlasManager(Internal::AtlasManager *impl);
+
+};
+
+} // namespace Toolkit
+
+} // namespace Dali
+
+#endif // __DALI_TOOLKIT_ATLAS_MANAGER_H__
\ No newline at end of file
index 0d3fcd5..c42531f 100644 (file)
@@ -26,7 +26,7 @@
 #include <dali/public-api/scripting/scripting.h>
 
 // INTERNAL INCLUDES
-#include <dali-toolkit/public-api/controls/text-view/text-view.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
 
 /**
  * Button states and contents
@@ -615,9 +615,8 @@ float Button::GetAnimationTime() const
 
 void Button::SetLabel( const std::string& label )
 {
-  Toolkit::TextView textView = Toolkit::TextView::New( label );
-  textView.SetWidthExceedPolicy( Toolkit::TextView::ShrinkToFit ); // Make sure our text always fits inside the button
-  SetLabel( textView );
+  Toolkit::TextLabel textLabel = Toolkit::TextLabel::New( label );
+  SetLabel( textLabel );
 }
 
 void Button::SetLabel( Actor label )
index 1890686..3910e43 100644 (file)
@@ -23,7 +23,7 @@
 #include <dali/public-api/object/type-registry.h>
 
 // INTERNAL INCLUDES
-#include <dali-toolkit/public-api/controls/text-view/text-view.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
 
 namespace Dali
 {
@@ -579,13 +579,13 @@ Vector3 PushButton::GetNaturalSize()
   SizeOfActorIfLarger( GetBackgroundImage(), size );
 
   // If label, test against it's size
-  Toolkit::TextView textView = Toolkit::TextView::DownCast( GetLabel() );
-  if( textView )
+  Toolkit::TextLabel label = Toolkit::TextLabel::DownCast( GetLabel() );
+  if( label )
   {
-    Vector3 textViewSize = textView.GetNaturalSize();
+    Vector3 labelSize = label.GetNaturalSize();
 
-    size.width = std::max( size.width, textViewSize.width + TEXT_PADDING * 2.0f );
-    size.height = std::max( size.height, textViewSize.height + TEXT_PADDING * 2.0f );
+    size.width  = std::max( size.width,  labelSize.width  + TEXT_PADDING * 2.0f );
+    size.height = std::max( size.height, labelSize.height + TEXT_PADDING * 2.0f );
   }
 
   return size;
index eec11ab..d525a43 100644 (file)
@@ -23,7 +23,6 @@
 #include <dali/public-api/common/dali-vector.h>
 
 // INTERNAL INCLUDES
-#include <dali-toolkit/public-api/controls/text-view/text-view.h>
 #include <dali-toolkit/public-api/controls/buttons/radio-button.h>
 #include <dali-toolkit/public-api/controls/table-view/table-view.h>
 #include "button-impl.h"
index 4e486ba..e8ce9e0 100644 (file)
@@ -56,12 +56,8 @@ NavigationTitleBar::NavigationTitleBar(NavigationControl& naviControl,
   mTitleIconLayout= Toolkit::TableView::New( 3,2 );
   SetFixedSizes();
 
-  mTitle = Toolkit::TextView::New();
-  mTitle.SetTextAlignment( Toolkit::Alignment::HorizontalLeft );
-  mTitle.SetWidthExceedPolicy(Toolkit::TextView::ShrinkToFit);
-  mSubTitle = Toolkit::TextView::New();
-  mSubTitle.SetTextAlignment( Toolkit::Alignment::HorizontalLeft );
-  mSubTitle.SetWidthExceedPolicy(Toolkit::TextView::ShrinkToFit);
+  mTitle = Toolkit::TextLabel::New();
+  mSubTitle = Toolkit::TextLabel::New();
 }
 
 void NavigationTitleBar::Update( Toolkit::Page page )
@@ -113,8 +109,7 @@ void NavigationTitleBar::Update( Toolkit::Page page )
   }
 
   // add title and subtitle(if exist)
-  mTitle.SetText( page.GetTitle() );
-  mTitle.SetStyleToCurrentText(mCurrentStyle->titleTextStyle);
+  mTitle.SetProperty( Toolkit::TextLabel::Property::TEXT, page.GetTitle() );
   if( page.GetSubTitle().empty() )  //display title
   {
     mTitleLayout.SetFixedHeight( 1,mCurrentStyle->titleHeightWithoutSubtitle - mCurrentStyle->subtitleHeight );
@@ -124,8 +119,7 @@ void NavigationTitleBar::Update( Toolkit::Page page )
   {
     mTitleLayout.SetFixedHeight( 1, mCurrentStyle->titleHeightWithSubtitle );
     mTitleLayout.AddChild( mTitle, Toolkit::TableView::CellPosition(1,0) );
-    mSubTitle.SetText( page.GetSubTitle() );
-    mSubTitle.SetStyleToCurrentText(mCurrentStyle->subtitleTextStyle);
+    mSubTitle.SetProperty( Toolkit::TextLabel::Property::TEXT, page.GetSubTitle() );
     mTitleLayout.AddChild( mSubTitle, Toolkit::TableView::CellPosition(2,0) );
   }
 
index 0377a2e..c8200ed 100644 (file)
@@ -21,7 +21,7 @@
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/navigation-frame/page.h>
 #include <dali-toolkit/public-api/controls/table-view/table-view.h>
-#include <dali-toolkit/public-api/controls/text-view/text-view.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
 #include <dali-toolkit/internal/controls/navigation-frame/navigation-control-impl.h>
 #include <dali-toolkit/internal/controls/navigation-frame/navigation-bar.h>
 
@@ -81,8 +81,8 @@ private:
   Toolkit::TableView mTitleLayout;
   Toolkit::TableView mTitleIconLayout;
 
-  Toolkit::TextView  mTitle;
-  Toolkit::TextView  mSubTitle;
+  Toolkit::TextLabel  mTitle;
+  Toolkit::TextLabel  mSubTitle;
 
 };
 
index ecb3d3b..80603d8 100644 (file)
@@ -20,7 +20,6 @@
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/table-view/table-view.h>
-#include <dali-toolkit/public-api/controls/text-view/text-view.h>
 #include <dali-toolkit/internal/controls/navigation-frame/navigation-control-impl.h>
 #include <dali-toolkit/internal/controls/navigation-frame/navigation-bar.h>
 #include <dali-toolkit/public-api/controls/navigation-frame/page.h>
index 69df006..42981a3 100755 (executable)
@@ -262,26 +262,16 @@ void Popup::SetButtonAreaImage( Actor image )
 
 void Popup::SetTitle( const std::string& text )
 {
-  Toolkit::TextView titleActor = Toolkit::TextView::New();
-  titleActor.SetName( "POPUP_TITLE" );
-  titleActor.SetText( text );
-  titleActor.SetColor( Color::BLACK );
-  titleActor.SetMultilinePolicy( Toolkit::TextView::SplitByWord );
-  titleActor.SetWidthExceedPolicy( Toolkit::TextView::Split );
-  titleActor.SetLineJustification( Toolkit::TextView::Center );
-
-  SetTitle( titleActor );
-}
-
-void Popup::SetTitle( Toolkit::TextView titleActor )
-{
   // Replaces the current title actor.
   if( mPopupLayout )
   {
     mPopupLayout.RemoveChildAt( Toolkit::TableView::CellPosition( 0, 0 ) );
   }
 
-  mTitle = titleActor;
+  mTitle = Toolkit::TextLabel::New( text );
+  mTitle.SetName( "POPUP_TITLE" );
+  mTitle.SetProperty( Toolkit::TextLabel::Property::MULTI_LINE, true );
+  mTitle.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
 
   if( mPopupLayout )
   {
@@ -294,9 +284,14 @@ void Popup::SetTitle( Toolkit::TextView titleActor )
   RelayoutRequest();
 }
 
-Toolkit::TextView Popup::GetTitle() const
+std::string Popup::GetTitle() const
 {
-  return mTitle;
+  if( mTitle )
+  {
+    return mTitle.GetProperty<std::string>( Toolkit::TextLabel::Property::TEXT );
+  }
+
+  return std::string();
 }
 
 void Popup::CreateFooter()
@@ -747,7 +742,7 @@ Vector3 Popup::GetNaturalSize()
     const float titleBuffer = 0.5f;
     titleNaturalSize.width += titleBuffer;
 
-    // As TextView GetNaturalSize does not take wrapping into account, limit the width
+    // As TextLabel GetNaturalSize does not take wrapping into account, limit the width
     // to that of the stage
     if( titleNaturalSize.width >= maxWidth)
     {
index ec85966..efdac51 100755 (executable)
@@ -28,6 +28,7 @@
 #include <dali-toolkit/public-api/controls/popup/popup.h>
 #include <dali-toolkit/internal/controls/popup/popup-style-impl.h>
 #include <dali-toolkit/public-api/controls/table-view/table-view.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
 
 namespace Dali
 {
@@ -84,14 +85,9 @@ public:
   void SetTitle( const std::string& text );
 
   /**
-   * @copydoc Toolkit::Popup::SetTitle( TextView titleActor )
-   */
-  void SetTitle( Toolkit::TextView titleActor );
-
-  /**
    * @copydoc Toolkit::Popup::GetTitle
    */
-  Toolkit::TextView GetTitle() const;
+  std::string GetTitle() const;
 
   /**
    * @copydoc Toolkit::Popup::AddButton
@@ -325,7 +321,7 @@ private:
 
   Actor mBackgroundImage;                 ///< Stores the background image.
   Actor mButtonAreaImage;                 ///< Stores the button background image.
-  Toolkit::TextView mTitle;               ///< Stores the text title.
+  Toolkit::TextLabel mTitle;               ///< Stores the text title.
   Actor mContent;                         ///< Stores popup's content.
   Actor mBottomBg;                        ///< bottom button bar background. ImageActor is replaced with Actor due to hidden image.
   Actor mTailImage;                       ///< Stores the tail image
index 0cd8783..7ab8438 100755 (executable)
@@ -348,13 +348,13 @@ void Slider::DisplayValue( float value, bool raiseSignals )
     }
   }
 
-  if( mHandleValueTextView )
+  if( mHandleValueTextLabel )
   {
     std::stringstream ss;
     ss.precision( GetValuePrecision() );
     ss << std::fixed << clampledValue;
 
-    mHandleValueTextView.SetText( ss.str() );
+    mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, ss.str() );
   }
 }
 
@@ -523,13 +523,15 @@ ImageActor Slider::CreatePopupArrow()
   return arrow;
 }
 
-Toolkit::TextView Slider::CreatePopupText()
+Toolkit::TextLabel Slider::CreatePopupText()
 {
-  Toolkit::TextView textView = Toolkit::TextView::New();
-  textView.SetParentOrigin( ParentOrigin::CENTER );
-  textView.SetAnchorPoint( AnchorPoint::CENTER );
-  textView.SetZ( VALUE_DISPLAY_TEXT_Z );
-  return textView;
+  Toolkit::TextLabel textLabel = Toolkit::TextLabel::New();
+  textLabel.SetParentOrigin( ParentOrigin::CENTER );
+  textLabel.SetAnchorPoint( AnchorPoint::CENTER );
+  textLabel.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
+  textLabel.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
+  textLabel.SetZ( VALUE_DISPLAY_TEXT_Z );
+  return textLabel;
 }
 
 ImageActor Slider::CreatePopup()
@@ -539,8 +541,8 @@ ImageActor Slider::CreatePopup()
   popup.SetParentOrigin( ParentOrigin::TOP_CENTER );
   popup.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
 
-  mValueTextView = CreatePopupText();
-  popup.Add( mValueTextView );
+  mValueTextLabel = CreatePopupText();
+  popup.Add( mValueTextLabel );
 
   return popup;
 }
@@ -574,24 +576,21 @@ void Slider::ResizeHandleRegion( const Vector2& region )
 
 void Slider::CreateHandleValueDisplay()
 {
-  if( mHandle && !mHandleValueTextView )
+  if( mHandle && !mHandleValueTextLabel )
   {
-    mHandleValueTextView = Toolkit::TextView::New();
-    mHandleValueTextView.SetParentOrigin( ParentOrigin::CENTER );
-    mHandleValueTextView.SetAnchorPoint( AnchorPoint::CENTER );
-    mHandleValueTextView.SetSize( GetHandleRegion() );
-    mHandleValueTextView.SetZ( HANDLE_VALUE_DISPLAY_TEXT_Z );
-    mHandle.Add( mHandleValueTextView );
+    mHandleValueTextLabel = Toolkit::TextLabel::New();
+    mHandleValueTextLabel.SetParentOrigin( ParentOrigin::CENTER );
+    mHandleValueTextLabel.SetAnchorPoint( AnchorPoint::CENTER );
+    mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
+    mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
+    mHandleValueTextLabel.SetDrawMode( DrawMode::OVERLAY );
+    mHandle.Add( mHandleValueTextLabel );
   }
 }
 
 void Slider::DestroyHandleValueDisplay()
 {
-  if(mHandleValueTextView)
-  {
-    mHandleValueTextView.Unparent();
-    mHandleValueTextView.Reset();
-  }
+  UnparentAndReset(mHandleValueTextLabel);
 }
 
 void Slider::SetPopupTextColor( const Vector4& color )
@@ -1018,26 +1017,15 @@ bool Slider::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tr
 void Slider::DisplayPopup( float value )
 {
   // Value displayDoConnectSignal
-  if( mValueTextView )
+  if( mValueTextLabel )
   {
     std::stringstream ss;
     ss.precision( GetValuePrecision() );
     ss << std::fixed << value;
-    mValueTextView.SetText( ss.str() );
-    TextStyle style;
-    style.SetTextColor( GetPopupTextColor() );
-    mValueTextView.SetStyleToCurrentText( style, TextStyle::COLOR);
+    mValueTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, ss.str() );
 
     if( mValueDisplay )
     {
-      Font font = Font::New();
-      float popupWidth = font.MeasureText( ss.str() ).x + VALUE_POPUP_MARGIN * 2.0f;
-      if( popupWidth < VALUE_POPUP_MIN_WIDTH )
-      {
-        popupWidth = VALUE_POPUP_MIN_WIDTH;
-      }
-
-      mPopup.SetSize( popupWidth, VALUE_POPUP_HEIGHT );
       mValueDisplay.SetVisible( true );
 
       mValueTimer.SetInterval( VALUE_VIEW_SHOW_DURATION );
index 8fee62e..a8003c7 100755 (executable)
@@ -25,7 +25,7 @@
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/control-impl.h>
 #include <dali-toolkit/public-api/controls/slider/slider.h>
-#include <dali-toolkit/public-api/controls/text-view/text-view.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
 
 namespace Dali
 {
@@ -434,7 +434,7 @@ private:
    *
    * @return The textview created for the popup
    */
-  Toolkit::TextView CreatePopupText();
+  Toolkit::TextLabel CreatePopupText();
 
   /**
    * Create the value display for the slider
@@ -687,8 +687,8 @@ private:
   ImageActor mPopup;                        ///< Popup backing
   ImageActor mPopupArrow;                   ///< Popup arrow backing
 
-  Toolkit::TextView mValueTextView;         //< The text value in popup
-  Toolkit::TextView mHandleValueTextView;   ///< The text value on handle
+  Toolkit::TextLabel mValueTextLabel;         //< The text value in popup
+  Toolkit::TextLabel mHandleValueTextLabel;   ///< The text value on handle
   Vector2 mHandleLastTouchPoint;            ///< The last touch point for the handle
   Timer mValueTimer;                        ///< Timer used to hide value view
 
diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp
new file mode 100644 (file)
index 0000000..f189207
--- /dev/null
@@ -0,0 +1,646 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali-toolkit/internal/controls/text-controls/text-field-impl.h>
+
+// EXTERNAL INCLUDES
+#include <string>
+#include <dali/public-api/adaptor-framework/key.h>
+#include <dali/public-api/common/stage.h>
+#include <dali/public-api/images/resource-image.h>
+#include <dali/public-api/object/type-registry.h>
+#include <dali/public-api/object/type-registry-helper.h>
+#include <dali/public-api/scripting/scripting.h>
+#include <dali/integration-api/debug.h>
+#include <dali/public-api/adaptor-framework/virtual-keyboard.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/text/rendering-backend.h>
+#include <dali-toolkit/internal/text/layouts/layout-engine.h>
+#include <dali-toolkit/internal/text/rendering/text-backend.h>
+#include <dali-toolkit/internal/styling/style-manager-impl.h>
+
+using namespace Dali::Toolkit::Text;
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Internal
+{
+
+namespace
+{
+  const unsigned int DEFAULT_RENDERING_BACKEND = Dali::Toolkit::Text::DEFAULT_RENDERING_BACKEND;
+}
+
+namespace
+{
+
+const Scripting::StringEnum< Toolkit::Text::LayoutEngine::HorizontalAlignment > HORIZONTAL_ALIGNMENT_STRING_TABLE[] =
+{
+  { "BEGIN",  Toolkit::Text::LayoutEngine::HORIZONTAL_ALIGN_BEGIN  },
+  { "CENTER", Toolkit::Text::LayoutEngine::HORIZONTAL_ALIGN_CENTER },
+  { "END",    Toolkit::Text::LayoutEngine::HORIZONTAL_ALIGN_END    },
+};
+const unsigned int HORIZONTAL_ALIGNMENT_STRING_TABLE_COUNT = sizeof( HORIZONTAL_ALIGNMENT_STRING_TABLE ) / sizeof( HORIZONTAL_ALIGNMENT_STRING_TABLE[0] );
+
+const Scripting::StringEnum< Toolkit::Text::LayoutEngine::VerticalAlignment > VERTICAL_ALIGNMENT_STRING_TABLE[] =
+{
+  { "TOP",    Toolkit::Text::LayoutEngine::VERTICAL_ALIGN_TOP    },
+  { "CENTER", Toolkit::Text::LayoutEngine::VERTICAL_ALIGN_CENTER },
+  { "BOTTOM", Toolkit::Text::LayoutEngine::VERTICAL_ALIGN_BOTTOM },
+};
+const unsigned int VERTICAL_ALIGNMENT_STRING_TABLE_COUNT = sizeof( VERTICAL_ALIGNMENT_STRING_TABLE ) / sizeof( VERTICAL_ALIGNMENT_STRING_TABLE[0] );
+
+// Type registration
+BaseHandle Create()
+{
+  return Toolkit::TextField::New();
+}
+
+// Setup properties, signals and actions using the type-registry.
+DALI_TYPE_REGISTRATION_BEGIN( Toolkit::TextField, Toolkit::Control, Create );
+
+DALI_PROPERTY_REGISTRATION( TextField, "rendering-backend",       INTEGER,   RENDERING_BACKEND       )
+DALI_PROPERTY_REGISTRATION( TextField, "placeholder-text",        STRING,    PLACEHOLDER_TEXT        )
+DALI_PROPERTY_REGISTRATION( TextField, "text",                    STRING,    TEXT                    )
+DALI_PROPERTY_REGISTRATION( TextField, "font-family",             STRING,    FONT_FAMILY             )
+DALI_PROPERTY_REGISTRATION( TextField, "font-style",              STRING,    FONT_STYLE              )
+DALI_PROPERTY_REGISTRATION( TextField, "point-size",              FLOAT,     POINT_SIZE              )
+DALI_PROPERTY_REGISTRATION( TextField, "exceed-policy",           INTEGER,   EXCEED_POLICY           )
+DALI_PROPERTY_REGISTRATION( TextField, "primary-cursor-color",    VECTOR4,   PRIMARY_CURSOR_COLOR    )
+DALI_PROPERTY_REGISTRATION( TextField, "secondary-cursor-color",  VECTOR4,   SECONDARY_CURSOR_COLOR  )
+DALI_PROPERTY_REGISTRATION( TextField, "enable-cursor-blink",     BOOLEAN,   ENABLE_CURSOR_BLINK     )
+DALI_PROPERTY_REGISTRATION( TextField, "cursor-blink-interval",   FLOAT,     CURSOR_BLINK_INTERVAL   )
+DALI_PROPERTY_REGISTRATION( TextField, "cursor-blink-duration",   FLOAT,     CURSOR_BLINK_DURATION   )
+DALI_PROPERTY_REGISTRATION( TextField, "grab-handle-image",       STRING,    GRAB_HANDLE_IMAGE       )
+DALI_PROPERTY_REGISTRATION( TextField, "decoration-bounding-box", RECTANGLE, DECORATION_BOUNDING_BOX )
+DALI_PROPERTY_REGISTRATION( TextField, "horizontal-alignment",    STRING,    HORIZONTAL_ALIGNMENT    )
+DALI_PROPERTY_REGISTRATION( TextField, "vertical-alignment",      STRING,    VERTICAL_ALIGNMENT      )
+DALI_TYPE_REGISTRATION_END()
+
+} // namespace
+
+Toolkit::TextField TextField::New()
+{
+  // Create the implementation, temporarily owned by this handle on stack
+  IntrusivePtr< TextField > impl = new TextField();
+
+  // Pass ownership to CustomActor handle
+  Toolkit::TextField handle( *impl );
+
+  // Second-phase init of the implementation
+  // This can only be done after the CustomActor connection has been made...
+  impl->Initialize();
+
+  return handle;
+}
+
+void TextField::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
+{
+  Toolkit::TextField textField = Toolkit::TextField::DownCast( Dali::BaseHandle( object ) );
+
+  if( textField )
+  {
+    TextField& impl( GetImpl( textField ) );
+
+    switch( index )
+    {
+      case Toolkit::TextField::Property::RENDERING_BACKEND:
+      {
+        int backend = value.Get< int >();
+
+        if( impl.mRenderingBackend != backend )
+        {
+          impl.mRenderingBackend = backend;
+          impl.mRenderer.Reset();
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::PLACEHOLDER_TEXT:
+      {
+        if( impl.mController )
+        {
+          //impl.mController->SetPlaceholderText( value.Get< std::string >() ); TODO
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::TEXT:
+      {
+        if( impl.mController )
+        {
+          impl.mController->SetText( value.Get< std::string >() );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::FONT_FAMILY:
+      {
+        if( impl.mController )
+        {
+          std::string fontFamily = value.Get< std::string >();
+
+          if( impl.mController->GetDefaultFontFamily() != fontFamily )
+          {
+            impl.mController->SetDefaultFontFamily( fontFamily );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::FONT_STYLE:
+      {
+        if( impl.mController )
+        {
+          std::string fontStyle = value.Get< std::string >();
+
+          if( impl.mController->GetDefaultFontStyle() != fontStyle )
+          {
+            impl.mController->SetDefaultFontStyle( fontStyle );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::POINT_SIZE:
+      {
+        if( impl.mController )
+        {
+          float pointSize = value.Get< float >();
+
+          if( impl.mController->GetDefaultPointSize() != pointSize /*TODO - epsilon*/ )
+          {
+            impl.mController->SetDefaultPointSize( pointSize );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::EXCEED_POLICY:
+      {
+        impl.mExceedPolicy = value.Get< int >();
+        break;
+      }
+      case Toolkit::TextField::Property::PRIMARY_CURSOR_COLOR:
+      {
+        if( impl.mDecorator )
+        {
+          impl.mDecorator->SetColor( PRIMARY_CURSOR, value.Get< Vector4 >() );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::SECONDARY_CURSOR_COLOR:
+      {
+        if( impl.mDecorator )
+        {
+          impl.mDecorator->SetColor( SECONDARY_CURSOR, value.Get< Vector4 >() );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::ENABLE_CURSOR_BLINK:
+      {
+        if( impl.mController )
+        {
+          impl.mController->SetEnableCursorBlink( value.Get< bool >() );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::CURSOR_BLINK_INTERVAL:
+      {
+        if( impl.mDecorator )
+        {
+          impl.mDecorator->SetCursorBlinkInterval( value.Get< float >() );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::CURSOR_BLINK_DURATION:
+      {
+        if( impl.mDecorator )
+        {
+          impl.mDecorator->SetCursorBlinkDuration( value.Get< float >() );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::GRAB_HANDLE_IMAGE:
+      {
+        ResourceImage image = ResourceImage::New( value.Get< std::string >() );
+
+        if( impl.mDecorator )
+        {
+          impl.mDecorator->SetGrabHandleImage( image );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::DECORATION_BOUNDING_BOX:
+      {
+        if( impl.mDecorator )
+        {
+          impl.mDecorator->SetBoundingBox( value.Get< Rect<int> >() );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::HORIZONTAL_ALIGNMENT:
+      {
+        LayoutEngine& engine = impl.mController->GetLayoutEngine();
+        const LayoutEngine::HorizontalAlignment alignment = Scripting::GetEnumeration< Toolkit::Text::LayoutEngine::HorizontalAlignment >( value.Get< std::string >().c_str(),
+                                                                                                                                           HORIZONTAL_ALIGNMENT_STRING_TABLE,
+                                                                                                                                           HORIZONTAL_ALIGNMENT_STRING_TABLE_COUNT );
+
+        if( engine.GetHorizontalAlignment() != alignment )
+        {
+          engine.SetHorizontalAlignment( alignment );
+          impl.RequestTextRelayout();
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::VERTICAL_ALIGNMENT:
+      {
+        LayoutEngine& engine = impl.mController->GetLayoutEngine();
+        const LayoutEngine::VerticalAlignment alignment = Scripting::GetEnumeration< Toolkit::Text::LayoutEngine::VerticalAlignment >( value.Get< std::string >().c_str(),
+                                                                                                                                       VERTICAL_ALIGNMENT_STRING_TABLE,
+                                                                                                                                       VERTICAL_ALIGNMENT_STRING_TABLE_COUNT );
+
+        if( engine.GetVerticalAlignment() != alignment )
+        {
+          engine.SetVerticalAlignment( alignment );
+          impl.RequestTextRelayout();
+        }
+        break;
+      }
+    } // switch
+  } // textfield
+}
+
+Property::Value TextField::GetProperty( BaseObject* object, Property::Index index )
+{
+  Property::Value value;
+
+  Toolkit::TextField textField = Toolkit::TextField::DownCast( Dali::BaseHandle( object ) );
+
+  if( textField )
+  {
+    TextField& impl( GetImpl( textField ) );
+
+    switch( index )
+    {
+      case Toolkit::TextField::Property::RENDERING_BACKEND:
+      {
+        value = impl.mRenderingBackend;
+        break;
+      }
+      case Toolkit::TextField::Property::PLACEHOLDER_TEXT:
+      {
+        if( impl.mController )
+        {
+          std::string text;
+          impl.mController->GetPlaceholderText( text );
+          value = text;
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::TEXT:
+      {
+        if( impl.mController )
+        {
+          std::string text;
+          impl.mController->GetText( text );
+          value = text;
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::EXCEED_POLICY:
+      {
+        value = impl.mExceedPolicy;
+        break;
+      }
+      case Toolkit::TextField::Property::PRIMARY_CURSOR_COLOR:
+      {
+        if( impl.mDecorator )
+        {
+          value = impl.mDecorator->GetColor( PRIMARY_CURSOR );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::SECONDARY_CURSOR_COLOR:
+      {
+        if( impl.mDecorator )
+        {
+          value = impl.mDecorator->GetColor( SECONDARY_CURSOR );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::ENABLE_CURSOR_BLINK:
+      {
+        value = impl.mController->GetEnableCursorBlink();
+        break;
+      }
+      case Toolkit::TextField::Property::CURSOR_BLINK_INTERVAL:
+      {
+        if( impl.mDecorator )
+        {
+          value = impl.mDecorator->GetCursorBlinkInterval();
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::CURSOR_BLINK_DURATION:
+      {
+        if( impl.mDecorator )
+        {
+          value = impl.mDecorator->GetCursorBlinkDuration();
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::DECORATION_BOUNDING_BOX:
+      {
+        if( impl.mDecorator )
+        {
+          value = impl.mDecorator->GetBoundingBox();
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::HORIZONTAL_ALIGNMENT:
+      {
+        if( impl.mController )
+        {
+          value = std::string( Scripting::GetEnumerationName< Toolkit::Text::LayoutEngine::HorizontalAlignment >( impl.mController->GetLayoutEngine().GetHorizontalAlignment(),
+                                                                                                                  HORIZONTAL_ALIGNMENT_STRING_TABLE,
+                                                                                                                  HORIZONTAL_ALIGNMENT_STRING_TABLE_COUNT ) );
+        }
+        break;
+      }
+      case Toolkit::TextField::Property::VERTICAL_ALIGNMENT:
+      {
+        if( impl.mController )
+        {
+          value = std::string( Scripting::GetEnumerationName< Toolkit::Text::LayoutEngine::VerticalAlignment >( impl.mController->GetLayoutEngine().GetVerticalAlignment(),
+                                                                                                                  VERTICAL_ALIGNMENT_STRING_TABLE,
+                                                                                                                  VERTICAL_ALIGNMENT_STRING_TABLE_COUNT ) );
+        }
+        break;
+      }
+    } //switch
+  }
+
+  return value;
+}
+
+void TextField::OnInitialize()
+{
+  Actor self = Self();
+
+  mController = Text::Controller::New( *this );
+
+  mDecorator = Text::Decorator::New( *this, *mController );
+
+  mController->GetLayoutEngine().SetLayout( LayoutEngine::SINGLE_LINE_BOX );
+
+  mController->EnableTextInput( mDecorator );
+
+  // Forward input events to controller
+  EnableGestureDetection(Gesture::Tap);
+  GetTapGestureDetector().SetMaximumTapsRequired( 2 );
+  EnableGestureDetection(Gesture::Pan);
+
+  // Set BoundingBox to stage size if not already set.
+  if ( mDecorator->GetBoundingBox().IsEmpty() )
+  {
+    Vector2 stageSize = Dali::Stage::GetCurrent().GetSize();
+    mDecorator->SetBoundingBox( Rect<int>( 0.0f, 0.0f, stageSize.width, stageSize.height ) );
+  }
+
+  // Fill-parent area by default
+  self.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+  self.SetResizePolicy( FILL_TO_PARENT, HEIGHT );
+}
+
+void TextField::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange change )
+{
+  GetImpl( styleManager ).ApplyThemeStyle( Toolkit::Control( GetOwner() ) );
+}
+
+Vector3 TextField::GetNaturalSize()
+{
+  return mController->GetNaturalSize();
+}
+
+float TextField::GetHeightForWidth( float width )
+{
+  return mController->GetHeightForWidth( width );
+}
+
+void TextField::OnRelayout( const Vector2& size, RelayoutContainer& container )
+{
+  if( mController->Relayout( size ) ||
+      !mRenderer )
+  {
+    const Vector2& scrollPosition = mController->GetScrollPosition();
+    const Vector2& alignmentOffset = mController->GetAlignmentOffset();
+
+    Vector2 offset = scrollPosition + alignmentOffset;
+
+    if( mDecorator )
+    {
+      mDecorator->Relayout( size, offset );
+    }
+
+    if( !mRenderer )
+    {
+      mRenderer = Backend::Get().NewRenderer( mRenderingBackend );
+    }
+
+    RenderableActor renderableActor;
+    if( mRenderer )
+    {
+      renderableActor = mRenderer->Render( mController->GetView() );
+    }
+
+    EnableClipping( (Dali::Toolkit::TextField::EXCEED_POLICY_CLIP == mExceedPolicy), size );
+
+    if( renderableActor != mRenderableActor )
+    {
+      UnparentAndReset( mRenderableActor );
+      mRenderableActor = renderableActor;
+    }
+
+    if( mRenderableActor )
+    {
+      mRenderableActor.SetPosition( offset.x, offset.y );
+
+      // Make sure the actor is parented correctly with/without clipping
+      if( mClipper )
+      {
+        mClipper->GetRootActor().Add( mRenderableActor );
+      }
+      else
+      {
+        Self().Add( mRenderableActor );
+      }
+    }
+  }
+}
+
+void TextField::OnKeyInputFocusGained()
+{
+  VirtualKeyboard::StatusChangedSignal().Connect( this, &TextField::KeyboardStatusChanged );
+
+  ImfManager imfManager = ImfManager::Get();
+
+  if ( imfManager )
+  {
+    imfManager.EventReceivedSignal().Connect( this, &TextField::OnImfEvent );
+
+    // Notify that the text editing start.
+    imfManager.Activate();
+
+    // When window gain lost focus, the imf manager is deactivated. Thus when window gain focus again, the imf manager must be activated.
+    imfManager.SetRestoreAfterFocusLost( true );
+  }
+
+  mController->KeyboardFocusGainEvent();
+}
+
+void TextField::OnKeyInputFocusLost()
+{
+  VirtualKeyboard::StatusChangedSignal().Disconnect( this, &TextField::KeyboardStatusChanged );
+
+  ImfManager imfManager = ImfManager::Get();
+  if ( imfManager )
+  {
+    // The text editing is finished. Therefore the imf manager don't have restore activation.
+    imfManager.SetRestoreAfterFocusLost( false );
+
+    // Notify that the text editing finish.
+    imfManager.Deactivate();
+
+    imfManager.EventReceivedSignal().Disconnect( this, &TextField::OnImfEvent );
+  }
+
+  mController->KeyboardFocusLostEvent();
+}
+
+void TextField::OnTap( const TapGesture& gesture )
+{
+  // Show the keyboard if it was hidden.
+  if (!VirtualKeyboard::IsVisible())
+  {
+    VirtualKeyboard::Show();
+  }
+
+  SetKeyInputFocus();
+
+  mController->TapEvent( gesture.numberOfTaps, gesture.localPoint.x, gesture.localPoint.y );
+}
+
+void TextField::OnPan( const PanGesture& gesture )
+{
+  mController->PanEvent( gesture.state, gesture.displacement );
+}
+
+bool TextField::OnKeyEvent( const KeyEvent& event )
+{
+  if( Dali::DALI_KEY_ESCAPE == event.keyCode )
+  {
+    ClearKeyInputFocus();
+  }
+
+  return mController->KeyEvent( event );
+}
+
+ImfManager::ImfCallbackData TextField::OnImfEvent( Dali::ImfManager& imfManager, const ImfManager::ImfEventData& imfEvent )
+{
+  switch ( imfEvent.eventName )
+  {
+    case ImfManager::COMMIT:
+    {
+      KeyEvent event( "", imfEvent.predictiveString, 0, 0, 0, KeyEvent::Down );
+      mController->KeyEvent( event );
+      break;
+    }
+    case ImfManager::PREEDIT: // fall through
+    case ImfManager::DELETESURROUNDING:
+    case ImfManager::GETSURROUNDING:
+    case ImfManager::VOID:
+    {
+      // do nothing
+    }
+  } // end switch
+
+  return ImfManager::ImfCallbackData();
+}
+
+void TextField::RequestTextRelayout()
+{
+  RelayoutRequest();
+}
+
+void TextField::EnableClipping( bool clipping, const Vector2& size )
+{
+  if( clipping )
+  {
+    // Not worth to created clip actor if width or height is equal to zero.
+    if( size.width > Math::MACHINE_EPSILON_1000 && size.height > Math::MACHINE_EPSILON_1000 )
+    {
+      if( !mClipper )
+      {
+        Actor self = Self();
+
+        mClipper = Clipper::New( size );
+        self.Add( mClipper->GetRootActor() );
+        self.Add( mClipper->GetImageActor() );
+      }
+      else if ( mClipper )
+      {
+        mClipper->Refresh( size );
+      }
+    }
+  }
+  else
+  {
+    // Note - this will automatically remove the root & image actors
+    mClipper.Reset();
+  }
+}
+
+void TextField::KeyboardStatusChanged(bool keyboardShown)
+{
+  // Just hide the grab handle when keyboard is hidden.
+  if (!keyboardShown )
+  {
+    mController->KeyboardFocusLostEvent();
+  }
+}
+
+TextField::TextField()
+: Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ),
+  mRenderingBackend( DEFAULT_RENDERING_BACKEND ),
+  mExceedPolicy( Dali::Toolkit::TextField::EXCEED_POLICY_CLIP )
+{
+}
+
+TextField::~TextField()
+{
+  mClipper.Reset();
+}
+
+} // namespace Internal
+
+} // namespace Toolkit
+
+} // namespace Dali
diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.h b/dali-toolkit/internal/controls/text-controls/text-field-impl.h
new file mode 100644 (file)
index 0000000..5428275
--- /dev/null
@@ -0,0 +1,212 @@
+#ifndef __DALI_TOOLKIT_INTERNAL_TEXT_FIELD_H__
+#define __DALI_TOOLKIT_INTERNAL_TEXT_FIELD_H__
+
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/adaptor-framework/imf-manager.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/control-impl.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-field.h>
+#include <dali-toolkit/internal/text/clipping/text-clipper.h>
+#include <dali-toolkit/internal/text/decorator/text-decorator.h>
+#include <dali-toolkit/internal/text/text-control-interface.h>
+#include <dali-toolkit/internal/text/text-controller.h>
+#include <dali-toolkit/internal/text/rendering/text-renderer.h>
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Internal
+{
+
+/**
+ * @brief A control which renders a short text string.
+ */
+class TextField : public Control, public Text::ControlInterface
+{
+public:
+
+  /**
+   * @copydoc Dali::Toollkit::TextField::New()
+   */
+  static Toolkit::TextField New();
+
+  // Properties
+
+  /**
+   * @brief Called when a property of an object of this type is set.
+   *
+   * @param[in] object The object whose property is set.
+   * @param[in] index The property index.
+   * @param[in] value The new property value.
+   */
+  static void SetProperty( BaseObject* object, Property::Index index, const Property::Value& value );
+
+  /**
+   * @brief Called to retrieve a property of an object of this type.
+   *
+   * @param[in] object The object whose property is to be retrieved.
+   * @param[in] index The property index.
+   * @return The current value of the property.
+   */
+  static Property::Value GetProperty( BaseObject* object, Property::Index index );
+
+private: // From Control
+
+  /**
+   * @copydoc Control::OnInitialize()
+   */
+  virtual void OnInitialize();
+
+  /**
+   * @copydoc Control::OnStyleChange()
+   */
+  virtual void OnStyleChange( Toolkit::StyleManager styleManager, StyleChange change );
+
+  /**
+   * @copydoc Control::GetNaturalSize()
+   */
+  virtual Vector3 GetNaturalSize();
+
+  /**
+   * @copydoc Control::GetHeightForWidth()
+   */
+  virtual float GetHeightForWidth( float width );
+
+  /**
+   * @copydoc Control::OnInitialize()
+   */
+  virtual void OnRelayout( const Vector2& size, RelayoutContainer& container );
+
+  /**
+   * @copydoc Control::OnKeyInputFocusGained()
+   */
+  virtual void OnKeyInputFocusGained();
+
+  /**
+   * @copydoc Control::OnKeyInputFocusLost()
+   */
+  virtual void OnKeyInputFocusLost();
+
+  /**
+   * @copydoc Control::OnTap()
+   */
+  virtual void OnTap( const TapGesture& tap );
+
+  /**
+   * @copydoc Control::OnPan()
+   */
+  virtual void OnPan( const PanGesture& gesture );
+
+  /**
+   * @copydoc Dali::CustomActorImpl::OnKeyEvent(const KeyEvent&)
+   */
+  virtual bool OnKeyEvent(const KeyEvent& event);
+
+  /**
+   * @brief Event received from IMF manager
+   *
+   * @param[in] imfManager The IMF manager.
+   * @param[in] imfEvent The event received.
+   * @return A data struture indicating if update is needed, cursor position and current text.
+   */
+  ImfManager::ImfCallbackData OnImfEvent( ImfManager& imfManager, const ImfManager::ImfEventData& imfEvent );
+
+  /**
+   * @copydoc Text::ControlInterface::RequestTextRelayout()
+   */
+  virtual void RequestTextRelayout();
+
+private: // Implementation
+
+  /**
+   * @brief Enable or disable clipping.
+   *
+   * @param[in] clipping True if clipping should be enabled.
+   * @param[in] size The area to clip within.
+   */
+  void EnableClipping( bool clipping, const Vector2& size );
+
+  /**
+   * @brief Callback when keyboard is shown/hidden.
+   *
+   * @param[in] keyboardShown True if keyboard is shown.
+   */
+  void KeyboardStatusChanged( bool keyboardShown );
+
+  /**
+   * Construct a new TextField.
+   */
+  TextField();
+
+  /**
+   * A reference counted object may only be deleted by calling Unreference()
+   */
+  virtual ~TextField();
+
+private:
+
+  // Undefined copy constructor and assignment operators
+  TextField(const TextField&);
+  TextField& operator=(const TextField& rhs);
+
+private: // Data
+
+  Text::ControllerPtr mController;
+  Text::RendererPtr mRenderer;
+  Text::DecoratorPtr mDecorator;
+  Text::ClipperPtr mClipper; ///< For EXCEED_POLICY_CLIP
+
+  RenderableActor mRenderableActor;
+
+  int mRenderingBackend;
+  int mExceedPolicy;
+};
+
+} // namespace Internal
+
+// Helpers for public-api forwarding methods
+
+inline Toolkit::Internal::TextField& GetImpl( Toolkit::TextField& textField )
+{
+  DALI_ASSERT_ALWAYS(textField);
+
+  Dali::RefObject& handle = textField.GetImplementation();
+
+  return static_cast<Toolkit::Internal::TextField&>(handle);
+}
+
+inline const Toolkit::Internal::TextField& GetImpl( const Toolkit::TextField& textField )
+{
+  DALI_ASSERT_ALWAYS(textField);
+
+  const Dali::RefObject& handle = textField.GetImplementation();
+
+  return static_cast<const Toolkit::Internal::TextField&>(handle);
+}
+
+} // namespace Toolkit
+
+} // namespace Dali
+
+#endif // __DALI_TOOLKIT_INTERNAL_TEXT_FIELD_H__
diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
new file mode 100644 (file)
index 0000000..73f40e9
--- /dev/null
@@ -0,0 +1,474 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali-toolkit/internal/controls/text-controls/text-label-impl.h>
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/type-registry.h>
+#include <dali/public-api/object/type-registry-helper.h>
+#include <dali/public-api/scripting/scripting.h>
+#include <dali/integration-api/debug.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/text/rendering-backend.h>
+#include <dali-toolkit/internal/text/layouts/layout-engine.h>
+#include <dali-toolkit/internal/text/rendering/text-backend.h>
+#include <dali-toolkit/internal/styling/style-manager-impl.h>
+
+using Dali::Toolkit::Text::LayoutEngine;
+using Dali::Toolkit::Text::Backend;
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Internal
+{
+
+namespace
+{
+  const unsigned int DEFAULT_RENDERING_BACKEND = Dali::Toolkit::Text::DEFAULT_RENDERING_BACKEND;
+}
+
+namespace
+{
+
+const Scripting::StringEnum< Toolkit::Text::LayoutEngine::HorizontalAlignment > HORIZONTAL_ALIGNMENT_STRING_TABLE[] =
+{
+  { "BEGIN",  Toolkit::Text::LayoutEngine::HORIZONTAL_ALIGN_BEGIN  },
+  { "CENTER", Toolkit::Text::LayoutEngine::HORIZONTAL_ALIGN_CENTER },
+  { "END",    Toolkit::Text::LayoutEngine::HORIZONTAL_ALIGN_END    },
+};
+const unsigned int HORIZONTAL_ALIGNMENT_STRING_TABLE_COUNT = sizeof( HORIZONTAL_ALIGNMENT_STRING_TABLE ) / sizeof( HORIZONTAL_ALIGNMENT_STRING_TABLE[0] );
+
+const Scripting::StringEnum< Toolkit::Text::LayoutEngine::VerticalAlignment > VERTICAL_ALIGNMENT_STRING_TABLE[] =
+{
+  { "TOP",    Toolkit::Text::LayoutEngine::VERTICAL_ALIGN_TOP    },
+  { "CENTER", Toolkit::Text::LayoutEngine::VERTICAL_ALIGN_CENTER },
+  { "BOTTOM", Toolkit::Text::LayoutEngine::VERTICAL_ALIGN_BOTTOM },
+};
+const unsigned int VERTICAL_ALIGNMENT_STRING_TABLE_COUNT = sizeof( VERTICAL_ALIGNMENT_STRING_TABLE ) / sizeof( VERTICAL_ALIGNMENT_STRING_TABLE[0] );
+
+// Type registration
+BaseHandle Create()
+{
+  return Toolkit::TextLabel::New();
+}
+
+// Setup properties, signals and actions using the type-registry.
+DALI_TYPE_REGISTRATION_BEGIN( Toolkit::TextLabel, Toolkit::Control, Create );
+
+DALI_PROPERTY_REGISTRATION( TextLabel, "rendering-backend",    INTEGER, RENDERING_BACKEND    )
+DALI_PROPERTY_REGISTRATION( TextLabel, "text",                 STRING,  TEXT                 )
+DALI_PROPERTY_REGISTRATION( TextLabel, "font-family",          STRING,  FONT_FAMILY          )
+DALI_PROPERTY_REGISTRATION( TextLabel, "font-style",           STRING,  FONT_STYLE           )
+DALI_PROPERTY_REGISTRATION( TextLabel, "point-size",           FLOAT,   POINT_SIZE           )
+DALI_PROPERTY_REGISTRATION( TextLabel, "multi-line",           BOOLEAN, MULTI_LINE           )
+DALI_PROPERTY_REGISTRATION( TextLabel, "horizontal-alignment", STRING,  HORIZONTAL_ALIGNMENT )
+DALI_PROPERTY_REGISTRATION( TextLabel, "vertical-alignment",   STRING,  VERTICAL_ALIGNMENT   )
+DALI_PROPERTY_REGISTRATION( TextLabel, "text-color",           VECTOR4, TEXT_COLOR           )
+DALI_PROPERTY_REGISTRATION( TextLabel, "shadow-offset",        VECTOR2, SHADOW_OFFSET        )
+DALI_PROPERTY_REGISTRATION( TextLabel, "shadow-color",         VECTOR4, SHADOW_COLOR         )
+DALI_PROPERTY_REGISTRATION( TextLabel, "underline-enabled",    BOOLEAN, UNDERLINE_ENABLED    )
+DALI_PROPERTY_REGISTRATION( TextLabel, "underline-color",      VECTOR4, UNDERLINE_COLOR      )
+DALI_TYPE_REGISTRATION_END()
+
+} // namespace
+
+Toolkit::TextLabel TextLabel::New()
+{
+  // Create the implementation, temporarily owned by this handle on stack
+  IntrusivePtr< TextLabel > impl = new TextLabel();
+
+  // Pass ownership to CustomActor handle
+  Toolkit::TextLabel handle( *impl );
+
+  // Second-phase init of the implementation
+  // This can only be done after the CustomActor connection has been made...
+  impl->Initialize();
+
+  return handle;
+}
+
+void TextLabel::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
+{
+  Toolkit::TextLabel label = Toolkit::TextLabel::DownCast( Dali::BaseHandle( object ) );
+
+  if( label )
+  {
+    TextLabel& impl( GetImpl( label ) );
+    switch( index )
+    {
+      case Toolkit::TextLabel::Property::RENDERING_BACKEND:
+      {
+        int backend = value.Get< int >();
+
+        if( impl.mRenderingBackend != backend )
+        {
+          impl.mRenderingBackend = backend;
+          impl.mRenderer.Reset();
+          impl.RequestTextRelayout();
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::TEXT:
+      {
+        if( impl.mController )
+        {
+          impl.mController->SetText( value.Get< std::string >() );
+          impl.RequestTextRelayout();
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::FONT_FAMILY:
+      {
+        if( impl.mController )
+        {
+          std::string fontFamily = value.Get< std::string >();
+
+          if( impl.mController->GetDefaultFontFamily() != fontFamily )
+          {
+            impl.mController->SetDefaultFontFamily( fontFamily );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::FONT_STYLE:
+      {
+        if( impl.mController )
+        {
+          std::string fontStyle = value.Get< std::string >();
+
+          if( impl.mController->GetDefaultFontStyle() != fontStyle )
+          {
+            impl.mController->SetDefaultFontStyle( fontStyle );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::POINT_SIZE:
+      {
+        if( impl.mController )
+        {
+          float pointSize = value.Get< float >();
+
+          if( impl.mController->GetDefaultPointSize() != pointSize /*TODO - epsilon*/ )
+          {
+            impl.mController->SetDefaultPointSize( pointSize );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::MULTI_LINE:
+      {
+        if( impl.mController )
+        {
+          LayoutEngine& engine = impl.mController->GetLayoutEngine();
+          LayoutEngine::Layout layout = value.Get< bool >() ? LayoutEngine::MULTI_LINE_BOX : LayoutEngine::SINGLE_LINE_BOX;
+
+          if( engine.GetLayout() != layout )
+          {
+            engine.SetLayout( layout );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT:
+      {
+        LayoutEngine& engine = impl.mController->GetLayoutEngine();
+        const LayoutEngine::HorizontalAlignment alignment = Scripting::GetEnumeration< Toolkit::Text::LayoutEngine::HorizontalAlignment >( value.Get< std::string >().c_str(),
+                                                                                                                                           HORIZONTAL_ALIGNMENT_STRING_TABLE,
+                                                                                                                                           HORIZONTAL_ALIGNMENT_STRING_TABLE_COUNT );
+
+        if( engine.GetHorizontalAlignment() != alignment )
+        {
+          engine.SetHorizontalAlignment( alignment );
+          impl.RequestTextRelayout();
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT:
+      {
+        LayoutEngine& engine = impl.mController->GetLayoutEngine();
+        const LayoutEngine::VerticalAlignment alignment = Scripting::GetEnumeration< Toolkit::Text::LayoutEngine::VerticalAlignment >( value.Get< std::string >().c_str(),
+                                                                                                                                       VERTICAL_ALIGNMENT_STRING_TABLE,
+                                                                                                                                       VERTICAL_ALIGNMENT_STRING_TABLE_COUNT );
+
+        if( engine.GetVerticalAlignment() != alignment )
+        {
+          engine.SetVerticalAlignment( alignment );
+          impl.RequestTextRelayout();
+        }
+        break;
+      }
+
+      case Toolkit::TextLabel::Property::TEXT_COLOR:
+      {
+        if ( impl.mController )
+        {
+          Vector4 textColor = value.Get< Vector4 >();
+          if ( impl.mController->GetTextColor() != textColor )
+          {
+            impl.mController->SetTextColor( textColor );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+
+      case Toolkit::TextLabel::Property::SHADOW_OFFSET:
+      {
+        if( impl.mController )
+        {
+          Vector2 shadowOffset = value.Get< Vector2 >();
+          if ( impl.mController->GetShadowOffset() != shadowOffset )
+          {
+            impl.mController->SetShadowOffset( shadowOffset );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::SHADOW_COLOR:
+      {
+        if( impl.mController )
+        {
+          Vector4 shadowColor = value.Get< Vector4 >();
+          if ( impl.mController->GetShadowColor() != shadowColor )
+          {
+            impl.mController->SetShadowColor( shadowColor );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::UNDERLINE_COLOR:
+      {
+        if( impl.mController )
+        {
+          Vector4 color = value.Get< Vector4 >();
+          if ( impl.mController->GetUnderlineColor() != color )
+          {
+            impl.mController->SetUnderlineColor( color );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::UNDERLINE_ENABLED:
+      {
+        if( impl.mController )
+        {
+          bool enabled = value.Get< bool >();
+          if ( impl.mController->IsUnderlineEnabled() != enabled )
+          {
+            impl.mController->SetUnderlineEnabled( enabled );
+            impl.RequestTextRelayout();
+          }
+        }
+        break;
+      }
+    }
+  }
+}
+
+Property::Value TextLabel::GetProperty( BaseObject* object, Property::Index index )
+{
+  Property::Value value;
+
+  Toolkit::TextLabel label = Toolkit::TextLabel::DownCast( Dali::BaseHandle( object ) );
+
+  if( label )
+  {
+    TextLabel& impl( GetImpl( label ) );
+    switch( index )
+    {
+      case Toolkit::TextLabel::Property::RENDERING_BACKEND:
+      {
+        value = impl.mRenderingBackend;
+        break;
+      }
+      case Toolkit::TextLabel::Property::TEXT:
+      {
+        if( impl.mController )
+        {
+          std::string text;
+          impl.mController->GetText( text );
+          value = text;
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::MULTI_LINE:
+      {
+        if( impl.mController )
+        {
+          value = static_cast<bool>( LayoutEngine::MULTI_LINE_BOX == impl.mController->GetLayoutEngine().GetLayout() );
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT:
+      {
+        if( impl.mController )
+        {
+          value = std::string( Scripting::GetEnumerationName< Toolkit::Text::LayoutEngine::HorizontalAlignment >( impl.mController->GetLayoutEngine().GetHorizontalAlignment(),
+                                                                                                                  HORIZONTAL_ALIGNMENT_STRING_TABLE,
+                                                                                                                  HORIZONTAL_ALIGNMENT_STRING_TABLE_COUNT ) );
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT:
+      {
+        if( impl.mController )
+        {
+          value = std::string( Scripting::GetEnumerationName< Toolkit::Text::LayoutEngine::VerticalAlignment >( impl.mController->GetLayoutEngine().GetVerticalAlignment(),
+                                                                                                                VERTICAL_ALIGNMENT_STRING_TABLE,
+                                                                                                                VERTICAL_ALIGNMENT_STRING_TABLE_COUNT ) );
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::TEXT_COLOR:
+      {
+        if ( impl.mController )
+        {
+          value = impl.mController->GetTextColor();
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::SHADOW_OFFSET:
+      {
+        if ( impl.mController )
+        {
+          value = impl.mController->GetShadowOffset();
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::SHADOW_COLOR:
+      {
+        if ( impl.mController )
+        {
+          value = impl.mController->GetShadowColor();
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::UNDERLINE_COLOR:
+      {
+        if ( impl.mController )
+        {
+          value = impl.mController->GetUnderlineColor();
+        }
+        break;
+      }
+      case Toolkit::TextLabel::Property::UNDERLINE_ENABLED:
+      {
+        if ( impl.mController )
+        {
+          value = impl.mController->IsUnderlineEnabled();
+        }
+        break;
+      }
+    }
+  }
+
+  return value;
+}
+
+void TextLabel::OnInitialize()
+{
+  Actor self = Self();
+
+  mController = Text::Controller::New( *this );
+
+  // Use height-for-width negotiation by default
+  self.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+  self.SetResizePolicy( DIMENSION_DEPENDENCY, HEIGHT );
+}
+
+void TextLabel::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange change )
+{
+  GetImpl( styleManager ).ApplyThemeStyle( Toolkit::Control( GetOwner() ) );
+}
+
+Vector3 TextLabel::GetNaturalSize()
+{
+  return mController->GetNaturalSize();
+}
+
+float TextLabel::GetHeightForWidth( float width )
+{
+  return mController->GetHeightForWidth( width );
+}
+
+void TextLabel::OnRelayout( const Vector2& size, RelayoutContainer& container )
+{
+  if( mController->Relayout( size ) ||
+      !mRenderer )
+  {
+    if( !mRenderer )
+    {
+      mRenderer = Backend::Get().NewRenderer( mRenderingBackend );
+    }
+
+    RenderableActor renderableActor;
+    if( mRenderer )
+    {
+      renderableActor = mRenderer->Render( mController->GetView() );
+    }
+
+    if( renderableActor != mRenderableActor )
+    {
+      UnparentAndReset( mRenderableActor );
+
+      if( renderableActor )
+      {
+        const Vector2& alignmentOffset = mController->GetAlignmentOffset();
+        renderableActor.SetPosition( alignmentOffset.x, alignmentOffset.y );
+
+        Self().Add( renderableActor );
+      }
+
+      mRenderableActor = renderableActor;
+    }
+  }
+}
+
+void TextLabel::RequestTextRelayout()
+{
+  RelayoutRequest();
+}
+
+TextLabel::TextLabel()
+: Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ),
+  mRenderingBackend( DEFAULT_RENDERING_BACKEND )
+{
+}
+
+TextLabel::~TextLabel()
+{
+}
+
+} // namespace Internal
+
+} // namespace Toolkit
+
+} // namespace Dali
diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.h b/dali-toolkit/internal/controls/text-controls/text-label-impl.h
new file mode 100644 (file)
index 0000000..c69bd7c
--- /dev/null
@@ -0,0 +1,153 @@
+#ifndef __DALI_TOOLKIT_INTERNAL_TEXT_LABEL_H__
+#define __DALI_TOOLKIT_INTERNAL_TEXT_LABEL_H__
+
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/control-impl.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
+#include <dali-toolkit/internal/text/text-controller.h>
+#include <dali-toolkit/internal/text/rendering/text-renderer.h>
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Internal
+{
+
+/**
+ * @brief A control which renders a short text string.
+ */
+class TextLabel : public Control, public Text::ControlInterface
+{
+public:
+
+  /**
+   * @copydoc Dali::Toollkit::TextLabel::New()
+   */
+  static Toolkit::TextLabel New();
+
+  // Properties
+
+  /**
+   * @brief Called when a property of an object of this type is set.
+   *
+   * @param[in] object The object whose property is set.
+   * @param[in] index The property index.
+   * @param[in] value The new property value.
+   */
+  static void SetProperty( BaseObject* object, Property::Index index, const Property::Value& value );
+
+  /**
+   * @brief Called to retrieve a property of an object of this type.
+   *
+   * @param[in] object The object whose property is to be retrieved.
+   * @param[in] index The property index.
+   * @return The current value of the property.
+   */
+  static Property::Value GetProperty( BaseObject* object, Property::Index index );
+
+private: // From Control
+
+  /**
+   * @copydoc Control::OnInitialize()
+   */
+  virtual void OnInitialize();
+
+  /**
+   * @copydoc Control::OnStyleChange()
+   */
+  virtual void OnStyleChange( Toolkit::StyleManager styleManager, StyleChange change );
+
+  /**
+   * @copydoc Control::OnRelayout()
+   */
+  virtual void OnRelayout( const Vector2& size, RelayoutContainer& container );
+
+  /**
+   * @copydoc Control::GetNaturalSize()
+   */
+  virtual Vector3 GetNaturalSize();
+
+  /**
+   * @copydoc Control::GetHeightForWidth()
+   */
+  virtual float GetHeightForWidth( float width );
+
+  /**
+   * @copydoc Text::ControlInterface::RequestTextRelayout()
+   */
+  virtual void RequestTextRelayout();
+
+private: // Implementation
+
+  /**
+   * Construct a new TextLabel.
+   */
+  TextLabel();
+
+  /**
+   * A reference counted object may only be deleted by calling Unreference()
+   */
+  virtual ~TextLabel();
+
+private:
+
+  // Undefined copy constructor and assignment operators
+  TextLabel(const TextLabel&);
+  TextLabel& operator=(const TextLabel& rhs);
+
+private: // Data
+
+  Text::ControllerPtr mController;
+  Text::RendererPtr mRenderer;
+  RenderableActor mRenderableActor;
+
+  int mRenderingBackend;
+};
+
+} // namespace Internal
+
+// Helpers for public-api forwarding methods
+
+inline Toolkit::Internal::TextLabel& GetImpl( Toolkit::TextLabel& textLabel )
+{
+  DALI_ASSERT_ALWAYS(textLabel);
+
+  Dali::RefObject& handle = textLabel.GetImplementation();
+
+  return static_cast<Toolkit::Internal::TextLabel&>(handle);
+}
+
+inline const Toolkit::Internal::TextLabel& GetImpl( const Toolkit::TextLabel& textLabel )
+{
+  DALI_ASSERT_ALWAYS(textLabel);
+
+  const Dali::RefObject& handle = textLabel.GetImplementation();
+
+  return static_cast<const Toolkit::Internal::TextLabel&>(handle);
+}
+
+} // namespace Toolkit
+
+} // namespace Dali
+
+#endif // __DALI_TOOLKIT_INTERNAL_TEXT_LABEL_H__
diff --git a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp
new file mode 100644 (file)
index 0000000..6db6845
--- /dev/null
@@ -0,0 +1,675 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/buttons/push-button.h>
+#include <dali-toolkit/public-api/controls/default-controls/solid-color-actor.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/images/nine-patch-image.h>
+#include <dali/public-api/images/resource-image.h>
+#include <dali/public-api/math/vector2.h>
+#include <dali/public-api/math/vector4.h>
+#include <libintl.h>
+
+// todo Move this to adaptor??
+#define GET_LOCALE_TEXT(string) dgettext("elementary", string)
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Internal
+{
+
+namespace
+{
+const Dali::Vector4 DEFAULT_POPUP_BACKGROUND( Dali::Vector4( .20f, 0.29f, 0.44f, 1.0f ) );
+const Dali::Vector4 DEFAULT_POPUP_BACKGROUND_PRESSED( Dali::Vector4( 0.07f, 0.10f, 0.17f, 1.0f ) );
+const Dali::Vector4 DEFAULT_POPUP_LINE_COLOR( Dali::Vector4( 0.36f, 0.45f, 0.59f, 1.0f ) );
+const Dali::Vector4 DEFAULT_OPTION_ICON( Dali::Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
+const Dali::Vector4 DEFAULT_OPTION_ICON_PRESSED( Dali::Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
+const Dali::Vector4 DEFAULT_OPTION_TEXT( Dali::Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
+const Dali::Vector4 DEFAULT_OPTION_TEXT_PRESSED( Dali::Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
+
+const std::string DEFAULT_POPUP_BACKGROUND_IMAGE( DALI_IMAGE_DIR "popup_bubble_bg.#.png" );
+const std::string OPTION_ICON_CLIPBOARD( DALI_IMAGE_DIR "copy_paste_icon_clipboard.png" );
+const std::string OPTION_ICON_COPY( DALI_IMAGE_DIR "copy_paste_icon_copy.png" );
+const std::string OPTION_ICON_CUT( DALI_IMAGE_DIR "copy_paste_icon_cut.png" );
+const std::string OPTION_ICON_PASTE( DALI_IMAGE_DIR "copy_paste_icon_paste.png" );
+const std::string OPTION_ICON_SELECT( DALI_IMAGE_DIR "copy_paste_icon_select.png" );
+const std::string OPTION_ICON_SELECT_ALL( DALI_IMAGE_DIR "copy_paste_icon_select_all.png" );
+
+const Dali::Vector2 DEFAULT_POPUP_MAX_SIZE( 470.0f, 120.0f ); ///< The maximum size of the popup.
+
+const float OPTION_TEXT_LINE_HEIGHT( 32.0f );     ///< The line height of the text.
+const Dali::Vector2 OPTION_ICON_SIZE( 0.f, 0.f );       ///< The size of the icon.
+const float OPTION_GAP_ICON_TEXT( 6.f );          ///< The gap between the icon and the text
+const float OPTION_MARGIN_WIDTH( 10.f );          ///< The margin between the right or lefts edge and the text or icon.
+const float OPTION_MAX_WIDTH( DEFAULT_POPUP_MAX_SIZE.width / 6 ); ///< The maximum width of the option (currently set to the max)
+const float OPTION_MIN_WIDTH( 86.0f );           ///< The minimum width of the option.
+
+const float POPUP_DIVIDER_WIDTH( 1.f );        ///< The size of the divider.
+
+const Dali::Vector2 POPUP_TAIL_SIZE( 20.0f, 16.0f ); ///< The size of the tail.
+const float POPUP_TAIL_Y_OFFSET( 5.f );        ///< The y offset of the tail (when its position is on the bottom).
+const float POPUP_TAIL_TOP_Y_OFFSET( 3.f );    ///< The y offset of the tail (when its position is on the top).
+
+const float HIDE_POPUP_ANIMATION_DURATION( 0.2f ); ///< Duration of popup hide animation in seconds.
+const float SHOW_POPUP_ANIMATION_DURATION( 0.2f ); ///< Duration of popup show animation in seconds.
+
+const char* const OPTION_SELECT_WORD = "option-select_word";                       // "Select Word" popup option.
+const char* const OPTION_SELECT_ALL("option-select_all");                          // "Select All" popup option.
+const char* const OPTION_CUT("option-cut");                                        // "Cut" popup option.
+const char* const OPTION_COPY("option-copy");                                      // "Copy" popup option.
+const char* const OPTION_PASTE("option-paste");                                    // "Paste" popup option.
+const char* const OPTION_CLIPBOARD("option-clipboard");                            // "Clipboard" popup option.
+
+} // namespace
+
+//// Comparison function for ButtonRequirement Priority
+//bool TextSelectionPopup::PriorityCompare( ButtonRequirement const& a, ButtonRequirement const& b )
+//{
+//  return a.priority < b.priority;
+//}
+
+
+Dali::Toolkit::TextSelectionPopup TextSelectionPopup::New()
+{
+  // Create the implementation, temporarily owned by this handle on stack
+  IntrusivePtr< TextSelectionPopup > impl = new TextSelectionPopup();
+
+  // Pass ownership to CustomActor handle
+  Dali::Toolkit::TextSelectionPopup handle( *impl );
+
+  // Second-phase init of the implementation
+  // This can only be done after the CustomActor connection has been made...
+  impl->Initialize();
+
+  return handle;
+}
+
+void TextSelectionPopup::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
+{
+  Toolkit::TextSelectionPopup selectionPopup = Toolkit::TextSelectionPopup::DownCast( Dali::BaseHandle( object ) );
+
+  if( selectionPopup )
+  {
+    TextSelectionPopup& impl( GetImpl( selectionPopup ) );
+
+    switch( index )
+    {
+      case Toolkit::TextSelectionPopup::Property::POPUP_MAX_SIZE:
+      {
+       impl.SetPopupMaxSize( value.Get< Vector2 >() );
+       break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_BACKGROUND_IMAGE:
+      {
+        ResourceImage image = ResourceImage::New( value.Get< std::string >() );
+        impl.SetPopupImage( POPUP_BACKGROUND, image );
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_CLIPBOARD_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::New( value.Get< std::string >() );
+        impl.SetPopupImage( POPUP_CLIPBOARD_BUTTON, image );
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_CUT_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::New( value.Get< std::string >() );
+        impl.SetPopupImage( POPUP_CUT_BUTTON_ICON, image );
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_COPY_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::New( value.Get< std::string >() );
+        impl.SetPopupImage( POPUP_COPY_BUTTON_ICON, image );
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_PASTE_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::New( value.Get< std::string >() );
+        impl.SetPopupImage( POPUP_PASTE_BUTTON_ICON, image );
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_SELECT_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::New( value.Get< std::string >() );
+        impl.SetPopupImage( POPUP_SELECT_BUTTON_ICON, image );
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_SELECT_ALL_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::New( value.Get< std::string >() );
+        impl.SetPopupImage( POPUP_SELECT_ALL_BUTTON_ICON, image );
+        break;
+      }
+    } // switch
+  } // TextSelectionPopup
+}
+
+Property::Value TextSelectionPopup::GetProperty( BaseObject* object, Property::Index index )
+{
+  Property::Value value;
+
+  Toolkit::TextSelectionPopup selectionPopup = Toolkit::TextSelectionPopup::DownCast( Dali::BaseHandle( object ) );
+
+  if( selectionPopup )
+  {
+    TextSelectionPopup& impl( GetImpl( selectionPopup ) );
+
+    switch( index )
+    {
+      case Toolkit::TextSelectionPopup::Property::POPUP_MAX_SIZE:
+      {
+        value = impl.GetPopupMaxSize();
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_BACKGROUND_IMAGE:
+      {
+        ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_BACKGROUND ) );
+        if( image )
+        {
+          value = image.GetUrl();
+        }
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_CLIPBOARD_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_CLIPBOARD_BUTTON ) );
+        if( image )
+        {
+          value = image.GetUrl();
+        }
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_CUT_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_CUT_BUTTON_ICON ) );
+        if( image )
+        {
+          value = image.GetUrl();
+        }
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_COPY_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_COPY_BUTTON_ICON ) );
+        if( image )
+        {
+          value = image.GetUrl();
+        }
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_PASTE_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_PASTE_BUTTON_ICON ) );
+        if( image )
+        {
+          value = image.GetUrl();
+        }
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_SELECT_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_SELECT_BUTTON_ICON ) );
+        if( image )
+        {
+          value = image.GetUrl();
+        }
+        break;
+      }
+      case Toolkit::TextSelectionPopup::Property::POPUP_SELECT_ALL_BUTTON_ICON_IMAGE:
+      {
+        ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_SELECT_ALL_BUTTON_ICON ) );
+        if( image )
+        {
+          value = image.GetUrl();
+        }
+        break;
+      }
+    } // switch
+  }
+  return value;
+}
+
+void TextSelectionPopup::OnInitialize()
+{
+  CreatePopup();
+}
+
+void TextSelectionPopup::OnRelayout( const Vector2& size, RelayoutContainer& container )
+{
+
+}
+
+void TextSelectionPopup::SetPopupMaxSize( const Size& maxSize )
+{
+  mMaxSize = maxSize;
+}
+
+const Dali::Vector2& TextSelectionPopup::GetPopupMaxSize() const
+{
+  return mMaxSize;
+}
+
+void TextSelectionPopup::SetPopupImage( PopupParts part, Dali::Image image )
+{
+   switch ( part )
+   {
+   case POPUP_BACKGROUND :
+   {
+     mBackgroundImage = image;
+   }
+   break;
+   case POPUP_CLIPBOARD_BUTTON :
+   {
+     mClipboardIconImage  = image;
+   }
+   break;
+   case POPUP_CUT_BUTTON_ICON :
+   {
+     mCutIconImage = image;
+   }
+   break;
+   case POPUP_COPY_BUTTON_ICON :
+   {
+     mCopyIconImage = image;
+   }
+   break;
+   case POPUP_PASTE_BUTTON_ICON :
+   {
+     mPasteIconImage = image;
+   }
+   break;
+   case POPUP_SELECT_BUTTON_ICON :
+   {
+     mSelectIconImage = image;
+   }
+   break;
+   case POPUP_SELECT_ALL_BUTTON_ICON :
+   {
+     mSelectAllIconImage = image;
+   }
+   break;
+
+   } // switch
+}
+
+Dali::Image TextSelectionPopup::GetPopupImage( PopupParts part )
+{
+  switch ( part )
+  {
+  case POPUP_BACKGROUND :
+  {
+    return mBackgroundImage;
+  }
+  break;
+  case POPUP_CLIPBOARD_BUTTON :
+  {
+    return mClipboardIconImage;
+  }
+  break;
+  case POPUP_CUT_BUTTON_ICON :
+  {
+    return mCutIconImage;
+  }
+  break;
+  case POPUP_COPY_BUTTON_ICON :
+  {
+    return mCopyIconImage;
+  }
+  break;
+  case POPUP_PASTE_BUTTON_ICON :
+  {
+    return mPasteIconImage;
+  }
+  break;
+  case POPUP_SELECT_BUTTON_ICON :
+  {
+    return mSelectIconImage;
+  }
+  break;
+  case POPUP_SELECT_ALL_BUTTON_ICON :
+  {
+    return mSelectAllIconImage;
+  }
+  break;
+  default :
+  {
+    DALI_ASSERT_DEBUG( "Unknown Popup Part" );
+  }
+  } // switch
+
+  return Dali::Image();
+}
+
+ void TextSelectionPopup::CreateOrderedListOfPopupOptions()
+ {
+   mOrderListOfButtons.clear();
+
+   // Create button for each possible option using Option priority
+   if ( !mCutIconImage )
+   {
+     mCutIconImage = ResourceImage::New( OPTION_ICON_CUT );
+   }
+   mOrderListOfButtons.push_back( ButtonRequirement( ButtonsCut, mCutOptionPriority, OPTION_CUT, GET_LOCALE_TEXT("IDS_COM_BODY_CUT"), mCutIconImage, true ) );
+
+   if ( !mCopyIconImage )
+   {
+     mCopyIconImage = ResourceImage::New( OPTION_ICON_COPY );
+   }
+   mOrderListOfButtons.push_back( ButtonRequirement( ButtonsCopy, mCopyOptionPriority, OPTION_COPY, GET_LOCALE_TEXT("IDS_COM_BODY_COPY"), mCopyIconImage, true ) );
+
+   if ( !mPasteIconImage )
+   {
+     mPasteIconImage = ResourceImage::New( OPTION_ICON_PASTE );
+   }
+   mOrderListOfButtons.push_back( ButtonRequirement( ButtonsPaste, mPasteOptionPriority, OPTION_PASTE, GET_LOCALE_TEXT("IDS_COM_BODY_PASTE"), mPasteIconImage, true ) );
+
+   if ( !mSelectIconImage )
+   mSelectIconImage = ResourceImage::New( OPTION_ICON_SELECT );
+   mOrderListOfButtons.push_back( ButtonRequirement( ButtonsSelect, mSelectOptionPriority, OPTION_SELECT_WORD, GET_LOCALE_TEXT("IDS_COM_SK_SELECT"), mSelectIconImage, true ) );
+
+   if ( !mSelectAllIconImage )
+   {
+    mSelectAllIconImage = ResourceImage::New( OPTION_ICON_SELECT_ALL );
+   }
+   mOrderListOfButtons.push_back( ButtonRequirement( ButtonsSelectAll, mSelectAllOptionPriority, OPTION_SELECT_ALL, GET_LOCALE_TEXT("IDS_COM_BODY_SELECT_ALL"), mSelectAllIconImage, true ) );
+
+   if ( !mClipboardIconImage )
+   {
+     mClipboardIconImage = ResourceImage::New( OPTION_ICON_CLIPBOARD );
+   }
+   mOrderListOfButtons.push_back( ButtonRequirement( ButtonsClipboard, mClipboardOptionPriority, OPTION_CLIPBOARD, GET_LOCALE_TEXT("IDS_COM_BODY_CLIPBOARD"), mClipboardIconImage, true ) );
+
+   // Sort the buttons according their priorities.
+   std::sort( mOrderListOfButtons.begin(), mOrderListOfButtons.end(), TextSelectionPopup::ButtonPriorityCompare() );
+ }
+
+ void TextSelectionPopup::CreateBackground()
+ {
+   if ( !mBackgroundImage )
+   {
+     mBackgroundImage = ResourceImage::New( DEFAULT_POPUP_BACKGROUND_IMAGE );
+   }
+
+   NinePatchImage backgroundImageNinePatch = NinePatchImage::DownCast( mBackgroundImage );
+   if( backgroundImageNinePatch )
+   {
+     const Size ninePatchImageSize = Size( static_cast<float>( mBackgroundImage.GetWidth() ), static_cast<float>( mBackgroundImage.GetHeight() ) );
+     Rect<int> childRect = backgroundImageNinePatch.GetChildRectangle();
+
+     // -1u because of the cropping.
+     mNinePatchMargins.x = childRect.x - 1u;
+     mNinePatchMargins.y = ninePatchImageSize.width - ( childRect.x + childRect.width ) - 1u;
+     mNinePatchMargins.z = childRect.y - 1u;
+     mNinePatchMargins.w = ninePatchImageSize.height - ( childRect.y + childRect.height ) - 1u;
+   }
+
+   SetBackgroundImage( mBackgroundImage );
+   SetBackgroundColor( mBackgroundColor );
+ }
+
+ void TextSelectionPopup::AddOption( Actor& parent, const std::string& name, const std::string& caption, const Image iconImage, bool finalOption, bool showIcons )
+ {
+   // 1. Create the backgrounds for the popup option both normal and pressed.
+   // Both containers will be added to a button.
+   Actor optionContainer = Actor::New();
+   optionContainer.SetRelayoutEnabled( true );
+   optionContainer.SetResizePolicy( FIXED, ALL_DIMENSIONS );
+   optionContainer.SetDrawMode( DrawMode::OVERLAY );
+   optionContainer.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+
+   ImageActor optionPressedContainer = Toolkit::CreateSolidColorActor( mBackgroundPressedColor );
+   optionPressedContainer.SetResizePolicy( FIXED, ALL_DIMENSIONS );
+   optionPressedContainer.SetDrawMode( DrawMode::OVERLAY );
+   optionPressedContainer.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+
+   // 2. Add text.
+   Toolkit::TextLabel captionTextLabel = Toolkit::TextLabel::New();
+   captionTextLabel.SetResizePolicy( FIXED, ALL_DIMENSIONS );
+   captionTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, caption );
+   // optionContainer.Add( captionTextLabel ); Temporary removed.
+
+   Toolkit::TextLabel pressedCaptionTextLabel = Toolkit::TextLabel::New();
+   pressedCaptionTextLabel.SetResizePolicy( FIXED, ALL_DIMENSIONS );
+   pressedCaptionTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, caption );
+   // optionPressedContainer.Add( pressedCaptionTextLabel ); Temporary removed.
+
+   // Calculates the icon/text position.
+   float iconTextOffsetY = 0.0f;
+
+   if ( showIcons )
+   {
+     // 3. Create the icons
+     ImageActor pressedIcon = ImageActor::New(  iconImage );
+     ImageActor icon = ImageActor::New(  iconImage );
+
+     optionContainer.Add( icon );
+     optionPressedContainer.Add( pressedIcon );
+
+     iconTextOffsetY = 0.5f * ( ( DEFAULT_POPUP_MAX_SIZE.height - mNinePatchMargins.z - mNinePatchMargins.w ) - ( OPTION_ICON_SIZE.height + OPTION_GAP_ICON_TEXT + OPTION_TEXT_LINE_HEIGHT ) );
+
+     icon.SetParentOrigin( ParentOrigin::TOP_CENTER );
+     icon.SetAnchorPoint( AnchorPoint::TOP_CENTER );
+     icon.SetY( iconTextOffsetY );
+
+     pressedIcon.SetParentOrigin( ParentOrigin::TOP_CENTER );
+     pressedIcon.SetAnchorPoint( AnchorPoint::TOP_CENTER );
+     pressedIcon.SetY( iconTextOffsetY );
+
+     // Layout icon + gap + text
+     captionTextLabel.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
+     pressedCaptionTextLabel.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
+     pressedCaptionTextLabel.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
+     captionTextLabel.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
+     pressedCaptionTextLabel.SetY( -iconTextOffsetY );
+     captionTextLabel.SetY( -iconTextOffsetY );
+   }
+   else
+   {
+     // Centre option text
+     captionTextLabel.SetAnchorPoint( AnchorPoint::CENTER );
+     captionTextLabel.SetParentOrigin( ParentOrigin::CENTER );
+     pressedCaptionTextLabel.SetAnchorPoint( AnchorPoint::CENTER );
+     pressedCaptionTextLabel.SetParentOrigin( ParentOrigin::CENTER );
+   }
+
+   // Calculate the size of the text.
+   Vector3 textSize = captionTextLabel.GetNaturalSize();
+   textSize.width = std::min( textSize.width, OPTION_MAX_WIDTH - 2.f * OPTION_MARGIN_WIDTH );
+
+   // Set the size to the text. Text will be ellipsized if exceeds the max width.
+   captionTextLabel.SetSize( textSize.GetVectorXY() );
+   pressedCaptionTextLabel.SetSize( textSize.GetVectorXY() );
+
+   // 4. Calculate the size of option.
+
+   // The width is the max size of the text or the icon plus&