diff --git a/src/qelmt/dynamictext.rs b/src/qelmt/dynamictext.rs index 3cd8b2b..c4cd25b 100644 --- a/src/qelmt/dynamictext.rs +++ b/src/qelmt/dynamictext.rs @@ -148,20 +148,32 @@ impl From<&DynamicText> for XMLElement { println!("对齐方式:{}, {}", txt.h_alignment, txt.v_alignment); println!("文本宽度: {}", txt_width); println!("文本高度:{}", pt_size); - println!("初始位置: x={}, y={}", txt.align_x, txt.align_y); + println!("初始左下角位置: x={}, y={}", txt.x, txt.y); + println!("初始对齐位置: x={}, y={}", txt.align_x, txt.align_y); println!("旋转角度: {}", txt.rotation); // println!("cjk_char_count: {}", cjk_char_count); // 计算基础位置(不考虑旋转) // txt.x和txt.y现在是对齐点坐标,需要根据对齐方式计算出左上角位置 // 首先根据水平对齐方式计算左边界的x坐标 - let left_x = txt.x; + // let left_x = txt.x; + let left_x = match txt.h_alignment { + HAlignment::Left => txt.x - 0.5, + HAlignment::Center => txt.align_x - 1.0, + HAlignment::Right => txt.align_x - 2.0 + }; // 根据垂直对齐方式计算顶部的y坐标 + // let top_y = match txt.v_alignment { + // VAlignment::Top => txt.y + pt_size / 2.0, + // VAlignment::Center => txt.y - pt_size / 2.0, + // VAlignment::Bottom => txt.y - pt_size + pt_size / 2.0, + // }; + let top_y = match txt.v_alignment { - VAlignment::Top => txt.y + pt_size / 2.0, - VAlignment::Center => txt.y - pt_size / 2.0, - VAlignment::Bottom => txt.y - pt_size + pt_size / 2.0, + VAlignment::Top => txt.align_y - 0.5, + VAlignment::Center => txt.align_y + 0.5, + VAlignment::Bottom => txt.y + 1.0 }; println!("左上角位置: x={}, y={}", left_x, top_y); @@ -170,14 +182,16 @@ impl From<&DynamicText> for XMLElement { let cjk_offset:f64 = (cjk_char_count as f64) * pt_size * 0.75; // 左对齐是不需要中文偏移的,居中对齐需要偏移,右对齐要偏移 - let base_x = left_x + 0.5 - (pt_size / 8.0) - 4.05; + let base_x = left_x;// + 0.5 - (pt_size / 8.0) - 4.05; // - match txt.h_alignment { // HAlignment::Left => 0.0, // HAlignment::Center => cjk_offset / 2.0, // HAlignment::Right => cjk_offset, // }; - let base_y = top_y + 0.5 - (7.0 / 5.0 * pt_size + 26.0 / 5.0) + pt_size; + // let base_y = top_y + 0.5 - (7.0 / 5.0 * pt_size + 26.0 / 5.0) + pt_size; + let base_y = top_y; + // 如果有旋转角度,应用旋转变换 let (x_pos, y_pos) = if txt.rotation != 0.0 { @@ -244,6 +258,8 @@ impl ScaleEntity for DynamicText { fn scale(&mut self, fact_x: f64, fact_y: f64) { self.x *= fact_x; self.y *= fact_y; + self.align_x *= fact_x; + self.align_y *= fact_y; //self.font.pixel_size *= fact; self.font.point_size *= fact_x; }