From 2a1ab90ad58291bbbcfd5592033d060c69421d3f Mon Sep 17 00:00:00 2001
From: David Linus Briemann <dlb@mailbox.org>
Date: Thu, 3 May 2018 20:52:42 +0200
Subject: [PATCH] adds a community example for the usage of video modes

---
 pixelgl/monitor.go | 24 ++++++++++++++++++++++++
 pixelgl/window.go  |  6 ++++++
 2 files changed, 30 insertions(+)

diff --git a/pixelgl/monitor.go b/pixelgl/monitor.go
index 7cf73a9..0d4a6d3 100644
--- a/pixelgl/monitor.go
+++ b/pixelgl/monitor.go
@@ -10,6 +10,15 @@ type Monitor struct {
 	monitor *glfw.Monitor
 }
 
+// VideoMode represents all properties of a video mode and is attached
+// to a monitor if it is a fullscreen mode.
+type VideoMode struct {
+	*glfw.VidMode
+	// Monitor is a pointer to the monitor that owns this video mode.
+	// If Monitor is nil the video mode is windowed.
+	Monitor *Monitor
+}
+
 // PrimaryMonitor returns the main monitor (usually the one with the taskbar and stuff).
 func PrimaryMonitor() *Monitor {
 	var monitor *glfw.Monitor
@@ -95,3 +104,18 @@ func (m *Monitor) RefreshRate() (rate float64) {
 	rate = float64(mode.RefreshRate)
 	return
 }
+
+// VideoModes returns all available video modes for the monitor.
+func (m *Monitor) VideoModes() (vmodes []*VideoMode) {
+	var modes []*glfw.VidMode
+	mainthread.Call(func() {
+		modes = m.monitor.GetVideoModes()
+	})
+	for _, mode := range modes {
+		vmodes = append(vmodes, &VideoMode{
+			VidMode: mode,
+			Monitor: m,
+		})
+	}
+	return
+}
diff --git a/pixelgl/window.go b/pixelgl/window.go
index ddc5426..0668a9b 100644
--- a/pixelgl/window.go
+++ b/pixelgl/window.go
@@ -424,3 +424,9 @@ func (w *Window) Clear(c color.Color) {
 func (w *Window) Color(at pixel.Vec) pixel.RGBA {
 	return w.canvas.Color(at)
 }
+
+// SetVideoMode applies the given video mode to this window.
+func (w *Window) SetVideoMode(vm VideoMode) {
+	w.SetMonitor(vm.Monitor)
+	w.SetBounds(pixel.R(0, 0, float64(vm.Width), float64(vm.Height)))
+}
-- 
GitLab