00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "MyGUI_Precompiled.h"
00024 #include "MyGUI_ControllerPosition.h"
00025 #include "MyGUI_Gui.h"
00026 #include "MyGUI_InputManager.h"
00027 #include "MyGUI_WidgetManager.h"
00028 #include "MyGUI_Widget.h"
00029 #include "MyGUI_ActionController.h"
00030
00031 namespace MyGUI
00032 {
00033
00034 ControllerPosition::ControllerPosition() :
00035 mTime(1),
00036 mElapsedTime(0),
00037 mCalcPosition(false),
00038 mCalcSize(false)
00039 {
00040 }
00041
00042 void ControllerPosition::setCoord(const IntCoord& _destCoord)
00043 {
00044 mDestCoord = _destCoord;
00045 mCalcPosition = true;
00046 mCalcSize = true;
00047 }
00048
00049 void ControllerPosition::setSize(const IntSize& _destSize)
00050 {
00051 mDestCoord.width = _destSize.width;
00052 mDestCoord.height = _destSize.height;
00053 mCalcPosition = false;
00054 mCalcSize = true;
00055 }
00056
00057 void ControllerPosition::setPosition(const IntPoint& _destPoint)
00058 {
00059 mDestCoord.left = _destPoint.left;
00060 mDestCoord.top = _destPoint.top;
00061 mCalcPosition = true;
00062 mCalcSize = false;
00063 }
00064
00065 void ControllerPosition::prepareItem(WidgetPtr _widget)
00066 {
00067 MYGUI_DEBUG_ASSERT(mTime > 0, "Time must be > 0");
00068
00069 mStartCoord = _widget->getCoord();
00070
00071
00072 eventPreAction(_widget);
00073 }
00074
00075 bool ControllerPosition::addTime(WidgetPtr _widget, float _time)
00076 {
00077 mElapsedTime += _time;
00078
00079 if (mElapsedTime < mTime)
00080 {
00081 IntCoord coord;
00082 eventFrameAction(mStartCoord, mDestCoord, coord, mElapsedTime/mTime);
00083 if (mCalcPosition)
00084 {
00085 if (mCalcSize) _widget->setCoord(coord);
00086 else _widget->setPosition(coord.point());
00087 }
00088 else if (mCalcSize) _widget->setSize(coord.size());
00089
00090
00091 eventUpdateAction(_widget);
00092
00093 return true;
00094 }
00095
00096
00097 IntCoord coord;
00098 eventFrameAction(mStartCoord, mDestCoord, coord, 1.0f);
00099 if (mCalcPosition)
00100 {
00101 if (mCalcSize) _widget->setCoord(coord);
00102 else _widget->setPosition(coord.point());
00103 }
00104 else if (mCalcSize) _widget->setSize(coord.size());
00105
00106
00107 eventUpdateAction(_widget);
00108
00109
00110 eventPostAction(_widget);
00111
00112 return false;
00113 }
00114
00115 void ControllerPosition::setProperty(const std::string& _key, const std::string& _value)
00116 {
00117 if (_key == "Time") setTime(utility::parseValue<float>(_value));
00118 else if (_key == "Coord") setCoord(utility::parseValue<IntCoord>(_value));
00119 else if (_key == "Size") setSize(utility::parseValue<IntSize>(_value));
00120 else if (_key == "Position") setPosition(utility::parseValue<IntPoint>(_value));
00121 }
00122
00123 }