1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
#ifndef GLT_VIEWPORT_H
#define GLT_VIEWPORT_H
/*
GLT OpenGL C++ Toolkit
Copyright (C) 2000-2002 Nigel Stewart
Email: nigels@nigels.com WWW: http://www.nigels.com/glt/
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*! \file
\brief OpenGL Viewport Class
\ingroup GLT
$Id: viewport.h,v 1.13 2002/10/11 08:33:21 nigels Exp $
$Log: viewport.h,v $
Revision 1.13 2002/10/11 08:33:21 nigels
Added GLint *() operator
Added resize to (image-space) bounding box
Revision 1.12 2002/10/07 16:33:35 nigels
Added CVS info
*/
#include "glt_config.h"
#include "glt_gl.h"
#include <iosfwd>
/*! \enum GltHorizontalAlignment
\brief Horizontal alignment
\ingroup GLT
*/
typedef enum GltHorizontalAlignment
{
GLT_ALIGN_LEFT = 0,
GLT_ALIGN_HCENTER,
GLT_ALIGN_RIGHT
} GltHorizontalAlignment;
/*! \enum GltVerticalAlignment
\brief Vertical alignment
\ingroup GLT
*/
typedef enum GltVerticalAlignment
{
GLT_ALIGN_TOP = 0,
GLT_ALIGN_VCENTER,
GLT_ALIGN_BOTTOM
} GltVerticalAlignment;
class GltTexture;
/*! \class GltViewport
\brief OpenGL Viewport Class
\ingroup GLT
Convenient manipulation of viewport information.
*/
class BoundingBox;
class GltViewport
{
public:
/// Constructor
GltViewport(bool getIt = false);
/// Copy constructor
GltViewport(const GltViewport &viewport);
/// Constructor
GltViewport(const GLint x,const GLint y,const GLint width,const GLint height);
/// Destructor
~GltViewport();
/// Is the viewport a valid size?
bool valid() const;
/// Get the current OpenGL viewport
void get();
/// Set the current OpenGL viewport
void set() const;
/// Set the current OpenGL viewport width and height
void set(const GLint width,const GLint height);
/// Set the current OpenGL viewport x, y, width and height
void set(const GLint x,const GLint y,const GLint width,const GLint height);
/// Left position of viewport
GLint &x();
/// Right position of viewport
GLint &y();
/// Width of viewport
GLint &width();
/// Height of viewport
GLint &height();
/// Left position of viewport
const GLint &x() const;
/// Right position of viewport
const GLint &y() const;
/// Width of viewport
const GLint &width() const;
/// Height of viewport
const GLint &height() const;
/// Viewport size, in pixels
const GLint pixels() const;
///
operator GLint *();
///
operator const GLint *() const;
/// Resize the viewport
bool resize(const GLint width,const GLint height);
/// Resize the viewport
bool resize(const GLint x,const GLint y,const GLint width,const GLint height);
/// Resize the viewport to fit a texture
bool resize(const GltTexture &texture);
/// Resize the viewport to fit an (image-space) bounding box
bool resize(const BoundingBox &box);
/// Position viewport horizontally, relative to another viewport
bool align(const GltHorizontalAlignment &align,const GltViewport &window);
/// Position viewport vetically, relative to another viewport
bool align(const GltVerticalAlignment &align,const GltViewport &window);
/// Shrink a viewport by a particular margin (in pixels)
bool shrink(const GLint w);
//
/// Assignment operator
GltViewport &operator=(const GltViewport &viewport);
/// Compare viewports
bool operator==(const GltViewport &viewport) const;
/// Compare viewports
bool operator!=(const GltViewport &viewport) const;
//
/// Draw a covering quad relative to viewport
void drawQuad() const;
/// Draw surrounding lines relative to viewport
void drawLines() const;
private:
GLint _viewport[4];
};
#endif
|