Allow applications to select a transparent top-level window. 60/19960/1
authorJavon Prince <javon.prince@samsung.com>
Thu, 17 Apr 2014 09:25:00 +0000 (10:25 +0100)
committerAndrew Cox <andrew.cox@partner.samsung.com>
Wed, 23 Apr 2014 18:55:37 +0000 (19:55 +0100)
[Issue#] (N/A)

[Problem] Dali::Application would only create opaque top-level windows

[Cause] Hidden APIs

[Solution] Extend Application class to select the type of window required

Usage:

int main(int argc, char **argv)
{
  Application myApplication( Application::New( &argc, &argv, "My Application", Application::TRANSPARENT ) );
  ...
}

Change-Id: I15c646c6ee2a2ca09ae2404ed3336cde01368642
Signed-off-by: Javon Prince <javon.prince@samsung.com>
Signed-off-by: Andrew Cox <andrew.cox@partner.samsung.com>
adaptors/tizen/internal/application-impl.cpp
adaptors/tizen/internal/application-impl.h
adaptors/tizen/public-api/adaptor-framework/application.cpp
adaptors/tizen/public-api/adaptor-framework/application.h

index 810cbb0..b9a6603 100644 (file)
@@ -61,9 +61,10 @@ ApplicationPtr Application::New(
   int* argc,
   char **argv[],
   const std::string& name,
-  const DeviceLayout& baseLayout )
+  const DeviceLayout& baseLayout,
+  Dali::Application::WINDOW_MODE windowMode)
 {
-  ApplicationPtr application ( new Application (argc, argv, name, baseLayout ) );
+  ApplicationPtr application ( new Application (argc, argv, name, baseLayout, windowMode ) );
   return application;
 }
 
@@ -71,11 +72,13 @@ Application::Application(
   int* argc,
   char** argv[],
   const std::string& name,
-  const DeviceLayout& baseLayout )
+  const DeviceLayout& baseLayout,
+  Dali::Application::WINDOW_MODE windowMode)
 : mFramework(NULL),
   mCommandLineOptions(NULL),
   mAdaptor(NULL),
   mWindow(),
+  mWindowMode( windowMode ),
   mName(name),
   mInitialized(false),
   mBaseLayout(baseLayout),
@@ -114,7 +117,7 @@ void Application::CreateWindow()
     windowPosition = PositionSize(0,0,mCommandLineOptions->stageWidth,mCommandLineOptions->stageHeight);
   }
 
-  mWindow = Dali::Window::New( windowPosition, mName );
+  mWindow = Dali::Window::New( windowPosition, mName, mWindowMode == Dali::Application::TRANSPARENT );
 }
 
 void Application::CreateAdaptor()
index 1a36300..cd712cf 100644 (file)
@@ -65,10 +65,13 @@ public:
    * @param[in]  argv        A pointer to the argument list
    * @param[in]  name        A name of application
    * @param[in]  baseLayout  The base layout that the application has been written for
+   * @param[in]  windowMode  A member of Dali::Application::WINDOW_MODE
    */
-  static ApplicationPtr New(int* argc, char **argv[], const std::string& name, const DeviceLayout& baseLayout);
+  static ApplicationPtr New(int* argc, char **argv[], const std::string& name,
+                            const DeviceLayout& baseLayout,
+                            Dali::Application::WINDOW_MODE windowMode);
 
-  Application(int* argc, char **argv[], const std::string& name, const DeviceLayout& baseLayout);
+  Application(int* argc, char **argv[], const std::string& name, const DeviceLayout& baseLayout, Dali::Application::WINDOW_MODE windowMode );
 
   /**
    * Destructor
@@ -260,6 +263,7 @@ private:
 
   Dali::Adaptor*                        mAdaptor;
   Dali::Window                          mWindow;
+  Dali::Application::WINDOW_MODE        mWindowMode;
   std::string                           mName;
 
   bool                                  mInitialized;
index a1c4625..486937a 100644 (file)
@@ -30,25 +30,31 @@ namespace Dali
 
 Application Application::New( int* argc, char **argv[] )
 {
-  Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::New( argc, argv, "Dali Application", DeviceLayout::DEFAULT_BASE_LAYOUT );
+  Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::New( argc, argv, "Dali Application", DeviceLayout::DEFAULT_BASE_LAYOUT, OPAQUE );
   return Application(internal.Get());
 }
 
 Application Application::New( int* argc, char **argv[], const std::string& name )
 {
-  Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::New( argc, argv, name, DeviceLayout::DEFAULT_BASE_LAYOUT );
+  Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::New( argc, argv, name, DeviceLayout::DEFAULT_BASE_LAYOUT, OPAQUE );
+  return Application(internal.Get());
+}
+
+Application Application::New( int* argc, char **argv[], const std::string& name, WINDOW_MODE windowMode )
+{
+  Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::New( argc, argv, name, DeviceLayout::DEFAULT_BASE_LAYOUT, windowMode );
   return Application(internal.Get());
 }
 
 Application Application::New(int* argc, char **argv[], const DeviceLayout& baseLayout)
 {
-  Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::New( argc, argv, "Dali Application", baseLayout );
+  Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::New( argc, argv, "Dali Application", baseLayout, OPAQUE );
   return Application(internal.Get());
 }
 
 Application Application::New(int* argc, char **argv[], const std::string& name, const DeviceLayout& baseLayout)
 {
-  Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::New( argc, argv, name, baseLayout );
+  Internal::Adaptor::ApplicationPtr internal = Internal::Adaptor::Application::New( argc, argv, name, baseLayout, OPAQUE );
   return Application(internal.Get());
 }
 
index 9942093..2501841 100644 (file)
@@ -90,6 +90,15 @@ public:
 
   typedef SignalV2< void (Application&) > AppSignalV2;
 
+  /**
+   * Decides whether a Dali application window is opaque or transparent.
+   */
+  enum WINDOW_MODE
+  {
+    OPAQUE = 0,       ///< The window will be opaque
+    TRANSPARENT = 1   ///< The window transparency will match the alpha value set in Dali::Stage::SetBackgroundcolor()
+  };
+
 public:
 
   /**
@@ -116,6 +125,20 @@ public:
   static Application New( int* argc, char **argv[], const std::string& name );
 
   /**
+   * This is the constructor for applications with a name, and also require a
+   * transparent top-level window
+   *
+   * @param[in,out]  argc  A pointer to the number of arguments
+   * @param[in,out]  argv  A pointer the the argument list
+   * @param[in]  name  A name of application
+   * @param[in]  windowMode A member of WINDOW_MODE
+   *
+   * @note The default base layout (DeviceLayout::DEFAULT_BASE_LAYOUT) will be used with this constructor.
+   * @note Supported options are stripped from argv, and argc is updated appropriately.
+   */
+  static Application New( int* argc, char **argv[], const std::string& name, WINDOW_MODE windowMode );
+
+  /**
    * This is the constructor for applications when a layout for the application is specified.
    *
    * @param[in,out]  argc        A pointer to the number of arguments