Mercurial > sdl-ios-xcode
comparison src/video/x11/SDL_x11gamma.c @ 1895:c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 10 Jul 2006 21:04:37 +0000 |
parents | 3ba88cb7eb1b |
children |
comparison
equal
deleted
inserted
replaced
1894:c69cee13dd76 | 1895:c121d94672cb |
---|---|
28 | 28 |
29 /* From the X server sources... */ | 29 /* From the X server sources... */ |
30 #define MAX_GAMMA 10.0 | 30 #define MAX_GAMMA 10.0 |
31 #define MIN_GAMMA (1.0/MAX_GAMMA) | 31 #define MIN_GAMMA (1.0/MAX_GAMMA) |
32 | 32 |
33 static int X11_SetGammaNoLock(_THIS, float red, float green, float blue) | 33 static int |
34 X11_SetGammaNoLock(_THIS, float red, float green, float blue) | |
34 { | 35 { |
35 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 36 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
36 if (use_vidmode >= 200) { | 37 if (use_vidmode >= 200) { |
37 SDL_NAME(XF86VidModeGamma) gamma; | 38 SDL_NAME(XF86VidModeGamma) gamma; |
38 Bool succeeded; | 39 Bool succeeded; |
39 | 40 |
40 /* Clamp the gamma values */ | 41 /* Clamp the gamma values */ |
41 if ( red < MIN_GAMMA ) { | 42 if (red < MIN_GAMMA) { |
42 gamma.red = MIN_GAMMA; | 43 gamma.red = MIN_GAMMA; |
43 } else | 44 } else if (red > MAX_GAMMA) { |
44 if ( red > MAX_GAMMA ) { | 45 gamma.red = MAX_GAMMA; |
45 gamma.red = MAX_GAMMA; | 46 } else { |
46 } else { | 47 gamma.red = red; |
47 gamma.red = red; | 48 } |
48 } | 49 if (green < MIN_GAMMA) { |
49 if ( green < MIN_GAMMA ) { | 50 gamma.green = MIN_GAMMA; |
50 gamma.green = MIN_GAMMA; | 51 } else if (green > MAX_GAMMA) { |
51 } else | 52 gamma.green = MAX_GAMMA; |
52 if ( green > MAX_GAMMA ) { | 53 } else { |
53 gamma.green = MAX_GAMMA; | 54 gamma.green = green; |
54 } else { | 55 } |
55 gamma.green = green; | 56 if (blue < MIN_GAMMA) { |
56 } | 57 gamma.blue = MIN_GAMMA; |
57 if ( blue < MIN_GAMMA ) { | 58 } else if (blue > MAX_GAMMA) { |
58 gamma.blue = MIN_GAMMA; | 59 gamma.blue = MAX_GAMMA; |
59 } else | 60 } else { |
60 if ( blue > MAX_GAMMA ) { | 61 gamma.blue = blue; |
61 gamma.blue = MAX_GAMMA; | 62 } |
62 } else { | 63 if (SDL_GetAppState() & SDL_APPACTIVE) { |
63 gamma.blue = blue; | 64 succeeded = |
64 } | 65 SDL_NAME(XF86VidModeSetGamma) (SDL_Display, SDL_Screen, |
65 if ( SDL_GetAppState() & SDL_APPACTIVE ) { | 66 &gamma); |
66 succeeded = SDL_NAME(XF86VidModeSetGamma)(SDL_Display, SDL_Screen, &gamma); | |
67 XSync(SDL_Display, False); | 67 XSync(SDL_Display, False); |
68 } else { | 68 } else { |
69 gamma_saved[0] = gamma.red; | 69 gamma_saved[0] = gamma.red; |
70 gamma_saved[1] = gamma.green; | 70 gamma_saved[1] = gamma.green; |
71 gamma_saved[2] = gamma.blue; | 71 gamma_saved[2] = gamma.blue; |
72 succeeded = True; | 72 succeeded = True; |
73 } | 73 } |
74 if ( succeeded ) { | 74 if (succeeded) { |
75 ++gamma_changed; | 75 ++gamma_changed; |
76 } | 76 } |
77 return succeeded ? 0 : -1; | 77 return succeeded ? 0 : -1; |
78 } | 78 } |
79 #endif | 79 #endif |
80 SDL_SetError("Gamma correction not supported"); | 80 SDL_SetError("Gamma correction not supported"); |
81 return -1; | 81 return -1; |
82 } | 82 } |
83 int X11_SetVidModeGamma(_THIS, float red, float green, float blue) | 83 |
84 int | |
85 X11_SetVidModeGamma(_THIS, float red, float green, float blue) | |
84 { | 86 { |
85 int result; | 87 int result; |
86 | 88 |
87 SDL_Lock_EventThread(); | 89 SDL_Lock_EventThread(); |
88 result = X11_SetGammaNoLock(this, red, green, blue); | 90 result = X11_SetGammaNoLock(this, red, green, blue); |
89 SDL_Unlock_EventThread(); | 91 SDL_Unlock_EventThread(); |
90 | 92 |
91 return(result); | 93 return (result); |
92 } | 94 } |
93 | 95 |
94 static int X11_GetGammaNoLock(_THIS, float *red, float *green, float *blue) | 96 static int |
97 X11_GetGammaNoLock(_THIS, float *red, float *green, float *blue) | |
95 { | 98 { |
96 #if SDL_VIDEO_DRIVER_X11_VIDMODE | 99 #if SDL_VIDEO_DRIVER_X11_VIDMODE |
97 if (use_vidmode >= 200) { | 100 if (use_vidmode >= 200) { |
98 SDL_NAME(XF86VidModeGamma) gamma; | 101 SDL_NAME(XF86VidModeGamma) gamma; |
99 if (SDL_NAME(XF86VidModeGetGamma)(SDL_Display, SDL_Screen, &gamma)) { | 102 if (SDL_NAME(XF86VidModeGetGamma) |
100 *red = gamma.red; | 103 (SDL_Display, SDL_Screen, &gamma)) { |
104 *red = gamma.red; | |
101 *green = gamma.green; | 105 *green = gamma.green; |
102 *blue = gamma.blue; | 106 *blue = gamma.blue; |
103 return 0; | 107 return 0; |
104 } | 108 } |
105 return -1; | 109 return -1; |
106 } | 110 } |
107 #endif | 111 #endif |
108 return -1; | 112 return -1; |
109 } | 113 } |
110 int X11_GetVidModeGamma(_THIS, float *red, float *green, float *blue) | 114 |
115 int | |
116 X11_GetVidModeGamma(_THIS, float *red, float *green, float *blue) | |
111 { | 117 { |
112 int result; | 118 int result; |
113 | 119 |
114 SDL_Lock_EventThread(); | 120 SDL_Lock_EventThread(); |
115 result = X11_GetGammaNoLock(this, red, green, blue); | 121 result = X11_GetGammaNoLock(this, red, green, blue); |
116 SDL_Unlock_EventThread(); | 122 SDL_Unlock_EventThread(); |
117 | 123 |
118 return(result); | 124 return (result); |
119 } | 125 } |
120 | 126 |
121 void X11_SaveVidModeGamma(_THIS) | 127 void |
128 X11_SaveVidModeGamma(_THIS) | |
122 { | 129 { |
123 /* Try to save the current gamma, otherwise disable gamma control */ | 130 /* Try to save the current gamma, otherwise disable gamma control */ |
124 if ( X11_GetGammaNoLock(this, | 131 if (X11_GetGammaNoLock(this, |
125 &gamma_saved[0], &gamma_saved[1], &gamma_saved[2]) < 0 ) { | 132 &gamma_saved[0], &gamma_saved[1], |
133 &gamma_saved[2]) < 0) { | |
126 this->SetGamma = 0; | 134 this->SetGamma = 0; |
127 this->GetGamma = 0; | 135 this->GetGamma = 0; |
128 } | 136 } |
129 gamma_changed = 0; | 137 gamma_changed = 0; |
130 } | 138 } |
131 void X11_SwapVidModeGamma(_THIS) | 139 |
140 void | |
141 X11_SwapVidModeGamma(_THIS) | |
132 { | 142 { |
133 float new_gamma[3]; | 143 float new_gamma[3]; |
134 | 144 |
135 if ( gamma_changed ) { | 145 if (gamma_changed) { |
136 new_gamma[0] = gamma_saved[0]; | 146 new_gamma[0] = gamma_saved[0]; |
137 new_gamma[1] = gamma_saved[1]; | 147 new_gamma[1] = gamma_saved[1]; |
138 new_gamma[2] = gamma_saved[2]; | 148 new_gamma[2] = gamma_saved[2]; |
139 X11_GetGammaNoLock(this, &gamma_saved[0], &gamma_saved[1], &gamma_saved[2]); | 149 X11_GetGammaNoLock(this, &gamma_saved[0], &gamma_saved[1], |
150 &gamma_saved[2]); | |
140 X11_SetGammaNoLock(this, new_gamma[0], new_gamma[1], new_gamma[2]); | 151 X11_SetGammaNoLock(this, new_gamma[0], new_gamma[1], new_gamma[2]); |
141 } | 152 } |
142 } | 153 } |
154 | |
155 /* vi: set ts=4 sw=4 expandtab: */ |