summaryrefslogtreecommitdiffstats
path: root/tiny_skia/src
diff options
context:
space:
mode:
Diffstat (limited to 'tiny_skia/src')
-rw-r--r--tiny_skia/src/backend.rs8
-rw-r--r--tiny_skia/src/geometry.rs1
-rw-r--r--tiny_skia/src/text.rs17
3 files changed, 24 insertions, 2 deletions
diff --git a/tiny_skia/src/backend.rs b/tiny_skia/src/backend.rs
index 9c69e1d2..3ef7e717 100644
--- a/tiny_skia/src/backend.rs
+++ b/tiny_skia/src/backend.rs
@@ -219,6 +219,7 @@ impl Backend {
font,
horizontal_alignment,
vertical_alignment,
+ shaping,
} => {
let physical_bounds =
(primitive.bounds() + translation) * scale_factor;
@@ -238,6 +239,7 @@ impl Backend {
*font,
*horizontal_alignment,
*vertical_alignment,
+ *shaping,
pixels,
clip_mask,
);
@@ -626,8 +628,10 @@ impl backend::Text for Backend {
size: f32,
font: Font,
bounds: Size,
+ shaping: text::Shaping,
) -> (f32, f32) {
- self.text_pipeline.measure(contents, size, font, bounds)
+ self.text_pipeline
+ .measure(contents, size, font, bounds, shaping)
}
fn hit_test(
@@ -636,6 +640,7 @@ impl backend::Text for Backend {
size: f32,
font: Font,
bounds: Size,
+ shaping: text::Shaping,
point: Point,
nearest_only: bool,
) -> Option<text::Hit> {
@@ -644,6 +649,7 @@ impl backend::Text for Backend {
size,
font,
bounds,
+ shaping,
point,
nearest_only,
)
diff --git a/tiny_skia/src/geometry.rs b/tiny_skia/src/geometry.rs
index 508965ad..7963fd89 100644
--- a/tiny_skia/src/geometry.rs
+++ b/tiny_skia/src/geometry.rs
@@ -114,6 +114,7 @@ impl Frame {
font: text.font,
horizontal_alignment: text.horizontal_alignment,
vertical_alignment: text.vertical_alignment,
+ shaping: text.shaping,
});
}
diff --git a/tiny_skia/src/text.rs b/tiny_skia/src/text.rs
index 1246bbd5..58079cc0 100644
--- a/tiny_skia/src/text.rs
+++ b/tiny_skia/src/text.rs
@@ -1,6 +1,6 @@
use crate::core::alignment;
use crate::core::font::{self, Font};
-use crate::core::text::Hit;
+use crate::core::text::{Hit, Shaping};
use crate::core::{Color, Point, Rectangle, Size};
use rustc_hash::{FxHashMap, FxHashSet};
@@ -49,6 +49,7 @@ impl Pipeline {
font: Font,
horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical,
+ shaping: Shaping,
pixels: &mut tiny_skia::PixmapMut<'_>,
clip_mask: Option<&tiny_skia::Mask>,
) {
@@ -63,6 +64,7 @@ impl Pipeline {
content,
font,
size,
+ shaping,
};
let (_, buffer) = self.render_cache.allocate(font_system, key);
@@ -130,6 +132,7 @@ impl Pipeline {
size: f32,
font: Font,
bounds: Size,
+ shaping: Shaping,
) -> (f32, f32) {
let mut measurement_cache = self.measurement_cache.borrow_mut();
@@ -140,6 +143,7 @@ impl Pipeline {
size,
font,
bounds,
+ shaping,
},
);
@@ -159,6 +163,7 @@ impl Pipeline {
size: f32,
font: Font,
bounds: Size,
+ shaping: Shaping,
point: Point,
_nearest_only: bool,
) -> Option<Hit> {
@@ -171,6 +176,7 @@ impl Pipeline {
size,
font,
bounds,
+ shaping,
},
);
@@ -223,6 +229,13 @@ fn to_stretch(stretch: font::Stretch) -> cosmic_text::Stretch {
}
}
+fn to_shaping(shaping: Shaping) -> cosmic_text::Shaping {
+ match shaping {
+ Shaping::Basic => cosmic_text::Shaping::Basic,
+ Shaping::Advanced => cosmic_text::Shaping::Advanced,
+ }
+}
+
#[derive(Debug, Clone, Default)]
struct GlyphCache {
entries: FxHashMap<
@@ -390,6 +403,7 @@ impl Cache {
.family(to_family(key.font.family))
.weight(to_weight(key.font.weight))
.stretch(to_stretch(key.font.stretch)),
+ to_shaping(key.shaping),
);
let _ = entry.insert(buffer);
@@ -420,6 +434,7 @@ struct Key<'a> {
size: f32,
font: Font,
bounds: Size,
+ shaping: Shaping,
}
type KeyHash = u64;