#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/integration-api/debug.h>
#include <dali/public-api/actors/layer.h>
+#include <dali/public-api/rendering/renderer.h>
#include <cmath>
// INTERNAL INCLUDES
#include <dali-toolkit/internal/text/character-set-conversion.h>
#include <dali-toolkit/internal/text/cursor-helper-functions.h>
+#include <dali-toolkit/internal/text/glyph-metrics-helper.h>
#include <dali-toolkit/internal/text/text-control-interface.h>
#include <dali-toolkit/internal/text/text-controller-impl-data-clearer.h>
#include <dali-toolkit/internal/text/text-controller-impl-event-handler.h>
#include <dali-toolkit/internal/text/text-enumerations-impl.h>
#include <dali-toolkit/internal/text/text-run-container.h>
#include <dali-toolkit/internal/text/text-selection-handle-controller.h>
+#include <dali-toolkit/internal/text/underlined-glyph-run.h>
using namespace Dali;
{
mLayoutEngine.SetDefaultLineSpacing(lineSpacing);
- RelayoutForNewLineSize();
+ RelayoutAllCharacters();
return true;
}
return false;
{
mLayoutEngine.SetDefaultLineSize(lineSize);
- RelayoutForNewLineSize();
+ RelayoutAllCharacters();
return true;
}
return false;
}
}
-void Controller::Impl::RelayoutForNewLineSize()
+void Controller::Impl::RelayoutAllCharacters()
{
// relayout all characters
mTextUpdateInfo.mCharacterIndex = 0;
Length numberOfCharacters = it->characterRun.numberOfCharacters;
for(Length index = 0u; index < numberOfCharacters; index++)
{
- GlyphRun underlineGlyphRun;
- underlineGlyphRun.glyphIndex = charactersToGlyph[characterIndex + index];
- underlineGlyphRun.numberOfGlyphs = glyphsPerCharacter[characterIndex + index];
+ UnderlinedGlyphRun underlineGlyphRun;
+ underlineGlyphRun.glyphRun.glyphIndex = charactersToGlyph[characterIndex + index];
+ underlineGlyphRun.glyphRun.numberOfGlyphs = glyphsPerCharacter[characterIndex + index];
+
+ //Copy properties (attributes)
+ underlineGlyphRun.properties.type = it->properties.type;
+ underlineGlyphRun.properties.color = it->properties.color;
+ underlineGlyphRun.properties.height = it->properties.height;
+ underlineGlyphRun.properties.dashGap = it->properties.dashGap;
+ underlineGlyphRun.properties.dashWidth = it->properties.dashWidth;
+ underlineGlyphRun.properties.typeDefined = it->properties.typeDefined;
+ underlineGlyphRun.properties.colorDefined = it->properties.colorDefined;
+ underlineGlyphRun.properties.heightDefined = it->properties.heightDefined;
+ underlineGlyphRun.properties.dashGapDefined = it->properties.dashGapDefined;
+ underlineGlyphRun.properties.dashWidthDefined = it->properties.dashWidthDefined;
+
mModel->mVisualModel->mUnderlineRuns.PushBack(underlineGlyphRun);
}
}
}
+void Controller::Impl::CopyStrikethroughFromLogicalToVisualModels()
+{
+ //Strikethrough character runs from markup-processor
+ const Vector<StrikethroughCharacterRun>& strikethroughCharacterRuns = mModel->mLogicalModel->mStrikethroughCharacterRuns;
+ const Vector<GlyphIndex>& charactersToGlyph = mModel->mVisualModel->mCharactersToGlyph;
+ const Vector<Length>& glyphsPerCharacter = mModel->mVisualModel->mGlyphsPerCharacter;
+
+ mModel->mVisualModel->mStrikethroughRuns.Clear();
+
+ for(Vector<StrikethroughCharacterRun>::ConstIterator it = strikethroughCharacterRuns.Begin(), endIt = strikethroughCharacterRuns.End(); it != endIt; ++it)
+ {
+ CharacterIndex characterIndex = it->characterRun.characterIndex;
+ Length numberOfCharacters = it->characterRun.numberOfCharacters;
+
+ if(numberOfCharacters == 0)
+ {
+ continue;
+ }
+
+ StrikethroughGlyphRun strikethroughGlyphRun;
+ strikethroughGlyphRun.color = it->color;
+ strikethroughGlyphRun.isColorSet = it->isColorSet;
+ strikethroughGlyphRun.glyphRun.glyphIndex = charactersToGlyph[characterIndex];
+ strikethroughGlyphRun.glyphRun.numberOfGlyphs = glyphsPerCharacter[characterIndex];
+
+ for(Length index = 1u; index < numberOfCharacters; index++)
+ {
+ strikethroughGlyphRun.glyphRun.numberOfGlyphs += glyphsPerCharacter[characterIndex + index];
+ }
+
+ mModel->mVisualModel->mStrikethroughRuns.PushBack(strikethroughGlyphRun);
+ }
+}
+
void Controller::Impl::SetAutoScrollEnabled(bool enable)
{
if(mLayoutEngine.GetLayout() == Layout::Engine::SINGLE_LINE_BOX)
{
mModel->mLogicalModel->mColorRuns.Clear();
mModel->mLogicalModel->ClearFontDescriptionRuns();
+ mModel->mLogicalModel->ClearStrikethroughRuns();
}
void Controller::Impl::ResetScrollPosition()