Thin canvas modes, node execution, and canvas draw shell
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include "legacy_canvas_draw_merge_services.h"
|
||||
#include "legacy_canvas_stroke_composite_services.h"
|
||||
#include "legacy_canvas_stroke_preview_services.h"
|
||||
#include "legacy_canvas_mode_helpers.h"
|
||||
#include "legacy_ui_overlay_services.h"
|
||||
#include "legacy_ui_gl_dispatch.h"
|
||||
#include "app.h"
|
||||
@@ -19,152 +20,12 @@
|
||||
|
||||
NodeCanvas* CanvasMode::node;
|
||||
|
||||
namespace {
|
||||
|
||||
void set_canvas_mode_active_texture_unit(std::uint32_t unit_index)
|
||||
{
|
||||
pp::legacy::ui_gl::activate_texture_unit(unit_index, "CanvasMode");
|
||||
}
|
||||
|
||||
void apply_canvas_mode_capability(std::uint32_t state, bool enabled)
|
||||
{
|
||||
pp::legacy::ui_gl::set_capability(state, enabled, "CanvasMode");
|
||||
}
|
||||
|
||||
bool query_canvas_mode_capability(std::uint32_t state)
|
||||
{
|
||||
return pp::legacy::ui_gl::query_capability(state, "CanvasMode");
|
||||
}
|
||||
|
||||
void apply_canvas_mode_viewport(std::int32_t x, std::int32_t y, std::int32_t width, std::int32_t height)
|
||||
{
|
||||
pp::legacy::ui_gl::apply_viewport(x, y, width, height, "CanvasMode");
|
||||
}
|
||||
|
||||
std::uint32_t query_canvas_mode_read_framebuffer()
|
||||
{
|
||||
return pp::legacy::ui_gl::query_read_framebuffer("CanvasMode");
|
||||
}
|
||||
|
||||
void read_canvas_mode_pixel(std::int32_t x, std::int32_t y, glm::u8vec4& pixel)
|
||||
{
|
||||
pp::legacy::ui_gl::read_framebuffer_rgba8_pixel(
|
||||
query_canvas_mode_read_framebuffer(),
|
||||
x,
|
||||
y,
|
||||
&pixel,
|
||||
"CanvasMode");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void CanvasModeBasicCamera::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
|
||||
{
|
||||
switch (me->m_type)
|
||||
{
|
||||
case kEventType::MouseDownL:
|
||||
// if (Canvas::I->m_touch_lock && me->m_source == kEventSource::Touch)
|
||||
// {
|
||||
// m_draggingR = true;
|
||||
// m_dragR_start = me->m_pos;
|
||||
// m_pan_start = Canvas::I->m_pan;
|
||||
// node->mouse_capture();
|
||||
// }
|
||||
if (App::I->keys[(int)kKey::KeySpacebar])
|
||||
{
|
||||
m_draggingL = true;
|
||||
m_pan_start = Canvas::I->m_pan;
|
||||
m_dragL_start = me->m_pos;
|
||||
node->mouse_capture();
|
||||
}
|
||||
break;
|
||||
case kEventType::MouseUpL:
|
||||
// if (Canvas::I->m_touch_lock && me->m_source == kEventSource::Touch)
|
||||
// {
|
||||
// m_draggingR = false;
|
||||
// node->mouse_release();
|
||||
// }
|
||||
if (m_draggingL)
|
||||
{
|
||||
m_draggingL = false;
|
||||
pp::panopainter::release_legacy_mouse_capture(*node);
|
||||
}
|
||||
break;
|
||||
case kEventType::MouseDownR:
|
||||
if (App::I->keys[(int)kKey::KeyAlt])
|
||||
break;
|
||||
m_zooming = App::I->keys[(int)kKey::KeyCtrl];
|
||||
m_draggingR = true;
|
||||
m_dragR_start = me->m_pos;
|
||||
m_pan_start = Canvas::I->m_pan;
|
||||
m_fov_start = Canvas::I->m_cam_fov;
|
||||
node->mouse_capture();
|
||||
break;
|
||||
case kEventType::MouseUpR:
|
||||
m_draggingR = false;
|
||||
pp::panopainter::release_legacy_mouse_capture(*node);
|
||||
break;
|
||||
case kEventType::MouseMove:
|
||||
if (m_draggingR)
|
||||
{
|
||||
if (m_zooming)
|
||||
{
|
||||
Canvas::I->m_cam_fov = glm::clamp(m_fov_start - (me->m_pos.x - m_dragR_start.x) * 0.05f,
|
||||
Canvas::I->m_cam_fov_min, Canvas::I->m_cam_fov_max);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto dir = (App::I->has_vr && App::I->vr_active) ? glm::vec2(1, 1) : glm::vec2(-1, -1);
|
||||
Canvas::I->m_pan = m_pan_start + (me->m_pos - m_dragR_start) * dir * (Canvas::I->m_cam_fov / 85.f);
|
||||
auto angle = Canvas::I->m_pan * 0.003f;
|
||||
Canvas::I->m_cam_rot = glm::eulerAngleXY(angle.y, angle.x);
|
||||
}
|
||||
}
|
||||
if (m_draggingL)
|
||||
{
|
||||
Canvas::I->m_pan = m_pan_start + (me->m_pos - m_dragL_start) * glm::vec2(-1, -1) * (Canvas::I->m_cam_fov / 85.f);
|
||||
auto angle = Canvas::I->m_pan * 0.003f;
|
||||
Canvas::I->m_cam_rot = glm::eulerAngleXY(angle.y, angle.x);
|
||||
}
|
||||
break;
|
||||
case kEventType::MouseScroll:
|
||||
m_zoom_canvas += me->m_scroll_delta * 0.1f;
|
||||
Canvas::I->m_cam_fov = glm::clamp(Canvas::I->m_cam_fov - me->m_scroll_delta * 2.0f,
|
||||
Canvas::I->m_cam_fov_min, Canvas::I->m_cam_fov_max);
|
||||
//App::I->brush_update(true, true);
|
||||
break;
|
||||
case kEventType::MouseCancel:
|
||||
m_draggingR = false;
|
||||
pp::panopainter::release_legacy_mouse_capture(*node);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CanvasModeBasicCamera::on_GestureEvent(GestureEvent* ge)
|
||||
{
|
||||
switch (ge->m_type)
|
||||
{
|
||||
case kEventType::GestureStart:
|
||||
m_pan_start = Canvas::I->m_pan;
|
||||
m_zoom_start = m_zoom_canvas;
|
||||
m_camera_fov = Canvas::I->m_cam_fov;
|
||||
break;
|
||||
case kEventType::GestureMove:
|
||||
{
|
||||
Canvas::I->m_pan = m_pan_start + ge->m_pos_delta * glm::vec2(-1, -1) * 0.3f * (Canvas::I->m_cam_fov / 85.f);
|
||||
Canvas::I->m_cam_fov = glm::clamp(m_camera_fov - ge->m_distance_delta * .05f,
|
||||
Canvas::I->m_cam_fov_min, Canvas::I->m_cam_fov_max);
|
||||
auto angle = Canvas::I->m_pan * 0.003f;
|
||||
Canvas::I->m_cam_rot = glm::eulerAngleXY(angle.y, angle.x);
|
||||
//App::I->brush_update(true, true);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
using pp::legacy_canvas_mode::apply_canvas_mode_capability;
|
||||
using pp::legacy_canvas_mode::apply_canvas_mode_viewport;
|
||||
using pp::legacy_canvas_mode::query_canvas_mode_capability;
|
||||
using pp::legacy_canvas_mode::query_canvas_mode_read_framebuffer;
|
||||
using pp::legacy_canvas_mode::read_canvas_mode_pixel;
|
||||
using pp::legacy_canvas_mode::set_canvas_mode_active_texture_unit;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -473,39 +334,6 @@ void CanvasModeLine::leave(kCanvasMode next)
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
void CanvasModeCamera::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
|
||||
{
|
||||
if (Canvas::I->m_touch_lock && me->m_source == kEventSource::Touch)
|
||||
return;
|
||||
switch (me->m_type)
|
||||
{
|
||||
case kEventType::MouseDownR:
|
||||
Canvas::I->m_cam_pos = { 0, 0, 0 };
|
||||
break;
|
||||
case kEventType::MouseDownL:
|
||||
m_dragging = true;
|
||||
m_drag_start = me->m_pos;
|
||||
m_pos_start = xy(Canvas::I->m_cam_pos);
|
||||
node->mouse_capture();
|
||||
break;
|
||||
case kEventType::MouseUpL:
|
||||
m_dragging = false;
|
||||
pp::panopainter::release_legacy_mouse_capture(*node);
|
||||
Canvas::I->m_cam_pos = { 0, 0, 0 };
|
||||
break;
|
||||
case kEventType::MouseMove:
|
||||
if (m_dragging)
|
||||
Canvas::I->m_cam_pos = glm::vec3(m_pos_start + (me->m_pos - m_drag_start) * glm::vec2(1, -1) * 0.001f, Canvas::I->m_cam_pos.z);
|
||||
break;
|
||||
case kEventType::MouseCancel:
|
||||
m_dragging = false;
|
||||
pp::panopainter::release_legacy_mouse_capture(*node);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
void CanvasModeGrid::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
|
||||
|
||||
Reference in New Issue
Block a user