This repository has been archived on 2023-08-08. You can view files and clone it, but cannot push or open issues or pull requests.
tomo-old/window.go

92 lines
3.3 KiB
Go

package tomo
import "image"
import "git.tebibyte.media/sashakoshka/tomo/data"
// TODO: add support for the icon window because imagine if we allowed
// applications to display live updating information readouts on their icons.
// that would be baller
// Window represents a top-level container generated by the currently running
// backend. It can contain a single element. It is hidden by default, and must
// be explicitly shown with the Show() method.
type Window interface {
// Adopt sets the root element of the window. There can only be one of
// these at one time.
Adopt (Element)
// Child returns the root element of the window.
Child () Element
// SetTitle sets the title that appears on the window's title bar. This
// method might have no effect with some backends.
SetTitle (string)
// SetApplicationName sets the name of the application that this window
// belongs to. This method might have no effect with some backends.
SetApplicationName (string)
// SetIcon taks in a list different sizes of the same icon and selects
// the best one to display on the window title bar, dock, or whatever is
// applicable for the given backend. This method might have no effect
// for some backends.
SetIcon (sizes []image.Image)
// NewModal creates a new modal dialog window. The resulting window will
// inherit this window's application name and icon, but these can be
// manually overridden. The modal will be placed relative to the parent
// window, but this position may be overridden by the backend or
// operating system.
NewModal (bounds image.Rectangle) (Window, error)
// NewMenu creates a new temporary window for things like dropdown or
// context menus. It automatically closes when the user presses escape
// or clicks outside of it. Like NewModal, the pulldown window will
// inherit this window's application name and icon, and will be
// positioned relative to it.
NewMenu (bounds image.Rectangle) (MenuWindow, error)
// Copy puts data into the clipboard.
Copy (data.Data)
// Paste requests the data currently in the clipboard. When the data is
// available, the callback is called with the clipboard data. If there
// was no data matching the requested mime type found, nil is passed to
// the callback instead.
Paste (callback func (data.Data, error), accept ...data.Mime)
// Show shows the window. The window starts off hidden, so this must be
// called after initial setup to make sure it is visible.
Show ()
// Hide hides the window.
Hide ()
// Close closes the window.
Close ()
// OnClose specifies a function to be called when the window is closed.
OnClose (func ())
}
// MainWindow is a window capable of owning multiple sub-windows.
type MainWindow interface {
Window
// NewPanel creates a panel window that is semantically tied to this
// window, positioned relative to it. This is intended to be used for
// utility windows, tool bars, torn-off menus, etc. The resulting window
// will inherit this window's application name and icon, but these can
// be manually overridden.
NewPanel (bounds image.Rectangle) (Window, error)
}
// MenuWindow is a temporary window that automatically closes when the user
// presses escape or clicks outside of it.
type MenuWindow interface {
Window
// Pin converts this window into a panel, pinning it to the screen.
Pin ()
}