mirror of
https://github.com/penpot/penpot.git
synced 2025-07-19 00:57:13 +02:00
🐛 Fix drawing shapes when dpr > 1
This commit is contained in:
parent
6831acb71d
commit
300e24b403
4 changed files with 45 additions and 39 deletions
|
@ -100,14 +100,14 @@ pub fn render_debug_tiles_for_viewbox(
|
|||
|
||||
// Renders the tiles in the viewbox
|
||||
pub fn render_debug_viewbox_tiles(render_state: &mut RenderState) {
|
||||
let scale = render_state.get_scale();
|
||||
let canvas = render_state.surfaces.canvas(SurfaceId::Debug);
|
||||
let mut paint = skia::Paint::default();
|
||||
paint.set_style(skia::PaintStyle::Stroke);
|
||||
paint.set_color(skia::Color::from_rgb(255, 0, 127));
|
||||
paint.set_stroke_width(1.);
|
||||
|
||||
let tile_size = tiles::get_tile_size(render_state.viewbox);
|
||||
let (sx, sy, ex, ey) = tiles::get_tiles_for_rect(render_state.viewbox.area, tile_size);
|
||||
let (sx, sy, ex, ey) = tiles::get_tiles_for_viewbox(render_state.viewbox, scale);
|
||||
let str_rect = format!("{} {} {} {}", sx, sy, ex, ey);
|
||||
|
||||
let debug_font = render_state.fonts.debug_font();
|
||||
|
@ -118,6 +118,7 @@ pub fn render_debug_viewbox_tiles(render_state: &mut RenderState) {
|
|||
&paint,
|
||||
);
|
||||
|
||||
let tile_size = tiles::get_tile_size(scale);
|
||||
for y in sy..=ey {
|
||||
for x in sx..=ex {
|
||||
let rect = Rect::from_xywh(
|
||||
|
@ -137,14 +138,15 @@ pub fn render_debug_viewbox_tiles(render_state: &mut RenderState) {
|
|||
}
|
||||
|
||||
pub fn render_debug_tiles(render_state: &mut RenderState) {
|
||||
let scale = render_state.get_scale();
|
||||
let canvas = render_state.surfaces.canvas(SurfaceId::Debug);
|
||||
let mut paint = skia::Paint::default();
|
||||
paint.set_style(skia::PaintStyle::Stroke);
|
||||
paint.set_color(skia::Color::from_rgb(127, 0, 255));
|
||||
paint.set_stroke_width(1.);
|
||||
|
||||
let tile_size = tiles::get_tile_size(render_state.viewbox);
|
||||
let (sx, sy, ex, ey) = tiles::get_tiles_for_rect(render_state.viewbox.area, tile_size);
|
||||
let (sx, sy, ex, ey) = tiles::get_tiles_for_viewbox(render_state.viewbox, scale);
|
||||
let tile_size = tiles::get_tile_size(scale);
|
||||
for y in sy..=ey {
|
||||
for x in sx..=ex {
|
||||
let tile = (x, y);
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
use crate::shapes::Shape;
|
||||
use crate::view::Viewbox;
|
||||
use skia_safe::{self as skia, IRect, Paint, RRect};
|
||||
|
||||
use super::{gpu_state::GpuState, tiles::Tile, tiles::TILE_SIZE};
|
||||
|
@ -145,10 +144,10 @@ impl Surfaces {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn update_render_context(&mut self, render_area: skia::Rect, viewbox: Viewbox) {
|
||||
pub fn update_render_context(&mut self, render_area: skia::Rect, scale: f32) {
|
||||
let translation = (
|
||||
-render_area.left() + self.margins.width as f32 / viewbox.zoom,
|
||||
-render_area.top() + self.margins.height as f32 / viewbox.zoom,
|
||||
-render_area.left() + self.margins.width as f32 / scale,
|
||||
-render_area.top() + self.margins.height as f32 / scale,
|
||||
);
|
||||
self.apply_mut(
|
||||
&[
|
||||
|
|
|
@ -28,34 +28,34 @@ pub fn get_tiles_for_rect(rect: skia::Rect, tile_size: f32) -> (i32, i32, i32, i
|
|||
(sx, sy, ex, ey)
|
||||
}
|
||||
|
||||
pub fn get_tiles_for_viewbox(viewbox: Viewbox) -> (i32, i32, i32, i32) {
|
||||
let tile_size = get_tile_size(viewbox);
|
||||
pub fn get_tiles_for_viewbox(viewbox: Viewbox, scale: f32) -> (i32, i32, i32, i32) {
|
||||
let tile_size = get_tile_size(scale);
|
||||
get_tiles_for_rect(viewbox.area, tile_size)
|
||||
}
|
||||
|
||||
pub fn get_tiles_for_viewbox_with_interest(
|
||||
viewbox: Viewbox,
|
||||
interest: i32,
|
||||
dpr: f32,
|
||||
) -> (i32, i32, i32, i32) {
|
||||
let (sx, sy, ex, ey) = get_tiles_for_viewbox(viewbox);
|
||||
let (sx, sy, ex, ey) = get_tiles_for_viewbox(viewbox, dpr);
|
||||
(sx - interest, sy - interest, ex + interest, ey + interest)
|
||||
}
|
||||
|
||||
pub fn get_tile_pos(viewbox: Viewbox, (x, y): Tile) -> (f32, f32) {
|
||||
pub fn get_tile_pos((x, y): Tile, scale: f32) -> (f32, f32) {
|
||||
(
|
||||
x as f32 * get_tile_size(viewbox),
|
||||
y as f32 * get_tile_size(viewbox),
|
||||
x as f32 * get_tile_size(scale),
|
||||
y as f32 * get_tile_size(scale),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn get_tile_size(viewbox: Viewbox) -> f32 {
|
||||
// TODO: * self.options.dpr() too?
|
||||
1. / viewbox.zoom * TILE_SIZE
|
||||
pub fn get_tile_size(scale: f32) -> f32 {
|
||||
1. / scale * TILE_SIZE
|
||||
}
|
||||
|
||||
pub fn get_tile_rect(viewbox: Viewbox, tile: Tile) -> skia::Rect {
|
||||
let (tx, ty) = get_tile_pos(viewbox, tile);
|
||||
let ts = get_tile_size(viewbox);
|
||||
pub fn get_tile_rect(tile: Tile, scale: f32) -> skia::Rect {
|
||||
let (tx, ty) = get_tile_pos(tile, scale);
|
||||
let ts = get_tile_size(scale);
|
||||
skia::Rect::from_xywh(tx, ty, ts, ts)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue