mirror of
https://github.com/emilk/egui.git
synced 2026-08-29 04:40:03 -04:00
Revert "add widget_style directly to Ui"
This reverts commit ac316f40023fa7a280677dab81c79482e746ac3e.
This commit is contained in:
@@ -2056,13 +2056,12 @@ impl Context {
|
||||
}
|
||||
|
||||
/// Compute the [`WidgetStyle`] using the registered theme.
|
||||
pub(crate) fn get_widget_style<S: WidgetStyle + Clone + 'static>(
|
||||
pub fn get_widget_style<S: WidgetStyle + Clone + 'static>(
|
||||
&self,
|
||||
ui: &Ui,
|
||||
classes: &Classes,
|
||||
state: WidgetState,
|
||||
) -> S {
|
||||
self.read(move |ctx| ctx.themes.get::<S>(ui, classes, state))
|
||||
self.read(move |ctx| ctx.themes.get::<S>(self, classes, state))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use emath::Vec2;
|
||||
use epaint::{Shadow, Stroke, mutex::Mutex, text::TextWrapMode};
|
||||
|
||||
use crate::{
|
||||
Frame, Id, TextStyle, Ui,
|
||||
Context, Frame, Id, TextStyle, Ui,
|
||||
util::IdTypeMap,
|
||||
widget_style::{
|
||||
BaseStyle, ButtonStyle, CheckboxStyle, Classes, HasClasses as _, LabelStyle,
|
||||
@@ -44,7 +44,7 @@ impl ThemeCache {
|
||||
/// A Theme plugin that implement a style computation for a defined `WidgetStyle`
|
||||
pub trait ThemeStyle<S> {
|
||||
/// The style according to the classes and state of the widget
|
||||
fn style(&mut self, ui: &Ui, classes: &Classes, state: WidgetState) -> S;
|
||||
fn style(&mut self, ctx: &Context, classes: &Classes, state: WidgetState) -> S;
|
||||
|
||||
/// Help to differ the different themes
|
||||
fn theme_type_id(&self) -> TypeId
|
||||
@@ -59,9 +59,9 @@ pub trait ThemeStyle<S> {
|
||||
struct DefaultStyle;
|
||||
|
||||
impl ThemeStyle<BaseStyle> for DefaultStyle {
|
||||
fn style(&mut self, ui: &Ui, _classes: &Classes, state: WidgetState) -> BaseStyle {
|
||||
let style = ui.style();
|
||||
let spacing = ui.spacing();
|
||||
fn style(&mut self, ctx: &Context, _classes: &Classes, state: WidgetState) -> BaseStyle {
|
||||
let style = ctx.global_style();
|
||||
let spacing = &style.spacing;
|
||||
let widget_visuals = match state {
|
||||
WidgetState::Noninteractive => style.visuals.widgets.noninteractive,
|
||||
WidgetState::Inactive => style.visuals.widgets.inactive,
|
||||
@@ -83,7 +83,7 @@ impl ThemeStyle<BaseStyle> for DefaultStyle {
|
||||
font_id: style
|
||||
.override_font_id
|
||||
.clone()
|
||||
.unwrap_or_else(|| TextStyle::Body.resolve(style)),
|
||||
.unwrap_or_else(|| TextStyle::Body.resolve(&style)),
|
||||
strikethrough: Stroke::NONE,
|
||||
underline: Stroke::NONE,
|
||||
},
|
||||
@@ -92,9 +92,9 @@ impl ThemeStyle<BaseStyle> for DefaultStyle {
|
||||
}
|
||||
|
||||
impl ThemeStyle<ButtonStyle> for DefaultStyle {
|
||||
fn style(&mut self, ui: &Ui, classes: &Classes, state: WidgetState) -> ButtonStyle {
|
||||
let style = ui.style();
|
||||
let spacing = ui.spacing();
|
||||
fn style(&mut self, ctx: &Context, classes: &Classes, state: WidgetState) -> ButtonStyle {
|
||||
let style = ctx.global_style();
|
||||
let spacing = &style.spacing;
|
||||
let mut widget_visuals = match state {
|
||||
WidgetState::Noninteractive => style.visuals.widgets.noninteractive,
|
||||
WidgetState::Inactive => style.visuals.widgets.inactive,
|
||||
@@ -102,10 +102,10 @@ impl ThemeStyle<ButtonStyle> for DefaultStyle {
|
||||
WidgetState::Active => style.visuals.widgets.active,
|
||||
};
|
||||
|
||||
let mut ws: BaseStyle = ui.get_widget_style(classes, state);
|
||||
let mut ws: BaseStyle = ctx.get_widget_style(classes, state);
|
||||
|
||||
if classes.has(SELECTED_CLASS) {
|
||||
let visuals = ui.visuals();
|
||||
let visuals = &style.visuals;
|
||||
widget_visuals.weak_bg_fill = visuals.selection.bg_fill;
|
||||
widget_visuals.bg_fill = visuals.selection.bg_fill;
|
||||
widget_visuals.fg_stroke = visuals.selection.stroke;
|
||||
@@ -129,9 +129,9 @@ impl ThemeStyle<ButtonStyle> for DefaultStyle {
|
||||
}
|
||||
|
||||
impl ThemeStyle<CheckboxStyle> for DefaultStyle {
|
||||
fn style(&mut self, ui: &Ui, classes: &Classes, state: WidgetState) -> CheckboxStyle {
|
||||
let style = ui.style();
|
||||
let spacing = ui.spacing();
|
||||
fn style(&mut self, ctx: &Context, classes: &Classes, state: WidgetState) -> CheckboxStyle {
|
||||
let style = ctx.global_style();
|
||||
let spacing = &style.spacing;
|
||||
let widget_visuals = match state {
|
||||
WidgetState::Noninteractive => style.visuals.widgets.noninteractive,
|
||||
WidgetState::Inactive => style.visuals.widgets.inactive,
|
||||
@@ -139,7 +139,7 @@ impl ThemeStyle<CheckboxStyle> for DefaultStyle {
|
||||
WidgetState::Active => style.visuals.widgets.active,
|
||||
};
|
||||
|
||||
let ws: BaseStyle = ui.get_widget_style(classes, state);
|
||||
let ws: BaseStyle = ctx.get_widget_style(classes, state);
|
||||
|
||||
CheckboxStyle {
|
||||
frame: Frame::new(),
|
||||
@@ -158,8 +158,8 @@ impl ThemeStyle<CheckboxStyle> for DefaultStyle {
|
||||
}
|
||||
|
||||
impl ThemeStyle<LabelStyle> for DefaultStyle {
|
||||
fn style(&mut self, ui: &Ui, classes: &Classes, state: WidgetState) -> LabelStyle {
|
||||
let ws: BaseStyle = ui.get_widget_style(classes, state);
|
||||
fn style(&mut self, ctx: &Context, classes: &Classes, state: WidgetState) -> LabelStyle {
|
||||
let ws: BaseStyle = ctx.get_widget_style(classes, state);
|
||||
|
||||
LabelStyle {
|
||||
frame: Frame {
|
||||
@@ -177,8 +177,8 @@ impl ThemeStyle<LabelStyle> for DefaultStyle {
|
||||
}
|
||||
|
||||
impl ThemeStyle<SeparatorStyle> for DefaultStyle {
|
||||
fn style(&mut self, ui: &Ui, classes: &Classes, state: WidgetState) -> SeparatorStyle {
|
||||
let ws: BaseStyle = ui.get_widget_style(classes, state);
|
||||
fn style(&mut self, ctx: &Context, classes: &Classes, state: WidgetState) -> SeparatorStyle {
|
||||
let ws: BaseStyle = ctx.get_widget_style(classes, state);
|
||||
|
||||
SeparatorStyle {
|
||||
spacing: 6.0,
|
||||
@@ -204,15 +204,6 @@ impl Ui {
|
||||
|
||||
self.get_widget_style::<S>(classes, state)
|
||||
}
|
||||
|
||||
/// Compute the [`WidgetStyle`] using the registered theme.
|
||||
pub fn get_widget_style<S: WidgetStyle + Clone + 'static>(
|
||||
&self,
|
||||
classes: &Classes,
|
||||
state: WidgetState,
|
||||
) -> S {
|
||||
self.ctx().get_widget_style(self, classes, state)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Themes {
|
||||
@@ -283,7 +274,7 @@ impl Themes {
|
||||
/// Fetch the style of the current theme
|
||||
pub fn get<S: WidgetStyle + 'static>(
|
||||
&self,
|
||||
ui: &Ui,
|
||||
ctx: &Context,
|
||||
classes: &Classes,
|
||||
state: WidgetState,
|
||||
) -> S {
|
||||
@@ -293,6 +284,6 @@ impl Themes {
|
||||
|
||||
v.unwrap_or_else(|| panic!("A style should be set for {:?}", std::any::type_name::<S>()))
|
||||
.lock()
|
||||
.style(ui, classes, state)
|
||||
.style(ctx, classes, state)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,15 +78,15 @@ impl ESSEngine {
|
||||
|
||||
/// This implementation basically do nothing. This is only the minimum requirement with caching.
|
||||
impl ThemeStyle<BaseStyle> for ESSEngine {
|
||||
fn style(&mut self, ui: &Ui, classes: &Classes, state: WidgetState) -> BaseStyle {
|
||||
ui.get_widget_style::<BaseStyle>(classes, state)
|
||||
fn style(&mut self, ctx: &Context, classes: &Classes, state: WidgetState) -> BaseStyle {
|
||||
ctx.get_widget_style::<BaseStyle>(classes, state)
|
||||
}
|
||||
}
|
||||
|
||||
impl ThemeStyle<ButtonStyle> for ESSEngine {
|
||||
fn style(&mut self, ui: &Ui, classes: &Classes, state: WidgetState) -> ButtonStyle {
|
||||
fn style(&mut self, ctx: &Context, classes: &Classes, state: WidgetState) -> ButtonStyle {
|
||||
self.cache.get(classes, state, || {
|
||||
let mut default = ui.get_widget_style::<ButtonStyle>(classes, state);
|
||||
let mut default = ctx.get_widget_style::<ButtonStyle>(classes, state);
|
||||
for class in classes.list() {
|
||||
if let Some(properties) = self.info.get(&class.to_string()) {
|
||||
for (property, value) in properties {
|
||||
|
||||
Reference in New Issue
Block a user