Updata Atlas example following the PixelData change
[platform/core/uifw/dali-demo.git] / examples / atlas / atlas-example.cpp
index c126da9..1d0f089 100644 (file)
@@ -16,6 +16,8 @@
  */
 
 #include <dali/dali.h>
+#include <dali/devel-api/images/atlas.h>
+
 #include "shared/view.h"
 #include <iostream>
 #include <cstdio>
@@ -26,9 +28,10 @@ class AtlasController;
 
 namespace
 {
-const char * const BACKGROUND_IMAGE( DALI_IMAGE_DIR "background-gradient.jpg" );
-const char * const TOOLBAR_IMAGE( DALI_IMAGE_DIR "top-bar.png" );
-const char * const LOSE_CONTEXT_IMAGE( DALI_IMAGE_DIR "icon-cluster-wobble.png" );
+const char * const BACKGROUND_IMAGE( DEMO_IMAGE_DIR "background-gradient.jpg" );
+const char * const TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" );
+const char * const LOSE_CONTEXT_IMAGE( DEMO_IMAGE_DIR "icon-cluster-wobble.png" );
+const char * const LOSE_CONTEXT_IMAGE_SELECTED( DEMO_IMAGE_DIR "icon-cluster-wobble-selected.png" );
 
 Application gApplication;
 AtlasController* gAtlasController(NULL);
@@ -69,55 +72,48 @@ public:
         "Atlas" );
 
     mLoseContextButton = Toolkit::PushButton::New();
-    mLoseContextButton.SetBackgroundImage( ResourceImage::New( LOSE_CONTEXT_IMAGE ) );
+    mLoseContextButton.SetUnselectedImage( LOSE_CONTEXT_IMAGE );
+    mLoseContextButton.SetSelectedImage( LOSE_CONTEXT_IMAGE_SELECTED );
     mLoseContextButton.ClickedSignal().Connect( this, &AtlasController::OnLoseContextButtonClicked );
     mToolBar.AddControl( mLoseContextButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalRight, DemoHelper::DEFAULT_MODE_SWITCH_PADDING );
 
-    mAtlas = Atlas::New( 400,300, Pixel::RGBA8888);
-    mAtlas.Clear(Vector4(0.f,0.5f,0.5f,0.5f));
-    mAtlas.Upload( DALI_IMAGE_DIR "icon-change.png", 50, 30 );
-    mAtlas.Upload( DALI_IMAGE_DIR "icon-cluster-carousel.png", 100, 30 );
-    mAtlas.Upload( DALI_IMAGE_DIR "icon-effects-on.png", 150, 30 );
-    mAtlas.Upload( DALI_IMAGE_DIR "icon-effect-cross.png", 100, 80 );
-    mAtlas.Upload( DALI_IMAGE_DIR "icon-effect-fold.png", 150, 80 );
-    mAtlas.Upload( DALI_IMAGE_DIR "icon-effect-wave.png", 200, 80 );
-    mAtlas.Upload( DALI_IMAGE_DIR "icon-item-view-layout-depth.png", 150, 130 );
-    mAtlas.Upload( DALI_IMAGE_DIR "icon-item-view-layout-grid.png", 200, 130 );
-    mAtlas.Upload( DALI_IMAGE_DIR "icon-item-view-layout-spiral.png", 250, 130 );
+    mAtlas = Atlas::New( 400,700, Pixel::RGBA8888);
+    mAtlas.Clear(Vector4(0.f,0.5f,0.5f,0.25f));
+    mAtlas.Upload( DEMO_IMAGE_DIR "icon-change.png", 50, 30 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "icon-cluster-carousel.png", 100, 30 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "icon-effects-on.png", 150, 30 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "icon-effect-cross.png", 100, 80 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "icon-effect-fold.png", 150, 80 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "icon-effect-wave.png", 200, 80 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "icon-item-view-layout-depth.png", 150, 130 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "icon-item-view-layout-grid.png", 200, 130 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "icon-item-view-layout-spiral.png", 250, 130 );
+
     UploadBufferImages();
+    UploadPixelData();
+
+    mAtlas.Upload( DEMO_IMAGE_DIR "gallery-small-1.jpg", 4, 304 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "gallery-small-2.jpg", 136, 304 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "gallery-small-3.jpg", 268, 304 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "gallery-small-4.jpg", 4, 436 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "gallery-small-5.jpg", 136, 436 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "gallery-small-6.jpg", 268, 436 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "gallery-small-7.jpg", 4, 568 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "gallery-small-7.jpg", 136, 568 );
+    mAtlas.Upload( DEMO_IMAGE_DIR "gallery-small-7.jpg", 268, 568 );
+
 
-    ImageActor imageActor1 = ImageActor::New( mAtlas );
-    imageActor1.SetY(-170.f);
-    imageActor1.SetParentOrigin(ParentOrigin::CENTER);
-    mContentLayer.Add( imageActor1 );
-
-    Atlas atlas2 = Atlas::New( 400,400, Pixel::RGB888);
-    atlas2.Clear( Color::RED );
-    atlas2.Upload( DALI_IMAGE_DIR "gallery-small-1.jpg", 4, 4 );
-    atlas2.Clear( Color::BLUE );
-    atlas2.Upload( DALI_IMAGE_DIR "gallery-small-2.jpg", 136, 4 );
-    atlas2.Upload( DALI_IMAGE_DIR "gallery-small-3.jpg", 268, 4 );
-    atlas2.Upload( DALI_IMAGE_DIR "gallery-small-4.jpg", 4, 136 );
-    atlas2.Upload( DALI_IMAGE_DIR "gallery-small-5.jpg", 136, 136 );
-    atlas2.Upload( DALI_IMAGE_DIR "gallery-small-6.jpg", 268, 135 );
-    atlas2.Upload( DALI_IMAGE_DIR "gallery-small-7.jpg", 4, 268 );
-    atlas2.Upload( DALI_IMAGE_DIR "gallery-small-7.jpg", 136, 268 );
-    atlas2.Upload( DALI_IMAGE_DIR "gallery-small-7.jpg", 268, 268 );
-
-
-    ImageActor imageActor2 = ImageActor::New( atlas2 );
-    imageActor2.SetY(200.f);
-    imageActor2.SetZ(-1.f);
-    imageActor2.SetParentOrigin(ParentOrigin::CENTER);
-    mContentLayer.Add( imageActor2 );
+    Toolkit::ImageView imageView = Toolkit::ImageView::New( mAtlas );
+
+    imageView.SetParentOrigin(ParentOrigin::CENTER);
+    mContentLayer.Add( imageView );
 
     mPanGestureDetector = PanGestureDetector::New();
-    mPanGestureDetector.DetectedSignal().Connect(this, &AtlasController::OnPanGesture);
-    mPanGestureDetector.Attach(imageActor1);
-    mPanGestureDetector.Attach(imageActor2);
+    mPanGestureDetector.DetectedSignal().Connect( this, &AtlasController::OnPanGesture );
+    mPanGestureDetector.Attach( imageView );
 
-    stage.ContextLostSignal().Connect(this, &AtlasController::OnContextLost);
-    stage.ContextRegainedSignal().Connect(this, &AtlasController::OnContextRegained);
+    stage.ContextLostSignal().Connect( this, &AtlasController::OnContextLost );
+    stage.ContextRegainedSignal().Connect( this, &AtlasController::OnContextRegained );
   }
 
   void UploadBufferImages()
@@ -131,10 +127,13 @@ public:
     mAtlas.Upload( CreateBufferImage( Vector4(0.5f, 0.5f, 0.f, 0.5f  ), 80, 30 ), 240, 210 );
     mAtlas.Upload( CreateBufferImage( Vector4(0.25f, 0.25f, 0.f, 0.5f  ), 80, 20 ), 280, 210 );
     mAtlas.Upload( CreateBufferImage( Vector4(0.1f, 0.1f, 0.f, 0.5f  ), 80, 10 ), 320, 210 );
-    BufferImage redBlock = CreateBufferImage( Color::RED, 40, 40 );
-    mAtlas.Upload(redBlock, 320, 30);
-    mAtlas.Upload(redBlock, 320, 80);
-    mAtlas.Upload(redBlock, 320, 130);
+  }
+
+  void UploadPixelData()
+  {
+    mAtlas.Upload( CreatePixelData( Vector3(1.f, 1.f, 0.f ), 40, 40 ), 320, 30 );
+    mAtlas.Upload( CreatePixelData( Vector3(0.f, 1.f, 1.f ), 40, 40 ), 320, 80 );
+    mAtlas.Upload( CreatePixelData( Vector3(1.f, 0.f, 1.f ), 40, 40 ), 320, 130 );
   }
 
   static void NewWindow(void)
@@ -178,6 +177,7 @@ public:
   {
     printf("Stage reporting context regain\n");
     UploadBufferImages();
+    UploadPixelData();
   }
 
 private:
@@ -197,17 +197,29 @@ private:
       pixbuf[i*4+3] = 0xFF * color.a;
     }
 
-    imageData.Update();
-
     return imageData;
   }
 
+  PixelData CreatePixelData( const Vector3& color, const unsigned int width, const unsigned int height )
+  {
+    unsigned int size = width*height;
+    unsigned char* pixels = new unsigned char [size*3u];
+    for( unsigned int i = 0; i < size; i++ )
+    {
+      pixels[i*3u] = 0xFF * color.x;
+      pixels[i*3u+1u] = 0xFF * color.y;
+      pixels[i*3u+2u] = 0xFF * color.z;
+    }
+
+    return PixelData::New( pixels, width, height, Pixel::RGB888, PixelData::DELETE_ARRAY );
+  }
+
 
 private:
   Application&  mApplication;
   PanGestureDetector mPanGestureDetector;
 
-  Toolkit::View              mView;                              ///< The View instance.
+  Toolkit::Control           mView;                              ///< The View instance.
   Toolkit::ToolBar           mToolBar;                           ///< The View's Toolbar.
   Layer                      mContentLayer;                      ///< Content layer (scrolling cluster content)
   Toolkit::PushButton        mLoseContextButton;
@@ -222,9 +234,9 @@ void RunTest( Application& application )
 
 // Entry point for Linux & Tizen applications
 //
-int main( int argc, char **argv )
+int DALI_EXPORT_API main( int argc, char **argv )
 {
-  gApplication = Application::New( &argc, &argv );
+  gApplication = Application::New( &argc, &argv, DEMO_THEME_PATH );
 
   RunTest( gApplication );