theme

package
v0.18.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 25, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FiraCode added in v0.7.0

func FiraCode() (*opentype.Font, error)

FiraCode devolve a fonte Fira Code embutida, interpretada uma única vez — troque a mono do tema com UseMonoFont(theme.FiraCode()).

func GoBold added in v0.14.0

func GoBold() (*opentype.Font, error)

GoBold devolve a Go Bold (x/image, já dependência), interpretada uma única vez — a fonte de display PADRÃO dos temas Default/Dark: hierarquia por peso, sem asset novo.

func GoMono added in v0.7.0

func GoMono() (*opentype.Font, error)

GoMono devolve a fonte Go Mono embutida (a mono padrão do tema), interpretada uma única vez — o par de FiraCode para voltar atrás num UseMonoFont.

func Lora added in v0.14.0

func Lora() (*opentype.Font, error)

Lora devolve a serif Lora Regular embutida, interpretada uma única vez — a fonte de display do tema Claude (papel e tinta).

func LoraBold added in v0.14.0

func LoraBold() (*opentype.Font, error)

LoraBold devolve a Lora Bold embutida, interpretada uma única vez — para quem quiser títulos serifados com mais peso (UseDisplayFont).

Types

type MonoFont added in v0.7.0

type MonoFont struct {
	// Face é a face rasterizada; não guarde referências entre mudanças de
	// escala.
	Face font.Face
	// contains filtered or unexported fields
}

MonoFont é uma fonte monoespaçada pronta para desenhar: face na escala corrente, métricas e cache de glyphs próprio. O tema carrega a padrão (Mono) e fabrica variações de tamanho (MonoSized) — cada CodeEditor pode ter a sua.

func (*MonoFont) Advance added in v0.7.0

func (m *MonoFont) Advance() int

Advance devolve a largura da célula em pixels — todo glifo coberto avança isto (a base da conta coluna↔pixel).

func (*MonoFont) Ascent added in v0.7.0

func (m *MonoFont) Ascent() int

Ascent devolve o ascent em pixels.

func (*MonoFont) Draw added in v0.7.0

func (m *MonoFont) Draw(dst *image.RGBA, s string, dot image.Point, c color.RGBA)

Draw desenha s GLIFO A GLIFO, um por célula (x avança Advance por rune): o desenho cai exatamente na grade da conta coluna↔pixel do CodeEditor, para qualquer fonte e tamanho — avanços fracionários (Fira Code em tamanhos ímpares) não derivam ao longo de tokens compridos. Cache de glyphs, sem alocação no caminho quente (fatias de s).

func (*MonoFont) LineHeight added in v0.7.0

func (m *MonoFont) LineHeight() int

LineHeight devolve a altura de linha em pixels.

func (*MonoFont) Measure added in v0.7.0

func (m *MonoFont) Measure(s string) int

Measure devolve a largura de s em pixels.

func (*MonoFont) Size added in v0.7.0

func (m *MonoFont) Size() float64

Size devolve o tamanho lógico (pontos) desta variação.

type SyntaxPalette added in v0.5.0

type SyntaxPalette struct {
	// Keyword colore palavras-chave da linguagem.
	Keyword color.RGBA
	// String colore literais de texto (incluindo runas e raw strings).
	String color.RGBA
	// Number colore literais numéricos.
	Number color.RGBA
	// Comment colore comentários.
	Comment color.RGBA
	// Builtin colore tipos e identificadores embutidos da linguagem.
	Builtin color.RGBA
}

SyntaxPalette são as cores das classes léxicas do highlight de código (ver widget.SyntaxStyle); texto comum usa Theme.Text.

type TextFont added in v0.14.0

type TextFont struct {
	// Face é a face rasterizada; não guarde referências entre mudanças de
	// escala.
	Face font.Face
	// contains filtered or unexported fields
}

TextFont é uma fonte proporcional pronta para um PAPEL TIPOGRÁFICO do tema (Título, Subtítulo, Legenda): face na escala corrente, métricas e cache de glyphs próprios. O tema constrói os papéis no SetScale; widgets desenham por ela sem medir nem alocar no caminho quente.

func (*TextFont) Ascent added in v0.14.0

func (f *TextFont) Ascent() int

Ascent devolve o ascent em pixels.

func (*TextFont) Draw added in v0.14.0

func (f *TextFont) Draw(dst *image.RGBA, s string, dot image.Point, c color.RGBA)

Draw desenha s com a origem da baseline em dot, pelo cache de glyphs.

func (*TextFont) LineHeight added in v0.14.0

func (f *TextFont) LineHeight() int

LineHeight devolve a altura de linha em pixels.

func (*TextFont) Measure added in v0.14.0

func (f *TextFont) Measure(s string) int

Measure devolve a largura de s em pixels.

func (*TextFont) Size added in v0.14.0

func (f *TextFont) Size() float64

Size devolve o tamanho lógico (pontos) do papel.

type Theme

type Theme struct {
	// Background é a cor de fundo da janela.
	Background color.RGBA
	// Text é a cor padrão de texto.
	Text color.RGBA
	// Placeholder é a cor do texto de sugestão do Input vazio.
	Placeholder color.RGBA

	// ButtonNormal, ButtonHover e ButtonPressed são as cores de fundo do
	// Button em cada estado.
	ButtonNormal  color.RGBA
	ButtonHover   color.RGBA
	ButtonPressed color.RGBA
	// ButtonText é a cor do rótulo do Button.
	ButtonText color.RGBA
	// ButtonBorder é a cor da borda do Button; alfa zero desliga a borda
	// (o visual clássico não tem borda de botão).
	ButtonBorder color.RGBA

	// InputBackground é o fundo do campo de texto.
	InputBackground color.RGBA
	// InputBorder é a borda do campo sem foco; InputBorderFocused, com foco.
	InputBorder        color.RGBA
	InputBorderFocused color.RGBA
	// Cursor é a cor da linha vertical do cursor de texto.
	Cursor color.RGBA
	// Selection é o fundo da seleção de texto no Input.
	Selection color.RGBA
	// FocusOutline é o contorno de indicação de foco em widgets focáveis
	// não-textuais (ex.: Button).
	FocusOutline color.RGBA
	// Accent é a cor de destaque dos controles: a marca do Checkbox e o
	// trilho ativo e a alça do Slider.
	Accent color.RGBA
	// HoverBackground é o fundo do item sob o ponteiro em listas (ex.: o
	// popup do Dropdown).
	HoverBackground color.RGBA
	// TooltipBackground e TooltipText são as cores da caixa de dica.
	TooltipBackground color.RGBA
	TooltipText       color.RGBA
	// Danger é a cor de erros e ações destrutivas (mensagens de validação).
	Danger color.RGBA
	// Syntax é a paleta de highlight do CodeEditor (classes léxicas).
	Syntax SyntaxPalette
	// CurrentLine é a faixa sutil atrás da linha do cursor no CodeEditor.
	CurrentLine color.RGBA

	// Face é a fonte já rasterizada na escala atual (ver SetScale). É
	// reconstruída a cada mudança de escala; não guarde referências a ela.
	Face font.Face
	// MonoFace é a fonte MONOESPAÇADA do tema (Go Mono, do mesmo projeto da
	// fonte regular), na escala corrente — editores de código medem e
	// desenham por ela (DrawMono/MeasureMono). Reconstruída no SetScale.
	MonoFace font.Face
	// FontSize é o tamanho LÓGICO da fonte (independente de escala). A face
	// é criada com FontSize × escala.
	FontSize float64

	// Padding é o espaço interno padrão dos widgets, em unidades LÓGICAS.
	// No desenho e no layout, use PaddingPx (ou Px) para converter.
	Padding int
	// Spacing é o espaço padrão entre widgets em containers de layout, em
	// unidades lógicas (use SpacingPx).
	Spacing int
	// BorderWidth é a espessura padrão de bordas, em unidades lógicas (use
	// BorderPx).
	BorderWidth int
	// Radius é o raio dos cantos arredondados dos controles, em unidades
	// lógicas (use RadiusPx). Zero desliga o arredondamento e reproduz o
	// visual clássico (retângulos retos) pixel a pixel — ver Classic.
	Radius int
	// InputMinWidth é a largura preferida mínima do Input, em unidades
	// lógicas (use InputMinWidthPx).
	InputMinWidth int
	// SliderMinWidth é a largura preferida mínima do Slider, em unidades
	// lógicas.
	SliderMinWidth int
	// SliderTrackThickness é a espessura do trilho do Slider, em unidades
	// lógicas.
	SliderTrackThickness int
	// SliderHandleSize é o lado da alça do Slider, em unidades lógicas.
	SliderHandleSize int
	// ScrollStep é quantas unidades lógicas o conteúdo rola por passo da
	// roda do mouse.
	ScrollStep int
	// ScrollbarWidth é a largura do indicador de rolagem, em unidades
	// lógicas.
	ScrollbarWidth int

	// CaretBlink é o intervalo de piscada do cursor de texto; zero desliga
	// a piscada (cursor sempre visível).
	CaretBlink time.Duration
	// TooltipDelay é quanto tempo o ponteiro precisa pausar sobre um widget
	// com Tooltip até a dica aparecer.
	TooltipDelay time.Duration
	// ToastDuration é quanto tempo um toast (aviso transitório) fica na
	// tela antes de sumir sozinho.
	ToastDuration time.Duration
	// ScrollAxisLock é a janela da TRAVA DE EIXO dos gestos de rolagem 2D:
	// no trackpad o dedo raramente anda reto, então o gesto segue no eixo
	// dominante do seu início enquanto os eventos continuarem chegando
	// dentro desta janela (uma dominância forte do outro eixo retrava na
	// hora). Zero desliga a trava.
	ScrollAxisLock time.Duration
	// DoubleClick é a janela do duplo clique (selecionar a palavra nos
	// campos de texto). Zero desliga.
	DoubleClick time.Duration
	// TextAreaMinLines é a altura preferida da TextArea, em linhas.
	TextAreaMinLines int
	// SpinnerStep é o intervalo entre quadros do indicador de loading.
	SpinnerStep time.Duration
	// TransitionDuration é a duração das transições animadas de tela do
	// Navigator. Zero desliga a animação (a troca vira um corte seco).
	TransitionDuration time.Duration
	// SplitterThickness é a espessura da faixa de arraste do SplitPane, em
	// unidades lógicas (a linha desenhada é mais fina; a faixa é a área de
	// pega).
	SplitterThickness int
	// TreeIndent é o recuo por nível da Tree, em unidades lógicas.
	TreeIndent int
	// RowPad é o respiro de linha de List e Tree, em unidades lógicas:
	// entra na altura de cada linha (vertical) e é a margem da PÍLULA de
	// seleção/hover (horizontal) — as linhas respiram e o realce é uma
	// forma arredondada com margem, não uma faixa de ponta a ponta.
	RowPad int
	// Backdrop é a cor translúcida do pano de fundo do Modal.
	Backdrop color.RGBA
	// DisabledWash é a lavagem translúcida aplicada sobre widgets
	// desabilitados, esmaecendo-os em direção ao fundo.
	DisabledWash color.RGBA

	// Surface é o fundo de superfícies elevadas (Card); SurfaceBorder é o
	// fio que as contorna (também o Divider).
	Surface       color.RGBA
	SurfaceBorder color.RGBA

	// TitleSize, SubtitleSize e CaptionSize são os tamanhos LÓGICOS dos
	// papéis tipográficos (ver Title/Subtitle/Caption e Text.Title). Título
	// e subtítulo usam a fonte de DISPLAY (UseDisplayFont; Go Bold por
	// padrão, Lora no tema Claude); a legenda usa a fonte do corpo.
	TitleSize    float64
	SubtitleSize float64
	CaptionSize  float64
	// contains filtered or unexported fields
}

Theme centraliza todas as cores, a fonte e os espaçamentos usados pelos widgets. Nenhum widget deve ter cor ou tamanho hardcoded: tudo vem daqui.

func Classic

func Classic() (*Theme, error)

Classic constrói o tema claro com o visual clássico do JUIGo (anterior ao Theme.Radius): os mesmos valores de Default, sem cantos arredondados (Radius zero) e sem borda de botão. Com Radius zero as primitivas arredondadas degradam pixel a pixel para retângulos retos. Círculos (Radio, spinner) têm antialiasing em todos os temas — qualidade de desenho, não uma escolha de visual. Para um tema escuro clássico, zere os mesmos dois campos em um tema vindo de Dark:

t, _ := theme.Dark()
t.Radius = 0
t.ButtonBorder = color.RGBA{}

func Claude added in v0.13.0

func Claude() (*Theme, error)

Claude constrói o tema claro do design system "papel e tinta" do JUIGo, inspirado na linguagem visual pública do Claude (Anthropic): fundo de papel, texto em tinta quase-preta quente, terracota reservada a ações e estados ativos, neutros SEMPRE quentes (nada de cinza azulado) e cantos generosos (Radius 10). As cores são uma homenagem aproximada à identidade pública — o tema não usa marcas nem se propõe a representar a Anthropic.

As decisões de uso dos tokens estão documentadas em docs/DESIGN.md; o par escuro é ClaudeDark. Troque em runtime com App.SetTheme.

func ClaudeDark added in v0.13.0

func ClaudeDark() (*Theme, error)

ClaudeDark constrói o par escuro do design system "papel e tinta" (ver Claude): superfícies de grafite quente, texto de papel, a MESMA terracota de ação e neutros térreos reequilibrados para contraste. Métricas idênticas às do Claude claro — os dois alternam em runtime sem a interface pular.

func Dark

func Dark() (*Theme, error)

Dark constrói o tema escuro do JUIGo na escala 1: mesma fonte, métricas e espaçamentos do tema padrão, com a paleta invertida — superfícies escuras, texto claro, o mesmo azul de destaque e tooltip/seleção reequilibrados para contraste. Troque em runtime com App.SetTheme.

func Default

func Default() (*Theme, error)

Default constrói o tema padrão do JUIGo na escala 1, interpretando a fonte embutida. Falhas na fonte são devolvidas como erro. O App ajusta a escala para o monitor via SetScale.

func (*Theme) Ascent

func (t *Theme) Ascent() int

Ascent devolve a distância do topo da linha até a baseline, em pixels. Útil para converter um Y de topo em um Y de baseline para DrawText.

func (*Theme) BorderPx

func (t *Theme) BorderPx() int

BorderPx devolve BorderWidth convertido para pixels, no mínimo 1 para que bordas nunca desapareçam em escalas baixas.

func (*Theme) Caption added in v0.14.0

func (t *Theme) Caption() *TextFont

Caption devolve a fonte do papel de LEGENDA (CaptionSize, a MESMA fonte do corpo, menor).

func (*Theme) Clone added in v0.2.0

func (t *Theme) Clone() (*Theme, error)

Clone devolve uma cópia independente do tema, na mesma escala: os campos de cores e métricas são copiados, a fonte interpretada é compartilhada (imutável) e a face e o cache de glyphs são reconstruídos. Cada JANELA precisa do próprio *Theme — a escala segue o monitor da janela, e SetScale num tema compartilhado desregularia as outras.

func (*Theme) DrawMono added in v0.4.0

func (t *Theme) DrawMono(dst *image.RGBA, s string, dot image.Point, c color.RGBA)

DrawMono desenha s com a fonte mono PADRÃO do tema (ver Mono/MonoFont).

func (*Theme) DrawText

func (t *Theme) DrawText(dst *image.RGBA, s string, dot image.Point, c color.RGBA)

DrawText desenha s em dst com a fonte do tema, baseline em dot e cor c, usando o cache de glyphs: cada glyph é rasterizado uma única vez, e o caminho quente de desenho não aloca.

func (*Theme) InputMinWidthPx

func (t *Theme) InputMinWidthPx() int

InputMinWidthPx devolve InputMinWidth convertido para pixels.

func (*Theme) LineHeight

func (t *Theme) LineHeight() int

LineHeight devolve a altura de uma linha de texto, em pixels.

func (*Theme) MeasureMono added in v0.4.0

func (t *Theme) MeasureMono(s string) int

MeasureMono devolve a largura de s em pixels na fonte mono padrão.

func (*Theme) MeasureString

func (t *Theme) MeasureString(s string) int

MeasureString devolve a largura de s em pixels com a fonte do tema. É a ÚNICA fonte de verdade para largura de texto: layout e posicionamento de cursor devem passar por aqui.

func (*Theme) Mono added in v0.7.0

func (t *Theme) Mono() *MonoFont

Mono devolve a fonte mono padrão do tema (tamanho FontSize, na escala corrente).

func (*Theme) MonoAdvance added in v0.4.0

func (t *Theme) MonoAdvance() int

MonoAdvance devolve a largura da CÉLULA da fonte mono padrão — todo glifo coberto avança exatamente isso, o que torna a conta coluna↔pixel aritmética pura (a base do CodeEditor).

func (*Theme) MonoAscent added in v0.4.0

func (t *Theme) MonoAscent() int

MonoAscent devolve o ascent da fonte mono padrão.

func (*Theme) MonoLineHeight added in v0.4.0

func (t *Theme) MonoLineHeight() int

MonoLineHeight devolve a altura de linha da fonte mono padrão.

func (*Theme) MonoSized added in v0.7.0

func (t *Theme) MonoSized(size float64) (*MonoFont, error)

MonoSized fabrica uma variação da fonte mono no tamanho LÓGICO dado (pontos), na escala corrente — cada CodeEditor pode ter o próprio tamanho. A variação vale até a próxima mudança de escala ou de fonte mono (detectável por Theme.MonoFace).

func (*Theme) PaddingPx

func (t *Theme) PaddingPx() int

PaddingPx devolve Padding convertido para pixels.

func (*Theme) Px

func (t *Theme) Px(v int) int

Px converte um valor em unidades lógicas para pixels na escala atual, arredondando para o inteiro mais próximo.

func (*Theme) RadiusPx

func (t *Theme) RadiusPx() int

RadiusPx devolve Radius convertido para pixels na escala atual. Zero permanece zero (cantos retos) em qualquer escala.

func (*Theme) Scale

func (t *Theme) Scale() float64

Scale devolve a escala atual do tema (pixels por unidade lógica).

func (*Theme) SetScale

func (t *Theme) SetScale(scale float64) error

SetScale reconstrói a fonte, as métricas e o cache de glyphs para a escala dada, em pixels por unidade lógica (1 = tela comum, 2 = retina). O App a chama com a escala de conteúdo da janela e a cada mudança de monitor. Os campos lógicos do tema (FontSize, Padding, ...) não são alterados: a conversão para pixels acontece na face e nos métodos Px/*Px.

func (*Theme) SpacingPx

func (t *Theme) SpacingPx() int

SpacingPx devolve Spacing convertido para pixels.

func (*Theme) Subtitle added in v0.14.0

func (t *Theme) Subtitle() *TextFont

Subtitle devolve a fonte do papel de SUBTÍTULO (SubtitleSize, fonte de display).

func (*Theme) Title added in v0.14.0

func (t *Theme) Title() *TextFont

Title devolve a fonte do papel de TÍTULO (TitleSize, fonte de display).

func (*Theme) UseDisplayFont added in v0.14.0

func (t *Theme) UseDisplayFont(fnt *opentype.Font) error

UseDisplayFont troca a fonte de DISPLAY do tema em runtime — títulos e subtítulos são reconstruídos na escala corrente; corpo e legenda seguem na fonte regular. É como o Claude ganha a serif Lora:

lora, _ := theme.Lora()
th.UseDisplayFont(lora)

func (*Theme) UseMonoFont added in v0.7.0

func (t *Theme) UseMonoFont(fnt *opentype.Font) error

UseMonoFont troca a FONTE mono do tema (ex.: theme.FiraCode()) e refaz a face padrão na escala corrente; editores percebem pelo MonoFace no próximo frame. A fonte regular dos demais widgets não muda.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL