148 lines
5.8 KiB
Go
148 lines
5.8 KiB
Go
package opengl
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
|
|
"github.com/inkyblackness/hacked/ui/input"
|
|
)
|
|
|
|
// ClosingCallback is the function to handle close requests by the user.
|
|
type ClosingCallback func()
|
|
|
|
// ClosedCallback is the function to clean up resources when the window is being closed.
|
|
type ClosedCallback func()
|
|
|
|
// RenderCallback is the function to receive render events. When the callback
|
|
// returns, the window will swap the internal buffer.
|
|
type RenderCallback func()
|
|
|
|
// MouseMoveCallback is the function to receive the current mouse coordinate while moving.
|
|
// Movement is reported while the cursor is within the client area of the window, and
|
|
// beyond the window as long as at least one captured button is pressed.
|
|
// Reported values are with sub-pixel precision, if possible.
|
|
type MouseMoveCallback func(x float32, y float32)
|
|
|
|
// MouseButtonCallback is the function to receive button up/down events.
|
|
// An Up event is sent for every reported Down event, even if the mouse cursor is outside
|
|
// the client area.
|
|
type MouseButtonCallback func(buttonMask uint32, modifier input.Modifier)
|
|
|
|
// MouseScrollCallback is the function to receive scroll events.
|
|
// Delta values are right-hand oriented: positive values go right/down/far.
|
|
type MouseScrollCallback func(dx float32, dy float32)
|
|
|
|
// ResizeCallback is called for a change of window dimensions.
|
|
type ResizeCallback func(width int, height int)
|
|
|
|
// CharCallback is called for typing a character.
|
|
type CharCallback func(char rune)
|
|
|
|
// KeyCallback is called for pressing or releasing a key on the keyboard.
|
|
type KeyCallback func(key input.Key, modifier input.Modifier)
|
|
|
|
// ModifierCallback is called when the currently active modifier changed.
|
|
type ModifierCallback func(modifier input.Modifier)
|
|
|
|
// FileDropCallback is called when one or more files were dropped into the window.
|
|
type FileDropCallback func(filePaths []string)
|
|
|
|
// WindowState describes how the window is currently presented to the user.
|
|
type WindowState struct {
|
|
// Maximized is set to true if the window is currently resized to fill the screen.
|
|
Maximized bool
|
|
// Top marks the screen position of the upper border of the window.
|
|
Top int
|
|
// Left marks the screen position of the left border of the window.
|
|
Left int
|
|
// Width marks the width of the non-maximized window.
|
|
Width int
|
|
// Height marks the height of the non-maximized window.
|
|
Height int
|
|
}
|
|
|
|
// WindowStateFromFile attempts to load the state from a file with given name.
|
|
// If this does not work, the given default state will be returned.
|
|
func WindowStateFromFile(filename string, defaultState WindowState) WindowState {
|
|
data, err := ioutil.ReadFile(filename)
|
|
if err != nil {
|
|
return defaultState
|
|
}
|
|
var state WindowState
|
|
err = json.Unmarshal(data, &state)
|
|
if err != nil {
|
|
return defaultState
|
|
}
|
|
return state
|
|
}
|
|
|
|
// SaveTo stores the state in a file with given filename.
|
|
func (state WindowState) SaveTo(filename string) error {
|
|
bytes, err := json.MarshalIndent(state, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return ioutil.WriteFile(filename, bytes, 0640)
|
|
}
|
|
|
|
// Window represents an OpenGL render surface.
|
|
type Window interface {
|
|
// StateSnapshot returns the current state of the window.
|
|
StateSnapshot() WindowState
|
|
// RestoreState puts the window into the same state when StateSnapshot() was called.
|
|
RestoreState(state WindowState)
|
|
|
|
// ClipboardString returns the current value of the clipboard, if it is compatible with UTF-8.
|
|
ClipboardString() (string, error)
|
|
// SetClipboardString sets the current value of the clipboard as UTF-8 string.
|
|
SetClipboardString(value string)
|
|
|
|
// OnClosing registers a callback function which shall be called when the user requests to close the window.
|
|
OnClosing(callback ClosingCallback)
|
|
// OnClosed registers a callback function which shall be called when the window is being closed.
|
|
OnClosed(callback ClosedCallback)
|
|
// SetCloseRequest notifies the window system whether the window shall be closed.
|
|
// It can be called during the callback of OnClosing() to abort a close request by the user.
|
|
SetCloseRequest(shouldClose bool)
|
|
|
|
// OpenGL returns the OpenGL API wrapper for this window.
|
|
OpenGL() OpenGL
|
|
// OnRender registers a callback function which shall be called to update the scene.
|
|
OnRender(callback RenderCallback)
|
|
|
|
// OnResize registers a callback function for sizing events.
|
|
OnResize(callback ResizeCallback)
|
|
// Size returns the dimensions of the window display area in pixel.
|
|
Size() (width int, height int)
|
|
// SetFullScreen sets the full screen state of the window.
|
|
SetFullScreen(on bool)
|
|
// SetTitleSuffix appends a text to the current window title.
|
|
SetTitleSuffix(value string)
|
|
// SetProjectModified sets an indicator in the window frame that the project has not been saved.
|
|
SetProjectModified(modified bool)
|
|
|
|
// SetCursorVisible controls whether the mouse cursor is currently visible.
|
|
SetCursorVisible(visible bool)
|
|
|
|
// OnMouseMove registers a callback function for mouse move events.
|
|
OnMouseMove(callback MouseMoveCallback)
|
|
// OnMouseButtonDown registers a callback function for mouse button down events.
|
|
OnMouseButtonDown(callback MouseButtonCallback)
|
|
// OnMouseButtonUp registers a callback function for mouse button up events.
|
|
OnMouseButtonUp(callback MouseButtonCallback)
|
|
// OnMouseScroll registers a callback function for mouse scroll events.
|
|
OnMouseScroll(callback MouseScrollCallback)
|
|
|
|
// OnKeyPress registers a callback function for key events.
|
|
OnKeyPress(callback KeyCallback)
|
|
// OnKeyRelease registers a callback function for key events.
|
|
OnKeyRelease(callback KeyCallback)
|
|
// OnModifier registers a callback function for change of modifier events.
|
|
OnModifier(callback ModifierCallback)
|
|
// OnCharCallback registers a callback function for typed characters.
|
|
OnCharCallback(callback CharCallback)
|
|
|
|
// OnFileDropCallback registers a callback function for dropped files.
|
|
OnFileDropCallback(callback FileDropCallback)
|
|
}
|