34 if (!motherBoard)
return;
36 if (!keyboard)
return;
37 auto matrix = keyboard->
getKeys();
39 ImGui::SetNextWindowSize({640, 200}, ImGuiCond_FirstUseEver);
48 static constexpr std::array keys = {
148 for (
const auto& key : keys) {
149 maxXY = max(maxXY, key.pos + key.size);
151 gl::vec2 available = ImGui::GetContentRegionAvail();
152 float scale = min_component(available / maxXY);
154 gl::vec2 origin = ImGui::GetCursorPos();
156 const auto& key = keys[i];
157 auto row = key.matrixPos.getRow();
158 auto column = key.matrixPos.getColumn();
159 auto mask = 1 << column;
160 bool active = !(matrix[row] & mask);
162 ImGui::SetCursorPos(origin + scale * key.pos);
163 im::StyleColor(ImGuiCol_Button, getColor(active ? imColor::KEY_ACTIVE : imColor::KEY_NOT_ACTIVE), [&]{
164 ImGui::Button(key.label, scale * key.size);
167 if (ImGui::IsItemActivated()) {
170 if (ImGui::IsItemDeactivated()) {
173 if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
void paint(MSXMotherBoard *motherBoard) override
void loadLine(std::string_view name, zstring_view value) override
void save(ImGuiTextBuffer &buf) override
std::optional< TclObject > execute(TclObject command)
A position (row, column) in a keyboard matrix.
std::span< const uint8_t, KeyMatrixPosition::NUM_ROWS > getKeys() const
Returns a pointer to the current KeyBoard matrix.
Keyboard * getKeyboard() const
Like std::string_view, but with the extra guarantee that it refers to a zero-terminated string.
void Window(const char *name, bool *p_open, ImGuiWindowFlags flags, std::invocable<> auto next)
void ID_for_range(std::integral auto count, std::invocable< int > auto next)
This file implemented 3 utility functions:
bool loadOnePersistent(std::string_view name, zstring_view value, C &c, const std::tuple< Elements... > &tup)
void savePersistent(ImGuiTextBuffer &buf, C &c, const std::tuple< Elements... > &tup)
TclObject makeTclList(Args &&... args)