mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-24 10:48:53 +01:00
parent
6f5fab47aa
commit
989d749475
@ -22,6 +22,8 @@ import (
|
|||||||
"github.com/go-text/typesetting/font"
|
"github.com/go-text/typesetting/font"
|
||||||
"github.com/go-text/typesetting/language"
|
"github.com/go-text/typesetting/language"
|
||||||
"github.com/go-text/typesetting/opentype/api"
|
"github.com/go-text/typesetting/opentype/api"
|
||||||
|
ofont "github.com/go-text/typesetting/opentype/api/font"
|
||||||
|
"github.com/go-text/typesetting/opentype/loader"
|
||||||
"github.com/go-text/typesetting/shaping"
|
"github.com/go-text/typesetting/shaping"
|
||||||
"golang.org/x/image/math/fixed"
|
"golang.org/x/image/math/fixed"
|
||||||
|
|
||||||
@ -61,7 +63,8 @@ type goTextGlyphImageCacheKey struct {
|
|||||||
|
|
||||||
// GoTextFaceSource is a source of a GoTextFace. This can be shared by multiple GoTextFace objects.
|
// GoTextFaceSource is a source of a GoTextFace. This can be shared by multiple GoTextFace objects.
|
||||||
type GoTextFaceSource struct {
|
type GoTextFaceSource struct {
|
||||||
f font.Face
|
f font.Face
|
||||||
|
metadata Metadata
|
||||||
|
|
||||||
outputCache map[goTextOutputCacheKey]*goTextOutputCacheValue
|
outputCache map[goTextOutputCacheKey]*goTextOutputCacheValue
|
||||||
glyphImageCache map[float64]*glyphImageCache[goTextGlyphImageCacheKey]
|
glyphImageCache map[float64]*glyphImageCache[goTextGlyphImageCacheKey]
|
||||||
@ -96,15 +99,22 @@ func NewGoTextFaceSource(source io.ReadSeeker) (*GoTextFaceSource, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
f, err := font.ParseTTF(src)
|
l, err := loader.NewLoader(src)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ft, err := ofont.NewFont(l)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
s := &GoTextFaceSource{
|
s := &GoTextFaceSource{
|
||||||
f: f,
|
f: &ofont.Face{Font: ft},
|
||||||
}
|
}
|
||||||
s.addr = s
|
s.addr = s
|
||||||
|
s.metadata = metadataFromLoader(l)
|
||||||
|
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,17 +125,22 @@ func NewGoTextFaceSourcesFromCollection(source io.ReadSeeker) ([]*GoTextFaceSour
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
fs, err := font.ParseTTC(src)
|
ls, err := loader.NewLoaders(src)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
sources := make([]*GoTextFaceSource, len(fs))
|
sources := make([]*GoTextFaceSource, len(ls))
|
||||||
for i, f := range fs {
|
for i, l := range ls {
|
||||||
|
ft, err := ofont.NewFont(l)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
s := &GoTextFaceSource{
|
s := &GoTextFaceSource{
|
||||||
f: f,
|
f: &ofont.Face{Font: ft},
|
||||||
}
|
}
|
||||||
s.addr = s
|
s.addr = s
|
||||||
|
s.metadata = metadataFromLoader(l)
|
||||||
sources[i] = s
|
sources[i] = s
|
||||||
}
|
}
|
||||||
return sources, nil
|
return sources, nil
|
||||||
@ -137,6 +152,11 @@ func (g *GoTextFaceSource) copyCheck() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Metadata returns its metadata.
|
||||||
|
func (g *GoTextFaceSource) Metadata() Metadata {
|
||||||
|
return g.metadata
|
||||||
|
}
|
||||||
|
|
||||||
func (g *GoTextFaceSource) shape(text string, face *GoTextFace) (shaping.Output, []glyph) {
|
func (g *GoTextFaceSource) shape(text string, face *GoTextFace) (shaping.Output, []glyph) {
|
||||||
g.copyCheck()
|
g.copyCheck()
|
||||||
|
|
||||||
|
72
text/v2/metadata.go
Normal file
72
text/v2/metadata.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
// Copyright 2023 The Ebitengine Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package text
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/go-text/typesetting/opentype/api/metadata"
|
||||||
|
"github.com/go-text/typesetting/opentype/loader"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Metadata represents a font face's metadata.
|
||||||
|
type Metadata struct {
|
||||||
|
Family string
|
||||||
|
Style Style
|
||||||
|
Weight Weight
|
||||||
|
Stretch Stretch
|
||||||
|
Monospace bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func metadataFromLoader(l *loader.Loader) Metadata {
|
||||||
|
d := metadata.Metadata(l)
|
||||||
|
return Metadata{
|
||||||
|
Family: d.Family,
|
||||||
|
Monospace: d.IsMonospace,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Style uint8
|
||||||
|
|
||||||
|
const (
|
||||||
|
StyleNormal Style = Style(metadata.StyleNormal)
|
||||||
|
StyleItalic Style = Style(metadata.StyleItalic)
|
||||||
|
)
|
||||||
|
|
||||||
|
type Weight float32
|
||||||
|
|
||||||
|
const (
|
||||||
|
WeightThin Weight = Weight(metadata.WeightThin)
|
||||||
|
WeightExtraLight Weight = Weight(metadata.WeightExtraLight)
|
||||||
|
WeightLight Weight = Weight(metadata.WeightLight)
|
||||||
|
WeightNormal Weight = Weight(metadata.WeightNormal)
|
||||||
|
WeightMedium Weight = Weight(metadata.WeightMedium)
|
||||||
|
WeightSemibold Weight = Weight(metadata.WeightSemibold)
|
||||||
|
WeightBold Weight = Weight(metadata.WeightBold)
|
||||||
|
WeightExtraBold Weight = Weight(metadata.WeightExtraBold)
|
||||||
|
WeightBlack Weight = Weight(metadata.WeightBlack)
|
||||||
|
)
|
||||||
|
|
||||||
|
type Stretch float32
|
||||||
|
|
||||||
|
const (
|
||||||
|
StretchUltraCondensed Stretch = Stretch(metadata.StretchUltraCondensed)
|
||||||
|
StretchExtraCondensed Stretch = Stretch(metadata.StretchExtraCondensed)
|
||||||
|
StretchCondensed Stretch = Stretch(metadata.StretchCondensed)
|
||||||
|
StretchSemiCondensed Stretch = Stretch(metadata.StretchSemiCondensed)
|
||||||
|
StretchNormal Stretch = Stretch(metadata.StretchNormal)
|
||||||
|
StretchSemiExpanded Stretch = Stretch(metadata.StretchSemiExpanded)
|
||||||
|
StretchExpanded Stretch = Stretch(metadata.StretchExpanded)
|
||||||
|
StretchExtraExpanded Stretch = Stretch(metadata.StretchExtraExpanded)
|
||||||
|
StretchUltraExpanded Stretch = Stretch(metadata.StretchUltraExpanded)
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user