Changed DALI_*_DIR to DEMO_*_DIR
[platform/core/uifw/dali-demo.git] / examples / new-window / new-window-example.cpp
index a8d6e0b..8dff27d 100644 (file)
@@ -32,13 +32,13 @@ class NewWindowController;
 
 namespace
 {
-const char * const BACKGROUND_IMAGE( DALI_IMAGE_DIR "background-2.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 LOSE_CONTEXT_IMAGE_SELECTED( DALI_IMAGE_DIR "icon-cluster-wobble-selected.png" );
-const char * const BASE_IMAGE( DALI_IMAGE_DIR "gallery-large-14.jpg" );
-const char * const EFFECT_IMAGE( DALI_IMAGE_DIR "gallery-large-18.jpg" );
-const char * const LOGO_IMAGE(DALI_IMAGE_DIR "dali-logo.png");
+const char * const BACKGROUND_IMAGE( DEMO_IMAGE_DIR "background-2.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" );
+const char * const BASE_IMAGE( DEMO_IMAGE_DIR "gallery-large-14.jpg" );
+const char * const EFFECT_IMAGE( DEMO_IMAGE_DIR "gallery-large-18.jpg" );
+const char * const LOGO_IMAGE(DEMO_IMAGE_DIR "dali-logo.png");
 
 const float EXPLOSION_DURATION(1.2f);
 const unsigned int EMIT_INTERVAL_IN_MS(40);
@@ -99,6 +99,9 @@ void main()\n
 );
 
 const char* FRAGMENT_BLEND_SHADER = MAKE_SHADER(
+varying mediump vec2  vTexCoord;\n
+uniform sampler2D sTexture;\n
+uniform sampler2D sEffect;\n
 uniform mediump float alpha;\n
 \n
 void main()\n
@@ -119,16 +122,16 @@ public:
   void Create( Application& app );
   void Destroy( Application& app );
 
-  void AddBubbles(const Vector2& stageSize);
-  void AddMeshActor();
-  void AddBlendingImageActor();
-  void AddTextLabel();
+  void AddBubbles( Actor& parentActor, const Vector2& stageSize);
+  void AddMeshActor( Actor& parentActor );
+  void AddBlendingImageActor( Actor& parentActor );
+  void AddTextLabel( Actor& parentActor );
 
-  ImageActor CreateBlurredMirrorImage(const char* imageName);
-  FrameBufferImage CreateFrameBufferForImage(const char* imageName, Image image, ShaderEffect shaderEffect);
+  ImageView CreateBlurredMirrorImage(const char* imageName);
+  FrameBufferImage CreateFrameBufferForImage( const char* imageName, Property::Map& shaderEffect, const Vector3& rgbDelta );
   void SetUpBubbleEmission( const Vector2& emitPosition, const Vector2& direction );
   Geometry CreateMeshGeometry();
-  ShaderEffect CreateColorModifierer( const Vector3& rgbDelta );
+  Dali::Property::Map CreateColorModifierer();
 
   static void NewWindow(void);
 
@@ -185,9 +188,8 @@ void NewWindowController::Create( Application& app )
 
   Size stageSize = stage.GetSize();
   Image backgroundImage = ResourceImage::New( BACKGROUND_IMAGE, Dali::ImageDimensions( stageSize.x, stageSize.y ), Dali::FittingMode::SCALE_TO_FILL, Dali::SamplingMode::BOX_THEN_LINEAR );
-  ImageActor backgroundActor = ImageActor::New( backgroundImage );
+  ImageView backgroundActor = ImageView::New( backgroundImage );
   backgroundActor.SetParentOrigin( ParentOrigin::CENTER );
-  backgroundActor.SetZ(-2.f);
   mContentLayer.Add(backgroundActor);
 
   // Point the default render task at the view
@@ -199,8 +201,8 @@ void NewWindowController::Create( Application& app )
   }
 
   mLoseContextButton = Toolkit::PushButton::New();
-  mLoseContextButton.SetButtonImage( ResourceImage::New( LOSE_CONTEXT_IMAGE ) );
-  mLoseContextButton.SetSelectedImage( ResourceImage::New( LOSE_CONTEXT_IMAGE_SELECTED ) );
+  mLoseContextButton.SetUnselectedImage( LOSE_CONTEXT_IMAGE );
+  mLoseContextButton.SetSelectedImage( LOSE_CONTEXT_IMAGE_SELECTED );
   mLoseContextButton.ClickedSignal().Connect( this, &NewWindowController::OnLoseContextButtonClicked );
   mToolBar.AddControl( mLoseContextButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalRight, DemoHelper::DEFAULT_MODE_SWITCH_PADDING );
 
@@ -208,24 +210,24 @@ void NewWindowController::Create( Application& app )
   logoLayoutActor.SetParentOrigin(ParentOrigin::CENTER);
   logoLayoutActor.SetPosition(0.0f, -200.0f, 0.0f);
   logoLayoutActor.SetScale(0.5f);
-  mContentLayer.Add(logoLayoutActor);
+  backgroundActor.Add(logoLayoutActor);
 
   Image image = ResourceImage::New(LOGO_IMAGE);
-  ImageActor imageActor = ImageActor::New(image);
-  imageActor.SetName("dali-logo");
-  imageActor.SetParentOrigin(ParentOrigin::CENTER);
-  imageActor.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER);
-  logoLayoutActor.Add(imageActor);
-
-  ImageActor mirrorImageActor = CreateBlurredMirrorImage(LOGO_IMAGE);
-  mirrorImageActor.SetParentOrigin(ParentOrigin::CENTER);
-  mirrorImageActor.SetAnchorPoint(AnchorPoint::TOP_CENTER);
-  logoLayoutActor.Add(mirrorImageActor);
-
-  AddBubbles(stage.GetSize());
-  AddMeshActor();
-  AddBlendingImageActor();
-  AddTextLabel();
+  ImageView imageView = ImageView::New(image);
+  imageView.SetName("daliLogo");
+  imageView.SetParentOrigin(ParentOrigin::CENTER);
+  imageView.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER);
+  logoLayoutActor.Add(imageView);
+
+  ImageView mirrorImageView = CreateBlurredMirrorImage(LOGO_IMAGE);
+  mirrorImageView.SetParentOrigin(ParentOrigin::CENTER);
+  mirrorImageView.SetAnchorPoint(AnchorPoint::TOP_CENTER);
+  logoLayoutActor.Add(mirrorImageView);
+
+  AddBubbles( backgroundActor, stage.GetSize());
+  AddMeshActor( backgroundActor );
+  AddBlendingImageActor( backgroundActor );
+  AddTextLabel( backgroundActor );
 
   stage.ContextLostSignal().Connect(this, &NewWindowController::OnContextLost);
   stage.ContextRegainedSignal().Connect(this, &NewWindowController::OnContextRegained);
@@ -236,17 +238,17 @@ void NewWindowController::Destroy( Application& app )
   UnparentAndReset(mTextActor);
 }
 
-void NewWindowController::AddBubbles(const Vector2& stageSize)
+void NewWindowController::AddBubbles( Actor& parentActor, const Vector2& stageSize)
 {
   mEmitter = Toolkit::BubbleEmitter::New( stageSize,
-                                          ResourceImage::New( DALI_IMAGE_DIR "bubble-ball.png" ),
+                                          ResourceImage::New( DEMO_IMAGE_DIR "bubble-ball.png" ),
                                           200, Vector2( 5.0f, 5.0f ) );
 
   Image background = ResourceImage::New(BACKGROUND_IMAGE);
   mEmitter.SetBackground( background, Vector3(0.5f, 0.f,0.5f) );
   mEmitter.SetBubbleDensity( 9.f );
   Actor bubbleRoot = mEmitter.GetRootActor();
-  mContentLayer.Add( bubbleRoot );
+  parentActor.Add( bubbleRoot );
   bubbleRoot.SetParentOrigin(ParentOrigin::CENTER);
   bubbleRoot.SetZ(0.1f);
 
@@ -255,7 +257,7 @@ void NewWindowController::AddBubbles(const Vector2& stageSize)
   mEmitTrackTimer.Start();
 }
 
-void NewWindowController::AddMeshActor()
+void NewWindowController::AddMeshActor( Actor& parentActor )
 {
   Geometry meshGeometry = CreateMeshGeometry();
 
@@ -266,72 +268,82 @@ void NewWindowController::AddMeshActor()
 
   Actor colorMeshActor = Actor::New();
   colorMeshActor.AddRenderer( colorMeshRenderer );
-  colorMeshActor.SetSize( 175.f,175.f );
+  colorMeshActor.SetSize( 175.f,175.f, 175.f );
   colorMeshActor.SetParentOrigin( ParentOrigin::CENTER );
   colorMeshActor.SetAnchorPoint(AnchorPoint::TOP_CENTER);
   colorMeshActor.SetPosition(Vector3(0.0f, 50.0f, 0.0f));
   colorMeshActor.SetOrientation( Degree(75.f), Vector3::XAXIS );
   colorMeshActor.SetName("ColorMeshActor");
-  mContentLayer.Add( colorMeshActor );
 
  // Create a textured mesh
   Image effectImage = ResourceImage::New(EFFECT_IMAGE);
-  Sampler sampler = Sampler::New(effectImage, "sTexture");
-
   Shader shaderTextureMesh = Shader::New( VERTEX_TEXTURE_MESH, FRAGMENT_TEXTURE_MESH );
   Material textureMeshMaterial = Material::New( shaderTextureMesh );
-  textureMeshMaterial.AddSampler( sampler );
+  textureMeshMaterial.AddTexture(effectImage, "sTexture");
   Renderer textureMeshRenderer = Renderer::New( meshGeometry, textureMeshMaterial );
 
   Actor textureMeshActor = Actor::New();
   textureMeshActor.AddRenderer( textureMeshRenderer );
-  textureMeshActor.SetSize( 175.f,175.f );
+  textureMeshActor.SetSize( 175.f,175.f, 175.f );
   textureMeshActor.SetParentOrigin( ParentOrigin::CENTER );
   textureMeshActor.SetAnchorPoint(AnchorPoint::TOP_CENTER);
   textureMeshActor.SetPosition(Vector3(0.0f, 200.0f, 0.0f));
   textureMeshActor.SetOrientation( Degree(75.f), Vector3::XAXIS );
   textureMeshActor.SetName("TextureMeshActor");
-  mContentLayer.Add( textureMeshActor );
+
+  Layer layer3d = Layer::New();
+  layer3d.SetParentOrigin( ParentOrigin::CENTER );
+  layer3d.SetAnchorPoint( AnchorPoint::CENTER );
+  layer3d.SetBehavior(Layer::LAYER_3D);
+
+  layer3d.Add( colorMeshActor );
+  layer3d.Add( textureMeshActor );
+  parentActor.Add(layer3d);
 }
 
-void NewWindowController::AddBlendingImageActor()
+void NewWindowController::AddBlendingImageActor( Actor& parentActor )
 {
-  ShaderEffect colorModifier = CreateColorModifierer(Vector3( 0.5f, 0.5f, 0.5f ));
-  Image effectImage = ResourceImage::New(EFFECT_IMAGE);
-  FrameBufferImage fb2 = CreateFrameBufferForImage( EFFECT_IMAGE, effectImage, colorModifier );
+  Property::Map colorModifier = CreateColorModifierer();
+
+  FrameBufferImage fb2 = CreateFrameBufferForImage( EFFECT_IMAGE, colorModifier, Vector3( 0.5f, 0.5f, 0.5f ) );
 
-  ImageActor tmpActor = ImageActor::New(fb2);
-  mContentLayer.Add(tmpActor);
+  ImageView tmpActor = ImageView::New(fb2);
+  parentActor.Add(tmpActor);
   tmpActor.SetParentOrigin(ParentOrigin::CENTER_RIGHT);
   tmpActor.SetAnchorPoint(AnchorPoint::TOP_RIGHT);
   tmpActor.SetPosition(Vector3(0.0f, 150.0f, 0.0f));
   tmpActor.SetScale(0.25f);
 
   // create blending shader effect
-  ShaderEffect blendShader = ShaderEffect::New( "", FRAGMENT_BLEND_SHADER );
-  blendShader.SetEffectImage( fb2 );
-  blendShader.SetUniform("alpha", 0.5f);
+  Property::Map customShader;
+  customShader[ "fragmentShader" ] = FRAGMENT_BLEND_SHADER;
+  Property::Map map;
+  map[ "shader" ] = customShader;
 
   Image baseImage = ResourceImage::New(BASE_IMAGE);
-  ImageActor blendActor = ImageActor::New( baseImage );
+  ImageView blendActor = ImageView::New( baseImage );
+  blendActor.SetProperty( ImageView::Property::IMAGE, map );
+  blendActor.RegisterProperty( "alpha", 0.5f );
+
   blendActor.SetParentOrigin(ParentOrigin::CENTER_RIGHT);
   blendActor.SetAnchorPoint(AnchorPoint::BOTTOM_RIGHT);
   blendActor.SetPosition(Vector3(0.0f, 100.0f, 0.0f));
   blendActor.SetSize(140, 140);
-  blendActor.SetShaderEffect( blendShader );
-  mContentLayer.Add(blendActor);
+  parentActor.Add(blendActor);
+
+  blendActor.GetRendererAt(0u).GetMaterial().AddTexture(fb2, "sEffect");
 }
 
-void NewWindowController::AddTextLabel()
+void NewWindowController::AddTextLabel( Actor& parentActor )
 {
   mTextActor = TextLabel::New("Some text");
   mTextActor.SetParentOrigin(ParentOrigin::CENTER);
   mTextActor.SetColor(Color::RED);
   mTextActor.SetName("PushMe text");
-  mContentLayer.Add( mTextActor );
+  parentActor.Add( mTextActor );
 }
 
-ImageActor NewWindowController::CreateBlurredMirrorImage(const char* imageName)
+ImageView NewWindowController::CreateBlurredMirrorImage(const char* imageName)
 {
   Image image = ResourceImage::New(imageName);
 
@@ -346,32 +358,31 @@ ImageActor NewWindowController::CreateBlurredMirrorImage(const char* imageName)
   Stage::GetCurrent().Add(gbv);
   gbv.ActivateOnce();
 
-  ImageActor blurredActor = ImageActor::New(fbo);
+  ImageView blurredActor = ImageView::New(fbo);
   blurredActor.SetSize(FBOSize);
   blurredActor.SetScale(1.0f, -1.0f, 1.0f);
   return blurredActor;
 }
 
-FrameBufferImage NewWindowController::CreateFrameBufferForImage(const char* imageName, Image image, ShaderEffect shaderEffect)
+FrameBufferImage NewWindowController::CreateFrameBufferForImage(const char* imageName, Property::Map& shaderEffect, const Vector3& rgbDelta )
 {
   Stage stage = Stage::GetCurrent();
-  Uint16Pair intFboSize = ResourceImage::GetImageSize(imageName);
+  Uint16Pair intFboSize = ResourceImage::GetImageSize( imageName );
   Vector2 FBOSize = Vector2(intFboSize.GetWidth(), intFboSize.GetHeight());
 
   FrameBufferImage framebuffer = FrameBufferImage::New(FBOSize.x, FBOSize.y );
 
   RenderTask renderTask = stage.GetRenderTaskList().CreateTask();
 
-  ImageActor imageActor = ImageActor::New(image);
-  imageActor.SetName("Source image actor");
-  if(shaderEffect)
-  {
-    imageActor.SetShaderEffect(shaderEffect);
-  }
-  imageActor.SetParentOrigin(ParentOrigin::CENTER);
-  imageActor.SetAnchorPoint(AnchorPoint::CENTER);
-  imageActor.SetScale(1.0f, -1.0f, 1.0f);
-  stage.Add(imageActor); // Not in default image view
+  ImageView imageView = ImageView::New( imageName );
+  imageView.SetName("Source image actor");
+  imageView.SetProperty( ImageView::Property::IMAGE, shaderEffect );
+  imageView.RegisterProperty( "uRGBDelta", rgbDelta );
+
+  imageView.SetParentOrigin(ParentOrigin::CENTER);
+  imageView.SetAnchorPoint(AnchorPoint::CENTER);
+  imageView.SetScale(1.0f, -1.0f, 1.0f);
+  stage.Add(imageView); // Not in default image view
 
   CameraActor cameraActor = CameraActor::New(FBOSize);
   cameraActor.SetParentOrigin(ParentOrigin::CENTER);
@@ -382,7 +393,7 @@ FrameBufferImage NewWindowController::CreateFrameBufferForImage(const char* imag
   cameraActor.SetPosition(0.0f, 0.0f, ((FBOSize.height * 0.5f) / tanf(Math::PI * 0.125f)));
   stage.Add(cameraActor);
 
-  renderTask.SetSourceActor(imageActor);
+  renderTask.SetSourceActor(imageView);
   renderTask.SetInputEnabled(false);
   renderTask.SetTargetFrameBuffer(framebuffer);
   renderTask.SetCameraActor( cameraActor );
@@ -453,12 +464,16 @@ Geometry NewWindowController::CreateMeshGeometry()
   return geometry;
 }
 
-ShaderEffect NewWindowController::CreateColorModifierer( const Vector3& rgbDelta )
+Dali::Property::Map NewWindowController::CreateColorModifierer()
 {
std::string fragmentShader = MAKE_SHADER(
const char* fragmentShader ( DALI_COMPOSE_SHADER (
    precision highp float;\n
    uniform vec3 uRGBDelta;\n
    uniform float uIgnoreAlpha;\n
+   \n
+   varying mediump vec2 vTexCoord;\n
+   uniform sampler2D sTexture;\n
+   \n
    float rand(vec2 co) \n
    {\n
      return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); \n}
@@ -473,12 +488,14 @@ ShaderEffect NewWindowController::CreateColorModifierer( const Vector3& rgbDelta
      color.rgb -= min(color.rgb*2.0, 0.0);\n
      gl_FragColor = color; \n
    }\n
- );
+ ) );
 
- ShaderEffect shaderEffect = ShaderEffect::New("", fragmentShader);
- shaderEffect.SetUniform( "uRGBDelta", rgbDelta );
+ Property::Map map;
+ Property::Map customShader;
+ customShader[ "fragmentShader" ] = fragmentShader;
+ map[ "shader" ] = customShader;
 
- return shaderEffect;
+ return map;
 }
 
 void NewWindowController::NewWindow(void)
@@ -546,7 +563,7 @@ void RunTest(Application& app)
 //
 int main(int argc, char **argv)
 {
-  gApplication = Application::New(&argc, &argv, DALI_DEMO_THEME_PATH);
+  gApplication = Application::New(&argc, &argv, DEMO_THEME_PATH);
   RunTest(gApplication);
 
   return 0;