From: Francisco Santos Date: Thu, 21 Sep 2017 17:04:37 +0000 (+0100) Subject: Added demo to show using texture url in ImageView X-Git-Tag: dali_1.2.59~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8b9ed5bee4917e9a325229b13372deb3a8104f2b;p=platform%2Fcore%2Fuifw%2Fdali-demo.git Added demo to show using texture url in ImageView Change-Id: If29243a20977bc2e61c631611462d2e3c79758d7 --- diff --git a/examples-reel/dali-examples-reel.cpp b/examples-reel/dali-examples-reel.cpp index 170d695..ad5575c 100644 --- a/examples-reel/dali-examples-reel.cpp +++ b/examples-reel/dali-examples-reel.cpp @@ -54,6 +54,7 @@ int DALI_EXPORT_API main(int argc, char **argv) demo.AddExample(Example("image-view-alpha-blending.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW_ALPHA_BLENDING)); demo.AddExample(Example("image-view-pixel-area.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW_PIXEL_AREA)); demo.AddExample(Example("image-view-svg.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW_SVG)); + demo.AddExample(Example("image-view-url.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW_URL)); demo.AddExample(Example("line-mesh.example", DALI_DEMO_STR_TITLE_LINE_MESH)); demo.AddExample(Example("logging.example", DALI_DEMO_STR_TITLE_LOGGING)); demo.AddExample(Example("magnifier.example", DALI_DEMO_STR_TITLE_MAGNIFIER)); diff --git a/examples/image-view-url/image-view-url-example.cpp b/examples/image-view-url/image-view-url-example.cpp new file mode 100644 index 0000000..2bd3518 --- /dev/null +++ b/examples/image-view-url/image-view-url-example.cpp @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2017 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 +#include +#include +#include + +#include "shared/view.h" + +using namespace Dali; + +namespace +{ +const char* BIG_TEST_IMAGE( DEMO_IMAGE_DIR "book-landscape-cover.jpg" ); + +const char * const APPLICATION_TITLE( "Image View URL" ); +const char * const TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" ); +const char * const BUTTON_ICON( DEMO_IMAGE_DIR "icon-change.png" ); +const char * const BUTTON_ICON_SELECTED( DEMO_IMAGE_DIR "icon-change-selected.png" ); + +const char* FILTER_FRAGMENT_SOURCE = +{ + "precision highp float;\n" + "varying mediump vec2 vTexCoord;\n" + "uniform sampler2D sTexture;\n" + "uniform mediump float uDelta;\n" + "void main()\n" + "{\n" + " vec4 color = vec4(0.0);\n" + " vec2 texCoord = vTexCoord * 2. - 1.;\n" + " mat2 rotation = mat2(cos(uDelta), -sin(uDelta), sin(uDelta), cos(uDelta));" + " texCoord = (rotation * texCoord) * .5 + .5;\n" + " color += texture2D( sTexture, texCoord );\n" + " gl_FragColor = color;\n" + "}\n" +}; + +const char* DELTA_UNIFORM_NAME = "uDelta"; + +const Vector2 TARGET_SIZE(800.f, 800.f); +} + +class ImageViewUrlApp : public ConnectionTracker +{ +public: + ImageViewUrlApp( Application& application ) + : mApplication( application ) + { + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &ImageViewUrlApp::Create ); + } + + ~ImageViewUrlApp() = default; + +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, &ImageViewUrlApp::OnKeyEvent); + + Toolkit::ToolBar toolBar; + Toolkit::Control background; + // Creates a default view with a default tool bar. + mContent = DemoHelper::CreateView( application, + background, + toolBar, + "", + TOOLBAR_IMAGE, + APPLICATION_TITLE ); + + // Add a button to switch the scene. (right of toolbar) + Toolkit::PushButton switchButton = Toolkit::PushButton::New(); + switchButton.SetProperty( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, BUTTON_ICON ); + switchButton.SetProperty( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, BUTTON_ICON_SELECTED ); + switchButton.ClickedSignal().Connect( this, &ImageViewUrlApp::OnButtonClicked ); + toolBar.AddControl( switchButton, + DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, + Toolkit::Alignment::HorizontalRight, + DemoHelper::DEFAULT_MODE_SWITCH_PADDING ); + + CreateRenderTask( ); + CreateScene( ); + } + + void CreateRenderTask() + { + auto rootActor = Stage::GetCurrent().GetRootLayer(); + + auto cameraActor = CameraActor::New(TARGET_SIZE); + cameraActor.SetParentOrigin(ParentOrigin::CENTER); + cameraActor.SetInvertYAxis(true); + rootActor.Add(cameraActor); + + { + // create actor to render input with applied shader + mActorForInput = Toolkit::ImageView::New(BIG_TEST_IMAGE); + mActorForInput.SetParentOrigin(ParentOrigin::CENTER); + mActorForInput.SetSize(TARGET_SIZE); + Property::Map customShader; + customShader[Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = FILTER_FRAGMENT_SOURCE; + Property::Map visualMap; + visualMap.Insert(Toolkit::DevelVisual::Property::SHADER, customShader); + mActorForInput.SetProperty(Toolkit::ImageView::Property::IMAGE, visualMap); + + mDeltaPropertyIndex = mActorForInput.RegisterProperty(DELTA_UNIFORM_NAME, 0.f); + + rootActor.Add(mActorForInput); + + RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); + + // perform a horizontal blur targeting the internal buffer + auto renderTask = taskList.CreateTask(); + renderTask.SetRefreshRate(RenderTask::REFRESH_ALWAYS); + renderTask.SetSourceActor(mActorForInput); + renderTask.SetExclusive(true); + renderTask.SetInputEnabled(false); + renderTask.SetClearColor(Vector4(1.,0.,0.,1.)); + renderTask.SetClearEnabled(true); + renderTask.SetCameraActor(cameraActor); + + mOutputTexture = Texture::New(TextureType::TEXTURE_2D, + Pixel::RGB888, + unsigned(TARGET_SIZE.width), + unsigned(TARGET_SIZE.height)); + auto framebuffer = FrameBuffer::New(TARGET_SIZE.width, TARGET_SIZE.height, Pixel::RGB888); + framebuffer.AttachColorTexture(mOutputTexture); + + renderTask.SetFrameBuffer(framebuffer); + } + { + // animate the shader uniform + mAnimation = Animation::New(10.f); + + mActorForInput.SetProperty( mDeltaPropertyIndex, 0.f ); + mAnimation.AnimateTo( Property( mActorForInput, mDeltaPropertyIndex ), Math::PI * 2.f ); + mAnimation.SetLooping(true); + mAnimation.Play(); + } + } + + void CreateScene( ) + { + auto url = Dali::Toolkit::TextureManager::AddTexture(mOutputTexture); + mImageView = Toolkit::ImageView::New(url); + + mImageView.SetParentOrigin(ParentOrigin::CENTER); + mImageView.SetAnchorPoint(AnchorPoint::CENTER); + mContent.Add(mImageView); + } + + bool OnButtonClicked(Toolkit::Button button) + { + if(mAnimation.GetState() == Animation::State::PLAYING) + { + mAnimation.Pause(); + } + else + { + mAnimation.Play(); + } + 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; + Layer mContent; + Toolkit::ImageView mImageView; + Animation mAnimation; + Actor mActorForInput; + Property::Index mDeltaPropertyIndex; + Texture mOutputTexture; +}; + +void RunTest( Application& application ) +{ + ImageViewUrlApp test( application ); + + application.MainLoop(); +} + +// Entry point for Linux & Tizen applications +// +int DALI_EXPORT_API main( int argc, char **argv ) +{ + Application application = Application::New( &argc, &argv ); + + RunTest( application ); + + return 0; +} diff --git a/resources/po/en_US.po b/resources/po/en_US.po index fd64d2a..27b618f 100755 --- a/resources/po/en_US.po +++ b/resources/po/en_US.po @@ -64,6 +64,9 @@ msgstr "Image View Pixel Area" msgid "DALI_DEMO_STR_TITLE_IMAGE_VIEW_SVG" msgstr "Image View SVG" +msgid "DALI_DEMO_STR_TITLE_IMAGE_VIEW_URL" +msgstr "Image View URL" + msgid "DALI_DEMO_STR_TITLE_ITEM_VIEW" msgstr "Item View" diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h index e95d469..64c617d 100644 --- a/shared/dali-demo-strings.h +++ b/shared/dali-demo-strings.h @@ -56,6 +56,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_IMAGE_VIEW_ALPHA_BLENDING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_VIEW_ALPHA_BLENDING") #define DALI_DEMO_STR_TITLE_IMAGE_VIEW_PIXEL_AREA dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_VIEW_PIXEL_AREA") #define DALI_DEMO_STR_TITLE_IMAGE_VIEW_SVG dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_VIEW_SVG") +#define DALI_DEMO_STR_TITLE_IMAGE_VIEW_URL dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_VIEW_URL") #define DALI_DEMO_STR_TITLE_ITEM_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ITEM_VIEW") #define DALI_DEMO_STR_TITLE_LIGHTS_AND_SHADOWS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_LIGHTS_AND_SHADOWS") #define DALI_DEMO_STR_TITLE_LINE_MESH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_LINE_MESH") @@ -126,6 +127,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_IMAGE_VIEW_ALPHA_BLENDING "Image View Alpha Blending" #define DALI_DEMO_STR_TITLE_IMAGE_VIEW_PIXEL_AREA "Image View Pixel Area" #define DALI_DEMO_STR_TITLE_IMAGE_VIEW_SVG "Image View SVG" +#define DALI_DEMO_STR_TITLE_IMAGE_VIEW_URL "Image View URL" #define DALI_DEMO_STR_TITLE_ITEM_VIEW "Item View" #define DALI_DEMO_STR_TITLE_LIGHTS_AND_SHADOWS "Lights and shadows" #define DALI_DEMO_STR_TITLE_LINE_MESH "Mesh Line"