summaryrefslogtreecommitdiffstats
path: root/core/src/rendering.rs
diff options
context:
space:
mode:
authorMinijackson <minijackson@riseup.net>2022-12-29 01:40:08 +0100
committerMinijackson <minijackson@riseup.net>2022-12-29 01:40:08 +0100
commit9c15b76c5a6355902b2a105a7c6ee93f6b5016dc (patch)
tree44cacfe756169f7b3d3cc23f875864683ba2af74 /core/src/rendering.rs
parent30f7d39ca2ed4590b5d356b1a4c024d11156a383 (diff)
downloaddiaphragm-9c15b76c5a6355902b2a105a7c6ee93f6b5016dc.tar.gz
diaphragm-9c15b76c5a6355902b2a105a7c6ee93f6b5016dc.zip
WIP v2: text works, primitives works in Lua
Diffstat (limited to 'core/src/rendering.rs')
-rw-r--r--core/src/rendering.rs53
1 files changed, 31 insertions, 22 deletions
diff --git a/core/src/rendering.rs b/core/src/rendering.rs
index f7a0189..9c9f9e4 100644
--- a/core/src/rendering.rs
+++ b/core/src/rendering.rs
@@ -1,7 +1,7 @@
1use super::core_shapes::*; 1use super::core_shapes::*;
2use super::styles::{DefinedDashStyle, DefinedStrokeStyle, FillStyle, Pattern}; 2use super::styles::{DefinedDashStyle, DefinedStrokeStyle, FillStyle, Pattern};
3use super::text::{DefinedFontDescription, FontDescription}; 3use super::text::{DefinedFontDescription, FontDescription};
4use super::types::DefinedShapeContext; 4use super::types::DefinedCoreShapeContext;
5 5
6pub trait Renderer { 6pub trait Renderer {
7 fn move_to(&mut self, x: f64, y: f64); 7 fn move_to(&mut self, x: f64, y: f64);
@@ -20,7 +20,16 @@ pub trait Renderer {
20} 20}
21 21
22pub trait Render { 22pub trait Render {
23 fn render(&self, context: DefinedShapeContext, renderer: &mut dyn Renderer); 23 fn render(&self, context: DefinedCoreShapeContext, renderer: &mut dyn Renderer);
24}
25
26impl Render for DefinedCoreShape {
27 fn render(&self, context: DefinedCoreShapeContext, renderer: &mut dyn Renderer) {
28 match self {
29 Self::Rectangle(r) => r.render(context, renderer),
30 Self::Text(t) => t.render(context, renderer),
31 }
32 }
24} 33}
25 34
26fn draw(fill: &FillStyle, stroke: &DefinedStrokeStyle, renderer: &mut dyn Renderer) { 35fn draw(fill: &FillStyle, stroke: &DefinedStrokeStyle, renderer: &mut dyn Renderer) {
@@ -47,7 +56,7 @@ fn draw(fill: &FillStyle, stroke: &DefinedStrokeStyle, renderer: &mut dyn Render
47} 56}
48 57
49impl Render for Rectangle { 58impl Render for Rectangle {
50 fn render(&self, context: DefinedShapeContext, renderer: &mut dyn Renderer) { 59 fn render(&self, context: DefinedCoreShapeContext, renderer: &mut dyn Renderer) {
51 let bounds = &context.bounds; 60 let bounds = &context.bounds;
52 renderer.rectangle(bounds.left, bounds.top, bounds.width, bounds.height); 61 renderer.rectangle(bounds.left, bounds.top, bounds.width, bounds.height);
53 draw(&context.fill, &context.stroke, renderer); 62 draw(&context.fill, &context.stroke, renderer);
@@ -55,7 +64,7 @@ impl Render for Rectangle {
55} 64}
56 65
57impl Render for DefinedText { 66impl Render for DefinedText {
58 fn render(&self, context: DefinedShapeContext, renderer: &mut dyn Renderer) { 67 fn render(&self, context: DefinedCoreShapeContext, renderer: &mut dyn Renderer) {
59 // TODO: select font, style, text shaping (renderer specific), etc. 68 // TODO: select font, style, text shaping (renderer specific), etc.
60 let bounds = &context.bounds; 69 let bounds = &context.bounds;
61 //renderer.move_to(bounds.left, bounds.top + self.font.size); 70 //renderer.move_to(bounds.left, bounds.top + self.font.size);
@@ -66,21 +75,21 @@ impl Render for DefinedText {
66 } 75 }
67} 76}
68 77
69impl Render for DefinedStraightPath { 78// impl Render for DefinedStraightPath {
70 fn render(&self, context: DefinedShapeContext, renderer: &mut dyn Renderer) { 79// fn render(&self, context: DefinedShapeContext, renderer: &mut dyn Renderer) {
71 let mut iter = self.points.iter(); 80// let mut iter = self.points.iter();
72 81//
73 let first_point = match iter.next() { 82// let first_point = match iter.next() {
74 Some(point) => point, 83// Some(point) => point,
75 None => return, 84// None => return,
76 }; 85// };
77 86//
78 renderer.move_to(first_point.x, first_point.y); 87// renderer.move_to(first_point.x, first_point.y);
79 88//
80 for point in iter { 89// for point in iter {
81 renderer.line_to(point.x, point.y); 90// renderer.line_to(point.x, point.y);
82 } 91// }
83 92//
84 draw(&context.fill, &context.stroke, renderer); 93// draw(&context.fill, &context.stroke, renderer);
85 } 94// }
86} 95// }