X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Fstyling%2Fimage-channel-control-impl.cpp;h=fc20650b4125d9eca34377dfe6858f5053c8cfbe;hb=1b19fd140ff139b5854a1a62447faf31b175d8f6;hp=dc133d1b306f1b45bb51e2705446f321eba0f8ac;hpb=11f7a3260303d7e609694abc4d51513979c613ed;p=platform%2Fcore%2Fuifw%2Fdali-demo.git diff --git a/examples/styling/image-channel-control-impl.cpp b/examples/styling/image-channel-control-impl.cpp index dc133d1..fc20650 100644 --- a/examples/styling/image-channel-control-impl.cpp +++ b/examples/styling/image-channel-control-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -16,51 +16,62 @@ #include "image-channel-control-impl.h" #include -#include +#include #include +#include + using namespace Dali; // Needed for macros namespace Demo { namespace Internal { - namespace { +// clang-format off const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( varying mediump vec2 vTexCoord;\n uniform sampler2D sTexture;\n uniform mediump vec4 uColor;\n + uniform mediump vec3 mixColor;\n uniform mediump vec3 uChannels;\n \n void main()\n {\n - gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor * vec4(uChannels, 1.0) ;\n + gl_FragColor = texture2D( sTexture, vTexCoord ) * vec4(mixColor,1.0) * uColor * vec4(uChannels, 1.0) ;\n }\n ); +// clang-format on Dali::BaseHandle Create() { return Demo::ImageChannelControl::New(); } -DALI_TYPE_REGISTRATION_BEGIN( ImageChannelControl, Dali::Toolkit::Control, Create ); +DALI_TYPE_REGISTRATION_BEGIN(ImageChannelControl, Dali::Toolkit::Control, Create); -DALI_PROPERTY_REGISTRATION( Demo, ImageChannelControl, "url", STRING, RESOURCE_URL ); -DALI_PROPERTY_REGISTRATION( Demo, ImageChannelControl, "redChannel", FLOAT, RED_CHANNEL ); -DALI_PROPERTY_REGISTRATION( Demo, ImageChannelControl, "greenChannel", FLOAT, GREEN_CHANNEL ); -DALI_PROPERTY_REGISTRATION( Demo, ImageChannelControl, "blueChannel", FLOAT, BLUE_CHANNEL ); +DALI_PROPERTY_REGISTRATION(Demo, ImageChannelControl, "url", STRING, RESOURCE_URL); +DALI_PROPERTY_REGISTRATION(Demo, ImageChannelControl, "redChannel", FLOAT, RED_CHANNEL); +DALI_PROPERTY_REGISTRATION(Demo, ImageChannelControl, "greenChannel", FLOAT, GREEN_CHANNEL); +DALI_PROPERTY_REGISTRATION(Demo, ImageChannelControl, "blueChannel", FLOAT, BLUE_CHANNEL); +DALI_PROPERTY_REGISTRATION(Demo, ImageChannelControl, "visibility", BOOLEAN, VISIBILITY); +DALI_PROPERTY_REGISTRATION(Demo, ImageChannelControl, "enableVisibilityTransition", ARRAY, ENABLE_VISIBILITY_TRANSITION); +DALI_PROPERTY_REGISTRATION(Demo, ImageChannelControl, "disableVisibilityTransition", ARRAY, DISABLE_VISIBILITY_TRANSITION); + +DALI_PROPERTY_REGISTRATION(Demo, ImageChannelControl, "imageVisual", MAP, IMAGE_VISUAL); DALI_TYPE_REGISTRATION_END(); } // anonymous namespace - Internal::ImageChannelControl::ImageChannelControl() -: Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ), - mChannels( 1.0f, 1.0f, 1.0f ) +: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT)), + mChannels(1.0f, 1.0f, 1.0f), + mChannelIndex(Property::INVALID_INDEX), + mVisibility(true), + mTargetVisibility(true) { } @@ -70,13 +81,13 @@ Internal::ImageChannelControl::~ImageChannelControl() Demo::ImageChannelControl Internal::ImageChannelControl::New() { - IntrusivePtr impl = new Internal::ImageChannelControl(); - Demo::ImageChannelControl handle = Demo::ImageChannelControl( *impl ); + IntrusivePtr impl = new Internal::ImageChannelControl(); + Demo::ImageChannelControl handle = Demo::ImageChannelControl(*impl); impl->Initialize(); return handle; } -void ImageChannelControl::SetImage( const std::string& url ) +void ImageChannelControl::SetImage(const std::string& url) { mUrl = url; @@ -85,57 +96,102 @@ void ImageChannelControl::SetImage( const std::string& url ) Property::Map properties; Property::Map shader; shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = FRAGMENT_SHADER; - properties[Dali::Toolkit::Visual::Property::TYPE] = Dali::Toolkit::Visual::IMAGE; - properties[Dali::Toolkit::Visual::Property::SHADER]=shader; - properties[Dali::Toolkit::ImageVisual::Property::URL] = url; + properties[Dali::Toolkit::Visual::Property::TYPE] = Dali::Toolkit::Visual::IMAGE; + properties[Dali::Toolkit::Visual::Property::SHADER] = shader; + properties[Dali::Toolkit::ImageVisual::Property::URL] = url; - Dali::Toolkit::InitializeVisual( self, mVisual, properties ); + mVisual = Toolkit::VisualFactory::Get().CreateVisual(properties); + Toolkit::DevelControl::RegisterVisual(*this, Demo::ImageChannelControl::Property::IMAGE_VISUAL, mVisual); + mVisual.SetName("imageVisual"); RelayoutRequest(); } -void ImageChannelControl::OnInitialize() +void ImageChannelControl::SetVisibility(bool visibility) { - Actor self = Self(); - mChannelIndex = self.RegisterProperty( "uChannels", Vector3(1.0f, 1.0f, 1.0f) ); -} + printf("ImageChannelControl %s: SetVisibility( %s )\n", Self().GetProperty(Dali::Actor::Property::NAME).c_str(), visibility ? "T" : "F"); -void ImageChannelControl::OnStageConnection( int depth ) -{ - Control::OnStageConnection( depth ); + if(mAnimation) + { + mAnimation.Stop(); + mAnimation.FinishedSignal().Disconnect(this, &ImageChannelControl::OnStateChangeAnimationFinished); + OnStateChangeAnimationFinished(mAnimation); + } - if( mVisual ) + if(mVisibility != visibility) { - CustomActor self = Self(); - mVisual.SetOnStage( self ); + if(mVisibility) + { + if(mDisableVisibilityTransition.Count() > 0) + { + mAnimation = Toolkit::DevelControl::CreateTransition(*this, mDisableVisibilityTransition); + } + } + else + { + if(mEnableVisibilityTransition.Count() > 0) + { + mAnimation = Toolkit::DevelControl::CreateTransition(*this, mEnableVisibilityTransition); + } + } } -} -void ImageChannelControl::OnStageDisconnection() -{ - if( mVisual ) + if(mAnimation) + { + mAnimation.FinishedSignal().Connect(this, &ImageChannelControl::OnStateChangeAnimationFinished); + mAnimation.Play(); + mTargetVisibility = visibility; + } + else { - CustomActor self = Self(); - mVisual.SetOffStage( self ); + mVisibility = visibility; } +} - Control::OnStageDisconnection(); +void ImageChannelControl::OnStateChangeAnimationFinished(Animation& src) +{ + mVisibility = mTargetVisibility; } -void ImageChannelControl::OnSizeSet( const Vector3& targetSize ) +void ImageChannelControl::OnInitialize() { - Control::OnSizeSet( targetSize ); + Actor self = Self(); + mChannelIndex = self.RegisterProperty("uChannels", Vector3(1.0f, 1.0f, 1.0f)); +} - if( mVisual ) +void ImageChannelControl::OnSceneConnection(int depth) +{ + Control::OnSceneConnection(depth); +} + +void ImageChannelControl::OnSceneDisconnection() +{ + Control::OnSceneDisconnection(); +} + +void ImageChannelControl::OnSizeSet(const Vector3& targetSize) +{ + Control::OnSizeSet(targetSize); + + if(mVisual) { - Vector2 size( targetSize ); - mVisual.SetSize( size ); + Vector2 size(targetSize); + Property::Map transformMap; + transformMap + .Add(Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f)) + .Add(Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f)) + .Add(Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::CENTER) + .Add(Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::CENTER) + .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE)) + .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE)); + + mVisual.SetTransformAndSize(transformMap, size); } } Vector3 ImageChannelControl::GetNaturalSize() { - if( mVisual ) + if(mVisual) { Vector2 naturalSize; mVisual.GetNaturalSize(naturalSize); @@ -144,54 +200,103 @@ Vector3 ImageChannelControl::GetNaturalSize() return Vector3::ZERO; } +void ImageChannelControl::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) +{ + // Chain up. + Control::OnStyleChange(styleManager, change); +} /////////////////////////////////////////////////////////// // // Properties // -void ImageChannelControl::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ) +void ImageChannelControl::SetProperty(BaseObject* object, Property::Index index, const Property::Value& value) { - Demo::ImageChannelControl imageChannelControl = Demo::ImageChannelControl::DownCast( Dali::BaseHandle( object ) ); + Demo::ImageChannelControl imageChannelControl = Demo::ImageChannelControl::DownCast(Dali::BaseHandle(object)); - if ( imageChannelControl ) + if(imageChannelControl) { - ImageChannelControl& impl = GetImpl( imageChannelControl ); - Actor self = impl.Self(); - switch ( index ) + ImageChannelControl& impl = GetImpl(imageChannelControl); + Actor self = impl.Self(); + switch(index) { + case Demo::ImageChannelControl::Property::RESOURCE_URL: + { + impl.SetImage(value.Get()); + break; + } + case Demo::ImageChannelControl::Property::IMAGE_VISUAL: + { + Property::Map* map = value.GetMap(); + if(map) + { + impl.mVisual = Toolkit::VisualFactory::Get().CreateVisual(*map); + Toolkit::DevelControl::RegisterVisual(impl, Demo::ImageChannelControl::Property::IMAGE_VISUAL, impl.mVisual); + } + break; + } + case Demo::ImageChannelControl::Property::VISIBILITY: + { + impl.SetVisibility(value.Get()); + break; + } + case Demo::ImageChannelControl::Property::ENABLE_VISIBILITY_TRANSITION: + { + if(value.GetType() == Property::ARRAY) + { + impl.mEnableVisibilityTransition = Toolkit::TransitionData::New(*value.GetArray()); + } + else if(value.GetType() == Property::MAP) + { + impl.mEnableVisibilityTransition = Toolkit::TransitionData::New(*value.GetMap()); + } + break; + } + case Demo::ImageChannelControl::Property::DISABLE_VISIBILITY_TRANSITION: + { + if(value.GetType() == Property::ARRAY) + { + impl.mDisableVisibilityTransition = Toolkit::TransitionData::New(*value.GetArray()); + } + else if(value.GetType() == Property::MAP) + { + impl.mDisableVisibilityTransition = Toolkit::TransitionData::New(*value.GetMap()); + } + break; + } case Demo::ImageChannelControl::Property::RED_CHANNEL: { impl.mChannels[0] = value.Get(); - self.SetProperty( impl.mChannelIndex, impl.mChannels ); + self.SetProperty(impl.mChannelIndex, impl.mChannels); break; } case Demo::ImageChannelControl::Property::GREEN_CHANNEL: { impl.mChannels[1] = value.Get(); - self.SetProperty( impl.mChannelIndex, impl.mChannels ); + self.SetProperty(impl.mChannelIndex, impl.mChannels); break; } case Demo::ImageChannelControl::Property::BLUE_CHANNEL: { impl.mChannels[2] = value.Get(); - self.SetProperty( impl.mChannelIndex, impl.mChannels ); + self.SetProperty(impl.mChannelIndex, impl.mChannels); break; } } } } -Property::Value ImageChannelControl::GetProperty( BaseObject* object, Property::Index propertyIndex ) +Property::Value ImageChannelControl::GetProperty(BaseObject* object, Property::Index propertyIndex) { Property::Value value; - Demo::ImageChannelControl imageChannelControl = Demo::ImageChannelControl::DownCast( Dali::BaseHandle( object ) ); + Demo::ImageChannelControl imageChannelControl = Demo::ImageChannelControl::DownCast(Dali::BaseHandle(object)); - if ( imageChannelControl ) + if(imageChannelControl) { - ImageChannelControl& impl = GetImpl( imageChannelControl ); - switch ( propertyIndex ) + ImageChannelControl& impl = GetImpl(imageChannelControl); + switch(propertyIndex) { case Demo::ImageChannelControl::Property::RED_CHANNEL: { @@ -208,11 +313,18 @@ Property::Value ImageChannelControl::GetProperty( BaseObject* object, Property:: value = impl.mChannels[2]; break; } + case Demo::ImageChannelControl::Property::VISIBILITY: + { + value = impl.mVisibility; + break; + } + default: + break; } } return value; } -} // Internal -} // Demo +} // namespace Internal +} // namespace Demo