17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-17 17:59:19 +02:00
Files
maszyna/input/editormouseinput.cppm
maj00r 6550c88536 give importers the headers module templates need
A template defined in a module interface is instantiated in the importing
unit, where its body's types must be complete. A declaration reaching the
importer only through the interface's global module fragment is not
enough for MSVC: cParser::operator>> uses std::stringstream, and every
unit that parsed a float got an incomplete type.

526 headers across 161 units, derived from what each interface's template
bodies actually name.
2026-09-10 01:20:33 +02:00

56 lines
1.3 KiB
C++

/*
This Source Code Form is subject to the
terms of the Mozilla Public License, v.
2.0. If a copy of the MPL was not
distributed with this file, You can
obtain one at
http://mozilla.org/MPL/2.0/.
*/
module;
#include <deque>
#include <unordered_map>
#include <GLFW/glfw3.h>
#include <array>
export module eu07.input.editormouseinput;
import eu07.input.command;
import eu07.glm;
export {
class editormouse_input {
public:
// constructors
editormouse_input() = default;
// methods
bool
init();
void
position( double const Horizontal, double const Vertical );
inline
glm::dvec2
position() const {
return m_cursorposition; }
void
button( int const Button, int const Action );
inline
int
button( int const Button ) const {
return m_buttons[ Button ]; }
private:
// members
command_relay m_relay;
bool m_pickmodepanning { false }; // indicates mouse is in view panning mode
bool m_pickmodepanning_resync { false }; // skip the first delta after panning starts (avoids a jump when the cursor is grabbed/hidden)
glm::dvec2 m_cursorposition { 0.0 }; // stored last cursor position, used for panning
std::array<int, GLFW_MOUSE_BUTTON_LAST> m_buttons { GLFW_RELEASE };
};
//---------------------------------------------------------------------------
} // export