Compare commits

...

2 Commits

Author SHA1 Message Date
9e2bb23c8a Классный зум 2026-02-26 19:06:36 +03:00
a1f31d76c7 Тулзы перенесены в свой каталог 2026-02-26 19:02:36 +03:00
9 changed files with 18 additions and 12 deletions

View File

@@ -8,8 +8,8 @@ const Rect_i = basic_models.Rect_i;
const Size_i = basic_models.Size_i;
const Point2_f = @import("models/basic_models.zig").Point2_f;
const Color = dvui.Color;
const tools = @import("tools.zig");
const Toolbar = @import("Toolbar.zig");
const tools = @import("toolbar/tools.zig");
const Toolbar = @import("toolbar/Toolbar.zig");
const random_document = @import("random_document.zig");
const Canvas = @This();
@@ -99,6 +99,11 @@ pub fn addZoom(self: *Canvas, value: f32) void {
self._zoom = @max(self._zoom, 0.01);
}
pub fn multZoom(self: *Canvas, value: f32) void {
self._zoom *= value;
self._zoom = @max(self._zoom, 0.01);
}
pub fn getZoom(self: Canvas) f32 {
return self._zoom;
}

View File

@@ -1,5 +1,5 @@
const Point2_f = @import("models/basic_models.zig").Point2_f;
const Canvas = @import("Canvas.zig");
const Point2_f = @import("../models/basic_models.zig").Point2_f;
const Canvas = @import("../Canvas.zig");
pub const ToolContext = struct {
canvas: *Canvas,

View File

@@ -3,7 +3,7 @@ const line = @import("tools/line.zig");
const ellipse = @import("tools/ellipse.zig");
const arc = @import("tools/arc.zig");
const broken = @import("tools/broken.zig");
const icons = @import("icons.zig");
const icons = @import("../icons.zig");
pub const default_tools = [_]Toolbar.ToolDescriptor{
.{

View File

@@ -1,5 +1,5 @@
const Tool = @import("../Tool.zig");
const shape = @import("../models/shape/shape.zig");
const shape = @import("../../models/shape/shape.zig");
fn onCanvasClick(ctx: *const Tool.ToolContext) !void {
const canvas = ctx.canvas;

View File

@@ -1,5 +1,5 @@
const Tool = @import("../Tool.zig");
const shape = @import("../models/shape/shape.zig");
const shape = @import("../../models/shape/shape.zig");
fn onCanvasClick(ctx: *const Tool.ToolContext) !void {
const canvas = ctx.canvas;

View File

@@ -1,5 +1,5 @@
const Tool = @import("../Tool.zig");
const shape = @import("../models/shape/shape.zig");
const shape = @import("../../models/shape/shape.zig");
fn onCanvasClick(ctx: *const Tool.ToolContext) !void {
const canvas = ctx.canvas;

View File

@@ -1,7 +1,7 @@
const std = @import("std");
const Canvas = @import("../Canvas.zig");
const Canvas = @import("../../Canvas.zig");
const Tool = @import("../Tool.zig");
const shape = @import("../models/shape/shape.zig");
const shape = @import("../../models/shape/shape.zig");
fn onCanvasClick(ctx: *const Tool.ToolContext) !void {
const canvas = ctx.canvas;

View File

@@ -3,7 +3,7 @@ const dvui = @import("dvui");
const dvui_ext = @import("dvui_ext.zig");
const Canvas = @import("../Canvas.zig");
const Rect_i = @import("../models/basic_models.zig").Rect_i;
const Tool = @import("../Tool.zig");
const Tool = @import("../toolbar/Tool.zig");
pub fn canvasView(canvas: *Canvas, content_rect_scale: dvui.RectScale) void {
var textured = dvui_ext.texturedBox(content_rect_scale, dvui.Rect.all(20));
@@ -135,7 +135,8 @@ fn handleCanvasZoom(canvas: *Canvas, scroll: anytype) void {
};
const doc_pt = canvas.contentPointToDocument(content_pt, natural_scale);
canvas.addZoom(y / 1000);
// canvas.addZoom(y / 1000);
canvas.multZoom(1 + y / 3000);
canvas.requestRedraw();
// Сдвигаем viewport так, чтобы точка под курсором (даже вне холста) не уезжала