package renderer import ( "image" "log/slog" "git.eeqj.de/sneak/hdmistat/internal/layout" "git.eeqj.de/sneak/hdmistat/internal/statcollector" "github.com/golang/freetype/truetype" ) // Screen represents a displayable screen type Screen interface { Name() string Render(canvas *layout.Canvas, info *statcollector.SystemInfo) error } // Renderer manages screen rendering type Renderer struct { font *truetype.Font logger *slog.Logger width int height int } // NewRenderer creates a new renderer func NewRenderer(font *truetype.Font, logger *slog.Logger) *Renderer { return &Renderer{ font: font, logger: logger, width: 1920, // Default HD resolution height: 1080, } } // SetResolution sets the rendering resolution func (r *Renderer) SetResolution(width, height int) { r.width = width r.height = height } // RenderScreen renders a screen to an image func (r *Renderer) RenderScreen(screen Screen, info *statcollector.SystemInfo) (*image.RGBA, error) { canvas := layout.NewCanvas(r.width, r.height, r.font, r.logger) if err := screen.Render(canvas, info); err != nil { return nil, err } return canvas.Image(), nil }