summaryrefslogtreecommitdiff
path: root/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/GLT/glt_viewport.h
blob: 69c93c009d6d93caf506b39e8a7f92037ebdfb2a (plain)
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