NAP
zoompancontroller.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 #include <component.h>
8 #include <transformcomponent.h>
9 #include <inputevent.h>
10 #include <orthocameracomponent.h>
11 #include <texture.h>
12 #include <renderwindow.h>
13 
14 namespace nap
15 {
16  class ZoomPanControllerInstance;
17 
40  class NAPAPI ZoomPanController : public Component
41  {
42  RTTI_ENABLE(Component)
44  public:
49  virtual void getDependentComponents(std::vector<rtti::TypeInfo>& components) const override;
50 
51  nap::ResourcePtr<RenderWindow> mRenderWindow = nullptr;
52  float mZoomSpeed = 1.0f;
53  };
54 
55 
79  {
80  RTTI_ENABLE(ComponentInstance)
81  public:
83  ComponentInstance(entity, resource) { }
84 
90  virtual bool init(utility::ErrorState& errorState) override;
91 
96  virtual void update(double deltaTime) override;
97 
115  void frameTexture(const Texture2D& texture, nap::TransformComponentInstance& ioTextureTransform, float scale = 1.0f);
116 
134  void frameTexture(const glm::vec2& textureSize, nap::TransformComponentInstance& ioTextureTransform, float scale = 1.0f);
135 
139  void reset();
140 
146  float getZoomLevel() const;
147 
151  nap::OrthoCameraComponentInstance& getCamera() { return *mOrthoCameraComponent; }
152 
153  private:
154  // Default orthographic camera and texture (plane) position
155  static constexpr glm::vec3 cameraPosition = glm::vec3(0.0f, 0.0f, 5.0f);
156 
160  void onMouseDown(const PointerPressEvent& pointerPressEvent);
161 
165  void onMouseUp(const PointerReleaseEvent& pointerReleaseEvent);
166 
170  void onMouseMove(const PointerMoveEvent& pointerMoveEvent);
171 
175  void panCamera(const glm::vec2& clickPosition, glm::vec2&& position, glm::vec2&& relMovement);
176 
180  void zoomCamera(const glm::vec2& clickPosition, glm::vec2&& position, glm::vec2&& relMovement);
181 
182  TransformComponentInstance* mTransformComponent = nullptr;
183  OrthoCameraComponentInstance* mOrthoCameraComponent = nullptr;
184  RenderWindow* mViewport = nullptr;
185 
186  bool mPan = false;
187  bool mZoom = false;
188  glm::vec2 mClickCoordinates;
189  float mZoomSpeed = 1.0f;
190  nap::OrthoCameraProperties mCameraProperties;
191  };
192 }
nap::RenderWindow
Definition: renderwindow.h:43
nap::OrthoCameraProperties
Definition: orthocameracomponent.h:33
nap::rtti::ObjectPtr
Definition: objectptr.h:150
nap::ZoomPanControllerInstance
Definition: zoompancontroller.h:78
nap::ZoomPanController
Definition: zoompancontroller.h:40
nap::ZoomPanControllerInstance::getCamera
nap::OrthoCameraComponentInstance & getCamera()
Definition: zoompancontroller.h:151
nap::utility::ErrorState
Definition: errorstate.h:19
nap::PointerReleaseEvent
Definition: inputevent.h:195
nap::Texture2D
Definition: texture.h:117
nap::ZoomPanControllerInstance::ZoomPanControllerInstance
ZoomPanControllerInstance(EntityInstance &entity, Component &resource)
Definition: zoompancontroller.h:82
nap::EntityInstance
Definition: entity.h:34
nap::ComponentInstance
Definition: component.h:43
nap::Component
Definition: component.h:151
nap::PointerMoveEvent
Definition: inputevent.h:208
nap
Definition: templateapp.h:17
nap::OrthoCameraComponentInstance
Definition: orthocameracomponent.h:96
nap::TransformComponentInstance
Definition: transformcomponent.h:73
nap::PointerPressEvent
Definition: inputevent.h:182