X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Fnew-window%2Fnew-window-example.cpp;h=a72e1de5164c1ac8acbd84a35a22e4dae7d28b64;hb=ff961cccdcbf1c30b0f53b0da027df855cde2b63;hp=889e038c007be9833dc29373efcc46143f9b5d54;hpb=857ef19a722e134f7a5d11e83a045f6a2c658ff2;p=platform%2Fcore%2Fuifw%2Fdali-demo.git diff --git a/examples/new-window/new-window-example.cpp b/examples/new-window/new-window-example.cpp index 889e038..a72e1de 100644 --- a/examples/new-window/new-window-example.cpp +++ b/examples/new-window/new-window-example.cpp @@ -24,6 +24,7 @@ // INTERNAL INCLUDES #include "shared/view.h" +#include "shared/utility.h" using namespace Dali; using namespace Dali::Toolkit; @@ -32,13 +33,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 +100,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 +123,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); @@ -184,10 +188,8 @@ void NewWindowController::Create( Application& app ) "Context recovery" ); 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( BACKGROUND_IMAGE, Dali::ImageDimensions( stageSize.x, stageSize.y ) ); 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,23 @@ 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); + ImageView imageView = ImageView::New( LOGO_IMAGE ); + imageView.SetName("daliLogo"); + imageView.SetParentOrigin(ParentOrigin::CENTER); + imageView.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER); + logoLayoutActor.Add(imageView); - ImageActor mirrorImageActor = CreateBlurredMirrorImage(LOGO_IMAGE); - mirrorImageActor.SetParentOrigin(ParentOrigin::CENTER); - mirrorImageActor.SetAnchorPoint(AnchorPoint::TOP_CENTER); - logoLayoutActor.Add(mirrorImageActor); + ImageView mirrorImageView = CreateBlurredMirrorImage(LOGO_IMAGE); + mirrorImageView.SetParentOrigin(ParentOrigin::TOP_CENTER); + mirrorImageView.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER); + logoLayoutActor.Add(mirrorImageView); - AddBubbles(stage.GetSize()); - AddMeshActor(); - AddBlendingImageActor(); - AddTextLabel(); + AddBubbles( backgroundActor, stage.GetSize()); + AddMeshActor( backgroundActor ); + AddBlendingImageActor( backgroundActor ); + AddTextLabel( backgroundActor ); stage.ContextLostSignal().Connect(this, &NewWindowController::OnContextLost); stage.ContextRegainedSignal().Connect(this, &NewWindowController::OnContextRegained); @@ -236,17 +237,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" ), + DemoHelper::LoadImage( DEMO_IMAGE_DIR "bubble-ball.png" ), 200, Vector2( 5.0f, 5.0f ) ); - Image background = ResourceImage::New(BACKGROUND_IMAGE); + Image background = DemoHelper::LoadImage(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,88 +256,96 @@ void NewWindowController::AddBubbles(const Vector2& stageSize) mEmitTrackTimer.Start(); } -void NewWindowController::AddMeshActor() +void NewWindowController::AddMeshActor( Actor& parentActor ) { Geometry meshGeometry = CreateMeshGeometry(); // Create a coloured mesh Shader shaderColorMesh = Shader::New( VERTEX_COLOR_MESH, FRAGMENT_COLOR_MESH ); - Material colorMeshmaterial = Material::New( shaderColorMesh ); - Renderer colorMeshRenderer = Renderer::New( meshGeometry, colorMeshmaterial ); + Renderer colorMeshRenderer = Renderer::New( meshGeometry, shaderColorMesh ); 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"); - + Texture effectTexture = DemoHelper::LoadTexture(EFFECT_IMAGE); Shader shaderTextureMesh = Shader::New( VERTEX_TEXTURE_MESH, FRAGMENT_TEXTURE_MESH ); - Material textureMeshMaterial = Material::New( shaderTextureMesh ); - textureMeshMaterial.AddSampler( sampler ); - Renderer textureMeshRenderer = Renderer::New( meshGeometry, textureMeshMaterial ); + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture( 0u, effectTexture ); + Renderer textureMeshRenderer = Renderer::New( meshGeometry, shaderTextureMesh ); + textureMeshRenderer.SetTextures( textureSet ); 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; + + ImageView blendActor = ImageView::New( BASE_IMAGE ); + blendActor.SetProperty( ImageView::Property::IMAGE, map ); + blendActor.RegisterProperty( "alpha", 0.5f ); - Image baseImage = ResourceImage::New(BASE_IMAGE); - ImageActor blendActor = ImageActor::New( baseImage ); 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).GetTextures().SetImage( 1u, fb2 ); } -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); + Image image = DemoHelper::LoadImage(imageName); - Uint16Pair intFboSize = ResourceImage::GetImageSize(imageName); - Vector2 FBOSize = Vector2( intFboSize.GetWidth(), intFboSize.GetHeight() ); + Vector2 FBOSize = Vector2( image.GetWidth(), image.GetHeight() ); FrameBufferImage fbo = FrameBufferImage::New( FBOSize.width, FBOSize.height, Pixel::RGBA8888); GaussianBlurView gbv = GaussianBlurView::New(5, 2.0f, Pixel::RGBA8888, 0.5f, 0.5f, true); @@ -346,32 +355,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 +390,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 ); @@ -435,30 +443,30 @@ Geometry NewWindowController::CreateMeshGeometry() vertexFormat["aPosition"] = Property::VECTOR3; vertexFormat["aTexCoord"] = Property::VECTOR2; vertexFormat["aColor"] = Property::VECTOR3; - PropertyBuffer vertices = PropertyBuffer::New( vertexFormat, 5 ); - vertices.SetData( vertexData ); + PropertyBuffer vertices = PropertyBuffer::New( vertexFormat ); + vertices.SetData( vertexData, 5 ); // Specify all the faces - unsigned int indexData[12] = { 0,1,3,0,2,4,0,3,4,0,2,1 }; - Property::Map indexFormat; - indexFormat["indices"] = Property::UNSIGNED_INTEGER; - PropertyBuffer indices = PropertyBuffer::New( indexFormat, 12 ); - indices.SetData( indexData ); + unsigned short indexData[12] = { 0,1,3,0,2,4,0,3,4,0,2,1 }; // Create the geometry object Geometry geometry = Geometry::New(); geometry.AddVertexBuffer( vertices ); - geometry.SetIndexBuffer( indices ); + geometry.SetIndexBuffer( &indexData[0], 12 ); 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 +481,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) @@ -544,9 +554,9 @@ void RunTest(Application& app) // 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, DALI_DEMO_THEME_PATH); + gApplication = Application::New(&argc, &argv, DEMO_THEME_PATH); RunTest(gApplication); return 0;