EventResize: use WindowSize struct internally

Introduce a WindowSize type and use it internally for the EventResize
event. Add PixelSize method to EventResize to report the screen size in
pixels, if supported.
This commit is contained in:
Tim Culverhouse 2023-03-19 08:39:30 -05:00 committed by Garrett D'Amore
parent fa6cd3ec5b
commit bfc5242f05
1 changed files with 29 additions and 5 deletions

View File

@ -20,15 +20,18 @@ import (
// EventResize is sent when the window size changes. // EventResize is sent when the window size changes.
type EventResize struct { type EventResize struct {
t time.Time t time.Time
w int ws WindowSize
h int
} }
// NewEventResize creates an EventResize with the new updated window size, // NewEventResize creates an EventResize with the new updated window size,
// which is given in character cells. // which is given in character cells.
func NewEventResize(width, height int) *EventResize { func NewEventResize(width, height int) *EventResize {
return &EventResize{t: time.Now(), w: width, h: height} ws := WindowSize{
Width: width,
Height: height,
}
return &EventResize{t: time.Now(), ws: ws}
} }
// When returns the time when the Event was created. // When returns the time when the Event was created.
@ -38,5 +41,26 @@ func (ev *EventResize) When() time.Time {
// Size returns the new window size as width, height in character cells. // Size returns the new window size as width, height in character cells.
func (ev *EventResize) Size() (int, int) { func (ev *EventResize) Size() (int, int) {
return ev.w, ev.h return ev.ws.Width, ev.ws.Height
}
// PixelSize returns the new window size as width, height in pixels. The size
// will be 0,0 if the screen doesn't support this feature
func (ev *EventResize) PixelSize() (int, int) {
return ev.ws.PixelWidth, ev.ws.PixelHeight
}
type WindowSize struct {
Width int
Height int
PixelWidth int
PixelHeight int
}
// CellDimensions returns the dimensions of a single cell, in pixels
func (ws WindowSize) CellDimensions() (int, int) {
if ws.PixelWidth == 0 || ws.PixelHeight == 0 {
return 0, 0
}
return (ws.PixelWidth / ws.Width), (ws.PixelHeight / ws.Height)
} }