X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-label-impl.cpp;h=1beb1c2cd25f7c8d6e6c786399d6b6378eb2b2fe;hb=4bcf7c57006f4241565c31c13dde06b8eea99855;hp=3ee507d434622d0d5c11a43d0018e2c7ae3aeb3b;hpb=b8da2e53925b9abb9fa362560069e8ca4aa62f81;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp index 3ee507d..1beb1c2 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -139,6 +139,9 @@ DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION(Toolkit, TextLabel, "textColo DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION(Toolkit, TextLabel, "textColorGreen", TEXT_COLOR_GREEN, TEXT_COLOR, 1) DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION(Toolkit, TextLabel, "textColorBlue", TEXT_COLOR_BLUE, TEXT_COLOR, 2) DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION(Toolkit, TextLabel, "textColorAlpha", TEXT_COLOR_ALPHA, TEXT_COLOR, 3) + +DALI_SIGNAL_REGISTRATION(Toolkit, TextLabel, "anchorClicked", SIGNAL_ANCHOR_CLICKED) + DALI_TYPE_REGISTRATION_END() // clang-format on @@ -720,6 +723,35 @@ Property::Value TextLabel::GetProperty(BaseObject* object, Property::Index index return value; } +bool TextLabel::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor) +{ + Dali::BaseHandle handle(object); + + bool connected(true); + Toolkit::TextLabel label = Toolkit::TextLabel::DownCast(handle); + + if(0 == strcmp(signalName.c_str(), SIGNAL_ANCHOR_CLICKED)) + { + if(label) + { + Internal::TextLabel& labelImpl(GetImpl(label)); + labelImpl.AnchorClickedSignal().Connect(tracker, functor); + } + } + else + { + // signalName does not match any signal + connected = false; + } + + return connected; +} + +DevelTextLabel::AnchorClickedSignalType& TextLabel::AnchorClickedSignal() +{ + return mAnchorClickedSignal; +} + void TextLabel::OnInitialize() { Actor self = Self(); @@ -736,6 +768,7 @@ void TextLabel::OnInitialize() DALI_ASSERT_DEBUG(mController && "Invalid Text Controller") mController->SetControlInterface(this); + mController->SetAnchorControlInterface(this); // Use height-for-width negotiation by default self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); @@ -752,6 +785,10 @@ void TextLabel::OnInitialize() Dali::LayoutDirection::Type layoutDirection = static_cast(stage.GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get()); mController->SetLayoutDirection(layoutDirection); + // Forward input events to controller + EnableGestureDetection(static_cast(GestureType::TAP)); + GetTapGestureDetector().SetMaximumTapsRequired(1); + Layout::Engine& engine = mController->GetLayoutEngine(); engine.SetCursorWidth(0u); // Do not layout space for the cursor. @@ -793,6 +830,23 @@ void TextLabel::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::T Control::OnStyleChange(styleManager, change); } +void TextLabel::OnTap(const TapGesture& gesture) +{ + DALI_LOG_INFO(gLogFilter, Debug::Verbose, "TextLabel::OnTap %p\n", mController.Get()); + + // 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(Toolkit::Control::Property::PADDING); + const Vector2& localPoint = gesture.GetLocalPoint(); + mController->AnchorEvent(localPoint.x - padding.start, localPoint.y - padding.top); +} + +void TextLabel::AnchorClicked(const std::string& href) +{ + Dali::Toolkit::TextLabel handle(GetOwner()); + mAnchorClickedSignal.Emit(handle, href.c_str(), href.length()); +} + Vector3 TextLabel::GetNaturalSize() { Extents padding; @@ -1003,7 +1057,7 @@ TextLabel::~TextLabel() std::string TextLabel::AccessibleImpl::GetNameRaw() { - auto slf = Toolkit::TextLabel::DownCast(self); + auto slf = Toolkit::TextLabel::DownCast(Self()); return slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); } @@ -1018,7 +1072,7 @@ std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, if(endOffset <= startOffset) return {}; - auto slf = Toolkit::TextLabel::DownCast(self); + auto slf = Toolkit::TextLabel::DownCast(Self()); auto txt = slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); @@ -1030,7 +1084,7 @@ std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, size_t TextLabel::AccessibleImpl::GetCharacterCount() { - auto slf = Toolkit::TextLabel::DownCast(self); + auto slf = Toolkit::TextLabel::DownCast(Self()); auto txt = slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); @@ -1050,7 +1104,7 @@ bool TextLabel::AccessibleImpl::SetCaretOffset(size_t offset) Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset( size_t offset, Dali::Accessibility::TextBoundary boundary) { - auto slf = Toolkit::TextLabel::DownCast(self); + auto slf = Toolkit::TextLabel::DownCast(Self()); auto txt = slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); auto txt_size = txt.size(); @@ -1130,7 +1184,7 @@ TextLabel::AccessibleImpl::GetSelection(size_t selectionNum) if(selectionNum > 0) return {}; - auto slf = Toolkit::TextLabel::DownCast(self); + auto slf = Toolkit::TextLabel::DownCast(Self()); auto ctrl = Dali::Toolkit::GetImpl(slf).getController(); std::string ret; ctrl->RetrieveSelection(ret); @@ -1145,7 +1199,7 @@ bool TextLabel::AccessibleImpl::RemoveSelection(size_t selectionNum) if(selectionNum > 0) return false; - auto slf = Toolkit::TextLabel::DownCast(self); + auto slf = Toolkit::TextLabel::DownCast(Self()); Dali::Toolkit::GetImpl(slf).getController()->SetSelection(0, 0); return true; } @@ -1158,7 +1212,7 @@ bool TextLabel::AccessibleImpl::SetSelection(size_t selectionNum, if(selectionNum > 0) return false; - auto slf = Toolkit::TextLabel::DownCast(self); + auto slf = Toolkit::TextLabel::DownCast(Self()); Dali::Toolkit::GetImpl(slf).getController()->SetSelection(startOffset, endOffset); return true;