/*
- * 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.
} // namespace
-Toolkit::TextField TextField::New()
+Toolkit::TextField TextField::New(ControlBehaviour additionalBehaviour)
{
// Create the implementation, temporarily owned by this handle on stack
- IntrusivePtr<TextField> impl = new TextField();
+ IntrusivePtr<TextField> impl = new TextField(additionalBehaviour);
// Pass ownership to CustomActor handle
Toolkit::TextField handle(*impl);
// When window gain lost focus, the inputMethodContext is deactivated. Thus when window gain focus again, the inputMethodContext must be activated.
mInputMethodContext.SetRestoreAfterFocusLost(true);
}
- ClipboardEventNotifier notifier(ClipboardEventNotifier::Get());
-
- if(notifier)
- {
- notifier.ContentSelectedSignal().Connect(this, &TextField::OnClipboardTextSelected);
- }
if(IsEditable() && mController->IsUserInteractionEnabled())
{
mInputMethodContext.EventReceivedSignal().Disconnect(this, &TextField::OnInputMethodContextEvent);
}
- ClipboardEventNotifier notifier(ClipboardEventNotifier::Get());
-
- if(notifier)
- {
- notifier.ContentSelectedSignal().Disconnect(this, &TextField::OnClipboardTextSelected);
- }
mController->KeyboardFocusLostEvent();
void TextField::OnTap(const TapGesture& gesture)
{
DALI_LOG_INFO(gTextFieldLogFilter, Debug::Verbose, "TextField::OnTap %p\n", mController.Get());
- if(mInputMethodContext && IsEditable())
- {
- mInputMethodContext.Activate();
- }
+
// Deliver the tap before the focus event to controller; this allows us to detect when focus is gained due to tap-gestures
Extents padding;
padding = Self().GetProperty<Extents>(Toolkit::Control::Property::PADDING);
mController->AnchorEvent(localPoint.x - padding.start, localPoint.y - padding.top);
Dali::Toolkit::KeyboardFocusManager keyboardFocusManager = Dali::Toolkit::KeyboardFocusManager::Get();
- if (keyboardFocusManager)
+ if(keyboardFocusManager)
{
keyboardFocusManager.SetCurrentFocusActor(Self());
}
if(event.GetState() == KeyEvent::UP)
{
Dali::Toolkit::KeyboardFocusManager keyboardFocusManager = Dali::Toolkit::KeyboardFocusManager::Get();
- if (keyboardFocusManager)
+ if(keyboardFocusManager)
{
keyboardFocusManager.ClearFocus();
}
void TextField::TextInserted(unsigned int position, unsigned int length, const std::string& content)
{
- GetAccessibleObject()->EmitTextInserted(position, length, content);
+ auto accessible = GetAccessibleObject();
+ if(DALI_LIKELY(accessible))
+ {
+ accessible->EmitTextInserted(position, length, content);
+ }
}
void TextField::TextDeleted(unsigned int position, unsigned int length, const std::string& content)
{
- GetAccessibleObject()->EmitTextDeleted(position, length, content);
+ auto accessible = GetAccessibleObject();
+ if(DALI_LIKELY(accessible))
+ {
+ accessible->EmitTextDeleted(position, length, content);
+ }
}
void TextField::CursorPositionChanged(unsigned int oldPosition, unsigned int newPosition)
{
- GetAccessibleObject()->EmitTextCursorMoved(newPosition);
+ auto accessible = GetAccessibleObject();
+ if(DALI_LIKELY(accessible))
+ {
+ accessible->EmitTextCursorMoved(newPosition);
+ }
if((oldPosition != newPosition) && !mCursorPositionChanged)
{
mStencil = Control::New();
mStencil.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
mStencil.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+ mStencil.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN, true);
// Creates a background visual. Even if the color is transparent it updates the stencil.
mStencil.SetProperty(Toolkit::Control::Property::BACKGROUND,
}
}
-void TextField::OnClipboardTextSelected(ClipboardEventNotifier& clipboard)
-{
- mController->PasteClipboardItemEvent();
-}
-
void TextField::KeyboardStatusChanged(bool keyboardShown)
{
DALI_LOG_INFO(gTextFieldLogFilter, Debug::Verbose, "TextField::KeyboardStatusChanged %p keyboardShown %d\n", mController.Get(), keyboardShown);
mIdleCallback = NULL;
}
-TextField::TextField()
-: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT)),
+TextField::TextField(ControlBehaviour additionalBehaviour)
+: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT | additionalBehaviour)),
mIdleCallback(NULL),
mAlignmentOffset(0.f),
mRenderingBackend(DEFAULT_RENDERING_BACKEND),
return mController->GetTextPosition(startIndex, endIndex);
}
+Rect<float> TextField::GetLineBoundingRectangle(const uint32_t lineIndex) const
+{
+ return mController->GetLineBoundingRectangle(lineIndex);
+}
+
+Rect<float> TextField::GetCharacterBoundingRectangle(const uint32_t charIndex) const
+{
+ return mController->GetCharacterBoundingRectangle(charIndex);
+}
+
+int TextField::GetCharacterIndexAtPosition(float visualX, float visualY) const
+{
+ return mController->GetCharacterIndexAtPosition(visualX, visualY);
+}
+
+Rect<> TextField::GetTextBoundingRectangle(uint32_t startIndex, uint32_t endIndex) const
+{
+ return mController->GetTextBoundingRectangle(startIndex, endIndex);
+}
+
+void TextField::SetSpannedText(const Text::Spanned& spannedText)
+{
+ mController->SetSpannedText(spannedText);
+}
+
std::string TextField::TextFieldAccessible::GetName() const
{
if(IsHiddenInput())