NAP
nap
system_modules
napcameracontrol
src
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
)
43
DECLARE_COMPONENT(
ZoomPanController
,
ZoomPanControllerInstance
)
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
78
class
NAPAPI
ZoomPanControllerInstance
:
public
ComponentInstance
79
{
80
RTTI_ENABLE(
ComponentInstance
)
81
public
:
82
ZoomPanControllerInstance
(
EntityInstance
& entity,
Component
& resource) :
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
Generated by doxygen