array-of-pointers). Mostly deleted commented-out struct-based code.
Also added some XXX comments that I though should be pondered. (My
own pair of eyes, and one brain cell, were not sufficient at this time
to decide what to do for those ponderables. (^&)
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@304 7f0cb862-5218-0410-a997-914c9d46530a
callback pointers) to a "CallBacks" array in fgState. (This is to allow
us to write a loop to clear all callbacks from windows when the window is
dead/dying. Using this, we can safely assign NULL to each in a loop.)
Support includes two new macros, FETCH_WCB() and INVOKE_WCB(). See
freeglut_internal.h for more details there.
Some typedefs of function pointer types were altered to make them more
uniform (necessary for the macros).
All references to window-based callbacks in freeglut are updated to
use the new macros.
Old usages will cause compile-time errors.
As a side bonus, the new invocation macro sets the current window and
checks pointers so that these common steps can be uniformly done on
every window-based callback. This makes it easier to do things right.
At the same time, the array notation (and now required associated casts)
make it harder to bypass the macros and abuse the function pointers,
in general.
After this commit, I will go through the code and clean up dangling issues
about formatting. This commit is just a "it now works, let's checkpoint it"
type of affair.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@303 7f0cb862-5218-0410-a997-914c9d46530a
One bug fix from John: Execution state bug-fix in glutMainLoop(), per his
post yesterday.
One fix from me: Changed "if( ButtonPress )" to "if( pressed )".
{ButtonPress} is a constant.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@299 7f0cb862-5218-0410-a997-914c9d46530a
I believe, checked if *either* a wheel or button callback was set,
and then decided which to use---and unconditionally called it.
I left the "either" check in, but added additional checks before
actually doing the invocation.
* Lots of reformatting. Massive. The usual suspects, though, and fairly
trivial: Re-indenting to standard size, shuffling some spaces to match
the freeglut "standard" of:
if( ... )
...and:
func( ... )
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@285 7f0cb862-5218-0410-a997-914c9d46530a
WIN32 code. Take abs(direction) as the number of ticks, and count it
down.
<stdlib.h> *should* be included by freeglut_internal.h, I think, so it
should be okay; otherwise add a suitable #include.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@268 7f0cb862-5218-0410-a997-914c9d46530a
Now I've lost track of what I said I'd done. Something like:
* Fixed some issues with multiple wheels.
* Noted in comments some issues about other-than-3-real-buttons.
* Fixed formatting to fit 80 columns.
* Removed some BCPL/C++ style comments (//) that are not legal, and
which, if memory servers, are not even strictly legal when disabled
by preprocessor directives. E.g.,
#if 0
not-syntactically-valid-C
#endif
...is not legal. Though most cpp's will discard the bracketed material
completely before the main C compiler pass has a chance to analyze the
syntax. (MSVC++ and GCC both don't seem to mind the BCPL style comments
in plain C, but let's keep the sources clean, eh?)
* Fixed a problem that would have caused freeglut to report doubled
wheel events under XFree86.
Not tested other than compiling. Personally, I think that the interface
is inherently broken at this point unless you are willing to get user-
configuration. (Which would then solve the complaint that Steve had
about computing the tick-size on behalf of applications.) I.e., there
is NO WAY to know if we have the right buttons to start wheels at, or
if there are any buttons after the first wheel(s), etc. We just have to
guess---and if we are wrong, we can get varying degrees of brokeness.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@267 7f0cb862-5218-0410-a997-914c9d46530a
((a) || (b)) was defined to have value as:
(a) if (a) != 0
(b) if (a) == 0
...instead, it has value 0/1. This was causing a bug. It's probably
just as well, since what I was trying to do definitely fell into the
category of "clever code" rather than "clear code".
Sorry.
* Made glutSetKeyRepeat() call fgError() if you go out of range. (The
old code silently did nothing---not even a warning.)
If it is really desirable to keep running, we should probably at least
generate an fgWarning().
* Deleted some say-nothing-new comments.
* XXX added: Is glutSetKeyRepeat() deprecated?
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@256 7f0cb862-5218-0410-a997-914c9d46530a
* Removed some say-nothing-useful comments.
* Added some tentative mouse-wheel support.
* Fairly massive reformatting of code.
I made some secondary changes to his changes:
* One compilation error was fixed (missing close-paren + semicolon).
* Deleted a few ore say-nothing-useful comments.
* Some of John's code was strangely formatted to the point that it
seemed completely out of place, so I took the liberty of reformatting
it. Since I used GNU EMACS's <tab> key (which re-indents rather than
inserts TAB characters), I had to propogate some indentation changes
a little further than the bare necessity to match up with John's
changes. (John seems to shoot for 2-space indents, while EMACS
(and I, I confess) strongly prefer 4-space indents. The code that
I was re-indenting had been put to 8-space indents, however.)
I have *not* tested the code beyond compiling. I assume that John did
(and that the compilation error was a result a minor change just before
asking me to commit).
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@255 7f0cb862-5218-0410-a997-914c9d46530a
* Deleted numerous say-nothing-new comments.
* Reformatted a say-something-useful comment to fit on an 80-column
display.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@246 7f0cb862-5218-0410-a997-914c9d46530a
code that really needs to be system-specific is the window event handling,
which in MS-WINDOWS is tucked into a separate function. In UNIX/X11, it's
all spilled out into glutMainLoopEvent() for some reason.
If the X11 code could be tucked into another function, glutMainLoopEvent()
could be platform-independant.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@245 7f0cb862-5218-0410-a997-914c9d46530a
glutMainLoop(), per discussion on the list. The code looks okay,
to me, though I remain less than wholly convinced that treating idles
as special cases is the best way to go. Still, a case can be made
for taking "non-event" idle callbacks out of the "event loop".
From an organizational perspective, I think that it's an improvement,
and it fixes a bug for at least one program.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@244 7f0cb862-5218-0410-a997-914c9d46530a
...
/*
* <Enslish recapituation of the single following C statement>
*/
<single C statement>
...and rewrote as:
...
<single C statement>
freeglut_main.c still has a lot of that in it, but it looks a bit
better, now.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@241 7f0cb862-5218-0410-a997-914c9d46530a
This is done so that subwindows on X11 will get "resize" events when
they are created. Old GLUT did this---presumably by design in order
to ensure that (a) All windows get notified of their size as soon as
the window exists, and (b) probably more importantly, so that windows
and sub-windows behave as much alike as possible. I believe that GLUT
was right to do this, and I believe that compatibility requires this
(I have a sample program that breaks in freeglut but not GLUT without
this fix).
I did not touch the Microsoft side, because I don't know what their
OS does---nor if old GLUT was historically system-dependant about this.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@217 7f0cb862-5218-0410-a997-914c9d46530a
first three can work with menus), in X. This closes a compatibility gap
with old GLUT, and leaves us the option of supporting scroll-wheels
properly.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@210 7f0cb862-5218-0410-a997-914c9d46530a
to sleep, we need to go through ALL windows to check for pending joysticks
and to check for pending redisplays. I was just going through all TOP-
LEVEL windows. Eeek. This won't do.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@205 7f0cb862-5218-0410-a997-914c9d46530a
* GLUT_SINGLE now should behave more or less correctly.
Thanks to Brian Paul!
* Sleeping is now cognizant of outstanding redisplays.
* Fractals_random has been restored more or less to as-before, save that
it uses the more minimal glFlush() rather than glutSwapBuffers().
glutSwapBuffers() was only required when freeglut was incorrectly
handling promotion to double-buffering.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@202 7f0cb862-5218-0410-a997-914c9d46530a