source: trunk/src/opengl/glut/win32_util.c

Last change on this file was 2689, checked in by jeroen, 26 years ago

* empty log message *

File size: 3.4 KB
Line 
1/* $Id: win32_util.c,v 1.2 2000-02-09 08:46:22 jeroen Exp $ */
2/* Copyright (c) Nate Robins, 1997. */
3
4/* portions Copyright (c) Mark Kilgard, 1997, 1998. */
5
6/* This program is freely distributable without licensing fees
7 and is provided without guarantee or warrantee expressed or
8 implied. This program is -not- in the public domain. */
9
10
11#include "glutint.h"
12#include "glutstroke.h"
13#include "glutbitmap.h"
14#if defined(__CYGWIN32__)
15typedef MINMAXINFO* LPMINMAXINFO;
16#else
17#include <sys/timeb.h>
18#endif
19
20extern const StrokeFontRec glutStrokeRoman, glutStrokeMonoRoman;
21extern const BitmapFontRec glutBitmap8By13, glutBitmap9By15,
22 glutBitmapTimesRoman10,glutBitmapTimesRoman24,
23 glutBitmapHelvetica10, glutBitmapHelvetica12,
24 glutBitmapHelvetica18;
25
26int
27gettimeofday(struct timeval* tp, void* tzp)
28{
29 struct timeb tb;
30
31 ftime(&tb);
32 tp->tv_sec = tb.time;
33 tp->tv_usec = tb.millitm * 1000;
34
35 /* 0 indicates that the call succeeded. */
36 return 0;
37}
38
39/* To get around the fact that Microsoft DLLs only allow functions
40 to be exported and now data addresses (as Unix DSOs support), the
41 GLUT API constants such as GLUT_STROKE_ROMAN have to get passed
42 through a case statement to get mapped to the actual data structure
43 address. */
44void*
45__glutFont(void *font)
46{
47 switch((int)font) {
48 case I_GLUT_STROKE_ROMAN:
49 return (void *)&glutStrokeRoman;
50 case I_GLUT_STROKE_MONO_ROMAN:
51 return (void *)&glutStrokeMonoRoman;
52 case I_GLUT_BITMAP_9_BY_15:
53 return (void *)&glutBitmap9By15;
54 case I_GLUT_BITMAP_8_BY_13:
55 return (void *)&glutBitmap8By13;
56 case I_GLUT_BITMAP_TIMES_ROMAN_10:
57 return (void *)&glutBitmapTimesRoman10;
58 case I_GLUT_BITMAP_TIMES_ROMAN_24:
59 return (void *)&glutBitmapTimesRoman24;
60 case I_GLUT_BITMAP_HELVETICA_10:
61 return (void *)&glutBitmapHelvetica10;
62 case I_GLUT_BITMAP_HELVETICA_12:
63 return (void *)&glutBitmapHelvetica12;
64 case I_GLUT_BITMAP_HELVETICA_18:
65 return (void *)&glutBitmapHelvetica18;
66 }
67 __glutFatalError("out of memory.");
68 /* NOTREACHED */
69 return NULL;
70}
71
72int
73__glutGetTransparentPixel(Display * dpy, XVisualInfo * vinfo)
74{
75 /* the transparent pixel on Win32 is always index number 0. So if
76 we put this routine in this file, we can avoid compiling the
77 whole of layerutil.c which is where this routine normally comes
78 from. */
79 return 0;
80}
81
82void
83__glutAdjustCoords(Window parent, int* x, int* y, int* width, int* height)
84{
85 RECT rect;
86
87 /* adjust the window rectangle because Win32 thinks that the x, y,
88 width & height are the WHOLE window (including decorations),
89 whereas GLUT treats the x, y, width & height as only the CLIENT
90 area of the window. */
91 rect.left = *x; rect.top = *y;
92 rect.right = *x + *width; rect.bottom = *y + *height;
93
94 /* must adjust the coordinates according to the correct style
95 because depending on the style, there may or may not be
96 borders. */
97 AdjustWindowRect(&rect, WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
98 (parent ? WS_CHILD : WS_OVERLAPPEDWINDOW),
99 FALSE);
100 /* FALSE in the third parameter = window has no menu bar */
101
102 /* readjust if the x and y are offscreen */
103 if(rect.left < 0) {
104 *x = 0;
105 } else {
106 *x = rect.left;
107 }
108
109 if(rect.top < 0) {
110 *y = 0;
111 } else {
112 *y = rect.top;
113 }
114
115 *width = rect.right - rect.left; /* adjusted width */
116 *height = rect.bottom - rect.top; /* adjusted height */
117}
118
Note: See TracBrowser for help on using the repository browser.