TDME2  1.9.200
GUIMoveableController.cpp
Go to the documentation of this file.
2 
3 #include <array>
4 #include <string>
5 
6 #include <tdme/tdme.h>
10 #include <tdme/gui/nodes/GUINode.h>
13 #include <tdme/gui/GUI.h>
14 #include <tdme/math/Math.h>
15 #include <tdme/utilities/Console.h>
17 
18 using std::array;
19 using std::to_string;
20 
27 using tdme::gui::GUI;
28 using tdme::math::Math;
31 
33 
34 GUIMoveableController::GUIMoveableController(GUINode* node): GUINodeController(node)
35 {
36 }
37 
39  return false;
40 }
41 
43 
44 }
45 
47 }
48 
50 }
51 
53 }
54 
56  if (node == this->node &&
57  event->getType() == GUIMouseEvent::MOUSEEVENT_RELEASED == true &&
58  event->getButton() == MOUSE_BUTTON_LEFT) {
59  //
60  if (dragging == true) {
61  clicked = false;
62  dragging = false;
63  event->setProcessed(true);
64  //
65  node->getScreenNode()->forwardMoveRelease(this->node, event->getXUnscaled(), event->getYUnscaled());
66  }
67  } else
68  if (node == this->node && node->isEventBelongingToNode(event) == true &&
69  event->getType() == GUIMouseEvent::MOUSEEVENT_PRESSED == true &&
70  event->getButton() == MOUSE_BUTTON_LEFT) {
71  //
72  mouseLastX = event->getX();
73  mouseLastY = event->getY();
74  // we clicked our node
75  clicked = true;
76  } else
77  if (clicked == true &&
78  event->getType() == GUIMouseEvent::MOUSEEVENT_DRAGGED == true &&
79  event->getButton() == MOUSE_BUTTON_LEFT) {
80  //
81  auto movedX = event->getX() - mouseLastX;
82  auto movedY = event->getY() - mouseLastY;
83  //
84  if (dragging == true) {
85  // switch to positioning by pixels if not yet done
86  // horizontal
87  if (this->node->getRequestsConstraints().leftType != GUINode_RequestedConstraints_RequestedConstraintsType::PIXEL) {
88  this->node->getRequestsConstraints().leftType = GUINode_RequestedConstraints_RequestedConstraintsType::PIXEL;
89  this->node->getRequestsConstraints().left = this->node->getComputedConstraints().left;
90  }
91  // vertical
92  if (this->node->getRequestsConstraints().topType != GUINode_RequestedConstraints_RequestedConstraintsType::PIXEL) {
93  this->node->getRequestsConstraints().topType = GUINode_RequestedConstraints_RequestedConstraintsType::PIXEL;
94  this->node->getRequestsConstraints().top = this->node->getComputedConstraints().top;
95  }
96  // move it, move it
97  this->node->getRequestsConstraints().left+= movedX;
98  this->node->getRequestsConstraints().top+= movedY;
99  this->node->getComputedConstraints().left+= movedX;
100  this->node->getComputedConstraints().top+= movedY;
101  //
102  node->getScreenNode()->forwardMove(this->node);
103  //
104  node->getScreenNode()->invalidateLayout(this->node);
105  //
106  mouseLastX = event->getX();
107  mouseLastY = event->getY();
108  //
109  event->setProcessed(true);
110  } else
111  if (node->getScreenNode()->isMoveAccepted(node) == true) {
112  //
113  mouseLastX = event->getX();
114  mouseLastY = event->getY();
115  //
116  dragging = true;
117  //
118  event->setProcessed(true);
119  }
120  }
121 }
122 
124 }
125 
127 }
128 
130 }
131 
133 }
134 
136  return true;
137 }
138 
140  return value;
141 }
142 
144 }
145 
147 }
148 
149 void GUIMoveableController::startMoving(int mouseX, int mouseY) {
150  dragging = true;
151  mouseLastX = mouseX;
152  mouseLastY = mouseY;
153 }
#define MOUSE_BUTTON_LEFT
GUI module class.
Definition: GUI.h:64
void dispose() override
Dispose controller.
void postLayout() override
Post layout event.
void initialize() override
Initialize controller after element has been created.
void handleKeyboardEvent(GUIKeyboardEvent *event) override
Handle keyboard event.
void setValue(const MutableString &value) override
Set value.
void handleMouseEvent(GUINode *node, GUIMouseEvent *event) override
Handle mouse event.
void tick() override
Tick method will be executed once per frame.
void setDisabled(bool disabled) override
Set disabled.
void startMoving(int mouseX, int mouseY)
Start moving.
void onSubTreeChange() override
On sub tree change.
GUIMouseEventType getType() const
Definition: GUIMouseEvent.h:78
GUI node controller base class.
GUI node base class.
Definition: GUINode.h:64
GUINode_RequestedConstraints & getRequestsConstraints()
Definition: GUINode.h:405
bool isEventBelongingToNode(GUIMouseEvent *event, Vector2 &nodeCoordinate)
Is event belonging to node.
Definition: GUINode.h:604
GUIScreenNode * getScreenNode()
Definition: GUINode.h:325
GUINode_ComputedConstraints & getComputedConstraints()
Definition: GUINode.h:412
GUI screen node that represents a screen that can be rendered via GUI system.
Definition: GUIScreenNode.h:72
void invalidateLayout(GUINode *node)
Mark a node to be invalidated regarding layout.
bool isMoveAccepted(GUINode *node)
Returns if move is accepted by move listener.
void forwardMove(GUINode *node)
Forward move event.
void forwardMoveRelease(GUINode *node, int mouseX, int mouseY)
Forward move release event.
Standard math functions.
Definition: Math.h:19
Console class.
Definition: Console.h:29
Mutable utf8 aware string class.
Definition: MutableString.h:23
GUINode_RequestedConstraints_RequestedConstraintsType * topType
GUINode_RequestedConstraints_RequestedConstraintsType * leftType