76 lines
2.4 KiB
Go
76 lines
2.4 KiB
Go
package theme
|
|
|
|
import "image"
|
|
import "image/color"
|
|
import "golang.org/x/image/font"
|
|
import "git.tebibyte.media/sashakoshka/tomo/artist"
|
|
import "git.tebibyte.media/sashakoshka/tomo/canvas"
|
|
|
|
// Wrapped wraps any theme and injects a case into it automatically so that it
|
|
// doesn't need to be specified for each query. Additionally, if the underlying
|
|
// theme is nil, it just uses the default theme instead.
|
|
type Wrapped struct {
|
|
Theme
|
|
Case
|
|
}
|
|
|
|
// FontFace returns the proper font for a given style and size.
|
|
func (wrapped Wrapped) FontFace (style FontStyle, size FontSize) font.Face {
|
|
real := wrapped.ensure()
|
|
return real.FontFace(style, size, wrapped.Case)
|
|
}
|
|
|
|
// Icon returns an appropriate icon given an icon name.
|
|
func (wrapped Wrapped) Icon (name string, size IconSize) canvas.Image {
|
|
real := wrapped.ensure()
|
|
return real.Icon(name, size, wrapped.Case)
|
|
}
|
|
|
|
// Pattern returns an appropriate pattern given a pattern name and state.
|
|
func (wrapped Wrapped) Pattern (id Pattern, state State) artist.Pattern {
|
|
real := wrapped.ensure()
|
|
return real.Pattern(id, state, wrapped.Case)
|
|
}
|
|
|
|
// Color returns an appropriate color given a color name and state.
|
|
func (wrapped Wrapped) Color (id Color, state State) color.RGBA {
|
|
real := wrapped.ensure()
|
|
return real.Color(id, state, wrapped.Case)
|
|
}
|
|
|
|
// Padding returns how much space should be between the bounds of a
|
|
// pattern whatever an element draws inside of it.
|
|
func (wrapped Wrapped) Padding (id Pattern) artist.Inset {
|
|
real := wrapped.ensure()
|
|
return real.Padding(id, wrapped.Case)
|
|
}
|
|
|
|
// Margin returns the left/right (x) and top/bottom (y) margins that
|
|
// should be put between any self-contained objects drawn within this
|
|
// pattern (if applicable).
|
|
func (wrapped Wrapped) Margin (id Pattern) image.Point {
|
|
real := wrapped.ensure()
|
|
return real.Margin(id, wrapped.Case)
|
|
}
|
|
|
|
// Sink returns a vector that should be added to an element's inner content when
|
|
// it is pressed down (if applicable) to simulate a 3D sinking effect.
|
|
func (wrapped Wrapped) Sink (id Pattern) image.Point {
|
|
real := wrapped.ensure()
|
|
return real.Sink(id, wrapped.Case)
|
|
}
|
|
|
|
// Hints returns rendering optimization hints for a particular pattern.
|
|
// These are optional, but following them may result in improved
|
|
// performance.
|
|
func (wrapped Wrapped) Hints (id Pattern) Hints {
|
|
real := wrapped.ensure()
|
|
return real.Hints(id, wrapped.Case)
|
|
}
|
|
|
|
func (wrapped Wrapped) ensure () (real Theme) {
|
|
real = wrapped.Theme
|
|
if real == nil { real = Default { } }
|
|
return
|
|
}
|