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