use CoordinateTools

This commit is contained in:
2025-12-07 15:53:34 +08:00
parent 864048a733
commit 4e99e4030b

View File

@@ -1,5 +1,5 @@
#include "CoordinateConverter.h" #include "CoordinateConverter.h"
#include "utils/CoordinateTools.h"
CoordinateConverter::CoordinateConverter(SDL_Renderer* renderer) : m_renderer(renderer) { CoordinateConverter::CoordinateConverter(SDL_Renderer* renderer) : m_renderer(renderer) {
} }
@@ -9,17 +9,7 @@ CoordinateConverter::~CoordinateConverter() {
} }
std::optional<std::pair<int, int>> CoordinateConverter::ScreenToBoard(float screenX, float screenY, BoardArea area) { std::optional<std::pair<int, int>> CoordinateConverter::ScreenToBoard(float screenX, float screenY, BoardArea area) {
// 将窗口坐标转为逻辑坐标 auto [mouseX, mouseY] = physicalToLogical(screenX, screenY, m_renderer);
float logicalX, logicalY;
SDL_RenderCoordinatesFromWindow(
m_renderer,
static_cast<float>(screenX),
static_cast<float>(screenY),
&logicalX,
&logicalY
);
int mouseX = static_cast<int>(logicalX);
int mouseY = static_cast<int>(logicalY);
// 判断是否点击在棋盘区域内 // 判断是否点击在棋盘区域内
if (mouseX < area.x || mouseX >= area.x + area.cellSize * area.cols || if (mouseX < area.x || mouseX >= area.x + area.cellSize * area.cols ||
mouseY < area.y || mouseY >= area.y + area.cellSize * area.rows) { mouseY < area.y || mouseY >= area.y + area.cellSize * area.rows) {