Merge pull request #58 from liamg/more-fonts

Added multi font support including emoji, powerline rune ranges etc.
This commit is contained in:
Liam Galvin 2018-11-15 12:27:02 +00:00 committed by GitHub
commit 067966e3dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 173 additions and 86 deletions

3
go.mod
View File

@ -4,7 +4,7 @@ require (
github.com/BurntSushi/toml v0.3.1 github.com/BurntSushi/toml v0.3.1
github.com/go-gl/gl v0.0.0-20181020191150-629e6eb0370b github.com/go-gl/gl v0.0.0-20181020191150-629e6eb0370b
github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51 github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51
github.com/gobuffalo/packr v1.13.7 github.com/gobuffalo/packr v1.21.0
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
github.com/kr/pty v1.1.3 github.com/kr/pty v1.1.3
github.com/riywo/loginshell v0.0.0-20130819055122-5da3acff0255 github.com/riywo/loginshell v0.0.0-20130819055122-5da3acff0255
@ -13,4 +13,5 @@ require (
go.uber.org/multierr v1.1.0 // indirect go.uber.org/multierr v1.1.0 // indirect
go.uber.org/zap v1.9.1 go.uber.org/zap v1.9.1
golang.org/x/image v0.0.0-20180926015637-991ec62608f3 golang.org/x/image v0.0.0-20180926015637-991ec62608f3
golang.org/x/net v0.0.0-20180921000356-2f5d2388922f // indirect
) )

15
go.sum
View File

@ -6,21 +6,34 @@ github.com/go-gl/gl v0.0.0-20181020191150-629e6eb0370b h1:dxIBr5pf89Lw0vPW6BInBZ
github.com/go-gl/gl v0.0.0-20181020191150-629e6eb0370b/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk= github.com/go-gl/gl v0.0.0-20181020191150-629e6eb0370b/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51 h1:elGSwayRx7uAsfA5PnVKeTHh+AVsUTmas0CkHOw/DSk= github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51 h1:elGSwayRx7uAsfA5PnVKeTHh+AVsUTmas0CkHOw/DSk=
github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/gobuffalo/envy v1.6.9 h1:ShEJ/fUg/wr5qIYmTTOnUQ0sy1yGo+4uYQJNgg753S8=
github.com/gobuffalo/envy v1.6.9/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7 h1:7AZMyDyRxIm2cbSXRvUEUJrankvMV1xcAOrrWUWp7yE=
github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI=
github.com/gobuffalo/packr v1.13.7 h1:2uZgLd6b/W4yRBZV/ScaORxZLNGMHO0VCvqQNkKukNA= github.com/gobuffalo/packr v1.13.7 h1:2uZgLd6b/W4yRBZV/ScaORxZLNGMHO0VCvqQNkKukNA=
github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24= github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24=
github.com/gobuffalo/packr v1.21.0 h1:p2ujcDJQp2QTiYWcI0ByHbr/gMoCouok6M0vXs/yTYQ=
github.com/gobuffalo/packr v1.21.0/go.mod h1:H00jGfj1qFKxscFJSw8wcL4hpQtPe1PfU2wa6sg/SR0=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/kr/pty v1.1.3 h1:/Um6a/ZmD5tF7peoOJ5oN5KMQ0DrGVQSXLNwyckutPk= github.com/kr/pty v1.1.3 h1:/Um6a/ZmD5tF7peoOJ5oN5KMQ0DrGVQSXLNwyckutPk=
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/markbates/oncer v0.0.0-20181014194634-05fccaae8fc4 h1:Mlji5gkcpzkqTROyE4ZxZ8hN7osunMb2RuGVrbvMvCc=
github.com/markbates/oncer v0.0.0-20181014194634-05fccaae8fc4/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/riywo/loginshell v0.0.0-20130819055122-5da3acff0255 h1:wE4Lc/2Tw9oMPFO7UeHhZgmzqPbjG9ilPe4e7VlBOog= github.com/riywo/loginshell v0.0.0-20130819055122-5da3acff0255 h1:wE4Lc/2Tw9oMPFO7UeHhZgmzqPbjG9ilPe4e7VlBOog=
github.com/riywo/loginshell v0.0.0-20130819055122-5da3acff0255/go.mod h1:/PfPXh0EntGc3QAAyUaviy4S9tzy4Zp0e2ilq4voC6E= github.com/riywo/loginshell v0.0.0-20130819055122-5da3acff0255/go.mod h1:/PfPXh0EntGc3QAAyUaviy4S9tzy4Zp0e2ilq4voC6E=
github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4= go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4=
@ -33,3 +46,5 @@ golang.org/x/image v0.0.0-20180926015637-991ec62608f3 h1:5IfA9fqItkh2alJW94tvQk+
golang.org/x/image v0.0.0-20180926015637-991ec62608f3/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20180926015637-991ec62608f3/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=

File diff suppressed because one or more lines are too long

77
gui/fontmap.go Normal file
View File

@ -0,0 +1,77 @@
package gui
import "github.com/liamg/aminal/glfont"
type FontMap struct {
defaultFont *glfont.Font
defaultBoldFont *glfont.Font
runeMap map[rune]*glfont.Font
ranges map[runeRange]*glfont.Font
}
type runeRange struct {
start rune
end rune // inclusive
}
func NewFontMap(defaultFont *glfont.Font, defaultBoldFont *glfont.Font) *FontMap {
return &FontMap{
defaultFont: defaultFont,
defaultBoldFont: defaultBoldFont,
runeMap: map[rune]*glfont.Font{},
ranges: map[runeRange]*glfont.Font{},
}
}
func (fm *FontMap) UpdateResolution(w int, h int) {
fm.defaultFont.UpdateResolution(w, h)
fm.defaultBoldFont.UpdateResolution(w, h)
for _, f := range fm.ranges {
f.UpdateResolution(w, h)
}
}
func (fm *FontMap) findOverride(r rune) *glfont.Font {
override, ok := fm.runeMap[r]
if ok {
return override
}
for rr, f := range fm.ranges {
if r >= rr.start && r <= rr.end {
fm.runeMap[r] = f
return f
}
}
return nil
}
func (fm *FontMap) setOverrideRange(start rune, end rune, font *glfont.Font) {
fm.ranges[runeRange{start: start, end: end}] = font
}
func (fm *FontMap) GetFont(r rune) *glfont.Font {
if r <= 0xff {
return fm.defaultFont
}
if f := fm.findOverride(r); f != nil {
return f
}
return fm.defaultFont
}
func (fm *FontMap) GetBoldFont(r rune) *glfont.Font {
if r <= 0xff {
return fm.defaultBoldFont
}
if f := fm.findOverride(r); f != nil {
return f
}
return fm.defaultBoldFont
}

54
gui/fonts.go Normal file
View File

@ -0,0 +1,54 @@
package gui
import (
"bytes"
"fmt"
"github.com/gobuffalo/packr"
"github.com/liamg/aminal/glfont"
)
func (gui *GUI) getPackedFont(name string) (*glfont.Font, error) {
box := packr.NewBox("./packed-fonts")
fontBytes, err := box.MustBytes(name)
if err != nil {
return nil, fmt.Errorf("Packaged font '%s' could not be read: %s", name, err)
}
font, err := glfont.LoadFont(bytes.NewReader(fontBytes), gui.fontScale, gui.width, gui.height)
if err != nil {
return nil, fmt.Errorf("Font '%s' failed to load: %v", name, err)
}
return font, nil
}
func (gui *GUI) loadFonts() error {
defaultFont, err := gui.getPackedFont("Hack-Regular.ttf")
if err != nil {
return err
}
boldFont, err := gui.getPackedFont("Hack-Bold.ttf")
if err != nil {
return err
}
gui.fontMap = NewFontMap(defaultFont, boldFont)
// add special font usage here
noto, err := gui.getPackedFont("NotoEmoji-Regular.ttf")
if err != nil {
return err
}
// misc symbols, lightning bolt etc.
gui.fontMap.setOverrideRange(0x2600, 0x26FF, noto)
// emoji
gui.fontMap.setOverrideRange(0x1F600, 0x1F64F, noto)
return nil
}

View File

@ -1,15 +1,11 @@
package gui package gui
import ( import (
"bytes"
"fmt" "fmt"
"os/exec" "os/exec"
"runtime" "runtime"
"time" "time"
"github.com/gobuffalo/packr"
"github.com/liamg/aminal/glfont"
"github.com/go-gl/gl/all-core/gl" "github.com/go-gl/gl/all-core/gl"
"github.com/go-gl/glfw/v3.2/glfw" "github.com/go-gl/glfw/v3.2/glfw"
"github.com/liamg/aminal/buffer" "github.com/liamg/aminal/buffer"
@ -25,8 +21,7 @@ type GUI struct {
terminal *terminal.Terminal terminal *terminal.Terminal
width int //window width in pixels width int //window width in pixels
height int //window height in pixels height int //window height in pixels
font *glfont.Font fontMap *FontMap
boldFont *glfont.Font
fontScale float32 fontScale float32
renderer *OpenGLRenderer renderer *OpenGLRenderer
colourAttr uint32 colourAttr uint32
@ -64,13 +59,8 @@ func (gui *GUI) resize(w *glfw.Window, width int, height int) {
hScale := float32(ww) / float32(width) hScale := float32(ww) / float32(width)
vScale := float32(wh) / float32(height) vScale := float32(wh) / float32(height)
gui.logger.Debugf("Updating font resolution...") gui.logger.Debugf("Updating font resolutions...")
if gui.font != nil { gui.fontMap.UpdateResolution(int(float32(width)*hScale), int(float32(height)*vScale))
gui.font.UpdateResolution(int(float32(width)*hScale), int(float32(height)*vScale))
}
if gui.boldFont != nil {
gui.boldFont.UpdateResolution(int(float32(width)*hScale), int(float32(height)*vScale))
}
gui.logger.Debugf("Setting renderer area...") gui.logger.Debugf("Setting renderer area...")
gui.renderer.SetArea(0, 0, int(float32(width)*hScale), int(float32(height)*vScale)) gui.renderer.SetArea(0, 0, int(float32(width)*hScale), int(float32(height)*vScale))
@ -126,13 +116,13 @@ func (gui *GUI) Render() error {
gl.BindFragDataLocation(program, 0, gl.Str("outColour\x00")) gl.BindFragDataLocation(program, 0, gl.Str("outColour\x00"))
gui.logger.Debugf("Loading font...") gui.logger.Debugf("Loading font...")
if err := gui.loadDefaultFont(); err != nil { if err := gui.loadFonts(); err != nil {
return fmt.Errorf("Failed to load font: %s", err) return fmt.Errorf("Failed to load font: %s", err)
} }
titleChan := make(chan bool, 1) titleChan := make(chan bool, 1)
gui.renderer = NewOpenGLRenderer(gui.config, gui.font, gui.boldFont, 0, 0, gui.width, gui.height, gui.colourAttr, program) gui.renderer = NewOpenGLRenderer(gui.config, gui.fontMap, 0, 0, gui.width, gui.height, gui.colourAttr, program)
gui.window.SetFramebufferSizeCallback(gui.resize) gui.window.SetFramebufferSizeCallback(gui.resize)
gui.window.SetKeyCallback(gui.key) gui.window.SetKeyCallback(gui.key)
@ -277,37 +267,6 @@ Buffer Size: %d lines
} }
func (gui *GUI) loadDefaultFont() error {
box := packr.NewBox("./packed-fonts")
fontBytes, err := box.MustBytes("Hack-Regular.ttf")
if err != nil {
return fmt.Errorf("Packaged font could not be read: %s", err)
}
font, err := glfont.LoadFont(bytes.NewReader(fontBytes), gui.fontScale, gui.width, gui.height)
if err != nil {
return fmt.Errorf("LoadFont: %v", err)
}
gui.font = font
{
fontBytes, err := box.MustBytes("Hack-Bold.ttf")
if err != nil {
return fmt.Errorf("Packaged font could not be read: %s", err)
}
font, err := glfont.LoadFont(bytes.NewReader(fontBytes), gui.fontScale, gui.width, gui.height)
if err != nil {
return fmt.Errorf("LoadFont: %v", err)
}
gui.boldFont = font
}
return nil
}
func (gui *GUI) createWindow(width int, height int) (*glfw.Window, error) { func (gui *GUI) createWindow(width int, height int) (*glfw.Window, error) {
if err := glfw.Init(); err != nil { if err := glfw.Init(); err != nil {
return nil, fmt.Errorf("Failed to initialise GLFW: %s", err) return nil, fmt.Errorf("Failed to initialise GLFW: %s", err)

Binary file not shown.

View File

@ -27,6 +27,7 @@ type OpenGLRenderer struct {
colourAttr uint32 colourAttr uint32
program uint32 program uint32
textureMap map[*image.RGBA]uint32 textureMap map[*image.RGBA]uint32
fontMap *FontMap
} }
type rectangle struct { type rectangle struct {
@ -129,7 +130,7 @@ func (rect *rectangle) Free() {
gl.DeleteBuffers(1, &rect.cv) gl.DeleteBuffers(1, &rect.cv)
} }
func NewOpenGLRenderer(config *config.Config, font *glfont.Font, boldFont *glfont.Font, areaX int, areaY int, areaWidth int, areaHeight int, colourAttr uint32, program uint32) *OpenGLRenderer { func NewOpenGLRenderer(config *config.Config, fontMap *FontMap, areaX int, areaY int, areaWidth int, areaHeight int, colourAttr uint32, program uint32) *OpenGLRenderer {
r := &OpenGLRenderer{ r := &OpenGLRenderer{
areaWidth: areaWidth, areaWidth: areaWidth,
areaHeight: areaHeight, areaHeight: areaHeight,
@ -141,8 +142,9 @@ func NewOpenGLRenderer(config *config.Config, font *glfont.Font, boldFont *glfon
colourAttr: colourAttr, colourAttr: colourAttr,
program: program, program: program,
textureMap: map[*image.RGBA]uint32{}, textureMap: map[*image.RGBA]uint32{},
fontMap: fontMap,
} }
r.SetFont(font, boldFont) r.SetArea(areaX, areaY, areaWidth, areaHeight)
return r return r
} }
@ -155,14 +157,9 @@ func (r *OpenGLRenderer) SetArea(areaX int, areaY int, areaWidth int, areaHeight
r.areaHeight = areaHeight r.areaHeight = areaHeight
r.areaX = areaX r.areaX = areaX
r.areaY = areaY r.areaY = areaY
r.SetFont(r.font, r.boldFont) f := r.fontMap.GetFont('X')
} r.cellWidth, _ = f.Size("X")
r.cellHeight = f.LineHeight() // vertical padding
func (r *OpenGLRenderer) SetFont(font *glfont.Font, bold *glfont.Font) { // @todo check for monospace and return error if not?
r.font = font
r.boldFont = bold
r.cellWidth, _ = font.Size("X")
r.cellHeight = font.LineHeight() // vertical padding
r.termCols = uint(math.Floor(float64(float32(r.areaWidth) / r.cellWidth))) r.termCols = uint(math.Floor(float64(float32(r.areaWidth) / r.cellWidth)))
r.termRows = uint(math.Floor(float64(float32(r.areaHeight) / r.cellHeight))) r.termRows = uint(math.Floor(float64(float32(r.areaHeight) / r.cellHeight)))
r.rectangles = map[[2]uint]*rectangle{} r.rectangles = map[[2]uint]*rectangle{}
@ -232,26 +229,20 @@ func (r *OpenGLRenderer) DrawCellText(cell buffer.Cell, col uint, row uint, alph
fg = cell.Fg() fg = cell.Fg()
} }
f := r.fontMap.GetFont(cell.Rune())
if cell.Attr().Bold {
f = r.fontMap.GetBoldFont(cell.Rune())
}
if cell.Attr().Dim { if cell.Attr().Dim {
alpha = 0.5 * alpha alpha = 0.5 * alpha
} }
r.font.SetColor(fg[0], fg[1], fg[2], alpha) f.SetColor(fg[0], fg[1], fg[2], alpha)
x := float32(r.areaX) + float32(col)*r.cellWidth x := float32(r.areaX) + float32(col)*r.cellWidth
y := float32(r.areaY) + (float32(row+1) * r.cellHeight) - (r.font.LinePadding()) y := float32(r.areaY) + (float32(row+1) * r.cellHeight) - (f.LinePadding())
if cell.Attr().Bold { // bold means draw text again one pixel to right, so it's fatter
if r.boldFont != nil {
y := float32(r.areaY) + (float32(row+1) * r.cellHeight) - (r.boldFont.LinePadding())
r.boldFont.SetColor(fg[0], fg[1], fg[2], alpha)
r.boldFont.Print(x, y, string(cell.Rune()))
return
}
r.font.Print(x+1, y, string(cell.Rune()))
}
r.font.Print(x, y, string(cell.Rune()))
f.Print(x, y, string(cell.Rune()))
} }
func (r *OpenGLRenderer) DrawCellImage(cell buffer.Cell, col uint, row uint) { func (r *OpenGLRenderer) DrawCellImage(cell buffer.Cell, col uint, row uint) {

View File

@ -87,11 +87,13 @@ DONE:
x := (float32(col) * gui.renderer.cellWidth) x := (float32(col) * gui.renderer.cellWidth)
gui.font.SetColor(0.2, 1, 0.2, 1) f := gui.fontMap.GetFont('X')
f.SetColor(0.2, 1, 0.2, 1)
for i, line := range lines { for i, line := range lines {
y := (float32(row+1+uint16(i)) * gui.renderer.cellHeight) - (gui.font.LinePadding()) y := (float32(row+1+uint16(i)) * gui.renderer.cellHeight) - (f.LinePadding())
gui.font.Print(x, y, fmt.Sprintf(" %s", line)) f.Print(x, y, fmt.Sprintf(" %s", line))
} }
} }