Added font metrics.
This commit is contained in:
parent
182e8545d6
commit
b59d586ecf
51
draw.go
51
draw.go
|
@ -97,6 +97,18 @@ package ui
|
||||||
// free(text);
|
// free(text);
|
||||||
// return layout;
|
// return layout;
|
||||||
// }
|
// }
|
||||||
|
// static uiDrawTextFontMetrics *newFontMetrics(void)
|
||||||
|
// {
|
||||||
|
// uiDrawTextFontMetrics *m;
|
||||||
|
//
|
||||||
|
// m = (uiDrawTextFontMetrics *) malloc(sizeof (uiDrawTextFontMetrics));
|
||||||
|
// // TODO
|
||||||
|
// return m;
|
||||||
|
// }
|
||||||
|
// static void freeFontMetrics(uiDrawTextFontMetrics *m)
|
||||||
|
// {
|
||||||
|
// free(m);
|
||||||
|
// }
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
// BUG(andlabs): Ideally, all the drawing APIs should be in another package ui/draw (they all have the "uiDraw" prefix in C to achieve a similar goal of avoiding confusing programmers via namespace pollution); managing the linkage of the libui shared library itself across multiple packages is likely going to be a pain, though. (Custom controls implemented using libui won't have this issue, as they *should* only need libui present when linking the shared object, not when linking the Go wrapper. I'm not sure; I'd have to find out first.)
|
// BUG(andlabs): Ideally, all the drawing APIs should be in another package ui/draw (they all have the "uiDraw" prefix in C to achieve a similar goal of avoiding confusing programmers via namespace pollution); managing the linkage of the libui shared library itself across multiple packages is likely going to be a pain, though. (Custom controls implemented using libui won't have this issue, as they *should* only need libui present when linking the shared object, not when linking the Go wrapper. I'm not sure; I'd have to find out first.)
|
||||||
|
@ -702,6 +714,45 @@ func (f *Font) Describe() *FontDescriptor {
|
||||||
panic("TODO unimplemented")
|
panic("TODO unimplemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FontMetrics holds various measurements about a Font.
|
||||||
|
// All metrics are in the same point units used for drawing.
|
||||||
|
type FontMetrics struct {
|
||||||
|
// Ascent is the ascent of the font; that is, the distance from
|
||||||
|
// the top of the character cell to the baseline.
|
||||||
|
Ascent float64
|
||||||
|
|
||||||
|
// Descent is the descent of the font; that is, the distance from
|
||||||
|
// the baseline to the bottom of the character cell. The sum of
|
||||||
|
// Ascent and Descent is the height of the character cell (and
|
||||||
|
// thus, the maximum height of a line of text).
|
||||||
|
Descent float64
|
||||||
|
|
||||||
|
// Leading is the amount of space the font designer suggests
|
||||||
|
// to have between lines (between the bottom of the first line's
|
||||||
|
// character cell and the top of the second line's character cell).
|
||||||
|
// This is a suggestion; it is chosen by the font designer to
|
||||||
|
// improve legibility.
|
||||||
|
Leading float64
|
||||||
|
|
||||||
|
// TODO figure out what these are
|
||||||
|
UnderlinePos float64
|
||||||
|
UnderlineThickness float64
|
||||||
|
}
|
||||||
|
|
||||||
|
// Metrics returns metrics about the given Font.
|
||||||
|
func (f *Font) Metrics() *FontMetrics {
|
||||||
|
m := new(FontMetrics)
|
||||||
|
mm := C.newFontMetrics()
|
||||||
|
C.uiDrawTextFontGetMetrics(f.f, mm)
|
||||||
|
m.Ascent = float64(mm.Ascent)
|
||||||
|
m.Descent = float64(mm.Descent)
|
||||||
|
m.Leading = float64(mm.Leading)
|
||||||
|
m.UnderlinePos = float64(mm.UnderlinePos)
|
||||||
|
m.UnderlineThickness = float64(mm.UnderlineThickness)
|
||||||
|
C.freeFontMetrics(mm)
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
// TextLayout is the entry point for formatting a block of text to be
|
// TextLayout is the entry point for formatting a block of text to be
|
||||||
// drawn onto a DrawContext.
|
// drawn onto a DrawContext.
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue