X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fgaussian-blur-view%2Fgaussian-blur-view-impl.cpp;h=e3e54364761d28f7d4af49eff2312b418f181d19;hb=59314022f6789147a47a8b098433e211b6185625;hp=e7e14eb8efcbb0207f5d1223eeedc24f251ad22b;hpb=42492df08f8a079da70931292aebb56e1252641d;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp index e7e14eb..e3e5436 100644 --- a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp +++ b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * 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. @@ -24,14 +24,13 @@ #include #include #include -#include #include #include #include #include // INTERNAL INCLUDES -#include +#include // TODO: // pixel format / size - set from JSON @@ -118,47 +117,50 @@ const char* const GAUSSIAN_BLUR_FRAGMENT_SOURCE = GaussianBlurView::GaussianBlurView() - : Control( ControlBehaviour( DISABLE_SIZE_NEGOTIATION ) ) - , mNumSamples(GAUSSIAN_BLUR_VIEW_DEFAULT_NUM_SAMPLES) - , mBlurBellCurveWidth( 0.001f ) - , mPixelFormat(GAUSSIAN_BLUR_VIEW_DEFAULT_RENDER_TARGET_PIXEL_FORMAT) - , mDownsampleWidthScale(GAUSSIAN_BLUR_VIEW_DEFAULT_DOWNSAMPLE_WIDTH_SCALE) - , mDownsampleHeightScale(GAUSSIAN_BLUR_VIEW_DEFAULT_DOWNSAMPLE_HEIGHT_SCALE) - , mDownsampledWidth( 0.0f ) - , mDownsampledHeight( 0.0f ) - , mBlurUserImage( false ) - , mRenderOnce( false ) - , mBackgroundColor( Color::BLACK ) - , mTargetSize(Vector2::ZERO) - , mLastSize(Vector2::ZERO) - , mChildrenRoot(Actor::New()) - , mInternalRoot(Actor::New()) - , mBlurStrengthPropertyIndex(Property::INVALID_INDEX) - , mActivated( false ) +: Control( ControlBehaviour( DISABLE_SIZE_NEGOTIATION | DISABLE_STYLE_CHANGE_SIGNALS ) ), + mNumSamples(GAUSSIAN_BLUR_VIEW_DEFAULT_NUM_SAMPLES), + mBlurBellCurveWidth( 0.001f ), + mPixelFormat(GAUSSIAN_BLUR_VIEW_DEFAULT_RENDER_TARGET_PIXEL_FORMAT), + mDownsampleWidthScale(GAUSSIAN_BLUR_VIEW_DEFAULT_DOWNSAMPLE_WIDTH_SCALE), + mDownsampleHeightScale(GAUSSIAN_BLUR_VIEW_DEFAULT_DOWNSAMPLE_HEIGHT_SCALE), + mDownsampledWidth( 0.0f ), + mDownsampledHeight( 0.0f ), + mBlurUserImage( false ), + mRenderOnce( false ), + mBackgroundColor( Color::BLACK ), + mTargetSize(Vector2::ZERO), + mLastSize(Vector2::ZERO), + mChildrenRoot(Actor::New()), + mInternalRoot(Actor::New()), + mBlurStrengthPropertyIndex(Property::INVALID_INDEX), + mActivated( false ) { SetBlurBellCurveWidth(GAUSSIAN_BLUR_VIEW_DEFAULT_BLUR_BELL_CURVE_WIDTH); } -GaussianBlurView::GaussianBlurView( const unsigned int numSamples, const float blurBellCurveWidth, const Pixel::Format renderTargetPixelFormat, - const float downsampleWidthScale, const float downsampleHeightScale, +GaussianBlurView::GaussianBlurView( const unsigned int numSamples, + const float blurBellCurveWidth, + const Pixel::Format renderTargetPixelFormat, + const float downsampleWidthScale, + const float downsampleHeightScale, bool blurUserImage) - : Control( ControlBehaviour( DISABLE_SIZE_NEGOTIATION ) ) - , mNumSamples(numSamples) - , mBlurBellCurveWidth( 0.001f ) - , mPixelFormat(renderTargetPixelFormat) - , mDownsampleWidthScale(downsampleWidthScale) - , mDownsampleHeightScale(downsampleHeightScale) - , mDownsampledWidth( 0.0f ) - , mDownsampledHeight( 0.0f ) - , mBlurUserImage( blurUserImage ) - , mRenderOnce( false ) - , mBackgroundColor( Color::BLACK ) - , mTargetSize(Vector2::ZERO) - , mLastSize(Vector2::ZERO) - , mChildrenRoot(Actor::New()) - , mInternalRoot(Actor::New()) - , mBlurStrengthPropertyIndex(Property::INVALID_INDEX) - , mActivated( false ) +: Control( ControlBehaviour( DISABLE_SIZE_NEGOTIATION | DISABLE_STYLE_CHANGE_SIGNALS ) ), + mNumSamples(numSamples), + mBlurBellCurveWidth( 0.001f ), + mPixelFormat(renderTargetPixelFormat), + mDownsampleWidthScale(downsampleWidthScale), + mDownsampleHeightScale(downsampleHeightScale), + mDownsampledWidth( 0.0f ), + mDownsampledHeight( 0.0f ), + mBlurUserImage( blurUserImage ), + mRenderOnce( false ), + mBackgroundColor( Color::BLACK ), + mTargetSize(Vector2::ZERO), + mLastSize(Vector2::ZERO), + mChildrenRoot(Actor::New()), + mInternalRoot(Actor::New()), + mBlurStrengthPropertyIndex(Property::INVALID_INDEX), + mActivated( false ) { SetBlurBellCurveWidth(blurBellCurveWidth); } @@ -218,6 +220,7 @@ void GaussianBlurView::SetUserImageAndOutputRenderTarget(Image inputImage, Frame mUserInputImage = inputImage; mImageViewHorizBlur.SetImage( mUserInputImage ); + mImageViewHorizBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, mCustomShader ); mUserOutputRenderTarget = outputRenderTarget; } @@ -259,11 +262,9 @@ void GaussianBlurView::OnInitialize() std::ostringstream horizFragmentShaderStringStream; horizFragmentShaderStringStream << "#define NUM_SAMPLES " << mNumSamples << "\n"; horizFragmentShaderStringStream << GAUSSIAN_BLUR_FRAGMENT_SOURCE; - Property::Map customShader; - customShader[ "fragmentShader" ] = horizFragmentShaderStringStream.str(); - Property::Map rendererMap; - rendererMap.Insert( "rendererType", "image" ); - rendererMap.Insert( "shader", customShader ); + Property::Map source; + source[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = horizFragmentShaderStringStream.str(); + mCustomShader[ Toolkit::Visual::Property::SHADER ] = source; ////////////////////////////////////////////////////// // Create actors @@ -271,12 +272,10 @@ void GaussianBlurView::OnInitialize() // Create an image view for performing a horizontal blur on the texture mImageViewHorizBlur = Toolkit::ImageView::New(); mImageViewHorizBlur.SetParentOrigin(ParentOrigin::CENTER); - mImageViewHorizBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, rendererMap ); // Create an image view for performing a vertical blur on the texture mImageViewVertBlur = Toolkit::ImageView::New(); mImageViewVertBlur.SetParentOrigin(ParentOrigin::CENTER); - mImageViewVertBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, rendererMap ); // Register a property that the user can control to fade the blur in / out via the GaussianBlurView object Actor self = Self(); @@ -331,8 +330,6 @@ void GaussianBlurView::OnInitialize() void GaussianBlurView::OnSizeSet(const Vector3& targetSize) { - Control::OnSizeSet( targetSize ); - mTargetSize = Vector2(targetSize); mChildrenRoot.SetSize(targetSize); @@ -357,16 +354,18 @@ void GaussianBlurView::OnSizeSet(const Vector3& targetSize) Deactivate(); Activate(); } + + Control::OnSizeSet( targetSize ); } void GaussianBlurView::OnChildAdd( Actor& child ) { - Control::OnChildAdd( child ); - if( child != mChildrenRoot && child != mInternalRoot) { mChildrenRoot.Add( child ); } + + Control::OnChildAdd( child ); } void GaussianBlurView::OnChildRemove( Actor& child ) @@ -414,6 +413,7 @@ void GaussianBlurView::AllocateResources() // Set image view for performing a horizontal blur on the texture mImageViewHorizBlur.SetImage( mRenderTargetForRenderingChildren ); + mImageViewHorizBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, mCustomShader ); // Create offscreen buffer for vert blur pass mRenderTarget1 = FrameBufferImage::New( mDownsampledWidth, mDownsampledHeight, mPixelFormat ); @@ -433,6 +433,7 @@ void GaussianBlurView::AllocateResources() // size needs to match render target mImageViewVertBlur.SetImage( mRenderTarget2 ); + mImageViewVertBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, mCustomShader ); mImageViewVertBlur.SetSize(mDownsampledWidth, mDownsampledHeight); // set gaussian blur up for new sized render targets