summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--glow/src/backend.rs1
-rw-r--r--graphics/fonts/Icons.ttfbin4912 -> 5032 bytes
-rw-r--r--graphics/src/backend.rs7
-rw-r--r--graphics/src/font.rs6
-rw-r--r--graphics/src/widget/combo_box.rs52
-rw-r--r--native/src/widget/combo_box.rs4
-rw-r--r--wgpu/src/backend.rs1
7 files changed, 50 insertions, 21 deletions
diff --git a/glow/src/backend.rs b/glow/src/backend.rs
index 8b5b4f9c..e1685816 100644
--- a/glow/src/backend.rs
+++ b/glow/src/backend.rs
@@ -193,6 +193,7 @@ impl iced_graphics::Backend for Backend {
impl backend::Text for Backend {
const ICON_FONT: Font = font::ICONS;
const CHECKMARK_ICON: char = font::CHECKMARK_ICON;
+ const ARROW_DOWN_ICON: char = font::ARROW_DOWN_ICON;
fn default_size(&self) -> u16 {
self.default_text_size
diff --git a/graphics/fonts/Icons.ttf b/graphics/fonts/Icons.ttf
index 1c832f86..5e455b69 100644
--- a/graphics/fonts/Icons.ttf
+++ b/graphics/fonts/Icons.ttf
Binary files differ
diff --git a/graphics/src/backend.rs b/graphics/src/backend.rs
index b73c636e..dd7dbbc2 100644
--- a/graphics/src/backend.rs
+++ b/graphics/src/backend.rs
@@ -22,9 +22,14 @@ pub trait Text {
/// The `char` representing a ✔ icon in the [`ICON_FONT`].
///
- /// [`ICON_FONT`]: #associatedconst.ICON_FONt
+ /// [`ICON_FONT`]: #associatedconst.ICON_FONT
const CHECKMARK_ICON: char;
+ /// The `char` representing a ▼ icon in the built-in [`ICONS`] font.
+ ///
+ /// [`ICON_FONT`]: #associatedconst.ICON_FONT
+ const ARROW_DOWN_ICON: char;
+
/// Returns the default size of text.
fn default_size(&self) -> u16;
diff --git a/graphics/src/font.rs b/graphics/src/font.rs
index bcc28857..5c62681c 100644
--- a/graphics/src/font.rs
+++ b/graphics/src/font.rs
@@ -31,3 +31,9 @@ pub const ICONS: iced_native::Font = iced_native::Font::External {
#[cfg(feature = "font-icons")]
#[cfg_attr(docsrs, doc(cfg(feature = "font-icons")))]
pub const CHECKMARK_ICON: char = '\u{F00C}';
+
+/// The `char` representing a ▼ icon in the built-in [`ICONS`] font.
+///
+/// [`ICONS`]: const.ICONS.html
+#[cfg(feature = "font-icons")]
+pub const ARROW_DOWN_ICON: char = '\u{E800}';
diff --git a/graphics/src/widget/combo_box.rs b/graphics/src/widget/combo_box.rs
index 27ea762a..92024c6c 100644
--- a/graphics/src/widget/combo_box.rs
+++ b/graphics/src/widget/combo_box.rs
@@ -35,27 +35,41 @@ where
border_radius: 0,
};
+ let arrow_down = Primitive::Text {
+ content: B::ARROW_DOWN_ICON.to_string(),
+ font: B::ICON_FONT,
+ size: bounds.height * 0.7,
+ bounds: Rectangle {
+ x: bounds.x + bounds.width - f32::from(padding) * 2.0,
+ y: bounds.center_y(),
+ ..bounds
+ },
+ color: Color::BLACK,
+ horizontal_alignment: HorizontalAlignment::Right,
+ vertical_alignment: VerticalAlignment::Center,
+ };
+
(
- if let Some(label) = selected {
- let label = Primitive::Text {
- content: label,
- size: f32::from(text_size),
- font: Font::Default,
- color: Color::BLACK,
- bounds: Rectangle {
- x: bounds.x + f32::from(padding),
- y: bounds.center_y(),
- ..bounds
- },
- horizontal_alignment: HorizontalAlignment::Left,
- vertical_alignment: VerticalAlignment::Center,
- };
+ Primitive::Group {
+ primitives: if let Some(label) = selected {
+ let label = Primitive::Text {
+ content: label,
+ size: f32::from(text_size),
+ font: Font::Default,
+ color: Color::BLACK,
+ bounds: Rectangle {
+ x: bounds.x + f32::from(padding),
+ y: bounds.center_y(),
+ ..bounds
+ },
+ horizontal_alignment: HorizontalAlignment::Left,
+ vertical_alignment: VerticalAlignment::Center,
+ };
- Primitive::Group {
- primitives: vec![background, label],
- }
- } else {
- background
+ vec![background, label, arrow_down]
+ } else {
+ vec![background, arrow_down]
+ },
},
if is_mouse_over {
mouse::Interaction::Pointer
diff --git a/native/src/widget/combo_box.rs b/native/src/widget/combo_box.rs
index 0b25b836..1b04a9a8 100644
--- a/native/src/widget/combo_box.rs
+++ b/native/src/widget/combo_box.rs
@@ -126,7 +126,9 @@ where
let size = {
let intrinsic = Size::new(
- max_width as f32 + f32::from(text_size),
+ max_width as f32
+ + f32::from(text_size)
+ + f32::from(self.padding),
f32::from(text_size),
);
diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs
index a25f42f7..c71a6a77 100644
--- a/wgpu/src/backend.rs
+++ b/wgpu/src/backend.rs
@@ -248,6 +248,7 @@ impl iced_graphics::Backend for Backend {
impl backend::Text for Backend {
const ICON_FONT: Font = font::ICONS;
const CHECKMARK_ICON: char = font::CHECKMARK_ICON;
+ const ARROW_DOWN_ICON: char = font::ARROW_DOWN_ICON;
fn default_size(&self) -> u16 {
self.default_text_size