X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Factors%2Factor-impl.cpp;h=decf85af6970808b9a01422c51a37bea3b2803da;hb=a42d8f30cafd2c74a3146607f13ab6aa7ca0c3f6;hp=f5be1a719d5ee939371f32a4210e9891d31917ef;hpb=0dec86f2b264d546ae2ef7b917917972645e68a2;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/actors/actor-impl.cpp b/dali/internal/event/actors/actor-impl.cpp index f5be1a7..decf85a 100644 --- a/dali/internal/event/actors/actor-impl.cpp +++ b/dali/internal/event/actors/actor-impl.cpp @@ -37,12 +37,12 @@ #include +#include #include #include #include #include #include -#include #include #include #include @@ -149,6 +149,7 @@ DALI_PROPERTY("captureAllTouchAfterStart", BOOLEAN, true, false, false, Dali::De DALI_PROPERTY("touchAreaOffset", RECTANGLE, true, false, false, Dali::DevelActor::Property::TOUCH_AREA_OFFSET) DALI_PROPERTY("blendEquation", INTEGER, true, false, false, Dali::DevelActor::Property::BLEND_EQUATION) DALI_PROPERTY("touchFocusable", BOOLEAN, true, false, false, Dali::DevelActor::Property::TOUCH_FOCUSABLE) +DALI_PROPERTY("keyboardFocusableChildren", BOOLEAN, true, false, false, Dali::DevelActor::Property::KEYBOARD_FOCUSABLE_CHILDREN) DALI_PROPERTY_TABLE_END(DEFAULT_ACTOR_PROPERTY_START_INDEX, ActorDefaultProperties) // Signals @@ -255,60 +256,6 @@ void EmitSignal(Actor& actor, Signal& signal, Param... params) } } -bool ScreenToLocalInternal( - const Matrix& viewMatrix, - const Matrix& projectionMatrix, - const Matrix& worldMatrix, - const Viewport& viewport, - const Vector3& currentSize, - float& localX, - float& localY, - float screenX, - float screenY) -{ - // Get the ModelView matrix - Matrix modelView; - Matrix::Multiply(modelView, worldMatrix, viewMatrix); - - // Calculate the inverted ModelViewProjection matrix; this will be used for 2 unprojects - Matrix invertedMvp(false /*don't init*/); - Matrix::Multiply(invertedMvp, modelView, projectionMatrix); - bool success = invertedMvp.Invert(); - - // Convert to GL coordinates - Vector4 screenPos(screenX - static_cast(viewport.x), static_cast(viewport.height) - screenY - static_cast(viewport.y), 0.f, 1.f); - - Vector4 nearPos; - if(success) - { - success = Unproject(screenPos, invertedMvp, static_cast(viewport.width), static_cast(viewport.height), nearPos); - } - - Vector4 farPos; - if(success) - { - screenPos.z = 1.0f; - success = Unproject(screenPos, invertedMvp, static_cast(viewport.width), static_cast(viewport.height), farPos); - } - - if(success) - { - Vector4 local; - if(XyPlaneIntersect(nearPos, farPos, local)) - { - Vector3 size = currentSize; - localX = local.x + size.x * 0.5f; - localY = local.y + size.y * 0.5f; - } - else - { - success = false; - } - } - - return success; -} - } // unnamed namespace ActorPtr Actor::New() @@ -1140,54 +1087,17 @@ void Actor::SetDrawMode(DrawMode::Type drawMode) bool Actor::ScreenToLocal(float& localX, float& localY, float screenX, float screenY) const { - // only valid when on-stage - if(mScene && OnScene()) - { - const RenderTaskList& taskList = mScene->GetRenderTaskList(); - - Vector2 converted(screenX, screenY); - - // do a reverse traversal of all lists (as the default onscreen one is typically the last one) - uint32_t taskCount = taskList.GetTaskCount(); - for(uint32_t i = taskCount; i > 0; --i) - { - RenderTaskPtr task = taskList.GetTask(i - 1); - if(ScreenToLocal(*task, localX, localY, screenX, screenY)) - { - // found a task where this conversion was ok so return - return true; - } - } - } - return false; + return mScene && OnScene() && ConvertScreenToLocalRenderTaskList(mScene->GetRenderTaskList(), GetNode().GetWorldMatrix(0), GetCurrentSize(), localX, localY, screenX, screenY); } bool Actor::ScreenToLocal(const RenderTask& renderTask, float& localX, float& localY, float screenX, float screenY) const { - bool retval = false; - // only valid when on-stage - if(OnScene()) - { - CameraActor* camera = renderTask.GetCameraActor(); - if(camera) - { - Viewport viewport; - renderTask.GetViewport(viewport); - - // need to translate coordinates to render tasks coordinate space - Vector2 converted(screenX, screenY); - if(renderTask.TranslateCoordinates(converted)) - { - retval = ScreenToLocal(camera->GetViewMatrix(), camera->GetProjectionMatrix(), viewport, localX, localY, converted.x, converted.y); - } - } - } - return retval; + return OnScene() && ConvertScreenToLocalRenderTask(renderTask, GetNode().GetWorldMatrix(0), GetCurrentSize(), localX, localY, screenX, screenY); } bool Actor::ScreenToLocal(const Matrix& viewMatrix, const Matrix& projectionMatrix, const Viewport& viewport, float& localX, float& localY, float screenX, float screenY) const { - return OnScene() && ScreenToLocalInternal(viewMatrix, projectionMatrix, GetNode().GetWorldMatrix(0), viewport, GetCurrentSize(), localX, localY, screenX, screenY); + return OnScene() && ConvertScreenToLocal(viewMatrix, projectionMatrix, GetNode().GetWorldMatrix(0), GetCurrentSize(), viewport, localX, localY, screenX, screenY); } ActorGestureData& Actor::GetGestureData() @@ -1343,6 +1253,7 @@ Actor::Actor(DerivedType derivedType, const SceneGraph::Node& node) mSensitive(true), mLeaveRequired(false), mKeyboardFocusable(false), + mKeyboardFocusableChildren(true), mTouchFocusable(false), mOnSceneSignalled(false), mInsideOnSizeSet(false),