00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00026
00028 #include <SFML/Graphics/RenderWindow.h>
00029 #include <SFML/Graphics/RenderWindow.hpp>
00030 #include <SFML/Graphics/PostFX.hpp>
00031 #include <SFML/Graphics/Image.hpp>
00032 #include <SFML/Graphics/Sprite.hpp>
00033 #include <SFML/Graphics/String.hpp>
00034 #include <SFML/Internal.h>
00035
00036
00037
00038 struct sfPostFX
00039 {
00040 sf::PostFX This;
00041 };
00042
00043 struct sfSprite
00044 {
00045 sf::Sprite This;
00046 sfImage* Image;
00047 sfIntRect SubRect;
00048 };
00049
00050 struct sfString
00051 {
00052 sf::String This;
00053 std::string Text;
00054 };
00055
00056 struct sfImage
00057 {
00058 sf::Image This;
00059 };
00060
00061 struct sfInput
00062 {
00063 const sf::Input* This;
00064 };
00065 struct sfRenderWindow
00066 {
00067 sf::RenderWindow This;
00068 sfFloatRect ViewRect;
00069 sfInput Input;
00070 };
00071
00072
00076 sfRenderWindow* sfRenderWindow_Create(sfVideoMode Mode, const char* Title, unsigned long Style, int AntialiasingLevel)
00077 {
00078
00079 sf::VideoMode VideoMode(Mode.Width, Mode.Height, Mode.BitsPerPixel);
00080
00081
00082 sfRenderWindow* RenderWindow = new sfRenderWindow;
00083 RenderWindow->This.Create(VideoMode, Title, Style, AntialiasingLevel);
00084 RenderWindow->Input.This = &RenderWindow->This.GetInput();
00085
00086 return RenderWindow;
00087 }
00088
00089
00093 sfRenderWindow* sfRenderWindow_CreateFromHandle(sfWindowHandle Handle, int AntialiasingLevel)
00094 {
00095 sfRenderWindow* RenderWindow = new sfRenderWindow;
00096 RenderWindow->This.Create(Handle, AntialiasingLevel);
00097 RenderWindow->Input.This = &RenderWindow->This.GetInput();
00098
00099 return RenderWindow;
00100 }
00101
00102
00106 void sfRenderWindow_Destroy(sfRenderWindow* RenderWindow)
00107 {
00108 delete RenderWindow;
00109 }
00110
00111
00115 unsigned int sfRenderWindow_GetWidth(sfRenderWindow* RenderWindow)
00116 {
00117 CSFML_CALL_RETURN(RenderWindow, GetWidth(), 0)
00118 }
00119
00120
00124 unsigned int sfRenderWindow_GetHeight(sfRenderWindow* RenderWindow)
00125 {
00126 CSFML_CALL_RETURN(RenderWindow, GetHeight(), 0)
00127 }
00128
00129
00133 unsigned int sfRenderWindow_GetDepthBits(sfRenderWindow* RenderWindow)
00134 {
00135 CSFML_CALL_RETURN(RenderWindow, GetDepthBits(), 0)
00136 }
00137
00138
00142 unsigned int sfRenderWindow_GetStencilBits(sfRenderWindow* RenderWindow)
00143 {
00144 CSFML_CALL_RETURN(RenderWindow, GetStencilBits(), 0)
00145 }
00146
00147
00151 sfBool sfRenderWindow_GetEvent(sfRenderWindow* RenderWindow, sfEvent* Event)
00152 {
00153 CSFML_CHECK_RETURN(RenderWindow, sfFalse);
00154 CSFML_CHECK_RETURN(Event, sfFalse);
00155
00156
00157 sf::Event SFMLEvent;
00158 sfBool Ret = RenderWindow->This.GetEvent(SFMLEvent);
00159
00160
00161 if (!Ret)
00162 return sfFalse;
00163
00164
00165 Event->Type = static_cast<sfEventType>(SFMLEvent.Type);
00166
00167
00168 switch (Event->Type)
00169 {
00170 case sfEvtResized :
00171 Event->Size.Width = SFMLEvent.Size.Width;
00172 Event->Size.Height = SFMLEvent.Size.Height;
00173 break;
00174
00175 case sfEvtTextEntered :
00176 Event->Text.Unicode = SFMLEvent.Text.Unicode;
00177 break;
00178
00179 case sfEvtKeyReleased :
00180 case sfEvtKeyPressed :
00181 Event->Key.Code = static_cast<sfKeyCode>(SFMLEvent.Key.Code);
00182 Event->Key.Alt = SFMLEvent.Key.Alt ? sfTrue : sfFalse;
00183 Event->Key.Control = SFMLEvent.Key.Control ? sfTrue : sfFalse;
00184 Event->Key.Shift = SFMLEvent.Key.Shift ? sfTrue : sfFalse;
00185 break;
00186
00187 case sfEvtMouseWheelMoved :
00188 Event->MouseWheel.Delta = SFMLEvent.MouseWheel.Delta;
00189 break;
00190
00191 case sfEvtMouseButtonPressed :
00192 case sfEvtMouseButtonReleased :
00193 Event->MouseButton.Button = static_cast<sfMouseButton>(SFMLEvent.MouseButton.Button);
00194 break;
00195
00196 case sfEvtMouseMoved :
00197 Event->MouseMove.X = SFMLEvent.MouseMove.X;
00198 Event->MouseMove.Y = SFMLEvent.MouseMove.Y;
00199 break;
00200
00201 case sfEvtJoyButtonPressed :
00202 case sfEvtJoyButtonReleased :
00203 Event->JoyButton.JoystickId = SFMLEvent.JoyButton.JoystickId;
00204 Event->JoyButton.Button = SFMLEvent.JoyButton.Button;
00205 break;
00206
00207 case sfEvtJoyMoved :
00208 Event->JoyMove.JoystickId = SFMLEvent.JoyMove.JoystickId;
00209 Event->JoyMove.Axis = static_cast<sfJoyAxis>(SFMLEvent.JoyMove.Axis);
00210 Event->JoyMove.Position = SFMLEvent.JoyMove.Position;
00211 break;
00212
00213 default :
00214 break;
00215 }
00216
00217 return sfTrue;
00218 }
00219
00220
00224 void sfRenderWindow_UseVerticalSync(sfRenderWindow* RenderWindow, sfBool Enabled)
00225 {
00226 CSFML_CALL(RenderWindow, UseVerticalSync(Enabled == sfTrue))
00227 }
00228
00229
00233 void sfRenderWindow_ShowMouseCursor(sfRenderWindow* RenderWindow, sfBool Show)
00234 {
00235 CSFML_CALL(RenderWindow, ShowMouseCursor(Show == sfTrue))
00236 }
00237
00238
00242 void sfRenderWindow_SetCursorPosition(sfRenderWindow* RenderWindow, unsigned int Left, unsigned int Top)
00243 {
00244 CSFML_CALL(RenderWindow, SetCursorPosition(Left, Top))
00245 }
00246
00247
00252 void sfRenderWindow_SetPosition(sfRenderWindow* RenderWindow, int Left, int Top)
00253 {
00254 CSFML_CALL(RenderWindow, SetPosition(Left, Top))
00255 }
00256
00257
00261 void sfRenderWindow_Show(sfRenderWindow* RenderWindow, sfBool State)
00262 {
00263 CSFML_CALL(RenderWindow, Show(State == sfTrue))
00264 }
00265
00266
00270 sfBool sfRenderWindow_SetCurrent(sfRenderWindow* RenderWindow)
00271 {
00272 CSFML_CALL_RETURN(RenderWindow, SetCurrent(), sfFalse)
00273 }
00274
00275
00279 void sfRenderWindow_Display(sfRenderWindow* RenderWindow)
00280 {
00281 CSFML_CALL(RenderWindow, Display())
00282 }
00283
00284
00288 sfInput* sfRenderWindow_GetInput(sfRenderWindow* RenderWindow)
00289 {
00290 CSFML_CHECK_RETURN(RenderWindow, NULL);
00291
00292 return &RenderWindow->Input;
00293 }
00294
00295
00299 void sfRenderWindow_SetFramerateLimit(sfRenderWindow* RenderWindow, unsigned int Limit)
00300 {
00301 CSFML_CALL(RenderWindow, SetFramerateLimit(Limit))
00302 }
00303
00304
00308 float sfRenderWindow_GetFrameTime(sfRenderWindow* RenderWindow)
00309 {
00310 CSFML_CALL_RETURN(RenderWindow, GetFrameTime(), 0.f)
00311 }
00312
00313
00318 void sfRenderWindow_SetJoystickThreshold(sfRenderWindow* RenderWindow, float Threshold)
00319 {
00320 CSFML_CALL(RenderWindow, SetJoystickThreshold(Threshold))
00321 }
00322
00323
00327 void sfRenderWindow_DrawPostFX(sfRenderWindow* RenderWindow, sfPostFX* PostFX)
00328 {
00329 CSFML_CHECK(PostFX)
00330 CSFML_CALL(RenderWindow, Draw(PostFX->This))
00331 }
00332 void sfRenderWindow_DrawSprite(sfRenderWindow* RenderWindow, sfSprite* Sprite)
00333 {
00334 CSFML_CHECK(Sprite)
00335 CSFML_CALL(RenderWindow, Draw(Sprite->This))
00336 }
00337 void sfRenderWindow_DrawString(sfRenderWindow* RenderWindow, sfString* String)
00338 {
00339 CSFML_CHECK(String)
00340 CSFML_CALL(RenderWindow, Draw(String->This))
00341 }
00342
00343
00347 sfImage* sfRenderWindow_Capture(sfRenderWindow* RenderWindow)
00348 {
00349 CSFML_CHECK_RETURN(RenderWindow, NULL)
00350
00351 sfImage* Image = new sfImage;
00352 Image->This = RenderWindow->This.Capture();
00353
00354 return Image;
00355 }
00356
00357
00361 void sfRenderWindow_SetBackgroundColor(sfRenderWindow* RenderWindow, sfColor Color)
00362 {
00363 sf::Color SFMLColor(Color.r, Color.g, Color.b, Color.a);
00364
00365 CSFML_CALL(RenderWindow, SetBackgroundColor(SFMLColor))
00366 }
00367
00368
00372 void sfRenderWindow_SetView(sfRenderWindow* RenderWindow, const sfView* View)
00373 {
00374 if (View)
00375 {
00376 sf::View SFMLView(sf::FloatRect(View->Rect.Left, View->Rect.Top, View->Rect.Right, View->Rect.Bottom), View->Zoom);
00377
00378 CSFML_CALL(RenderWindow, SetView(&SFMLView))
00379 }
00380 else
00381 {
00382 CSFML_CALL(RenderWindow, SetView(NULL))
00383 }
00384 }
00385
00386
00390 sfFloatRect* sfRenderWindow_GetViewRect(sfRenderWindow* RenderWindow)
00391 {
00392 CSFML_CHECK_RETURN(RenderWindow, NULL)
00393
00394 sf::FloatRect SFMLRect = RenderWindow->This.GetViewRect();
00395 RenderWindow->ViewRect.Left = SFMLRect.Left;
00396 RenderWindow->ViewRect.Top = SFMLRect.Top;
00397 RenderWindow->ViewRect.Right = SFMLRect.Right;
00398 RenderWindow->ViewRect.Bottom = SFMLRect.Bottom;
00399
00400 return &RenderWindow->ViewRect;
00401 }
00402
00403
00408 void sfRenderWindow_OptimizeForNonOpenGL(sfRenderWindow* RenderWindow, sfBool Optimize)
00409 {
00410 CSFML_CALL(RenderWindow, OptimizeForNonOpenGL(Optimize == sfTrue))
00411 }