From 40d2c42046bddbaabe38828965798db6d868da78 Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Thu, 24 Nov 2016 17:19:43 +0100
Subject: [PATCH] add monitor

---
 monitor.go | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 92 insertions(+)
 create mode 100644 monitor.go

diff --git a/monitor.go b/monitor.go
new file mode 100644
index 0000000..022e904
--- /dev/null
+++ b/monitor.go
@@ -0,0 +1,92 @@
+package pixel
+
+import (
+	"github.com/faiface/pixel/pixelgl"
+	"github.com/go-gl/glfw/v3.2/glfw"
+)
+
+// Monitor represents a physical display attached to your computer.
+type Monitor struct {
+	monitor *glfw.Monitor
+}
+
+// PrimaryMonitor returns the main monitor (usually the one with the taskbar and stuff).
+func PrimaryMonitor() Monitor {
+	m := Monitor{}
+	pixelgl.Do(func() {
+		m.monitor = glfw.GetPrimaryMonitor()
+	})
+	return m
+}
+
+// Monitors returns a slice of all currently attached monitors.
+func Monitors() []Monitor {
+	var monitors []Monitor
+	pixelgl.Do(func() {
+		for _, monitor := range glfw.GetMonitors() {
+			monitors = append(monitors, Monitor{monitor: monitor})
+		}
+	})
+	return monitors
+}
+
+// Name returns a human-readable name of a monitor.
+func (m Monitor) Name() string {
+	return pixelgl.DoVal(func() interface{} {
+		return m.monitor.GetName()
+	}).(string)
+}
+
+// PhysicalSize returns the size of the display are of a monitor in millimeters.
+func (m Monitor) PhysicalSize() (width, height float64) {
+	var w, h float64
+	pixelgl.Do(func() {
+		wi, hi := m.monitor.GetPhysicalSize()
+		w = float64(wi)
+		h = float64(hi)
+	})
+	return w, h
+}
+
+// Position returns the position of the upper-left corner of a monitor in screen coordinates.
+func (m Monitor) Position() (x, y float64) {
+	pixelgl.Do(func() {
+		xi, yi := m.monitor.GetPos()
+		x = float64(xi)
+		y = float64(yi)
+	})
+	return x, y
+}
+
+// Size returns the resolution of a monitor in pixels.
+func (m Monitor) Size() (width, height float64) {
+	var w, h float64
+	pixelgl.Do(func() {
+		mode := m.monitor.GetVideoMode()
+		w = float64(mode.Width)
+		h = float64(mode.Height)
+	})
+	return w, h
+}
+
+// BitDepth returns the number of bits per color of a monitor.
+func (m Monitor) BitDepth() (red, green, blue int) {
+	var r, g, b int
+	pixelgl.Do(func() {
+		mode := m.monitor.GetVideoMode()
+		r = mode.RedBits
+		g = mode.GreenBits
+		b = mode.BlueBits
+	})
+	return r, g, b
+}
+
+// RefreshRate returns the refresh frequency of a monitor in Hz (refreshes/second).
+func (m Monitor) RefreshRate() float64 {
+	var rate float64
+	pixelgl.Do(func() {
+		mode := m.monitor.GetVideoMode()
+		rate = float64(mode.RefreshRate)
+	})
+	return rate
+}
-- 
GitLab