Add zoom method that only uses the pen
This commit is contained in:
parent
4947318387
commit
643e8d54ab
4 changed files with 19 additions and 11 deletions
|
|
@ -111,7 +111,9 @@ void DrawCamera::update_main(World& w) {
|
|||
|
||||
}
|
||||
else {
|
||||
bool newIsAccurateZooming = (w.drawProg.controls.middleClickHeld && w.main.input.key(InputManager::KEY_GENERIC_LCTRL).held) || (w.drawProg.controls.leftClickHeld && w.drawProg.drawTool->get_type() == DrawingProgramToolType::ZOOM);
|
||||
bool newIsAccurateZooming = (w.drawProg.controls.middleClickHeld && w.main.input.pen.isDown && w.main.input.pen.buttons[w.main.toolbar.tabletOptions.middleClickButton].held && w.main.toolbar.tabletOptions.zoomWhilePenDownAndButtonHeld) || // Hold middle click (pen button assigned to middle click) while pen is down
|
||||
(w.drawProg.controls.middleClickHeld && w.main.input.key(InputManager::KEY_GENERIC_LCTRL).held) || // Hold middle click/pen button while holding control
|
||||
(w.drawProg.controls.leftClickHeld && w.drawProg.drawTool->get_type() == DrawingProgramToolType::ZOOM); // Hold left click while on zoom tool
|
||||
|
||||
if(newIsAccurateZooming && !isAccurateZooming) {
|
||||
startZoomMousePos = w.get_mouse_world_pos();
|
||||
|
|
|
|||
|
|
@ -245,16 +245,6 @@ void DrawingProgram::update() {
|
|||
tool_temporary_switch_update();
|
||||
|
||||
controls.cursorHoveringOverCanvas = !world.main.toolbar.io->hoverObstructed;
|
||||
controls.leftClick = controls.cursorHoveringOverCanvas && world.main.input.mouse.leftClicks;
|
||||
if(controls.leftClick) {
|
||||
controls.leftClickHeld = true;
|
||||
world.main.toolbar.rightClickPopupLocation = std::nullopt;
|
||||
}
|
||||
if(controls.leftClickHeld && !world.main.input.mouse.leftDown) {
|
||||
controls.leftClick = false;
|
||||
controls.leftClickHeld = false;
|
||||
controls.leftClickReleased = true;
|
||||
}
|
||||
|
||||
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;
|
||||
|
|
@ -268,6 +258,18 @@ void DrawingProgram::update() {
|
|||
controls.middleClickReleased = true;
|
||||
}
|
||||
|
||||
// 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) {
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -276,6 +276,7 @@ nlohmann::json Toolbar::get_config_json() {
|
|||
tablet["rightClickButton"] = tabletOptions.rightClickButton;
|
||||
tablet["ignoreMouseMovementWhenPenInProximity"] = tabletOptions.ignoreMouseMovementWhenPenInProximity;
|
||||
tablet["brushMinimumSize"] = tabletOptions.brushMinimumSize;
|
||||
tablet["zoomWhilePenDownAndButtonHeld"] = tabletOptions.zoomWhilePenDownAndButtonHeld;
|
||||
|
||||
toRet["tablet"] = tablet;
|
||||
|
||||
|
|
@ -338,6 +339,7 @@ void Toolbar::set_config_json(const nlohmann::json& j, VersionNumber version) {
|
|||
try{j.at("tablet").at("rightClickButton").get_to(tabletOptions.rightClickButton);} catch(...) {}
|
||||
try{j.at("tablet").at("ignoreMouseMovementWhenPenInProximity").get_to(tabletOptions.ignoreMouseMovementWhenPenInProximity);} catch(...) {}
|
||||
try{j.at("tablet").at("brushMinimumSize").get_to(tabletOptions.brushMinimumSize);} catch(...) {}
|
||||
try{j.at("tablet").at("zoomWhilePenDownAndButtonHeld").get_to(tabletOptions.zoomWhilePenDownAndButtonHeld);} catch(...) {}
|
||||
|
||||
main.update_display_names();
|
||||
}
|
||||
|
|
@ -1583,6 +1585,7 @@ void Toolbar::options_menu() {
|
|||
gui.input_scalar_field<uint8_t>("middle click", "Middle click pen button", &tabletOptions.middleClickButton, 1, 255);
|
||||
gui.input_scalar_field<uint8_t>("right click", "Right click pen button", &tabletOptions.rightClickButton, 1, 255);
|
||||
gui.slider_scalar_field("tablet brush minimum size", "Brush relative minimum size", &tabletOptions.brushMinimumSize, 0.0f, 1.0f, 3);
|
||||
gui.checkbox_field("tablet zoom with button method", "Zoom when pen touching tablet and pen button assigned to middle click is held", &tabletOptions.zoomWhilePenDownAndButtonHeld);
|
||||
#ifdef _WIN32
|
||||
gui.checkbox_field("mouse ignore when pen proximity", "Ignore mouse movement when pen in proximity", &tabletOptions.ignoreMouseMovementWhenPenInProximity);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ class Toolbar {
|
|||
uint8_t rightClickButton = 2;
|
||||
bool ignoreMouseMovementWhenPenInProximity = false;
|
||||
float brushMinimumSize = 0.0f;
|
||||
bool zoomWhilePenDownAndButtonHeld = true;
|
||||
} tabletOptions;
|
||||
|
||||
Vector4f* colorLeft = nullptr;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue