Started work on mouse callbacks
This commit is contained in:
parent
e1e93b8a31
commit
109fd96b67
10 changed files with 144 additions and 55 deletions
|
|
@ -116,11 +116,30 @@ void DrawingProgram::register_callbacks() {
|
|||
tempMoveToolSwitch = TemporaryMoveToolSwitch::NONE;
|
||||
}
|
||||
});
|
||||
selection.register_key_callbacks();
|
||||
mouseButtonCallback = world.main.input.mouseButtonCallbacks.register_callback([&](const InputManager::MouseButtonCallbackArgs& button) {
|
||||
bool isHoveringOverCanvas = world.main.toolbar.check_if_position_isnt_obstructed(button.pos);
|
||||
if(isHoveringOverCanvas) {
|
||||
if(button.button == InputManager::MouseButtonCallbackArgs::Button::RIGHT) {
|
||||
if(button.down) {
|
||||
if(world.main.toolbar.rightClickPopupLocation)
|
||||
world.main.toolbar.rightClickPopupLocation = std::nullopt;
|
||||
else
|
||||
world.main.toolbar.rightClickPopupLocation = world.main.input.mouse.pos / world.main.toolbar.final_gui_scale();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(button.down)
|
||||
world.main.toolbar.rightClickPopupLocation = std::nullopt;
|
||||
mouseButtonOnCanvasCallbacks.run_callbacks(button);
|
||||
}
|
||||
}
|
||||
});
|
||||
selection.register_callbacks();
|
||||
}
|
||||
|
||||
void DrawingProgram::deregister_callbacks() {
|
||||
tempMoveToolSwitch = TemporaryMoveToolSwitch::NONE;
|
||||
world.main.input.mouseButtonCallbacks.deregister_callback(mouseButtonCallback);
|
||||
selection.deselect_all();
|
||||
}
|
||||
|
||||
|
|
@ -320,21 +339,12 @@ void DrawingProgram::modify_grid(const NetworkingObjects::NetObjWeakPtr<WorldGri
|
|||
void DrawingProgram::update() {
|
||||
tool_temporary_switch_update();
|
||||
|
||||
{
|
||||
controls.cursorHoveringOverCanvas = true;
|
||||
Vector2f mousePosGUI = world.main.input.mouse.pos / world.main.toolbar.final_gui_scale();
|
||||
for(auto& aabb : world.main.toolbar.io->hoverObstructingAABBs)
|
||||
controls.cursorHoveringOverCanvas &= !SCollision::collide(mousePosGUI, aabb);
|
||||
for(auto& circle : world.main.toolbar.io->hoverObstructingCircles)
|
||||
controls.cursorHoveringOverCanvas &= !SCollision::collide(mousePosGUI, circle);
|
||||
}
|
||||
controls.cursorHoveringOverCanvas = world.main.toolbar.check_if_position_isnt_obstructed(world.main.input.mouse.pos);
|
||||
|
||||
controls.middleClick = controls.cursorHoveringOverCanvas && (world.main.input.mouse.middleClicks || world.main.input.pen.buttons[world.main.toolbar.tabletOptions.middleClickButton].pressed);
|
||||
bool middleHeld = world.main.input.mouse.middleDown || world.main.input.pen.buttons[world.main.toolbar.tabletOptions.middleClickButton].held;
|
||||
if(controls.middleClick) {
|
||||
if(controls.middleClick)
|
||||
controls.middleClickHeld = true;
|
||||
world.main.toolbar.rightClickPopupLocation = std::nullopt;
|
||||
}
|
||||
if(controls.middleClickHeld && !middleHeld) {
|
||||
controls.middleClick = false;
|
||||
controls.middleClickHeld = false;
|
||||
|
|
@ -343,23 +353,14 @@ void DrawingProgram::update() {
|
|||
|
||||
// Left click will be ignored if middle click is held (and left click held state will be gone once middle click is pressed)
|
||||
controls.leftClick = controls.cursorHoveringOverCanvas && world.main.input.mouse.leftClicks && !controls.middleClickHeld;
|
||||
if(controls.leftClick) {
|
||||
if(controls.leftClick)
|
||||
controls.leftClickHeld = true;
|
||||
world.main.toolbar.rightClickPopupLocation = std::nullopt;
|
||||
}
|
||||
if(controls.leftClickHeld && (!world.main.input.mouse.leftDown || controls.middleClickHeld)) {
|
||||
controls.leftClick = false;
|
||||
controls.leftClickHeld = false;
|
||||
controls.leftClickReleased = true;
|
||||
}
|
||||
|
||||
if(controls.cursorHoveringOverCanvas && (world.main.input.mouse.rightClicks || world.main.input.pen.buttons[world.main.toolbar.tabletOptions.rightClickButton].pressed)) {
|
||||
if(world.main.toolbar.rightClickPopupLocation)
|
||||
world.main.toolbar.rightClickPopupLocation = std::nullopt;
|
||||
else
|
||||
world.main.toolbar.rightClickPopupLocation = world.main.input.mouse.pos / world.main.toolbar.final_gui_scale();
|
||||
}
|
||||
|
||||
controls.previousMouseWorldPos = controls.currentMouseWorldPos;
|
||||
controls.currentMouseWorldPos = world.get_mouse_world_pos();
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,9 @@ class DrawingProgram {
|
|||
|
||||
void register_callbacks();
|
||||
void deregister_callbacks();
|
||||
|
||||
|
||||
typedef CallbackManager<InputManager::MouseButtonCallbackArgs> MouseButtonOnCanvasCallbackManager;
|
||||
MouseButtonOnCanvasCallbackManager mouseButtonOnCanvasCallbacks;
|
||||
private:
|
||||
void process_transform_message(const std::vector<std::pair<NetworkingObjects::NetObjID, CoordSpaceHelper>>& transforms);
|
||||
|
||||
|
|
@ -68,7 +70,6 @@ class DrawingProgram {
|
|||
void check_updateable_components();
|
||||
void update_downloading_dropped_files();
|
||||
|
||||
|
||||
bool selection_action_menu(Vector2f popupPos);
|
||||
void rebuild_cache();
|
||||
|
||||
|
|
@ -96,6 +97,8 @@ class DrawingProgram {
|
|||
TemporaryMoveToolSwitch tempMoveToolSwitch = TemporaryMoveToolSwitch::NONE;
|
||||
DrawingProgramToolType toolTypeAfterTempMove;
|
||||
|
||||
InputManager::MouseButtonCallbackManager::Callback* mouseButtonCallback;
|
||||
|
||||
struct GlobalControls {
|
||||
std::optional<WorldScalar> lockedCameraScale;
|
||||
|
||||
|
|
|
|||
|
|
@ -442,7 +442,7 @@ void DrawingProgramSelection::update() {
|
|||
}
|
||||
}
|
||||
|
||||
void DrawingProgramSelection::register_key_callbacks() {
|
||||
void DrawingProgramSelection::register_callbacks() {
|
||||
auto& keyCallbacks = drawP.world.keyCallbacks;
|
||||
keyCallbacks[InputManager::KEY_DRAW_DELETE] = drawP.world.main.input.keyCallbacks[InputManager::KEY_DRAW_DELETE].register_callback([&](auto& key) {
|
||||
if(key.down && !key.repeat)
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class DrawingProgramSelection {
|
|||
void delete_all();
|
||||
void selection_to_clipboard();
|
||||
CanvasComponentContainer::ObjInfo* get_front_object_colliding_with_in_editing_layer(const SCollision::ColliderCollection<float>& cC);
|
||||
void register_key_callbacks();
|
||||
void register_callbacks();
|
||||
private:
|
||||
void translate_key(unsigned keyPressed, bool pressed);
|
||||
bool mouse_collided_with_selection_aabb();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue