2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali-toolkit/internal/text/text-controller-input-properties.h>
22 //#include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
23 //#include <dali/devel-api/adaptor-framework/window-devel.h>
24 //#include <dali/integration-api/debug.h>
30 #include <dali-toolkit/devel-api/text/text-enumerations-devel.h>
31 #include <dali-toolkit/internal/text/text-controller-event-handler.h>
32 #include <dali-toolkit/internal/text/text-controller-impl.h>
33 #include <dali-toolkit/internal/text/text-controller-input-font-handler.h>
34 #include <dali-toolkit/internal/text/text-controller-placeholder-handler.h>
35 #include <dali-toolkit/internal/text/text-controller-relayouter.h>
36 #include <dali-toolkit/internal/text/text-controller-text-updater.h>
37 #include <dali-toolkit/internal/text/text-editable-control-interface.h>
41 const std::string EMPTY_STRING("");
44 namespace Dali::Toolkit::Text
47 void Controller::InputProperties::SetInputColor(Controller& controller, const Vector4& color)
49 if(controller.mImpl->mEventData)
51 controller.mImpl->mEventData->mInputStyle.textColor = color;
52 controller.mImpl->mEventData->mInputStyle.isDefaultColor = false;
54 if(EventData::SELECTING == controller.mImpl->mEventData->mState || EventData::EDITING == controller.mImpl->mEventData->mState || EventData::INACTIVE == controller.mImpl->mEventData->mState)
56 if(EventData::SELECTING == controller.mImpl->mEventData->mState)
58 const bool handlesCrossed = controller.mImpl->mEventData->mLeftSelectionPosition > controller.mImpl->mEventData->mRightSelectionPosition;
60 // Get start and end position of selection
61 const CharacterIndex startOfSelectedText = handlesCrossed ? controller.mImpl->mEventData->mRightSelectionPosition : controller.mImpl->mEventData->mLeftSelectionPosition;
62 const Length lengthOfSelectedText = (handlesCrossed ? controller.mImpl->mEventData->mLeftSelectionPosition : controller.mImpl->mEventData->mRightSelectionPosition) - startOfSelectedText;
65 const VectorBase::SizeType numberOfRuns = controller.mImpl->mModel->mLogicalModel->mColorRuns.Count();
66 controller.mImpl->mModel->mLogicalModel->mColorRuns.Resize(numberOfRuns + 1u);
68 ColorRun& colorRun = *(controller.mImpl->mModel->mLogicalModel->mColorRuns.Begin() + numberOfRuns);
69 colorRun.color = color;
70 colorRun.characterRun.characterIndex = startOfSelectedText;
71 colorRun.characterRun.numberOfCharacters = lengthOfSelectedText;
73 controller.mImpl->mTextUpdateInfo.mCharacterIndex = startOfSelectedText;
74 controller.mImpl->mTextUpdateInfo.mNumberOfCharactersToRemove = lengthOfSelectedText;
75 controller.mImpl->mTextUpdateInfo.mNumberOfCharactersToAdd = lengthOfSelectedText;
79 controller.mImpl->mTextUpdateInfo.mCharacterIndex = 0;
80 controller.mImpl->mTextUpdateInfo.mNumberOfCharactersToRemove = controller.mImpl->mTextUpdateInfo.mPreviousNumberOfCharacters;
81 controller.mImpl->mTextUpdateInfo.mNumberOfCharactersToAdd = controller.mImpl->mModel->mLogicalModel->mText.Count();
84 // Request to relayout.
85 controller.mImpl->mOperationsPending = static_cast<OperationsMask>(controller.mImpl->mOperationsPending | COLOR);
86 controller.mImpl->RequestRelayout();
91 const Vector4& Controller::InputProperties::GetInputColor(const Controller& controller)
93 // Return event text input color if we have it, otherwise just return the default text's color
94 return controller.mImpl->mEventData ? controller.mImpl->mEventData->mInputStyle.textColor : controller.mImpl->mTextColor;
97 void Controller::InputProperties::SetInputLineSpacing(Controller& controller, float lineSpacing)
99 if(controller.mImpl->mEventData)
101 controller.mImpl->mEventData->mInputStyle.lineSpacing = lineSpacing;
102 controller.mImpl->mEventData->mInputStyle.isLineSpacingDefined = true;
106 float Controller::InputProperties::GetInputLineSpacing(const Controller& controller)
108 return controller.mImpl->mEventData ? controller.mImpl->mEventData->mInputStyle.lineSpacing : 0.0f;
111 void Controller::InputProperties::SetInputShadowProperties(Controller& controller, const std::string& shadowProperties)
113 if(controller.mImpl->mEventData)
115 controller.mImpl->mEventData->mInputStyle.shadowProperties = shadowProperties;
119 const std::string& Controller::InputProperties::GetInputShadowProperties(const Controller& controller)
121 return controller.mImpl->mEventData ? controller.mImpl->mEventData->mInputStyle.shadowProperties : EMPTY_STRING;
124 void Controller::InputProperties::SetInputUnderlineProperties(Controller& controller, const std::string& underlineProperties)
126 if(controller.mImpl->mEventData)
128 controller.mImpl->mEventData->mInputStyle.underlineProperties = underlineProperties;
132 const std::string& Controller::InputProperties::GetInputUnderlineProperties(const Controller& controller)
134 return controller.mImpl->mEventData ? controller.mImpl->mEventData->mInputStyle.underlineProperties : EMPTY_STRING;
137 void Controller::InputProperties::SetInputEmbossProperties(Controller& controller, const std::string& embossProperties)
139 if(controller.mImpl->mEventData)
141 controller.mImpl->mEventData->mInputStyle.embossProperties = embossProperties;
145 const std::string& Controller::InputProperties::GetInputEmbossProperties(const Controller& controller)
147 return controller.mImpl->mEventData ? controller.mImpl->mEventData->mInputStyle.embossProperties : controller.GetDefaultEmbossProperties();
150 void Controller::InputProperties::SetInputOutlineProperties(Controller& controller, const std::string& outlineProperties)
152 if(controller.mImpl->mEventData)
154 controller.mImpl->mEventData->mInputStyle.outlineProperties = outlineProperties;
158 const std::string& Controller::InputProperties::GetInputOutlineProperties(const Controller& controller)
160 return controller.mImpl->mEventData ? controller.mImpl->mEventData->mInputStyle.outlineProperties : controller.GetDefaultOutlineProperties();
163 void Controller::InputProperties::SetInputModePassword(Controller& controller, bool passwordInput)
165 if(controller.mImpl->mEventData)
167 controller.mImpl->mEventData->mPasswordInput = passwordInput;
171 bool Controller::InputProperties::IsInputModePassword(Controller& controller)
173 return controller.mImpl->mEventData && controller.mImpl->mEventData->mPasswordInput;
176 } // namespace Dali::Toolkit::Text