desktop

package
v0.0.10 Latest Latest
Warning

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

Go to latest
Published: Apr 14, 2024 License: BSD-3-Clause Imports: 21 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var MacOsBuiltinMonitor = "Built-in Retina Display"
View Source
var MonitorDebug = false

MonitorDebug turns on various debugging statements about monitor changes and updates from glfw.

View Source
var TheApp = &App{AppMulti: base.NewAppMulti[*Window]()}

TheApp is the single system.App for the desktop platform

View Source
var TheClipboard = &Clipboard{}

TheClipboard is the single system.Clipboard for Linux

View Source
var TheCursor = &Cursor{CursorBase: system.CursorBase{Vis: true, Size: 32}, Cursors: map[enums.Enum]map[int]*glfw.Cursor{}}

TheCursor is the single system.Cursor for the desktop platform

Functions

func GlfwKeyCode

func GlfwKeyCode(kcode glfw.Key) key.Codes

TODO: should this be a map?

func GlfwMods

func GlfwMods(mod glfw.ModifierKey) key.Modifiers

func Init

func Init()

func NewGlfwWindow

func NewGlfwWindow(opts *system.NewWindowOptions, sc *system.Screen) (*glfw.Window, error)

NewGlfwWindow makes a new glfw window. It must be run on main.

Types

type App

type App struct {
	base.AppMulti[*Window]

	// GPU is the system GPU used for the app
	GPU *vgpu.GPU

	// ShareWin is a non-visible, always-present window that all windows share gl context with
	ShareWin *glfw.Window
}

App is the system.App implementation for the desktop platform

func (*App) Clipboard

func (a *App) Clipboard(win system.Window) system.Clipboard

func (*App) Cursor

func (a *App) Cursor(win system.Window) system.Cursor

func (*App) DataDir

func (a *App) DataDir() string

func (*App) FindScreenInfo

func (a *App) FindScreenInfo(name string) (*system.Screen, bool)

FindScreenInfo finds saved screen info based on name

func (*App) GetScreens

func (a *App) GetScreens()

func (*App) InitVk

func (a *App) InitVk()

InitVk initializes glfw, vulkan, vgpu, and the screens.

func (*App) MainLoop

func (a *App) MainLoop()

MainLoop starts running event loop on main thread (must be called from the main thread).

func (*App) MonitorChange

func (a *App) MonitorChange(monitor *glfw.Monitor, event glfw.PeripheralEvent)

MonitorChange is called when a monitor is connected to or disconnected from the system.

func (*App) NewWindow

func (a *App) NewWindow(opts *system.NewWindowOptions) (system.Window, error)

func (*App) OpenURL

func (a *App) OpenURL(url string)

func (*App) Platform

func (a *App) Platform() system.Platforms

func (*App) SaveScreenInfo

func (a *App) SaveScreenInfo(sc *system.Screen) bool

SaveScreenInfo saves a copy of given screen info to screensAll list if unique based on name. Returns true if added a new screen.

func (*App) SendEmptyEvent

func (a *App) SendEmptyEvent()

SendEmptyEvent sends an empty, blank event to global event processing system, which has the effect of pushing the system along during cases when the event loop needs to be "pinged" to get things moving along..

type Clipboard

type Clipboard struct{}

Clipboard is the system.Clipboard implementation for Linux

func (*Clipboard) Clear

func (cl *Clipboard) Clear()

func (*Clipboard) IsEmpty

func (cl *Clipboard) IsEmpty() bool

func (*Clipboard) Read

func (cl *Clipboard) Read(types []string) mimedata.Mimes

func (*Clipboard) Write

func (cl *Clipboard) Write(data mimedata.Mimes) error

type Cursor

type Cursor struct {
	system.CursorBase

	// Cursors are the cached glfw cursors
	Cursors map[enums.Enum]map[int]*glfw.Cursor

	// Mu is a mutex protecting access to the cursors
	Mu sync.Mutex

	// PrevSize is the cached previous size
	PrevSize int
}

Cursor is the [cursor.Cursor] implementation for the desktop platform

func (*Cursor) Set

func (cu *Cursor) Set(cursor enums.Enum) error

type Window

type Window struct {
	base.WindowMulti[*App, *vdraw.Drawer]

	// Glw is the glfw window associated with this window
	Glw *glfw.Window

	// ScreenName is the name of the last known screen this window was on
	ScreenWindow string
}

Window is the implementation of system.Window for the desktop platform.

func (*Window) Activate

func (w *Window) Activate() bool

Activate() sets this window as the current render target for gpu rendering functions, and the current context for gpu state (equivalent to MakeCurrentContext on OpenGL). If it returns false, then window is not visible / valid and nothing further should happen. Must call this on app main thread using system.TheApp.RunOnMain

system.TheApp.RunOnMain(func() {
   if !win.Activate() {
       return
   }
   // do GPU calls here
})

func (*Window) CharEvent

func (w *Window) CharEvent(gw *glfw.Window, char rune, mod glfw.ModifierKey)

char input

func (*Window) Close

func (w *Window) Close()

func (*Window) CurMousePosPoint

func (w *Window) CurMousePosPoint(gw *glfw.Window) image.Point

func (*Window) CursorEnterEvent

func (w *Window) CursorEnterEvent(gw *glfw.Window, entered bool)

func (*Window) CursorPosEvent

func (w *Window) CursorPosEvent(gw *glfw.Window, x, y float64)

func (*Window) DeActivate

func (w *Window) DeActivate()

DeActivate() clears the current render target and gpu rendering context. Generally more efficient to NOT call this and just be sure to call Activate where relevant, so that if the window is already current context no switching is required. Must call this on app main thread using system.TheApp.RunOnMain

func (*Window) DropEvent

func (w *Window) DropEvent(gw *glfw.Window, names []string)

func (*Window) FbResized

func (w *Window) FbResized(gw *glfw.Window, width, height int)

func (*Window) FocusWindow

func (w *Window) FocusWindow() *Window

func (*Window) Focused

func (w *Window) Focused(gw *glfw.Window, focused bool)

func (*Window) GetScreenOverlap

func (w *Window) GetScreenOverlap() *system.Screen

GetScreenOverlap gets the monitor for given window based on overlap of geometry, using limited glfw 3.3 api, which does not provide this functionality. See: https://github.com/glfw/glfw/issues/1699 This is adapted from slawrence2302's code posted there.

func (*Window) Handle

func (w *Window) Handle() any

func (*Window) Iconify

func (w *Window) Iconify(gw *glfw.Window, iconified bool)

func (*Window) IsVisible

func (w *Window) IsVisible() bool

func (*Window) KeyEvent

func (w *Window) KeyEvent(gw *glfw.Window, ky glfw.Key, scancode int, action glfw.Action, mod glfw.ModifierKey)

physical key

func (*Window) Minimize

func (w *Window) Minimize()

func (*Window) MouseButtonEvent

func (w *Window) MouseButtonEvent(gw *glfw.Window, button glfw.MouseButton, action glfw.Action, mod glfw.ModifierKey)

func (*Window) MousePosToPoint

func (w *Window) MousePosToPoint(x, y float64) image.Point

func (*Window) Moved

func (w *Window) Moved(gw *glfw.Window, x, y int)

func (*Window) OnCloseReq

func (w *Window) OnCloseReq(gw *glfw.Window)

func (*Window) Position

func (w *Window) Position() image.Point

func (*Window) Raise

func (w *Window) Raise()

func (*Window) Screen

func (w *Window) Screen() *system.Screen

Screen gets the screen of the window, computing various window parameters.

func (*Window) ScrollEvent

func (w *Window) ScrollEvent(gw *glfw.Window, xoff, yoff float64)

func (*Window) SetCursorEnabled

func (w *Window) SetCursorEnabled(enabled, raw bool)

func (*Window) SetGeom

func (w *Window) SetGeom(pos image.Point, sz image.Point)

func (*Window) SetIcon

func (w *Window) SetIcon(images []image.Image)

func (*Window) SetMousePos

func (w *Window) SetMousePos(x, y float64)

func (*Window) SetPos

func (w *Window) SetPos(pos image.Point)

func (*Window) SetTitle

func (w *Window) SetTitle(title string)

func (*Window) SetWinSize

func (w *Window) SetWinSize(sz image.Point)

func (*Window) Show

func (w *Window) Show()

func (*Window) UpdateFullscreen

func (w *Window) UpdateFullscreen()

func (*Window) UpdateGeom

func (w *Window) UpdateGeom()

func (*Window) WinResized

func (w *Window) WinResized(gw *glfw.Window, width, height int)

Jump to

Keyboard shortcuts

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