@@ -13,6 +13,7 @@ use cocoa::base::{BOOL, NO, YES};
pub use dispatcher::Dispatcher;
pub use fonts::FontSystem;
use platform::{MacForegroundPlatform, MacPlatform};
+pub use renderer::Surface;
use std::{rc::Rc, sync::Arc};
use window::Window;
@@ -37,6 +37,10 @@ struct PathSprite {
shader_data: shaders::GPUISprite,
}
+pub struct Surface {
+ pub bounds: RectF,
+}
+
impl Renderer {
pub fn new(
device: metal::Device,
@@ -10,7 +10,7 @@ use crate::{
fonts::{FontId, GlyphId},
geometry::{rect::RectF, vector::Vector2F},
json::ToJson,
- platform::CursorStyle,
+ platform::{current::Surface, CursorStyle},
ImageData,
};
pub use mouse_region::*;
@@ -34,6 +34,7 @@ pub struct Layer {
quads: Vec<Quad>,
underlines: Vec<Underline>,
images: Vec<Image>,
+ surfaces: Vec<Surface>,
shadows: Vec<Shadow>,
glyphs: Vec<Glyph>,
image_glyphs: Vec<ImageGlyph>,
@@ -249,6 +250,10 @@ impl Scene {
self.active_layer().push_image(image)
}
+ pub fn push_surface(&mut self, surface: Surface) {
+ self.active_layer().push_surface(surface)
+ }
+
pub fn push_underline(&mut self, underline: Underline) {
self.active_layer().push_underline(underline)
}
@@ -329,6 +334,7 @@ impl Layer {
quads: Default::default(),
underlines: Default::default(),
images: Default::default(),
+ surfaces: Default::default(),
shadows: Default::default(),
image_glyphs: Default::default(),
glyphs: Default::default(),
@@ -391,6 +397,12 @@ impl Layer {
}
}
+ fn push_surface(&mut self, surface: Surface) {
+ if can_draw(surface.bounds) {
+ self.surfaces.push(surface);
+ }
+ }
+
pub fn images(&self) -> &[Image] {
self.images.as_slice()
}