mirror of
https://github.com/penpot/penpot.git
synced 2025-06-24 13:47:01 +02:00
Merge pull request #6602 from penpot/elenatorro-11214-use-text-decoration-from-leaf
🐛 Fix reading text-decoration and text-transform from leaf, and fallback to paragraph values
This commit is contained in:
commit
90744c182e
2 changed files with 27 additions and 9 deletions
|
@ -104,12 +104,17 @@
|
||||||
font-id (f/serialize-font-id (:font-id leaf))
|
font-id (f/serialize-font-id (:font-id leaf))
|
||||||
font-family (hash (:font-family leaf))
|
font-family (hash (:font-family leaf))
|
||||||
font-variant-id (sr/serialize-uuid (:font-variant-id leaf))
|
font-variant-id (sr/serialize-uuid (:font-variant-id leaf))
|
||||||
|
leaf-text-decoration (or (sr/serialize-text-decoration (:text-decoration leaf)) (sr/serialize-text-decoration (:text-decoration paragraph)))
|
||||||
|
leaf-text-transform (or (sr/serialize-text-transform (:text-transform leaf)) (sr/serialize-text-transform (:text-transform paragraph)))
|
||||||
text-buffer (utf8->buffer (:text leaf))
|
text-buffer (utf8->buffer (:text leaf))
|
||||||
text-length (.-byteLength text-buffer)
|
text-length (.-byteLength text-buffer)
|
||||||
fills (:fills leaf)
|
fills (:fills leaf)
|
||||||
total-fills (count fills)]
|
total-fills (count fills)]
|
||||||
|
|
||||||
(.setUint8 dview offset font-style le?)
|
(.setUint8 dview offset font-style le?)
|
||||||
|
(.setUint8 dview (+ offset 1) leaf-text-decoration le?)
|
||||||
|
(.setUint8 dview (+ offset 2) leaf-text-transform le?)
|
||||||
|
|
||||||
(.setFloat32 dview (+ offset 4) font-size le?)
|
(.setFloat32 dview (+ offset 4) font-size le?)
|
||||||
(.setUint32 dview (+ offset 8) font-weight le?)
|
(.setUint32 dview (+ offset 8) font-weight le?)
|
||||||
(.setUint32 dview (+ offset 12) (aget font-id 0) le?)
|
(.setUint32 dview (+ offset 12) (aget font-id 0) le?)
|
||||||
|
|
|
@ -103,7 +103,7 @@ impl TextContent {
|
||||||
let mut builder = ParagraphBuilder::new(¶graph_style, fonts);
|
let mut builder = ParagraphBuilder::new(¶graph_style, fonts);
|
||||||
for leaf in &p.children {
|
for leaf in &p.children {
|
||||||
let text_style = leaf.to_style(p, &self.bounds); // FIXME
|
let text_style = leaf.to_style(p, &self.bounds); // FIXME
|
||||||
let text = leaf.apply_text_transform(p.text_transform);
|
let text = leaf.apply_text_transform();
|
||||||
builder.push_style(&text_style);
|
builder.push_style(&text_style);
|
||||||
builder.add_text(&text);
|
builder.add_text(&text);
|
||||||
builder.pop();
|
builder.pop();
|
||||||
|
@ -131,7 +131,7 @@ impl TextContent {
|
||||||
let mut builder = ParagraphBuilder::new(¶graph_style, fonts);
|
let mut builder = ParagraphBuilder::new(¶graph_style, fonts);
|
||||||
for leaf in ¶graph.children {
|
for leaf in ¶graph.children {
|
||||||
let stroke_style = leaf.to_stroke_style(paragraph, &stroke_paint);
|
let stroke_style = leaf.to_stroke_style(paragraph, &stroke_paint);
|
||||||
let text: String = leaf.apply_text_transform(paragraph.text_transform);
|
let text: String = leaf.apply_text_transform();
|
||||||
builder.push_style(&stroke_style);
|
builder.push_style(&stroke_style);
|
||||||
builder.add_text(&text);
|
builder.add_text(&text);
|
||||||
builder.pop();
|
builder.pop();
|
||||||
|
@ -301,15 +301,20 @@ pub struct TextLeaf {
|
||||||
font_style: u8,
|
font_style: u8,
|
||||||
font_weight: i32,
|
font_weight: i32,
|
||||||
font_variant_id: Uuid,
|
font_variant_id: Uuid,
|
||||||
|
text_decoration: u8,
|
||||||
|
text_transform: u8,
|
||||||
fills: Vec<shapes::Fill>,
|
fills: Vec<shapes::Fill>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TextLeaf {
|
impl TextLeaf {
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
text: String,
|
text: String,
|
||||||
font_family: FontFamily,
|
font_family: FontFamily,
|
||||||
font_size: f32,
|
font_size: f32,
|
||||||
font_style: u8,
|
font_style: u8,
|
||||||
|
text_decoration: u8,
|
||||||
|
text_transform: u8,
|
||||||
font_weight: i32,
|
font_weight: i32,
|
||||||
font_variant_id: Uuid,
|
font_variant_id: Uuid,
|
||||||
fills: Vec<shapes::Fill>,
|
fills: Vec<shapes::Fill>,
|
||||||
|
@ -319,6 +324,8 @@ impl TextLeaf {
|
||||||
font_family,
|
font_family,
|
||||||
font_size,
|
font_size,
|
||||||
font_style,
|
font_style,
|
||||||
|
text_decoration,
|
||||||
|
text_transform,
|
||||||
font_weight,
|
font_weight,
|
||||||
font_variant_id,
|
font_variant_id,
|
||||||
fills,
|
fills,
|
||||||
|
@ -345,7 +352,7 @@ impl TextLeaf {
|
||||||
style.set_letter_spacing(paragraph.letter_spacing);
|
style.set_letter_spacing(paragraph.letter_spacing);
|
||||||
style.set_height(paragraph.line_height);
|
style.set_height(paragraph.line_height);
|
||||||
style.set_height_override(true);
|
style.set_height_override(true);
|
||||||
style.set_decoration_type(match paragraph.text_decoration {
|
style.set_decoration_type(match self.text_decoration {
|
||||||
0 => skia::textlayout::TextDecoration::NO_DECORATION,
|
0 => skia::textlayout::TextDecoration::NO_DECORATION,
|
||||||
1 => skia::textlayout::TextDecoration::UNDERLINE,
|
1 => skia::textlayout::TextDecoration::UNDERLINE,
|
||||||
2 => skia::textlayout::TextDecoration::LINE_THROUGH,
|
2 => skia::textlayout::TextDecoration::LINE_THROUGH,
|
||||||
|
@ -373,7 +380,7 @@ impl TextLeaf {
|
||||||
style.set_foreground_paint(stroke_paint);
|
style.set_foreground_paint(stroke_paint);
|
||||||
style.set_font_size(self.font_size);
|
style.set_font_size(self.font_size);
|
||||||
style.set_letter_spacing(paragraph.letter_spacing);
|
style.set_letter_spacing(paragraph.letter_spacing);
|
||||||
style.set_decoration_type(match paragraph.text_decoration {
|
style.set_decoration_type(match self.text_decoration {
|
||||||
0 => skia::textlayout::TextDecoration::NO_DECORATION,
|
0 => skia::textlayout::TextDecoration::NO_DECORATION,
|
||||||
1 => skia::textlayout::TextDecoration::UNDERLINE,
|
1 => skia::textlayout::TextDecoration::UNDERLINE,
|
||||||
2 => skia::textlayout::TextDecoration::LINE_THROUGH,
|
2 => skia::textlayout::TextDecoration::LINE_THROUGH,
|
||||||
|
@ -387,8 +394,8 @@ impl TextLeaf {
|
||||||
format!("{}", self.font_family)
|
format!("{}", self.font_family)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn apply_text_transform(&self, transform: u8) -> String {
|
pub fn apply_text_transform(&self) -> String {
|
||||||
match transform {
|
match self.text_transform {
|
||||||
1 => self.text.to_uppercase(),
|
1 => self.text.to_uppercase(),
|
||||||
2 => self.text.to_lowercase(),
|
2 => self.text.to_lowercase(),
|
||||||
3 => self
|
3 => self
|
||||||
|
@ -413,15 +420,15 @@ impl TextLeaf {
|
||||||
}
|
}
|
||||||
|
|
||||||
const RAW_PARAGRAPH_DATA_SIZE: usize = std::mem::size_of::<RawParagraphData>();
|
const RAW_PARAGRAPH_DATA_SIZE: usize = std::mem::size_of::<RawParagraphData>();
|
||||||
//const RAW_LEAF_DATA_SIZE: usize = std::mem::size_of::<RawTextLeaf>();
|
const RAW_LEAF_DATA_SIZE: usize = std::mem::size_of::<RawTextLeaf>();
|
||||||
// FIXME
|
|
||||||
pub const RAW_LEAF_DATA_SIZE: usize = 56;
|
|
||||||
pub const RAW_LEAF_FILLS_SIZE: usize = 160;
|
pub const RAW_LEAF_FILLS_SIZE: usize = 160;
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub struct RawTextLeaf {
|
pub struct RawTextLeaf {
|
||||||
font_style: u8,
|
font_style: u8,
|
||||||
|
text_decoration: u8,
|
||||||
|
text_transform: u8,
|
||||||
font_size: f32,
|
font_size: f32,
|
||||||
font_weight: i32,
|
font_weight: i32,
|
||||||
font_id: [u32; 4],
|
font_id: [u32; 4],
|
||||||
|
@ -452,6 +459,8 @@ impl TryFrom<&[u8]> for RawTextLeaf {
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct RawTextLeafData {
|
pub struct RawTextLeafData {
|
||||||
font_style: u8,
|
font_style: u8,
|
||||||
|
text_decoration: u8,
|
||||||
|
text_transform: u8,
|
||||||
font_size: f32,
|
font_size: f32,
|
||||||
font_weight: i32,
|
font_weight: i32,
|
||||||
font_id: [u32; 4],
|
font_id: [u32; 4],
|
||||||
|
@ -479,6 +488,8 @@ impl From<&[u8]> for RawTextLeafData {
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
font_style: text_leaf.font_style,
|
font_style: text_leaf.font_style,
|
||||||
|
text_decoration: text_leaf.text_decoration,
|
||||||
|
text_transform: text_leaf.text_transform,
|
||||||
font_size: text_leaf.font_size,
|
font_size: text_leaf.font_size,
|
||||||
font_weight: text_leaf.font_weight,
|
font_weight: text_leaf.font_weight,
|
||||||
font_id: text_leaf.font_id,
|
font_id: text_leaf.font_id,
|
||||||
|
@ -583,6 +594,8 @@ impl From<&Vec<u8>> for RawTextData {
|
||||||
font_family,
|
font_family,
|
||||||
text_leaf.font_size,
|
text_leaf.font_size,
|
||||||
text_leaf.font_style,
|
text_leaf.font_style,
|
||||||
|
text_leaf.text_decoration,
|
||||||
|
text_leaf.text_transform,
|
||||||
text_leaf.font_weight,
|
text_leaf.font_weight,
|
||||||
font_variant_id,
|
font_variant_id,
|
||||||
text_leaf.fills.clone(),
|
text_leaf.fills.clone(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue