Example of setting PixelArea in ImageView 94/56794/5
authorXiangyin Ma <x1.ma@samsung.com>
Tue, 12 Jan 2016 15:31:50 +0000 (15:31 +0000)
committerXiangyin Ma <x1.ma@samsung.com>
Tue, 19 Jan 2016 16:37:02 +0000 (16:37 +0000)
Change-Id: I488842dcec638e1d290142b143a11e82945eb3c3

com.samsung.dali-demo.xml
demo/dali-demo.cpp
examples/image-view-pixel-area/image-view-pixel-area-example.cpp [new file with mode: 0644]
shared/dali-demo-strings.h

index 8c296a6..7eb994f 100644 (file)
        <ui-application appid="image-view.example" exec="/usr/apps/com.samsung.dali-demo/bin/image-view.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
                <label>Image View</label>
        </ui-application>
+       <ui-application appid="image-view-pixel-area.example" exec="/usr/apps/com.samsung.dali-demo/bin/image-view-pixel-area.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
+               <label>ImageView Pixel Area</label>
+       </ui-application>
 </manifest>
index 1f1b3db..73df547 100644 (file)
@@ -69,6 +69,7 @@ int main(int argc, char **argv)
   demo.AddExample(Example("line-mesh.example", DALI_DEMO_STR_TITLE_LINE_MESH));
   demo.AddExample(Example("gradients.example", DALI_DEMO_STR_TITLE_COLOR_GRADIENT));
   demo.AddExample(Example("image-view.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW));
+  demo.AddExample(Example("image-view-pixel-area.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW_PIXEL_AREA));
   demo.AddExample(Example("super-blur-bloom.example", DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM));
 
   demo.SortAlphabetically( true );
diff --git a/examples/image-view-pixel-area/image-view-pixel-area-example.cpp b/examples/image-view-pixel-area/image-view-pixel-area-example.cpp
new file mode 100644 (file)
index 0000000..b2fcbe9
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dali-toolkit/dali-toolkit.h>
+
+using namespace Dali;
+
+namespace
+{
+const char* IMAGE_PATH[] = { DALI_IMAGE_DIR "gallery-large-7.jpg",
+                             DALI_IMAGE_DIR "gallery-large-12.jpg",
+                             DALI_IMAGE_DIR "gallery-large-18.jpg" };
+
+const unsigned int NUM_IMAGES = sizeof(IMAGE_PATH) / sizeof(char*);
+}
+
+class ImageViewPixelAreaApp : public ConnectionTracker
+{
+public:
+  ImageViewPixelAreaApp( Application& application )
+  : mApplication( application ),
+    mIndex(0u)
+  {
+    // Connect to the Application's Init signal
+    mApplication.InitSignal().Connect( this, &ImageViewPixelAreaApp::Create );
+  }
+
+  ~ImageViewPixelAreaApp()
+  {
+    // Nothing to do here;
+  }
+
+private:
+  // The Init signal is received once (only) during the Application lifetime
+  void Create( Application& application )
+  {
+    // Get a handle to the stage
+    Stage stage = Stage::GetCurrent();
+    stage.KeyEventSignal().Connect(this, &ImageViewPixelAreaApp::OnKeyEvent);
+
+    ImageDimensions size( 510, 510 );
+    float subSize = 170.f;
+    float relativeSubSize = 0.33;
+    Animation animation = Animation::New( 10.f );
+    for( int i=0; i<3;i++ )
+      for( int j=0; j<3; j++ )
+      {
+        mImageView[i][j] = Toolkit::ImageView::New( IMAGE_PATH[mIndex], size );
+        mImageView[i][j].SetParentOrigin( ParentOrigin::CENTER );
+        mImageView[i][j].SetAnchorPoint(AnchorPoint::CENTER );
+        mImageView[i][j].SetPosition( subSize*(i-1)*1.1f, subSize*(j-1)*1.1f );
+        mImageView[i][j].SetSize( subSize, subSize );
+        stage.Add(mImageView[i][j]);
+
+        animation.AnimateTo( Property(mImageView[i][j], Toolkit::ImageView::Property::PIXEL_AREA),
+                             Vector4( relativeSubSize*i, relativeSubSize*j, relativeSubSize, relativeSubSize ),
+                             AlphaFunction::BOUNCE );
+      }
+    animation.SetLooping( true );
+    animation.Play();
+
+    // Respond to a click anywhere on the stage
+    stage.GetRootLayer().TouchedSignal().Connect( this, &ImageViewPixelAreaApp::OnTouch );
+  }
+
+  bool OnTouch( Actor actor, const TouchEvent& touch )
+  {
+    const TouchPoint &point = touch.GetPoint(0);
+    if(point.state == TouchPoint::Down)
+    {
+      mIndex++;
+      for( int i=0; i<3;i++ )
+        for( int j=0; j<3; j++ )
+        {
+          mImageView[i][j].SetImage( IMAGE_PATH[mIndex%NUM_IMAGES] );
+        }
+    }
+    return true;
+  }
+
+  void OnKeyEvent(const KeyEvent& event)
+  {
+    if(event.state == KeyEvent::Down)
+    {
+      if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) )
+      {
+        mApplication.Quit();
+      }
+    }
+  }
+
+private:
+  Application&  mApplication;
+  Toolkit::ImageView mImageView[3][3];
+  unsigned int mIndex;
+};
+
+void RunTest( Application& application )
+{
+  ImageViewPixelAreaApp test( application );
+
+  application.MainLoop();
+}
+
+// Entry point for Linux & Tizen applications
+//
+int main( int argc, char **argv )
+{
+  Application application = Application::New( &argc, &argv );
+
+  RunTest( application );
+
+  return 0;
+}
index 0f0dea9..0fae544 100644 (file)
@@ -98,6 +98,7 @@ extern "C"
 #define DALI_DEMO_STR_TITLE_LINE_MESH                 "Mesh Line"
 #define DALI_DEMO_STR_TITLE_COLOR_GRADIENT            "Color Gradient"
 #define DALI_DEMO_STR_TITLE_IMAGE_VIEW                "Image View"
+#define DALI_DEMO_STR_TITLE_IMAGE_VIEW_PIXEL_AREA     "Image View Pixel Area"
 #define DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM          "Super Blur and Bloom"
 
 #endif