Browse Source

[window] visually indicate which windows can be resized

pull/20/head
Emil Ernerfeldt 4 years ago
parent
commit
a764b0d23f
  1. 21
      egui/src/containers/resize.rs
  2. 16
      egui/src/containers/window.rs
  3. 3
      egui/src/style.rs

21
egui/src/containers/resize.rs

@ -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;
}
}

16
egui/src/containers/window.rs

@ -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)]

3
egui/src/style.rs

@ -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…
Cancel
Save