Documentation
¶
Overview ¶
Package render contém o backend de renderização do JUIGo.
A renderização do JUIGo é feita por software (CPU) sobre um *image.RGBA; o OpenGL é usado exclusivamente como mecanismo de apresentação: o buffer vira uma textura que é desenhada em um quad cobrindo a janela inteira. Este pacote também oferece as primitivas de desenho (ver draw.go).
Index ¶
- func Clip(dst *image.RGBA, r image.Rectangle, out *image.RGBA) *image.RGBA
- func CrossFade(dst *image.RGBA, a, b *image.RGBA, r image.Rectangle, t float64)
- func DrawText(dst *image.RGBA, face font.Face, s string, dot image.Point, c color.RGBA)
- func FillCircle(dst *image.RGBA, c image.Point, r int, col color.RGBA)
- func FillRect(dst *image.RGBA, r image.Rectangle, c color.RGBA)
- func FillRectOver(dst *image.RGBA, r image.Rectangle, c color.RGBA)
- func FillRoundRect(dst *image.RGBA, r image.Rectangle, radius int, c color.RGBA)
- func FillRoundRectOver(dst *image.RGBA, r image.Rectangle, radius int, c color.RGBA)
- func MeasureText(face font.Face, s string) int
- func StrokeCircle(dst *image.RGBA, c image.Point, r, w int, col color.RGBA)
- func StrokeLine(dst *image.RGBA, a, b image.Point, w int, col color.RGBA)
- func StrokePolyline(dst *image.RGBA, pts []image.Point, w int, col color.RGBA)
- func StrokeRect(dst *image.RGBA, r image.Rectangle, w int, c color.RGBA)
- func StrokeRoundRect(dst *image.RGBA, r image.Rectangle, radius, w int, c color.RGBA)
- type Blitter
- type GlyphCache
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Clip ¶
Clip preenche out com uma VISÃO de dst recortada a r — mesmos pixels, sem cópia e sem alocação (out é um scratch reutilizável, normalmente um campo do widget) — e a devolve. Desenhar na visão não alcança nada fora de r, pois todas as primitivas recortam contra os bounds do destino. Semântica idêntica à de image.RGBA.SubImage.
func CrossFade ¶ added in v0.11.0
CrossFade preenche a região r de dst com a mistura linear entre a e b: t=0 copia a, t=1 copia b, valores intermediários fundem os dois canal a canal. a e b devem estar ALINHADOS a dst (mesmo sistema de coordenadas — como os snapshots do Navigator, criados com os bounds do widget); a região é recortada à interseção dos três. É a base da transição de fade entre telas. Não aloca.
func DrawText ¶
DrawText desenha s em dst com a face dada, com a origem da baseline em dot e cor c. O texto não é recortado além dos limites de dst.
func FillCircle ¶
FillCircle preenche o círculo de centro c e raio r (em pixels), sobrescrevendo como FillRect, com antialiasing na borda: os pixels do traço do arco misturam a cor com o conteúdo já desenhado em dst (rampa de 1px de cobertura) — desenhe o fundo antes. O miolo de cada linha é preenchido em faixa cheia. Não aloca.
func FillRect ¶
FillRect preenche o retângulo r de dst com a cor sólida c, sem blending. A área é recortada para os limites de dst. Não aloca.
func FillRectOver ¶
FillRectOver preenche r com a cor c APLICANDO blending alfa (src-over) — ao contrário de FillRect, que sobrescreve. A cor é interpretada com alfa NÃO pré-multiplicado (straight): informe R/G/B plenos e A com a opacidade; a pré-multiplicação exigida pelo draw.Over da stdlib acontece aqui dentro. Usa o caminho rápido da stdlib; não aloca.
func FillRoundRect ¶
FillRoundRect preenche r com a cor c e cantos arredondados de raio radius (em pixels), sobrescrevendo como FillRect; nos arcos dos cantos o traço é suavizado (antialiasing) misturando c com o conteúdo já desenhado em dst — desenhe o fundo antes. radius <= 0 equivale exatamente a FillRect (é o que preserva o visual clássico com Theme.Radius zero); raios maiores do que cabe no retângulo são reduzidos à metade do menor lado. Não aloca.
func FillRoundRectOver ¶
FillRoundRectOver é FillRoundRect com blending alfa (src-over) em toda a área, como FillRectOver: a cor é interpretada com alfa straight e a pré-multiplicação acontece aqui dentro; nos arcos a cobertura do canto multiplica o alfa. radius <= 0 equivale exatamente a FillRectOver. Não aloca.
func MeasureText ¶
MeasureText devolve a largura de s em pixels para a face dada. É a base de Theme.MeasureString, a única fonte de verdade para largura de texto.
func StrokeCircle ¶
StrokeCircle desenha um anel (contorno de círculo) com a espessura dada e antialiasing nos dois arcos — a versão vazada do FillCircle. Não aloca.
func StrokeLine ¶ added in v0.17.0
StrokeLine desenha o segmento de a a b com espessura w (pixels), antialiasing nas bordas e pontas redondas. As coordenadas são CENTROS de pixel: uma linha horizontal de espessura 1 acende exatamente a linha dos pontos, sem meio-tom — eixos de gráfico saem nítidos e diagonais saem suaves. A varredura anda pelo eixo maior do segmento com uma janela perpendicular estreita (custo ~comprimento × espessura). Não aloca.
func StrokePolyline ¶ added in v0.17.0
StrokePolyline liga os pontos na sequência com StrokeLine — a base das séries de gráficos. Nas juntas os caps redondos se sobrepõem (com cor opaca, invisível; com alfa parcial, a junta escurece de leve — limitação documentada). Não aloca.
func StrokeRect ¶
StrokeRect desenha o contorno do retângulo r com espessura w (em pixels), por dentro dos limites de r. Não aloca.
func StrokeRoundRect ¶
StrokeRoundRect desenha o contorno de r com espessura w (em pixels) e cantos arredondados de raio radius, por dentro dos limites de r, com antialiasing nos arcos. radius <= 0 equivale exatamente a StrokeRect. Não aloca.
Types ¶
type Blitter ¶
type Blitter struct {
// contains filtered or unexported fields
}
Blitter apresenta um *image.RGBA na tela: mantém uma textura OpenGL do tamanho do buffer e a desenha em um quad que cobre a janela inteira. Deve ser criado e usado apenas na main thread, com um contexto GL corrente.
func NewBlitter ¶
NewBlitter inicializa as funções OpenGL, compila o shader do quad e aloca a textura de apresentação com o tamanho dado (em pixels do buffer). Requer um contexto OpenGL 3.3 core corrente na thread chamadora.
func (*Blitter) Draw ¶
Draw desenha o quad texturizado cobrindo o framebuffer inteiro. fbWidth e fbHeight são o tamanho do framebuffer da janela em pixels físicos (pode diferir do tamanho lógico em telas HiDPI).
func (*Blitter) Upload ¶
Upload envia o conteúdo do buffer para a textura de apresentação. Se o tamanho do buffer mudou (resize da janela), a textura é realocada.
func (*Blitter) UploadRegion ¶
UploadRegion envia apenas a região r do buffer para a textura — o caminho das dirty regions: o resto da textura permanece válido de frames anteriores. Se o tamanho do buffer mudou, faz o upload completo.
type GlyphCache ¶
type GlyphCache struct {
// contains filtered or unexported fields
}
GlyphCache rasteriza cada glyph de uma face UMA única vez e o reutiliza em todos os desenhos seguintes, eliminando as alocações de rasterização do caminho quente. Os glyphs são rasterizados em posições inteiras de pixel — com font.HintingFull os avanços também são inteiros, então o resultado é idêntico ao de um font.Drawer.
O cache cresce sob demanda, uma entrada por rune, e vale para uma única face: ao trocar de fonte ou tamanho (ex.: mudança de escala HiDPI), crie um cache novo. Como todo o JUIGo, não é seguro para uso concorrente.
func NewGlyphCache ¶
func NewGlyphCache(face font.Face) *GlyphCache
NewGlyphCache cria um cache vazio para a face dada.
func (*GlyphCache) DrawString ¶
DrawString desenha s em dst com a baseline começando em dot e cor col. Aplica kerning e, com o cache aquecido, não aloca.
func (*GlyphCache) Face ¶
func (c *GlyphCache) Face() font.Face
Face devolve a face para a qual este cache rasteriza.