1 /* bzflag 2 * Copyright (c) 1993-2021 Tim Riker 3 * 4 * This package is free software; you can redistribute it and/or 5 * modify it under the terms of the license found in the file 6 * named COPYING that should have accompanied this file. 7 * 8 * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 9 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 10 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 11 */ 12 13 #ifndef __BZFWINDOW_H__ 14 #define __BZFWINDOW_H__ 15 16 #include "common.h" 17 18 /* system headers */ 19 #include <vector> 20 21 22 class BzfDisplay; 23 24 class BzfWindowCB 25 { 26 public: 27 void (*cb)(void*); 28 void* data; 29 }; 30 31 /** BzfWindow: 32 * Abstract, platform independent base for OpenGL windows. 33 */ 34 class BzfWindow 35 { 36 public: 37 BzfWindow(const BzfDisplay*); 38 virtual ~BzfWindow(); 39 getDisplay()40 const BzfDisplay* getDisplay() const 41 { 42 return display; 43 } 44 virtual bool isValid() const = 0; 45 46 virtual void showWindow(bool) = 0; 47 48 virtual void getPosition(int& x, int& y) = 0; 49 virtual void getSize(int& width, int& height) const = 0; 50 51 virtual void setTitle(const char*) = 0; 52 virtual void setPosition(int x, int y) = 0; 53 virtual void setSize(int width, int height) = 0; 54 virtual void setMinSize(int width, int height) = 0; 55 virtual void setFullscreen(bool) = 0; iconify(void)56 virtual void iconify(void) 57 { 58 ; 59 }; create(void)60 virtual bool create(void) 61 { 62 return true; 63 }; 64 65 virtual void warpMouse(int x, int y) = 0; 66 virtual void getMouse(int& x, int& y) const = 0; 67 virtual void grabMouse() = 0; 68 virtual void ungrabMouse() = 0; enableGrabMouse(bool)69 virtual void enableGrabMouse(bool) 70 { 71 ; 72 }; 73 // TODO: Refactor our handling of confining the mouse to the window or 74 // the motionbox to be a bit cleaner. disableConfineToMotionbox()75 virtual void disableConfineToMotionbox() 76 { 77 ; 78 } 79 virtual void confineToMotionbox(int x1, int y1, int x2, int y2); 80 virtual void showMouse() = 0; 81 virtual void hideMouse() = 0; 82 83 virtual void setGamma(float) = 0; 84 virtual float getGamma() const = 0; 85 virtual bool hasGammaControl() const = 0; 86 hasVerticalSync()87 virtual bool hasVerticalSync() const 88 { 89 return false; 90 } setVerticalSync(bool)91 virtual void setVerticalSync(bool) 92 { 93 ; 94 } 95 96 virtual void makeCurrent() = 0; 97 virtual void yieldCurrent(); 98 virtual void releaseCurrent(); 99 virtual void swapBuffers() = 0; 100 virtual void makeContext() = 0; 101 virtual void freeContext() = 0; 102 103 void callExposeCallbacks() const; 104 void addExposeCallback(void (*cb)(void*), void* data); 105 void removeExposeCallback(void (*cb)(void*), void* data); 106 107 void callResizeCallbacks() const; 108 void addResizeCallback(void (*cb)(void*), void* data); 109 void removeResizeCallback(void (*cb)(void*), void* data); 110 111 private: 112 const BzfDisplay* display; 113 std::vector<BzfWindowCB> exposeCallbacks; 114 std::vector<BzfWindowCB> resizeCallbacks; 115 }; 116 117 118 #endif /* __BZFWINDOW_H__ */ 119 120 // Local Variables: *** 121 // mode: C++ *** 122 // tab-width: 4 *** 123 // c-basic-offset: 4 *** 124 // indent-tabs-mode: nil *** 125 // End: *** 126 // ex: shiftwidth=4 tabstop=4 127