Skip to content

Commit fa156d7

Browse files
Cupnfishmaan2003
andauthored
Add SCROLLBAR_MIN_SIZE to env, and use Entry (#1661)
* Add SCROLLBAR_MIN_SIZE to env, and use Entry * cargo fmt * Update druid/src/scroll_component.rs Co-authored-by: Manmeet Maan <[email protected]> * Update druid/src/env.rs Co-authored-by: Manmeet Maan <[email protected]> * Update druid/src/env.rs Co-authored-by: Manmeet Maan <[email protected]> * Some adjustments * Move SCROLLBAR_MIN_SIZE to module theme * fmt Co-authored-by: Manmeet Maan <[email protected]> * cargo fmt * cargo fmt * fmt * Update theme.rs Co-authored-by: Downtime <[email protected]> Co-authored-by: Manmeet Maan <[email protected]>
1 parent c6142e6 commit fa156d7

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed

druid/src/env.rs

+11-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
1717
use std::any;
1818
use std::borrow::Borrow;
19-
use std::collections::HashMap;
19+
use std::collections::{hash_map::Entry, HashMap};
2020
use std::fmt::{Debug, Formatter};
2121
use std::marker::PhantomData;
2222
use std::ops::Deref;
@@ -342,13 +342,18 @@ impl Env {
342342
) -> Result<(), ValueTypeError> {
343343
let env = Arc::make_mut(&mut self.0);
344344
let key = key.into();
345-
// TODO: use of Entry might be more efficient
346-
if let Some(existing) = env.map.get(&key) {
347-
if !existing.is_same_type(&raw) {
348-
return Err(ValueTypeError::new(any::type_name::<V>(), raw));
345+
match env.map.entry(key) {
346+
Entry::Occupied(mut e) => {
347+
let existing = e.get_mut();
348+
if !existing.is_same_type(&raw) {
349+
return Err(ValueTypeError::new(any::type_name::<V>(), raw));
350+
}
351+
*existing = raw;
352+
}
353+
Entry::Vacant(e) => {
354+
e.insert(raw);
349355
}
350356
}
351-
env.map.insert(key, raw);
352357
Ok(())
353358
}
354359

druid/src/scroll_component.rs

+4-7
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@ use crate::theme;
2222
use crate::widget::{Axis, Viewport};
2323
use crate::{Env, Event, EventCtx, LifeCycle, LifeCycleCtx, PaintCtx, RenderContext, TimerToken};
2424

25-
//TODO: Add this to env
26-
/// Minimum length for any scrollbar to be when measured on that
27-
/// scrollbar's primary axis.
28-
pub const SCROLLBAR_MIN_SIZE: f64 = 45.0;
29-
3025
#[derive(Debug, Copy, Clone)]
3126
/// Which scroll bars of a scroll area are currently enabled.
3227
pub enum ScrollbarsEnabled {
@@ -187,12 +182,13 @@ impl ScrollComponent {
187182

188183
let bar_width = env.get(theme::SCROLLBAR_WIDTH);
189184
let bar_pad = env.get(theme::SCROLLBAR_PAD);
185+
let bar_min_size = env.get(theme::SCROLLBAR_MIN_SIZE);
190186

191187
let percent_visible = viewport_size.height / content_size.height;
192188
let percent_scrolled = scroll_offset.y / (content_size.height - viewport_size.height);
193189

194190
let length = (percent_visible * viewport_size.height).ceil();
195-
let length = length.max(SCROLLBAR_MIN_SIZE);
191+
let length = length.max(bar_min_size);
196192

197193
let vertical_padding = bar_pad + bar_pad + bar_width;
198194

@@ -222,12 +218,13 @@ impl ScrollComponent {
222218

223219
let bar_width = env.get(theme::SCROLLBAR_WIDTH);
224220
let bar_pad = env.get(theme::SCROLLBAR_PAD);
221+
let bar_min_size = env.get(theme::SCROLLBAR_MIN_SIZE);
225222

226223
let percent_visible = viewport_size.width / content_size.width;
227224
let percent_scrolled = scroll_offset.x / (content_size.width - viewport_size.width);
228225

229226
let length = (percent_visible * viewport_size.width).ceil();
230-
let length = length.max(SCROLLBAR_MIN_SIZE);
227+
let length = length.max(bar_min_size);
231228

232229
let horizontal_padding = bar_pad + bar_pad + bar_width;
233230

druid/src/theme.rs

+4
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ pub const SCROLLBAR_PAD: Key<f64> = Key::new("org.linebender.druid.theme.scrollb
100100
pub const SCROLLBAR_RADIUS: Key<f64> = Key::new("org.linebender.druid.theme.scrollbar_radius");
101101
pub const SCROLLBAR_EDGE_WIDTH: Key<f64> =
102102
Key::new("org.linebender.druid.theme.scrollbar_edge_width");
103+
/// Minimum length for any scrollbar to be when measured on that
104+
/// scrollbar's primary axis.
105+
pub const SCROLLBAR_MIN_SIZE: Key<f64> = Key::new("org.linebender.theme.scrollbar_min_size");
103106

104107
/// An initial theme.
105108
pub(crate) fn add_to_env(env: Env) -> Env {
@@ -140,6 +143,7 @@ pub(crate) fn add_to_env(env: Env) -> Env {
140143
.adding(SCROLLBAR_FADE_DELAY, 1500u64)
141144
.adding(SCROLLBAR_WIDTH, 8.)
142145
.adding(SCROLLBAR_PAD, 2.)
146+
.adding(SCROLLBAR_MIN_SIZE, 45.)
143147
.adding(SCROLLBAR_RADIUS, 5.)
144148
.adding(SCROLLBAR_EDGE_WIDTH, 1.)
145149
.adding(WIDGET_PADDING_VERTICAL, 10.0)

0 commit comments

Comments
 (0)