remove vlib/glfw (it's a vpm module now)
parent
a7e464fee9
commit
cdfc4c8372
313
vlib/glfw/glfw.v
313
vlib/glfw/glfw.v
|
@ -1,313 +0,0 @@
|
||||||
// Copyright (c) 2019 Alexander Medvednikov. All rights reserved.
|
|
||||||
// Use of this source code is governed by an MIT license
|
|
||||||
// that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
module glfw
|
|
||||||
|
|
||||||
import gl
|
|
||||||
|
|
||||||
#flag -I @VROOT/thirdparty/glfw
|
|
||||||
#flag -L @VROOT/thirdparty/glfw
|
|
||||||
|
|
||||||
// Debugging a custom build
|
|
||||||
//-#flag darwin -L/var/tmp/glfw/src/
|
|
||||||
|
|
||||||
// MacPorts
|
|
||||||
#flag darwin -L/opt/local/lib
|
|
||||||
|
|
||||||
#flag darwin -lglfw
|
|
||||||
#flag linux -lglfw
|
|
||||||
#flag windows -lglfw3
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
// #flag darwin -framework Carbon
|
|
||||||
// #flag darwin -framework Cocoa
|
|
||||||
// #flag darwin -framework CoreVideo
|
|
||||||
// #flag darwin -framework IOKit
|
|
||||||
const (
|
|
||||||
RESIZABLE = 1
|
|
||||||
DECORATED = 2
|
|
||||||
)
|
|
||||||
|
|
||||||
import const (
|
|
||||||
GLFW_RESIZABLE
|
|
||||||
GLFW_DECORATED
|
|
||||||
GLFW_FLOATING
|
|
||||||
)
|
|
||||||
|
|
||||||
import const (
|
|
||||||
GLFW_KEY_ENTER
|
|
||||||
GLFW_KEY_A
|
|
||||||
GLFW_KEY_B
|
|
||||||
GLFW_KEY_P
|
|
||||||
GLFW_KEY_F
|
|
||||||
GLFW_KEY_M
|
|
||||||
GLFW_KEY_L
|
|
||||||
GLFW_KEY_V
|
|
||||||
GLFW_KEY_R
|
|
||||||
GLFW_KEY_D
|
|
||||||
GLFW_KEY_7
|
|
||||||
GLFW_KEY_Z
|
|
||||||
GLFW_KEY_UP
|
|
||||||
GLFW_KEY_DOWN
|
|
||||||
GLFW_KEY_UP
|
|
||||||
GLFW_KEY_LEFT
|
|
||||||
GLFW_KEY_RIGHT
|
|
||||||
GLFW_KEY_BACKSPACE
|
|
||||||
GLFW_KEY_ENTER
|
|
||||||
GLFW_KEY_ESCAPE
|
|
||||||
GLFW_KEY_N
|
|
||||||
GLFW_KEY_PERIOD
|
|
||||||
GLFW_KEY_SLASH
|
|
||||||
GLFW_KEY_F5
|
|
||||||
GLFW_KEY_F6
|
|
||||||
GLFW_KEY_MINUS
|
|
||||||
GLFW_KEY_EQUAL
|
|
||||||
GLFW_KEY_C
|
|
||||||
GLFW_KEY_G
|
|
||||||
GLFW_KEY_I
|
|
||||||
GLFW_KEY_J
|
|
||||||
GLFW_KEY_E
|
|
||||||
GLFW_KEY_K
|
|
||||||
GLFW_KEY_O
|
|
||||||
GLFW_KEY_T
|
|
||||||
GLFW_KEY_H
|
|
||||||
GLFW_KEY_L
|
|
||||||
GLFW_KEY_N
|
|
||||||
GLFW_KEY_U
|
|
||||||
GLFW_KEY_X
|
|
||||||
GLFW_KEY_W
|
|
||||||
GLFW_KEY_Y
|
|
||||||
GLFW_KEY_Q
|
|
||||||
GLFW_KEY_RIGHT_BRACKET
|
|
||||||
GLFW_KEY_LEFT_BRACKET
|
|
||||||
GLFW_KEY_8
|
|
||||||
GLFW_KEY_TAB
|
|
||||||
GLFW_KEY_COMMA
|
|
||||||
GLFW_KEY_QUESTION
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
KEY_ESCAPE = 256
|
|
||||||
KEY_LEFT_SUPER = 343
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
KeyUp = 265
|
|
||||||
KeyLeft = 263
|
|
||||||
KeyRight = 262
|
|
||||||
KeyDown = 264
|
|
||||||
)
|
|
||||||
|
|
||||||
// TODO COPY PASTA
|
|
||||||
struct WinCfg {
|
|
||||||
width int
|
|
||||||
height int
|
|
||||||
title string
|
|
||||||
ptr voidptr
|
|
||||||
borderless bool
|
|
||||||
is_modal int
|
|
||||||
is_browser bool
|
|
||||||
url string
|
|
||||||
always_on_top bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// data *C.GLFWwindow
|
|
||||||
// TODO change data to cobj
|
|
||||||
struct Window {
|
|
||||||
data voidptr
|
|
||||||
title string
|
|
||||||
mx int
|
|
||||||
my int
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Size {
|
|
||||||
pub:
|
|
||||||
width int
|
|
||||||
height int
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Pos {
|
|
||||||
x int
|
|
||||||
y int
|
|
||||||
}
|
|
||||||
|
|
||||||
// type clickpub fn pub fn (window * GLFWwindow, button, action, mods int)
|
|
||||||
type clickpubfn fn (window voidptr, button, action, mods int)
|
|
||||||
|
|
||||||
pub fn init() {
|
|
||||||
C.glfwInit()
|
|
||||||
# glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
|
||||||
# glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
|
||||||
# glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
|
|
||||||
# glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) destroy() {
|
|
||||||
C.glfwDestroyWindow(w.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn terminate() {
|
|
||||||
C.glfwTerminate()
|
|
||||||
}
|
|
||||||
|
|
||||||
// pub fn mouse_move(w * GLFWwindow, x, y double) {
|
|
||||||
pub fn mouse_move(w voidptr, x, y f64) {
|
|
||||||
// #printf("%f : %f => %d \n", x,y);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn window_hint(key, val int) {
|
|
||||||
C.glfwWindowHint(key, val)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn create_window(c WinCfg) *Window {
|
|
||||||
if c.borderless {
|
|
||||||
window_hint(GLFW_RESIZABLE, 0)
|
|
||||||
window_hint(GLFW_DECORATED, 0)
|
|
||||||
}
|
|
||||||
if c.always_on_top {
|
|
||||||
window_hint(GLFW_FLOATING, 1)
|
|
||||||
}
|
|
||||||
cwindow := C.glfwCreateWindow(c.width, c.height, c.title.str, 0, 0)
|
|
||||||
if isnil(cwindow) {
|
|
||||||
println('failed to create glfw window')
|
|
||||||
C.glfwTerminate()
|
|
||||||
}
|
|
||||||
// # glfwSetCursorPosCallback(cwindow, glfw__mouse_move) ;
|
|
||||||
// C.glfwSetCursorPosCallback(cwindow, mouse_move)
|
|
||||||
C.printf('create window wnd=%p ptr==%p\n', cwindow, c.ptr)
|
|
||||||
C.glfwSetWindowUserPointer(cwindow, c.ptr)
|
|
||||||
// # void *a =glfwGetWindowUserPointer(cwindow);
|
|
||||||
// # printf("aaaaaa=%p d=%d\n", a,a);
|
|
||||||
window := &Window {
|
|
||||||
data: cwindow,
|
|
||||||
title: c.title,
|
|
||||||
}
|
|
||||||
return window
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) set_title(title string) {
|
|
||||||
C.glfwSetWindowTitle(w.data, title.str)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) make_context_current() {
|
|
||||||
// ChatsRepo
|
|
||||||
kkk := 0
|
|
||||||
// println('making context current' )
|
|
||||||
C.glfwMakeContextCurrent(w.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn swap_interval(interval int) {
|
|
||||||
C.glfwSwapInterval(interval)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn wait_events() {
|
|
||||||
C.glfwWaitEvents()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn poll_events() {
|
|
||||||
C.glfwPollEvents()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_should_close(w voidptr, close bool) {
|
|
||||||
C.glfwSetWindowShouldClose(w, close)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) should_close() bool {
|
|
||||||
// ChatsRepo
|
|
||||||
return C.glfwWindowShouldClose(w.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) swap_buffers() {
|
|
||||||
C.glfwSwapBuffers(w.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w mut Window) onmousemove(cb voidptr) {
|
|
||||||
C.glfwSetCursorPosCallback(w.data, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w mut Window) set_mouse_button_callback(cb voidptr) {
|
|
||||||
C.glfwSetMouseButtonCallback(w.data, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w mut Window) on_click(cb voidptr) {
|
|
||||||
C.glfwSetMouseButtonCallback(w.data, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) set_scroll_callback(cb voidptr) {
|
|
||||||
C.glfwSetScrollCallback(w.data, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) on_scroll(cb voidptr) {
|
|
||||||
C.glfwSetScrollCallback(w.data, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn post_empty_event() {
|
|
||||||
C.glfwPostEmptyEvent()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w mut Window) onkeydown(cb voidptr) {
|
|
||||||
C.glfwSetKeyCallback(w.data, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w mut Window) onchar(cb voidptr) {
|
|
||||||
C.glfwSetCharModsCallback(w.data, cb)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_time() f64 {
|
|
||||||
return C.glfwGetTime()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn key_pressed(wnd voidptr, key int) bool {
|
|
||||||
# return glfwGetKey(wnd, key) == GLFW_PRESS;
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO not mut
|
|
||||||
pub fn (w mut Window) get_clipboard_text() string {
|
|
||||||
return string(byteptr(C.glfwGetClipboardString(w.data)))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) set_clipboard_text(s string) {
|
|
||||||
C.glfwSetClipboardString(w.data, s.str)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) get_cursor_pos() Pos {
|
|
||||||
x := f64(0)
|
|
||||||
y := f64(0)
|
|
||||||
C.glfwGetCursorPos(w.data, &x, &y)
|
|
||||||
return Pos {
|
|
||||||
x: int(x)
|
|
||||||
y: int(y)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) user_ptr() voidptr {
|
|
||||||
return C.glfwGetWindowUserPointer(w.data)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (w &Window) set_user_ptr(ptr voidptr) {
|
|
||||||
C.glfwSetWindowUserPointer(w.data, ptr)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn C.glfwGetVideoMode() C.GLFWvideoMode
|
|
||||||
|
|
||||||
pub fn get_monitor_size() Size {
|
|
||||||
# GLFWvidmode* mode = glfwGetVideoMode(glfwGetPrimaryMonitor());
|
|
||||||
// window_width = mode->width;
|
|
||||||
// window_height = mode->height;
|
|
||||||
// monitor := C.glfwGetPrimaryMonitor()
|
|
||||||
res := Size{}
|
|
||||||
# res.width=mode->width;
|
|
||||||
# res.height=mode->height;
|
|
||||||
// C.glfwGetMonitorPhysicalSize(monitor, &res.width, &res.height)
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn (size Size) str() string {
|
|
||||||
return '{$size.width, $size.height}'
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_window_user_pointer(gwnd voidptr) voidptr {
|
|
||||||
return C.glfwGetWindowUserPointer(gwnd)
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue