/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 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.
#include <dali-toolkit/internal/text/text-run-container.h>
#include <dali-toolkit-test-suite-utils.h>
#include <dali-toolkit/dali-toolkit.h>
-#include <toolkit-text-model.h>
+#include <toolkit-text-utils.h>
using namespace Dali;
using namespace Toolkit;
float* positions;
unsigned int numberOfLines;
LineRun* lines;
- LayoutEngine::Layout layout;
+ Layout::Engine::Type layout;
unsigned int startIndex;
unsigned int numberOfGlyphs;
bool ellipsis:1;
glyphPositions.Begin() + data.startIndex + data.numberOfGlyphs );
// 3) Layout
- LayoutEngine engine;
+ Layout::Engine engine;
engine.SetMetrics( metrics );
- engine.SetTextEllipsisEnabled( data.ellipsis );
engine.SetLayout( data.layout );
const Length totalNumberOfGlyphs = visualModel->mGlyphs.Count();
- LayoutParameters layoutParameters( data.textArea,
- logicalModel->mText.Begin(),
- logicalModel->mLineBreakInfo.Begin(),
- logicalModel->mWordBreakInfo.Begin(),
- ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
- visualModel->mGlyphs.Begin(),
- visualModel->mGlyphsToCharacters.Begin(),
- visualModel->mCharactersPerGlyph.Begin(),
- visualModel->mCharactersToGlyph.Begin(),
- visualModel->mGlyphsPerCharacter.Begin(),
- totalNumberOfGlyphs );
+ Layout::Parameters layoutParameters( data.textArea,
+ logicalModel->mText.Begin(),
+ logicalModel->mLineBreakInfo.Begin(),
+ logicalModel->mWordBreakInfo.Begin(),
+ ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
+ visualModel->mGlyphs.Begin(),
+ visualModel->mGlyphsToCharacters.Begin(),
+ visualModel->mCharactersPerGlyph.Begin(),
+ visualModel->mCharactersToGlyph.Begin(),
+ visualModel->mGlyphsPerCharacter.Begin(),
+ totalNumberOfGlyphs,
+ Text::HorizontalAlignment::BEGIN,
+ Text::LineWrap::WORD );
layoutParameters.isLastNewParagraph = isLastNewParagraph;
const bool updated = engine.LayoutText( layoutParameters,
glyphPositions,
lines,
- layoutSize );
+ layoutSize,
+ data.ellipsis );
// 4) Compare the results.
metrics );
// 2) Call the ReLayoutRightToLeftLines() method.
- LayoutEngine engine;
+ Layout::Engine engine;
engine.SetMetrics( metrics );
- LayoutParameters layoutParameters( data.textArea,
- logicalModel->mText.Begin(),
- logicalModel->mLineBreakInfo.Begin(),
- logicalModel->mWordBreakInfo.Begin(),
- ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
- visualModel->mGlyphs.Begin(),
- visualModel->mGlyphsToCharacters.Begin(),
- visualModel->mCharactersPerGlyph.Begin(),
- visualModel->mCharactersToGlyph.Begin(),
- visualModel->mGlyphsPerCharacter.Begin(),
- visualModel->mGlyphs.Count() );
+ Layout::Parameters layoutParameters( data.textArea,
+ logicalModel->mText.Begin(),
+ logicalModel->mLineBreakInfo.Begin(),
+ logicalModel->mWordBreakInfo.Begin(),
+ ( 0u != logicalModel->mCharacterDirections.Count() ) ? logicalModel->mCharacterDirections.Begin() : NULL,
+ visualModel->mGlyphs.Begin(),
+ visualModel->mGlyphsToCharacters.Begin(),
+ visualModel->mCharactersPerGlyph.Begin(),
+ visualModel->mCharactersToGlyph.Begin(),
+ visualModel->mGlyphsPerCharacter.Begin(),
+ visualModel->mGlyphs.Count(),
+ Text::HorizontalAlignment::BEGIN,
+ Text::LineWrap::WORD );
layoutParameters.numberOfBidirectionalInfoRuns = logicalModel->mBidirectionalLineInfo.Count();
layoutParameters.lineBidirectionalInfoRunsBuffer = logicalModel->mBidirectionalLineInfo.Begin();
Size textArea;
unsigned int numberOfFonts;
FontDescriptionRun* fontDescriptions;
- LayoutEngine::HorizontalAlignment horizontalAlignment;
- LayoutEngine::VerticalAlignment verticalAlignment;
+ Text::HorizontalAlignment::Type horizontalAlignment;
+ Text::VerticalAlignment::Type verticalAlignment;
unsigned int startIndex;
unsigned int numberOfCharacters;
unsigned int numberOfLines;
metrics );
// Call the Align method.
- LayoutEngine engine;
+ Layout::Engine engine;
engine.SetMetrics( metrics );
- engine.SetHorizontalAlignment( data.horizontalAlignment );
- engine.SetVerticalAlignment( data.verticalAlignment );
-
+ float alignmentOffset = 0.f;
engine.Align( data.textArea,
data.startIndex,
data.numberOfCharacters,
- visualModel->mLines );
+ data.horizontalAlignment,
+ visualModel->mLines,
+ alignmentOffset );
// Compare results.
if( data.numberOfLines != visualModel->mLines.Count() )
ToolkitTestApplication application;
tet_infoline(" UtcDaliTextLayoutSetGetLayout");
- LayoutEngine engine;
-
- DALI_TEST_CHECK( LayoutEngine::SINGLE_LINE_BOX == engine.GetLayout() );
-
- engine.SetLayout( LayoutEngine::MULTI_LINE_BOX );
- DALI_TEST_CHECK( LayoutEngine::MULTI_LINE_BOX == engine.GetLayout() );
-
- tet_result(TET_PASS);
- END_TEST;
-}
-
-int UtcDaliTextLayoutSetGetTextEllipsisEnabled(void)
-{
- ToolkitTestApplication application;
- tet_infoline(" UtcDaliTextLayoutSetGetTextEllipsisEnabled");
-
- LayoutEngine engine;
-
- DALI_TEST_CHECK( !engine.GetTextEllipsisEnabled() );
-
- engine.SetTextEllipsisEnabled( true );
- DALI_TEST_CHECK( engine.GetTextEllipsisEnabled() );
-
- tet_result(TET_PASS);
- END_TEST;
-}
-
-int UtcDaliTextLayoutSetGetHorizontalAlignment(void)
-{
- ToolkitTestApplication application;
- tet_infoline(" ");
+ Layout::Engine engine;
- LayoutEngine engine;
-
- DALI_TEST_CHECK( LayoutEngine::HORIZONTAL_ALIGN_BEGIN == engine.GetHorizontalAlignment() );
-
- engine.SetHorizontalAlignment( LayoutEngine::HORIZONTAL_ALIGN_END );
- DALI_TEST_CHECK( LayoutEngine::HORIZONTAL_ALIGN_END == engine.GetHorizontalAlignment() );
-
- tet_result(TET_PASS);
- END_TEST;
-}
-
-int UtcDaliTextLayoutSetGetVerticalAlignment(void)
-{
- ToolkitTestApplication application;
- tet_infoline(" UtcDaliTextLayoutSetGetVerticalAlignment");
-
- LayoutEngine engine;
-
- DALI_TEST_CHECK( LayoutEngine::VERTICAL_ALIGN_TOP == engine.GetVerticalAlignment() );
-
- engine.SetVerticalAlignment( LayoutEngine::VERTICAL_ALIGN_TOP );
- DALI_TEST_CHECK( LayoutEngine::VERTICAL_ALIGN_TOP == engine.GetVerticalAlignment() );
+ DALI_TEST_CHECK( Layout::Engine::SINGLE_LINE_BOX == engine.GetLayout() );
+ engine.SetLayout( Layout::Engine::MULTI_LINE_BOX );
+ DALI_TEST_CHECK( Layout::Engine::MULTI_LINE_BOX == engine.GetLayout() );
tet_result(TET_PASS);
END_TEST;
ToolkitTestApplication application;
tet_infoline(" ");
- LayoutEngine engine;
+ Layout::Engine engine;
DALI_TEST_EQUALS( 1, engine.GetCursorWidth(), TEST_LOCATION );
NULL,
0u,
NULL,
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
0u,
false,
NULL,
0u,
NULL,
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
11u,
false,
positions,
1u,
lines.Begin(),
- LayoutEngine::SINGLE_LINE_BOX,
+ Layout::Engine::SINGLE_LINE_BOX,
0u,
11u,
false,
positions,
5u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
48u,
false,
positions,
6u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
55u,
false,
positions,
3u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
29u,
false,
positions,
2u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
13u,
false,
positions,
2u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
17u,
false,
positions,
19u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
64u,
false,
positions,
19u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
64u,
64u,
false,
positions,
19u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
128u,
64u,
false,
positions,
1u,
lines.Begin(),
- LayoutEngine::SINGLE_LINE_BOX,
+ Layout::Engine::SINGLE_LINE_BOX,
0u,
51u,
true,
};
Size textArea( 100.f, 50.f );
- Size layoutSize( 100.f, 60.f );
+ Size layoutSize( 100.f, 40.f );
LayoutTextData data =
{
positions,
2u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
51u,
true,
positions,
1u,
lines.Begin(),
- LayoutEngine::SINGLE_LINE_BOX,
+ Layout::Engine::SINGLE_LINE_BOX,
0u,
72u,
true,
};
Size textArea( 100.f, 50.f );
- Size layoutSize( 100.f, 60.f );
+ Size layoutSize( 100.f, 40.f );
LayoutTextData data =
{
positions,
2u,
lines.Begin(),
- LayoutEngine::MULTI_LINE_BOX,
+ Layout::Engine::MULTI_LINE_BOX,
0u,
72u,
true,
END_TEST;
}
+int UtcDaliTextLayoutEllipsis05(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextLayoutEllipsis05");
+
+ const std::string fontLatin( "TizenSans" );
+
+ // Set a known font description
+ FontDescriptionRun fontDescriptionRun01;
+ fontDescriptionRun01.characterRun.characterIndex = 0u;
+ fontDescriptionRun01.characterRun.numberOfCharacters = 51u;
+ fontDescriptionRun01.familyLength = fontLatin.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy( fontDescriptionRun01.familyName, fontLatin.c_str(), fontDescriptionRun01.familyLength );
+ fontDescriptionRun01.familyDefined = true;
+ fontDescriptionRun01.weightDefined = false;
+ fontDescriptionRun01.widthDefined = false;
+ fontDescriptionRun01.slantDefined = false;
+ fontDescriptionRun01.sizeDefined = false;
+
+ Vector<FontDescriptionRun> fontDescriptionRuns;
+ fontDescriptionRuns.PushBack( fontDescriptionRun01 );
+
+ struct LineRun line01 =
+ {
+ { 0u, 11u },
+ { 0u, 11u },
+ 80.f,
+ 15.f,
+ -5.f,
+ 0.f,
+ 0.f,
+ false,
+ true
+ };
+ Vector<LineRun> lines;
+ lines.PushBack( line01 );
+
+ float positions[] =
+ {
+ 1.f, -12.f
+ };
+
+ Size textArea( 100.f, 19.f );
+ Size layoutSize( 100.f, 20.f );
+
+ LayoutTextData data =
+ {
+ "Not enough height.",
+ "Hello world",
+ textArea,
+ 1u,
+ fontDescriptionRuns.Begin(),
+ layoutSize,
+ 1u,
+ positions,
+ 1u,
+ lines.Begin(),
+ Layout::Engine::MULTI_LINE_BOX,
+ 0u,
+ 11u,
+ true,
+ true
+ };
+
+ if( !LayoutTextTest( data ) )
+ {
+ tet_result(TET_FAIL);
+ }
+
+ tet_result(TET_PASS);
+ END_TEST;
+}
+
int UtcDaliTextReorderLayout01(void)
{
ToolkitTestApplication application;
textArea,
6u,
fontDescriptionRuns.Begin(),
- LayoutEngine::HORIZONTAL_ALIGN_BEGIN,
- LayoutEngine::VERTICAL_ALIGN_TOP,
+ Text::HorizontalAlignment::BEGIN,
+ Text::VerticalAlignment::TOP,
0u,
22u,
6u,
textArea,
6u,
fontDescriptionRuns.Begin(),
- LayoutEngine::HORIZONTAL_ALIGN_BEGIN,
- LayoutEngine::VERTICAL_ALIGN_TOP,
+ Text::HorizontalAlignment::BEGIN,
+ Text::VerticalAlignment::TOP,
22u,
26u,
6u,
textArea,
6u,
fontDescriptionRuns.Begin(),
- LayoutEngine::HORIZONTAL_ALIGN_BEGIN,
- LayoutEngine::VERTICAL_ALIGN_TOP,
+ Text::HorizontalAlignment::BEGIN,
+ Text::VerticalAlignment::TOP,
48u,
26u,
6u,
textArea,
6u,
fontDescriptionRuns.Begin(),
- LayoutEngine::HORIZONTAL_ALIGN_CENTER,
- LayoutEngine::VERTICAL_ALIGN_TOP,
+ Text::HorizontalAlignment::CENTER,
+ Text::VerticalAlignment::TOP,
0u,
22u,
6u,
textArea,
6u,
fontDescriptionRuns.Begin(),
- LayoutEngine::HORIZONTAL_ALIGN_CENTER,
- LayoutEngine::VERTICAL_ALIGN_TOP,
+ Text::HorizontalAlignment::CENTER,
+ Text::VerticalAlignment::TOP,
22u,
26u,
6u,
textArea,
6u,
fontDescriptionRuns.Begin(),
- LayoutEngine::HORIZONTAL_ALIGN_CENTER,
- LayoutEngine::VERTICAL_ALIGN_TOP,
+ Text::HorizontalAlignment::CENTER,
+ Text::VerticalAlignment::TOP,
48u,
26u,
6u,
textArea,
6u,
fontDescriptionRuns.Begin(),
- LayoutEngine::HORIZONTAL_ALIGN_END,
- LayoutEngine::VERTICAL_ALIGN_TOP,
+ Text::HorizontalAlignment::END,
+ Text::VerticalAlignment::TOP,
0u,
22u,
6u,
textArea,
6u,
fontDescriptionRuns.Begin(),
- LayoutEngine::HORIZONTAL_ALIGN_END,
- LayoutEngine::VERTICAL_ALIGN_TOP,
+ Text::HorizontalAlignment::END,
+ Text::VerticalAlignment::TOP,
22u,
26u,
6u,
textArea,
6u,
fontDescriptionRuns.Begin(),
- LayoutEngine::HORIZONTAL_ALIGN_END,
- LayoutEngine::VERTICAL_ALIGN_TOP,
+ Text::HorizontalAlignment::END,
+ Text::VerticalAlignment::TOP,
48u,
26u,
6u,
tet_result(TET_PASS);
END_TEST;
}
+
+int UtcDaliTextLayoutSetGetDefaultLineSpacing(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextLayoutSetGetDefaultLineSpacing");
+
+ Layout::Engine engine;
+ DALI_TEST_EQUALS( 0.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+
+ engine.SetDefaultLineSpacing( 10.f );
+ DALI_TEST_EQUALS( 10.f, engine.GetDefaultLineSpacing(), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+
+ tet_result(TET_PASS);
+ END_TEST;
+}