// SPDX-License-Identifier: GPL-2.0-or-later /** @file * Collection of shorthands to deal with GDK events. */ /* Authors: * Krzysztof KosiƄski * * Copyright (C) 2009 Authors * Released under GNU GPL v2+, read the file 'COPYING' for more information. */ #ifndef SEEN_UI_TOOL_EVENT_UTILS_H #define SEEN_UI_TOOL_EVENT_UTILS_H #include #include <2geom/point.h> namespace Inkscape { namespace UI { inline bool state_held_shift(unsigned state) { return state & GDK_SHIFT_MASK; } inline bool state_held_control(unsigned state) { return state & GDK_CONTROL_MASK; } inline bool state_held_alt(unsigned state) { return state & GDK_MOD1_MASK; } inline bool state_held_only_shift(unsigned state) { return (state & GDK_SHIFT_MASK) && !(state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)); } inline bool state_held_only_control(unsigned state) { return (state & GDK_CONTROL_MASK) && !(state & (GDK_SHIFT_MASK | GDK_MOD1_MASK)); } inline bool state_held_only_alt(unsigned state) { return (state & GDK_MOD1_MASK) && !(state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)); } inline bool state_held_any_modifiers(unsigned state) { return state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK); } inline bool state_held_no_modifiers(unsigned state) { return !state_held_any_modifiers(state); } template inline bool state_held_button(unsigned state) { return (button == 0 || button > 5) ? false : state & (GDK_BUTTON1_MASK << (button-1)); } /** Checks whether Shift was held when the event was generated. */ template inline bool held_shift(E const &event) { return state_held_shift(event.state); } /** Checks whether Control was held when the event was generated. */ template inline bool held_control(E const &event) { return state_held_control(event.state); } /** Checks whether Alt was held when the event was generated. */ template inline bool held_alt(E const &event) { return state_held_alt(event.state); } /** True if from the set of Ctrl, Shift and Alt only Ctrl was held when the event * was generated. */ template inline bool held_only_control(E const &event) { return state_held_only_control(event.state); } /** True if from the set of Ctrl, Shift and Alt only Shift was held when the event * was generated. */ template inline bool held_only_shift(E const &event) { return state_held_only_shift(event.state); } /** True if from the set of Ctrl, Shift and Alt only Alt was held when the event * was generated. */ template inline bool held_only_alt(E const &event) { return state_held_only_alt(event.state); } template inline bool held_no_modifiers(E const &event) { return state_held_no_modifiers(event.state); } template inline bool held_any_modifiers(E const &event) { return state_held_any_modifiers(event.state); } template inline Geom::Point event_point(E const &event) { return Geom::Point(event.x, event.y); } /** Use like this: * @code if (held_button<2>(event->motion)) { ... @endcode */ template inline bool held_button(E const &event) { return state_held_button