static Game() { keyCallback = KeyCallback; cursorPositionCallback = CursorPositionCallback; mouseButtonCallback = MouseButtonCallback; focusCallback = FocusCallbackInternal; }
public static void SetWindowFocusCallback(IntPtr window, GLFWwindowfocusfun func) => _glfwSetWindowFocusCallback(window, func);
public static extern GLFWwindowfocusfun glfwSetWindowFocusCallback(IntPtr window, GLFWwindowfocusfun cbfun);
public static GLFWwindowfocusfun setWindowFocusCallback(GLFWwindow window, GLFWwindowfocusfun cbfun) { return(Glfwint.setWindowFocusCallback(window.handle, cbfun)); }
internal OpenGLContext(string name) { if (GLFW.GlfwInit() == 0) { Console.Error.WriteLine("GLFW failed to initialize!"); Environment.Exit(1); } Window = GLFW.GlfwCreateWindow(1920, 1080, name, null, null); if (Window == null) { Console.Error.WriteLine("GLFW failed to open window!"); GLFW.GlfwTerminate(); Environment.Exit(1); } Input = new InputSource(); GLFW.GlfwMakeContextCurrent(Window); StrongReferences = new List <Delegate>(); { GLFWkeyfun cb = KeyCallback; StrongReferences.Add(cb); GLFW.GlfwSetKeyCallback(Window, cb); } { GLFWcharfun cb = CharCallback; StrongReferences.Add(cb); GLFW.GlfwSetCharCallback(Window, cb); } { GLFWerrorfun cb = ErrorCallback; StrongReferences.Add(cb); GLFW.GlfwSetErrorCallback(cb); } { GLFWscrollfun cb = ScrollCallback; StrongReferences.Add(cb); GLFW.GlfwSetScrollCallback(Window, cb); } { GLFWcharmodsfun cb = CharModsCallback; StrongReferences.Add(cb); GLFW.GlfwSetCharModsCallback(Window, cb); } { GLFWcursorposfun cb = CursorPosCallback; StrongReferences.Add(cb); GLFW.GlfwSetCursorPosCallback(Window, cb); } { GLFWwindowposfun cb = WindowPosCallback; StrongReferences.Add(cb); GLFW.GlfwSetWindowPosCallback(Window, cb); } { GLFWwindowsizefun cb = WindowSizeCallback; StrongReferences.Add(cb); GLFW.GlfwSetWindowSizeCallback(Window, cb); } { GLFWcursorenterfun cb = CursorEnterCallback; StrongReferences.Add(cb); GLFW.GlfwSetCursorEnterCallback(Window, cb); } { GLFWmousebuttonfun cb = MouseButtonCallback; StrongReferences.Add(cb); GLFW.GlfwSetMouseButtonCallback(Window, cb); } { GLFWwindowfocusfun cb = WindowFocusCallback; StrongReferences.Add(cb); GLFW.GlfwSetWindowFocusCallback(Window, cb); } { GLFWwindowiconifyfun cb = WindowIconifyCallback; StrongReferences.Add(cb); GLFW.GlfwSetWindowIconifyCallback(Window, cb); } { GLFWframebuffersizefun cb = FrameBufferSizeCallback; StrongReferences.Add(cb); GLFW.GlfwSetFramebufferSizeCallback(Window, cb); } }
public GlfwWindow(WindowSettings settings) : base(settings) { var glfwMonitor = settings.Monitor as GlfwMonitor ?? throw new NotSupportedException(); this.keyRepeatEnabled = false; var enc = Encoding.GetEncoding("utf-32", new EncoderReplacementFallback("□"), new DecoderReplacementFallback("□")); this.utf32Decoder = enc.GetDecoder(); glfwDefaultWindowHints(); glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE); switch (settings.Style) { case WindowStyle.Windowed: glfwWindowHint(GLFW_DECORATED, GLFW_TRUE); break; case WindowStyle.FullScreen: case WindowStyle.Borderless: glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); break; } checked { var mode = settings.DisplayMode; int bitspercolour = (int)mode.BitsPerPixel / 4; glfwWindowHint(GLFW_RED_BITS, bitspercolour); glfwWindowHint(GLFW_GREEN_BITS, bitspercolour); glfwWindowHint(GLFW_BLUE_BITS, bitspercolour); glfwWindowHint(GLFW_ALPHA_BITS, bitspercolour); glfwWindowHint(GLFW_REFRESH_RATE, (int)mode.RefreshRate); var titleutf8 = Encoding.UTF8.GetBytes(settings.Title); unsafe { fixed(byte *titleptr = titleutf8) { this.window = glfwCreateWindow((int)mode.Width, (int)mode.Height, titleptr, settings.Style == WindowStyle.FullScreen ? glfwMonitor.Handle : IntPtr.Zero, IntPtr.Zero); } } } if (this.window == IntPtr.Zero) { var errorPtr = IntPtr.Zero; glfwGetError(errorPtr); var errorDesc = new CString(errorPtr); throw new ApplicationException(errorDesc); } this.windowResizeDelegate = this.HandleResizeEvent; this.windowFocusDelegate = this.HandleFocusEvent; this.cursorEnterDelegate = this.HandleMouseEnterOrLeaveEvent; this.cursorMoveDelegate = this.HandleMouseMoveEvent; this.mouseButtonDelegate = this.HandleMouseButtonEvent; this.scrollDelegate = this.HandleScrollEvent; this.keyDelegate = this.HandleKeyEvent; this.textDelegate = this.HandleTextEvent; this.SetupCallbacks(); this.Activate(); glfwSwapInterval(settings.VSync ? 1 : 0); glfwSetInputMode(this.window, GLFW_CURSOR, settings.ShowCursor ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_HIDDEN); }
/*! @brief Sets the focus callback for the specified window. * * This function sets the focus callback of the specified window, which is * called when the window gains or loses input focus. * * After the focus callback is called for a window that lost input focus, * synthetic key and mouse button release events will be generated for all such * that had been pressed. For more information, see @ref glfwSetKeyCallback * and @ref glfwSetMouseButtonCallback. * * @param[in] window The window whose callback to set. * @param[in] cbfun The new callback, or `NULL` to remove the currently set * callback. * @return The previously set callback, or `NULL` if no callback was set or the * library had not been [initialized](@ref intro_init). * * @par Thread Safety * This function may only be called from the main thread. * * @sa @ref window_focus * * @since Added in GLFW 3.0. * * @ingroup window */ internal static extern GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun cbfun);