[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 {
|
let corner_interact = if self.resizable {
|
||||||
// Resize-corner:
|
// 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(
|
let corner_rect = Rect::from_min_size(
|
||||||
position + state.desired_size + self.handle_offset - corner_size,
|
position + state.desired_size + self.handle_offset - corner_size,
|
||||||
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 color = ui.style().interact(interact).stroke_color;
|
||||||
let width = ui.style().interact(interact).stroke_width;
|
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 painter = ui.painter();
|
||||||
|
let corner = painter.round_pos_to_pixels(rect.right_bottom());
|
||||||
let corner = painter.round_pos_to_pixels(interact.rect.right_bottom());
|
|
||||||
let mut w = 2.0;
|
let mut w = 2.0;
|
||||||
|
|
||||||
while w < 12.0 {
|
while w < 12.0 {
|
||||||
painter.add(paint::PaintCmd::line_segment(
|
painter.add(paint::PaintCmd::LineSegment {
|
||||||
[pos2(corner.x - w, corner.y), pos2(corner.x, corner.y - w)],
|
points: [pos2(corner.x - w, corner.y), pos2(corner.x, corner.y - w)],
|
||||||
color,
|
style,
|
||||||
width,
|
});
|
||||||
));
|
|
||||||
w += 4.0;
|
w += 4.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -235,6 +235,7 @@ impl<'open> Window<'open> {
|
||||||
|
|
||||||
{
|
{
|
||||||
// BEGIN FRAME --------------------------------
|
// BEGIN FRAME --------------------------------
|
||||||
|
let frame_outline = frame.outline;
|
||||||
let mut frame = frame.begin(&mut area_content_ui);
|
let mut frame = frame.begin(&mut area_content_ui);
|
||||||
|
|
||||||
let default_expanded = true;
|
let default_expanded = true;
|
||||||
|
@ -269,6 +270,12 @@ impl<'open> Window<'open> {
|
||||||
.map(|ri| ri.1);
|
.map(|ri| ri.1);
|
||||||
|
|
||||||
let outer_rect = frame.end(&mut area_content_ui);
|
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 --------------------------------
|
// END FRAME --------------------------------
|
||||||
|
|
||||||
title_bar.ui(
|
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)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
|
|
|
@ -32,6 +32,8 @@ pub struct Style {
|
||||||
/// Mouse must be the close to the corner of a window to resize
|
/// Mouse must be the close to the corner of a window to resize
|
||||||
pub resize_interact_radius_corner: f32,
|
pub resize_interact_radius_corner: f32,
|
||||||
|
|
||||||
|
pub resize_corner_size: f32,
|
||||||
|
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
// Purely visual:
|
// Purely visual:
|
||||||
pub interact: Interact,
|
pub interact: Interact,
|
||||||
|
@ -82,6 +84,7 @@ impl Default for Style {
|
||||||
start_icon_width: 14.0,
|
start_icon_width: 14.0,
|
||||||
resize_interact_radius_side: 5.0,
|
resize_interact_radius_side: 5.0,
|
||||||
resize_interact_radius_corner: 10.0,
|
resize_interact_radius_corner: 10.0,
|
||||||
|
resize_corner_size: 16.0,
|
||||||
interact: Default::default(),
|
interact: Default::default(),
|
||||||
text_color: gray(160, 255),
|
text_color: gray(160, 255),
|
||||||
line_width: 1.0,
|
line_width: 1.0,
|
||||||
|
|
Loading…
Reference in a new issue