From e1e8d058a33f7566f9c565d04b0d8b56f9645c35 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 25 Apr 2018 09:28:54 +0200 Subject: add vendor --- .../golang.org/x/image/font/basicfont/basicfont.go | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 vendor/golang.org/x/image/font/basicfont/basicfont.go (limited to 'vendor/golang.org/x/image/font/basicfont/basicfont.go') diff --git a/vendor/golang.org/x/image/font/basicfont/basicfont.go b/vendor/golang.org/x/image/font/basicfont/basicfont.go new file mode 100644 index 0000000..1acc79f --- /dev/null +++ b/vendor/golang.org/x/image/font/basicfont/basicfont.go @@ -0,0 +1,126 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package basicfont provides fixed-size font faces. +package basicfont // import "golang.org/x/image/font/basicfont" + +import ( + "image" + + "golang.org/x/image/font" + "golang.org/x/image/math/fixed" +) + +// Range maps a contiguous range of runes to vertically adjacent sub-images of +// a Face's Mask image. The rune range is inclusive on the low end and +// exclusive on the high end. +// +// If Low <= r && r < High, then the rune r is mapped to the sub-image of +// Face.Mask whose bounds are image.Rect(0, y*h, Face.Width, (y+1)*h), +// where y = (int(r-Low) + Offset) and h = (Face.Ascent + Face.Descent). +type Range struct { + Low, High rune + Offset int +} + +// Face7x13 is a Face derived from the public domain X11 misc-fixed font files. +// +// At the moment, it holds the printable characters in ASCII starting with +// space, and the Unicode replacement character U+FFFD. +// +// Its data is entirely self-contained and does not require loading from +// separate files. +var Face7x13 = &Face{ + Advance: 7, + Width: 6, + Height: 13, + Ascent: 11, + Descent: 2, + Mask: mask7x13, + Ranges: []Range{ + {'\u0020', '\u007f', 0}, + {'\ufffd', '\ufffe', 95}, + }, +} + +// Face is a basic font face whose glyphs all have the same metrics. +// +// It is safe to use concurrently. +type Face struct { + // Advance is the glyph advance, in pixels. + Advance int + // Width is the glyph width, in pixels. + Width int + // Height is the inter-line height, in pixels. + Height int + // Ascent is the glyph ascent, in pixels. + Ascent int + // Descent is the glyph descent, in pixels. + Descent int + // Left is the left side bearing, in pixels. A positive value means that + // all of a glyph is to the right of the dot. + Left int + + // Mask contains all of the glyph masks. Its width is typically the Face's + // Width, and its height a multiple of the Face's Height. + Mask image.Image + // Ranges map runes to sub-images of Mask. The rune ranges must not + // overlap, and must be in increasing rune order. + Ranges []Range +} + +func (f *Face) Close() error { return nil } +func (f *Face) Kern(r0, r1 rune) fixed.Int26_6 { return 0 } + +func (f *Face) Metrics() font.Metrics { + return font.Metrics{ + Height: fixed.I(f.Height), + Ascent: fixed.I(f.Ascent), + Descent: fixed.I(f.Descent), + } +} + +func (f *Face) Glyph(dot fixed.Point26_6, r rune) ( + dr image.Rectangle, mask image.Image, maskp image.Point, advance fixed.Int26_6, ok bool) { + +loop: + for _, rr := range [2]rune{r, '\ufffd'} { + for _, rng := range f.Ranges { + if rr < rng.Low || rng.High <= rr { + continue + } + maskp.Y = (int(rr-rng.Low) + rng.Offset) * (f.Ascent + f.Descent) + ok = true + break loop + } + } + if !ok { + return image.Rectangle{}, nil, image.Point{}, 0, false + } + + x := int(dot.X+32)>>6 + f.Left + y := int(dot.Y+32) >> 6 + dr = image.Rectangle{ + Min: image.Point{ + X: x, + Y: y - f.Ascent, + }, + Max: image.Point{ + X: x + f.Width, + Y: y + f.Descent, + }, + } + + return dr, f.Mask, maskp, fixed.I(f.Advance), true +} + +func (f *Face) GlyphBounds(r rune) (bounds fixed.Rectangle26_6, advance fixed.Int26_6, ok bool) { + return fixed.R(0, -f.Ascent, f.Width, +f.Descent), fixed.I(f.Advance), true +} + +func (f *Face) GlyphAdvance(r rune) (advance fixed.Int26_6, ok bool) { + return fixed.I(f.Advance), true +} -- cgit v1.2.3