Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Frame::canvas - bright in bright mode, dark in dark mode #1362

Merged
merged 2 commits into from
Mar 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,15 @@ NOTE: [`epaint`](epaint/CHANGELOG.md), [`eframe`](eframe/CHANGELOG.md), [`egui_w


## Unreleased
* Fixed ComboBoxes always being rendered left-aligned ([1304](https://github.com/emilk/egui/pull/1304))

### Added ⭐
* Added `Frame::canvas` ([1362](https://github.com/emilk/egui/pull/1362)).

### Changed 🔧

### Fixed 🐛
* Fixed ComboBoxes always being rendered left-aligned ([1304](https://github.com/emilk/egui/pull/1304)).


## 0.17.0 - 2022-02-22 - Improved font selection and image handling

Expand Down
17 changes: 14 additions & 3 deletions egui/src/containers/frame.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,16 +80,27 @@ impl Frame {
}
}

/// dark canvas to draw on
pub fn dark_canvas(style: &Style) -> Self {
/// A canvas to draw on.
///
/// In bright mode this will be very bright,
/// and in dark mode this will be very dark.
pub fn canvas(style: &Style) -> Self {
Self {
margin: Margin::symmetric(10.0, 10.0),
rounding: style.visuals.widgets.noninteractive.rounding,
fill: Color32::from_black_alpha(250),
fill: style.visuals.extreme_bg_color,
stroke: style.visuals.window_stroke(),
..Default::default()
}
}

/// A dark canvas to draw on.
pub fn dark_canvas(style: &Style) -> Self {
Self {
fill: Color32::from_black_alpha(250),
..Self::canvas(style)
}
}
}

impl Frame {
Expand Down
13 changes: 8 additions & 5 deletions egui_demo_lib/src/apps/demo/dancing_strings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,13 @@ impl super::Demo for DancingStrings {

impl super::View for DancingStrings {
fn ui(&mut self, ui: &mut Ui) {
Frame::dark_canvas(ui.style()).show(ui, |ui| {
let color = if ui.visuals().dark_mode {
Color32::from_additive_luminance(196)
} else {
Color32::from_black_alpha(240)
};

Frame::canvas(ui.style()).show(ui, |ui| {
ui.ctx().request_repaint();
let time = ui.input().time;

Expand All @@ -49,10 +55,7 @@ impl super::View for DancingStrings {
.collect();

let thickness = 10.0 / mode as f32;
shapes.push(epaint::Shape::line(
points,
Stroke::new(thickness, Color32::from_additive_luminance(196)),
));
shapes.push(epaint::Shape::line(points, Stroke::new(thickness, color)));
}

ui.painter().extend(shapes);
Expand Down
9 changes: 7 additions & 2 deletions egui_demo_lib/src/apps/demo/multi_touch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,13 @@ impl super::View for MultiTouch {
let num_touches = ui.input().multi_touch().map_or(0, |mt| mt.num_touches);
ui.label(format!("Current touches: {}", num_touches));

Frame::dark_canvas(ui.style()).show(ui, |ui| {
let color = if ui.visuals().dark_mode {
Color32::WHITE
} else {
Color32::BLACK
};

Frame::canvas(ui.style()).show(ui, |ui| {
// Note that we use `Sense::drag()` although we do not use any pointer events. With
// the current implementation, the fact that a touch event of two or more fingers is
// recognized, does not mean that the pointer events are suppressed, which are always
Expand All @@ -76,7 +82,6 @@ impl super::View for MultiTouch {
// check for touch input (or the lack thereof) and update zoom and scale factors, plus
// color and width:
let mut stroke_width = 1.;
let color = Color32::GRAY;
if let Some(multi_touch) = ui.ctx().multi_touch() {
// This adjusts the current zoom factor and rotation angle according to the dynamic
// change (for the current frame) of the touch gesture:
Expand Down
4 changes: 2 additions & 2 deletions egui_demo_lib/src/apps/demo/paint_bezier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ impl Default for PaintBezier {
pos2(200.0, 200.0),
pos2(250.0, 50.0),
],
stroke: Stroke::new(1.0, Color32::LIGHT_BLUE),
stroke: Stroke::new(1.0, Color32::from_rgb(25, 200, 100)),
fill: Color32::from_rgb(50, 100, 150).linear_multiply(0.25),
aux_stroke: Stroke::new(1.0, Color32::RED.linear_multiply(0.25)),
bounding_box_stroke: Stroke::new(0.0, Color32::LIGHT_GREEN.linear_multiply(0.25)),
Expand Down Expand Up @@ -164,7 +164,7 @@ impl super::View for PaintBezier {
});
self.ui_control(ui);

Frame::dark_canvas(ui.style()).show(ui, |ui| {
Frame::canvas(ui.style()).show(ui, |ui| {
self.ui_content(ui);
});
}
Expand Down
4 changes: 2 additions & 2 deletions egui_demo_lib/src/apps/demo/painting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ impl Default for Painting {
fn default() -> Self {
Self {
lines: Default::default(),
stroke: Stroke::new(1.0, Color32::LIGHT_BLUE),
stroke: Stroke::new(1.0, Color32::from_rgb(25, 200, 100)),
}
}
}
Expand Down Expand Up @@ -91,7 +91,7 @@ impl super::View for Painting {
});
self.ui_control(ui);
ui.label("Paint with your mouse/touch!");
Frame::dark_canvas(ui.style()).show(ui, |ui| {
Frame::canvas(ui.style()).show(ui, |ui| {
self.ui_content(ui);
});
}
Expand Down