Commit Diff


commit - 929b6e98c73679544243b44af3cc67d86e8e998b
commit + 1f0257d4d8969af8d472921bc67ce67fce21d69e
blob - e00e263acc3a9da4e638333a19ba840ec67a865f
blob + 2f0add7f6aa1793636f6ffca3472cc8c0b39d658
--- ppa6-gui/src/main.rs
+++ ppa6-gui/src/main.rs
@@ -1,83 +1,13 @@
 use std::{convert::identity, fmt::{self, Display, Formatter}, sync::Arc};
 
-use iced::{advanced::{layout, renderer::Quad, Widget}, application, widget::{button, column, pick_list, row, text, text_input}, Color, Element, Length, Rectangle, Size, Task};
+use iced::{application, widget::{button, column, pick_list, row, text, text_input}, Element, Task};
 use ppa6::{usb_context, Context, Device, Printer};
+use crate::docview::DocumentView;
 
+mod docview;
+
 type Document = ppa6::Document<'static>;
 
-struct DocumentView(Arc<Document>);
-
-impl<Msg, Theme, Renderer> Widget<Msg, Theme, Renderer> for DocumentView
-where
-	Renderer: iced::advanced::renderer::Renderer
-{
-	fn size(&self) -> iced::Size<iced::Length> {
-		Size {
-			width: Length::Fill,
-			height: Length::Fill,
-		}
-	}
-	fn layout(
-        &self,
-        _tree: &mut iced::advanced::widget::Tree,
-        _renderer: &Renderer,
-        limits: &layout::Limits,
-    ) -> layout::Node {
-		let mut w = self.0.width() as f32;
-		let mut h = self.0.height() as f32;
-		let s = limits.max();
-
-		h *= s.width / w;
-		w = s.width;
-		if h > s.height {
-			w *= s.height / h;
-			h = s.height;
-		}
-
-		layout::Node::new(Size::new(w, h))
-	}
-
-	fn draw(
-        &self,
-        _tree: &iced::advanced::widget::Tree,
-        renderer: &mut Renderer,
-        _theme: &Theme,
-        _style: &iced::advanced::renderer::Style,
-        layout: iced::advanced::Layout<'_>,
-        _cursor: iced::advanced::mouse::Cursor,
-        _viewport: &iced::Rectangle,
-    ) {
-		let doc = &self.0;
-		let b = layout.bounds();
-		let w = b.width / doc.width() as f32;
-		let h = b.height / doc.height() as f32;
-		for y in 0..doc.height() {
-			for x in 0..doc.width() {
-				let pixel = self.0.get(x, y).unwrap();
-				let color = if pixel { Color::BLACK } else { Color::WHITE };
-				renderer.fill_quad(Quad {
-					bounds: Rectangle {
-						x: b.x + w * x as f32,
-						y: b.y + h * y as f32,
-						width: w,
-						height: h,
-					},
-					..Quad::default()
-				}, color);
-			}
-		}
-	}
-}
-
-impl<'a, Msg, Theme, Renderer> From<DocumentView> for Element<'a, Msg, Theme, Renderer>
-where
-	Renderer: iced::advanced::renderer::Renderer
-{
-	fn from(value: DocumentView) -> Self {
-		Self::new(value)
-	}
-}
-
 struct App {
 	ctx: Arc<Context>,
 	printer: Option<Printer>,
blob - /dev/null
blob + 8bf4966a932330f7a820d592faeced45745aa050 (mode 644)
--- /dev/null
+++ ppa6-gui/src/docview.rs
@@ -0,0 +1,79 @@
+use std::sync::Arc;
+
+use iced::{advanced::{layout, renderer::Quad, Widget}, Color, Element, Length, Rectangle, Size};
+
+use crate::Document;
+
+
+pub struct DocumentView(pub Arc<Document>);
+
+impl<Msg, Theme, Renderer> Widget<Msg, Theme, Renderer> for DocumentView
+where
+	Renderer: iced::advanced::renderer::Renderer
+{
+	fn size(&self) -> iced::Size<iced::Length> {
+		Size {
+			width: Length::Fill,
+			height: Length::Fill,
+		}
+	}
+	fn layout(
+        &self,
+        _tree: &mut iced::advanced::widget::Tree,
+        _renderer: &Renderer,
+        limits: &layout::Limits,
+    ) -> layout::Node {
+		let mut w = self.0.width() as f32;
+		let mut h = self.0.height() as f32;
+		let s = limits.max();
+
+		h *= s.width / w;
+		w = s.width;
+		if h > s.height {
+			w *= s.height / h;
+			h = s.height;
+		}
+
+		layout::Node::new(Size::new(w, h))
+	}
+
+	fn draw(
+        &self,
+        _tree: &iced::advanced::widget::Tree,
+        renderer: &mut Renderer,
+        _theme: &Theme,
+        _style: &iced::advanced::renderer::Style,
+        layout: iced::advanced::Layout<'_>,
+        _cursor: iced::advanced::mouse::Cursor,
+        _viewport: &iced::Rectangle,
+    ) {
+		let doc = &self.0;
+		let b = layout.bounds();
+		let w = b.width / doc.width() as f32;
+		let h = b.height / doc.height() as f32;
+		for y in 0..doc.height() {
+			for x in 0..doc.width() {
+				let pixel = self.0.get(x, y).unwrap();
+				let color = if pixel { Color::BLACK } else { Color::WHITE };
+				renderer.fill_quad(Quad {
+					bounds: Rectangle {
+						x: b.x + w * x as f32,
+						y: b.y + h * y as f32,
+						width: w,
+						height: h,
+					},
+					..Quad::default()
+				}, color);
+			}
+		}
+	}
+}
+
+impl<'a, Msg, Theme, Renderer> From<DocumentView> for Element<'a, Msg, Theme, Renderer>
+where
+	Renderer: iced::advanced::renderer::Renderer
+{
+	fn from(value: DocumentView) -> Self {
+		Self::new(value)
+	}
+}