Doxygen Source Code Documentation
glut_cursor.c File Reference
#include <GL/glut.h>#include "glutint.h"#include <X11/Xatom.h>#include <X11/cursorfont.h>Go to the source code of this file.
Data Structures | |
| struct | _CursorTable |
Typedefs | |
| typedef _CursorTable | CursorTable |
Functions | |
| Cursor | getFullCrosshairCursor (void) |
| Cursor | makeBlankCursor (void) |
| void | glutSetCursor (int cursor) |
Variables | |
| CursorTable | cursorTable [] |
| Cursor | blankCursor = None |
| Cursor | fullCrosshairCusor = None |
Typedef Documentation
|
|
|
Function Documentation
|
|
Definition at line 45 of file glut_cursor.c. References fullCrosshairCusor, and left. Referenced by glutSetCursor().
00046 {
00047 Cursor cursor;
00048 Atom crosshairAtom, actualType;
00049 int rc, actualFormat;
00050 unsigned long n, left;
00051 unsigned long *value;
00052
00053 if (fullCrosshairCusor == None) {
00054 crosshairAtom = XInternAtom(__glutDisplay,
00055 "_SGI_CROSSHAIR_CURSOR", True);
00056 if (crosshairAtom != None) {
00057 value = 0; /* Make compiler happy. */
00058 rc = XGetWindowProperty(__glutDisplay, __glutRoot,
00059 crosshairAtom, 0, 1, False, XA_CURSOR, &actualType,
00060 &actualFormat, &n, &left, (unsigned char **) &value);
00061 if (rc == Success && actualFormat == 32 && n >= 1) {
00062 cursor = value[0];
00063 XFree(value);
00064 return cursor;
00065 }
00066 }
00067 }
00068 return XCreateFontCursor(__glutDisplay, XC_crosshair);
00069 }
|
|
|
Definition at line 92 of file glut_cursor.c. References blankCursor, _CursorTable::cursor, fullCrosshairCusor, getFullCrosshairCursor(), GLUT_CURSOR_FULL_CROSSHAIR, GLUT_CURSOR_INHERIT, GLUT_CURSOR_NONE, and makeBlankCursor().
00093 {
00094 Cursor xcursor;
00095
00096 if (cursor >= 0 &&
00097 cursor < sizeof(cursorTable) / sizeof(cursorTable[0])) {
00098 if (cursorTable[cursor].cursor == None)
00099 cursorTable[cursor].cursor = XCreateFontCursor(__glutDisplay,
00100 cursorTable[cursor].glyph);
00101 xcursor = cursorTable[cursor].cursor;
00102 } else {
00103 /* Special cases. */
00104 switch (cursor) {
00105 case GLUT_CURSOR_INHERIT:
00106 xcursor = None;
00107 break;
00108 case GLUT_CURSOR_NONE:
00109 if (blankCursor == None)
00110 blankCursor = makeBlankCursor();
00111 xcursor = blankCursor;
00112 break;
00113 case GLUT_CURSOR_FULL_CROSSHAIR:
00114 if (fullCrosshairCusor == None)
00115 fullCrosshairCusor = getFullCrosshairCursor();
00116 xcursor = fullCrosshairCusor;
00117 break;
00118 }
00119 }
00120 __glutCurrentWindow->cursor = cursor;
00121 XDefineCursor(__glutDisplay,
00122 __glutCurrentWindow->win, xcursor);
00123 XFlush(__glutDisplay);
00124 }
|
|
|
Definition at line 72 of file glut_cursor.c. References __glutFatalError(), and dummy. Referenced by glutSetCursor().
00073 {
00074 static char data[1] =
00075 {0};
00076 Cursor cursor;
00077 Pixmap blank;
00078 XColor dummy;
00079
00080 blank = XCreateBitmapFromData(__glutDisplay, __glutRoot,
00081 data, 1, 1);
00082 if (blank == None)
00083 __glutFatalError("out of memory.");
00084 cursor = XCreatePixmapCursor(__glutDisplay, blank, blank,
00085 &dummy, &dummy, 0, 0);
00086 XFreePixmap(__glutDisplay, blank);
00087
00088 return cursor;
00089 }
|
Variable Documentation
|
|
Definition at line 41 of file glut_cursor.c. Referenced by glutSetCursor(). |
|
|
Initial value: {
{XC_arrow, None},
{XC_top_left_arrow, None},
{XC_hand1, None},
{XC_pirate, None},
{XC_question_arrow, None},
{XC_exchange, None},
{XC_spraycan, None},
{XC_watch, None},
{XC_xterm, None},
{XC_crosshair, None},
{XC_sb_v_double_arrow, None},
{XC_sb_h_double_arrow, None},
{XC_top_side, None},
{XC_bottom_side, None},
{XC_left_side, None},
{XC_right_side, None},
{XC_top_left_corner, None},
{XC_top_right_corner, None},
{XC_bottom_right_corner, None},
{XC_bottom_left_corner, None},
}Definition at line 18 of file glut_cursor.c. |
|
|
Definition at line 42 of file glut_cursor.c. Referenced by getFullCrosshairCursor(), and glutSetCursor(). |