mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-26 05:30:54 +03:00
images: Add option for vertical alignment to images.Text
Add option ``aligny`` to specify the vertical alignment of the text with respect to the ``y`` offset from the top of the image. Possible values of ``aligny`` are ``top`` (default), ``center``, and ``bottom``. The height of the block of text is measured from the top of the first line to the baseline of the last line. - ``top``: (Current behaviour) The top of the first line of the block of text is at an offset of ``y`` from the top of the image. - ``center``: The vertical center of the block of text is at an offset of ``y`` from the top of the image. - ``bottom``: The baseline of the last line of the text is at an offset of ``y`` from the top of the image. Resolves #13414
This commit is contained in:
parent
179aea11ac
commit
2fce0bac03
3 changed files with 21 additions and 4 deletions
|
@ -18,6 +18,9 @@ alignx
|
||||||
: {{< new-in 0.141.0 />}}
|
: {{< new-in 0.141.0 />}}
|
||||||
: (`string`) The horizontal alignment of the text relative to the horizontal offset, one of `left`, `center`, or `right`. Default is `left`.
|
: (`string`) The horizontal alignment of the text relative to the horizontal offset, one of `left`, `center`, or `right`. Default is `left`.
|
||||||
|
|
||||||
|
aligny
|
||||||
|
: (`string`) The vertical alignment of the text relative to the vertical offset, one of `top`, `center`, or `bottom`. Default is `top`.
|
||||||
|
|
||||||
color
|
color
|
||||||
: (`string`) The font color, either a 3-digit or 6-digit hexadecimal color code. Default is `#ffffff` (white).
|
: (`string`) The font color, either a 3-digit or 6-digit hexadecimal color code. Default is `#ffffff` (white).
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,7 @@ func (*Filters) Text(text string, options ...any) gift.Filter {
|
||||||
x: 10,
|
x: 10,
|
||||||
y: 10,
|
y: 10,
|
||||||
alignx: "left",
|
alignx: "left",
|
||||||
|
aligny: "top",
|
||||||
linespacing: 2,
|
linespacing: 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,6 +103,11 @@ func (*Filters) Text(text string, options ...any) gift.Filter {
|
||||||
if tf.alignx != "left" && tf.alignx != "center" && tf.alignx != "right" {
|
if tf.alignx != "left" && tf.alignx != "center" && tf.alignx != "right" {
|
||||||
panic("alignx must be one of left, center, right")
|
panic("alignx must be one of left, center, right")
|
||||||
}
|
}
|
||||||
|
case "aligny":
|
||||||
|
tf.aligny = cast.ToString(v)
|
||||||
|
if tf.aligny != "top" && tf.aligny != "center" && tf.aligny != "bottom" {
|
||||||
|
panic("aligny must be one of top, center, bottom")
|
||||||
|
}
|
||||||
|
|
||||||
case "linespacing":
|
case "linespacing":
|
||||||
tf.linespacing = cast.ToInt(v)
|
tf.linespacing = cast.ToInt(v)
|
||||||
|
|
|
@ -36,6 +36,7 @@ type textFilter struct {
|
||||||
color color.Color
|
color color.Color
|
||||||
x, y int
|
x, y int
|
||||||
alignx string
|
alignx string
|
||||||
|
aligny string
|
||||||
size float64
|
size float64
|
||||||
linespacing int
|
linespacing int
|
||||||
fontSource hugio.ReadSeekCloserProvider
|
fontSource hugio.ReadSeekCloserProvider
|
||||||
|
@ -110,12 +111,19 @@ func (f textFilter) Draw(dst draw.Image, src image.Image, options *gift.Options)
|
||||||
}
|
}
|
||||||
finalLines = append(finalLines, currentLine)
|
finalLines = append(finalLines, currentLine)
|
||||||
}
|
}
|
||||||
|
// Total height of the text from the top of the first line to the baseline of the last line
|
||||||
|
totalHeight := len(finalLines)*fontHeight + (len(finalLines)-1)*f.linespacing
|
||||||
|
|
||||||
// Correct y position based on font and size
|
// Correct y position based on font and size
|
||||||
f.y = f.y + fontHeight
|
y := f.y + fontHeight
|
||||||
|
switch f.aligny {
|
||||||
// Start position
|
case "top":
|
||||||
y := f.y
|
// Do nothing
|
||||||
|
case "center":
|
||||||
|
y = y - totalHeight/2
|
||||||
|
case "bottom":
|
||||||
|
y = y - totalHeight
|
||||||
|
}
|
||||||
|
|
||||||
// Draw text line by line
|
// Draw text line by line
|
||||||
for _, line := range finalLines {
|
for _, line := range finalLines {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue