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 () }