summaryrefslogtreecommitdiffstats
path: root/glow/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-05-20 20:28:35 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-05-20 20:28:35 +0200
commita1a5fcfd46622d5b18d1716aa2adb4659835ccf3 (patch)
tree8c9c2468151ebcc517688edc6d0d4867c11c441c /glow/src
parent720e7756f2afe30706b6b1a7fbde86b9f15e1d8c (diff)
downloadiced-a1a5fcfd46622d5b18d1716aa2adb4659835ccf3.tar.gz
iced-a1a5fcfd46622d5b18d1716aa2adb4659835ccf3.tar.bz2
iced-a1a5fcfd46622d5b18d1716aa2adb4659835ccf3.zip
Refactor `Viewport` and `Compositor`
Diffstat (limited to 'glow/src')
-rw-r--r--glow/src/backend.rs23
-rw-r--r--glow/src/quad.rs8
-rw-r--r--glow/src/window/compositor.rs16
3 files changed, 16 insertions, 31 deletions
diff --git a/glow/src/backend.rs b/glow/src/backend.rs
index fb6782e6..5e2aa837 100644
--- a/glow/src/backend.rs
+++ b/glow/src/backend.rs
@@ -47,12 +47,10 @@ impl Backend {
gl: &glow::Context,
viewport: &Viewport,
(primitive, mouse_interaction): &(Primitive, mouse::Interaction),
- scale_factor: f64,
overlay_text: &[T],
) -> mouse::Interaction {
- let (width, height) = viewport.dimensions();
- let scale_factor = scale_factor as f32;
- let transformation = viewport.transformation();
+ let viewport_size = viewport.physical_size();
+ let projection = viewport.projection();
let mut layers = Layer::generate(primitive, viewport);
layers.push(Layer::overlay(overlay_text, viewport));
@@ -60,12 +58,11 @@ impl Backend {
for layer in layers {
self.flush(
gl,
- viewport,
- scale_factor,
- transformation,
+ viewport.scale_factor() as f32,
+ projection,
&layer,
- width,
- height,
+ viewport_size.width,
+ viewport_size.height,
);
}
@@ -75,19 +72,18 @@ impl Backend {
fn flush(
&mut self,
gl: &glow::Context,
- viewport: &Viewport,
scale_factor: f32,
transformation: Transformation,
layer: &Layer<'_>,
target_width: u32,
target_height: u32,
) {
- let bounds = layer.bounds * scale_factor;
+ let bounds = (layer.bounds * scale_factor).round();
if !layer.quads.is_empty() {
self.quad_pipeline.draw(
gl,
- viewport,
+ target_height,
&layer.quads,
transformation,
scale_factor,
@@ -175,8 +171,7 @@ impl Backend {
transformation,
glow_glyph::Region {
x: bounds.x,
- y: viewport.height()
- - (bounds.y + bounds.height).min(viewport.height()),
+ y: target_height - (bounds.y + bounds.height),
width: bounds.width,
height: bounds.height,
},
diff --git a/glow/src/quad.rs b/glow/src/quad.rs
index 26424b39..fd71757f 100644
--- a/glow/src/quad.rs
+++ b/glow/src/quad.rs
@@ -1,4 +1,4 @@
-use crate::{Transformation, Viewport};
+use crate::Transformation;
use glow::HasContext;
use iced_graphics::layer;
use iced_native::Rectangle;
@@ -54,7 +54,7 @@ impl Pipeline {
pub fn draw(
&mut self,
gl: &glow::Context,
- viewport: &Viewport,
+ target_height: u32,
instances: &[layer::Quad],
transformation: Transformation,
scale: f32,
@@ -64,9 +64,7 @@ impl Pipeline {
gl.enable(glow::SCISSOR_TEST);
gl.scissor(
bounds.x as i32,
- (viewport.height()
- - (bounds.y + bounds.height).min(viewport.height()))
- as i32,
+ (target_height - (bounds.y + bounds.height)) as i32,
bounds.width as i32,
bounds.height as i32,
);
diff --git a/glow/src/window/compositor.rs b/glow/src/window/compositor.rs
index 8f770065..514904a8 100644
--- a/glow/src/window/compositor.rs
+++ b/glow/src/window/compositor.rs
@@ -13,11 +13,11 @@ pub struct Compositor {
gl: Option<glow::Context>,
}
-impl iced_native::window::Compositor for Compositor {
+impl iced_graphics::window::Compositor for Compositor {
type Settings = Settings;
type Renderer = Renderer;
type Surface = ();
- type SwapChain = Viewport;
+ type SwapChain = ();
fn new(_settings: Self::Settings) -> Self {
let connection = surfman::Connection::new().expect("Create connection");
@@ -133,16 +133,14 @@ impl iced_native::window::Compositor for Compositor {
gl.enable(glow::BLEND);
gl.blend_func(glow::SRC_ALPHA, glow::ONE_MINUS_SRC_ALPHA);
}
-
- Viewport::new(width, height)
}
fn draw<T: AsRef<str>>(
&mut self,
renderer: &mut Self::Renderer,
swap_chain: &mut Self::SwapChain,
+ viewport: &Viewport,
output: &<Self::Renderer as iced_native::Renderer>::Output,
- scale_factor: f64,
overlay: &[T],
) -> mouse::Interaction {
let gl = self.gl.as_ref().unwrap();
@@ -151,13 +149,7 @@ impl iced_native::window::Compositor for Compositor {
gl.clear(glow::COLOR_BUFFER_BIT);
}
- let mouse = renderer.backend_mut().draw(
- gl,
- swap_chain,
- output,
- scale_factor,
- overlay,
- );
+ let mouse = renderer.backend_mut().draw(gl, viewport, output, overlay);
{
let mut surface = self