[window] visually indicate which windows can be resized
This commit is contained in:
parent
9ed6a5f5ab
commit
a764b0d23f
3 changed files with 31 additions and 9 deletions
|
@ -151,7 +151,7 @@ impl Resize {
|
|||
|
||||
let corner_interact = if self.resizable {
|
||||
// Resize-corner:
|
||||
let corner_size = Vec2::splat(16.0); // TODO: style
|
||||
let corner_size = Vec2::splat(ui.style().resize_corner_size);
|
||||
let corner_rect = Rect::from_min_size(
|
||||
position + state.desired_size + self.handle_offset - corner_size,
|
||||
corner_size,
|
||||
|
@ -274,21 +274,24 @@ impl Resize {
|
|||
}
|
||||
}
|
||||
|
||||
fn paint_resize_corner(ui: &mut Ui, interact: &InteractInfo) {
|
||||
use crate::paint::LineStyle;
|
||||
|
||||
pub fn paint_resize_corner(ui: &mut Ui, interact: &InteractInfo) {
|
||||
let color = ui.style().interact(interact).stroke_color;
|
||||
let width = ui.style().interact(interact).stroke_width;
|
||||
paint_resize_corner_with_style(ui, &interact.rect, LineStyle::new(width, color));
|
||||
}
|
||||
|
||||
pub fn paint_resize_corner_with_style(ui: &mut Ui, rect: &Rect, style: LineStyle) {
|
||||
let painter = ui.painter();
|
||||
|
||||
let corner = painter.round_pos_to_pixels(interact.rect.right_bottom());
|
||||
let corner = painter.round_pos_to_pixels(rect.right_bottom());
|
||||
let mut w = 2.0;
|
||||
|
||||
while w < 12.0 {
|
||||
painter.add(paint::PaintCmd::line_segment(
|
||||
[pos2(corner.x - w, corner.y), pos2(corner.x, corner.y - w)],
|
||||
color,
|
||||
width,
|
||||
));
|
||||
painter.add(paint::PaintCmd::LineSegment {
|
||||
points: [pos2(corner.x - w, corner.y), pos2(corner.x, corner.y - w)],
|
||||
style,
|
||||
});
|
||||
w += 4.0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -235,6 +235,7 @@ impl<'open> Window<'open> {
|
|||
|
||||
{
|
||||
// BEGIN FRAME --------------------------------
|
||||
let frame_outline = frame.outline;
|
||||
let mut frame = frame.begin(&mut area_content_ui);
|
||||
|
||||
let default_expanded = true;
|
||||
|
@ -269,6 +270,12 @@ impl<'open> Window<'open> {
|
|||
.map(|ri| ri.1);
|
||||
|
||||
let outer_rect = frame.end(&mut area_content_ui);
|
||||
|
||||
if possible.resizable {
|
||||
// TODO: draw BEHIND contents ?
|
||||
paint_resize_corner(&mut area_content_ui, outer_rect, frame_outline);
|
||||
}
|
||||
|
||||
// END FRAME --------------------------------
|
||||
|
||||
title_bar.ui(
|
||||
|
@ -307,6 +314,15 @@ impl<'open> Window<'open> {
|
|||
}
|
||||
}
|
||||
|
||||
fn paint_resize_corner(ui: &mut Ui, outer_rect: Rect, frame_outline: Option<LineStyle>) {
|
||||
let corner_size = Vec2::splat(ui.style().resize_corner_size);
|
||||
let handle_offset = -Vec2::splat(2.0);
|
||||
let corner_rect =
|
||||
Rect::from_min_size(outer_rect.max - corner_size + handle_offset, corner_size);
|
||||
let outline = frame_outline.unwrap_or_else(|| LineStyle::new(1.0, color::GRAY));
|
||||
crate::resize::paint_resize_corner_with_style(ui, &corner_rect, outline);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
|
|
|
@ -32,6 +32,8 @@ pub struct Style {
|
|||
/// Mouse must be the close to the corner of a window to resize
|
||||
pub resize_interact_radius_corner: f32,
|
||||
|
||||
pub resize_corner_size: f32,
|
||||
|
||||
// -----------------------------------------------
|
||||
// Purely visual:
|
||||
pub interact: Interact,
|
||||
|
@ -82,6 +84,7 @@ impl Default for Style {
|
|||
start_icon_width: 14.0,
|
||||
resize_interact_radius_side: 5.0,
|
||||
resize_interact_radius_corner: 10.0,
|
||||
resize_corner_size: 16.0,
|
||||
interact: Default::default(),
|
||||
text_color: gray(160, 255),
|
||||
line_width: 1.0,
|
||||
|
|
Loading…
Reference in a new issue