diff --git a/build/tizen/.gitignore b/build/tizen/.gitignore index d9f6684..72b1aaa 100644 --- a/build/tizen/.gitignore +++ b/build/tizen/.gitignore @@ -2,6 +2,7 @@ CMakeCache.txt CMakeFiles/ cmake_install.cmake demo/dali-demo +examples-reel/dali-examples install_manifest.txt /demo/dali-demo /demo/dali-examples diff --git a/build/tizen/CMakeLists.txt b/build/tizen/CMakeLists.txt index 66b1dc3..5a394e3 100644 --- a/build/tizen/CMakeLists.txt +++ b/build/tizen/CMakeLists.txt @@ -172,8 +172,8 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REQUIRED_CFLAGS} ${DALI_DEMO_CFLAGS} -Werr SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS}") INCLUDE_DIRECTORIES(${ROOT_SRC_DIR}) -#INCLUDE_DIRECTORIES(${DEMO_SRC_DIR}) ADD_SUBDIRECTORY(demo) ADD_SUBDIRECTORY(examples) +ADD_SUBDIRECTORY(examples-reel) ADD_SUBDIRECTORY(builder) diff --git a/build/tizen/demo/CMakeLists.txt b/build/tizen/demo/CMakeLists.txt index 205f3a1..aae6103 100644 --- a/build/tizen/demo/CMakeLists.txt +++ b/build/tizen/demo/CMakeLists.txt @@ -2,7 +2,11 @@ SET(DEMO_SRC_DIR ${ROOT_SRC_DIR}/demo) AUX_SOURCE_DIRECTORY(${DEMO_SRC_DIR} DEMO_SRCS) -SET(DEMO_SRCS ${DEMO_SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp") +SET(DEMO_SRCS + ${DEMO_SRCS} + "${ROOT_SRC_DIR}/shared/resources-location.cpp" + "${ROOT_SRC_DIR}/shared/dali-table-view.cpp" +) ADD_EXECUTABLE(${PROJECT_NAME} ${DEMO_SRCS}) TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${REQUIRED_PKGS_LDFLAGS} -pie) diff --git a/build/tizen/examples-reel/CMakeLists.txt b/build/tizen/examples-reel/CMakeLists.txt new file mode 100644 index 0000000..e12fa99 --- /dev/null +++ b/build/tizen/examples-reel/CMakeLists.txt @@ -0,0 +1,15 @@ +SET(EXAMPLES_REEL_SRC_DIR ${ROOT_SRC_DIR}/examples-reel) + +AUX_SOURCE_DIRECTORY(${EXAMPLES_REEL_SRC_DIR} EXAMPLES_REEL_SRCS) + +SET(EXAMPLES_REEL_SRCS + ${EXAMPLES_REEL_SRCS} + "${ROOT_SRC_DIR}/shared/resources-location.cpp" + "${ROOT_SRC_DIR}/shared/dali-table-view.cpp" +) + +ADD_EXECUTABLE(dali-examples ${EXAMPLES_REEL_SRCS}) +TARGET_LINK_LIBRARIES(dali-examples ${REQUIRED_PKGS_LDFLAGS} -pie) + +INSTALL(TARGETS dali-examples DESTINATION ${BINDIR}) + diff --git a/com.samsung.dali-demo.manifest-smack b/com.samsung.dali-demo.manifest-smack index dac648a..e8c2eea 100644 --- a/com.samsung.dali-demo.manifest-smack +++ b/com.samsung.dali-demo.manifest-smack @@ -8,6 +8,9 @@ + + + diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml index 056fa48..4511e54 100644 --- a/com.samsung.dali-demo.xml +++ b/com.samsung.dali-demo.xml @@ -10,6 +10,10 @@ /usr/share/icons/com.samsung.dali-demo.png + + /usr/share/icons/dali-examples.png + + diff --git a/demo/dali-demo.cpp b/demo/dali-demo.cpp index 60c8501..566c57e 100644 --- a/demo/dali-demo.cpp +++ b/demo/dali-demo.cpp @@ -19,7 +19,7 @@ #include // INTERNAL INCLUDES -#include "dali-table-view.h" +#include "shared/dali-table-view.h" #include "shared/dali-demo-strings.h" using namespace Dali; @@ -36,60 +36,18 @@ int DALI_EXPORT_API main(int argc, char **argv) // Create the demo launcher DaliTableView demo(app); - demo.AddExample(Example("animated-images.example", DALI_DEMO_STR_TITLE_ANIMATED_IMAGES)); - demo.AddExample(Example("animated-shapes.example", DALI_DEMO_STR_TITLE_ANIMATED_SHAPES)); - demo.AddExample(Example("bubble-effect.example", DALI_DEMO_STR_TITLE_BUBBLES)); demo.AddExample(Example("blocks.example", DALI_DEMO_STR_TITLE_BLOCKS)); + demo.AddExample(Example("bubble-effect.example", DALI_DEMO_STR_TITLE_BUBBLES)); + demo.AddExample(Example("contact-cards.example", DALI_DEMO_STR_TITLE_CONTACT_CARDS)); demo.AddExample(Example("cube-transition-effect.example", DALI_DEMO_STR_TITLE_CUBE_TRANSITION)); - demo.AddExample(Example("dissolve-effect.example", DALI_DEMO_STR_TITLE_DISSOLVE_TRANSITION)); + demo.AddExample(Example("fpp-game.example", DALI_DEMO_STR_TITLE_FPP_GAME)); demo.AddExample(Example("item-view.example", DALI_DEMO_STR_TITLE_ITEM_VIEW)); - demo.AddExample(Example("renderer-stencil.example", DALI_DEMO_STR_TITLE_RENDERER_STENCIL)); - demo.AddExample(Example("magnifier.example", DALI_DEMO_STR_TITLE_MAGNIFIER)); + demo.AddExample(Example("mesh-visual.example", DALI_DEMO_STR_TITLE_MESH_VISUAL)); demo.AddExample(Example("motion-blur.example", DALI_DEMO_STR_TITLE_MOTION_BLUR)); - demo.AddExample(Example("motion-stretch.example", DALI_DEMO_STR_TITLE_MOTION_STRETCH)); - demo.AddExample(Example("page-turn-view.example", DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW)); demo.AddExample(Example("refraction-effect.example", DALI_DEMO_STR_TITLE_REFRACTION)); - demo.AddExample(Example("scroll-view.example", DALI_DEMO_STR_TITLE_SCROLL_VIEW)); + demo.AddExample(Example("renderer-stencil.example", DALI_DEMO_STR_TITLE_RENDERER_STENCIL)); demo.AddExample(Example("shadows-and-lights.example", DALI_DEMO_STR_TITLE_LIGHTS_AND_SHADOWS)); - demo.AddExample(Example("builder.example", DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI)); - demo.AddExample(Example("image-scaling-and-filtering.example", DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING)); - demo.AddExample(Example("image-scaling-irregular-grid.example", DALI_DEMO_STR_TITLE_IMAGE_SCALING)); - demo.AddExample(Example("text-field.example", DALI_DEMO_STR_TITLE_TEXT_FIELD)); - demo.AddExample(Example("text-label.example", DALI_DEMO_STR_TITLE_TEXT_LABEL)); - demo.AddExample(Example("text-label-multi-language.example", DALI_DEMO_STR_TITLE_TEXT_LABEL_MULTI_LANGUAGE)); - demo.AddExample(Example("text-label-emojis.example", DALI_DEMO_STR_TITLE_EMOJI_TEXT)); - demo.AddExample(Example("text-scrolling.example", DALI_DEMO_STR_TITLE_TEXT_SCROLLING)); - demo.AddExample(Example("text-editor.example", DALI_DEMO_STR_TITLE_TEXT_EDITOR)); - demo.AddExample(Example("size-negotiation.example", DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE)); - demo.AddExample(Example("popup.example", DALI_DEMO_STR_TITLE_POPUP)); - demo.AddExample(Example("buttons.example", DALI_DEMO_STR_TITLE_BUTTONS)); - demo.AddExample(Example("logging.example", DALI_DEMO_STR_TITLE_LOGGING)); - demo.AddExample(Example("mesh-morph.example", DALI_DEMO_STR_TITLE_MESH_MORPH)); - demo.AddExample(Example("mesh-sorting.example", DALI_DEMO_STR_TITLE_MESH_SORTING)); - demo.AddExample(Example("metaball-explosion.example", DALI_DEMO_STR_TITLE_METABALL_EXPLOSION)); - demo.AddExample(Example("metaball-refrac.example", DALI_DEMO_STR_TITLE_METABALL_REFRAC)); - demo.AddExample(Example("textured-mesh.example", DALI_DEMO_STR_TITLE_TEXTURED_MESH)); - 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("image-view-alpha-blending.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW_ALPHA_BLENDING)); - demo.AddExample(Example("image-view-svg.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW_SVG)); - demo.AddExample(Example("super-blur-bloom.example", DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM)); - demo.AddExample(Example("tilt.example", DALI_DEMO_STR_TITLE_TILT_SENSOR)); - demo.AddExample(Example("effects-view.example", DALI_DEMO_STR_TITLE_EFFECTS_VIEW)); - demo.AddExample(Example("native-image-source.example", DALI_DEMO_STR_TITLE_NATIVE_IMAGE_SOURCE)); - demo.AddExample(Example("mesh-visual.example", DALI_DEMO_STR_TITLE_MESH_VISUAL)); - demo.AddExample(Example("primitive-shapes.example", DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES)); - demo.AddExample(Example("styling.example", DALI_DEMO_STR_TITLE_STYLING)); demo.AddExample(Example("sparkle.example", DALI_DEMO_STR_TITLE_SPARKLE)); - demo.AddExample(Example("transitions.example", DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS)); - demo.AddExample(Example("progress-bar.example", DALI_DEMO_STR_TITLE_PROGRESS_BAR)); - demo.AddExample(Example("contact-cards.example", DALI_DEMO_STR_TITLE_CONTACT_CARDS)); - demo.AddExample(Example("flex-container.example", DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND)); - demo.AddExample(Example("fpp-game.example", DALI_DEMO_STR_TITLE_FPP_GAME)); - demo.AddExample(Example("tooltip.example", DALI_DEMO_STR_TITLE_TOOLTIP)); - demo.AddExample(Example("clipping.example", DALI_DEMO_STR_TITLE_CLIPPING)); demo.SortAlphabetically( true ); diff --git a/examples-reel/dali-examples-reel.cpp b/examples-reel/dali-examples-reel.cpp new file mode 100644 index 0000000..9f29f97 --- /dev/null +++ b/examples-reel/dali-examples-reel.cpp @@ -0,0 +1,84 @@ +/* + * 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. + * + */ + +// EXTERNAL INCLUDES +#include + +// INTERNAL INCLUDES +#include "shared/dali-table-view.h" +#include "shared/dali-demo-strings.h" + +using namespace Dali; + +int DALI_EXPORT_API main(int argc, char **argv) +{ + // Configure gettext for internalization + bindtextdomain(DALI_DEMO_DOMAIN_LOCAL, DEMO_LOCALE_DIR); + textdomain(DALI_DEMO_DOMAIN_LOCAL); + setlocale(LC_ALL, DEMO_LANG); + + Application app = Application::New(&argc, &argv, DEMO_THEME_PATH); + + // Create the demo launcher + DaliTableView demo(app); + + demo.AddExample(Example("animated-images.example", DALI_DEMO_STR_TITLE_ANIMATED_IMAGES)); + demo.AddExample(Example("animated-shapes.example", DALI_DEMO_STR_TITLE_ANIMATED_SHAPES)); + demo.AddExample(Example("builder.example", DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI)); + demo.AddExample(Example("buttons.example", DALI_DEMO_STR_TITLE_BUTTONS)); + demo.AddExample(Example("clipping.example", DALI_DEMO_STR_TITLE_CLIPPING)); + demo.AddExample(Example("dissolve-effect.example", DALI_DEMO_STR_TITLE_DISSOLVE_TRANSITION)); + demo.AddExample(Example("effects-view.example", DALI_DEMO_STR_TITLE_EFFECTS_VIEW)); + demo.AddExample(Example("flex-container.example", DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND)); + demo.AddExample(Example("gradients.example", DALI_DEMO_STR_TITLE_COLOR_GRADIENT)); + demo.AddExample(Example("image-scaling-and-filtering.example", DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING)); + demo.AddExample(Example("image-scaling-irregular-grid.example", DALI_DEMO_STR_TITLE_IMAGE_SCALING)); + demo.AddExample(Example("image-view.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW)); + 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("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)); + demo.AddExample(Example("mesh-morph.example", DALI_DEMO_STR_TITLE_MESH_MORPH)); + demo.AddExample(Example("mesh-sorting.example", DALI_DEMO_STR_TITLE_MESH_SORTING)); + demo.AddExample(Example("motion-stretch.example", DALI_DEMO_STR_TITLE_MOTION_STRETCH)); + demo.AddExample(Example("native-image-source.example", DALI_DEMO_STR_TITLE_NATIVE_IMAGE_SOURCE)); + demo.AddExample(Example("popup.example", DALI_DEMO_STR_TITLE_POPUP)); + demo.AddExample(Example("primitive-shapes.example", DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES)); + demo.AddExample(Example("progress-bar.example", DALI_DEMO_STR_TITLE_PROGRESS_BAR)); + demo.AddExample(Example("scroll-view.example", DALI_DEMO_STR_TITLE_SCROLL_VIEW)); + demo.AddExample(Example("size-negotiation.example", DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE)); + demo.AddExample(Example("styling.example", DALI_DEMO_STR_TITLE_STYLING)); + demo.AddExample(Example("text-editor.example", DALI_DEMO_STR_TITLE_TEXT_EDITOR)); + demo.AddExample(Example("text-field.example", DALI_DEMO_STR_TITLE_TEXT_FIELD)); + demo.AddExample(Example("text-label.example", DALI_DEMO_STR_TITLE_TEXT_LABEL)); + demo.AddExample(Example("text-label-multi-language.example", DALI_DEMO_STR_TITLE_TEXT_LABEL_MULTI_LANGUAGE)); + demo.AddExample(Example("text-label-emojis.example", DALI_DEMO_STR_TITLE_EMOJI_TEXT)); + demo.AddExample(Example("text-scrolling.example", DALI_DEMO_STR_TITLE_TEXT_SCROLLING)); + demo.AddExample(Example("textured-mesh.example", DALI_DEMO_STR_TITLE_TEXTURED_MESH)); + demo.AddExample(Example("tilt.example", DALI_DEMO_STR_TITLE_TILT_SENSOR)); + demo.AddExample(Example("tooltip.example", DALI_DEMO_STR_TITLE_TOOLTIP)); + demo.AddExample(Example("transitions.example", DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS)); + + demo.SortAlphabetically( true ); + + // Start the event loop + app.MainLoop(); + + return 0; +} diff --git a/examples/homescreen-benchmark/homescreen-benchmark.cpp b/examples/homescreen-benchmark/homescreen-benchmark.cpp index e5925b8..c0cb012 100644 --- a/examples/homescreen-benchmark/homescreen-benchmark.cpp +++ b/examples/homescreen-benchmark/homescreen-benchmark.cpp @@ -49,7 +49,6 @@ const float DEFAULT_OPT_ROW_COUNT ( 5 ); const float DEFAULT_OPT_COL_COUNT ( 4 ); const float DEFAULT_OPT_PAGE_COUNT ( 10 ); const bool DEFAULT_OPT_USE_TABLEVIEW ( true ); -const bool DEFAULT_OPT_BATCHING_ENABLED ( true ); const bool DEFAULT_OPT_ICON_LABELS ( true ); const IconType DEFAULT_OPT_ICON_TYPE ( IMAGEVIEW ); const bool DEFAULT_OPT_USE_TEXT_LABEL ( false ); @@ -116,7 +115,6 @@ public: mCols( DEFAULT_OPT_COL_COUNT ), mPageCount( DEFAULT_OPT_PAGE_COUNT ), mTableViewEnabled( DEFAULT_OPT_USE_TABLEVIEW ), - mBatchingEnabled( DEFAULT_OPT_BATCHING_ENABLED ), mIconLabelsEnabled( DEFAULT_OPT_ICON_LABELS ), mIconType( DEFAULT_OPT_ICON_TYPE ), mUseTextLabel( DEFAULT_OPT_USE_TEXT_LABEL ) @@ -127,7 +125,6 @@ public: int mCols; int mPageCount; bool mTableViewEnabled; - bool mBatchingEnabled; bool mIconLabelsEnabled; IconType mIconType; bool mUseTextLabel; @@ -235,9 +232,6 @@ public: imagePath << IMAGE_PATH_PREFIX << currentIconIndex << IMAGE_PATH_POSTFIX; map[ Dali::Toolkit::ImageVisual::Property::URL ] = imagePath.str(); - // Enable/disable batching - map[ Toolkit::ImageVisual::Property::BATCHING_ENABLED ] = mConfig.mBatchingEnabled; - imageView.SetProperty( Toolkit::ImageView::Property::IMAGE, map ); imageView.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); imageView.SetSizeScalePolicy( SizeScalePolicy::FIT_WITH_ASPECT_RATIO ); @@ -396,11 +390,6 @@ public: page.SetAnchorPoint( AnchorPoint::CENTER ); page.SetPosition( Vector3( stageSize.x * i, 0.0f, 0.0f ) ); mScrollParent.Add( page ); - - if( mConfig.mTableViewEnabled && mConfig.mBatchingEnabled ) - { - page.SetProperty( DevelActor::Property::BATCH_PARENT, true ); - } } mScrollParent.SetOpacity( 1.0f ); @@ -476,8 +465,7 @@ void RunTest( Application& application, const HomescreenBenchmark::Config& confi PrintHelp( "c", " Number of columns" ); PrintHelp( "r", " Number of rows" ); PrintHelp( "p", " Number of pages ( must be greater than 1 )" ); - PrintHelp( "-disable-tableview", " Disables the use of TableView for layouting (must be enabled for batching)" ); - PrintHelp( "-disable-batching", " Disables geometry batching" ); + PrintHelp( "-disable-tableview", " Disables the use of TableView for layouting" ); PrintHelp( "-disable-icon-labels", " Disables labels for each icon" ); PrintHelp( "-use-checkbox", " Uses checkboxes for icons" ); PrintHelp( "-use-text-label", " Uses TextLabel instead of a TextVisual" ); @@ -514,10 +502,6 @@ int DALI_EXPORT_API main( int argc, char **argv ) { config.mTableViewEnabled = false; } - else if( arg.compare( "--disable-batching" ) == 0 ) - { - config.mBatchingEnabled = false; - } else if( arg.compare( "--disable-icon-labels" ) == 0 ) { config.mIconLabelsEnabled = false; diff --git a/examples/metaball-explosion/metaball-explosion-example.cpp b/examples/metaball-explosion/metaball-explosion-example.cpp deleted file mode 100644 index fa701cc..0000000 --- a/examples/metaball-explosion/metaball-explosion-example.cpp +++ /dev/null @@ -1,774 +0,0 @@ -/* - * Copyright (c) 2016 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. - * - */ - -// EXTERNAL INCLUDES -#include -#include -#include -#include -#include -#include -#include - -// INTERNAL INCLUDES -#include "shared/view.h" -#include "shared/utility.h" - -using namespace Dali; -using namespace Dali::Toolkit; - -namespace -{ -const char * const BACKGROUND_IMAGE( DEMO_IMAGE_DIR "background-2.jpg" ); -const char * const TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" ); - -const float GRAVITY_X(0); -const float GRAVITY_Y(-0.09); -} - -#define METABALL_NUMBER 6 - - -const char*const METABALL_VERTEX_SHADER = DALI_COMPOSE_SHADER ( - attribute mediump vec2 aPosition;\n - attribute mediump vec2 aTexture;\n - uniform mediump mat4 uMvpMatrix;\n - uniform mediump vec3 uSize;\n - uniform lowp vec4 uColor;\n - varying mediump vec2 vTexCoord;\n - - void main()\n - {\n - vTexCoord = aTexture;\n - mediump vec4 vertexPosition = vec4(aPosition.x, aPosition.y, 0.0, 1.0);\n - gl_Position = uMvpMatrix * vertexPosition;\n - }\n -); - - -const char*const METABALL_FRAG_SHADER = DALI_COMPOSE_SHADER ( - precision mediump float;\n - varying vec2 vTexCoord;\n - uniform vec2 uPositionMetaball;\n - uniform vec2 uPositionVar;\n - uniform vec2 uGravityVector;\n - uniform float uRadius;\n - uniform float uRadiusVar;\n - void main()\n - {\n - vec2 adjustedCoords = vTexCoord * 2.0 - 1.0;\n - vec2 finalMetaballPosition = uPositionMetaball + uGravityVector + uPositionVar;\n - \n - float finalRadius = uRadius + uRadiusVar;\n - vec2 distanceVec = adjustedCoords - finalMetaballPosition;\n - float result = dot(distanceVec, distanceVec);\n - float color = inversesqrt(result) * finalRadius;\n - \n - gl_FragColor = vec4(color,color,color,1.0);\n - }\n -); - -const char*const REFRACTION_FRAG_SHADER = DALI_COMPOSE_SHADER ( - precision highp float;\n - varying vec2 vTexCoord;\n - uniform sampler2D sTexture;\n - uniform sampler2D sEffect;\n - uniform vec2 uPositionMetaball;\n - void main()\n - {\n - vec2 zoomCoords;\n - vec3 normal = vec3(0.0,0.0,1.0);\n - vec2 fakePos = vec2(0.0,0.0);\n - vec3 color = vec3(1.0, 1.0, 1.0); - float ambient = 0.2; - \n - vec4 metaColor = texture2D(sEffect, vTexCoord);\n - \n - vec2 adjustedCoords = vTexCoord.xy * vec2(2.0) - vec2(1.0);\n - fakePos = adjustedCoords.xy - vec2(uPositionMetaball.x, -uPositionMetaball.y); - float len = length(fakePos) + 0.01;\n - vec3 colorPos = vec3(0,0,1); - \n - if (metaColor.r > 0.85)\n - {\n - zoomCoords = ((vTexCoord - 0.5) * 0.9);\n - zoomCoords = zoomCoords + 0.5;\n - \n - float interpNormal = mix(0.7, 1.0, (metaColor.r - 0.85) * 4.);\n - normal.xyz = vec3(fakePos.x * (1.0 - interpNormal) / len, fakePos.y * (1.0 - interpNormal) / len, interpNormal);\n - normal.xyz = normalize(normal.xyz);\n - color = vec3(0.65, 1.0, 0);\n - colorPos = vec3(fakePos.x,fakePos.y,0); - }\n - else if (metaColor.r > 0.75)\n - {\n - float interpolation = mix(0.9, 1.15, (0.85 - metaColor.r) * 10.0);\n - zoomCoords = ((vTexCoord - 0.5) * interpolation);\n - zoomCoords = zoomCoords + 0.5;\n - \n - float interpNormal = mix(0.7, 0.0, (0.85 - metaColor.r) * 10.0);\n - normal.xyz = vec3(fakePos.x * (1.0 - interpNormal) / len, fakePos.y * (1.0 - interpNormal) / len, interpNormal);\n - normal.xyz = normalize(normal.xyz);\n - color = vec3(0.65, 1.0, 0);\n - colorPos = vec3(fakePos.x,fakePos.y,0); - }\n - else\n - {\n - zoomCoords = vTexCoord;\n - normal = vec3(0,0,0);\n - ambient = 0.5;\n - }\n - \n - vec3 lightPosition = vec3(-750.0,-1000.0,2000.0);\n - vec3 vertex = vec3(adjustedCoords.x,adjustedCoords.y,0.0);\n - \n - vec3 vecToLight = normalize( lightPosition - vertex );\n - \n - float lightDiffuse = dot( vecToLight, normal );\n - lightDiffuse = max(0.0,lightDiffuse);\n - lightDiffuse = lightDiffuse * 0.5 + 0.5; - \n - vec3 vertexToEye = vec3(0,0,1) - vertex;\n - vertexToEye = normalize(vertexToEye); - vec3 lightReflect = normalize(reflect(-vecToLight, normal));\n - float specularFactor = max(0.0,dot(vertexToEye, lightReflect));\n - specularFactor = pow(specularFactor, 32.0) * 0.7; - \n - vec4 texColor = texture2D(sTexture, zoomCoords);\n - gl_FragColor.rgb = texColor.rgb * ambient + color.rgb * texColor.rgb * lightDiffuse + vec3(specularFactor);\n - gl_FragColor.a = 1.0; - }\n - ); - -const char*const FRAG_SHADER = DALI_COMPOSE_SHADER ( - precision mediump float;\n - void main()\n - {\n - gl_FragColor = texture2D(sTexture, vTexCoord);\n - }\n -); - - -struct MetaballInfo -{ - Actor actor; - Vector2 position; - float radius; - float initRadius; - - //new shader stuff - Property::Index positionIndex; - Property::Index positionVarIndex; -}; - - -/**************************************************************************/ -/* Demo using Metaballs ***********/ -/* When the metaball is clicked it explodes in different balls ***********/ -/**************************************************************************/ -class MetaballExplosionController : public ConnectionTracker -{ -public: - MetaballExplosionController( Application& application ); - ~MetaballExplosionController(); - - /** - * Main create function, it creates the metaballs and all the related data - */ - void Create( Application& app ); - - /** - * Touch event function - */ - bool OnTouch( Actor actor, const TouchData& touch ); - - /** - * Key event function - */ - void OnKeyEvent(const KeyEvent& event); - - -private: - Application& mApplication; - Vector2 mScreenSize; - - Layer mContentLayer; - - Image mBackImage; - FrameBufferImage mMetaballFBO; - - Actor mMetaballRoot; - MetaballInfo mMetaballs[METABALL_NUMBER]; - - Property::Index mPositionIndex; - Actor mCompositionActor; - - //Motion - Vector2 mCurrentTouchPosition; - Vector2 mMetaballPosVariation; - Vector2 mMetaballPosVariationFrom; - Vector2 mMetaballPosVariationTo; - Vector2 mMetaballCenter; - - //Animations - Animation mPositionVarAnimation[METABALL_NUMBER]; - - int mDispersion; - Animation mDispersionAnimation[METABALL_NUMBER]; - - Timer mTimerDispersion; - - float mTimeMult; - - //Private functions - - /** - * Create a mesh data with the geometry for the metaball rendering - */ - Geometry CreateGeometry(); - - /** - * Create a mesh data with the geometry for the final composition - */ - Geometry CreateGeometryComposition(); - - /** - * Create a mesh actor for the metaballs - */ - void CreateMetaballActors(); - - /** - * Create the render task and FBO to render the metaballs into a texture - */ - void CreateMetaballImage(); - - /** - * Create a mesh image to render the final composition - */ - void AddRefractionImage(); - - /** - * Function to create animations for the small variations of position inside the metaball - */ - void CreateAnimations(); - - /** - * Function to reset metaball state - */ - void ResetMetaballs(bool resetAnims); - - /** - * Function to create disperse each of the ball that compose the metaball when exploding - */ - void DisperseBallAnimation(int ball); - - /** - * Function to make metaballs come back to reset position - */ - void LaunchResetMetaballPosition(Animation &source); - - /** - * Function to set things at the end of the animation - */ - void EndDisperseAnimation(Animation &source); - - /** - * Function to init dispersion of the metaballs one by one using a timer - * (so not all the balls begin moving at the same time) - */ - bool OnTimerDispersionTick(); - - /** - * Function to set the actual position of the metaballs when the user clicks the screen - */ - void SetPositionToMetaballs(Vector2 & metaballCenter); -}; - - -//----------------------------------------------------------------------------------------------- -// -// IMPLEMENTATION -// -//---------------- - -MetaballExplosionController::MetaballExplosionController( Application& application ) -: mApplication( application ), - mScreenSize(), - mContentLayer(), - mBackImage(), - mMetaballFBO(), - mMetaballRoot(), - mMetaballs(), - mPositionIndex(), - mCompositionActor(), - mCurrentTouchPosition(), - mMetaballPosVariation(), - mMetaballPosVariationFrom(), - mMetaballPosVariationTo(), - mMetaballCenter(), - mPositionVarAnimation(), - mDispersion( 0 ), - mDispersionAnimation(), - mTimerDispersion(), - mTimeMult( 1.0f ) -{ - // Connect to the Application's Init signal - mApplication.InitSignal().Connect( this, &MetaballExplosionController::Create ); -} - -MetaballExplosionController::~MetaballExplosionController() -{ - // Nothing to do here; -} - -void MetaballExplosionController::Create( Application& app ) -{ - Stage stage = Stage::GetCurrent(); - - stage.KeyEventSignal().Connect(this, &MetaballExplosionController::OnKeyEvent); - - mScreenSize = stage.GetSize(); - - mTimeMult = 1.0f; - - stage.SetBackgroundColor(Color::BLACK); - - //Set background image for the view - mBackImage = DemoHelper::LoadImage( BACKGROUND_IMAGE ); - - srand((unsigned)time(0)); - - //Create internal data - CreateMetaballActors(); - CreateMetaballImage(); - AddRefractionImage(); - - CreateAnimations(); - - mDispersion = 0; - mTimerDispersion = Timer::New( 150 ); - mTimerDispersion.TickSignal().Connect(this, &MetaballExplosionController::OnTimerDispersionTick); - - // Connect the callback to the touch signal on the mesh actor - stage.GetRootLayer().TouchSignal().Connect( this, &MetaballExplosionController::OnTouch ); -} - -Geometry MetaballExplosionController::CreateGeometry() -{ - float aspect = (float)mScreenSize.y / (float)mScreenSize.x; - - // Create vertices and specify their color - float xsize = mScreenSize.x * 0.5; - - //We create the meshdata for the metaballs - struct VertexPosition { Vector2 position; }; - struct VertexTexture { Vector2 texture; }; - struct VertexNormal { Vector3 normal; }; - - VertexPosition vertices[] = { - { Vector2( -xsize, -xsize * aspect) }, - { Vector2( xsize, -xsize * aspect) }, - { Vector2( -xsize, xsize * aspect) }, - { Vector2( xsize, xsize * aspect) } - }; - - VertexTexture textures[] = { - { Vector2(0.0f, 0.0f) }, - { Vector2(1.0f, 0.0f) }, - { Vector2(0.0f, 1.0f * aspect) }, - { Vector2(1.0f, 1.0f * aspect) } - }; - - unsigned int numberOfVertices = sizeof(vertices)/sizeof(VertexPosition); - - //Vertices - Property::Map positionVertexFormat; - positionVertexFormat["aPosition"] = Property::VECTOR2; - PropertyBuffer positionVertices = PropertyBuffer::New( positionVertexFormat ); - positionVertices.SetData( vertices, numberOfVertices ); - - //Textures - Property::Map textureVertexFormat; - textureVertexFormat["aTexture"] = Property::VECTOR2; - PropertyBuffer textureVertices = PropertyBuffer::New( textureVertexFormat ); - textureVertices.SetData( textures, numberOfVertices ); - - //Indices - unsigned short indices[] = { 0, 3, 1, 0, 2, 3 }; - - // Create the geometry object - Geometry texturedQuadGeometry = Geometry::New(); - texturedQuadGeometry.AddVertexBuffer( positionVertices ); - texturedQuadGeometry.AddVertexBuffer( textureVertices ); - - texturedQuadGeometry.SetIndexBuffer ( &indices[0], sizeof( indices )/ sizeof( indices[0] ) ); - - return texturedQuadGeometry; -} - -Geometry MetaballExplosionController::CreateGeometryComposition() -{ - float aspect = (float)mScreenSize.y / (float)mScreenSize.x; - - // Create vertices and specify their color - float xsize = mScreenSize.x * 0.5; - - //We create the meshdata for the metaballs - struct VertexPosition { Vector2 position; }; - struct VertexTexture { Vector2 texture; }; - struct VertexNormal { Vector3 normal; }; - - VertexPosition vertices[] = { - { Vector2( -xsize, -xsize * aspect) }, - { Vector2( xsize, -xsize * aspect) }, - { Vector2( -xsize, xsize * aspect) }, - { Vector2( xsize, xsize * aspect) } - }; - - VertexTexture textures[] = { - { Vector2(0.0f, 0.0f) }, - { Vector2(1.0f, 0.0f) }, - { Vector2(0.0f, 1.0f) }, - { Vector2(1.0f, 1.0f) } - }; - - unsigned int numberOfVertices = sizeof(vertices)/sizeof(VertexPosition); - - //Vertices - Property::Map positionVertexFormat; - positionVertexFormat["aPosition"] = Property::VECTOR2; - PropertyBuffer positionVertices = PropertyBuffer::New( positionVertexFormat ); - positionVertices.SetData( vertices, numberOfVertices ); - - //Textures - Property::Map textureVertexFormat; - textureVertexFormat["aTexture"] = Property::VECTOR2; - PropertyBuffer textureVertices = PropertyBuffer::New( textureVertexFormat ); - textureVertices.SetData( textures, numberOfVertices ); - - //Indices - unsigned short indices[] = { 0, 3, 1, 0, 2, 3 }; - - // Create the geometry object - Geometry texturedQuadGeometry = Geometry::New(); - texturedQuadGeometry.AddVertexBuffer( positionVertices ); - texturedQuadGeometry.AddVertexBuffer( textureVertices ); - - texturedQuadGeometry.SetIndexBuffer ( &indices[0], sizeof( indices )/ sizeof( indices[0] ) ); - - return texturedQuadGeometry; -} - -float randomNumber(float lowest, float highest) -{ - float range=(highest-lowest); - return lowest+range*rand()/RAND_MAX; -} - -void MetaballExplosionController::CreateMetaballActors() -{ - //Create the shader for the metaballs - Shader shader = Shader::New( METABALL_VERTEX_SHADER, METABALL_FRAG_SHADER ); - - Geometry metaballGeom = CreateGeometry(); - Renderer renderer = Renderer::New( metaballGeom, shader ); - renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON ); - renderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_RGB, BlendFactor::ONE ); - renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB, BlendFactor::ONE ); - renderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_ALPHA, BlendFactor::ONE ); - renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_ALPHA, BlendFactor::ONE ); - - //Initialization of each of the metaballs - for( int i = 0; i < METABALL_NUMBER; i++ ) - { - mMetaballs[i].position = Vector2(0.0f, 0.0f); - mMetaballs[i].radius = mMetaballs[i].initRadius = randomNumber(0.05f,0.07f); - - mMetaballs[i].actor = Actor::New( ); - mMetaballs[i].actor.SetName("Metaball"); - mMetaballs[i].actor.SetScale( 1.0f ); - mMetaballs[i].actor.SetParentOrigin( ParentOrigin::CENTER ); - mMetaballs[i].actor.AddRenderer( renderer ); - - mMetaballs[i].positionIndex = mMetaballs[i].actor.RegisterProperty( "uPositionMetaball", mMetaballs[i].position ); - - mMetaballs[i].positionVarIndex = mMetaballs[i].actor.RegisterProperty( "uPositionVar", Vector2(0.f,0.f) ); - - mMetaballs[i].actor.RegisterProperty( "uGravityVector", Vector2(randomNumber(-0.2,0.2),randomNumber(-0.2,0.2)) ); - - mMetaballs[i].actor.RegisterProperty( "uRadius", mMetaballs[i].radius ); - - mMetaballs[i].actor.RegisterProperty( "uRadiusVar", 0.f ); - - mMetaballs[i].actor.SetSize(400, 400); - } - - //Root creation - mMetaballRoot = Actor::New(); - mMetaballRoot.SetParentOrigin( ParentOrigin::CENTER ); - for( int i = 0; i < METABALL_NUMBER; i++ ) - { - mMetaballRoot.Add( mMetaballs[i].actor ); - } - - //Initialization of variables related to metaballs - mMetaballPosVariation = Vector2(0,0); - mMetaballPosVariationFrom = Vector2(0,0); - mMetaballPosVariationTo = Vector2(0,0); - mCurrentTouchPosition = Vector2(0,0); -} - -void MetaballExplosionController::CreateMetaballImage() -{ - //We create an FBO and a render task to create to render the metaballs with a fragment shader - Stage stage = Stage::GetCurrent(); - mMetaballFBO = FrameBufferImage::New(mScreenSize.x, mScreenSize.y, Pixel::RGBA8888, RenderBuffer::COLOR_DEPTH); - - - stage.Add(mMetaballRoot); - - //Creation of the render task used to render the metaballs - RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); - RenderTask task = taskList.CreateTask(); - task.SetRefreshRate( RenderTask::REFRESH_ALWAYS ); - task.SetSourceActor( mMetaballRoot ); - task.SetExclusive(true); - task.SetClearColor( Color::BLACK ); - task.SetClearEnabled( true ); - task.SetTargetFrameBuffer( mMetaballFBO ); -} - -void MetaballExplosionController::AddRefractionImage() -{ - //Create Gaussian blur for the rendered image - FrameBufferImage fbo; - fbo = FrameBufferImage::New( mScreenSize.x, mScreenSize.y, Pixel::RGBA8888, RenderBuffer::COLOR_DEPTH); - - GaussianBlurView gbv = GaussianBlurView::New(5, 2.0f, Pixel::RGBA8888, 0.5f, 0.5f, true); - gbv.SetBackgroundColor(Color::TRANSPARENT); - gbv.SetUserImageAndOutputRenderTarget( mMetaballFBO, fbo ); - gbv.SetSize(mScreenSize.x, mScreenSize.y); - Stage::GetCurrent().Add(gbv); - gbv.Activate(); - - //Create new shader - Shader shader = Shader::New( METABALL_VERTEX_SHADER, REFRACTION_FRAG_SHADER ); - - //Create new texture set - TextureSet textureSet = TextureSet::New(); - TextureSetImage( textureSet, 0u, mBackImage ); - TextureSetImage( textureSet, 1u, fbo ); - - //Create geometry - Geometry metaballGeom = CreateGeometryComposition(); - - Renderer mRenderer = Renderer::New( metaballGeom, shader ); - mRenderer.SetTextures( textureSet ); - - mCompositionActor = Actor::New( ); - mCompositionActor.SetParentOrigin(ParentOrigin::CENTER); - mCompositionActor.SetPosition(Vector3(0.0f, 0.0f, 0.0f)); - mCompositionActor.SetSize(mScreenSize.x, mScreenSize.y); - - mCompositionActor.AddRenderer( mRenderer ); - - Vector2 metaballCenter(0.0,0); - metaballCenter.x = metaballCenter.x * 0.5; - metaballCenter.y = metaballCenter.y * 0.5; - - mPositionIndex = mCompositionActor.RegisterProperty( "uPositionMetaball", metaballCenter ); - - SetPositionToMetaballs(metaballCenter); - - mCompositionActor.SetSize(mScreenSize.x, mScreenSize.y); - - Stage stage = Stage::GetCurrent(); - stage.Add( mCompositionActor ); -} - -void MetaballExplosionController::CreateAnimations() -{ - Vector2 direction; - - for( int i = 0; i < METABALL_NUMBER; i++ ) - { - float key; - KeyFrames keySinCosVariation = KeyFrames::New(); - Vector2 sinCosVariation(0,0); - - direction.x = randomNumber(-100.f,100.f); - direction.y = randomNumber(-100.f,100.f); - - direction.Normalize(); - direction *= 0.1f; - - for( int j = 0; j < 360; j++ ) - { - sinCosVariation.x = sin(j * Math::PI/180.f) * direction.x; - sinCosVariation.y = cos(j * Math::PI/180.f) * direction.y; - key = j/360.f; - keySinCosVariation.Add(key, sinCosVariation); - } - - mPositionVarAnimation[i] = Animation::New(3.f); - mPositionVarAnimation[i].AnimateBetween(Property( mMetaballs[i].actor, mMetaballs[i].positionVarIndex ), keySinCosVariation); - mPositionVarAnimation[i].SetLooping( true ); - mPositionVarAnimation[i].Play(); - } -} - -void MetaballExplosionController::ResetMetaballs(bool resetAnims) -{ - for( int i = 0; i < METABALL_NUMBER; i++ ) - { - if (mDispersionAnimation[i]) - mDispersionAnimation[i].Clear(); - - mMetaballs[i].position = Vector2(0.0f, 0.0f); - mMetaballs[i].actor.SetProperty(mMetaballs[i].positionIndex, mMetaballs[i].position); - } - mTimerDispersion.Stop(); - mDispersion = 0; - - mCompositionActor.SetProperty( mPositionIndex, Vector2(0,0) ); -} - -void MetaballExplosionController::DisperseBallAnimation(int ball) -{ - Vector2 position; - position.x = randomNumber(-1.5f,1.5f); - position.y = randomNumber(-1.5f,1.5f); - - mDispersionAnimation[ball] = Animation::New(2.0f * mTimeMult); - mDispersionAnimation[ball].AnimateTo( Property(mMetaballs[ball].actor, mMetaballs[ball].positionIndex), position); - mDispersionAnimation[ball].Play(); - - if( ball == METABALL_NUMBER - 1 ) - mDispersionAnimation[ball].FinishedSignal().Connect( this, &MetaballExplosionController::LaunchResetMetaballPosition ); -} - -void MetaballExplosionController::LaunchResetMetaballPosition(Animation &source) -{ - for( int i = 0; i < METABALL_NUMBER; i++ ) - { - mDispersionAnimation[i] = Animation::New(1.5f + i*0.25f*mTimeMult); - mDispersionAnimation[i].AnimateTo(Property(mMetaballs[i].actor, mMetaballs[i].positionIndex), Vector2(0,0)); - mDispersionAnimation[i].Play(); - - if( i == METABALL_NUMBER - 1 ) - mDispersionAnimation[i].FinishedSignal().Connect( this, &MetaballExplosionController::EndDisperseAnimation ); - } -} - -void MetaballExplosionController::EndDisperseAnimation(Animation &source) -{ - mCompositionActor.SetProperty( mPositionIndex, Vector2(0,0) ); -} - -bool MetaballExplosionController::OnTimerDispersionTick() -{ - if( mDispersion < METABALL_NUMBER ) - { - DisperseBallAnimation(mDispersion); - mDispersion++; - } - return true; -} - -void MetaballExplosionController::SetPositionToMetaballs(Vector2 & metaballCenter) -{ - //We set the position for the metaballs based on click position - for( int i = 0; i < METABALL_NUMBER; i++ ) - { - mMetaballs[i].position = metaballCenter; - mMetaballs[i].actor.SetProperty(mMetaballs[i].positionIndex, mMetaballs[i].position); - } - - mCompositionActor.SetProperty( mPositionIndex, metaballCenter ); -} - -bool MetaballExplosionController::OnTouch( Actor actor, const TouchData& touch ) -{ - float aspectR = mScreenSize.y / mScreenSize.x; - - switch( touch.GetState( 0 ) ) - { - case PointState::DOWN: - { - ResetMetaballs(true); - - const Vector2 screen = touch.GetScreenPosition( 0 ); - Vector2 metaballCenter = Vector2((screen.x / mScreenSize.x) - 0.5, (aspectR * (mScreenSize.y - screen.y) / mScreenSize.y) - 0.5) * 2.0; - SetPositionToMetaballs(metaballCenter); - - break; - } - case PointState::MOTION: - { - const Vector2 screen = touch.GetScreenPosition( 0 ); - Vector2 metaballCenter = Vector2((screen.x / mScreenSize.x) - 0.5, (aspectR * (mScreenSize.y - screen.y) / mScreenSize.y) - 0.5) * 2.0; - SetPositionToMetaballs(metaballCenter); - break; - } - case PointState::UP: - case PointState::LEAVE: - case PointState::INTERRUPTED: - { - mTimerDispersion.Start(); - break; - } - default: - break; - } - return true; -} - -void MetaballExplosionController::OnKeyEvent(const KeyEvent& event) -{ - if(event.state == KeyEvent::Down) - { - if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) - { - mApplication.Quit(); - } - } -} - - -//----------------------------------------------------------------------------------------------- -// -// Main functions -// -//----------------------------------------------------------------------------------------------- - -void RunTest( Application& application ) -{ - MetaballExplosionController 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/examples/metaball-refrac/metaball-refrac-example.cpp b/examples/metaball-refrac/metaball-refrac-example.cpp deleted file mode 100644 index 713032d..0000000 --- a/examples/metaball-refrac/metaball-refrac-example.cpp +++ /dev/null @@ -1,865 +0,0 @@ -/* - * Copyright (c) 2016 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 -#include -#include "shared/utility.h" - -using namespace Dali; -using namespace Dali::Toolkit; - -namespace -{ -const char * const BACKGROUND_IMAGE( DEMO_IMAGE_DIR "background-2.jpg" ); -const char * const TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" ); - -const float GRAVITY_X(0); -const float GRAVITY_Y(-0.09); -} - -#define METABALL_NUMBER 4 - -const char*const METABALL_VERTEX_SHADER = DALI_COMPOSE_SHADER ( - attribute mediump vec2 aPosition;\n - attribute mediump vec2 aTexture;\n - attribute mediump vec3 aNormal;\n - uniform mediump mat4 uMvpMatrix;\n - uniform mediump vec3 uSize;\n - uniform lowp vec4 uColor;\n - varying mediump vec2 vTexCoord;\n - - void main()\n - {\n - mediump vec4 vertexPosition = vec4(aPosition.x, aPosition.y, 0.0, 1.0);\n - vertexPosition = uMvpMatrix * vertexPosition;\n - gl_Position = vertexPosition;\n - vTexCoord = aTexture;\n - }\n -); - - -const char*const METABALL_FRAG_SHADER = DALI_COMPOSE_SHADER ( - precision mediump float;\n - varying vec2 vTexCoord;\n - uniform vec2 uPositionMetaball;\n - uniform vec2 uPositionVar;\n - uniform vec2 uGravityVector;\n - uniform float uRadius;\n - uniform float uRadiusVar;\n - uniform float uAspect;\n - void main()\n - {\n - vec2 adjustedCoords = vTexCoord * 2.0 - 1.0;\n - vec2 finalMetaballPosition = uPositionMetaball + uGravityVector + uPositionVar;\n - - float distance = (adjustedCoords.x - finalMetaballPosition.x) * (adjustedCoords.x - finalMetaballPosition.x) + - (adjustedCoords.y - finalMetaballPosition.y) * (adjustedCoords.y - finalMetaballPosition.y);\n - float finalRadius = uRadius + uRadiusVar;\n - float color = finalRadius / sqrt( distance );\n - vec2 bordercolor = vec2(0.0,0.0);\n - if (vTexCoord.x < 0.1)\n - {\n - bordercolor.x = (0.1 - vTexCoord.x) * 0.8;\n - }\n - if (vTexCoord.x > 0.9)\n - {\n - bordercolor.x = (vTexCoord.x - 0.9) * 0.8;\n - }\n - if (vTexCoord.y < 0.1)\n - {\n - bordercolor.y = (0.1 - vTexCoord.y) * 0.8;\n - }\n - if (vTexCoord.y > (0.9 * uAspect))\n - {\n - bordercolor.y = (vTexCoord.y - (0.9 * uAspect)) * 0.8;\n - }\n - float border = (bordercolor.x + bordercolor.y) * 0.5;\n - gl_FragColor = vec4(color + border,color + border,color + border,1.0);\n - }\n -); - -const char*const REFRACTION_FRAG_SHADER = DALI_COMPOSE_SHADER ( - precision mediump float;\n - varying vec2 vTexCoord;\n - uniform sampler2D sTexture;\n - uniform sampler2D sEffect;\n - void main()\n - {\n - vec4 metaColor = texture2D(sEffect, vTexCoord);\n - vec2 zoomCoords;\n - float bright = 1.0;\n - if (metaColor.r > 0.85)\n - {\n - zoomCoords = ((vTexCoord - 0.5) * 0.95) + 0.5;\n - }\n - else if (metaColor.r > 0.81)\n - {\n - float interpolation = mix(0.95, 1.05, (0.85 - metaColor.r) * 50.0);\n - zoomCoords = ((vTexCoord - 0.5) * interpolation) + 0.5;\n - bright = 1.2;\n - }\n - else\n - {\n - zoomCoords = vTexCoord;\n - }\n - - gl_FragColor = texture2D(sTexture, zoomCoords) * bright;\n - }\n - ); - -const char*const FRAG_SHADER = DALI_COMPOSE_SHADER ( - precision mediump float;\n - varying vec2 vTexCoord;\n - uniform sampler2D sTexture;\n - void main()\n - {\n - gl_FragColor = texture2D(sTexture, vTexCoord);\n - }\n -); - - -struct MetaballInfo -{ - Actor actor; - Vector2 position; - float radius; - float initRadius; - - //Properties needed for animations - Property::Index positionIndex; - Property::Index positionVarIndex; - Property::Index gravityIndex; - Property::Index radiusIndex; - Property::Index radiusVarIndex; - Property::Index aspectIndex; -}; - - -/***************************************************************************/ -/* Demo using Metaballs for Refraction when clicking the screen ************/ -/* The concept is similar to the Note 5 ScreenLock ************/ -/***************************************************************************/ -class MetaballRefracController : public ConnectionTracker -{ -public: - MetaballRefracController( Application& application ); - ~MetaballRefracController(); - - void Create( Application& app ); - bool OnTouch( Actor actor, const TouchData& touch ); - void OnKeyEvent(const KeyEvent& event); - - void SetGravity(const Vector2 & gravity); - - -private: - Application& mApplication; - Vector2 mScreenSize; - - Layer mContentLayer; - - Image mBackImage; - FrameBufferImage mMetaballFBO; - - Actor mMetaballRoot; - MetaballInfo mMetaballs[METABALL_NUMBER]; - - Actor mCompositionActor; - - //Motion - Vector2 mCurrentTouchPosition; - Vector2 mMetaballPosVariation; - Vector2 mMetaballPosVariationFrom; - Vector2 mMetaballPosVariationTo; - Vector2 mMetaballCenter; - - Vector2 mGravity; - Vector2 mGravityVar; - - Renderer mRendererRefraction; - TextureSet mTextureSetRefraction; - Shader mShaderRefraction; - TextureSet mTextureSetNormal; - Shader mShaderNormal; - - //Animations - Animation mGravityAnimation[METABALL_NUMBER]; - Animation mRadiusDecAnimation[METABALL_NUMBER]; - Animation mRadiusIncFastAnimation[METABALL_NUMBER]; - Animation mRadiusIncSlowAnimation[METABALL_NUMBER]; - Animation mRadiusVarAnimation[METABALL_NUMBER]; - Animation mPositionVarAnimation[METABALL_NUMBER]; - - //Private functions - Geometry CreateGeometry(); - Geometry CreateGeometryComposition(); - - void CreateMetaballActors(); - void CreateMetaballImage(); - void AddRefractionImage(); - void CreateAnimations(); - - void LaunchRadiusIncSlowAnimations(Animation &source); - void LaunchGetBackToPositionAnimation(Animation &source); - - void StopClickAnimations(); - void StopAfterClickAnimations(); - - void ResetMetaballsState(); - - void SetPositionToMetaballs(Vector2 & metaballCenter); -}; - - -//----------------------------------------------------------------------------------------------- -// -// IMPLEMENTATION -// -//---------------- - -MetaballRefracController::MetaballRefracController( Application& application ) - : mApplication( application ) -{ - // Connect to the Application's Init signal - mApplication.InitSignal().Connect( this, &MetaballRefracController::Create ); -} - -MetaballRefracController::~MetaballRefracController() -{ - // Nothing to do here; -} - -/* - * Setter function for gravity - */ -void MetaballRefracController::SetGravity(const Vector2 & gravity) -{ - mGravity = gravity; -} - -/** - * Main create function, it creates the metaballs and all the - */ -void MetaballRefracController::Create( Application& app ) -{ - Stage stage = Stage::GetCurrent(); - - stage.KeyEventSignal().Connect(this, &MetaballRefracController::OnKeyEvent); - - mScreenSize = stage.GetSize(); - - stage.SetBackgroundColor(Color::BLACK); - - //Set background image for the view - mBackImage = DemoHelper::LoadImage( BACKGROUND_IMAGE ); - - mGravity = Vector2(GRAVITY_X,GRAVITY_Y); - mGravityVar = Vector2(0,0); - - //Create internal data - CreateMetaballActors(); - CreateMetaballImage(); - AddRefractionImage(); - - CreateAnimations(); - - // Connect the callback to the touch signal on the mesh actor - stage.GetRootLayer().TouchSignal().Connect( this, &MetaballRefracController::OnTouch ); -} - -/** - * Create a mesh data with the geometry for the metaball rendering - */ -Geometry MetaballRefracController::CreateGeometry() -{ - float aspect = (float)mScreenSize.y / (float)mScreenSize.x; - - // Create vertices and specify their color - float xsize = mScreenSize.x * 0.5; - - //We create the meshdata for the metaballs - struct VertexPosition { Vector2 position; }; - struct VertexTexture { Vector2 texture; }; - struct VertexNormal { Vector3 normal; }; - - VertexPosition vertices[] = { - { Vector2( -xsize, -xsize * aspect) }, - { Vector2( xsize, -xsize * aspect) }, - { Vector2( -xsize, xsize * aspect) }, - { Vector2( xsize, xsize * aspect) } - }; - - VertexTexture textures[] = { - { Vector2(0.0f, 0.0f) }, - { Vector2(1.0f, 0.0f) }, - { Vector2(0.0f, 1.0f * aspect) }, - { Vector2(1.0f, 1.0f * aspect) } - }; - - VertexNormal normals [] = { - { Vector3(0.0f, 0.0f, 1.0f) }, - { Vector3(0.0f, 0.0f, 1.0f) }, - { Vector3(0.0f, 0.0f, 1.0f) }, - { Vector3(0.0f, 0.0f, 1.0f) } - }; - - unsigned int numberOfVertices = sizeof(vertices)/sizeof(VertexPosition); - - //Vertices - Property::Map positionVertexFormat; - positionVertexFormat["aPosition"] = Property::VECTOR2; - PropertyBuffer positionVertices = PropertyBuffer::New( positionVertexFormat ); - positionVertices.SetData( vertices, numberOfVertices ); - - //Textures - Property::Map textureVertexFormat; - textureVertexFormat["aTexture"] = Property::VECTOR2; - PropertyBuffer textureVertices = PropertyBuffer::New( textureVertexFormat ); - textureVertices.SetData( textures, numberOfVertices ); - - //Normals - Property::Map normalVertexFormat; - normalVertexFormat["aNormal"] = Property::VECTOR3; - PropertyBuffer normalVertices = PropertyBuffer::New( normalVertexFormat ); - normalVertices.SetData( normals, numberOfVertices ); - - //Indices - unsigned short indices[] = { 0, 3, 1, 0, 2, 3 }; - - // Create the geometry object - Geometry texturedQuadGeometry = Geometry::New(); - texturedQuadGeometry.AddVertexBuffer( positionVertices ); - texturedQuadGeometry.AddVertexBuffer( textureVertices ); - texturedQuadGeometry.AddVertexBuffer( normalVertices ); - - texturedQuadGeometry.SetIndexBuffer ( &indices[0], 6 ); - - return texturedQuadGeometry; -} - -/** - * Create a mesh data with the geometry for the metaball rendering - */ -Geometry MetaballRefracController::CreateGeometryComposition() -{ - float aspect = (float)mScreenSize.y / (float)mScreenSize.x; - - // Create vertices and specify their color - float xsize = mScreenSize.x * 0.5; - - //We create the meshdata for the metaballs - struct VertexPosition { Vector2 position; }; - struct VertexTexture { Vector2 texture; }; - struct VertexNormal { Vector3 normal; }; - - VertexPosition vertices[] = { - { Vector2( -xsize, -xsize * aspect) }, - { Vector2( xsize, -xsize * aspect) }, - { Vector2( -xsize, xsize * aspect) }, - { Vector2( xsize, xsize * aspect) } - }; - - VertexTexture textures[] = { - { Vector2(0.0f, 0.0f) }, - { Vector2(1.0f, 0.0f) }, - { Vector2(0.0f, 1.0f) }, - { Vector2(1.0f, 1.0f) } - }; - - VertexNormal normals [] = { - { Vector3(0.0f, 0.0f, 1.0f) }, - { Vector3(0.0f, 0.0f, 1.0f) }, - { Vector3(0.0f, 0.0f, 1.0f) }, - { Vector3(0.0f, 0.0f, 1.0f) } - }; - - unsigned int numberOfVertices = sizeof(vertices)/sizeof(VertexPosition); - - //Vertices - Property::Map positionVertexFormat; - positionVertexFormat["aPosition"] = Property::VECTOR2; - PropertyBuffer positionVertices = PropertyBuffer::New( positionVertexFormat ); - positionVertices.SetData( vertices, numberOfVertices ); - - //Textures - Property::Map textureVertexFormat; - textureVertexFormat["aTexture"] = Property::VECTOR2; - PropertyBuffer textureVertices = PropertyBuffer::New( textureVertexFormat ); - textureVertices.SetData( textures, numberOfVertices ); - - //Normals - Property::Map normalVertexFormat; - normalVertexFormat["aNormal"] = Property::VECTOR3; - PropertyBuffer normalVertices = PropertyBuffer::New( normalVertexFormat ); - normalVertices.SetData( normals, numberOfVertices ); - - //Indices - unsigned short indices[] = { 0, 3, 1, 0, 2, 3 }; - - // Create the geometry object - Geometry texturedQuadGeometry = Geometry::New(); - texturedQuadGeometry.AddVertexBuffer( positionVertices ); - texturedQuadGeometry.AddVertexBuffer( textureVertices ); - texturedQuadGeometry.AddVertexBuffer( normalVertices ); - - texturedQuadGeometry.SetIndexBuffer ( &indices[0], sizeof( indices )/ sizeof( indices[0] ) ); - - return texturedQuadGeometry; -} - -/** - * Create a mesh actor for the metaballs - */ -void MetaballRefracController::CreateMetaballActors() -{ - //We create metaball structures - //With MeshData Textured - float aspect = (float)mScreenSize.y / (float)mScreenSize.x; - - //Create the renderer for the metaballs - Shader shader = Shader::New( METABALL_VERTEX_SHADER, METABALL_FRAG_SHADER ); - Geometry metaballGeom = CreateGeometry(); - Renderer renderer = Renderer::New( metaballGeom, shader ); - renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON ); - renderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_RGB, BlendFactor::ONE ); - renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB, BlendFactor::ONE ); - renderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_ALPHA, BlendFactor::ONE ); - renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_ALPHA, BlendFactor::ONE ); - - //Each metaball has a different radius - mMetaballs[0].radius = mMetaballs[0].initRadius = 0.0145f; - mMetaballs[1].radius = mMetaballs[1].initRadius = 0.012f; - mMetaballs[2].radius = mMetaballs[2].initRadius = 0.0135f; - mMetaballs[3].radius = mMetaballs[3].initRadius = 0.0135f; - - //Initialization of each of the metaballs - for (int i = 0 ; i < METABALL_NUMBER ; i++) - { - mMetaballs[i].position = Vector2(0.0f, 0.0f); - - mMetaballs[i].actor = Actor::New( ); - mMetaballs[i].actor.SetName("Metaball"); - mMetaballs[i].actor.SetScale( 1.0f ); - mMetaballs[i].actor.SetParentOrigin( ParentOrigin::CENTER ); - - - mMetaballs[i].actor.AddRenderer( renderer ); - - mMetaballs[i].positionIndex = mMetaballs[i].actor.RegisterProperty( "uPositionMetaball", mMetaballs[i].position ); - - mMetaballs[i].positionVarIndex = mMetaballs[i].actor.RegisterProperty( "uPositionVar", Vector2(0.f,0.f) ); - - mMetaballs[i].gravityIndex = mMetaballs[i].actor.RegisterProperty( "uGravityVector", Vector2(0.f,0.f) ); - - mMetaballs[i].radiusIndex = mMetaballs[i].actor.RegisterProperty( "uRadius", mMetaballs[i].radius ); - - mMetaballs[i].radiusVarIndex = mMetaballs[i].actor.RegisterProperty( "uRadiusVar", 0.f ); - - mMetaballs[i].aspectIndex = mMetaballs[i].actor.RegisterProperty( "uAspect", aspect ); - - mMetaballs[i].actor.SetSize(400, 400); - } - - //Root creation - mMetaballRoot = Actor::New(); - mMetaballRoot.SetParentOrigin( ParentOrigin::CENTER ); - for (int i = 0 ; i < METABALL_NUMBER ; i++) - { - mMetaballRoot.Add( mMetaballs[i].actor ); - } - - //Initialization of variables related to metaballs - mMetaballPosVariation = Vector2(0,0); - mMetaballPosVariationFrom = Vector2(0,0); - mMetaballPosVariationTo = Vector2(0,0); - mCurrentTouchPosition = Vector2(0,0); -} - -/** - * Create the render task and FBO to render the metaballs into a texture - */ -void MetaballRefracController::CreateMetaballImage() -{ - //We create an FBO and a render task to create to render the metaballs with a fragment shader - Stage stage = Stage::GetCurrent(); - mMetaballFBO = FrameBufferImage::New(mScreenSize.x, mScreenSize.y ); - - stage.Add(mMetaballRoot); - - //Creation of the render task used to render the metaballs - RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); - RenderTask task = taskList.CreateTask(); - task.SetRefreshRate( RenderTask::REFRESH_ALWAYS ); - task.SetSourceActor( mMetaballRoot ); - task.SetExclusive(true); - task.SetClearColor( Color::BLACK ); - task.SetClearEnabled( true ); - task.SetTargetFrameBuffer( mMetaballFBO ); -} - -/** - * Create a mesh image to render the final composition - */ -void MetaballRefracController::AddRefractionImage() -{ - //Creation of the composition image - - //Create geometry - Geometry metaballGeom = CreateGeometryComposition(); - - //Create Refraction shader and renderer - mShaderRefraction = Shader::New( METABALL_VERTEX_SHADER, REFRACTION_FRAG_SHADER ); - - //Create new texture set - mTextureSetRefraction = TextureSet::New(); - TextureSetImage( mTextureSetRefraction, 0u, mBackImage ); - TextureSetImage( mTextureSetRefraction, 1u, mMetaballFBO ); - - //Create normal shader - mShaderNormal = Shader::New( METABALL_VERTEX_SHADER, FRAG_SHADER ); - - //Create new texture set - mTextureSetNormal = TextureSet::New(); - TextureSetImage( mTextureSetNormal, 0u, mBackImage ); - - //Create actor - mCompositionActor = Actor::New( ); - mCompositionActor.SetParentOrigin(ParentOrigin::CENTER); - mCompositionActor.SetPosition(Vector3(0.0f, 0.0f, 0.0f)); - mCompositionActor.SetSize(mScreenSize.x, mScreenSize.y); - - mRendererRefraction = Renderer::New( metaballGeom, mShaderNormal ); - mRendererRefraction.SetTextures( mTextureSetNormal ); - mCompositionActor.AddRenderer( mRendererRefraction ); - - Stage stage = Stage::GetCurrent(); - stage.Add( mCompositionActor ); -} - -/** - * Creation of all the metaballs animations (gravity, movement, size, etc.) - */ -void MetaballRefracController::CreateAnimations() -{ - int i = 0; - float key; - - mPositionVarAnimation[1] = Animation::New(2.f); - mPositionVarAnimation[1].SetLooping( false ); - mPositionVarAnimation[1].Pause(); - mPositionVarAnimation[1].FinishedSignal().Connect( this, &MetaballRefracController::LaunchGetBackToPositionAnimation ); - - KeyFrames keySinCosVariation = KeyFrames::New(); - Vector2 sinCosVariation(0,0); - for ( i = 0 ; i < 360 ; i++) - { - sinCosVariation.x = 0.05f * (-sin(i * Math::PI/180.f) + cos(i * Math::PI/180.f)); - sinCosVariation.y = 0.05f * (sin(i * Math::PI/180.f) - cos(i * Math::PI/180.f)); - key = i/360.f; - keySinCosVariation.Add(key, sinCosVariation); - } - - mPositionVarAnimation[2] = Animation::New(6.f); - mPositionVarAnimation[2].AnimateBetween(Property( mMetaballs[2].actor, mMetaballs[2].positionVarIndex ), keySinCosVariation); - mPositionVarAnimation[2].SetLooping( true ); - mPositionVarAnimation[2].Pause(); - - KeyFrames keyCosSinVariation = KeyFrames::New(); - Vector2 cosSinVariation(0,0); - for ( i = 0 ; i < 360 ; i++) - { - cosSinVariation.x = 0.05f * (-sin(i * Math::PI/180.f) - cos(i * Math::PI/180.f)); - cosSinVariation.y = 0.05f * (sin(i * Math::PI/180.f) + cos(i * Math::PI/180.f)); - key = i/360.f; - keyCosSinVariation.Add(key, cosSinVariation); - } - - mPositionVarAnimation[3] = Animation::New(6.f); - mPositionVarAnimation[3].AnimateBetween(Property( mMetaballs[3].actor, mMetaballs[3].positionVarIndex ), keyCosSinVariation); - mPositionVarAnimation[3].SetLooping( true ); - mPositionVarAnimation[3].Pause(); - - //Animations for gravity - for ( i = 0 ; i < METABALL_NUMBER ; i++) - { - mGravityAnimation[i] = Animation::New(25.f); - mGravityAnimation[i].AnimateBy( Property( mMetaballs[i].actor, mMetaballs[i].gravityIndex ), mGravity * 25.f * 3.f); - mGravityAnimation[i].SetLooping( false ); - mGravityAnimation[i].Pause(); - } - - //Animation to decrease size of metaballs when there is no click - for ( i = 0 ; i < METABALL_NUMBER ; i++) - { - mRadiusDecAnimation[i] = Animation::New(25.f); - mRadiusDecAnimation[i].AnimateBy( Property( mMetaballs[i].actor, mMetaballs[i].radiusIndex ), -0.004f * 25.f * 3.f); - mRadiusDecAnimation[i].SetLooping( false ); - mRadiusDecAnimation[i].Pause(); - } - - //Animation to grow the size of the metaballs the first second of the click - for ( i = 0 ; i < METABALL_NUMBER ; i++) - { - mRadiusIncFastAnimation[i] = Animation::New(0.3f); - mRadiusIncFastAnimation[i].AnimateBy( Property( mMetaballs[i].actor, mMetaballs[i].radiusIndex ), 0.06f); - mRadiusIncFastAnimation[i].SetLooping( false ); - mRadiusIncFastAnimation[i].Pause(); - } - mRadiusIncFastAnimation[0].FinishedSignal().Connect( this, &MetaballRefracController::LaunchRadiusIncSlowAnimations ); - - //Animation to grow the size of the metaballs afterwards - for ( i = 0 ; i < METABALL_NUMBER ; i++) - { - mRadiusIncSlowAnimation[i] = Animation::New(20.f); - mRadiusIncSlowAnimation[i].AnimateBy( Property( mMetaballs[i].actor, mMetaballs[i].radiusIndex ), 0.04f); - mRadiusIncSlowAnimation[i].SetLooping( false ); - mRadiusIncSlowAnimation[i].Pause(); - } - - //keyframes of a sin function - KeyFrames keySin = KeyFrames::New(); - float val; - for ( i = 0 ; i < 360 ; i++) - { - val = 0.01f * sin(i * Math::PI/180.f); - key = i/360.f; - keySin.Add(key, val); - } - - //Animation to change the size of the metaball - mRadiusVarAnimation[2] = Animation::New(8.f); - mRadiusVarAnimation[2].AnimateBetween(Property( mMetaballs[2].actor, mMetaballs[2].radiusVarIndex ), keySin); - mRadiusVarAnimation[2].SetLooping( true ); - - //keyframes of a cos function - KeyFrames keyCos = KeyFrames::New(); - for ( i = 0 ; i < 360 ; i++) - { - val = 0.01f * cos(i * Math::PI/180.f); - key = i/360.f; - keyCos.Add(key, val); - } - - //Animation to change the size of the metaball - mRadiusVarAnimation[3] = Animation::New(8.f); - mRadiusVarAnimation[3].AnimateBetween(Property( mMetaballs[3].actor, mMetaballs[3].radiusVarIndex ), keyCos); - mRadiusVarAnimation[3].SetLooping( true ); -} - -/** - * Function to launch the animation to get the metaball[1] back to the center - */ -void MetaballRefracController::LaunchGetBackToPositionAnimation(Animation &source) -{ - mMetaballPosVariationTo = Vector2(0,0); - - mPositionVarAnimation[1] = Animation::New(1.f); - mPositionVarAnimation[1].SetLooping( false ); - mPositionVarAnimation[1].AnimateTo(Property( mMetaballs[1].actor, mMetaballs[1].positionVarIndex ), Vector2(0,0)); - mPositionVarAnimation[1].Play(); -} - -/** - * Function to launch the gro slow radius for the metaballs, and also the small variations for metaball[2] and [3] - */ -void MetaballRefracController::LaunchRadiusIncSlowAnimations(Animation &source) -{ - for (int i = 0 ; i < METABALL_NUMBER ; i++) - { - mRadiusIncSlowAnimation[i].Play(); - } - mPositionVarAnimation[2].Play(); - mPositionVarAnimation[3].Play(); -} - -/** - * Function to stop all animations related to the click of the user in the screen - */ -void MetaballRefracController::StopClickAnimations() -{ - for (int i = 0 ; i < METABALL_NUMBER ; i++) - { - mRadiusIncSlowAnimation[i].Stop(); - mRadiusIncFastAnimation[i].Stop(); - } - mPositionVarAnimation[1].Stop(); - mPositionVarAnimation[2].Stop(); - mPositionVarAnimation[3].Stop(); -} - -/** - * Function to stop all animations related to the after click of the user in the screen - */ -void MetaballRefracController::StopAfterClickAnimations() -{ - for (int i = 0 ; i < METABALL_NUMBER ; i++) - { - mGravityAnimation[i].Stop(); - mRadiusDecAnimation[i].Stop(); - - mMetaballs[i].radius = mMetaballs[i].initRadius; - - mMetaballs[i].actor.SetProperty(mMetaballs[i].gravityIndex, Vector2(0,0)); - mMetaballs[i].actor.SetProperty(mMetaballs[i].radiusIndex, mMetaballs[i].radius); - mMetaballs[i].actor.SetProperty(mMetaballs[i].radiusVarIndex, 0.f); - } - mRadiusVarAnimation[2].Stop(); - mRadiusVarAnimation[3].Stop(); -} - -/* - * Function that resets the sate of the different Metaballs - */ -void MetaballRefracController::ResetMetaballsState() -{ - mRendererRefraction.SetTextures(mTextureSetNormal); - mRendererRefraction.SetShader( mShaderNormal ); - - for (int i = 0 ; i < METABALL_NUMBER ; i++) - { - mMetaballs[i].radius = mMetaballs[i].initRadius; - } - - mMetaballPosVariationTo = Vector2(0,0); - mMetaballPosVariationFrom = Vector2(0,0); - mMetaballPosVariation = Vector2(0,0); - - mGravityVar = Vector2(0,0); -} - -/** - * Function to set the actual position of the metaballs when the user clicks the screen - */ -void MetaballRefracController::SetPositionToMetaballs(Vector2 & metaballCenter) -{ - //We set the position for the metaballs based on click position - for (int i = 0 ; i < METABALL_NUMBER ; i++) - { - mMetaballs[i].position = metaballCenter; - mMetaballs[i].actor.SetProperty(mMetaballs[i].positionIndex, mMetaballs[0].position); // 0 y no i ?!?!?! - } -} - -bool MetaballRefracController::OnTouch( Actor actor, const TouchData& touch ) -{ - float aspectR = mScreenSize.y / mScreenSize.x; - switch( touch.GetState( 0 ) ) - { - case PointState::DOWN: - { - StopAfterClickAnimations(); - for (int i = 0 ; i < METABALL_NUMBER ; i++) - mRadiusIncFastAnimation[i].Play(); - mRadiusVarAnimation[2].Play(); - mRadiusVarAnimation[3].Play(); - - //We draw with the refraction-composition shader - mRendererRefraction.SetTextures(mTextureSetRefraction); - mRendererRefraction.SetShader( mShaderRefraction ); - mCurrentTouchPosition = touch.GetScreenPosition( 0 ); - - //we use the click position for the metaballs - Vector2 metaballCenter = Vector2((mCurrentTouchPosition.x / mScreenSize.x) - 0.5, (aspectR * (mScreenSize.y - mCurrentTouchPosition.y) / mScreenSize.y) - 0.5) * 2.0; - SetPositionToMetaballs(metaballCenter); - break; - } - case PointState::MOTION: - { - Vector2 screen = touch.GetScreenPosition( 0 ); - Vector2 displacement = screen - mCurrentTouchPosition; - mCurrentTouchPosition = screen; - - mMetaballPosVariationTo.x += (displacement.x / mScreenSize.x) * 2.2; - mMetaballPosVariationTo.y += (- displacement.y / mScreenSize.y) * 2.2; - - if (mPositionVarAnimation[1]) - { - mPositionVarAnimation[1].FinishedSignal().Disconnect( this, &MetaballRefracController::LaunchGetBackToPositionAnimation ); - mPositionVarAnimation[1].Stop(); - } - mPositionVarAnimation[1] = Animation::New(1.f); - mPositionVarAnimation[1].SetLooping( false ); - mPositionVarAnimation[1].AnimateTo(Property( mMetaballs[1].actor, mMetaballs[1].positionVarIndex ), mMetaballPosVariationTo); - mPositionVarAnimation[1].FinishedSignal().Connect( this, &MetaballRefracController::LaunchGetBackToPositionAnimation ); - mPositionVarAnimation[1].Play(); - - //we use the click position for the metaballs - Vector2 metaballCenter = Vector2((screen.x / mScreenSize.x) - 0.5, (aspectR * (mScreenSize.y - screen.y) / mScreenSize.y) - 0.5) * 2.0; - SetPositionToMetaballs(metaballCenter); - break; - } - case PointState::UP: - case PointState::LEAVE: - case PointState::INTERRUPTED: - { - //Stop click animations - StopClickAnimations(); - - //Launch out of screen animations - for (int i = 0 ; i < METABALL_NUMBER ; i++) - mGravityAnimation[i].Play(); - - for (int i = 0 ; i < METABALL_NUMBER ; i++) - mRadiusDecAnimation[i].Play(); - - break; - } - default: - break; - } - return true; -} - - -void MetaballRefracController::OnKeyEvent(const KeyEvent& event) -{ - if(event.state == KeyEvent::Down) - { - if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) - { - mApplication.Quit(); - } - } -} - - -// -// -//----------------------------------------------------------------------------------------------- - -void RunTest( Application& application ) -{ - MetaballRefracController 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/examples/new-window/new-window-example.cpp b/examples/new-window/new-window-example.cpp deleted file mode 100644 index 545f8ad..0000000 --- a/examples/new-window/new-window-example.cpp +++ /dev/null @@ -1,568 +0,0 @@ -/* - * 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. - */ - -// EXTERNAL INCLUDES -#include -#include -#include -#include -#include -#include - -#include -#include - -// INTERNAL INCLUDES -#include "shared/view.h" -#include "shared/utility.h" - -using namespace Dali; -using namespace Dali::Toolkit; - -class NewWindowController; - -namespace -{ -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); -const float TRACK_DURATION_IN_MS(970); - -Application gApplication; -NewWindowController* gNewWindowController(NULL); - -#define MAKE_SHADER(A)#A - -const char* VERTEX_COLOR_MESH = MAKE_SHADER( -attribute mediump vec3 aPosition;\n -attribute lowp vec3 aColor;\n -uniform mediump mat4 uMvpMatrix;\n -uniform mediump vec3 uSize;\n -varying lowp vec3 vColor;\n -\n -void main()\n -{\n - gl_Position = uMvpMatrix * vec4( aPosition*uSize, 1.0 );\n - vColor = aColor;\n -}\n -); - -const char* FRAGMENT_COLOR_MESH = MAKE_SHADER( -uniform lowp vec4 uColor;\n -varying lowp vec3 vColor;\n -\n -void main()\n -{\n - gl_FragColor = vec4(vColor,1.0)*uColor; -}\n -); - -const char* VERTEX_TEXTURE_MESH = MAKE_SHADER( -attribute mediump vec3 aPosition;\n -attribute highp vec2 aTexCoord;\n -uniform mediump mat4 uMvpMatrix;\n -uniform mediump vec3 uSize;\n -varying mediump vec2 vTexCoord;\n -\n -void main()\n -{\n - gl_Position = uMvpMatrix * vec4( aPosition*uSize, 1.0 );\n - vTexCoord = aTexCoord;\n -}\n -); - -const char* FRAGMENT_TEXTURE_MESH = MAKE_SHADER( -varying mediump vec2 vTexCoord;\n -uniform lowp vec4 uColor;\n -uniform sampler2D sTexture;\n -\n -void main()\n -{\n - gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor; -}\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 -{\n - mediump vec4 fragColor = texture2D(sTexture, vTexCoord);\n - mediump vec4 fxColor = texture2D(sEffect, vTexCoord);\n - gl_FragColor = mix(fragColor,fxColor, alpha);\n -}\n -); - -}; // anonymous namespace - - -class NewWindowController : public ConnectionTracker -{ -public: - NewWindowController( Application& app ); - void Create( Application& app ); - void Destroy( Application& app ); - - void AddBubbles( Actor& parentActor, const Vector2& stageSize); - void AddMeshActor( Actor& parentActor ); - void AddBlendingImageActor( Actor& parentActor ); - void AddTextLabel( Actor& parentActor ); - - 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(); - Dali::Property::Map CreateColorModifierer(); - - static void NewWindow(void); - - bool OnTrackTimerTick(); - void OnKeyEvent(const KeyEvent& event); - bool OnLoseContextButtonClicked( Toolkit::Button button ); - void OnContextLost(); - void OnContextRegained(); - -private: - Application mApplication; - TextLabel mTextActor; - - Toolkit::Control mView; ///< The View instance. - Toolkit::ToolBar mToolBar; ///< The View's Toolbar. - TextLabel mTitleActor; ///< The Toolbar's Title. - Layer mContentLayer; ///< Content layer (scrolling cluster content) - Toolkit::PushButton mLoseContextButton; - - Toolkit::BubbleEmitter mEmitter; - Timer mEmitTrackTimer; - bool mNeedNewAnimation; - unsigned int mAnimateComponentCount; - Animation mEmitAnimation; -}; - - -NewWindowController::NewWindowController( Application& application ) -: mApplication(application), - mNeedNewAnimation(true), - mAnimateComponentCount( 0 ) -{ - mApplication.InitSignal().Connect(this, &NewWindowController::Create); - mApplication.TerminateSignal().Connect(this, &NewWindowController::Destroy); -} - -void NewWindowController::Create( Application& app ) -{ - Stage stage = Stage::GetCurrent(); - stage.SetBackgroundColor(Color::YELLOW); - - stage.KeyEventSignal().Connect(this, &NewWindowController::OnKeyEvent); - - // The Init signal is received once (only) during the Application lifetime - - // Hide the indicator bar - mApplication.GetWindow().ShowIndicator( Dali::Window::INVISIBLE ); - - mContentLayer = DemoHelper::CreateView( app, - mView, - mToolBar, - "", - TOOLBAR_IMAGE, - "Context recovery" ); - - Size stageSize = stage.GetSize(); - ImageView backgroundActor = ImageView::New( BACKGROUND_IMAGE, Dali::ImageDimensions( stageSize.x, stageSize.y ) ); - backgroundActor.SetParentOrigin( ParentOrigin::CENTER ); - mContentLayer.Add(backgroundActor); - - // Point the default render task at the view - RenderTaskList taskList = stage.GetRenderTaskList(); - RenderTask defaultTask = taskList.GetTask( 0u ); - if ( defaultTask ) - { - defaultTask.SetSourceActor( mView ); - } - - mLoseContextButton = Toolkit::PushButton::New(); - mLoseContextButton.SetProperty( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, LOSE_CONTEXT_IMAGE ); - mLoseContextButton.SetProperty( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, 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 ); - - Actor logoLayoutActor = Actor::New(); - logoLayoutActor.SetParentOrigin(ParentOrigin::CENTER); - logoLayoutActor.SetPosition(0.0f, -200.0f, 0.0f); - logoLayoutActor.SetScale(0.5f); - backgroundActor.Add(logoLayoutActor); - - ImageView imageView = ImageView::New( LOGO_IMAGE ); - imageView.SetName("daliLogo"); - imageView.SetParentOrigin(ParentOrigin::CENTER); - imageView.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER); - logoLayoutActor.Add(imageView); - - ImageView mirrorImageView = CreateBlurredMirrorImage(LOGO_IMAGE); - mirrorImageView.SetParentOrigin(ParentOrigin::TOP_CENTER); - mirrorImageView.SetAnchorPoint(AnchorPoint::BOTTOM_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); -} - -void NewWindowController::Destroy( Application& app ) -{ - UnparentAndReset(mTextActor); -} - -void NewWindowController::AddBubbles( Actor& parentActor, const Vector2& stageSize) -{ - mEmitter = Toolkit::BubbleEmitter::New( stageSize, - DemoHelper::LoadTexture( DEMO_IMAGE_DIR "bubble-ball.png" ), - 200, Vector2( 5.0f, 5.0f ) ); - - Texture background = DemoHelper::LoadTexture(BACKGROUND_IMAGE); - mEmitter.SetBackground( background, Vector3(0.5f, 0.f,0.5f) ); - mEmitter.SetBubbleDensity( 9.f ); - Actor bubbleRoot = mEmitter.GetRootActor(); - parentActor.Add( bubbleRoot ); - bubbleRoot.SetParentOrigin(ParentOrigin::CENTER); - bubbleRoot.SetZ(0.1f); - - mEmitTrackTimer = Timer::New( EMIT_INTERVAL_IN_MS ); - mEmitTrackTimer.TickSignal().Connect(this, &NewWindowController::OnTrackTimerTick); - mEmitTrackTimer.Start(); -} - -void NewWindowController::AddMeshActor( Actor& parentActor ) -{ - Geometry meshGeometry = CreateMeshGeometry(); - - // Create a coloured mesh - Shader shaderColorMesh = Shader::New( VERTEX_COLOR_MESH, FRAGMENT_COLOR_MESH ); - Renderer colorMeshRenderer = Renderer::New( meshGeometry, shaderColorMesh ); - - Actor colorMeshActor = Actor::New(); - colorMeshActor.AddRenderer( colorMeshRenderer ); - 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"); - - // Create a textured mesh - Texture effectTexture = DemoHelper::LoadTexture(EFFECT_IMAGE); - Shader shaderTextureMesh = Shader::New( VERTEX_TEXTURE_MESH, FRAGMENT_TEXTURE_MESH ); - 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, 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"); - - 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( Actor& parentActor ) -{ - Property::Map colorModifier = CreateColorModifierer(); - - FrameBufferImage fb2 = CreateFrameBufferForImage( EFFECT_IMAGE, colorModifier, Vector3( 0.5f, 0.5f, 0.5f ) ); - - 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 - 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 ); - - blendActor.SetParentOrigin(ParentOrigin::CENTER_RIGHT); - blendActor.SetAnchorPoint(AnchorPoint::BOTTOM_RIGHT); - blendActor.SetPosition(Vector3(0.0f, 100.0f, 0.0f)); - blendActor.SetSize(140, 140); - parentActor.Add(blendActor); - - TextureSet textureSet = blendActor.GetRendererAt(0u).GetTextures(); - TextureSetImage( textureSet, 1u, fb2 ); -} - -void NewWindowController::AddTextLabel( Actor& parentActor ) -{ - mTextActor = TextLabel::New("Some text"); - mTextActor.SetParentOrigin(ParentOrigin::CENTER); - mTextActor.SetColor(Color::RED); - mTextActor.SetName("PushMe text"); - parentActor.Add( mTextActor ); -} - -ImageView NewWindowController::CreateBlurredMirrorImage(const char* imageName) -{ - Image image = DemoHelper::LoadImage(imageName); - - 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); - gbv.SetBackgroundColor(Color::TRANSPARENT); - gbv.SetUserImageAndOutputRenderTarget( image, fbo ); - gbv.SetSize(FBOSize); - Stage::GetCurrent().Add(gbv); - gbv.ActivateOnce(); - - ImageView blurredActor = ImageView::New(fbo); - blurredActor.SetSize(FBOSize); - blurredActor.SetScale(1.0f, -1.0f, 1.0f); - return blurredActor; -} - -FrameBufferImage NewWindowController::CreateFrameBufferForImage(const char* imageName, Property::Map& shaderEffect, const Vector3& rgbDelta ) -{ - Stage stage = Stage::GetCurrent(); - 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(); - - 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); - cameraActor.SetFieldOfView(Math::PI*0.25f); - cameraActor.SetNearClippingPlane(1.0f); - cameraActor.SetAspectRatio(FBOSize.width / FBOSize.height); - cameraActor.SetType(Dali::Camera::FREE_LOOK); // camera orientation based solely on actor - cameraActor.SetPosition(0.0f, 0.0f, ((FBOSize.height * 0.5f) / tanf(Math::PI * 0.125f))); - stage.Add(cameraActor); - - renderTask.SetSourceActor(imageView); - renderTask.SetInputEnabled(false); - renderTask.SetTargetFrameBuffer(framebuffer); - renderTask.SetCameraActor( cameraActor ); - renderTask.SetClearColor( Color::TRANSPARENT ); - renderTask.SetClearEnabled( true ); - renderTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - - return framebuffer; -} - -void NewWindowController::SetUpBubbleEmission( const Vector2& emitPosition, const Vector2& direction) -{ - if( mNeedNewAnimation ) - { - float duration = Random::Range(1.f, 1.5f); - mEmitAnimation = Animation::New( duration ); - mNeedNewAnimation = false; - mAnimateComponentCount = 0; - } - - mEmitter.EmitBubble( mEmitAnimation, emitPosition, direction, Vector2(10,10) ); - - mAnimateComponentCount++; - - if( mAnimateComponentCount % 6 ==0 ) - { - mEmitAnimation.Play(); - mNeedNewAnimation = true; - } -} - -Geometry NewWindowController::CreateMeshGeometry() -{ - // Create vertices and specify their color - struct Vertex - { - Vector3 position; - Vector2 textureCoordinates; - Vector3 color; - }; - - Vertex vertexData[5] = { - { Vector3( 0.0f, 0.0f, 0.5f ), Vector2(0.5f, 0.5f), Vector3(1.0f, 1.0f, 1.0f) }, - { Vector3( -0.5f, -0.5f, 0.0f ), Vector2(0.0f, 0.0f), Vector3(1.0f, 0.0f, 0.0f) }, - { Vector3( 0.5f, -0.5f, 0.0f ), Vector2(1.0f, 0.0f), Vector3(1.0f, 1.0f, 0.0f) }, - { Vector3( -0.5f, 0.5f, 0.0f ), Vector2(0.0f, 1.0f), Vector3(0.0f, 1.0f, 0.0f) }, - { Vector3( 0.5f, 0.5f, 0.0f ), Vector2(1.0f, 1.0f), Vector3(0.0f, 0.0f, 1.0f) } }; - - Property::Map vertexFormat; - vertexFormat["aPosition"] = Property::VECTOR3; - vertexFormat["aTexCoord"] = Property::VECTOR2; - vertexFormat["aColor"] = Property::VECTOR3; - PropertyBuffer vertices = PropertyBuffer::New( vertexFormat ); - vertices.SetData( vertexData, 5 ); - - // Specify all the faces - 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( &indexData[0], 12 ); - - return geometry; -} - -Dali::Property::Map NewWindowController::CreateColorModifierer() -{ - 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} - \n - void main() {\n - vec4 color = texture2D(sTexture, vTexCoord); \n - // modify the hsv Value - color.rgb += uRGBDelta * rand(vTexCoord); \n - // if the new vale exceeds one, then decrease it - color.rgb -= max(color.rgb*2.0 - vec3(2.0), 0.0);\n - // if the new vale drops below zero, then increase it - color.rgb -= min(color.rgb*2.0, 0.0);\n - gl_FragColor = color; \n - }\n - ) ); - - Property::Map map; - Property::Map customShader; - customShader[ "fragmentShader" ] = fragmentShader; - map[ "shader" ] = customShader; - - return map; -} - -void NewWindowController::NewWindow(void) -{ - PositionSize posSize(0, 0, 720, 1280); - gApplication.ReplaceWindow(posSize, "NewWindow"); // Generates a new window -} - -bool NewWindowController::OnLoseContextButtonClicked( Toolkit::Button button ) -{ - // Add as an idle callback to avoid ProcessEvents being recursively called. - mApplication.AddIdle( MakeCallback( NewWindowController::NewWindow ) ); - return true; -} - -bool NewWindowController::OnTrackTimerTick() -{ - static int time=0; - const float radius(250.0f); - - time += EMIT_INTERVAL_IN_MS; - float modTime = time / TRACK_DURATION_IN_MS; - float angle = 2.0f*Math::PI*modTime; - - Vector2 position(radius*cosf(angle), radius*-sinf(angle)); - Vector2 aimPos(radius*2*sinf(angle), radius*2*-cosf(angle)); - Vector2 direction = aimPos-position; - Vector2 stageSize = Stage::GetCurrent().GetSize(); - - SetUpBubbleEmission( stageSize*0.5f+position, direction ); - SetUpBubbleEmission( stageSize*0.5f+position*0.75f, direction ); - SetUpBubbleEmission( stageSize*0.5f+position*0.7f, direction ); - - return true; -} - -void NewWindowController::OnKeyEvent(const KeyEvent& event) -{ - if(event.state == KeyEvent::Down) - { - if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) - { - mApplication.Quit(); - } - } -} - -void NewWindowController::OnContextLost() -{ - printf("Stage reporting context loss\n"); -} - -void NewWindowController::OnContextRegained() -{ - printf("Stage reporting context regain\n"); -} - -void RunTest(Application& app) -{ - gNewWindowController = new NewWindowController(app); - app.MainLoop(Configuration::APPLICATION_DOES_NOT_HANDLE_CONTEXT_LOSS); -} - -// Entry point for Linux & Tizen applications -// -int DALI_EXPORT_API main(int argc, char **argv) -{ - gApplication = Application::New(&argc, &argv, DEMO_THEME_PATH); - RunTest(gApplication); - - return 0; -} diff --git a/examples/page-turn-view/page-turn-view-example.cpp b/examples/page-turn-view/page-turn-view-example.cpp deleted file mode 100644 index 3eb9c32..0000000 --- a/examples/page-turn-view/page-turn-view-example.cpp +++ /dev/null @@ -1,377 +0,0 @@ -/* - * 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 -#include -#include - -#include -#include -#include -#include - -#include "shared/view.h" -#include "shared/utility.h" - -using namespace Dali; -using namespace Dali::Toolkit; - -// LOCAL STUFF -namespace -{ -const char* const CHANGE_IMAGE_ICON(DEMO_IMAGE_DIR "icon-change.png"); -const char* const CHANGE_IMAGE_ICON_SELECTED( DEMO_IMAGE_DIR "icon-change-selected.png" ); - -// The content amount of one page between portrait and landscape view are different -// set a ratio to modify the current page number when the rotation is changed -const float PAGE_NUMBER_CORRESPONDING_RATIO(1.25f); - -const char* BOOK_COVER_PORTRAIT( DEMO_IMAGE_DIR "book-portrait-cover.jpg" ); -const char* BOOK_COVER_LANDSCAPE( DEMO_IMAGE_DIR "book-landscape-cover.jpg" ); -const char* BOOK_COVER_BACK_LANDSCAPE( DEMO_IMAGE_DIR "book-landscape-cover-back.jpg" ); - -const char* PAGE_IMAGES_PORTRAIT[] = -{ - DEMO_IMAGE_DIR "book-portrait-p1.jpg", - DEMO_IMAGE_DIR "book-portrait-p2.jpg", - DEMO_IMAGE_DIR "book-portrait-p3.jpg", - DEMO_IMAGE_DIR "book-portrait-p4.jpg", - DEMO_IMAGE_DIR "book-portrait-p5.jpg" -}; -const unsigned int NUMBER_OF_PORTRAIT_IMAGE( sizeof(PAGE_IMAGES_PORTRAIT) / sizeof(PAGE_IMAGES_PORTRAIT[0]) ); - -const char* PAGE_IMAGES_LANDSCAPE[] = -{ - DEMO_IMAGE_DIR "book-landscape-p1.jpg", - DEMO_IMAGE_DIR "book-landscape-p2.jpg", - DEMO_IMAGE_DIR "book-landscape-p3.jpg", - DEMO_IMAGE_DIR "book-landscape-p4.jpg", - DEMO_IMAGE_DIR "book-landscape-p5.jpg", - DEMO_IMAGE_DIR "book-landscape-p6.jpg", - DEMO_IMAGE_DIR "book-landscape-p7.jpg", - DEMO_IMAGE_DIR "book-landscape-p8.jpg" -}; -const unsigned int NUMBER_OF_LANDSCAPE_IMAGE( sizeof(PAGE_IMAGES_LANDSCAPE) / sizeof(PAGE_IMAGES_LANDSCAPE[0]) ); - -Texture LoadTextures( const char* imagePath1, const char* imagePath2 ) -{ - PixelData pixelData1 = DemoHelper::LoadPixelData( imagePath1, ImageDimensions(), FittingMode::DEFAULT, SamplingMode::DEFAULT ); - PixelData pixelData2 = DemoHelper::LoadPixelData( imagePath2, ImageDimensions(), FittingMode::DEFAULT, SamplingMode::DEFAULT ); - - unsigned int width = pixelData1.GetWidth() + pixelData2.GetWidth(); - unsigned int height = pixelData1.GetHeight() > pixelData2.GetHeight() ? pixelData1.GetHeight() : pixelData2.GetHeight(); - - Texture texture = Texture::New( Dali::TextureType::TEXTURE_2D, Pixel::RGB888, width, height ); - texture.Upload( pixelData1 ); - texture.Upload( pixelData2, 0u, 0u, pixelData1.GetWidth(), 0u, pixelData2.GetWidth(), pixelData2.GetHeight() ); - - return texture; -} - -}// end LOCAL STUFF - -class PortraitPageFactory : public PageFactory -{ - /** - * Query the number of pages available from the factory. - * The maximum available page has an ID of GetNumberOfPages()-1. - */ - virtual unsigned int GetNumberOfPages() - { - return 10*NUMBER_OF_PORTRAIT_IMAGE + 1; - } - /** - * Create an texture to represent a page. - * @param[in] pageId The ID of the page to create. - * @return A texture, or an uninitialized handle if the ID is out of range. - */ - virtual Texture NewPage( unsigned int pageId ) - { - Texture page; - - if( pageId == 0 ) - { - page = DemoHelper::LoadTexture( BOOK_COVER_PORTRAIT ); - } - else - { - page = DemoHelper::LoadTexture( PAGE_IMAGES_PORTRAIT[ (pageId-1) % NUMBER_OF_PORTRAIT_IMAGE ] ); - } - - return page; - } -}; - -class LandscapePageFactory : public PageFactory -{ - - /** - * Query the number of pages available from the factory. - * The maximum available page has an ID of GetNumberOfPages()-1. - */ - virtual unsigned int GetNumberOfPages() - { - return 10*NUMBER_OF_LANDSCAPE_IMAGE / 2 + 1; - } - /** - * Create an texture to represent a page. - * @param[in] pageId The ID of the page to create. - * @return A texture, or an uninitialized handle if the ID is out of range. - */ - virtual Texture NewPage( unsigned int pageId ) - { - Texture page; - if( pageId == 0 ) - { - page = LoadTextures( BOOK_COVER_LANDSCAPE, BOOK_COVER_BACK_LANDSCAPE ); - } - else - { - unsigned int imageId = (pageId-1)*2; - page = LoadTextures( PAGE_IMAGES_LANDSCAPE[ imageId % NUMBER_OF_LANDSCAPE_IMAGE ], PAGE_IMAGES_LANDSCAPE[ (imageId+1) % NUMBER_OF_LANDSCAPE_IMAGE ] ); - } - - return page; - } -}; - -/** - * This example shows how to use the page turn UI control to implement the page-turn demo - * The effect follows the pan gesture to animate the page - * Pan the page inwards, the page will bent, - * Depends on the distance of the panning, the page might turn over or slide back - * Also, in portrait view, the pan gesture outwards from position near the spine could turn the previous page back - * Allows to turn multiple pages one by one quickly towards the same direction, multiple animations are launched in this case -*/ -class PageTurnController : public ConnectionTracker -{ -public: - PageTurnController( Application &app ); - ~PageTurnController(); - - //This method gets called once the main loop of application is up and running - void OnInit( Application& app ); - -private: - - /** - * This method gets called when the button is clicked, switch between portrait and landscape views - */ - bool OnButtonClicked(Toolkit::Button button); - - /** - * Main key event handler - */ - void OnKeyEvent(const KeyEvent& event); - - /** - * Callback function of page turned signal - * @param[in] pageTurnView The handle of the PageTurnPortraitView or PageTurnLandscapeView - * @param[in] pageIndex The index of the page turned over - * @param[in] isTurningForward The turning direction, forwards or backwards - */ - void OnPageStartedTurn( PageTurnView pageTurnView, unsigned int pageIndex, bool isTurningForward ); - - /** - * Callback function of page turned signal - * @param[in] pageTurnView The handle of the PageTurnPortraitView or PageTurnLandscapeView - * @param[in] pageIndex The index of the page turned over - * @param[in] isTurningForward The turning direction, forwards or backwards - */ - void OnPageFinishedTurn( PageTurnView pageTurnView, unsigned int pageIndex, bool isTurningForward ); - - /** - * Callback function of page started pan signal - * - * @param[in] pageTurnView The calling page turn view - */ - void OnPageStartedPan( PageTurnView pageTurnView ); - - /** - * Callback function of page finished pan signal - * - * @param[in] pageTurnView The calling page turn view - */ - void OnPageFinishedPan( PageTurnView pageTurnView ); - -private: - - Application& mApplication; - Layer mButtonLayer; - - PageTurnView mPageTurnPortraitView; - PageTurnView mPageTurnLandscapeView; - PortraitPageFactory mPortraitPageFactory; - LandscapePageFactory mLandscapePageFactory; - - bool mIsPortrait; -}; - -PageTurnController::PageTurnController( Application &app ) -:mApplication( app ), - mIsPortrait( true ) -{ - // Connect to the Application's Init signal - app.InitSignal().Connect( this, &PageTurnController::OnInit ); -} - -PageTurnController::~PageTurnController() -{ -} - - -void PageTurnController::OnInit( Application& app ) -{ - // The Init signal is received once ( only ) during the Application lifetime - - Stage::GetCurrent().KeyEventSignal().Connect(this, &PageTurnController::OnKeyEvent); - - // Hide the indicator bar - app.GetWindow().ShowIndicator( Dali::Window::INVISIBLE ); - - Stage stage = Stage::GetCurrent(); - Vector2 stageSize = stage.GetSize(); - - mButtonLayer = Layer::New(); - mButtonLayer.SetAnchorPoint( Dali::AnchorPoint::CENTER ); - mButtonLayer.SetParentOrigin( Dali::ParentOrigin::CENTER ); - mButtonLayer.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); - Toolkit::PushButton button = Toolkit::PushButton::New(); - button.SetAnchorPoint( AnchorPoint::TOP_RIGHT ); - button.SetParentOrigin( ParentOrigin::TOP_RIGHT ); - button.SetProperty( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, CHANGE_IMAGE_ICON ); - button.SetProperty( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, CHANGE_IMAGE_ICON_SELECTED ); - button.SetLeaveRequired( true ); - button.SetScale(1.5f); - button.PressedSignal().Connect( this, &PageTurnController::OnButtonClicked ); - stage.Add( mButtonLayer ); - mButtonLayer.Add(button); - - Vector2 bookSize( stageSize.x > stageSize.y ? stageSize.y : stageSize.x, - stageSize.x > stageSize.y ? stageSize.x : stageSize.y ); - - mPageTurnPortraitView = PageTurnPortraitView::New( mPortraitPageFactory, bookSize ); - mPageTurnPortraitView.SetParentOrigin( ParentOrigin::CENTER ); - mPageTurnPortraitView.SetAnchorPoint( AnchorPoint::CENTER ); - mPageTurnPortraitView.SetProperty( PageTurnView::Property::SPINE_SHADOW, Vector2(70.f, 30.f) ); - mPageTurnPortraitView.PageTurnStartedSignal().Connect( this, &PageTurnController::OnPageStartedTurn ); - mPageTurnPortraitView.PageTurnFinishedSignal().Connect( this, &PageTurnController::OnPageFinishedTurn ); - mPageTurnPortraitView.PagePanStartedSignal().Connect( this, &PageTurnController::OnPageStartedPan ); - mPageTurnPortraitView.PagePanFinishedSignal().Connect( this, &PageTurnController::OnPageFinishedPan ); - - mPageTurnLandscapeView = PageTurnLandscapeView::New( mLandscapePageFactory, Vector2(bookSize.y*0.5f, bookSize.x) ); - mPageTurnLandscapeView.SetParentOrigin( ParentOrigin::CENTER ); - mPageTurnLandscapeView.SetAnchorPoint( AnchorPoint::CENTER ); - mPageTurnLandscapeView.PageTurnStartedSignal().Connect( this, &PageTurnController::OnPageStartedTurn ); - mPageTurnLandscapeView.PageTurnFinishedSignal().Connect( this, &PageTurnController::OnPageFinishedTurn ); - mPageTurnLandscapeView.PagePanStartedSignal().Connect( this, &PageTurnController::OnPageStartedPan ); - mPageTurnLandscapeView.PagePanFinishedSignal().Connect( this, &PageTurnController::OnPageFinishedPan ); - - if( stageSize.x > stageSize.y ) - { - stage.Add(mPageTurnLandscapeView); - mPageTurnPortraitView.SetOrientation(Degree(90.f), Vector3::ZAXIS); - mIsPortrait = false; - } - else - { - stage.Add(mPageTurnPortraitView); - mPageTurnLandscapeView.SetOrientation(Degree(90.f), Vector3::ZAXIS); - mIsPortrait = true; - } - - mButtonLayer.RaiseToTop(); -} - -bool PageTurnController::OnButtonClicked(Toolkit::Button button) -{ - if( mIsPortrait ) - { - mPageTurnPortraitView.Unparent(); - Stage::GetCurrent().Add( mPageTurnLandscapeView ); - int pageId = mPageTurnPortraitView.GetProperty( PageTurnView::Property::CURRENT_PAGE_ID ).Get(); - int currentPage = ceil( static_cast(pageId) / PAGE_NUMBER_CORRESPONDING_RATIO ); - mPageTurnLandscapeView.SetProperty(PageTurnView::Property::CURRENT_PAGE_ID, currentPage ); - } - else - { - mPageTurnLandscapeView.Unparent(); - Stage::GetCurrent().Add( mPageTurnPortraitView ); - int pageId = mPageTurnLandscapeView.GetProperty( PageTurnView::Property::CURRENT_PAGE_ID ).Get(); - int currentPage = floor(pageId * PAGE_NUMBER_CORRESPONDING_RATIO ); - mPageTurnPortraitView.SetProperty(PageTurnView::Property::CURRENT_PAGE_ID, currentPage ); - } - - mIsPortrait = !mIsPortrait; - mButtonLayer.RaiseToTop(); - return true; -} - -/** - * Main key event handler - */ -void PageTurnController::OnKeyEvent(const KeyEvent& event) -{ - if(event.state == KeyEvent::Down) - { - if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) - { - mApplication.Quit(); - } - } -} - -void PageTurnController::OnPageStartedTurn( PageTurnView pageTurnView, unsigned int pageIndex, bool isTurningForward ) -{ - std::cout<< ( ( pageTurnView == mPageTurnPortraitView ) ? " portrait: " : " Landscape: " ) - << " page " << pageIndex - << ( isTurningForward ? " is starting to turn forward" : " is starting to turn backward" ) - << std::endl; -} - -void PageTurnController::OnPageFinishedTurn( PageTurnView pageTurnView, unsigned int pageIndex, bool isTurningForward ) -{ - std::cout<< ( ( pageTurnView == mPageTurnPortraitView ) ? " portrait: " : " Landscape: " ) - << " page " << pageIndex - << ( isTurningForward ? " has finished turning forward" : " has finished turning backward" ) - << std::endl; -} - -void PageTurnController::OnPageStartedPan( PageTurnView pageTurnView ) -{ - std::cout<< "Starting to pan" << std::endl; -} - -void PageTurnController::OnPageFinishedPan( PageTurnView pageTurnView ) -{ - std::cout<< "Finished panning" << std::endl; -} - -// Entry point for applications -int DALI_EXPORT_API main( int argc, char **argv ) -{ - Application app = Application::New(&argc, &argv, DEMO_THEME_PATH); - PageTurnController test ( app ); - - app.MainLoop(); - - return 0; -} diff --git a/examples/super-blur-bloom/super-blur-bloom-example.cpp b/examples/super-blur-bloom/super-blur-bloom-example.cpp deleted file mode 100644 index d466e9f..0000000 --- a/examples/super-blur-bloom/super-blur-bloom-example.cpp +++ /dev/null @@ -1,309 +0,0 @@ -/* - * 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 -#include "shared/view.h" -#include "shared/utility.h" - -using namespace Dali; - -namespace -{ -const char * const TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" ); -const char * const TITLE_SUPER_BLUR( "Super Blur" ); -const char * const TITLE_BLOOM( "Bloom" ); -const char * const CHANGE_BACKGROUND_ICON( DEMO_IMAGE_DIR "icon-change.png" ); -const char * const CHANGE_BACKGROUND_ICON_SELECTED( DEMO_IMAGE_DIR "icon-change-selected.png" ); -const char * const CHANGE_BLUR_ICON( DEMO_IMAGE_DIR "icon-replace.png" ); -const char * const CHANGE_BLUR_ICON_SELECTED( DEMO_IMAGE_DIR "icon-replace-selected.png" ); - -const char* BACKGROUND_IMAGES[]= -{ - DEMO_IMAGE_DIR "background-1.jpg", - DEMO_IMAGE_DIR "background-2.jpg", - DEMO_IMAGE_DIR "background-3.jpg", - DEMO_IMAGE_DIR "background-4.jpg", - DEMO_IMAGE_DIR "background-5.jpg", - DEMO_IMAGE_DIR "background-magnifier.jpg", -}; -const unsigned int NUM_BACKGROUND_IMAGES( sizeof( BACKGROUND_IMAGES ) / sizeof( BACKGROUND_IMAGES[0] ) ); - -} - -class BlurExample : public ConnectionTracker -{ -public: - BlurExample(Application &app) - : mApp(app), - mImageIndex( 0 ), - mIsBlurring( false ) - { - // Connect to the Application's Init signal - app.InitSignal().Connect(this, &BlurExample::Create); - } - - ~BlurExample() - { - } -private: - // The Init signal is received once (only) during the Application lifetime - void Create(Application& app) - { - Stage stage = Stage::GetCurrent(); - Vector2 stageSize = stage.GetSize(); - - stage.KeyEventSignal().Connect(this, &BlurExample::OnKeyEvent); - - // Creates a default view with a default tool bar. - // The view is added to the stage. - Layer content = DemoHelper::CreateView( app, - mBackground, - mToolBar, - "", - TOOLBAR_IMAGE, - "" ); - - // Add a button to change background. (right of toolbar) - Toolkit::PushButton changeBackgroundButton = Toolkit::PushButton::New(); - changeBackgroundButton.SetProperty( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, CHANGE_BACKGROUND_ICON ); - changeBackgroundButton.SetProperty( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, CHANGE_BACKGROUND_ICON_SELECTED ); - - changeBackgroundButton.ClickedSignal().Connect( this, &BlurExample::OnChangeBackgroundIconClicked ); - mToolBar.AddControl( changeBackgroundButton, - DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, - Toolkit::Alignment::HorizontalRight, - DemoHelper::DEFAULT_MODE_SWITCH_PADDING ); - - // Add a button to change the blur view. (left of toolbar) - Toolkit::PushButton changeBlurButton = Toolkit::PushButton::New(); - changeBlurButton.SetProperty( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, CHANGE_BLUR_ICON ); - changeBlurButton.SetProperty( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, CHANGE_BLUR_ICON_SELECTED ); - - changeBlurButton.ClickedSignal().Connect( this, &BlurExample::OnChangeBlurIconClicked ); - mToolBar.AddControl( changeBlurButton, - DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, - Toolkit::Alignment::HorizontalLeft, - DemoHelper::DEFAULT_MODE_SWITCH_PADDING ); - - mSuperBlurView = Toolkit::SuperBlurView::New( 5 ); - mSuperBlurView.SetSize( stageSize ); - mSuperBlurView.SetParentOrigin( ParentOrigin::CENTER ); - mSuperBlurView.SetAnchorPoint( AnchorPoint::CENTER ); - mSuperBlurView.BlurFinishedSignal().Connect(this, &BlurExample::OnBlurFinished); - mCurrentImage = DemoHelper::LoadStageFillingImage( BACKGROUND_IMAGES[mImageIndex] ); - mSuperBlurView.SetImage( mCurrentImage ); - mBackground.Add( mSuperBlurView ); - mIsBlurring = true; - SetTitle( TITLE_SUPER_BLUR ); - - mBloomView = Toolkit::BloomView::New(); - mBloomView.SetParentOrigin(ParentOrigin::CENTER); - mBloomView.SetSize(stageSize); - mBloomActor = Toolkit::ImageView::New(mCurrentImage); - mBloomActor.SetParentOrigin( ParentOrigin::CENTER ); - mBloomView.Add( mBloomActor ); - - // Connect the callback to the touch signal on the background - mSuperBlurView.TouchSignal().Connect( this, &BlurExample::OnTouch ); - mBloomView.TouchSignal().Connect( this, &BlurExample::OnTouch ); - } - - // Callback function of the touch signal on the background - bool OnTouch(Dali::Actor actor, const Dali::TouchData& event) - { - switch( event.GetState( 0 ) ) - { - case PointState::DOWN: - { - if( mAnimation ) - { - mAnimation.Clear(); - } - - mAnimation = Animation::New( 2.f ); - if( mSuperBlurView.OnStage() ) - { - mAnimation.AnimateTo( Property( mSuperBlurView, mSuperBlurView.GetBlurStrengthPropertyIndex() ), 1.f ); - } - else - { - mAnimation.AnimateTo( Property( mBloomView, mBloomView.GetBloomIntensityPropertyIndex() ), 3.f ); - } - mAnimation.Play(); - break; - } - case PointState::UP: - case PointState::LEAVE: - case PointState::INTERRUPTED: - { - if( mAnimation ) - { - mAnimation.Clear(); - } - - mAnimation = Animation::New( 2.f ); - if( mSuperBlurView.OnStage() ) - { - mAnimation.AnimateTo( Property( mSuperBlurView, mSuperBlurView.GetBlurStrengthPropertyIndex() ), 0.f ); - } - else - { - mAnimation.AnimateTo( Property( mBloomView, mBloomView.GetBloomIntensityPropertyIndex() ), 0.f ); - } - mAnimation.Play(); - break; - } - case PointState::MOTION: - case PointState::STATIONARY: - { - break; - } - } - return true; - } - - /** - * Main key event handler - */ - void OnKeyEvent(const KeyEvent& event) - { - if(event.state == KeyEvent::Down) - { - if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) - { - mApp.Quit(); - } - } - } - - bool OnChangeBackgroundIconClicked( Toolkit::Button button ) - { - if( mIsBlurring ) - { - return true; - } - - if( mAnimation ) - { - mAnimation.Clear(); - } - - mImageIndex = (mImageIndex+1u)%NUM_BACKGROUND_IMAGES; - mCurrentImage = DemoHelper::LoadStageFillingImage( BACKGROUND_IMAGES[mImageIndex] ); - - if( mSuperBlurView.OnStage() ) - { - mIsBlurring = true; - - mSuperBlurView.SetBlurStrength( 0.f ); - mSuperBlurView.SetImage( mCurrentImage ); - } - else - { - mBloomView.SetProperty( mBloomView.GetBloomIntensityPropertyIndex(), 0.f ); - mBloomActor.SetImage( mCurrentImage ); - } - - return true; - } - - bool OnChangeBlurIconClicked( Toolkit::Button button ) - { - if( mSuperBlurView.OnStage() ) - { - SetTitle( TITLE_BLOOM ); - mBackground.Remove( mSuperBlurView ); - - mBloomActor.SetImage( mCurrentImage ); - mBloomView.SetProperty( mBloomView.GetBloomIntensityPropertyIndex(), 0.f ); - mBackground.Add( mBloomView ); - mBloomView.Activate(); - - } - else - { - SetTitle( TITLE_SUPER_BLUR ); - mBackground.Remove( mBloomView ); - mBloomView.Deactivate(); - - mBackground.Add( mSuperBlurView ); - mSuperBlurView.SetBlurStrength( 0.f ); - mSuperBlurView.SetImage( mCurrentImage ); - mIsBlurring = true; - } - - return true; - } - - void OnBlurFinished( Toolkit::SuperBlurView blurView ) - { - mIsBlurring = false; - } - - /** - * Sets/Updates the title of the View - * @param[in] title The new title for the view. - */ - void SetTitle(const std::string& title) - { - if(!mTitleActor) - { - mTitleActor = DemoHelper::CreateToolBarLabel( title ); - // Add title to the tool bar. - mToolBar.AddControl( mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Toolkit::Alignment::HorizontalCenter ); - } - - mTitleActor.SetProperty( Toolkit::TextLabel::Property::TEXT, title ); - } - -private: - - Application& mApp; - Toolkit::ToolBar mToolBar; - Toolkit::TextLabel mTitleActor; ///< The Toolbar's Title. - Toolkit::Control mBackground; - Toolkit::SuperBlurView mSuperBlurView; - Toolkit::BloomView mBloomView; - Animation mAnimation; - Toolkit::ImageView mBloomActor; - Image mCurrentImage; - unsigned int mImageIndex; - bool mIsBlurring; -}; - -/*****************************************************************************/ - -static void -RunTest(Application& app) -{ - BlurExample theApp(app); - app.MainLoop(); -} - -/*****************************************************************************/ - -int DALI_EXPORT_API main(int argc, char **argv) -{ - Application app = Application::New(&argc, &argv, DEMO_THEME_PATH); - - RunTest(app); - - return 0; -} diff --git a/packaging/com.samsung.dali-demo.spec b/packaging/com.samsung.dali-demo.spec index 2e94c29..88d02d1 100755 --- a/packaging/com.samsung.dali-demo.spec +++ b/packaging/com.samsung.dali-demo.spec @@ -2,7 +2,7 @@ Name: com.samsung.dali-demo Summary: The OpenGLES Canvas Core Demo -Version: 1.2.26 +Version: 1.2.27 Release: 1 Group: System/Libraries License: Apache-2.0 @@ -22,7 +22,7 @@ BuildRequires: pkgconfig(dali-core) BuildRequires: pkgconfig(dali-toolkit) #need libtzplatform-config for directory if tizen version is 3.x -%if "%{tizen_version_major}" == "3" +%if 0%{?tizen_version_major} >= 3 BuildRequires: pkgconfig(libtzplatform-config) %endif @@ -98,6 +98,7 @@ cp -f %{_builddir}/%{name}-%{version}/%{name}.xml %{buildroot}%{dali_xml_file_di mkdir -p %{buildroot}%{dali_icon_dir} mv %{buildroot}/%{dali_app_res_dir}/images/%{name}.png %{buildroot}%{dali_icon_dir} +mv %{buildroot}/%{dali_app_res_dir}/images/dali-examples.png %{buildroot}%{dali_icon_dir} %if 0%{?enable_dali_smack_rules} && !%{with wayland} mkdir -p %{buildroot}%{smack_rule_dir} @@ -134,6 +135,7 @@ exit 0 %endif %defattr(-,root,root,-) %{dali_app_exe_dir}/dali-demo +%{dali_app_exe_dir}/dali-examples %{dali_app_exe_dir}/*.example %{dali_app_exe_dir}/dali-builder %{dali_app_res_dir}/images/* diff --git a/resources/images/dali-examples.png b/resources/images/dali-examples.png new file mode 100644 index 0000000..349b175 --- /dev/null +++ b/resources/images/dali-examples.png diff --git a/resources/images/demo-tile-texture-focused.9.png b/resources/images/demo-tile-texture-focused.9.png new file mode 100644 index 0000000..3236edd --- /dev/null +++ b/resources/images/demo-tile-texture-focused.9.png diff --git a/resources/images/item-background-focused.9.png b/resources/images/item-background-focused.9.png new file mode 100644 index 0000000..38735d9 --- /dev/null +++ b/resources/images/item-background-focused.9.png diff --git a/resources/po/as.po b/resources/po/as.po index a384ac3..cc27807 100755 --- a/resources/po/as.po +++ b/resources/po/as.po @@ -79,12 +79,6 @@ msgstr "মেশ অসংযোগ" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "3D অনুগামী" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "মেটাবল মহা-বিস্ফোৰণবাদ" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "মেটাবল প্ৰতিসৰিত" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "অস্পষ্ট" @@ -97,9 +91,6 @@ msgstr "অইন অনুবিম্ব" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "অকণমান আপোচ কৰ্" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "পৃষ্ঠা লেআউট" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "পোপা মেনু" @@ -130,9 +121,6 @@ msgstr "তাৰকা" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "শৈলী" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "অস্পষ্টকৈ অপুষ্পক" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "টেক্সটারেদ মেশ" diff --git a/resources/po/de.po b/resources/po/de.po index ed6593d..ece6e56 100755 --- a/resources/po/de.po +++ b/resources/po/de.po @@ -79,12 +79,6 @@ msgstr "Mesh Sortierung" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "3D-Modelle" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "Metaball Explosion" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "Metaball Brechung" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "Bewegungsunschärfe" @@ -97,9 +91,6 @@ msgstr "Nativen Bild" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "Größe Verhandlung" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "Seite wechseln" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "Popup-Menü" @@ -130,9 +121,6 @@ msgstr "Funkeln" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "Styling" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "Unschärfe und blühen" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "Strukturiertem Mesh" diff --git a/resources/po/en_GB.po b/resources/po/en_GB.po index 933be8b..5054071 100755 --- a/resources/po/en_GB.po +++ b/resources/po/en_GB.po @@ -79,12 +79,6 @@ msgstr "Mesh Sorting" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "Mesh Visual" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "Metaball Explosion" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "Metaball Refraction" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "Motion Blur" @@ -97,9 +91,6 @@ msgstr "Native Image Source" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "Negotiate Size" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "Page Turn View" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "Popup" @@ -130,9 +121,6 @@ msgstr "Sparkle" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "Styling" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "Super Blur and Bloom" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "Mesh Texture" diff --git a/resources/po/en_US.po b/resources/po/en_US.po index c5a288d..28ed480 100755 --- a/resources/po/en_US.po +++ b/resources/po/en_US.po @@ -79,12 +79,6 @@ msgstr "Mesh Sorting" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "Mesh Visual" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "Metaball Explosion" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "Metaball Refraction" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "Motion Blur" @@ -97,9 +91,6 @@ msgstr "Native Image Source" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "Negotiate Size" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "Page Turn View" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "Popup" @@ -130,9 +121,6 @@ msgstr "Sparkle" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "Styling" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "Super Blur and Bloom" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "Mesh Texture" diff --git a/resources/po/es.po b/resources/po/es.po index 2ea1dee..6426481 100755 --- a/resources/po/es.po +++ b/resources/po/es.po @@ -79,12 +79,6 @@ msgstr "Ordenacion de geometrias" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "Gemeotria 3D" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "Explosion de metabolas" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "Refraccion de metabolas" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "Desenfoque de movimiento" @@ -97,9 +91,6 @@ msgstr "Fuente de imagenes nativas" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "Negociacion de tamaño" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "Vista de páginas" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "Popup" @@ -130,9 +121,6 @@ msgstr "Brillar" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "Estilo" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "Efecto blur y bloom" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "Geometria con texturas" diff --git a/resources/po/fi.po b/resources/po/fi.po index 476f975..57f5600 100755 --- a/resources/po/fi.po +++ b/resources/po/fi.po @@ -79,12 +79,6 @@ msgstr "Polygoniverkon Lajittelu" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "Polygoniverkkovisuaali" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "Metaball Räjähdys" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "Metaball Valon Taittumisella" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "Liikesumennus" @@ -97,9 +91,6 @@ msgstr "Natiivi Kuvalähde" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "Kokoneuvottelu" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "Sivunkääntönäkymä" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "Ponnahdusikkuna" @@ -130,9 +121,6 @@ msgstr "Kimalteluefekti" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "UI Tyyli" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "Erikoissumennus ja Hehku efekti" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "Teksturoitu Polygoniverkko" diff --git a/resources/po/ko.po b/resources/po/ko.po index 659b301..0b375c6 100755 --- a/resources/po/ko.po +++ b/resources/po/ko.po @@ -79,12 +79,6 @@ msgstr "메쉬 분류" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "메쉬 비주얼" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "메타볼 폭발" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "메타볼 굴절" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "모션 블러" @@ -97,9 +91,6 @@ msgstr "네이티브 이미지 소스" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "사이즈 조절" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "책장 넘기기" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "팝업" @@ -130,9 +121,6 @@ msgstr "불꽃" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "스타일링" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "블러링 이펙트" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "텍스쳐 메쉬" diff --git a/resources/po/ml.po b/resources/po/ml.po index 7d37255..414c7bd 100755 --- a/resources/po/ml.po +++ b/resources/po/ml.po @@ -79,12 +79,6 @@ msgstr "തരംതിരിക്കലിനായി mesh" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "3D മോഡലിങ്" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "മെറ്റാ പന്ത് സ്ഫോടനം" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "മെറ്റാ പന്ത് അപവർത്തനം" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "അവ്യക്തമാക്കല്" @@ -97,9 +91,6 @@ msgstr "നേറ്റീവ് ചിത്രം" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "വലുപ്പം കൂടിയാലോചന" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "പേജ് ലേഔട്ട്" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "പോപപ്പ് മെനുവിൽ" @@ -130,9 +121,6 @@ msgstr "നക്ഷത്ര" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "ശൈലി" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "മങ്ങൽ പൂക്കൽ" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "ടെക്സ്ചർ mesh" diff --git a/resources/po/ur.po b/resources/po/ur.po index cb07dd1..d7b6cc6 100755 --- a/resources/po/ur.po +++ b/resources/po/ur.po @@ -79,12 +79,6 @@ msgstr "میش کی چھنٹائی" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "3D میش" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "میٹابال دھماکہ" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "میٹابال اپورتن" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "دھندلانے کی حرکت" @@ -97,9 +91,6 @@ msgstr "نیٹو تصویر" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "سائز مذاکرات" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "کتاب" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "پاپ اپ" @@ -130,9 +121,6 @@ msgstr "سٹار" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "سٹائل" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "دھندلاپن اور بلوم" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "ٹیکسچرد میش" diff --git a/resources/po/zn_CH.po b/resources/po/zn_CH.po index 68087e2..55e7377 100755 --- a/resources/po/zn_CH.po +++ b/resources/po/zn_CH.po @@ -79,12 +79,6 @@ msgstr "网格排序" msgid "DALI_DEMO_STR_TITLE_MESH_VISUAL" msgstr "3D模型" -msgid "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION" -msgstr "元球爆炸" - -msgid "DALI_DEMO_STR_TITLE_METABALL_REFRAC" -msgstr "元球折射" - msgid "DALI_DEMO_STR_TITLE_MOTION_BLUR" msgstr "动作模糊" @@ -97,9 +91,6 @@ msgstr "本地图像" msgid "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE" msgstr "尺寸协商" -msgid "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW" -msgstr "翻页" - msgid "DALI_DEMO_STR_TITLE_POPUP" msgstr "弹窗" @@ -130,9 +121,6 @@ msgstr "火花" msgid "DALI_DEMO_STR_TITLE_STYLING" msgstr "样式" -msgid "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM" -msgstr "模糊及泛光" - msgid "DALI_DEMO_STR_TITLE_TEXTURED_MESH" msgstr "纹理网格" diff --git a/resources/scripts/super-blur-view.json b/resources/scripts/super-blur-view.json index 969a46d..b380a40 100644 --- a/resources/scripts/super-blur-view.json +++ b/resources/scripts/super-blur-view.json @@ -66,6 +66,7 @@ "position": [0, 0, 0], "size": [200, 100, 0], "labelText": "Blur", + "siblingOrder": 1, "signals": [{ "name": "pressed", "action": "play", diff --git a/resources/style/demo-theme.json.in b/resources/style/demo-theme.json.in index 95b562a..d0caa87 100644 --- a/resources/style/demo-theme.json.in +++ b/resources/style/demo-theme.json.in @@ -30,6 +30,108 @@ "tailRightImage":"{APPLICATION_RESOURCE_PATH}/images/popup-tail-right.png" }, + "DemoTile": + { + "states": + { + "NORMAL": + { + "color":[0.4, 0.6, 0.9, 0.6], + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/demo-tile-texture.9.png", +// TILE_BACKGROUND_ALPHA +// This shader takes a texture. +// An alpha discard is performed. +// The shader uses the tiles position within the scroll-view page and the scroll-views rotation position to create a parallax effect. + "shader": + { + "fragmentShader":[ + " varying mediump vec2 vTexCoord;", + " uniform lowp vec4 uColor;", + " uniform sampler2D sTexture;", + " uniform mediump vec3 uCustomPosition;", + "", + " void main()", + " {", + " if( texture2D( sTexture, vTexCoord ).a <= 0.0001 )", + " {", + " discard;", + " }", + "", + " mediump vec2 wrapTexCoord = vec2( ( vTexCoord.x / 4.0 ) + ( uCustomPosition.x / 4.0 ) + ( uCustomPosition.z / 2.0 ), vTexCoord.y / 4.0 );", + " mediump vec4 color = texture2D( sTexture, wrapTexCoord );", + " mediump float positionWeight = ( uCustomPosition.y + 0.3 ) * color.r * 2.0;", + "", + " gl_FragColor = vec4( positionWeight, positionWeight, positionWeight, 0.9 ) * uColor + vec4( uColor.xyz, 0.0 );", + " }" + ] + } + } + } + }, + "FOCUSED": + { + "color":[0.3, 0.5, 0.8, 0.5], + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/demo-tile-texture-focused.9.png", +// TILE_BACKGROUND_ALPHA +// This shader takes a texture. +// An alpha discard is performed. +// The shader uses the tiles position within the scroll-view page and the scroll-views rotation position to create a parallax effect. + "shader": + { + "fragmentShader":[ + " varying mediump vec2 vTexCoord;", + " uniform lowp vec4 uColor;", + " uniform sampler2D sTexture;", + " uniform mediump vec3 uCustomPosition;", + "", + " void main()", + " {", + " if( texture2D( sTexture, vTexCoord ).a <= 0.0001 )", + " {", + " discard;", + " }", + "", + " mediump vec2 wrapTexCoord = vec2( ( vTexCoord.x / 4.0 ) + ( uCustomPosition.x / 4.0 ) + ( uCustomPosition.z / 2.0 ), vTexCoord.y / 4.0 );", + " mediump vec4 color = texture2D( sTexture, wrapTexCoord );", + " mediump float positionWeight = ( uCustomPosition.y + 0.3 ) * color.r * 2.0;", + "", + " gl_FragColor = vec4( positionWeight, positionWeight, positionWeight, 0.9 ) * uColor + vec4( uColor.xyz, 0.0 );", + " }" + ] + } + } + } + } + } + }, + "FocusActor": + { + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/tile-focus.9.png" + } + } + }, + "DemoTileBorder": + { + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/item-background.9.png" // TILE_BACKGROUND + } + } + }, "TextLabelRosemary": { "fontFamily":"Rosemary" diff --git a/resources/style/mobile/demo-theme.json.in b/resources/style/mobile/demo-theme.json.in index 251ad34..893bfac 100644 --- a/resources/style/mobile/demo-theme.json.in +++ b/resources/style/mobile/demo-theme.json.in @@ -26,6 +26,109 @@ "tailLeftImage":"{APPLICATION_RESOURCE_PATH}/images/popup-tail-left.png", "tailRightImage":"{APPLICATION_RESOURCE_PATH}/images/popup-tail-right.png" }, + + "DemoTile": + { + "states": + { + "NORMAL": + { + "color":[0.4, 0.6, 0.9, 0.6], + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/demo-tile-texture.9.png", +// TILE_BACKGROUND_ALPHA +// This shader takes a texture. +// An alpha discard is performed. +// The shader uses the tiles position within the scroll-view page and the scroll-views rotation position to create a parallax effect. + "shader": + { + "fragmentShader":[ + " varying mediump vec2 vTexCoord;", + " uniform lowp vec4 uColor;", + " uniform sampler2D sTexture;", + " uniform mediump vec3 uCustomPosition;", + "", + " void main()", + " {", + " if( texture2D( sTexture, vTexCoord ).a <= 0.0001 )", + " {", + " discard;", + " }", + "", + " mediump vec2 wrapTexCoord = vec2( ( vTexCoord.x / 4.0 ) + ( uCustomPosition.x / 4.0 ) + ( uCustomPosition.z / 2.0 ), vTexCoord.y / 4.0 );", + " mediump vec4 color = texture2D( sTexture, wrapTexCoord );", + " mediump float positionWeight = ( uCustomPosition.y + 0.3 ) * color.r * 2.0;", + "", + " gl_FragColor = vec4( positionWeight, positionWeight, positionWeight, 0.9 ) * uColor + vec4( uColor.xyz, 0.0 );", + " }" + ] + } + } + } + }, + "FOCUSED": + { + "color":[0.3, 0.5, 0.8, 0.5], + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/demo-tile-texture-focused.9.png", +// TILE_BACKGROUND_ALPHA +// This shader takes a texture. +// An alpha discard is performed. +// The shader uses the tiles position within the scroll-view page and the scroll-views rotation position to create a parallax effect. + "shader": + { + "fragmentShader":[ + " varying mediump vec2 vTexCoord;", + " uniform lowp vec4 uColor;", + " uniform sampler2D sTexture;", + " uniform mediump vec3 uCustomPosition;", + "", + " void main()", + " {", + " if( texture2D( sTexture, vTexCoord ).a <= 0.0001 )", + " {", + " discard;", + " }", + "", + " mediump vec2 wrapTexCoord = vec2( ( vTexCoord.x / 4.0 ) + ( uCustomPosition.x / 4.0 ) + ( uCustomPosition.z / 2.0 ), vTexCoord.y / 4.0 );", + " mediump vec4 color = texture2D( sTexture, wrapTexCoord );", + " mediump float positionWeight = ( uCustomPosition.y + 0.3 ) * color.r * 2.0;", + "", + " gl_FragColor = vec4( positionWeight, positionWeight, positionWeight, 0.9 ) * uColor + vec4( uColor.xyz, 0.0 );", + " }" + ] + } + } + } + } + } + }, + "FocusActor": + { + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/tile-focus.9.png" + } + } + }, + "DemoTileBorder": + { + "visuals": + { + "image": + { + "url":"{APPLICATION_RESOURCE_PATH}/images/item-background.9.png" // TILE_BACKGROUND + } + } + }, "TextLabelRosemary": { "fontFamily":"Rosemary" diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h index 47f8f4f..6c6d171 100644 --- a/shared/dali-demo-strings.h +++ b/shared/dali-demo-strings.h @@ -60,13 +60,10 @@ extern "C" #define DALI_DEMO_STR_TITLE_MESH_MORPH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_MESH_MORPH") #define DALI_DEMO_STR_TITLE_MESH_SORTING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_MESH_SORTING") #define DALI_DEMO_STR_TITLE_MESH_VISUAL dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_MESH_VISUAL") -#define DALI_DEMO_STR_TITLE_METABALL_EXPLOSION dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_METABALL_EXPLOSION") -#define DALI_DEMO_STR_TITLE_METABALL_REFRAC dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_METABALL_REFRAC") #define DALI_DEMO_STR_TITLE_MOTION_BLUR dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_MOTION_BLUR") #define DALI_DEMO_STR_TITLE_MOTION_STRETCH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_MOTION_STRETCH") #define DALI_DEMO_STR_TITLE_NATIVE_IMAGE_SOURCE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_NATIVE_IMAGE_SOURCE") #define DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE") -#define DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW") #define DALI_DEMO_STR_TITLE_POPUP dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_POPUP") #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES") #define DALI_DEMO_STR_TITLE_PROGRESS_BAR dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PROGRESS_BAR") @@ -76,7 +73,6 @@ extern "C" #define DALI_DEMO_STR_TITLE_SCROLL_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCROLL_VIEW") #define DALI_DEMO_STR_TITLE_SPARKLE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SPARKLE") #define DALI_DEMO_STR_TITLE_STYLING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_STYLING") -#define DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM") #define DALI_DEMO_STR_TITLE_TEXTURED_MESH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXTURED_MESH") #define DALI_DEMO_STR_TITLE_TEXT_EDITOR dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_EDITOR") #define DALI_DEMO_STR_TITLE_TEXT_FIELD dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_FIELD") @@ -117,13 +113,10 @@ extern "C" #define DALI_DEMO_STR_TITLE_MESH_MORPH "Mesh Morph" #define DALI_DEMO_STR_TITLE_MESH_SORTING "Mesh Sorting" #define DALI_DEMO_STR_TITLE_MESH_VISUAL "Mesh Visual" -#define DALI_DEMO_STR_TITLE_METABALL_EXPLOSION "Metaball Explosion" -#define DALI_DEMO_STR_TITLE_METABALL_REFRAC "Metaball Refractions" #define DALI_DEMO_STR_TITLE_MOTION_BLUR "Motion Blur" #define DALI_DEMO_STR_TITLE_MOTION_STRETCH "Motion Stretch" #define DALI_DEMO_STR_TITLE_NATIVE_IMAGE_SOURCE "Native Image Source" #define DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE "Negotiate Size" -#define DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW "Page Turn View" #define DALI_DEMO_STR_TITLE_POPUP "Popup" #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES "Primitive Shapes" #define DALI_DEMO_STR_TITLE_PROGRESS_BAR "Progress Bar" @@ -133,7 +126,6 @@ extern "C" #define DALI_DEMO_STR_TITLE_SCROLL_VIEW "Scroll View" #define DALI_DEMO_STR_TITLE_SPARKLE "Sparkle" #define DALI_DEMO_STR_TITLE_STYLING "Styling" -#define DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM "Super Blur and Bloom" #define DALI_DEMO_STR_TITLE_TEXTURED_MESH "Mesh Texture" #define DALI_DEMO_STR_TITLE_TEXT_EDITOR "Text Editor" #define DALI_DEMO_STR_TITLE_TEXT_FIELD "Text Field" diff --git a/demo/dali-table-view.cpp b/shared/dali-table-view.cpp index 6791aaa..cae9fb1 100644 --- a/demo/dali-table-view.cpp +++ b/shared/dali-table-view.cpp @@ -41,9 +41,6 @@ namespace { const std::string LOGO_PATH( DEMO_IMAGE_DIR "Logo-for-demo.png" ); -const std::string TILE_BACKGROUND(DEMO_IMAGE_DIR "item-background.9.png"); -const std::string TILE_BACKGROUND_ALPHA( DEMO_IMAGE_DIR "demo-tile-texture.9.png" ); -const std::string TILE_FOCUS( DEMO_IMAGE_DIR "tile-focus.9.png" ); // Keyboard focus effect constants. const float KEYBOARD_FOCUS_ANIMATION_DURATION = 1.0f; ///< The total duration of the keyboard focus animation @@ -71,7 +68,7 @@ const float STENCIL_RELATIVE_SIZE = 1.0f; const float EFFECT_SNAP_DURATION = 0.66f; ///< Scroll Snap Duration for Effects const float EFFECT_FLICK_DURATION = 0.5f; ///< Scroll Flick Duration for Effects const Vector3 ANGLE_CUBE_PAGE_ROTATE(Math::PI * 0.5f, Math::PI * 0.5f, 0.0f); -const Vector4 TILE_COLOR( 0.4f, 0.6f, 0.9f, 0.6f ); + const Vector4 BUBBLE_COLOR[] = { @@ -103,29 +100,6 @@ const Vector4 BACKGROUND_COLOR( 0.3569f, 0.5451f, 0.7294f, 1.0f ); const float BUBBLE_MIN_Z = -1.0; const float BUBBLE_MAX_Z = 0.0f; -// This shader takes a texture. -// An alpha discard is performed. -// The shader uses the tiles position within the scroll-view page and the scroll-views rotation position to create a parallax effect. -const char* FRAGMENT_SHADER_TEXTURED = DALI_COMPOSE_SHADER( - varying mediump vec2 vTexCoord; - uniform lowp vec4 uColor; - uniform sampler2D sTexture; - uniform mediump vec3 uCustomPosition; - - void main() - { - if( texture2D( sTexture, vTexCoord ).a <= 0.0001 ) - { - discard; - } - - mediump vec2 wrapTexCoord = vec2( ( vTexCoord.x / 4.0 ) + ( uCustomPosition.x / 4.0 ) + ( uCustomPosition.z / 2.0 ), vTexCoord.y / 4.0 ); - mediump vec4 color = texture2D( sTexture, wrapTexCoord ); - mediump float positionWeight = ( uCustomPosition.y + 0.3 ) * color.r * 2.0; - - gl_FragColor = vec4( positionWeight, positionWeight, positionWeight, 0.9 ) * uColor + vec4( uColor.xyz, 0.0 ); - } -); /** * Creates the background image @@ -347,7 +321,8 @@ void DaliTableView::CreateFocusEffect() // Loop to create both actors for the focus highlight effect. for( unsigned int i = 0; i < FOCUS_ANIMATION_ACTOR_NUMBER; ++i ) { - mFocusEffect[i].actor = ImageView::New( TILE_FOCUS ); + mFocusEffect[i].actor = ImageView::New(); + mFocusEffect[i].actor.SetStyleName( "FocusActor" ); mFocusEffect[i].actor.SetParentOrigin( ParentOrigin::CENTER ); mFocusEffect[i].actor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); mFocusEffect[i].actor.SetInheritScale( false ); @@ -502,7 +477,9 @@ void DaliTableView::Rotate( unsigned int degrees ) Actor DaliTableView::CreateTile( const std::string& name, const std::string& title, const Dali::Vector3& sizeMultiplier, Vector2& position ) { - Actor focusableTile = Actor::New(); + Toolkit::ImageView focusableTile = ImageView::New(); + + focusableTile.SetStyleName( "DemoTile" ); focusableTile.SetParentOrigin( ParentOrigin::CENTER ); focusableTile.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); focusableTile.SetSizeModeFactor( sizeMultiplier ); @@ -511,42 +488,26 @@ Actor DaliTableView::CreateTile( const std::string& name, const std::string& tit // Set the tile to be keyboard focusable focusableTile.SetKeyboardFocusable( true ); - Toolkit::ImageView tileContent = ImageView::New(); - tileContent.SetParentOrigin( ParentOrigin::CENTER ); - tileContent.SetAnchorPoint( AnchorPoint::CENTER ); - tileContent.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); - - // Register a property with the ImageView. This allows us to inject the scroll-view position into the shader. + // Register a property with the ImageView. This allows us to inject the scroll-view position into the shader. Property::Value value = Vector3( 0.0f, 0.0f, 0.0f ); - Property::Index propertyIndex = tileContent.RegisterProperty( "uCustomPosition", value ); - - // Add a shader to the image (details in shader source). - Property::Map customShader; - customShader[ Visual::Shader::Property::FRAGMENT_SHADER ] = FRAGMENT_SHADER_TEXTURED; - - // Set the Image URL and the custom shader - Property::Map imageMap; - imageMap.Add( ImageVisual::Property::URL, TILE_BACKGROUND_ALPHA ); - imageMap.Add( Visual::Property::SHADER, customShader ); - tileContent.SetProperty( Toolkit::ImageView::Property::IMAGE, imageMap ); - - tileContent.SetColor( TILE_COLOR ); + Property::Index propertyIndex = focusableTile.RegisterProperty( "uCustomPosition", value ); // We create a constraint to perform a precalculation on the scroll-view X offset // and pass it to the shader uniform, along with the tile's position. - Constraint shaderPosition = Constraint::New < Vector3 > ( tileContent, propertyIndex, TileShaderPositionConstraint( mPageWidth, position.x ) ); + Constraint shaderPosition = Constraint::New < Vector3 > ( focusableTile, propertyIndex, TileShaderPositionConstraint( mPageWidth, position.x ) ); shaderPosition.AddSource( Source( mScrollView, ScrollView::Property::SCROLL_POSITION ) ); shaderPosition.SetRemoveAction( Constraint::Discard ); shaderPosition.Apply(); - focusableTile.Add( tileContent ); + //focusableTile.Add( tileContent ); // Create an ImageView for the 9-patch border around the tile. - ImageView borderImage = ImageView::New( TILE_BACKGROUND ); + ImageView borderImage = ImageView::New(); + borderImage.SetStyleName("DemoTileBorder"); borderImage.SetAnchorPoint( AnchorPoint::CENTER ); borderImage.SetParentOrigin( ParentOrigin::CENTER ); borderImage.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); borderImage.SetOpacity( 0.8f ); - tileContent.Add( borderImage ); + focusableTile.Add( borderImage ); TextLabel label = TextLabel::New(); label.SetAnchorPoint( AnchorPoint::CENTER ); diff --git a/demo/dali-table-view.h b/shared/dali-table-view.h index 099636c..8c0cf61 100644 --- a/demo/dali-table-view.h +++ b/shared/dali-table-view.h @@ -1,5 +1,5 @@ -#ifndef DALI_DEMO_H -#define DALI_DEMO_H +#ifndef DALI_DEMO_TABLEVIEW_H +#define DALI_DEMO_TABLEVIEW_H /* * Copyright (c) 2017 Samsung Electronics Co., Ltd. @@ -375,4 +375,4 @@ private: }; -#endif // DALI_DEMO_H +#endif // DALI_DEMO_TABLEVIEW_H