Позиция мыши в координатах документа
This commit is contained in:
@@ -22,6 +22,7 @@ pub fn canvasView(canvas: *Canvas, content_rect_scale: dvui.RectScale) void {
|
||||
{
|
||||
drawCanvasContent(canvas, scroll);
|
||||
handleCanvasZoom(canvas, scroll);
|
||||
handleCanvasMouse(canvas, scroll);
|
||||
}
|
||||
scroll.deinit();
|
||||
|
||||
@@ -34,7 +35,7 @@ pub fn canvasView(canvas: *Canvas, content_rect_scale: dvui.RectScale) void {
|
||||
|
||||
fn drawCanvasContent(canvas: *Canvas, scroll: anytype) void {
|
||||
const natural_scale = if (canvas.native_scaling) 1 else dvui.windowNaturalScale();
|
||||
const img_size = canvas.getScaledImageSize();
|
||||
const img_size = canvas.getZoomedImageSize();
|
||||
const viewport_rect = scroll.data().contentRect();
|
||||
const scroll_current = dvui.Point{ .x = canvas.scroll.viewport.x, .y = canvas.scroll.viewport.y };
|
||||
|
||||
@@ -118,3 +119,27 @@ fn handleCanvasZoom(canvas: *Canvas, scroll: anytype) void {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Обрабатывает события мыши: переводит позицию курсора в координаты документа и сохраняет в canvas.cursor_document_point.
|
||||
fn handleCanvasMouse(canvas: *Canvas, scroll: anytype) void {
|
||||
const natural_scale = if (canvas.native_scaling) 1 else dvui.windowNaturalScale();
|
||||
|
||||
for (dvui.events()) |*e| {
|
||||
switch (e.evt) {
|
||||
.mouse => |*mouse| {
|
||||
if (mouse.action != .press or mouse.button != .left) continue;
|
||||
if (!dvui.eventMatchSimple(e, scroll.data())) continue;
|
||||
|
||||
const viewport_pt = scroll.data().contentRectScale().pointFromPhysical(mouse.p);
|
||||
const content_pt = dvui.Point{
|
||||
.x = viewport_pt.x + canvas.scroll.viewport.x,
|
||||
.y = viewport_pt.y + canvas.scroll.viewport.y,
|
||||
};
|
||||
canvas.cursor_document_point = canvas.contentPointToDocument(content_pt, natural_scale);
|
||||
if (canvas.cursor_document_point) |point|
|
||||
std.debug.print("cursor_document_point: {}\n", .{point});
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user