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 // interface header
14 #include "BzfWindow.h"
15 
16 // system headers
17 #include <vector>
18 
19 // common implementation headers
20 #include "ErrorHandler.h"
21 
BzfWindow(const BzfDisplay * _display)22 BzfWindow::BzfWindow(const BzfDisplay* _display) : display(_display)
23 {
24 }
25 
~BzfWindow()26 BzfWindow::~BzfWindow()
27 {
28 }
29 
callExposeCallbacks() const30 void            BzfWindow::callExposeCallbacks() const
31 {
32     const int count = exposeCallbacks.size();
33     for (int i = 0; i < count; i++)
34     {
35         const BzfWindowCB& cb = exposeCallbacks[i];
36         (*cb.cb)(cb.data);
37     }
38 }
39 
addExposeCallback(void (* _cb)(void *),void * data)40 void            BzfWindow::addExposeCallback(
41     void (*_cb)(void*), void* data)
42 {
43     BzfWindowCB cb;
44     cb.cb = _cb;
45     cb.data = data;
46     exposeCallbacks.push_back(cb);
47 }
48 
removeExposeCallback(void (* _cb)(void *),void * data)49 void            BzfWindow::removeExposeCallback(
50     void (*_cb)(void*), void* data)
51 {
52     std::vector<BzfWindowCB>::iterator it = exposeCallbacks.begin();
53     for (; it != exposeCallbacks.end(); it++)
54     {
55         if ((it->cb == _cb) && (it->data == data))
56         {
57             exposeCallbacks.erase(it);
58             break;
59         }
60     }
61 }
62 
callResizeCallbacks() const63 void            BzfWindow::callResizeCallbacks() const
64 {
65     const int count = resizeCallbacks.size();
66     for (int i = 0; i < count; i++)
67     {
68         const BzfWindowCB& cb = resizeCallbacks[i];
69         (*cb.cb)(cb.data);
70     }
71 }
72 
addResizeCallback(void (* _cb)(void *),void * data)73 void            BzfWindow::addResizeCallback(
74     void (*_cb)(void*), void* data)
75 {
76     BzfWindowCB cb;
77     cb.cb = _cb;
78     cb.data = data;
79     resizeCallbacks.push_back(cb);
80 }
81 
removeResizeCallback(void (* _cb)(void *),void * data)82 void            BzfWindow::removeResizeCallback(
83     void (*_cb)(void*), void* data)
84 {
85     std::vector<BzfWindowCB>::iterator it = resizeCallbacks.begin();
86     for (; it != resizeCallbacks.end(); it++)
87     {
88         if ((it->cb == _cb) && (it->data == data))
89         {
90             resizeCallbacks.erase(it);
91             break;
92         }
93     }
94 }
95 
yieldCurrent(void)96 void            BzfWindow::yieldCurrent(void)
97 {
98     // do nothing
99 }
100 
releaseCurrent(void)101 void            BzfWindow::releaseCurrent(void)
102 {
103     // do nothing
104 }
105 
confineToMotionbox(int x1,int y1,int x2,int y2)106 void            BzfWindow::confineToMotionbox(int x1, int y1, int x2, int y2)
107 {
108     // Get current mouse position
109     int mouseX, mouseY;
110     getMouse(mouseX, mouseY);
111 
112     // Warp the mouse if it's out of the boundary
113     if (mouseX < x1)
114         warpMouse(x1, mouseY);
115     if (mouseX > x2)
116         warpMouse(x2, mouseY);
117     if (mouseY < y1)
118         warpMouse(mouseX, y1);
119     if (mouseY > y2)
120         warpMouse(mouseX, y2);
121 }
122 
123 // Local Variables: ***
124 // mode: C++ ***
125 // tab-width: 4 ***
126 // c-basic-offset: 4 ***
127 // indent-tabs-mode: nil ***
128 // End: ***
129 // ex: shiftwidth=4 tabstop=4
130