X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-gradient%2Fanimated-gradient-visual.cpp;h=9b4bc8c4f2ccc54d42834770f14569e7b76de2a5;hb=70510385d88cfbd5c232117d8436ca74c523e172;hp=f20286c7eaa4bee0f0f4b69796abb2ae61f00e4f;hpb=0ad89551c7744c17d82292c05863c45e97308110;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/animated-gradient/animated-gradient-visual.cpp b/dali-toolkit/internal/visuals/animated-gradient/animated-gradient-visual.cpp index f20286c..9b4bc8c 100755 --- a/dali-toolkit/internal/visuals/animated-gradient/animated-gradient-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-gradient/animated-gradient-visual.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 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. @@ -19,11 +19,13 @@ //INTERNAL INCLUDES #include +#include #include #include #include #include #include +#include namespace Dali { @@ -36,37 +38,6 @@ namespace Internal namespace { -// non-animated property -const char* const GRADIENT_TYPE_NAME("gradientType"); -const char* const UNIT_TYPE_NAME("unitType"); -const char* const SPREAD_TYPE_NAME("spreadType"); -// animated property -const char* const START_POSITION_NAME("startPosition"); -const char* const START_COLOR_NAME("startColor"); -const char* const END_POSITION_NAME("endPosition"); -const char* const END_COLOR_NAME("endColor"); -const char* const ROTATE_CENTER_NAME("rotateCenter"); -const char* const ROTATE_AMOUNT_NAME("rotateAmount"); -const char* const OFFSET_NAME("offset"); -// animation parameter property -const char* const START_VALUE_NAME("startValue"); -const char* const TARGET_VALUE_NAME("targetValue"); -const char* const DIRECTION_TYPE_NAME("directionType"); -const char* const DURATION_NAME("duration"); -const char* const DELAY_NAME("delay"); -const char* const REPEAT_NAME("repeat"); -const char* const REPEAT_DELAY_NAME("repeatDelay"); -const char* const MOTION_TYPE_NAME("motionType"); -const char* const EASING_TYPE_NAME("easingType"); -// common shader property -const char* const UNIFORM_START_POINT_NAME("start_point"); -const char* const UNIFORM_START_COLOR_NAME("start_color"); -const char* const UNIFORM_END_POINT_NAME("end_point"); -const char* const UNIFORM_END_COLOR_NAME("end_color"); -const char* const UNIFORM_ROTATE_CENTER_NAME("rotate_center"); -const char* const UNIFORM_ROTATE_ANGLE_NAME("rotate_angle"); -const char* const UNIFORM_OFFSET_NAME("gradient_offset"); - DALI_ENUM_TO_STRING_TABLE_BEGIN( GRADIENT_TYPE ) DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::DevelAnimatedGradientVisual::GradientType, LINEAR ) DALI_ENUM_TO_STRING_WITH_SCOPE( Toolkit::DevelAnimatedGradientVisual::GradientType, RADIAL ) @@ -123,89 +94,6 @@ const Toolkit::DevelAnimatedGradientVisual::AnimationParameter::DirectionType::T const Toolkit::DevelAnimatedGradientVisual::AnimationParameter::MotionType::Type DEFAULT_ANIMATION_MOTION_TYPE = Toolkit::DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP; const Toolkit::DevelAnimatedGradientVisual::AnimationParameter::EasingType::Type DEFAULT_ANIMATION_EASING_TYPE = Toolkit::DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR; -const char* const BASIC_VERTEX_SHADER = DALI_COMPOSE_SHADER( - attribute mediump vec2 aPosition; - uniform mediump mat4 uMvpMatrix; - uniform mediump vec3 uSize; - - uniform mediump vec2 start_point; - uniform mediump vec2 end_point; - uniform mediump vec2 rotate_center; - uniform mediump float rotate_angle; - - varying mediump vec2 vTexCoord; - varying mediump vec2 vStart; - varying mediump vec2 vEnd; - - vec2 rotate(vec2 x, vec2 c, float a) - { - vec2 d = x - c; - vec2 r = vec2(d.x * cos(a) - d.y * sin(a), d.x * sin(a) + d.y * cos(a)); - -\n #ifdef UNIT_TYPE_BOUNDING_BOX \n return r + c; \n #endif \n /* UnitType::OBJECT_BOUNDING_BOX */ -\n #ifdef UNIT_TYPE_USER \n return (r + c) / uSize.x; \n #endif \n /* UnitType::USER_SPACE */ - } - - //Visual size and offset - uniform mediump vec2 offset; - uniform mediump vec2 size; - uniform mediump vec4 offsetSizeMode; - uniform mediump vec2 origin; - uniform mediump vec2 anchorPoint; - - vec4 ComputeVertexPosition() - { - vec2 visualSize = mix( uSize.xy*size, size, offsetSizeMode.zw ); - vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy ); - return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 ); - } - - void main() - { - vStart = rotate( start_point, rotate_center, rotate_angle ); - vEnd = rotate( end_point, rotate_center, rotate_angle ); - gl_Position = uMvpMatrix * ComputeVertexPosition(); - -\n #ifdef UNIT_TYPE_BOUNDING_BOX \n vTexCoord = vec2(aPosition.x, -aPosition.y); \n #endif \n /* UnitType::OBJECT_BOUNDING_BOX */ -\n #ifdef UNIT_TYPE_USER \n vTexCoord = vec2(aPosition.x, -aPosition.y * uSize.y / uSize.x); \n #endif \n /* UnitType::USER_SPACE */ - } -); - -const char* const BASIC_FRAGMENT_SHADER = DALI_COMPOSE_SHADER( - precision mediump float; - - uniform mediump vec4 start_color; - uniform mediump vec4 end_color; - uniform mediump float gradient_offset; - - varying mediump vec2 vTexCoord; - varying mediump vec2 vStart; - varying mediump vec2 vEnd; - - float get_position(vec2 x, vec2 s, vec2 e) - { - vec2 df = e - s; - vec2 dx = x - s; - -\n #ifdef GRADIENT_TYPE_LINEAR \n return dot(dx,df)/dot(df,df); \n #endif \n /* GradientType::LINEAR */ -\n #ifdef GRADIENT_TYPE_RADIAL \n return sqrt(dot(dx,dx)/dot(df,df)); \n #endif \n /* GradientType::RADIAL */ - } - float recalculate(float r) - { -\n #ifdef SPREAD_TYPE_REFLECT \n return 1.0 - abs(mod(r, 2.0) - 1.0); \n #endif \n /* SpreadType::REFLECT */ -\n #ifdef SPREAD_TYPE_REPEAT \n return fract(r); \n #endif \n /* SpreadType::REPEAT */ -\n #ifdef SPREAD_TYPE_CLAMP \n return clamp(r, 0.0, 1.0); \n #endif \n /* SpreadType::CLAMP */ - } - - void main() - { - float r = get_position( vTexCoord, vStart, vEnd ); - r = recalculate( r + gradient_offset ); - vec4 color = mix( start_color, end_color, r ); - gl_FragColor = color; - } -); - Property::Value GetStartValue( const Property::Map& map, Property::Index index, const char* const name ) { // Get start value of animation parameter @@ -245,7 +133,8 @@ AnimatedGradientVisualPtr AnimatedGradientVisual::New( VisualFactoryCache& facto return animatedGradientVisualPtr; } -AnimatedGradientVisual::AnimatedGradientVisual( VisualFactoryCache& factoryCache ) : Visual::Base( factoryCache ) +AnimatedGradientVisual::AnimatedGradientVisual( VisualFactoryCache& factoryCache ) +: Visual::Base( factoryCache, Visual::FittingMode::FILL, static_cast( Toolkit::DevelVisual::ANIMATED_GRADIENT ) ) { SetupDefaultValue(); } @@ -583,7 +472,7 @@ void AnimatedGradientVisual::OnSetTransform() } } -void AnimatedGradientVisual::DoSetOnStage( Actor& actor ) +void AnimatedGradientVisual::DoSetOnScene( Actor& actor ) { InitializeRenderer(); actor.AddRenderer( mImpl->mRenderer ); @@ -593,7 +482,7 @@ void AnimatedGradientVisual::DoSetOnStage( Actor& actor ) ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } -void AnimatedGradientVisual::DoSetOffStage( Actor& actor ) +void AnimatedGradientVisual::DoSetOffScene( Actor& actor ) { DALI_ASSERT_DEBUG( (bool)mImpl->mRenderer && "There should always be a renderer whilst on stage"); @@ -766,10 +655,10 @@ Shader AnimatedGradientVisual::CreateShader() std::string frag; vert = "#define " + tagUnit + "\n" - + BASIC_VERTEX_SHADER; + + SHADER_ANIMATED_GRADIENT_VISUAL_SHADER_VERT.data(); frag = "#define " + tagGrad + "\n" + "#define " + tagSpread + "\n" - + BASIC_FRAGMENT_SHADER; + + SHADER_ANIMATED_GRADIENT_VISUAL_SHADER_FRAG.data(); shader = Shader::New( vert, frag ); return shader;