Skip to content

Commit

Permalink
Flesh out the web_canvas crate a bit more
Browse files Browse the repository at this point in the history
  • Loading branch information
pcwalton committed Jul 6, 2020
1 parent 5cabc4a commit a49714e
Show file tree
Hide file tree
Showing 5 changed files with 191 additions and 57 deletions.
51 changes: 50 additions & 1 deletion canvas/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,12 @@ impl Canvas {
Canvas { scene }
}

/// Returns the inner scene.
#[inline]
pub fn scene(&self) -> &Scene {
&self.scene
}

/// Returns the inner scene, replacing it with a blank scene.
#[inline]
pub fn take_scene(&mut self) -> Scene {
Expand All @@ -98,6 +104,7 @@ impl Canvas {
mem::replace(&mut self.scene, new_scene)
}

/// Destroys this canvas and returns the inner scene.
#[inline]
pub fn into_scene(self) -> Scene {
self.scene
Expand All @@ -122,6 +129,12 @@ impl Canvas {
pub fn size(&self) -> Vector2I {
self.scene.view_box().size().ceil().to_i32()
}

pub fn set_size(&mut self, new_size: Vector2I) {
let new_view_box = RectI::new(Vector2I::default(), new_size).to_f32();
self.scene.set_bounds(new_view_box);
self.scene.set_view_box(new_view_box);
}
}

pub struct CanvasRenderingContext2D {
Expand Down Expand Up @@ -150,6 +163,13 @@ impl CanvasRenderingContext2D {
self.canvas
}

// Extensions

/// Clears the current canvas.
pub fn clear(&mut self) {
drop(self.canvas.take_scene())
}

// Drawing rectangles

#[inline]
Expand Down Expand Up @@ -184,26 +204,51 @@ impl CanvasRenderingContext2D {

// Line styles

#[inline]
pub fn line_width(&self) -> f32 {
self.current_state.line_width
}

#[inline]
pub fn set_line_width(&mut self, new_line_width: f32) {
self.current_state.line_width = new_line_width
}

#[inline]
pub fn line_cap(&self) -> LineCap {
self.current_state.line_cap
}

#[inline]
pub fn set_line_cap(&mut self, new_line_cap: LineCap) {
self.current_state.line_cap = new_line_cap
}

#[inline]
pub fn line_join(&self) -> LineJoin {
self.current_state.line_join
}

#[inline]
pub fn set_line_join(&mut self, new_line_join: LineJoin) {
self.current_state.line_join = new_line_join
}

#[inline]
pub fn miter_limit(&self) -> f32 {
self.current_state.miter_limit
}

#[inline]
pub fn set_miter_limit(&mut self, new_miter_limit: f32) {
self.current_state.miter_limit = new_miter_limit
}

#[inline]
pub fn line_dash(&mut self) -> &[f32] {
&self.current_state.line_dash
}

#[inline]
pub fn set_line_dash(&mut self, mut new_line_dash: Vec<f32>) {
// Duplicate and concatenate if an odd number of dashes are present.
Expand All @@ -216,6 +261,11 @@ impl CanvasRenderingContext2D {
self.current_state.line_dash = new_line_dash
}

#[inline]
pub fn line_dash_offset(&self) -> f32 {
self.current_state.line_dash_offset
}

#[inline]
pub fn set_line_dash_offset(&mut self, new_line_dash_offset: f32) {
self.current_state.line_dash_offset = new_line_dash_offset
Expand Down Expand Up @@ -671,7 +721,6 @@ impl Path2D {

#[inline]
pub fn move_to(&mut self, to: Vector2F) {
// TODO(pcwalton): Cull degenerate contours.
self.flush_current_contour();
self.current_contour.push_endpoint(to);
}
Expand Down
4 changes: 3 additions & 1 deletion demo/common/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,9 @@ impl<W> DemoApp<W> where W: Window {
let viewport = self.window.viewport(self.ui_model.mode.view(0));
self.scene_proxy.set_view_box(RectF::new(Vector2F::zero(),
viewport.size().to_f32()));
self.renderer.set_main_framebuffer_size(self.window_size.device_size());
self.renderer.options_mut().dest =
DestFramebuffer::full_window(self.window_size.device_size());
self.renderer.dest_framebuffer_size_changed();
self.dirty = true;
}
Event::MouseDown(new_position) => {
Expand Down
3 changes: 2 additions & 1 deletion renderer/src/gpu/renderer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,8 @@ impl<D> Renderer<D> where D: Device {
}

#[inline]
pub fn set_main_framebuffer_size(&mut self, new_framebuffer_size: Vector2I) {
pub fn dest_framebuffer_size_changed(&mut self) {
let new_framebuffer_size = self.core.main_viewport().size();
if let Some(ref mut debug_ui_presenter) = self.debug_ui_presenter {
debug_ui_presenter.ui_presenter.set_framebuffer_size(new_framebuffer_size);
}
Expand Down
12 changes: 11 additions & 1 deletion web_canvas/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,14 @@ wasm-bindgen-test = "0.3"

[profile.release]
# Tell `rustc` to optimize for small code size.
opt-level = "s"
# opt-level = "s"
debug = 1

[package.metadata.wasm-pack.profile.profiling]
wasm-opt = false
dwarf-debug-info = true

[package.metadata.wasm-pack.profile.profiling.wasm-bindgen]
debug-js-glue = false
demangle-name-section = true
dwarf-debug-info = true
Loading

0 comments on commit a49714e

Please sign in to comment.