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 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
|
/*
* Modification History
*
* 2001-September-15 Jason Rohrer
* Created.
* Changed to use normalized floating point coordinates.
* Fixed some compile bugs.
* Changed to extend the GUIComponent class.
*
* 2001-October-29 Jason Rohrer
* Added support for focus.
*/
#ifndef GUI_COMPONENT_GL_INCLUDED
#define GUI_COMPONENT_GL_INCLUDED
#include "minorGems/graphics/openGL/RedrawListenerGL.h"
#include "minorGems/ui/GUIComponent.h"
/**
* A base class for all OpenGL GUI components.
*
* Note that all coordinates are specified in a normalized
* [0,1.0] space, where the screen is spanned by this [0,1.0] range.
*
* @author Jason Rohrer
*/
class GUIComponentGL : public GUIComponent, public RedrawListenerGL {
public:
/**
* Tests whether a point is inside this component.
*
* @param inX the x value to check.
* @param inY the y value to check.
*
* @return true iff the point is insided this component.
*/
virtual char isInside( double inX, double inY );
/**
* Sets this component's focus status.
*
* Note that this component may ignore this function call
* and configure its own focus (for example, some
* components are never focused).
*
* The default implementation ignores this call
* and is never focused.
*
* @param inFocus true iff this component should be focused.
*/
virtual void setFocus( char inFocus );
// the implementations below do nothing, but they allow
// subclasses to pick which input they care about (and which
// functions they want to override)
// implements a normalized (to [0,1.0] version
// of a MouseHandlerGL-like interface
virtual void mouseMoved( double inX, double inY );
virtual void mouseDragged( double inX, double inY );
virtual void mousePressed( double inX, double inY );
virtual void mouseReleased( double inX, double inY );
// implements a normalized (to [0,1.0] version
// of a KeyboardHandlerGL-like interface
virtual char isFocused();
virtual void keyPressed( unsigned char inKey, double inX, double inY );
virtual void specialKeyPressed( int inKey, double inX, double inY );
virtual void keyReleased( unsigned char inKey,
double inX, double inY );
virtual void specialKeyReleased( int inKey, double inX, double inY );
// implements the RedrawListenerGL interface
virtual void fireRedraw();
protected:
/**
* Constructs a component.
*
* Should only be called by subclass constructors.
*
* @param inAnchorX the x position of the upper left corner
* of this component.
* @param inAnchorY the y position of the upper left corner
* of this component.
* @param inWidth the width of this component.
* @param inHeight the height of this component.
*/
GUIComponentGL( double inAnchorX, double inAnchorY, double inWidth,
double inHeight );
double mAnchorX;
double mAnchorY;
double mWidth;
double mHeight;
};
inline GUIComponentGL::GUIComponentGL(
double inAnchorX, double inAnchorY, double inWidth,
double inHeight )
: mAnchorX( inAnchorX ), mAnchorY( inAnchorY ), mWidth( inWidth ),
mHeight( inHeight ) {
}
inline char GUIComponentGL::isInside( double inX, double inY ) {
if( inX >= mAnchorX && inX < mAnchorX + mWidth
&& inY >= mAnchorY && inY < mAnchorY + mHeight ) {
return true;
}
else {
return false;
}
}
inline void GUIComponentGL::mouseMoved( double inX, double inY ) {
}
inline void GUIComponentGL::mouseDragged( double inX, double inY ) {
}
inline void GUIComponentGL::mousePressed( double inX, double inY ) {
}
inline void GUIComponentGL::mouseReleased( double inX, double inY ) {
}
inline void GUIComponentGL::setFocus( char inFocus ) {
// default implementation ignores this call
}
inline char GUIComponentGL::isFocused() {
return false;
}
inline void GUIComponentGL::keyPressed(
unsigned char inKey, double inX, double inY ) {
}
inline void GUIComponentGL::specialKeyPressed(
int inKey, double inX, double inY ) {
}
inline void GUIComponentGL::keyReleased(
unsigned char inKey, double inX, double inY ) {
}
inline void GUIComponentGL::specialKeyReleased(
int inKey, double inX, double inY ) {
}
inline void GUIComponentGL::fireRedraw() {
}
#endif
|