Pen events passed to tools
This commit is contained in:
parent
5b6316bd15
commit
4814780bec
10 changed files with 141 additions and 17 deletions
|
|
@ -159,6 +159,7 @@ void DrawingProgram::input_key_callback(const InputManager::KeyCallbackArgs& key
|
|||
else if(!key.down && tempMoveToolSwitch == TemporaryMoveToolSwitch::PAN) {
|
||||
switch_to_tool(toolTypeAfterTempMove);
|
||||
tempMoveToolSwitch = TemporaryMoveToolSwitch::NONE;
|
||||
pen_tool_switch_check();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -171,6 +172,7 @@ void DrawingProgram::input_key_callback(const InputManager::KeyCallbackArgs& key
|
|||
else if(!key.down && tempMoveToolSwitch == TemporaryMoveToolSwitch::ZOOM) {
|
||||
switch_to_tool(toolTypeAfterTempMove);
|
||||
tempMoveToolSwitch = TemporaryMoveToolSwitch::NONE;
|
||||
pen_tool_switch_check();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -178,6 +180,34 @@ void DrawingProgram::input_key_callback(const InputManager::KeyCallbackArgs& key
|
|||
drawTool->input_key_callback(key);
|
||||
}
|
||||
|
||||
void DrawingProgram::input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button) {
|
||||
drawTool->input_pure_mouse_button_callback(button);
|
||||
}
|
||||
|
||||
void DrawingProgram::input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion) {
|
||||
drawTool->input_pure_mouse_motion_callback(motion);
|
||||
}
|
||||
|
||||
void DrawingProgram::input_pen_button_callback(const InputManager::PenButtonCallbackArgs& button) {
|
||||
pen_tool_switch_check();
|
||||
drawTool->input_pen_button_callback(button);
|
||||
}
|
||||
|
||||
void DrawingProgram::input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch) {
|
||||
pen_tool_switch_check();
|
||||
drawTool->input_pen_touch_callback(touch);
|
||||
}
|
||||
|
||||
void DrawingProgram::input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion) {
|
||||
pen_tool_switch_check();
|
||||
drawTool->input_pen_motion_callback(motion);
|
||||
}
|
||||
|
||||
void DrawingProgram::input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis) {
|
||||
pen_tool_switch_check();
|
||||
drawTool->input_pen_axis_callback(axis);
|
||||
}
|
||||
|
||||
void DrawingProgram::server_init_no_file() {
|
||||
layerMan.server_init_no_file();
|
||||
}
|
||||
|
|
@ -372,8 +402,6 @@ void DrawingProgram::modify_grid(const NetworkingObjects::NetObjWeakPtr<WorldGri
|
|||
}
|
||||
|
||||
void DrawingProgram::update() {
|
||||
tool_temporary_switch_update();
|
||||
|
||||
controls.cursorHoveringOverCanvas = world.main.toolbar.check_if_position_isnt_obstructed(world.main.input.mouse.pos);
|
||||
|
||||
controls.previousMouseWorldPos = controls.currentMouseWorldPos;
|
||||
|
|
@ -386,7 +414,6 @@ void DrawingProgram::update() {
|
|||
|
||||
drag_drop_update();
|
||||
|
||||
|
||||
selection.update();
|
||||
drawTool->tool_update();
|
||||
|
||||
|
|
@ -400,7 +427,7 @@ void DrawingProgram::update() {
|
|||
rebuild_cache();
|
||||
}
|
||||
|
||||
void DrawingProgram::tool_temporary_switch_update() {
|
||||
void DrawingProgram::pen_tool_switch_check() {
|
||||
if(world.main.input.pen.isEraser && !temporaryEraser && tempMoveToolSwitch == TemporaryMoveToolSwitch::NONE) {
|
||||
if(drawTool->get_type() == DrawingProgramToolType::BRUSH)
|
||||
switch_to_tool(DrawingProgramToolType::ERASER);
|
||||
|
|
|
|||
|
|
@ -61,6 +61,12 @@ class DrawingProgram {
|
|||
void input_key_callback(const InputManager::KeyCallbackArgs& key);
|
||||
void input_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button);
|
||||
void input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion);
|
||||
void input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button);
|
||||
void input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion);
|
||||
void input_pen_button_callback(const InputManager::PenButtonCallbackArgs& button);
|
||||
void input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch);
|
||||
void input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion);
|
||||
void input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis);
|
||||
private:
|
||||
void process_transform_message(const std::vector<std::pair<NetworkingObjects::NetObjID, CoordSpaceHelper>>& transforms);
|
||||
|
||||
|
|
@ -86,7 +92,7 @@ class DrawingProgram {
|
|||
std::unique_ptr<DrawingProgramToolBase> toolToSwitchToAfterUpdate;
|
||||
std::unordered_set<CanvasComponentContainer::ObjInfo*> updateableComponents;
|
||||
|
||||
void tool_temporary_switch_update();
|
||||
void pen_tool_switch_check();
|
||||
enum class TemporaryMoveToolSwitch {
|
||||
NONE,
|
||||
PAN,
|
||||
|
|
|
|||
|
|
@ -58,3 +58,9 @@ std::unique_ptr<DrawingProgramToolBase> DrawingProgramToolBase::allocate_tool_ty
|
|||
void DrawingProgramToolBase::input_key_callback(const InputManager::KeyCallbackArgs& key) {}
|
||||
void DrawingProgramToolBase::input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button) {}
|
||||
void DrawingProgramToolBase::input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion) {}
|
||||
void DrawingProgramToolBase::input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button) {}
|
||||
void DrawingProgramToolBase::input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion) {}
|
||||
void DrawingProgramToolBase::input_pen_button_callback(const InputManager::PenButtonCallbackArgs& button) {}
|
||||
void DrawingProgramToolBase::input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch) {}
|
||||
void DrawingProgramToolBase::input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion) {}
|
||||
void DrawingProgramToolBase::input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis) {}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,12 @@ class DrawingProgramToolBase {
|
|||
virtual void input_key_callback(const InputManager::KeyCallbackArgs& key);
|
||||
virtual void input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button);
|
||||
virtual void input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion);
|
||||
virtual void input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button);
|
||||
virtual void input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion);
|
||||
virtual void input_pen_button_callback(const InputManager::PenButtonCallbackArgs& button);
|
||||
virtual void input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch);
|
||||
virtual void input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion);
|
||||
virtual void input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis);
|
||||
virtual ~DrawingProgramToolBase();
|
||||
static std::unique_ptr<DrawingProgramToolBase> allocate_tool_type(DrawingProgram& drawP, DrawingProgramToolType t);
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <SDL3/SDL_keyboard.h>
|
||||
#include <SDL3/SDL_keycode.h>
|
||||
|
||||
#include <SDL3/SDL_pen.h>
|
||||
#include <optional>
|
||||
|
||||
#include <Helpers/Logger.hpp>
|
||||
|
|
@ -448,6 +449,7 @@ void InputManager::backend_pen_button_down_update(const SDL_PenButtonEvent& e) {
|
|||
pen.previousPos = mouseNewPos;
|
||||
pen.buttons[e.button].held = true;
|
||||
pen.buttons[e.button].pressed = true;
|
||||
pen.isEraser = e.pen_state & SDL_PEN_INPUT_ERASER_TIP;
|
||||
|
||||
if(e.button == main.toolbar.tabletOptions.middleClickButton) {
|
||||
main.input_mouse_button_callback({
|
||||
|
|
@ -479,6 +481,7 @@ void InputManager::backend_pen_button_up_update(const SDL_PenButtonEvent& e) {
|
|||
|
||||
pen.previousPos = mouseNewPos;
|
||||
pen.buttons[e.button].held = false;
|
||||
pen.isEraser = e.pen_state & SDL_PEN_INPUT_ERASER_TIP;
|
||||
|
||||
if(e.button == main.toolbar.tabletOptions.middleClickButton) {
|
||||
main.input_mouse_button_callback({
|
||||
|
|
@ -560,6 +563,7 @@ void InputManager::backend_pen_motion_update(const SDL_PenMotionEvent& e) {
|
|||
|
||||
Vector2f mouseRel = mouseNewPos - pen.previousPos;
|
||||
pen.previousPos = mouseNewPos;
|
||||
pen.isEraser = e.pen_state & SDL_PEN_INPUT_ERASER_TIP;
|
||||
|
||||
main.input_mouse_motion_callback({
|
||||
.pos = mouseNewPos,
|
||||
|
|
@ -571,6 +575,24 @@ void InputManager::backend_pen_motion_update(const SDL_PenMotionEvent& e) {
|
|||
});
|
||||
}
|
||||
|
||||
void InputManager::backend_pen_axis_update(const SDL_PenAxisEvent& e) {
|
||||
Vector2f mouseNewPos = {e.x * main.window.density, e.y * main.window.density};
|
||||
mouse.set_pos(mouseNewPos);
|
||||
|
||||
pen.previousPos = mouseNewPos;
|
||||
pen.isEraser = e.pen_state & SDL_PEN_INPUT_ERASER_TIP;
|
||||
|
||||
// For now, only pass pressure axis
|
||||
if(e.axis == SDL_PEN_AXIS_PRESSURE) {
|
||||
pen.pressure = e.value;
|
||||
main.input_pen_axis_callback({
|
||||
.pos = mouseNewPos,
|
||||
.axis = e.axis,
|
||||
.value = e.value
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void InputManager::backend_key_down_update(const SDL_KeyboardEvent& e) {
|
||||
auto kPress = e.key;
|
||||
auto kMod = e.mod;
|
||||
|
|
|
|||
|
|
@ -224,6 +224,7 @@ struct InputManager {
|
|||
void backend_pen_touch_down_update(const SDL_PenTouchEvent& e);
|
||||
void backend_pen_touch_up_update(const SDL_PenTouchEvent& e);
|
||||
void backend_pen_motion_update(const SDL_PenMotionEvent& e);
|
||||
void backend_pen_axis_update(const SDL_PenAxisEvent& e);
|
||||
|
||||
void set_clipboard_str(std::string_view s);
|
||||
void set_clipboard_plain_and_richtext_pair(const std::pair<std::string, RichText::TextData>& plainAndRichtextPair);
|
||||
|
|
@ -290,6 +291,12 @@ struct InputManager {
|
|||
Vector2f move;
|
||||
};
|
||||
|
||||
struct PenAxisCallbackArgs {
|
||||
Vector2f pos;
|
||||
SDL_PenAxis axis;
|
||||
float value;
|
||||
};
|
||||
|
||||
MainProgram& main;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -326,12 +326,6 @@ void MainProgram::input_key_callback(const InputManager::KeyCallbackArgs& key) {
|
|||
world->input_key_callback(key);
|
||||
}
|
||||
|
||||
void MainProgram::input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button) {
|
||||
}
|
||||
|
||||
void MainProgram::input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion) {
|
||||
}
|
||||
|
||||
void MainProgram::input_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button) {
|
||||
if(world)
|
||||
world->input_mouse_button_callback(button);
|
||||
|
|
@ -347,13 +341,34 @@ void MainProgram::input_mouse_wheel_callback(const InputManager::MouseWheelCallb
|
|||
world->input_mouse_wheel_callback(wheel);
|
||||
}
|
||||
|
||||
void MainProgram::input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button) {
|
||||
if(world)
|
||||
world->input_pure_mouse_button_callback(button);
|
||||
}
|
||||
|
||||
void MainProgram::input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion) {
|
||||
if(world)
|
||||
world->input_pure_mouse_motion_callback(motion);
|
||||
}
|
||||
|
||||
void MainProgram::input_pen_button_callback(const InputManager::PenButtonCallbackArgs& button) {
|
||||
if(world)
|
||||
world->input_pen_button_callback(button);
|
||||
}
|
||||
|
||||
void MainProgram::input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch) {
|
||||
if(world)
|
||||
world->input_pen_touch_callback(touch);
|
||||
}
|
||||
|
||||
void MainProgram::input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion) {
|
||||
if(world)
|
||||
world->input_pen_motion_callback(motion);
|
||||
}
|
||||
|
||||
void MainProgram::input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis) {
|
||||
if(world)
|
||||
world->input_pen_axis_callback(axis);
|
||||
}
|
||||
|
||||
bool MainProgram::network_being_used() {
|
||||
|
|
|
|||
|
|
@ -121,14 +121,15 @@ class MainProgram {
|
|||
std::string displayName;
|
||||
|
||||
void input_key_callback(const InputManager::KeyCallbackArgs& key);
|
||||
void input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button);
|
||||
void input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion);
|
||||
void input_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button);
|
||||
void input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion);
|
||||
void input_mouse_wheel_callback(const InputManager::MouseWheelCallbackArgs& wheel);
|
||||
void input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button);
|
||||
void input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion);
|
||||
void input_pen_button_callback(const InputManager::PenButtonCallbackArgs& button);
|
||||
void input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch);
|
||||
void input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion);
|
||||
void input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis);
|
||||
|
||||
~MainProgram();
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -267,9 +267,8 @@ void World::input_key_callback(const InputManager::KeyCallbackArgs& key) {
|
|||
}
|
||||
|
||||
void World::input_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button) {
|
||||
if(!clientStillConnecting) {
|
||||
if(!clientStillConnecting)
|
||||
drawProg.input_mouse_button_callback(button);
|
||||
}
|
||||
}
|
||||
|
||||
void World::input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion) {
|
||||
|
|
@ -280,9 +279,38 @@ void World::input_mouse_motion_callback(const InputManager::MouseMotionCallbackA
|
|||
}
|
||||
|
||||
void World::input_mouse_wheel_callback(const InputManager::MouseWheelCallbackArgs& wheel) {
|
||||
if(!clientStillConnecting) {
|
||||
if(!clientStillConnecting)
|
||||
drawData.cam.input_mouse_wheel_callback(*this, wheel);
|
||||
}
|
||||
}
|
||||
|
||||
void World::input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button) {
|
||||
if(!clientStillConnecting)
|
||||
drawProg.input_pure_mouse_button_callback(button);
|
||||
}
|
||||
|
||||
void World::input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion) {
|
||||
if(!clientStillConnecting)
|
||||
drawProg.input_pure_mouse_motion_callback(motion);
|
||||
}
|
||||
|
||||
void World::input_pen_button_callback(const InputManager::PenButtonCallbackArgs& button) {
|
||||
if(!clientStillConnecting)
|
||||
drawProg.input_pen_button_callback(button);
|
||||
}
|
||||
|
||||
void World::input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch) {
|
||||
if(!clientStillConnecting)
|
||||
drawProg.input_pen_touch_callback(touch);
|
||||
}
|
||||
|
||||
void World::input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion) {
|
||||
if(!clientStillConnecting)
|
||||
drawProg.input_pen_motion_callback(motion);
|
||||
}
|
||||
|
||||
void World::input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis) {
|
||||
if(!clientStillConnecting)
|
||||
drawProg.input_pen_axis_callback(axis);
|
||||
}
|
||||
|
||||
void World::send_chat_message(const std::string& message) {
|
||||
|
|
|
|||
|
|
@ -105,6 +105,12 @@ class World {
|
|||
void input_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button);
|
||||
void input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion);
|
||||
void input_mouse_wheel_callback(const InputManager::MouseWheelCallbackArgs& wheel);
|
||||
void input_pure_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button);
|
||||
void input_pure_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion);
|
||||
void input_pen_button_callback(const InputManager::PenButtonCallbackArgs& button);
|
||||
void input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch);
|
||||
void input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion);
|
||||
void input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis);
|
||||
private:
|
||||
void load_empty_canvas();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue