193 lines
4.4 KiB
Rust
193 lines
4.4 KiB
Rust
use egui::{
|
|
epaint::Shadow,
|
|
style::{Interaction, ScrollStyle, Spacing, WidgetVisuals, Widgets},
|
|
FontId, Frame, Margin, Rounding, Stroke, Style, Vec2, Visuals,
|
|
};
|
|
|
|
pub trait Zoom {
|
|
fn zoomed(mut self, zoom: f32) -> Self
|
|
where
|
|
Self: Copy,
|
|
{
|
|
self.zoom(zoom);
|
|
self
|
|
}
|
|
|
|
fn zoom(&mut self, zoom: f32);
|
|
}
|
|
|
|
impl Zoom for f32 {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
*self *= zoom;
|
|
}
|
|
}
|
|
|
|
impl Zoom for Vec2 {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
*self *= zoom;
|
|
}
|
|
}
|
|
|
|
impl Zoom for Rounding {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.nw.zoom(zoom);
|
|
self.ne.zoom(zoom);
|
|
self.se.zoom(zoom);
|
|
self.sw.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for Margin {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.left.zoom(zoom);
|
|
self.right.zoom(zoom);
|
|
self.top.zoom(zoom);
|
|
self.bottom.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for Shadow {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.spread = zoom;
|
|
// self.extrusion.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for Stroke {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.width *= zoom;
|
|
if self.width < 1.0 {
|
|
self.color.gamma_multiply(self.width);
|
|
self.width = 1.0;
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Zoom for WidgetVisuals {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.bg_stroke.zoom(zoom);
|
|
self.rounding.zoom(zoom);
|
|
self.fg_stroke.zoom(zoom);
|
|
self.expansion.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for Interaction {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.resize_grab_radius_corner.zoom(zoom);
|
|
self.resize_grab_radius_side.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for Widgets {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.noninteractive.zoom(zoom);
|
|
self.inactive.zoom(zoom);
|
|
self.hovered.zoom(zoom);
|
|
self.active.zoom(zoom);
|
|
self.open.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for Visuals {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.clip_rect_margin.zoom(zoom);
|
|
self.menu_rounding.zoom(zoom);
|
|
self.popup_shadow.zoom(zoom);
|
|
self.resize_corner_size.zoom(zoom);
|
|
self.selection.stroke.zoom(zoom);
|
|
self.text_cursor.zoom(zoom);
|
|
self.widgets.zoom(zoom);
|
|
self.window_rounding.zoom(zoom);
|
|
self.window_shadow.zoom(zoom);
|
|
self.window_stroke.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for ScrollStyle {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.bar_inner_margin.zoom(zoom);
|
|
self.bar_outer_margin.zoom(zoom);
|
|
self.bar_width.zoom(zoom);
|
|
self.floating_allocated_width.zoom(zoom);
|
|
self.floating_width.zoom(zoom);
|
|
self.handle_min_length.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for Spacing {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.button_padding.zoom(zoom);
|
|
self.combo_height.zoom(zoom);
|
|
self.combo_width.zoom(zoom);
|
|
self.icon_spacing.zoom(zoom);
|
|
self.icon_width.zoom(zoom);
|
|
self.icon_width_inner.zoom(zoom);
|
|
self.indent.zoom(zoom);
|
|
self.interact_size.zoom(zoom);
|
|
self.item_spacing.zoom(zoom);
|
|
self.menu_margin.zoom(zoom);
|
|
self.scroll.zoom(zoom);
|
|
self.slider_width.zoom(zoom);
|
|
self.text_edit_width.zoom(zoom);
|
|
self.tooltip_width.zoom(zoom);
|
|
self.window_margin.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for FontId {
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.size.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl Zoom for Style {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
if let Some(font_id) = &mut self.override_font_id {
|
|
font_id.zoom(zoom);
|
|
}
|
|
for font_id in self.text_styles.values_mut() {
|
|
font_id.zoom(zoom);
|
|
}
|
|
self.interaction.zoom(zoom);
|
|
self.spacing.zoom(zoom);
|
|
self.visuals.zoom(zoom);
|
|
}
|
|
}
|
|
|
|
impl<T> Zoom for Option<T>
|
|
where
|
|
T: Zoom,
|
|
{
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
if let Some(value) = self {
|
|
value.zoom(zoom)
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Zoom for Frame {
|
|
#[inline(always)]
|
|
fn zoom(&mut self, zoom: f32) {
|
|
self.inner_margin.zoom(zoom);
|
|
self.outer_margin.zoom(zoom);
|
|
self.rounding.zoom(zoom);
|
|
self.shadow.zoom(zoom);
|
|
self.stroke.zoom(zoom);
|
|
}
|
|
}
|