| 165 | } |
| 166 | |
| 167 | func (g *Text) RenderText(sv *SVG) { |
| 168 | pc := &paint.Context{&sv.RenderState, &g.Paint} |
| 169 | mat := &pc.CurrentTransform |
| 170 | // note: layout of text has already been done in LocalBBox above |
| 171 | g.TextRender.Transform(*mat, &pc.FontStyle, &pc.UnitContext) |
| 172 | pos := mat.MulVector2AsPoint(math32.Vec2(g.Pos.X, g.Pos.Y)) |
| 173 | if pc.TextStyle.Align == styles.Center || pc.TextStyle.Anchor == styles.AnchorMiddle { |
| 174 | pos.X -= g.TextRender.BBox.Size().X * .5 |
| 175 | } else if pc.TextStyle.Align == styles.End || pc.TextStyle.Anchor == styles.AnchorEnd { |
| 176 | pos.X -= g.TextRender.BBox.Size().X |
| 177 | } |
| 178 | g.TextRender.Render(pc, pos) |
| 179 | g.LastPos = pos |
| 180 | bb := g.TextRender.BBox |
| 181 | bb.Translate(math32.Vec2(pos.X, pos.Y-0.8*pc.FontStyle.Font.Face.Metrics.Height)) // adjust for baseline |
| 182 | g.LastBBox = bb |
| 183 | g.BBoxes(sv) |
| 184 | } |
| 185 | |
| 186 | func (g *Text) LocalBBox() math32.Box2 { |
| 187 | return g.TextBBox() |