Skip to content

Commit de19530

Browse files
committed
wip
1 parent 6abc403 commit de19530

3 files changed

Lines changed: 56 additions & 10 deletions

File tree

examples/plugin_clack/src/gui.rs

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::window_handler::OpenWindowExample;
22
use crate::ExamplePluginMainThread;
3-
use baseview::dpi::PhysicalSize;
3+
use baseview::dpi::{LogicalSize, PhysicalSize, Size};
44
use baseview::gl::GlConfig;
55
use baseview::{WindowHandle, WindowOpenOptions, WindowSize};
66
use clack_extensions::gui::{
@@ -39,8 +39,12 @@ impl PluginGuiImpl for ExamplePluginMainThread {
3939
gui.handle.close()
4040
}
4141

42-
fn set_scale(&mut self, _scale: f64) -> Result<(), PluginError> {
43-
// Unsupported
42+
fn set_scale(&mut self, scale: f64) -> Result<(), PluginError> {
43+
let Some(gui) = &self.gui else {
44+
return Err(PluginError::Message("set_scale called without a GUI active"));
45+
};
46+
gui.handle.suggest_scale_factor(scale)?;
47+
4448
Ok(())
4549
}
4650

@@ -49,19 +53,26 @@ impl PluginGuiImpl for ExamplePluginMainThread {
4953
}
5054

5155
fn can_resize(&mut self) -> bool {
52-
false // Non-resizeable windows not supported yet
56+
true // Non-resizeable windows not supported yet
5357
}
5458

5559
fn get_resize_hints(&mut self) -> Option<GuiResizeHints> {
5660
None // Not supported yet
5761
}
5862

59-
fn adjust_size(&mut self, _size: GuiSize) -> Option<GuiSize> {
60-
None // Not supported yet
63+
fn adjust_size(&mut self, size: GuiSize) -> Option<GuiSize> {
64+
Some(size) // Not supported yet
6165
}
6266

63-
fn set_size(&mut self, _size: GuiSize) -> Result<(), PluginError> {
64-
Ok(()) // Not supported yet
67+
fn set_size(&mut self, size: GuiSize) -> Result<(), PluginError> {
68+
let Some(gui) = &self.gui else {
69+
return Err(PluginError::Message("set_size called without a GUI active"));
70+
};
71+
72+
let size = gui_size_to_window_size(size);
73+
gui.handle.resize(size)?;
74+
75+
Ok(())
6576
}
6677

6778
#[allow(deprecated)]
@@ -111,3 +122,14 @@ fn window_size_to_gui_size(size: WindowSize) -> GuiSize {
111122
GuiSize { width: size.width, height: size.height }
112123
}
113124
}
125+
126+
fn gui_size_to_window_size(size: GuiSize) -> Size {
127+
#[cfg(target_os = "macos")]
128+
{
129+
Size::Logical(LogicalSize::new(size.width, size.height).cast())
130+
}
131+
#[cfg(not(target_os = "macos"))]
132+
{
133+
Size::Physical(PhysicalSize::new(size.width, size.height))
134+
}
135+
}

src/platform/macos/window.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use dpi::{LogicalSize, PhysicalSize};
1+
use dpi::{LogicalSize, Size};
22
use objc2::rc::{autoreleasepool, Retained, Weak};
33
use objc2::MainThreadMarker;
44
use objc2_app_kit::{NSApplication, NSPasteboard, NSPasteboardTypeString, NSView, NSWindow};
@@ -95,6 +95,20 @@ impl WindowHandle {
9595
pub fn size(&self) -> WindowSize {
9696
WindowSize::from_logical(self.state.size.get(), self.state.scale_factor.get())
9797
}
98+
99+
pub fn resize(&self, size: Size) -> Result<()> {
100+
let Some(view) = self.view.load() else { return Ok(()) };
101+
let Some(view) = view.inner_ref() else { return Ok(()) };
102+
103+
BaseviewView::resize(view, size);
104+
105+
Ok(())
106+
}
107+
108+
pub fn suggest_scale_factor(&self, _scale_factor: f64) -> Result<()> {
109+
// This does not do anything on macOS: all coordinates are already logical
110+
Ok(())
111+
}
98112
}
99113

100114
fn create_window_with_options(

src/window.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::handler::WindowHandlerBuilder;
22
use crate::platform;
33
use crate::*;
4-
use dpi::{LogicalSize, PhysicalSize, Pixel};
4+
use dpi::{LogicalSize, PhysicalSize, Pixel, Size};
55
use std::marker::PhantomData;
66

77
pub struct WindowHandle {
@@ -25,6 +25,16 @@ impl WindowHandle {
2525
self.window_handle.size()
2626
}
2727

28+
pub fn resize(&self, size: Size) -> Result<(), Error> {
29+
self.window_handle.resize(size)?;
30+
Ok(())
31+
}
32+
33+
pub fn suggest_scale_factor(&self, scale_factor: f64) -> Result<(), Error> {
34+
self.window_handle.suggest_scale_factor(scale_factor)?;
35+
Ok(())
36+
}
37+
2838
/// Close the window
2939
pub fn close(self) {
3040
drop(self)

0 commit comments

Comments
 (0)