|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|