From ed6cf75651de0da8da3fa0c438e133175ae872e4 Mon Sep 17 00:00:00 2001 From: HeeJu Kang Date: Mon, 1 Apr 2013 14:44:56 +0900 Subject: [PATCH] Apply resume/pause Change-Id: I85610b3c73bb21a28cb91c2d2ec275a96381d234 Signed-off-by: HeeJu Kang --- src/FShell_AppWidgetLayer.cpp | 24 ++++++++++++++ src/FShell_AppWidgetPopupView.cpp | 4 +-- src/FShell_AppWidgetView.cpp | 63 +++++++++++++++++++++++++++++++++---- src/FShell_AppWidgetView.h | 6 ++++ src/FShell_AppWidgetViewManager.cpp | 63 +++++++++++++++++++++++++++++++++++++ src/FShell_AppWidgetViewManager.h | 12 +++++++ 6 files changed, 164 insertions(+), 8 deletions(-) diff --git a/src/FShell_AppWidgetLayer.cpp b/src/FShell_AppWidgetLayer.cpp index 179e5f6..5f82787 100644 --- a/src/FShell_AppWidgetLayer.cpp +++ b/src/FShell_AppWidgetLayer.cpp @@ -20,6 +20,8 @@ */ #include +#include +#include #include #include #include @@ -35,6 +37,8 @@ #include "FShell_AppWidgetLayer.h" #include "FShell_AppWidgetProviderManagerImpl.h" +//#define _BUFFER_TEST + using namespace std; using namespace Tizen::Base; using namespace Tizen::Graphics; @@ -250,6 +254,26 @@ _AppWidgetLayer::SyncPixmap(const FloatDimension& size) memcpy(pXImage->data, __pRenderBuffer, __bufferSize); +#if defined(_BUFFER_TEST) + { + FILE* pFile = null; + static int idx = 0; + char filename[1024]; + snprintf(filename, sizeof(filename), "/opt/out%d.raw", idx++); + pFile = fopen(filename, "w+b"); + if (pFile) + { + fwrite(__pRenderBuffer, __bufferSize, 1, pFile); + fclose(pFile); + SysLog(NID_UI_CTRL, "_BUFFER_TEST: buffer (0x%x) size (%d) pixmapId (%d) width(%f) height(%f)", __pRenderBuffer, __bufferSize, __pixmapId, size.width, size.height); + } + else + { + SysLog(NID_UI_CTRL, "File open failed: (%s) buffer (0x%x) size (%d) pixmapId (%d)", strerror(errno), __pRenderBuffer, __bufferSize, __pixmapId); + } + } +#endif // _BUFFER_TEST + // Do not send the event. Instead of X event, master will send the updated event to the viewer XShmPutImage(pDisplay, static_cast(__pixmapId), gc, pXImage, 0, 0, 0, 0, size.width, size.height, False); XSync(pDisplay, False); diff --git a/src/FShell_AppWidgetPopupView.cpp b/src/FShell_AppWidgetPopupView.cpp index 5b1e849..815f7db 100644 --- a/src/FShell_AppWidgetPopupView.cpp +++ b/src/FShell_AppWidgetPopupView.cpp @@ -37,13 +37,13 @@ #include #include #include +#include +#include #include #include #include #include -#include #include -#include #include "FShell_AppWidgetPopupView.h" #include "FShell_AppWidgetPopupViewPresenter.h" #include "FShell_AppWidgetPopupViewEvent.h" diff --git a/src/FShell_AppWidgetView.cpp b/src/FShell_AppWidgetView.cpp index 456ad4b..a9a62e3 100644 --- a/src/FShell_AppWidgetView.cpp +++ b/src/FShell_AppWidgetView.cpp @@ -34,18 +34,19 @@ #include #include #include -#include "FUi_TouchFlickGestureDetector.h" +#include +#include +#include +#include +#include +#include +#include #include "FShell_IAppWidgetViewEventListener.h" #include "FShell_AppWidgetManagerImpl.h" #include "FShell_AppWidgetView.h" #include "FShell_AppWidgetViewPresenter.h" #include "FShell_AppWidgetPopupView.h" #include "FShell_AppWidgetViewManager.h" -#include "FUi_ResourceManager.h" -#include "FUiAnim_EflNode.h" -#include "FUiAnim_VisualElementImpl.h" -#include "FUiAnim_VisualElementSurfaceImpl.h" -#include "FUi_CoordinateSystemUtils.h" using namespace std; using namespace Tizen::App; @@ -427,6 +428,18 @@ _AppWidgetView::OnAttachedToMainTree(void) { result r = E_SUCCESS; + _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame(); + if (pWindow) + { + _Frame* pFrame = dynamic_cast<_Frame*>(pWindow); + if (pFrame) + { + pFrame->AddFrameEventListener(*this); + } + + __pAppWidgetViewManager->AddFrameEventListener(); + } + return r; } @@ -435,6 +448,16 @@ _AppWidgetView::OnDetachingFromMainTree(void) { result r = E_SUCCESS; + _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame(); + if (pWindow) + { + _Frame* pFrame = dynamic_cast<_Frame*>(pWindow); + if (pFrame) + { + pFrame->RemoveFrameEventListener(*this); + } + } + return r; } @@ -565,6 +588,34 @@ _AppWidgetView::OnDraw(void) } void +_AppWidgetView::OnFrameActivated(const Tizen::Ui::Controls::_Frame& source) +{ + if (__pAppWidget) + { + livebox_set_visibility(__pAppWidget, LB_SHOW); + } +} + +void +_AppWidgetView::OnFrameDeactivated(const Tizen::Ui::Controls::_Frame& source) +{ + if (__pAppWidget) + { + livebox_set_visibility(__pAppWidget, LB_HIDE_WITH_PAUSE); + } +} + +void +_AppWidgetView::OnFrameMinimized(const Tizen::Ui::Controls::_Frame& source) +{ +} + +void +_AppWidgetView::OnFrameRestored(const Tizen::Ui::Controls::_Frame& source) +{ +} + +void _AppWidgetView::OnAppWidgetUpdated(const Bitmap& bitmap, const FloatDimension& size) { __resizeFromRemote = true; diff --git a/src/FShell_AppWidgetView.h b/src/FShell_AppWidgetView.h index 525c394..45de955 100644 --- a/src/FShell_AppWidgetView.h +++ b/src/FShell_AppWidgetView.h @@ -30,6 +30,7 @@ #include #include #include +#include #include "FUi_Control.h" #include "FUi_ITouchFlickGestureEventListener.h" #include "FUiAnim_VisualElement.h" @@ -69,6 +70,7 @@ class _AppWidgetView , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener , public Tizen::Ui::_ITouchFlickGestureEventListener , public _IAppWidgetPopupViewEventListener + , public Tizen::Ui::Controls::_IFrameEventListener { public: static _AppWidgetView* CreateAppWidgetViewN(void); @@ -118,6 +120,10 @@ private: virtual void OnAppWidgetPopupViewOpened(void); virtual void OnAppWidgetPopupViewClosed(void); virtual void OnDraw(void); + virtual void OnFrameActivated(const Tizen::Ui::Controls::_Frame& source); + virtual void OnFrameDeactivated(const Tizen::Ui::Controls::_Frame& source); + virtual void OnFrameMinimized(const Tizen::Ui::Controls::_Frame& source); + virtual void OnFrameRestored(const Tizen::Ui::Controls::_Frame& source); void OnAppWidgetUpdated(const Tizen::Graphics::Bitmap& bitmap, const Tizen::Graphics::FloatDimension& size); void OnAppWidgetUpdated(int pixmap); diff --git a/src/FShell_AppWidgetViewManager.cpp b/src/FShell_AppWidgetViewManager.cpp index 6f3eee1..a0b2833 100644 --- a/src/FShell_AppWidgetViewManager.cpp +++ b/src/FShell_AppWidgetViewManager.cpp @@ -43,6 +43,9 @@ extern "C" #include #include #include +#include +#include +#include #include "FShell_AppWidgetViewManager.h" #include "FShell_AppWidgetView.h" #include "FShell_AppWidgetPopupView.h" @@ -71,6 +74,8 @@ using namespace Tizen::Base; using namespace Tizen::Base::Collection; using namespace Tizen::Graphics; using namespace Tizen::Media; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; namespace { @@ -433,6 +438,27 @@ _AppWidgetViewManager::SetAppWidgetSize(const _AppWidgetView& appwidgetView, con livebox_resize(pAppWidget, sizeType, OnAppWidgetResized, this); } +void +_AppWidgetViewManager::AddFrameEventListener(void) +{ + if (!__pFrameEventListener) + { + unique_ptr<_FrameEventListener> pFrameEventListener(new (std::nothrow) _FrameEventListener()); + SysTryReturnVoidResult(NID_UI_CTRL, pFrameEventListener, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient."); + + _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame(); + SysTryReturnVoidResult(NID_UI_CTRL, pWindow, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid."); + + __pFrameEventListener = move(pFrameEventListener); + + _Frame* pFrame = dynamic_cast<_Frame*>(pWindow); + if (pFrame) + { + pFrame->AddFrameEventListener(*__pFrameEventListener); + } + } +} + _AppWidgetViewManager::_AppWidgetViewManager(void) : __glMode(false) { @@ -463,6 +489,19 @@ _AppWidgetViewManager::_AppWidgetViewManager(void) _AppWidgetViewManager::~_AppWidgetViewManager(void) { + _ControlManager* pControlManager = _ControlManager::GetInstance(); + if (pControlManager && __pFrameEventListener) + { + _Window* pWindow = pControlManager->GetCurrentFrame(); + if (pWindow) + { + _Frame* pFrame = dynamic_cast<_Frame*>(pWindow); + if (pFrame) + { + pFrame->RemoveFrameEventListener(*__pFrameEventListener); + } + } + } } int @@ -826,4 +865,28 @@ _AppWidgetViewManager::OnAppWidgetResized(livebox* pAppWidget, int ret, void* pD pAppWidgetViewManager->OnAppWidgetUpdated(pAppWidget); } +void +_AppWidgetViewManager::_FrameEventListener::OnFrameActivated(const Tizen::Ui::Controls::_Frame& source) +{ + int ret = livebox_client_resumed(); + SysLog(NID_UI_CTRL, "ret (%d)", ret); +} + +void +_AppWidgetViewManager::_FrameEventListener::OnFrameDeactivated(const Tizen::Ui::Controls::_Frame& source) +{ + int ret = livebox_client_paused(); + SysLog(NID_UI_CTRL, "ret (%d)", ret); +} + +void +_AppWidgetViewManager::_FrameEventListener::OnFrameMinimized(const Tizen::Ui::Controls::_Frame& source) +{ +} + +void +_AppWidgetViewManager::_FrameEventListener::OnFrameRestored(const Tizen::Ui::Controls::_Frame& source) +{ +} + }} // Tizen::Shell diff --git a/src/FShell_AppWidgetViewManager.h b/src/FShell_AppWidgetViewManager.h index 8353f5b..2def690 100644 --- a/src/FShell_AppWidgetViewManager.h +++ b/src/FShell_AppWidgetViewManager.h @@ -65,6 +65,7 @@ public: Tizen::Graphics::FloatDimension GetAppWidgetSize(livebox* pAppWidget) const; Tizen::Graphics::FloatDimension GetAppWidgetPopupSize(livebox* pAppWidget) const; void SetAppWidgetSize(const _AppWidgetView& appwidgetView, const Tizen::Graphics::FloatDimension& size); + void AddFrameEventListener(void); private: _AppWidgetViewManager(void); @@ -91,6 +92,16 @@ private: static void OnAppWidgetDeleted(livebox *pAppWidget, int ret, void* pData); static void OnAppWidgetResized(livebox* pAppWidget, int ret, void* pData); + class _FrameEventListener + : public Tizen::Ui::Controls::_IFrameEventListener + { + private: + virtual void OnFrameActivated(const Tizen::Ui::Controls::_Frame& source); + virtual void OnFrameDeactivated(const Tizen::Ui::Controls::_Frame& source); + virtual void OnFrameMinimized(const Tizen::Ui::Controls::_Frame& source); + virtual void OnFrameRestored(const Tizen::Ui::Controls::_Frame& source); + }; + private: struct _EventHandlerDeleter { @@ -116,6 +127,7 @@ private: std::unique_ptr __pCoordinateTransformer; std::unique_ptr __eventHandler; std::unique_ptr __faultEventHandler; + std::unique_ptr<_FrameEventListener> __pFrameEventListener; bool __glMode; }; -- 2.7.4