Skip to content

Commit

Permalink
Refactor: moved basic gui-handling in Camera_manip_rot into Camera_manip
Browse files Browse the repository at this point in the history
  • Loading branch information
denizdiktas committed Jul 12, 2023
1 parent e7db9ce commit b800d9a
Show file tree
Hide file tree
Showing 7 changed files with 107 additions and 34 deletions.
1 change: 1 addition & 0 deletions Arrangement_on_surface_2/demo/earth/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ source_group( "Aos" FILES ${source_files_aos} )
# GRAPHICS
file(GLOB source_files_graphics
Camera.h Camera.cpp
Camera_manip.h Camera_manip.cpp
Camera_manip_rot.h Camera_manip_rot.cpp
Shader_program.h Shader_program.cpp
)
Expand Down
49 changes: 49 additions & 0 deletions Arrangement_on_surface_2/demo/earth/Camera_manip.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@

#include "Camera_manip.h"


Camera_manip::Camera_manip(Camera& camera) :
m_camera(camera)
{
}


void Camera_manip::set_mouse_button_pressed_flag(QMouseEvent* e, bool flag)
{
switch (e->button())
{
case Qt::LeftButton:
m_left_mouse_button_down = flag;
break;

case Qt::MiddleButton:
m_middle_mouse_button_down = flag;
break;
}
}
void Camera_manip::mousePressEvent(QMouseEvent* e)
{
set_mouse_button_pressed_flag(e, true);
m_mouse_press_pos = m_last_mouse_pos = QVector2D(e->position());

// call the function overridden by the derived class
mouse_press_event(e);
}
void Camera_manip::mouseMoveEvent(QMouseEvent* e)
{
auto current_mouse_pos = QVector2D(e->position());
const auto diff = current_mouse_pos - m_last_mouse_pos;

// call the function overridden by the derived class
mouse_move_event(e);

m_last_mouse_pos = current_mouse_pos;
}
void Camera_manip::mouseReleaseEvent(QMouseEvent* e)
{
set_mouse_button_pressed_flag(e, false);

// call the function overridden by the derived class
mouse_release_event(e);
}

39 changes: 39 additions & 0 deletions Arrangement_on_surface_2/demo/earth/Camera_manip.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@

#ifndef CAMERA_MANIP_H
#define CAMERA_MANIP_H

#include <qevent.h>
#include <qvector2d.h>

#include "Camera.h"


class Camera_manip
{
public:
Camera_manip(Camera& camera);
virtual ~Camera_manip() {};

void mousePressEvent(QMouseEvent* e);
void mouseMoveEvent(QMouseEvent* e);
void mouseReleaseEvent(QMouseEvent* e);

protected:
void set_mouse_button_pressed_flag(QMouseEvent* e, bool flag);

virtual void mouse_press_event(QMouseEvent* e) = 0;
virtual void mouse_move_event(QMouseEvent* e) = 0;
virtual void mouse_release_event(QMouseEvent* e) = 0;

Camera& m_camera;
float m_theta = 0, m_phi = 0;

bool m_left_mouse_button_down = false;
bool m_middle_mouse_button_down = false;
//QVector2D m_current_mouse_pos;
QVector2D m_last_mouse_pos;
QVector2D m_mouse_press_pos;
};


#endif
27 changes: 7 additions & 20 deletions Arrangement_on_surface_2/demo/earth/Camera_manip_rot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,29 @@


Camera_manip_rot::Camera_manip_rot(Camera& camera) :
m_camera(camera)
Camera_manip(camera)
{
}


void Camera_manip_rot::set_mouse_button_pressed_flag(QMouseEvent* e, bool flag)
{
switch (e->button())
{
case Qt::LeftButton:
m_left_mouse_button_down = flag;
break;
}
}
void Camera_manip_rot::mousePressEvent(QMouseEvent* e)
void Camera_manip_rot::mouse_press_event(QMouseEvent* e)
{
set_mouse_button_pressed_flag(e, true);
m_mouse_press_pos = m_last_mouse_pos = QVector2D(e->position());
}
void Camera_manip_rot::mouseMoveEvent(QMouseEvent* e)
void Camera_manip_rot::mouse_move_event(QMouseEvent* e)
{
auto current_mouse_pos = QVector2D(e->position());
const auto diff = current_mouse_pos - m_last_mouse_pos;

if (m_left_mouse_button_down)
{
auto current_mouse_pos = QVector2D(e->position());
const auto diff = current_mouse_pos - m_last_mouse_pos;

const float rotation_scale_factor = 0.1f;
m_theta += rotation_scale_factor * diff.x();
m_phi += rotation_scale_factor * diff.y();
m_camera.rotate_from_init_config(-m_theta, -m_phi);
}

m_last_mouse_pos = current_mouse_pos;
}
void Camera_manip_rot::mouseReleaseEvent(QMouseEvent* e)
void Camera_manip_rot::mouse_release_event(QMouseEvent* e)
{
set_mouse_button_pressed_flag(e, false);
}

19 changes: 8 additions & 11 deletions Arrangement_on_surface_2/demo/earth/Camera_manip_rot.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,25 @@
#include <qevent.h>
#include <qvector2d.h>

#include "Camera.h"
#include "Camera_manip.h"


class Camera_manip_rot
class Camera_manip_rot : public Camera_manip
{
public:
Camera_manip_rot(Camera& camera);

void mousePressEvent(QMouseEvent* e);
void mouseMoveEvent(QMouseEvent* e);
void mouseReleaseEvent(QMouseEvent* e);

protected:
void set_mouse_button_pressed_flag(QMouseEvent* e, bool flag);
void mouse_press_event(QMouseEvent* e) override;
void mouse_move_event(QMouseEvent* e) override;
void mouse_release_event(QMouseEvent* e) override;

private:
Camera& m_camera;
float m_theta = 0, m_phi = 0;

bool m_left_mouse_button_down = false;
QVector2D m_last_mouse_pos;
QVector2D m_mouse_press_pos;
//bool m_left_mouse_button_down = false;
//QVector2D m_last_mouse_pos;
//QVector2D m_mouse_press_pos;
};


Expand Down
2 changes: 1 addition & 1 deletion Arrangement_on_surface_2/demo/earth/Main_widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ void Main_widget::initializeGL()
m_timer.start(12, this);
}


#include "Camera_manip_rot.h"

void Main_widget::init_camera()
{
Expand Down
4 changes: 2 additions & 2 deletions Arrangement_on_surface_2/demo/earth/Main_widget.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#include <qopenglwidget.h>

#include "Camera.h"
#include "Camera_manip_rot.h"
#include "Camera_manip.h"
#include "Common_defs.h"
#include "Kml_reader.h"
#include "Line_strips.h"
Expand Down Expand Up @@ -84,7 +84,7 @@ class Main_widget : public QOpenGLWidget, protected OpenGLFunctionsBase

// Camera & controls
Camera m_camera;
std::unique_ptr<Camera_manip_rot> m_camera_manip_rot;
std::unique_ptr<Camera_manip> m_camera_manip_rot;

bool m_left_mouse_button_down = false;
bool m_middle_mouse_button_down = false;
Expand Down

0 comments on commit b800d9a

Please sign in to comment.