mirror of
https://github.com/gdamore/tcell.git
synced 2025-04-24 13:48:51 +08:00

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.
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
// Copyright 2015 The TCell Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use file except in compliance with the License.
|
|
// You may obtain a copy of the license at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package tcell
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// EventResize is sent when the window size changes.
|
|
type EventResize struct {
|
|
t time.Time
|
|
ws WindowSize
|
|
}
|
|
|
|
// NewEventResize creates an EventResize with the new updated window size,
|
|
// which is given in character cells.
|
|
func NewEventResize(width, height int) *EventResize {
|
|
ws := WindowSize{
|
|
Width: width,
|
|
Height: height,
|
|
}
|
|
return &EventResize{t: time.Now(), ws: ws}
|
|
}
|
|
|
|
// When returns the time when the Event was created.
|
|
func (ev *EventResize) When() time.Time {
|
|
return ev.t
|
|
}
|
|
|
|
// Size returns the new window size as width, height in character cells.
|
|
func (ev *EventResize) Size() (int, int) {
|
|
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)
|
|
}
|