/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
// 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/controller/text-controller-impl-data-clearer.h>
#include <dali-toolkit/internal/text/controller/text-controller-impl-event-handler.h>
#include <dali-toolkit/internal/text/controller/text-controller-impl-model-updater.h>
#include <dali-toolkit/internal/text/controller/text-controller-placeholder-handler.h>
#include <dali-toolkit/internal/text/controller/text-controller-relayouter.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-editable-control-interface.h>
#include <dali-toolkit/internal/text/text-enumerations-impl.h>
#include <dali-toolkit/internal/text/text-run-container.h>
constexpr float MAX_FLOAT = std::numeric_limits<float>::max();
-const std::string EMPTY_STRING("");
+const char* EMPTY_STRING = "";
} // namespace
if(mEventData && mEventData->mInputMethodContext)
{
CharacterIndex cursorPosition = GetLogicalCursorPosition();
-
- const Length numberOfWhiteSpaces = GetNumberOfWhiteSpaces(0u);
-
- // Update the cursor position by removing the initial white spaces.
- if(cursorPosition < numberOfWhiteSpaces)
- {
- cursorPosition = 0u;
- }
- else
- {
- cursorPosition -= numberOfWhiteSpaces;
- }
-
mEventData->mInputMethodContext.SetCursorPosition(cursorPosition);
mEventData->mInputMethodContext.NotifyCursorPosition();
}
}
}
+Length Controller::Impl::GetNumberOfCharacters() const
+{
+ if(!IsShowingPlaceholderText())
+ {
+ return mModel->GetNumberOfCharacters();
+ }
+ else
+ {
+ DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Controller::GetNumberOfCharacters %p empty (but showing placeholder)\n", this);
+ return 0u;
+ }
+}
+
void Controller::Impl::GetText(CharacterIndex index, std::string& text) const
{
// Get the total number of characters.
void Controller::Impl::ShowClipboard()
{
- if(mClipboard)
+ if(EnsureClipboardCreated())
{
mClipboard.ShowClipboard();
}
void Controller::Impl::HideClipboard()
{
- if(mClipboard && mClipboardHideEnabled)
+ if(EnsureClipboardCreated() && mClipboardHideEnabled)
{
mClipboard.HideClipboard();
}
bool Controller::Impl::CopyStringToClipboard(const std::string& source)
{
//Send string to clipboard
- return (mClipboard && mClipboard.SetItem(source));
+ return (EnsureClipboardCreated() && mClipboard.SetItem(source));
}
void Controller::Impl::SendSelectionToClipboard(bool deleteAfterSending)
void Controller::Impl::RequestGetTextFromClipboard()
{
- if(mClipboard)
+ if(EnsureClipboardCreated())
{
mClipboard.RequestItem();
}
{
const bool isHorizontalScrollEnabled = mEventData->mDecorator->IsHorizontalScrollEnabled();
const bool isVerticalScrollEnabled = mEventData->mDecorator->IsVerticalScrollEnabled();
- if(isHorizontalScrollEnabled ||isVerticalScrollEnabled)
+ if(isHorizontalScrollEnabled || isVerticalScrollEnabled)
{
- const Vector2& targetSize = mModel->mVisualModel->mControlSize;
- const Vector2& layoutSize = mModel->mVisualModel->GetLayoutSize();
+ const Vector2& targetSize = mModel->mVisualModel->mControlSize;
+ const Vector2& layoutSize = mModel->mVisualModel->GetLayoutSize();
const Vector2& scrollPosition = mModel->mScrollPosition;
if(isHorizontalScrollEnabled)
{
const float displacementX = displacement.x;
- const float positionX = scrollPosition.x + displacementX;
+ const float positionX = scrollPosition.x + displacementX;
if(layoutSize.width > targetSize.width && -positionX > 0.f && -positionX < layoutSize.width - targetSize.width)
{
isScrollable = true;
if(isVerticalScrollEnabled)
{
const float displacementY = displacement.y;
- const float positionY = scrollPosition.y + displacementY;
+ const float positionY = scrollPosition.y + displacementY;
if(layoutSize.height > targetSize.height && -positionY > 0 && -positionY < layoutSize.height - targetSize.height)
{
isScrollable = true;
mModel->mVisualModel->mStrikethroughRuns.PushBack(strikethroughGlyphRun);
}
+
+ // Reset flag. The updates have been applied from logical to visual.
+ mModel->mLogicalModel->mStrikethroughRunsUpdated = false;
}
void Controller::Impl::CopyCharacterSpacingFromLogicalToVisualModels()
mModel->mVisualModel->mCharacterSpacingRuns.PushBack(characterSpacingGlyphRun);
}
+ mModel->mLogicalModel->mCharacterSpacingRunsUpdated = false;
}
void Controller::Impl::SetAutoScrollEnabled(bool enable)