mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-08-30 12:12:40 +08:00
feat(文字渲染): 加强文字渲染能力
This commit is contained in:
+14
-3
@@ -802,6 +802,10 @@ func (r *Renderer) renderText(ctx *canvas.Context, obj TextObject, pageH float64
|
||||
if obj.VScale != 0 {
|
||||
sizeMM *= obj.VScale
|
||||
}
|
||||
hScale := obj.HScale
|
||||
if hScale == 0 {
|
||||
hScale = 1
|
||||
}
|
||||
useTextMatrix := hasTextMatrix(ctm)
|
||||
if scale := ctm.YScale(); scale > 0 && !useTextMatrix {
|
||||
sizeMM *= scale
|
||||
@@ -888,7 +892,7 @@ func (r *Renderer) renderText(ctx *canvas.Context, obj TextObject, pageH float64
|
||||
if dx, ok := textDelta(dxs, i-1); ok {
|
||||
cx += dx
|
||||
} else if len(dys) == 0 {
|
||||
cx += face.TextWidth(str)
|
||||
cx += face.TextWidth(str) * hScale
|
||||
}
|
||||
}
|
||||
if i < len(ys) {
|
||||
@@ -900,7 +904,7 @@ func (r *Renderer) renderText(ctx *canvas.Context, obj TextObject, pageH float64
|
||||
}
|
||||
tx, ty := ctm.Transform(cx, cy)
|
||||
canvasX, canvasY := tx+bx, pageH-(ty+by)
|
||||
textWidth := face.TextWidth(str)
|
||||
textWidth := face.TextWidth(str) * hScale
|
||||
glyphFillPaint := fillPaint
|
||||
if fillColorNode != nil && fillColorNode.AxialShd != nil {
|
||||
glyphFillPaint = parseFillPaint(fillColorNode, bx, by, pageH, canvasX, canvasY)
|
||||
@@ -908,9 +912,16 @@ func (r *Renderer) renderText(ctx *canvas.Context, obj TextObject, pageH float64
|
||||
if glyphFillPaint != nil {
|
||||
ctx.SetFill(glyphFillPaint)
|
||||
drawGlyph := func(x, y float64) {
|
||||
if hScale != 1 {
|
||||
ctx.Push()
|
||||
ctx.Translate(x, y)
|
||||
ctx.Scale(hScale, 1)
|
||||
x, y = 0, 0
|
||||
defer ctx.Pop()
|
||||
}
|
||||
if embeddedFont {
|
||||
path, width := face.ToPath(str)
|
||||
textWidth = width
|
||||
textWidth = width * hScale
|
||||
ctx.DrawPath(x, y, path)
|
||||
} else {
|
||||
textFace := face
|
||||
|
||||
+16
-3
@@ -35,9 +35,9 @@ func parseColor(val string) color.Color {
|
||||
func parseColorWithAlpha(val string, alpha *int) color.Color {
|
||||
parts := strings.Fields(val)
|
||||
if len(parts) >= 3 {
|
||||
r, _ := strconv.Atoi(parts[0])
|
||||
g, _ := strconv.Atoi(parts[1])
|
||||
b, _ := strconv.Atoi(parts[2])
|
||||
r := parseColorComponent(parts[0])
|
||||
g := parseColorComponent(parts[1])
|
||||
b := parseColorComponent(parts[2])
|
||||
a := 255
|
||||
if alpha != nil {
|
||||
a = *alpha
|
||||
@@ -53,6 +53,19 @@ func parseColorWithAlpha(val string, alpha *int) color.Color {
|
||||
return color.Black
|
||||
}
|
||||
|
||||
// parseColorComponent 解析颜色分量
|
||||
// 入参: s 颜色分量
|
||||
// 返回: int 颜色分量值
|
||||
func parseColorComponent(s string) int {
|
||||
s = strings.TrimSpace(s)
|
||||
if strings.HasPrefix(s, "#") {
|
||||
v, _ := strconv.ParseInt(strings.TrimPrefix(s, "#"), 16, 0)
|
||||
return int(v)
|
||||
}
|
||||
v, _ := strconv.Atoi(s)
|
||||
return v
|
||||
}
|
||||
|
||||
// clampColor 限制颜色分量范围
|
||||
// 入参: v 颜色分量
|
||||
// 返回: int 颜色分量
|
||||
|
||||
Reference in New Issue
Block a user