From ad0d2fda0ae0450478e8e42d8ad71291212caf4c Mon Sep 17 00:00:00 2001 From: Duhan BALCI Date: Mon, 6 Apr 2026 09:29:09 +0300 Subject: [PATCH] visual testing & renderer improvement --- .../src/components/editor/LayoutRenderer.vue | 21 +- layout-engine/src/pdf_render.rs | 332 +++++++++++++----- .../tests/snapshots/visual_test_reference.png | Bin 34399 -> 34403 bytes 3 files changed, 255 insertions(+), 98 deletions(-) diff --git a/frontend/src/components/editor/LayoutRenderer.vue b/frontend/src/components/editor/LayoutRenderer.vue index bba765f..51ee3aa 100644 --- a/frontend/src/components/editor/LayoutRenderer.vue +++ b/frontend/src/components/editor/LayoutRenderer.vue @@ -84,9 +84,9 @@ function shapeStyle(el: ElementLayout): Record { function lineStyle(el: ElementLayout): Record { const st = el.style return { - borderTop: `${(st.strokeWidth ?? 0.5) * props.scale}px solid ${st.strokeColor ?? '#000'}`, + backgroundColor: st.strokeColor ?? '#000', width: '100%', - height: '0', + height: '100%', } } @@ -96,12 +96,17 @@ async function renderBarcodeToCanvas(canvas: HTMLCanvasElement, format: string, if (!value || !generateBarcode) return try { - // WASM'dan yüksek çözünürlüklü pixel verisi al - // QR her zaman kare + // Eleman boyutlarından piksel boyutlarını hesapla (PDF ile aynı mantık: pt * 4) + // data-el-w ve data-el-h mm cinsinden, MM_TO_PT = 72/25.4 = 2.83465 + const elWmm = parseFloat(canvas.dataset.elW || '30') + const elHmm = parseFloat(canvas.dataset.elH || '15') + const MM_TO_PT = 72 / 25.4 const isQr = format === 'qr' - const size = isQr ? 300 : 400 - const height = isQr ? 300 : 150 - const result = await generateBarcode(format, value, size, height, isQr ? false : includeText) + const wPt = elWmm * MM_TO_PT + const hPt = elHmm * MM_TO_PT + const size = Math.max(1, Math.round(wPt * 4)) + const barcodeHeight = Math.max(1, Math.round(hPt * 4)) + const result = await generateBarcode(format, value, size, barcodeHeight, isQr ? false : includeText) if (!result) return // Canvas boyutlarını WASM çıktısına ayarla (crisp rendering) @@ -248,6 +253,8 @@ watch( :data-format="el.content.format" :data-value="el.content.value" :data-include-text="el.style.barcodeIncludeText ?? (el.content.format === 'ean13' || el.content.format === 'ean8')" + :data-el-w="el.width_mm" + :data-el-h="el.height_mm" :style="{ width: '100%', height: '100%', display: 'block' }" />
diff --git a/layout-engine/src/pdf_render.rs b/layout-engine/src/pdf_render.rs index cfe7faa..8ebd876 100644 --- a/layout-engine/src/pdf_render.rs +++ b/layout-engine/src/pdf_render.rs @@ -46,6 +46,52 @@ fn parse_color(hex: &str) -> rgb::Color { rgb::Color::new(r, g, b) } +/// Rounded rectangle path oluştur. radius 0 ise düz dikdörtgen. +fn build_rect_path(x: f32, y: f32, w: f32, h: f32, radius: f32) -> Option { + let mut pb = PathBuilder::new(); + if radius <= 0.0 { + if let Some(rect) = krilla::geom::Rect::from_xywh(x, y, w, h) { + pb.push_rect(rect); + } + } else { + // Radius'u yarım kenar uzunluğuyla sınırla + let r = radius.min(w / 2.0).min(h / 2.0); + // Cubic bezier kappa faktörü (daire yaklaşımı) + let k = r * 0.5522848; + + // Sağ üst köşeden başla, saat yönünde + pb.move_to(x + r, y); + pb.line_to(x + w - r, y); + pb.cubic_to(x + w - r + k, y, x + w, y + r - k, x + w, y + r); + pb.line_to(x + w, y + h - r); + pb.cubic_to(x + w, y + h - r + k, x + w - r + k, y + h, x + w - r, y + h); + pb.line_to(x + r, y + h); + pb.cubic_to(x + r - k, y + h, x, y + h - r + k, x, y + h - r); + pb.line_to(x, y + r); + pb.cubic_to(x, y + r - k, x + r - k, y, x + r, y); + pb.close(); + } + pb.finish() +} + +/// Ellipse path oluştur (4 cubic bezier ile) +fn build_ellipse_path(x: f32, y: f32, w: f32, h: f32) -> Option { + let mut pb = PathBuilder::new(); + let cx = x + w / 2.0; + let cy = y + h / 2.0; + let rx = w / 2.0; + let ry = h / 2.0; + let kx = rx * 0.5522848; + let ky = ry * 0.5522848; + pb.move_to(cx, cy - ry); + pb.cubic_to(cx + kx, cy - ry, cx + rx, cy - ky, cx + rx, cy); + pb.cubic_to(cx + rx, cy + ky, cx + kx, cy + ry, cx, cy + ry); + pb.cubic_to(cx - kx, cy + ry, cx - rx, cy + ky, cx - rx, cy); + pb.cubic_to(cx - rx, cy - ky, cx - kx, cy - ry, cx, cy - ry); + pb.close(); + pb.finish() +} + fn fill_from_color(color: rgb::Color) -> Fill { Fill { paint: color.into(), @@ -54,18 +100,30 @@ fn fill_from_color(color: rgb::Color) -> Fill { } } +/// Font metrikleri — ascender ve descender oranları (unitsPerEm'e bölünmüş) +#[derive(Clone, Copy)] +struct FontMetrics { + /// sTypoAscender / unitsPerEm (pozitif, genelde 0.7–1.1) + ascender: f32, + /// |sTypoDescender| / unitsPerEm (pozitif, genelde 0.2–0.4) + descender: f32, +} + /// Font koleksiyonu — family + weight + italic → KrillaFont mapping struct FontCollection { /// (family_lower, is_bold, is_italic) → KrillaFont fonts: HashMap<(String, bool, bool), KrillaFont>, /// Fallback font (ilk yüklenen regular) default: Option, + /// Font metrikleri: (family_lower, is_bold) → FontMetrics + metrics: HashMap<(String, bool), FontMetrics>, } impl FontCollection { fn new(font_data: &[FontData]) -> Self { let mut fonts = HashMap::new(); let mut default = None; + let mut metrics = HashMap::new(); for fd in font_data { let Some(font) = KrillaFont::new( @@ -84,6 +142,11 @@ impl FontCollection { default = Some(font.clone()); } + // Font metriklerini OS/2 tablosundan oku + if let Some(m) = read_font_metrics(&fd.data) { + metrics.insert((family_lower.clone(), is_bold), m); + } + fonts.insert((family_lower.clone(), is_bold, is_italic), font); } @@ -94,7 +157,7 @@ impl FontCollection { } } - Self { fonts, default } + Self { fonts, default, metrics } } fn get(&self, family: Option<&str>, weight: Option<&str>) -> Option<&KrillaFont> { @@ -107,6 +170,80 @@ impl FontCollection { .or_else(|| self.fonts.get(&(family_lower, false, false))) .or(self.default.as_ref()) } + + /// CSS line-height: 1.2 modeline uygun baseline offset hesapla (pt cinsinden). + /// + /// CSS modeli: + /// content_height = (ascender + |descender|) * font_size + /// half_leading = (line_height - content_height) / 2 + /// baseline_from_top = half_leading + ascender * font_size + fn baseline_offset(&self, family: Option<&str>, weight: Option<&str>, font_size: f32) -> f32 { + let is_bold = matches!(weight, Some("bold")); + let family_lower = family.unwrap_or("noto sans").to_lowercase(); + + let m = self.metrics + .get(&(family_lower.clone(), is_bold)) + .or_else(|| self.metrics.get(&(family_lower, false))) + .copied(); + + match m { + Some(m) => { + let content_height = (m.ascender + m.descender) * font_size; + let line_height = font_size * 1.2; + let half_leading = (line_height - content_height) / 2.0; + half_leading + m.ascender * font_size + } + None => font_size * 0.8, // Fallback + } + } +} + +/// TTF OS/2 tablosundan font metriklerini oku +fn read_font_metrics(data: &[u8]) -> Option { + let units_per_em = read_units_per_em(data)?; + if units_per_em == 0 { + return None; + } + + let table_offset = find_os2_table(data)?; + // sTypoAscender: offset 68 (int16), sTypoDescender: offset 70 (int16, negatif) + if table_offset + 72 > data.len() { + return None; + } + let ascender = i16::from_be_bytes([data[table_offset + 68], data[table_offset + 69]]); + let descender = i16::from_be_bytes([data[table_offset + 70], data[table_offset + 71]]); + + Some(FontMetrics { + ascender: ascender as f32 / units_per_em as f32, + descender: descender.unsigned_abs() as f32 / units_per_em as f32, + }) +} + +/// TTF head tablosundan unitsPerEm oku +fn read_units_per_em(data: &[u8]) -> Option { + if data.len() < 12 { + return None; + } + let num_tables = u16::from_be_bytes([data[4], data[5]]) as usize; + let mut offset = 12; + for _ in 0..num_tables { + if offset + 16 > data.len() { + break; + } + let tag = &data[offset..offset + 4]; + if tag == b"head" { + let table_offset = + u32::from_be_bytes([data[offset + 8], data[offset + 9], data[offset + 10], data[offset + 11]]) + as usize; + // unitsPerEm: head tablosunda offset 18 (uint16) + if table_offset + 20 <= data.len() { + return Some(u16::from_be_bytes([data[table_offset + 18], data[table_offset + 19]])); + } + return None; + } + offset += 16; + } + None } /// TTF OS/2 tablosunun offset'ini bul @@ -228,7 +365,7 @@ fn render_element( render_text(surface, x, y, w, h, value, &el.style, fonts, measurer); } ResolvedContent::Line => { - render_line(surface, x, y, w, &el.style); + render_line(surface, x, y, w, h, &el.style); } ResolvedContent::Image { src } => { render_image(surface, x, y, w, h, src); @@ -275,60 +412,68 @@ fn render_shape( return; } - if let Some(ref bg) = style.background_color { - surface.set_fill(Some(fill_from_color(parse_color(bg)))); - } else { - surface.set_fill(None); - } + let shape_type = match content { + Some(ResolvedContent::Shape { shape_type }) => shape_type.as_str(), + _ => "rectangle", + }; + + let rect_radius = |s: &ResolvedStyle| -> f32 { + if shape_type == "rounded_rectangle" { + s.border_radius.map(|r| mm(r)).unwrap_or(mm(3.0)) + } else { + s.border_radius.map(|r| mm(r)).unwrap_or(0.0) + } + }; if has_border { - let border_color = parse_color(style.border_color.as_deref().unwrap_or("#000000")); let border_width = mm(style.border_width.unwrap_or(0.5)); + let border_color = parse_color(style.border_color.as_deref().unwrap_or("#000000")); + let inset = border_width / 2.0; + + // Fill + stroke tek path ile — anti-aliasing uyumu + if let Some(ref bg) = style.background_color { + surface.set_fill(Some(fill_from_color(parse_color(bg)))); + } else { + surface.set_fill(None); + } surface.set_stroke(Some(Stroke { paint: border_color.into(), width: border_width, opacity: NormalizedF32::ONE, ..Default::default() })); - } else { - surface.set_stroke(None); - } - let shape_type = match content { - Some(ResolvedContent::Shape { shape_type }) => shape_type.as_str(), - _ => "rectangle", - }; - - let path = match shape_type { - "ellipse" => { - let mut pb = PathBuilder::new(); - let cx = x + w / 2.0; - let cy = y + h / 2.0; - let rx = w / 2.0; - let ry = h / 2.0; - // Approximate ellipse with 4 cubic bezier curves - let kx = rx * 0.5522848; - let ky = ry * 0.5522848; - pb.move_to(cx, cy - ry); - pb.cubic_to(cx + kx, cy - ry, cx + rx, cy - ky, cx + rx, cy); - pb.cubic_to(cx + rx, cy + ky, cx + kx, cy + ry, cx, cy + ry); - pb.cubic_to(cx - kx, cy + ry, cx - rx, cy + ky, cx - rx, cy); - pb.cubic_to(cx - rx, cy - ky, cx - kx, cy - ry, cx, cy - ry); - pb.close(); - pb.finish() - } - _ => { - // rectangle / rounded_rectangle - let mut pb = PathBuilder::new(); - if let Some(rect) = krilla::geom::Rect::from_xywh(x, y, w, h) { - pb.push_rect(rect); + let path = match shape_type { + "ellipse" => build_ellipse_path( + x + inset, y + inset, + w - border_width, h - border_width, + ), + _ => { + let radius = rect_radius(style); + build_rect_path( + x + inset, y + inset, + w - border_width, h - border_width, + (radius - inset).max(0.0), + ) } - pb.finish() + }; + if let Some(p) = path { + surface.draw_path(&p); } - }; + } else { + // Sadece fill, border yok + surface.set_fill(Some(fill_from_color(parse_color( + style.background_color.as_deref().unwrap_or("#ffffff"), + )))); + surface.set_stroke(None); - if let Some(p) = path { - surface.draw_path(&p); + let path = match shape_type { + "ellipse" => build_ellipse_path(x, y, w, h), + _ => build_rect_path(x, y, w, h, rect_radius(style)), + }; + if let Some(p) = path { + surface.draw_path(&p); + } } surface.set_fill(None); @@ -346,8 +491,9 @@ fn render_checkbox( ) { let border_color = parse_color(style.border_color.as_deref().unwrap_or("#333333")); let border_width = mm(style.border_width.unwrap_or(0.3)); + let inset = border_width / 2.0; - // Draw box outline + // Draw box outline (inset for CSS border-box match) surface.set_fill(None); surface.set_stroke(Some(Stroke { paint: border_color.into(), @@ -356,14 +502,11 @@ fn render_checkbox( ..Default::default() })); - let rect_path = { - let mut pb = PathBuilder::new(); - if let Some(rect) = krilla::geom::Rect::from_xywh(x, y, w, h) { - pb.push_rect(rect); - } - pb.finish() - }; - if let Some(p) = rect_path { + if let Some(p) = build_rect_path( + x + inset, y + inset, + w - border_width, h - border_width, + 0.0, + ) { surface.draw_path(&p); } @@ -413,40 +556,44 @@ fn render_container_bg( return; } - // Fill - if let Some(ref bg) = style.background_color { - surface.set_fill(Some(fill_from_color(parse_color(bg)))); - } else { - surface.set_fill(None); - } + let radius = style.border_radius.map(|r| mm(r)).unwrap_or(0.0); - // Stroke if has_border { - let border_color = parse_color(style.border_color.as_deref().unwrap_or("#000000")); let border_width = mm(style.border_width.unwrap_or(0.5)); + let border_color = parse_color(style.border_color.as_deref().unwrap_or("#000000")); + let inset = border_width / 2.0; + + // CSS border-box: stroke path'i border_width/2 içeri çek. + // Tek draw_path ile hem fill hem stroke çizerek anti-aliasing uyumunu sağla. + if let Some(ref bg) = style.background_color { + surface.set_fill(Some(fill_from_color(parse_color(bg)))); + } else { + surface.set_fill(None); + } surface.set_stroke(Some(Stroke { paint: border_color.into(), width: border_width, opacity: NormalizedF32::ONE, ..Default::default() })); - } else { - surface.set_stroke(None); - } - - let rect_path = { - let mut pb = PathBuilder::new(); - if let Some(rect) = krilla::geom::Rect::from_xywh(x, y, w, h) { - pb.push_rect(rect); + if let Some(path) = build_rect_path( + x + inset, y + inset, + w - border_width, h - border_width, + (radius - inset).max(0.0), + ) { + surface.draw_path(&path); + } + } else { + // Sadece background, border yok + surface.set_fill(Some(fill_from_color(parse_color( + style.background_color.as_deref().unwrap_or("#ffffff"), + )))); + surface.set_stroke(None); + if let Some(path) = build_rect_path(x, y, w, h, radius) { + surface.draw_path(&path); } - pb.finish() - }; - - if let Some(path) = rect_path { - surface.draw_path(&path); } - // Reset surface.set_fill(None); surface.set_stroke(None); } @@ -483,8 +630,12 @@ fn render_text( surface.set_fill(Some(fill_from_color(color))); surface.set_stroke(None); - // Text baseline: y + ascent (yaklaşık font_size * 0.8) - let baseline_y = y + font_size * 0.8; + // Text baseline: CSS line-height 1.2 modeline uygun hesapla + let baseline_y = y + fonts.baseline_offset( + style.font_family.as_deref(), + style.font_weight.as_deref(), + font_size, + ); // Hizalama — cosmic-text ile text genişliğini ölçerek gerçek pozisyon hesapla let text_x = match style.text_align.as_deref() { @@ -561,7 +712,7 @@ fn render_rich_text( .iter() .map(|s| s.font_size.map(|f| f as f32).unwrap_or(default_font_size)) .fold(0.0f32, f32::max); - let baseline_y = y + max_font_size * 0.8; + let baseline_y = y + fonts.baseline_offset(default_family, default_weight, max_font_size); let mut cursor_x = line_start_x; @@ -607,6 +758,7 @@ fn render_line( x: f32, y: f32, w: f32, + h: f32, style: &ResolvedStyle, ) { let stroke_color = style @@ -614,29 +766,27 @@ fn render_line( .as_deref() .map(parse_color) .unwrap_or(rgb::Color::new(0, 0, 0)); - let stroke_width = mm(style.stroke_width.unwrap_or(0.5)); - surface.set_fill(None); - surface.set_stroke(Some(Stroke { - paint: stroke_color.into(), - width: stroke_width, - opacity: NormalizedF32::ONE, - ..Default::default() - })); + // Çizgiyi filled rectangle olarak çiz — CSS borderTop ile aynı davranış. + // Stroke kullanmak sub-pixel anti-aliasing farkları yaratır. + surface.set_fill(Some(fill_from_color(stroke_color))); + surface.set_stroke(None); - let line_y = y + stroke_width / 2.0; - let path = { + let rect_path = { let mut pb = PathBuilder::new(); - pb.move_to(x, line_y); - pb.line_to(x + w, line_y); + // Eleman yüksekliği layout engine tarafından stroke_width olarak hesaplandı. + // Tüm eleman alanını dolduran ince dikdörtgen çiz. + if let Some(rect) = krilla::geom::Rect::from_xywh(x, y, w, h) { + pb.push_rect(rect); + } pb.finish() }; - if let Some(p) = path { + if let Some(p) = rect_path { surface.draw_path(&p); } - surface.set_stroke(None); + surface.set_fill(None); } fn render_image( diff --git a/layout-engine/tests/snapshots/visual_test_reference.png b/layout-engine/tests/snapshots/visual_test_reference.png index 378ed3b362972bbfc02710263099d65fc6c36f59..ef5df45ee5b190c5895e02004c4c14972b686582 100644 GIT binary patch delta 25696 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 PZ*J+E-YD0*AO8OU>4&fl literal 34399 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