From 645b6c807d2923eebfeff62cdfedae1e499e0c7f Mon Sep 17 00:00:00 2001 From: kevinzak Date: Tue, 2 Aug 2016 15:04:55 -0400 Subject: [PATCH] First pass on view animation helper class and sample --- cinderblock.xml | 3 + .../ViewAnimationsSample/include/Resources.h | 7 + .../resources/cinder_app_icon.ico | Bin 0 -> 44737 bytes .../src/ViewAnimationsSampleApp.cpp | 63 +++++ .../ViewAnimationsSample/vc2013/Resources.rc | 3 + .../vc2013/ViewAnimationsSample.sln | 20 ++ .../vc2013/ViewAnimationsSample.vcxproj | 159 ++++++++++++ .../ViewAnimationsSample.vcxproj.filters | 229 ++++++++++++++++++ src/utils/ViewAnimations.cpp | 41 ++++ src/utils/ViewAnimations.h | 27 +++ 10 files changed, 552 insertions(+) create mode 100644 samples/ViewAnimationsSample/include/Resources.h create mode 100644 samples/ViewAnimationsSample/resources/cinder_app_icon.ico create mode 100644 samples/ViewAnimationsSample/src/ViewAnimationsSampleApp.cpp create mode 100644 samples/ViewAnimationsSample/vc2013/Resources.rc create mode 100644 samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.sln create mode 100644 samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.vcxproj create mode 100644 samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.vcxproj.filters create mode 100644 src/utils/ViewAnimations.cpp create mode 100644 src/utils/ViewAnimations.h diff --git a/cinderblock.xml b/cinderblock.xml index 25591ca..71f6be1 100644 --- a/cinderblock.xml +++ b/cinderblock.xml @@ -18,6 +18,9 @@ src/debug/*.h src/debug/*.cpp + + src/utils/*.h + src/utils/*.cpp src diff --git a/samples/ViewAnimationsSample/include/Resources.h b/samples/ViewAnimationsSample/include/Resources.h new file mode 100644 index 0000000..d0e5c9f --- /dev/null +++ b/samples/ViewAnimationsSample/include/Resources.h @@ -0,0 +1,7 @@ +#pragma once +#include "cinder/CinderResources.h" + +//#define RES_MY_RES CINDER_RESOURCE( ../resources/, image_name.png, 128, IMAGE ) + + + diff --git a/samples/ViewAnimationsSample/resources/cinder_app_icon.ico b/samples/ViewAnimationsSample/resources/cinder_app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b35fb854d8023fb19903bba6708abe35347776c8 GIT binary patch literal 44737 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 nkosetSize(vec2(10, 10)); + testView->setPosition(vec2(5, 5)); + testView->setBackgroundColor(Color(1, 0, 0)); + mRootView->addChild(testView); +} + +void ViewAnimationsSampleApp::prepareSettings(ci::app::App::Settings* settings) { + BaseApp::prepareSettings(settings); + SettingsManager::getInstance()->mDebugFullscreen = false; + SettingsManager::getInstance()->mDebugWindowSize = vec2(200, 200); +} + +void ViewAnimationsSampleApp::mouseDown( MouseEvent event ) +{ + //ViewAnimations::fadeOut(testView, 0.5f); + testView->getTimeline()->apply(&testView->getAlpha(), 0.0f, 2.0f, EaseInExpo()); +} + +void ViewAnimationsSampleApp::mouseUp(MouseEvent event) +{ + ViewAnimations::fadeIn(testView, 0.5f); +} + +void ViewAnimationsSampleApp::update() +{ + BaseApp::update(); +} + +void ViewAnimationsSampleApp::draw() +{ + BaseApp::draw(); +} + +CINDER_APP( ViewAnimationsSampleApp, RendererGl ) diff --git a/samples/ViewAnimationsSample/vc2013/Resources.rc b/samples/ViewAnimationsSample/vc2013/Resources.rc new file mode 100644 index 0000000..282469b --- /dev/null +++ b/samples/ViewAnimationsSample/vc2013/Resources.rc @@ -0,0 +1,3 @@ +#include "../include/Resources.h" + +1 ICON "..\\resources\\cinder_app_icon.ico" diff --git a/samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.sln b/samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.sln new file mode 100644 index 0000000..66634c2 --- /dev/null +++ b/samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ViewAnimationsSample", "ViewAnimationsSample.vcxproj", "{C4E27AC9-684D-40D2-A1AA-691A9949BAF9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C4E27AC9-684D-40D2-A1AA-691A9949BAF9}.Debug|x64.ActiveCfg = Debug|x64 + {C4E27AC9-684D-40D2-A1AA-691A9949BAF9}.Debug|x64.Build.0 = Debug|x64 + {C4E27AC9-684D-40D2-A1AA-691A9949BAF9}.Release|x64.ActiveCfg = Release|x64 + {C4E27AC9-684D-40D2-A1AA-691A9949BAF9}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.vcxproj b/samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.vcxproj new file mode 100644 index 0000000..f0251e5 --- /dev/null +++ b/samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.vcxproj @@ -0,0 +1,159 @@ + + + + Debug + x64 + + + Release + x64 + + + + {C4E27AC9-684D-40D2-A1AA-691A9949BAF9} + ViewAnimationsSample + Win32Proj + + + + Application + false + v120 + Unicode + true + + + Application + true + v120 + Unicode + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + false + + + + Disabled + ..\include;"..\..\..\..\..\include";..\..\..\..\Cinder-BluecadetText\src;..\..\..\..\Cinder-BluecadetTouch\src;..\..\..\..\Cinder-BluecadetUtils\src;..\..\..\src;..\..\..\..\OSC\src;..\..\..\..\TUIO\src + WIN32;_WIN32_WINNT=0x0601;_WINDOWS;NOMINMAX;_DEBUG;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + Level3 + ProgramDatabase + true + + + "..\..\..\..\..\include";..\include + + + cinder-$(PlatformToolset)_d.lib;OpenGL32.lib;%(AdditionalDependencies) + "..\..\..\..\..\lib\msw\$(PlatformTarget)" + true + Windows + false + + LIBCMT;LIBCPMT + + + + + ..\include;"..\..\..\..\..\include";..\..\..\..\Cinder-BluecadetText\src;..\..\..\..\Cinder-BluecadetTouch\src;..\..\..\..\Cinder-BluecadetUtils\src;..\..\..\src;..\..\..\..\OSC\src;..\..\..\..\TUIO\src + WIN32;_WIN32_WINNT=0x0601;_WINDOWS;NOMINMAX;NDEBUG;%(PreprocessorDefinitions) + MultiThreaded + + Level3 + ProgramDatabase + true + + + true + + + "..\..\..\..\..\include";..\include + + + cinder-$(PlatformToolset).lib;OpenGL32.lib;%(AdditionalDependencies) + "..\..\..\..\..\lib\msw\$(PlatformTarget)" + false + true + Windows + true + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.vcxproj.filters b/samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.vcxproj.filters new file mode 100644 index 0000000..a9b42e7 --- /dev/null +++ b/samples/ViewAnimationsSample/vc2013/ViewAnimationsSample.vcxproj.filters @@ -0,0 +1,229 @@ + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {D37EAD5B-8C32-449E-B7AD-CE13726F44B4} + + + {00E985B6-B58D-4B3B-B63A-81A60F340846} + + + {F470D199-CD3D-472C-AF2B-34A29BA3CD2B} + + + {C7D0847E-52E0-44C5-946C-13E98345CB6D} + + + {69D1067F-0ABF-4AF9-8F81-40CAC0F123BA} + + + {D1FD2650-888A-45AC-989B-DE9918A42E34} + + + {5FCD7B82-F465-4219-96C3-797844F88293} + + + {4D0CF86A-58C3-4306-AB1A-316105C9AC07} + + + {44FBEF01-7D91-4EC3-8163-8274DCD2E89D} + + + {AB43C5F3-DE90-4266-9C7B-D6E3219414B9} + + + {919EA609-F7F1-4B6C-8942-54CBBB38DAF0} + + + {9030EC0A-6B6B-4222-A2FB-9AE26E946108} + + + {E39B6AF9-BD86-4ACD-9E02-171BAB2ADBBA} + + + {3AA6667F-06D6-4194-985C-B45191432385} + + + {4EF151AC-6030-4745-9615-468003479BFD} + + + {EEB8EF8E-1CD7-4703-A447-943BB94EC95C} + + + + + Source Files + + + Source Files + + + Header Files + + + Blocks\BluecadetText\src + + + Blocks\BluecadetText\src + + + Blocks\BluecadetText\src + + + Blocks\BluecadetText\src + + + Blocks\BluecadetText\src + + + Blocks\BluecadetText\src + + + Blocks\BluecadetText\src + + + Blocks\BluecadetText\src + + + Blocks\BluecadetText\src + + + Blocks\BluecadetTouch\src + + + Blocks\BluecadetTouch\src + + + Blocks\BluecadetTouch\src + + + Blocks\BluecadetTouch\src\drivers + + + Blocks\BluecadetTouch\src\drivers + + + Blocks\BluecadetTouch\src\drivers + + + Blocks\BluecadetTouch\src\drivers + + + Blocks\BluecadetTouch\src\drivers + + + Blocks\BluecadetTouch\src\drivers + + + Blocks\BluecadetTouch\src\drivers + + + Blocks\BluecadetTouch\src\drivers + + + Blocks\BluecadetUtils\src + + + Blocks\BluecadetUtils\src + + + Blocks\BluecadetUtils\src + + + Blocks\BluecadetUtils\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src + + + Blocks\BluecadetViews\src\debug + + + Blocks\BluecadetViews\src\debug + + + Blocks\BluecadetViews\src\utils + + + Blocks\BluecadetViews\src\utils + + + Blocks\OSC\src + + + Blocks\OSC\src + + + Blocks\TUIO\src + + + Blocks\TUIO\src + + + + + Header Files + + + + + Resource Files + + + diff --git a/src/utils/ViewAnimations.cpp b/src/utils/ViewAnimations.cpp new file mode 100644 index 0000000..e2a7e91 --- /dev/null +++ b/src/utils/ViewAnimations.cpp @@ -0,0 +1,41 @@ +#include "ViewAnimations.h" + +using namespace ci; +using namespace ci::app; +using namespace std; + +namespace bluecadet { + namespace views { + + ViewAnimations::ViewAnimations() + { + } + + ViewAnimations::~ViewAnimations() { + } + + ci::Tween::Options ViewAnimations::fadeIn(BaseViewRef view, const float duration, const float delay, ci::EaseFn ease) + { + return view->getTimeline()->apply(&view->getAlpha(), 1.0f, duration, ease); + } + + ci::Tween::Options ViewAnimations::fadeOut(BaseViewRef view, const float duration, const float delay, ci::EaseFn ease) + { + return view->getTimeline()->apply(&view->getAlpha(), 0.0f, duration, ease); + } + + ci::Tween::Options ViewAnimations::fadeTo(BaseViewRef view, const float toVal, const float duration, const float delay, ci::EaseFn ease) + { + return view->getTimeline()->apply(&view->getAlpha(), toVal, duration, ease); + } + + ci::Tween::Options ViewAnimations::fade(BaseViewRef view, const float fromVal, const float toVal, const float duration, const float delay, ci::EaseFn ease) + { + return view->getTimeline()->apply(&view->getAlpha(), fromVal, toVal, duration, ease); + } + + // fadeIn(baseView, toValue = 1, duration = 1.0, delay = 1.0, easing) + + + } +} diff --git a/src/utils/ViewAnimations.h b/src/utils/ViewAnimations.h new file mode 100644 index 0000000..b56bd7f --- /dev/null +++ b/src/utils/ViewAnimations.h @@ -0,0 +1,27 @@ +#pragma once +#include "cinder/app/App.h" +#include "cinder/app/RendererGl.h" +#include "cinder/gl/gl.h" + +#include "BaseView.h" + +namespace bluecadet { + namespace views { + + typedef std::shared_ptr ViewAnimationsRef; + + class ViewAnimations { + + public: + ViewAnimations(); + virtual ~ViewAnimations(); + + static ci::Tween::Options fadeIn(BaseViewRef view, const float duration, const float delay = 0.0f, ci::EaseFn ease = ci::easeNone); + static ci::Tween::Options fadeOut(BaseViewRef view, const float duration, const float delay = 0.0f, ci::EaseFn ease = ci::easeNone); + static ci::Tween::Options fadeTo(BaseViewRef view, const float toVal, const float duration, const float delay = 0.0f, ci::EaseFn ease = ci::easeNone); + static ci::Tween::Options fade(BaseViewRef view, const float fromVal, const float toVal, const float duration, const float delay = 0.0f, ci::EaseFn ease = ci::easeNone); + + }; + + } +} \ No newline at end of file