Struct sctk_adwaita::AdwaitaFrame
source · pub struct AdwaitaFrame<State> { /* private fields */ }
Expand description
A simple set of decorations
Implementations§
source§impl<State> AdwaitaFrame<State>
impl<State> AdwaitaFrame<State>
sourcepub fn new(
base_surface: &impl WaylandSurface,
shm: &Shm,
compositor: Arc<CompositorState>,
subcompositor: Arc<SubcompositorState>,
queue_handle: QueueHandle<State>,
frame_config: FrameConfig,
) -> Result<Self, Box<dyn Error>>
pub fn new( base_surface: &impl WaylandSurface, shm: &Shm, compositor: Arc<CompositorState>, subcompositor: Arc<SubcompositorState>, queue_handle: QueueHandle<State>, frame_config: FrameConfig, ) -> Result<Self, Box<dyn Error>>
Examples found in repository?
examples/window.rs (lines 248-255)
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322
fn configure(
&mut self,
conn: &Connection,
qh: &QueueHandle<Self>,
window: &Window,
configure: WindowConfigure,
_serial: u32,
) {
self.buffer = None;
println!(
"Configure size {:?}, decorations: {:?}",
configure.new_size, configure.decoration_mode
);
let (width, height) = if configure.decoration_mode == DecorationMode::Client {
let window_frame = self.window_frame.get_or_insert_with(|| {
let mut frame = AdwaitaFrame::new(
&self.window,
&self.shm_state,
self.compositor_state.clone(),
self.subcompositor_state.clone(),
qh.clone(),
FrameConfig::auto(),
)
.expect("failed to create client side decorations frame.");
frame.set_title(self.title.clone());
frame
});
// Un-hide the frame.
window_frame.set_hidden(false);
// Configure state before touching any resizing.
window_frame.update_state(configure.state);
// Configure the button state.
window_frame.update_wm_capabilities(configure.capabilities);
let (width, height) = match configure.new_size {
(Some(width), Some(height)) => {
// The size could be 0.
window_frame.subtract_borders(width, height)
}
_ => {
// You might want to consider checking for configure bounds.
(Some(self.width), Some(self.height))
}
};
// Clamp the size to at least one pixel.
let width = width.unwrap_or(NonZeroU32::new(1).unwrap());
let height = height.unwrap_or(NonZeroU32::new(1).unwrap());
window_frame.resize(width, height);
let (x, y) = window_frame.location();
let outer_size = window_frame.add_borders(width.get(), height.get());
window.xdg_surface().set_window_geometry(
x,
y,
outer_size.0 as i32,
outer_size.1 as i32,
);
(width, height)
} else {
// Hide the frame, if any.
if let Some(frame) = self.window_frame.as_mut() {
frame.set_hidden(true)
}
let width = configure.new_size.0.unwrap_or(self.width);
let height = configure.new_size.1.unwrap_or(self.height);
self.window.xdg_surface().set_window_geometry(
0,
0,
width.get() as i32,
height.get() as i32,
);
(width, height)
};
// Update new width and height;
self.width = width;
self.height = height;
// Initiate the first draw.
if self.first_configure {
self.first_configure = false;
self.draw(conn, qh);
}
}
sourcepub fn set_config(&mut self, config: FrameConfig)
pub fn set_config(&mut self, config: FrameConfig)
Update the current frame config.
Trait Implementations§
source§impl<State: Debug> Debug for AdwaitaFrame<State>
impl<State: Debug> Debug for AdwaitaFrame<State>
source§impl<State> DecorationsFrame for AdwaitaFrame<State>
impl<State> DecorationsFrame for AdwaitaFrame<State>
source§fn update_state(&mut self, state: WindowState)
fn update_state(&mut self, state: WindowState)
Update the state of the frame. Read more
source§fn update_wm_capabilities(&mut self, wm_capabilities: WindowManagerCapabilities)
fn update_wm_capabilities(&mut self, wm_capabilities: WindowManagerCapabilities)
Update the window manager capabilites. Read more
Set the frame as hidden. Read more
source§fn set_resizable(&mut self, resizable: bool)
fn set_resizable(&mut self, resizable: bool)
Mark the frame as resizable. Read more
source§fn resize(&mut self, width: NonZeroU32, height: NonZeroU32)
fn resize(&mut self, width: NonZeroU32, height: NonZeroU32)
Resize the window to the new size. Read more
source§fn subtract_borders(
&self,
width: NonZeroU32,
height: NonZeroU32,
) -> (Option<NonZeroU32>, Option<NonZeroU32>)
fn subtract_borders( &self, width: NonZeroU32, height: NonZeroU32, ) -> (Option<NonZeroU32>, Option<NonZeroU32>)
source§fn location(&self) -> (i32, i32)
fn location(&self) -> (i32, i32)
Return the coordinates of the top-left corner of the borders relative to
the content. Read more
source§fn on_click(
&mut self,
timestamp: Duration,
click: FrameClick,
pressed: bool,
) -> Option<FrameAction>
fn on_click( &mut self, timestamp: Duration, click: FrameClick, pressed: bool, ) -> Option<FrameAction>
Emulate click on the decorations. Read more
source§fn set_scaling_factor(&mut self, scale_factor: f64)
fn set_scaling_factor(&mut self, scale_factor: f64)
Set the scaling of the decorations frame. Read more
source§fn click_point_moved(
&mut self,
_timestamp: Duration,
surface: &ObjectId,
x: f64,
y: f64,
) -> Option<CursorIcon>
fn click_point_moved( &mut self, _timestamp: Duration, surface: &ObjectId, x: f64, y: f64, ) -> Option<CursorIcon>
Emulate pointer moved event on the decorations frame. Read more
source§fn click_point_left(&mut self)
fn click_point_left(&mut self)
All clicks left the decorations. Read more
Get the frame hidden state. Read more
Auto Trait Implementations§
impl<State> Freeze for AdwaitaFrame<State>
impl<State> !RefUnwindSafe for AdwaitaFrame<State>
impl<State> Send for AdwaitaFrame<State>
impl<State> Sync for AdwaitaFrame<State>
impl<State> Unpin for AdwaitaFrame<State>
impl<State> !UnwindSafe for AdwaitaFrame<State>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.