Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11gamma.c @ 1361:19418e4422cb
New configure-based build system. Still work in progress, but much improved
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 16 Feb 2006 10:11:48 +0000 |
parents | c9b51268668f |
children | d910939febfa |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
232
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
22 | |
23 #include "SDL.h" | |
24 #include "SDL_events.h" | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
25 #include "../../events/SDL_events_c.h" |
0 | 26 #include "SDL_x11video.h" |
27 | |
28 /* From the X server sources... */ | |
29 #define MAX_GAMMA 10.0 | |
30 #define MIN_GAMMA (1.0/MAX_GAMMA) | |
31 | |
32 static int X11_SetGammaNoLock(_THIS, float red, float green, float blue) | |
33 { | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
34 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
100
a1c973c35fef
Fixed using the video mode extension on older servers
Sam Lantinga <slouken@lokigames.com>
parents:
90
diff
changeset
|
35 if (use_vidmode >= 200) { |
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
36 SDL_NAME(XF86VidModeGamma) gamma; |
0 | 37 Bool succeeded; |
38 | |
39 /* Clamp the gamma values */ | |
40 if ( red < MIN_GAMMA ) { | |
41 gamma.red = MIN_GAMMA; | |
42 } else | |
43 if ( red > MAX_GAMMA ) { | |
44 gamma.red = MAX_GAMMA; | |
45 } else { | |
46 gamma.red = red; | |
47 } | |
48 if ( green < MIN_GAMMA ) { | |
49 gamma.green = MIN_GAMMA; | |
50 } else | |
51 if ( green > MAX_GAMMA ) { | |
52 gamma.green = MAX_GAMMA; | |
53 } else { | |
54 gamma.green = green; | |
55 } | |
56 if ( blue < MIN_GAMMA ) { | |
57 gamma.blue = MIN_GAMMA; | |
58 } else | |
59 if ( blue > MAX_GAMMA ) { | |
60 gamma.blue = MAX_GAMMA; | |
61 } else { | |
62 gamma.blue = blue; | |
63 } | |
64 if ( SDL_GetAppState() & SDL_APPACTIVE ) { | |
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
65 succeeded = SDL_NAME(XF86VidModeSetGamma)(SDL_Display, SDL_Screen, &gamma); |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
769
diff
changeset
|
66 pXSync(SDL_Display, False); |
0 | 67 } else { |
68 gamma_saved[0] = gamma.red; | |
69 gamma_saved[1] = gamma.green; | |
70 gamma_saved[2] = gamma.blue; | |
71 succeeded = True; | |
72 } | |
73 if ( succeeded ) { | |
74 ++gamma_changed; | |
75 } | |
76 return succeeded ? 0 : -1; | |
77 } | |
78 #endif | |
79 SDL_SetError("Gamma correction not supported"); | |
80 return -1; | |
81 } | |
82 int X11_SetVidModeGamma(_THIS, float red, float green, float blue) | |
83 { | |
84 int result; | |
85 | |
86 SDL_Lock_EventThread(); | |
87 result = X11_SetGammaNoLock(this, red, green, blue); | |
88 SDL_Unlock_EventThread(); | |
89 | |
90 return(result); | |
91 } | |
92 | |
93 static int X11_GetGammaNoLock(_THIS, float *red, float *green, float *blue) | |
94 { | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
95 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
445
98d778ed4abf
Fixed video crash on older XFree86 servers
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
96 if (use_vidmode >= 200) { |
292
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
97 SDL_NAME(XF86VidModeGamma) gamma; |
eadc0746dfaf
Added SDL_LockRect() and SDL_UnlockRect()
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
98 if (SDL_NAME(XF86VidModeGetGamma)(SDL_Display, SDL_Screen, &gamma)) { |
0 | 99 *red = gamma.red; |
100 *green = gamma.green; | |
101 *blue = gamma.blue; | |
102 return 0; | |
103 } | |
104 return -1; | |
105 } | |
106 #endif | |
107 return -1; | |
108 } | |
109 int X11_GetVidModeGamma(_THIS, float *red, float *green, float *blue) | |
110 { | |
111 int result; | |
112 | |
113 SDL_Lock_EventThread(); | |
114 result = X11_GetGammaNoLock(this, red, green, blue); | |
115 SDL_Unlock_EventThread(); | |
116 | |
117 return(result); | |
118 } | |
119 | |
120 void X11_SaveVidModeGamma(_THIS) | |
121 { | |
122 /* Try to save the current gamma, otherwise disable gamma control */ | |
123 if ( X11_GetGammaNoLock(this, | |
124 &gamma_saved[0], &gamma_saved[1], &gamma_saved[2]) < 0 ) { | |
125 this->SetGamma = 0; | |
126 this->GetGamma = 0; | |
127 } | |
128 gamma_changed = 0; | |
129 } | |
130 void X11_SwapVidModeGamma(_THIS) | |
131 { | |
132 float new_gamma[3]; | |
133 | |
134 if ( gamma_changed ) { | |
135 new_gamma[0] = gamma_saved[0]; | |
136 new_gamma[1] = gamma_saved[1]; | |
137 new_gamma[2] = gamma_saved[2]; | |
138 X11_GetGammaNoLock(this, &gamma_saved[0], &gamma_saved[1], &gamma_saved[2]); | |
139 X11_SetGammaNoLock(this, new_gamma[0], new_gamma[1], new_gamma[2]); | |
140 } | |
141 } |