summaryrefslogtreecommitdiffstats
path: root/glow
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2021-11-07 15:15:33 +0700
committerLibravatar GitHub <noreply@github.com>2021-11-07 15:15:33 +0700
commiteafad00af2a9bae9f3ed8124e2a6f6e59ee5d253 (patch)
tree76413948c9c9723075189d51d4c2e02c0f8fdd23 /glow
parent61c747b53589d98f477fea95f85d2ea5349666d3 (diff)
parent07b5097bc92ced376d09115d787ff1d2ebe00836 (diff)
downloadiced-eafad00af2a9bae9f3ed8124e2a6f6e59ee5d253.tar.gz
iced-eafad00af2a9bae9f3ed8124e2a6f6e59ee5d253.tar.bz2
iced-eafad00af2a9bae9f3ed8124e2a6f6e59ee5d253.zip
Merge pull request #1110 from iced-rs/remove-renderer-traits
Reduce the surface of the `Renderer` APIs
Diffstat (limited to 'glow')
-rw-r--r--glow/src/backend.rs19
-rw-r--r--glow/src/lib.rs4
-rw-r--r--glow/src/widget.rs9
-rw-r--r--glow/src/widget/button.rs5
-rw-r--r--glow/src/widget/checkbox.rs3
-rw-r--r--glow/src/widget/container.rs3
-rw-r--r--glow/src/widget/pane_grid.rs7
-rw-r--r--glow/src/widget/pick_list.rs4
-rw-r--r--glow/src/widget/progress_bar.rs9
-rw-r--r--glow/src/widget/radio.rs2
-rw-r--r--glow/src/widget/rule.rs9
-rw-r--r--glow/src/widget/scrollable.rs4
-rw-r--r--glow/src/widget/slider.rs10
-rw-r--r--glow/src/widget/text_input.rs5
-rw-r--r--glow/src/widget/toggler.rs3
-rw-r--r--glow/src/widget/tooltip.rs4
-rw-r--r--glow/src/window/compositor.rs10
17 files changed, 48 insertions, 62 deletions
diff --git a/glow/src/backend.rs b/glow/src/backend.rs
index 9a9457cf..5ab7f922 100644
--- a/glow/src/backend.rs
+++ b/glow/src/backend.rs
@@ -5,10 +5,8 @@ use crate::{Settings, Transformation, Viewport};
use iced_graphics::backend;
use iced_graphics::font;
-use iced_graphics::Layer;
-use iced_graphics::Primitive;
+use iced_graphics::{Layer, Primitive};
use iced_native::alignment;
-use iced_native::mouse;
use iced_native::{Font, Size};
/// A [`glow`] graphics backend for [`iced`].
@@ -47,18 +45,18 @@ impl Backend {
///
/// The text provided as overlay will be rendered on top of the primitives.
/// This is useful for rendering debug information.
- pub fn draw<T: AsRef<str>>(
+ pub fn present<T: AsRef<str>>(
&mut self,
gl: &glow::Context,
+ primitives: &[Primitive],
viewport: &Viewport,
- (primitive, mouse_interaction): &(Primitive, mouse::Interaction),
overlay_text: &[T],
- ) -> mouse::Interaction {
+ ) {
let viewport_size = viewport.physical_size();
let scale_factor = viewport.scale_factor() as f32;
let projection = viewport.projection();
- let mut layers = Layer::generate(primitive, viewport);
+ let mut layers = Layer::generate(primitives, viewport);
layers.push(Layer::overlay(overlay_text, viewport));
for layer in layers {
@@ -70,8 +68,6 @@ impl Backend {
viewport_size.height,
);
}
-
- *mouse_interaction
}
fn flush(
@@ -83,6 +79,11 @@ impl Backend {
target_height: u32,
) {
let mut bounds = (layer.bounds * scale_factor).snap();
+
+ if bounds.width < 1 || bounds.height < 1 {
+ return;
+ }
+
bounds.height = bounds.height.min(target_height);
if !layer.quads.is_empty() {
diff --git a/glow/src/lib.rs b/glow/src/lib.rs
index 418f7e3d..c531169b 100644
--- a/glow/src/lib.rs
+++ b/glow/src/lib.rs
@@ -4,14 +4,14 @@
//!
//! [`glow`]: https://github.com/grovesNL/glow
//! [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
-//#![deny(missing_docs)]
+#![deny(missing_docs)]
#![deny(missing_debug_implementations)]
#![deny(unused_results)]
#![forbid(rust_2018_idioms)]
#![cfg_attr(docsrs, feature(doc_cfg))]
mod backend;
-pub mod program;
+mod program;
mod quad;
mod text;
mod triangle;
diff --git a/glow/src/widget.rs b/glow/src/widget.rs
index a77511e8..ee2810f9 100644
--- a/glow/src/widget.rs
+++ b/glow/src/widget.rs
@@ -66,13 +66,14 @@ pub mod qr_code;
#[doc(no_inline)]
pub use qr_code::QRCode;
-pub use iced_native::{Image, Space};
+pub use iced_native::widget::{Image, Space};
/// A container that distributes its contents vertically.
-pub type Column<'a, Message> = iced_native::Column<'a, Message, Renderer>;
+pub type Column<'a, Message> =
+ iced_native::widget::Column<'a, Message, Renderer>;
/// A container that distributes its contents horizontally.
-pub type Row<'a, Message> = iced_native::Row<'a, Message, Renderer>;
+pub type Row<'a, Message> = iced_native::widget::Row<'a, Message, Renderer>;
/// A paragraph of text.
-pub type Text = iced_native::Text<Renderer>;
+pub type Text = iced_native::widget::Text<Renderer>;
diff --git a/glow/src/widget/button.rs b/glow/src/widget/button.rs
index fc729cd5..f11ff25e 100644
--- a/glow/src/widget/button.rs
+++ b/glow/src/widget/button.rs
@@ -4,9 +4,10 @@
use crate::Renderer;
pub use iced_graphics::button::{Style, StyleSheet};
-pub use iced_native::button::State;
+pub use iced_native::widget::button::State;
/// A widget that produces a message when clicked.
///
/// This is an alias of an `iced_native` button with an `iced_wgpu::Renderer`.
-pub type Button<'a, Message> = iced_native::Button<'a, Message, Renderer>;
+pub type Button<'a, Message> =
+ iced_native::widget::Button<'a, Message, Renderer>;
diff --git a/glow/src/widget/checkbox.rs b/glow/src/widget/checkbox.rs
index d27d77cc..76d572d9 100644
--- a/glow/src/widget/checkbox.rs
+++ b/glow/src/widget/checkbox.rs
@@ -6,4 +6,5 @@ pub use iced_graphics::checkbox::{Style, StyleSheet};
/// A box that can be checked.
///
/// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`.
-pub type Checkbox<Message> = iced_native::Checkbox<Message, Renderer>;
+pub type Checkbox<'a, Message> =
+ iced_native::widget::Checkbox<'a, Message, Renderer>;
diff --git a/glow/src/widget/container.rs b/glow/src/widget/container.rs
index bc26cef2..c16db50d 100644
--- a/glow/src/widget/container.rs
+++ b/glow/src/widget/container.rs
@@ -7,4 +7,5 @@ pub use iced_graphics::container::{Style, StyleSheet};
///
/// This is an alias of an `iced_native` container with a default
/// `Renderer`.
-pub type Container<'a, Message> = iced_native::Container<'a, Message, Renderer>;
+pub type Container<'a, Message> =
+ iced_native::widget::Container<'a, Message, Renderer>;
diff --git a/glow/src/widget/pane_grid.rs b/glow/src/widget/pane_grid.rs
index fc36862c..3c47acf0 100644
--- a/glow/src/widget/pane_grid.rs
+++ b/glow/src/widget/pane_grid.rs
@@ -20,12 +20,13 @@ pub use iced_graphics::pane_grid::{
/// [![Pane grid - Iced](https://thumbs.gfycat.com/MixedFlatJellyfish-small.gif)](https://gfycat.com/mixedflatjellyfish)
///
/// This is an alias of an `iced_native` pane grid with an `iced_wgpu::Renderer`.
-pub type PaneGrid<'a, Message> = iced_native::PaneGrid<'a, Message, Renderer>;
+pub type PaneGrid<'a, Message> =
+ iced_native::widget::PaneGrid<'a, Message, Renderer>;
/// The content of a [`Pane`].
pub type Content<'a, Message> =
- iced_native::pane_grid::Content<'a, Message, Renderer>;
+ iced_native::widget::pane_grid::Content<'a, Message, Renderer>;
/// The title bar of a [`Pane`].
pub type TitleBar<'a, Message> =
- iced_native::pane_grid::TitleBar<'a, Message, Renderer>;
+ iced_native::widget::pane_grid::TitleBar<'a, Message, Renderer>;
diff --git a/glow/src/widget/pick_list.rs b/glow/src/widget/pick_list.rs
index fccc68c9..4d93be68 100644
--- a/glow/src/widget/pick_list.rs
+++ b/glow/src/widget/pick_list.rs
@@ -1,9 +1,9 @@
//! Display a dropdown list of selectable values.
-pub use iced_native::pick_list::State;
+pub use iced_native::widget::pick_list::State;
pub use iced_graphics::overlay::menu::Style as Menu;
pub use iced_graphics::pick_list::{Style, StyleSheet};
/// A widget allowing the selection of a single value from a list of options.
pub type PickList<'a, T, Message> =
- iced_native::PickList<'a, T, Message, crate::Renderer>;
+ iced_native::widget::PickList<'a, T, Message, crate::Renderer>;
diff --git a/glow/src/widget/progress_bar.rs b/glow/src/widget/progress_bar.rs
index 45a25d00..413e6fb7 100644
--- a/glow/src/widget/progress_bar.rs
+++ b/glow/src/widget/progress_bar.rs
@@ -2,12 +2,5 @@
//!
//! A [`ProgressBar`] has a range of possible values and a current value,
//! as well as a length, height and style.
-use crate::Renderer;
-pub use iced_graphics::progress_bar::{Style, StyleSheet};
-
-/// A bar that displays progress.
-///
-/// This is an alias of an `iced_native` progress bar with an
-/// `iced_wgpu::Renderer`.
-pub type ProgressBar = iced_native::ProgressBar<Renderer>;
+pub use iced_graphics::progress_bar::*;
diff --git a/glow/src/widget/radio.rs b/glow/src/widget/radio.rs
index 0b843d1f..9ef1d7a5 100644
--- a/glow/src/widget/radio.rs
+++ b/glow/src/widget/radio.rs
@@ -7,4 +7,4 @@ pub use iced_graphics::radio::{Style, StyleSheet};
///
/// This is an alias of an `iced_native` radio button with an
/// `iced_wgpu::Renderer`.
-pub type Radio<Message> = iced_native::Radio<Message, Renderer>;
+pub type Radio<'a, Message> = iced_native::widget::Radio<'a, Message, Renderer>;
diff --git a/glow/src/widget/rule.rs b/glow/src/widget/rule.rs
index faa2be86..40281773 100644
--- a/glow/src/widget/rule.rs
+++ b/glow/src/widget/rule.rs
@@ -1,10 +1,3 @@
//! Display a horizontal or vertical rule for dividing content.
-use crate::Renderer;
-
-pub use iced_graphics::rule::{FillMode, Style, StyleSheet};
-
-/// Display a horizontal or vertical rule for dividing content.
-///
-/// This is an alias of an `iced_native` rule with an `iced_glow::Renderer`.
-pub type Rule = iced_native::Rule<Renderer>;
+pub use iced_graphics::rule::*;
diff --git a/glow/src/widget/scrollable.rs b/glow/src/widget/scrollable.rs
index fabb4318..d5635ec5 100644
--- a/glow/src/widget/scrollable.rs
+++ b/glow/src/widget/scrollable.rs
@@ -2,7 +2,7 @@
use crate::Renderer;
pub use iced_graphics::scrollable::{Scrollbar, Scroller, StyleSheet};
-pub use iced_native::scrollable::State;
+pub use iced_native::widget::scrollable::State;
/// A widget that can vertically display an infinite amount of content
/// with a scrollbar.
@@ -10,4 +10,4 @@ pub use iced_native::scrollable::State;
/// This is an alias of an `iced_native` scrollable with a default
/// `Renderer`.
pub type Scrollable<'a, Message> =
- iced_native::Scrollable<'a, Message, Renderer>;
+ iced_native::widget::Scrollable<'a, Message, Renderer>;
diff --git a/glow/src/widget/slider.rs b/glow/src/widget/slider.rs
index 9a269858..2fb3d5d9 100644
--- a/glow/src/widget/slider.rs
+++ b/glow/src/widget/slider.rs
@@ -1,13 +1,5 @@
//! Display an interactive selector of a single value from a range of values.
//!
//! A [`Slider`] has some local [`State`].
-use crate::Renderer;
-
pub use iced_graphics::slider::{Handle, HandleShape, Style, StyleSheet};
-pub use iced_native::slider::State;
-
-/// An horizontal bar and a handle that selects a single value from a range of
-/// values.
-///
-/// This is an alias of an `iced_native` slider with an `iced_wgpu::Renderer`.
-pub type Slider<'a, T, Message> = iced_native::Slider<'a, T, Message, Renderer>;
+pub use iced_native::widget::slider::{Slider, State};
diff --git a/glow/src/widget/text_input.rs b/glow/src/widget/text_input.rs
index db18b1cc..5560e3e0 100644
--- a/glow/src/widget/text_input.rs
+++ b/glow/src/widget/text_input.rs
@@ -4,9 +4,10 @@
use crate::Renderer;
pub use iced_graphics::text_input::{Style, StyleSheet};
-pub use iced_native::text_input::State;
+pub use iced_native::widget::text_input::State;
/// A field that can be filled with text.
///
/// This is an alias of an `iced_native` text input with an `iced_wgpu::Renderer`.
-pub type TextInput<'a, Message> = iced_native::TextInput<'a, Message, Renderer>;
+pub type TextInput<'a, Message> =
+ iced_native::widget::TextInput<'a, Message, Renderer>;
diff --git a/glow/src/widget/toggler.rs b/glow/src/widget/toggler.rs
index 1cd8711b..40379025 100644
--- a/glow/src/widget/toggler.rs
+++ b/glow/src/widget/toggler.rs
@@ -6,4 +6,5 @@ pub use iced_graphics::toggler::{Style, StyleSheet};
/// A toggler that can be toggled.
///
/// This is an alias of an `iced_native` checkbox with an `iced_wgpu::Renderer`.
-pub type Toggler<Message> = iced_native::Toggler<Message, Renderer>;
+pub type Toggler<'a, Message> =
+ iced_native::widget::Toggler<'a, Message, Renderer>;
diff --git a/glow/src/widget/tooltip.rs b/glow/src/widget/tooltip.rs
index 89ab3a15..c6af3903 100644
--- a/glow/src/widget/tooltip.rs
+++ b/glow/src/widget/tooltip.rs
@@ -1,6 +1,6 @@
//! Display a widget over another.
/// A widget allowing the selection of a single value from a list of options.
pub type Tooltip<'a, Message> =
- iced_native::Tooltip<'a, Message, crate::Renderer>;
+ iced_native::widget::Tooltip<'a, Message, crate::Renderer>;
-pub use iced_native::tooltip::Position;
+pub use iced_native::widget::tooltip::Position;
diff --git a/glow/src/window/compositor.rs b/glow/src/window/compositor.rs
index b8157f78..a85a4560 100644
--- a/glow/src/window/compositor.rs
+++ b/glow/src/window/compositor.rs
@@ -3,7 +3,6 @@ use crate::{Backend, Color, Error, Renderer, Settings, Viewport};
use core::ffi::c_void;
use glow::HasContext;
use iced_graphics::{Antialiasing, Size};
-use iced_native::mouse;
/// A window graphics backend for iced powered by `glow`.
#[allow(missing_debug_implementations)]
@@ -59,14 +58,13 @@ impl iced_graphics::window::GLCompositor for Compositor {
}
}
- fn draw<T: AsRef<str>>(
+ fn present<T: AsRef<str>>(
&mut self,
renderer: &mut Self::Renderer,
viewport: &Viewport,
color: Color,
- output: &<Self::Renderer as iced_native::Renderer>::Output,
overlay: &[T],
- ) -> mouse::Interaction {
+ ) {
let gl = &self.gl;
let [r, g, b, a] = color.into_linear();
@@ -76,6 +74,8 @@ impl iced_graphics::window::GLCompositor for Compositor {
gl.clear(glow::COLOR_BUFFER_BIT);
}
- renderer.backend_mut().draw(gl, viewport, output, overlay)
+ renderer.with_primitives(|backend, primitive| {
+ backend.present(gl, primitive, viewport, overlay);
+ });
}
}