From 0c772c8f2ec10d8faf96bf8e26f67bd76caf022b Mon Sep 17 00:00:00 2001 From: Lukel495 Date: Thu, 9 Nov 2023 13:35:47 +0100 Subject: [PATCH] Bilderna till spelet --- SFML-2.1-osx-clang-universal/.DS_Store | Bin 0 -> 6148 bytes .../Frameworks/SFML.framework/Headers | 1 + .../Frameworks/SFML.framework/Resources | 1 + .../Frameworks/SFML.framework/SFML | 1 + .../Versions/2.1.0/Headers/Audio.hpp | 50 + .../Versions/2.1.0/Headers/Audio/Export.hpp | 48 + .../Versions/2.1.0/Headers/Audio/Listener.hpp | 184 ++ .../Versions/2.1.0/Headers/Audio/Music.hpp | 228 +++ .../Versions/2.1.0/Headers/Audio/Sound.hpp | 262 +++ .../2.1.0/Headers/Audio/SoundBuffer.hpp | 359 ++++ .../Headers/Audio/SoundBufferRecorder.hpp | 138 ++ .../2.1.0/Headers/Audio/SoundRecorder.hpp | 270 +++ .../2.1.0/Headers/Audio/SoundSource.hpp | 286 +++ .../2.1.0/Headers/Audio/SoundStream.hpp | 377 ++++ .../Versions/2.1.0/Headers/Config.hpp | 159 ++ .../Versions/2.1.0/Headers/Graphics.hpp | 62 + .../2.1.0/Headers/Graphics/BlendMode.hpp | 46 + .../2.1.0/Headers/Graphics/CircleShape.hpp | 151 ++ .../Versions/2.1.0/Headers/Graphics/Color.hpp | 228 +++ .../2.1.0/Headers/Graphics/ConvexShape.hpp | 150 ++ .../2.1.0/Headers/Graphics/Drawable.hpp | 126 ++ .../2.1.0/Headers/Graphics/Export.hpp | 48 + .../Versions/2.1.0/Headers/Graphics/Font.hpp | 361 ++++ .../Versions/2.1.0/Headers/Graphics/Glyph.hpp | 79 + .../Versions/2.1.0/Headers/Graphics/Image.hpp | 318 +++ .../2.1.0/Headers/Graphics/PrimitiveType.hpp | 53 + .../Versions/2.1.0/Headers/Graphics/Rect.hpp | 248 +++ .../Versions/2.1.0/Headers/Graphics/Rect.inl | 159 ++ .../2.1.0/Headers/Graphics/RectangleShape.hpp | 128 ++ .../2.1.0/Headers/Graphics/RenderStates.hpp | 174 ++ .../2.1.0/Headers/Graphics/RenderTarget.hpp | 451 ++++ .../2.1.0/Headers/Graphics/RenderTexture.hpp | 280 +++ .../2.1.0/Headers/Graphics/RenderWindow.hpp | 266 +++ .../2.1.0/Headers/Graphics/Shader.hpp | 635 ++++++ .../Versions/2.1.0/Headers/Graphics/Shape.hpp | 345 ++++ .../2.1.0/Headers/Graphics/Sprite.hpp | 277 +++ .../Versions/2.1.0/Headers/Graphics/Text.hpp | 351 ++++ .../2.1.0/Headers/Graphics/Texture.hpp | 602 ++++++ .../2.1.0/Headers/Graphics/Transform.hpp | 450 ++++ .../2.1.0/Headers/Graphics/Transformable.hpp | 417 ++++ .../2.1.0/Headers/Graphics/Vertex.hpp | 148 ++ .../2.1.0/Headers/Graphics/VertexArray.hpp | 223 ++ .../Versions/2.1.0/Headers/Graphics/View.hpp | 341 +++ .../Versions/2.1.0/Headers/Network.hpp | 51 + .../Versions/2.1.0/Headers/Network/Export.hpp | 48 + .../Versions/2.1.0/Headers/Network/Ftp.hpp | 591 ++++++ .../Versions/2.1.0/Headers/Network/Http.hpp | 467 +++++ .../2.1.0/Headers/Network/IpAddress.hpp | 316 +++ .../Versions/2.1.0/Headers/Network/Packet.hpp | 407 ++++ .../Versions/2.1.0/Headers/Network/Socket.hpp | 218 ++ .../2.1.0/Headers/Network/SocketHandle.hpp | 57 + .../2.1.0/Headers/Network/SocketSelector.hpp | 263 +++ .../2.1.0/Headers/Network/TcpListener.hpp | 162 ++ .../2.1.0/Headers/Network/TcpSocket.hpp | 292 +++ .../2.1.0/Headers/Network/UdpSocket.hpp | 283 +++ .../Versions/2.1.0/Headers/OpenGL.hpp | 62 + .../Versions/2.1.0/Headers/System.hpp | 56 + .../Versions/2.1.0/Headers/System/Clock.hpp | 117 ++ .../Versions/2.1.0/Headers/System/Err.hpp | 78 + .../Versions/2.1.0/Headers/System/Export.hpp | 48 + .../2.1.0/Headers/System/InputStream.hpp | 151 ++ .../Versions/2.1.0/Headers/System/Lock.hpp | 139 ++ .../Versions/2.1.0/Headers/System/Mutex.hpp | 148 ++ .../2.1.0/Headers/System/NonCopyable.hpp | 119 ++ .../Versions/2.1.0/Headers/System/Sleep.hpp | 52 + .../Versions/2.1.0/Headers/System/String.hpp | 543 +++++ .../Versions/2.1.0/Headers/System/Thread.hpp | 282 +++ .../Versions/2.1.0/Headers/System/Thread.inl | 90 + .../2.1.0/Headers/System/ThreadLocal.hpp | 103 + .../2.1.0/Headers/System/ThreadLocalPtr.hpp | 158 ++ .../2.1.0/Headers/System/ThreadLocalPtr.inl | 77 + .../Versions/2.1.0/Headers/System/Time.hpp | 452 ++++ .../Versions/2.1.0/Headers/System/Utf.hpp | 763 +++++++ .../Versions/2.1.0/Headers/System/Utf.inl | 752 +++++++ .../Versions/2.1.0/Headers/System/Vector2.hpp | 301 +++ .../Versions/2.1.0/Headers/System/Vector2.inl | 161 ++ .../Versions/2.1.0/Headers/System/Vector3.hpp | 302 +++ .../Versions/2.1.0/Headers/System/Vector3.inl | 168 ++ .../Versions/2.1.0/Headers/Window.hpp | 52 + .../Versions/2.1.0/Headers/Window/Context.hpp | 140 ++ .../2.1.0/Headers/Window/ContextSettings.hpp | 104 + .../Versions/2.1.0/Headers/Window/Event.hpp | 237 +++ .../Versions/2.1.0/Headers/Window/Export.hpp | 48 + .../2.1.0/Headers/Window/GlResource.hpp | 76 + .../2.1.0/Headers/Window/Joystick.hpp | 203 ++ .../2.1.0/Headers/Window/Keyboard.hpp | 209 ++ .../Versions/2.1.0/Headers/Window/Mouse.hpp | 167 ++ .../2.1.0/Headers/Window/VideoMode.hpp | 228 +++ .../Versions/2.1.0/Headers/Window/Window.hpp | 541 +++++ .../2.1.0/Headers/Window/WindowHandle.hpp | 64 + .../2.1.0/Headers/Window/WindowStyle.hpp | 53 + .../Versions/2.1.0/Resources/Info.plist | 26 + .../SFML.framework/Versions/2.1.0/SFML | Bin 0 -> 16536 bytes .../SFML.framework/Versions/Current | 1 + .../Frameworks/sfml-audio.framework/Resources | 1 + .../Versions/2.1.0/Resources/Info.plist | 26 + .../Versions/2.1.0/sfml-audio | Bin 0 -> 177080 bytes .../sfml-audio.framework/Versions/Current | 1 + .../sfml-audio.framework/sfml-audio | 1 + .../sfml-graphics.framework/Resources | 1 + .../Versions/2.1.0/Resources/Info.plist | 26 + .../Versions/2.1.0/sfml-graphics | Bin 0 -> 1694516 bytes .../sfml-graphics.framework/Versions/Current | 1 + .../sfml-graphics.framework/sfml-graphics | 1 + .../sfml-network.framework/Resources | 1 + .../Versions/2.1.0/Resources/Info.plist | 26 + .../Versions/2.1.0/sfml-network | Bin 0 -> 317248 bytes .../sfml-network.framework/Versions/Current | 1 + .../sfml-network.framework/sfml-network | 1 + .../sfml-system.framework/Resources | 1 + .../Versions/2.1.0/Resources/Info.plist | 26 + .../Versions/2.1.0/sfml-system | Bin 0 -> 117040 bytes .../sfml-system.framework/Versions/Current | 1 + .../sfml-system.framework/sfml-system | 1 + .../sfml-window.framework/Resources | 1 + .../Versions/2.1.0/Resources/Info.plist | 26 + .../Versions/2.1.0/sfml-window | Bin 0 -> 361264 bytes .../sfml-window.framework/Versions/Current | 1 + .../sfml-window.framework/sfml-window | 1 + .../cmake/Modules/FindSFML.cmake | 209 ++ .../doc/html/Audio_2Export_8hpp_source.htm | 91 + .../doc/html/Audio_8hpp_source.htm | 88 + .../doc/html/BlendMode_8hpp_source.htm | 88 + .../doc/html/CircleShape_8hpp_source.htm | 110 + .../doc/html/Clock_8hpp_source.htm | 103 + .../doc/html/Color_8hpp_source.htm | 124 ++ .../doc/html/Config_8hpp_source.htm | 196 ++ .../doc/html/ContextSettings_8hpp_source.htm | 102 + .../doc/html/Context_8hpp_source.htm | 113 + .../doc/html/ConvexShape_8hpp_source.htm | 108 + .../doc/html/Drawable_8hpp_source.htm | 102 + .../doc/html/Err_8hpp_source.htm | 89 + .../doc/html/Event_8hpp_source.htm | 192 ++ .../doc/html/Font_8hpp_source.htm | 166 ++ .../doc/html/Ftp_8hpp_source.htm | 261 +++ .../doc/html/GlResource_8hpp_source.htm | 96 + .../doc/html/Glyph_8hpp_source.htm | 99 + .../doc/html/Graphics_2Export_8hpp_source.htm | 91 + .../doc/html/Graphics_8hpp_source.htm | 101 + .../doc/html/Http_8hpp_source.htm | 225 ++ .../doc/html/Image_8hpp_source.htm | 133 ++ .../doc/html/InputStream_8hpp_source.htm | 101 + .../doc/html/IpAddress_8hpp_source.htm | 139 ++ .../doc/html/Joystick_8hpp_source.htm | 122 ++ .../doc/html/Keyboard_8hpp_source.htm | 201 ++ .../doc/html/Listener_8hpp_source.htm | 108 + .../doc/html/Lock_8hpp_source.htm | 103 + .../doc/html/Mouse_8hpp_source.htm | 115 ++ .../doc/html/Music_8hpp_source.htm | 131 ++ .../doc/html/Mutex_8hpp_source.htm | 110 + .../doc/html/Network_2Export_8hpp_source.htm | 91 + .../doc/html/Network_8hpp_source.htm | 89 + .../doc/html/NonCopyable_8hpp_source.htm | 99 + .../doc/html/OpenGL_8hpp_source.htm | 102 + .../doc/html/Packet_8hpp_source.htm | 169 ++ .../doc/html/PrimitiveType_8hpp_source.htm | 91 + .../doc/html/Rect_8hpp_source.htm | 128 ++ .../doc/html/Rect_8inl_source.htm | 196 ++ .../doc/html/RectangleShape_8hpp_source.htm | 107 + .../doc/html/RenderStates_8hpp_source.htm | 118 ++ .../doc/html/RenderTarget_8hpp_source.htm | 172 ++ .../doc/html/RenderTexture_8hpp_source.htm | 128 ++ .../doc/html/RenderWindow_8hpp_source.htm | 117 ++ .../doc/html/Shader_8hpp_source.htm | 171 ++ .../doc/html/Shape_8hpp_source.htm | 156 ++ .../doc/html/Sleep_8hpp_source.htm | 87 + .../doc/html/SocketHandle_8hpp_source.htm | 100 + .../doc/html/SocketSelector_8hpp_source.htm | 119 ++ .../doc/html/Socket_8hpp_source.htm | 144 ++ .../html/SoundBufferRecorder_8hpp_source.htm | 109 + .../doc/html/SoundBuffer_8hpp_source.htm | 152 ++ .../doc/html/SoundRecorder_8hpp_source.htm | 127 ++ .../doc/html/SoundSource_8hpp_source.htm | 138 ++ .../doc/html/SoundStream_8hpp_source.htm | 159 ++ .../doc/html/Sound_8hpp_source.htm | 133 ++ .../doc/html/Sprite_8hpp_source.htm | 132 ++ .../doc/html/String_8hpp_source.htm | 182 ++ .../doc/html/System_2Export_8hpp_source.htm | 91 + .../doc/html/System_8hpp_source.htm | 93 + .../doc/html/TcpListener_8hpp_source.htm | 105 + .../doc/html/TcpSocket_8hpp_source.htm | 133 ++ .../doc/html/Text_8hpp_source.htm | 152 ++ .../doc/html/Texture_8hpp_source.htm | 167 ++ .../doc/html/ThreadLocalPtr_8hpp_source.htm | 106 + .../doc/html/ThreadLocalPtr_8inl_source.htm | 118 ++ .../doc/html/ThreadLocal_8hpp_source.htm | 111 + .../doc/html/Thread_8hpp_source.htm | 127 ++ .../doc/html/Thread_8inl_source.htm | 134 ++ .../doc/html/Time_8hpp_source.htm | 163 ++ .../doc/html/Transform_8hpp_source.htm | 143 ++ .../doc/html/Transformable_8hpp_source.htm | 144 ++ .../doc/html/UdpSocket_8hpp_source.htm | 123 ++ .../doc/html/Utf_8hpp_source.htm | 247 +++ .../doc/html/Utf_8inl_source.htm | 754 +++++++ .../doc/html/Vector2_8hpp_source.htm | 143 ++ .../doc/html/Vector2_8inl_source.htm | 193 ++ .../doc/html/Vector3_8hpp_source.htm | 143 ++ .../doc/html/Vector3_8inl_source.htm | 200 ++ .../doc/html/VertexArray_8hpp_source.htm | 128 ++ .../doc/html/Vertex_8hpp_source.htm | 108 + .../doc/html/VideoMode_8hpp_source.htm | 119 ++ .../doc/html/View_8hpp_source.htm | 146 ++ .../doc/html/WindowHandle_8hpp_source.htm | 105 + .../doc/html/WindowStyle_8hpp_source.htm | 95 + .../doc/html/Window_2Export_8hpp_source.htm | 91 + .../doc/html/Window_2Window_8hpp_source.htm | 179 ++ .../doc/html/Window_8hpp_source.htm | 90 + .../doc/html/annotated.htm | 134 ++ .../doc/html/bc_s.png | Bin 0 -> 676 bytes .../doc/html/bdwn.png | Bin 0 -> 147 bytes .../doc/html/classes.htm | 96 + .../html/classsf_1_1CircleShape-members.htm | 97 + .../doc/html/classsf_1_1CircleShape.htm | 1418 +++++++++++++ .../doc/html/classsf_1_1CircleShape.png | Bin 0 -> 1009 bytes .../doc/html/classsf_1_1Clock-members.htm | 58 + .../doc/html/classsf_1_1Clock.htm | 148 ++ .../doc/html/classsf_1_1Color-members.htm | 76 + .../doc/html/classsf_1_1Color.htm | 791 +++++++ .../doc/html/classsf_1_1Context-members.htm | 63 + .../doc/html/classsf_1_1Context.htm | 221 ++ .../doc/html/classsf_1_1Context.png | Bin 0 -> 734 bytes .../classsf_1_1ContextSettings-members.htm | 61 + .../html/classsf_1_1ConvexShape-members.htm | 96 + .../doc/html/classsf_1_1ConvexShape.htm | 1401 +++++++++++++ .../doc/html/classsf_1_1ConvexShape.png | Bin 0 -> 1022 bytes .../doc/html/classsf_1_1Drawable-members.htm | 58 + .../doc/html/classsf_1_1Drawable.htm | 208 ++ .../doc/html/classsf_1_1Drawable.png | Bin 0 -> 1958 bytes .../doc/html/classsf_1_1Event-members.htm | 85 + .../doc/html/classsf_1_1Event.htm | 440 ++++ .../doc/html/classsf_1_1Font-members.htm | 66 + .../doc/html/classsf_1_1Font.htm | 456 +++++ .../doc/html/classsf_1_1Ftp-members.htm | 77 + .../doc/html/classsf_1_1Ftp.htm | 693 +++++++ .../doc/html/classsf_1_1Ftp.png | Bin 0 -> 488 bytes ...sf_1_1Ftp_1_1DirectoryResponse-members.htm | 105 + .../classsf_1_1Ftp_1_1DirectoryResponse.htm | 468 +++++ .../classsf_1_1Ftp_1_1DirectoryResponse.png | Bin 0 -> 686 bytes ...sssf_1_1Ftp_1_1ListingResponse-members.htm | 105 + .../classsf_1_1Ftp_1_1ListingResponse.htm | 479 +++++ .../classsf_1_1Ftp_1_1ListingResponse.png | Bin 0 -> 659 bytes .../classsf_1_1Ftp_1_1Response-members.htm | 103 + .../doc/html/classsf_1_1Ftp_1_1Response.htm | 436 ++++ .../doc/html/classsf_1_1Ftp_1_1Response.png | Bin 0 -> 970 bytes .../html/classsf_1_1GlResource-members.htm | 58 + .../doc/html/classsf_1_1GlResource.htm | 175 ++ .../doc/html/classsf_1_1GlResource.png | Bin 0 -> 1483 bytes .../doc/html/classsf_1_1Glyph-members.htm | 59 + .../doc/html/classsf_1_1Glyph.htm | 172 ++ .../doc/html/classsf_1_1Http-members.htm | 60 + .../doc/html/classsf_1_1Http.htm | 275 +++ .../doc/html/classsf_1_1Http.png | Bin 0 -> 489 bytes .../classsf_1_1Http_1_1Request-members.htm | 66 + .../doc/html/classsf_1_1Http_1_1Request.htm | 330 +++ .../classsf_1_1Http_1_1Response-members.htm | 86 + .../doc/html/classsf_1_1Http_1_1Response.htm | 366 ++++ .../doc/html/classsf_1_1Image-members.htm | 70 + .../doc/html/classsf_1_1Image.htm | 613 ++++++ .../html/classsf_1_1InputStream-members.htm | 60 + .../doc/html/classsf_1_1InputStream.htm | 283 +++ .../doc/html/classsf_1_1IpAddress-members.htm | 67 + .../doc/html/classsf_1_1IpAddress.htm | 459 +++++ .../doc/html/classsf_1_1Joystick-members.htm | 73 + .../doc/html/classsf_1_1Joystick.htm | 448 ++++ .../doc/html/classsf_1_1Keyboard-members.htm | 160 ++ .../doc/html/classsf_1_1Keyboard.htm | 667 ++++++ .../doc/html/classsf_1_1Listener-members.htm | 63 + .../doc/html/classsf_1_1Listener.htm | 396 ++++ .../doc/html/classsf_1_1Lock-members.htm | 58 + .../doc/html/classsf_1_1Lock.htm | 169 ++ .../doc/html/classsf_1_1Lock.png | Bin 0 -> 491 bytes .../doc/html/classsf_1_1Mouse-members.htm | 67 + .../doc/html/classsf_1_1Mouse.htm | 331 +++ .../doc/html/classsf_1_1Music-members.htm | 97 + .../doc/html/classsf_1_1Music.htm | 1248 +++++++++++ .../doc/html/classsf_1_1Music.png | Bin 0 -> 715 bytes .../doc/html/classsf_1_1Mutex-members.htm | 60 + .../doc/html/classsf_1_1Mutex.htm | 189 ++ .../doc/html/classsf_1_1Mutex.png | Bin 0 -> 511 bytes .../html/classsf_1_1NonCopyable-members.htm | 56 + .../doc/html/classsf_1_1NonCopyable.htm | 131 ++ .../doc/html/classsf_1_1NonCopyable.png | Bin 0 -> 3225 bytes .../doc/html/classsf_1_1Packet-members.htm | 95 + .../doc/html/classsf_1_1Packet.htm | 597 ++++++ .../doc/html/classsf_1_1Rect-members.htm | 73 + .../doc/html/classsf_1_1Rect.htm | 626 ++++++ .../classsf_1_1RectangleShape-members.htm | 96 + .../doc/html/classsf_1_1RectangleShape.htm | 1376 +++++++++++++ .../doc/html/classsf_1_1RectangleShape.png | Bin 0 -> 1060 bytes .../html/classsf_1_1RenderStates-members.htm | 66 + .../doc/html/classsf_1_1RenderStates.htm | 386 ++++ .../html/classsf_1_1RenderTarget-members.htm | 74 + .../doc/html/classsf_1_1RenderTarget.htm | 665 ++++++ .../doc/html/classsf_1_1RenderTarget.png | Bin 0 -> 1080 bytes .../html/classsf_1_1RenderTexture-members.htm | 83 + .../doc/html/classsf_1_1RenderTexture.htm | 1033 ++++++++++ .../doc/html/classsf_1_1RenderTexture.png | Bin 0 -> 814 bytes .../html/classsf_1_1RenderWindow-members.htm | 106 + .../doc/html/classsf_1_1RenderWindow.htm | 1819 +++++++++++++++++ .../doc/html/classsf_1_1RenderWindow.png | Bin 0 -> 1416 bytes .../doc/html/classsf_1_1Shader-members.htm | 83 + .../doc/html/classsf_1_1Shader.htm | 1017 +++++++++ .../doc/html/classsf_1_1Shader.png | Bin 0 -> 748 bytes .../doc/html/classsf_1_1Shape-members.htm | 93 + .../doc/html/classsf_1_1Shape.htm | 1267 ++++++++++++ .../doc/html/classsf_1_1Shape.png | Bin 0 -> 1486 bytes .../doc/html/classsf_1_1Socket-members.htm | 74 + .../doc/html/classsf_1_1Socket.htm | 457 +++++ .../doc/html/classsf_1_1Socket.png | Bin 0 -> 1245 bytes .../classsf_1_1SocketSelector-members.htm | 64 + .../doc/html/classsf_1_1SocketSelector.htm | 383 ++++ .../doc/html/classsf_1_1Sound-members.htm | 92 + .../doc/html/classsf_1_1Sound.htm | 1029 ++++++++++ .../doc/html/classsf_1_1Sound.png | Bin 0 -> 487 bytes .../html/classsf_1_1SoundBuffer-members.htm | 70 + .../doc/html/classsf_1_1SoundBuffer.htm | 505 +++++ ...classsf_1_1SoundBufferRecorder-members.htm | 65 + .../html/classsf_1_1SoundBufferRecorder.htm | 366 ++++ .../html/classsf_1_1SoundBufferRecorder.png | Bin 0 -> 652 bytes .../html/classsf_1_1SoundRecorder-members.htm | 64 + .../doc/html/classsf_1_1SoundRecorder.htm | 412 ++++ .../doc/html/classsf_1_1SoundRecorder.png | Bin 0 -> 657 bytes .../html/classsf_1_1SoundSource-members.htm | 77 + .../doc/html/classsf_1_1SoundSource.htm | 632 ++++++ .../doc/html/classsf_1_1SoundSource.png | Bin 0 -> 928 bytes .../html/classsf_1_1SoundStream-members.htm | 91 + .../doc/html/classsf_1_1SoundStream.htm | 1098 ++++++++++ .../doc/html/classsf_1_1SoundStream.png | Bin 0 -> 720 bytes .../doc/html/classsf_1_1Sprite-members.htm | 87 + .../doc/html/classsf_1_1Sprite.htm | 1095 ++++++++++ .../doc/html/classsf_1_1Sprite.png | Bin 0 -> 734 bytes .../doc/html/classsf_1_1String-members.htm | 97 + .../doc/html/classsf_1_1String.htm | 1351 ++++++++++++ .../html/classsf_1_1TcpListener-members.htm | 76 + .../doc/html/classsf_1_1TcpListener.htm | 529 +++++ .../doc/html/classsf_1_1TcpListener.png | Bin 0 -> 715 bytes .../doc/html/classsf_1_1TcpSocket-members.htm | 83 + .../doc/html/classsf_1_1TcpSocket.htm | 771 +++++++ .../doc/html/classsf_1_1TcpSocket.png | Bin 0 -> 722 bytes .../doc/html/classsf_1_1Text-members.htm | 96 + .../doc/html/classsf_1_1Text.htm | 1240 +++++++++++ .../doc/html/classsf_1_1Text.png | Bin 0 -> 710 bytes .../doc/html/classsf_1_1Texture-members.htm | 86 + .../doc/html/classsf_1_1Texture.htm | 996 +++++++++ .../doc/html/classsf_1_1Texture.png | Bin 0 -> 475 bytes .../doc/html/classsf_1_1Thread-members.htm | 66 + .../doc/html/classsf_1_1Thread.htm | 371 ++++ .../doc/html/classsf_1_1Thread.png | Bin 0 -> 501 bytes .../html/classsf_1_1ThreadLocal-members.htm | 60 + .../doc/html/classsf_1_1ThreadLocal.htm | 180 ++ .../doc/html/classsf_1_1ThreadLocal.png | Bin 0 -> 878 bytes .../classsf_1_1ThreadLocalPtr-members.htm | 65 + .../doc/html/classsf_1_1ThreadLocalPtr.htm | 299 +++ .../doc/html/classsf_1_1ThreadLocalPtr.png | Bin 0 -> 597 bytes .../doc/html/classsf_1_1Time-members.htm | 87 + .../doc/html/classsf_1_1Time.htm | 1320 ++++++++++++ .../doc/html/classsf_1_1Transform-members.htm | 76 + .../doc/html/classsf_1_1Transform.htm | 934 +++++++++ .../html/classsf_1_1Transformable-members.htm | 75 + .../doc/html/classsf_1_1Transformable.htm | 715 +++++++ .../doc/html/classsf_1_1Transformable.png | Bin 0 -> 1671 bytes .../doc/html/classsf_1_1UdpSocket-members.htm | 81 + .../doc/html/classsf_1_1UdpSocket.htm | 785 +++++++ .../doc/html/classsf_1_1UdpSocket.png | Bin 0 -> 723 bytes .../doc/html/classsf_1_1Utf.htm | 75 + .../classsf_1_1Utf_3_0116_01_4-members.htm | 68 + .../doc/html/classsf_1_1Utf_3_0116_01_4.htm | 851 ++++++++ .../classsf_1_1Utf_3_0132_01_4-members.htm | 72 + .../doc/html/classsf_1_1Utf_3_0132_01_4.htm | 1065 ++++++++++ .../classsf_1_1Utf_3_018_01_4-members.htm | 68 + .../doc/html/classsf_1_1Utf_3_018_01_4.htm | 851 ++++++++ .../doc/html/classsf_1_1Vector2-members.htm | 75 + .../doc/html/classsf_1_1Vector2.htm | 858 ++++++++ .../doc/html/classsf_1_1Vector3-members.htm | 76 + .../doc/html/classsf_1_1Vector3.htm | 886 ++++++++ .../doc/html/classsf_1_1Vertex-members.htm | 63 + .../doc/html/classsf_1_1Vertex.htm | 323 +++ .../html/classsf_1_1VertexArray-members.htm | 67 + .../doc/html/classsf_1_1VertexArray.htm | 394 ++++ .../doc/html/classsf_1_1VertexArray.png | Bin 0 -> 512 bytes .../doc/html/classsf_1_1VideoMode-members.htm | 69 + .../doc/html/classsf_1_1VideoMode.htm | 596 ++++++ .../doc/html/classsf_1_1View-members.htm | 75 + .../doc/html/classsf_1_1View.htm | 681 ++++++ .../doc/html/classsf_1_1Window-members.htm | 87 + .../doc/html/classsf_1_1Window.htm | 989 +++++++++ .../doc/html/classsf_1_1Window.png | Bin 0 -> 1018 bytes .../doc/html/closed.png | Bin 0 -> 132 bytes .../dir_0ccda3a7de18f509ca1da5cc9f800e28.htm | 90 + .../dir_23684cb3154a9a6315b13ddae22451ba.htm | 66 + .../dir_5b3d798f7f3738805c48f4569d73ec1e.htm | 70 + .../dir_6c7bee9a69c8d4d5a239feb5f32dab30.htm | 50 + .../dir_798ce90c6ecad3595159066965e3fff6.htm | 72 + .../dir_b57c126f18dbb5f6d210188b78112323.htm | 102 + .../dir_c08fb8d44334911c4cd4ccee54f88f02.htm | 50 + .../dir_e537a36512cc2fc6f08fd874f83e8f5f.htm | 75 + .../doc/html/doxygen.css | 1278 ++++++++++++ .../doc/html/doxygen.png | Bin 0 -> 3779 bytes .../doc/html/dynsections.js | 97 + .../doc/html/files.htm | 137 ++ .../doc/html/ftv2blank.png | Bin 0 -> 86 bytes .../doc/html/ftv2cl.png | Bin 0 -> 453 bytes .../doc/html/ftv2doc.png | Bin 0 -> 746 bytes .../doc/html/ftv2folderclosed.png | Bin 0 -> 616 bytes .../doc/html/ftv2folderopen.png | Bin 0 -> 597 bytes .../doc/html/ftv2lastnode.png | Bin 0 -> 86 bytes .../doc/html/ftv2link.png | Bin 0 -> 746 bytes .../doc/html/ftv2mlastnode.png | Bin 0 -> 246 bytes .../doc/html/ftv2mnode.png | Bin 0 -> 246 bytes .../doc/html/ftv2mo.png | Bin 0 -> 403 bytes .../doc/html/ftv2node.png | Bin 0 -> 86 bytes .../doc/html/ftv2ns.png | Bin 0 -> 388 bytes .../doc/html/ftv2plastnode.png | Bin 0 -> 229 bytes .../doc/html/ftv2pnode.png | Bin 0 -> 229 bytes .../doc/html/ftv2splitbar.png | Bin 0 -> 314 bytes .../doc/html/ftv2vertline.png | Bin 0 -> 86 bytes .../doc/html/functions.htm | 144 ++ .../doc/html/functions_0x62.htm | 153 ++ .../doc/html/functions_0x63.htm | 218 ++ .../doc/html/functions_0x64.htm | 169 ++ .../doc/html/functions_0x65.htm | 136 ++ .../doc/html/functions_0x66.htm | 188 ++ .../doc/html/functions_0x67.htm | 390 ++++ .../doc/html/functions_0x68.htm | 112 + .../doc/html/functions_0x69.htm | 179 ++ .../doc/html/functions_0x6a.htm | 121 ++ .../doc/html/functions_0x6b.htm | 110 + .../doc/html/functions_0x6c.htm | 172 ++ .../doc/html/functions_0x6d.htm | 179 ++ .../doc/html/functions_0x6e.htm | 199 ++ .../doc/html/functions_0x6f.htm | 267 +++ .../doc/html/functions_0x70.htm | 164 ++ .../doc/html/functions_0x71.htm | 95 + .../doc/html/functions_0x72.htm | 195 ++ .../doc/html/functions_0x73.htm | 395 ++++ .../doc/html/functions_0x74.htm | 225 ++ .../doc/html/functions_0x75.htm | 129 ++ .../doc/html/functions_0x76.htm | 116 ++ .../doc/html/functions_0x77.htm | 110 + .../doc/html/functions_0x78.htm | 106 + .../doc/html/functions_0x79.htm | 105 + .../doc/html/functions_0x7a.htm | 102 + .../doc/html/functions_0x7e.htm | 170 ++ .../doc/html/functions_enum.htm | 90 + .../doc/html/functions_eval.htm | 106 + .../doc/html/functions_eval_0x62.htm | 116 ++ .../doc/html/functions_eval_0x63.htm | 123 ++ .../doc/html/functions_eval_0x64.htm | 124 ++ .../doc/html/functions_eval_0x65.htm | 109 + .../doc/html/functions_eval_0x66.htm | 157 ++ .../doc/html/functions_eval_0x67.htm | 100 + .../doc/html/functions_eval_0x68.htm | 100 + .../doc/html/functions_eval_0x69.htm | 110 + .../doc/html/functions_eval_0x6a.htm | 106 + .../doc/html/functions_eval_0x6b.htm | 100 + .../doc/html/functions_eval_0x6c.htm | 119 ++ .../doc/html/functions_eval_0x6d.htm | 130 ++ .../doc/html/functions_eval_0x6e.htm | 187 ++ .../doc/html/functions_eval_0x6f.htm | 98 + .../doc/html/functions_eval_0x70.htm | 136 ++ .../doc/html/functions_eval_0x71.htm | 94 + .../doc/html/functions_eval_0x72.htm | 129 ++ .../doc/html/functions_eval_0x73.htm | 124 ++ .../doc/html/functions_eval_0x74.htm | 106 + .../doc/html/functions_eval_0x75.htm | 107 + .../doc/html/functions_eval_0x76.htm | 98 + .../doc/html/functions_eval_0x77.htm | 91 + .../doc/html/functions_eval_0x78.htm | 98 + .../doc/html/functions_eval_0x79.htm | 92 + .../doc/html/functions_eval_0x7a.htm | 92 + .../doc/html/functions_func.htm | 104 + .../doc/html/functions_func_0x62.htm | 93 + .../doc/html/functions_func_0x63.htm | 157 ++ .../doc/html/functions_func_0x64.htm | 120 ++ .../doc/html/functions_func_0x65.htm | 108 + .../doc/html/functions_func_0x66.htm | 115 ++ .../doc/html/functions_func_0x67.htm | 369 ++++ .../doc/html/functions_func_0x68.htm | 91 + .../doc/html/functions_func_0x69.htm | 144 ++ .../doc/html/functions_func_0x6b.htm | 88 + .../doc/html/functions_func_0x6c.htm | 133 ++ .../doc/html/functions_func_0x6d.htm | 109 + .../doc/html/functions_func_0x6e.htm | 93 + .../doc/html/functions_func_0x6f.htm | 251 +++ .../doc/html/functions_func_0x70.htm | 108 + .../doc/html/functions_func_0x72.htm | 145 ++ .../doc/html/functions_func_0x73.htm | 326 +++ .../doc/html/functions_func_0x74.htm | 172 ++ .../doc/html/functions_func_0x75.htm | 103 + .../doc/html/functions_func_0x76.htm | 103 + .../doc/html/functions_func_0x77.htm | 95 + .../doc/html/functions_func_0x7a.htm | 88 + .../doc/html/functions_func_0x7e.htm | 166 ++ .../doc/html/functions_type.htm | 62 + .../doc/html/functions_vars.htm | 377 ++++ .../doc/html/group__audio.htm | 75 + .../doc/html/group__graphics.htm | 225 ++ .../doc/html/group__network.htm | 78 + .../doc/html/group__system.htm | 157 ++ .../doc/html/group__window.htm | 135 ++ .../doc/html/hierarchy.htm | 144 ++ .../doc/html/index.htm | 102 + .../doc/html/jquery.js | 31 + .../doc/html/mainpage_8hpp_source.htm | 49 + .../doc/html/modules.htm | 49 + .../doc/html/nav_f.png | Bin 0 -> 153 bytes .../doc/html/nav_g.png | Bin 0 -> 95 bytes .../doc/html/nav_h.png | Bin 0 -> 98 bytes .../doc/html/open.png | Bin 0 -> 123 bytes .../doc/html/structsf_1_1ContextSettings.htm | 247 +++ ..._1Event_1_1JoystickButtonEvent-members.htm | 57 + ...ructsf_1_1Event_1_1JoystickButtonEvent.htm | 110 + ...1Event_1_1JoystickConnectEvent-members.htm | 56 + ...uctsf_1_1Event_1_1JoystickConnectEvent.htm | 91 + ..._1_1Event_1_1JoystickMoveEvent-members.htm | 58 + ...structsf_1_1Event_1_1JoystickMoveEvent.htm | 129 ++ .../structsf_1_1Event_1_1KeyEvent-members.htm | 60 + .../html/structsf_1_1Event_1_1KeyEvent.htm | 167 ++ ...f_1_1Event_1_1MouseButtonEvent-members.htm | 58 + .../structsf_1_1Event_1_1MouseButtonEvent.htm | 129 ++ ...tsf_1_1Event_1_1MouseMoveEvent-members.htm | 57 + .../structsf_1_1Event_1_1MouseMoveEvent.htm | 110 + ...sf_1_1Event_1_1MouseWheelEvent-members.htm | 58 + .../structsf_1_1Event_1_1MouseWheelEvent.htm | 129 ++ ...structsf_1_1Event_1_1SizeEvent-members.htm | 57 + .../html/structsf_1_1Event_1_1SizeEvent.htm | 110 + ...structsf_1_1Event_1_1TextEvent-members.htm | 56 + .../html/structsf_1_1Event_1_1TextEvent.htm | 91 + ...ructsf_1_1Shader_1_1CurrentTextureType.htm | 64 + ...ructsf_1_1SoundStream_1_1Chunk-members.htm | 57 + .../html/structsf_1_1SoundStream_1_1Chunk.htm | 110 + .../doc/html/sync_off.png | Bin 0 -> 853 bytes .../doc/html/sync_on.png | Bin 0 -> 845 bytes .../doc/html/tab_a.png | Bin 0 -> 142 bytes .../doc/html/tab_b.png | Bin 0 -> 169 bytes .../doc/html/tab_h.png | Bin 0 -> 177 bytes .../doc/html/tab_s.png | Bin 0 -> 184 bytes .../doc/html/tabs.css | 60 + .../cocoa/cocoa.app/Contents/Info.plist | 34 + .../cocoa/cocoa.app/Contents/MacOS/cocoa | Bin 0 -> 131060 bytes .../cocoa.app/Contents/Resources/Credits.rtf | 7 + .../cocoa.app/Contents/Resources/MainMenu.nib | Bin 0 -> 32925 bytes .../cocoa.app/Contents/Resources/blue.png | Bin 0 -> 114 bytes .../cocoa.app/Contents/Resources/green.png | Bin 0 -> 112 bytes .../cocoa.app/Contents/Resources/icon.icns | Bin 0 -> 38947 bytes .../cocoa.app/Contents/Resources/logo.png | Bin 0 -> 30801 bytes .../cocoa.app/Contents/Resources/red.png | Bin 0 -> 113 bytes .../Contents/Resources/sansation.ttf | Bin 0 -> 28912 bytes .../examples/ftp/Ftp.cpp | 206 ++ SFML-2.1-osx-clang-universal/examples/ftp/ftp | Bin 0 -> 73900 bytes .../examples/opengl/OpenGL.cpp | 194 ++ .../examples/opengl/opengl | Bin 0 -> 77268 bytes .../examples/opengl/resources/background.jpg | Bin 0 -> 142959 bytes .../examples/opengl/resources/sansation.ttf | Bin 0 -> 28912 bytes .../examples/opengl/resources/texture.jpg | Bin 0 -> 20550 bytes .../examples/pong/Pong.cpp | 241 +++ .../examples/pong/pong | Bin 0 -> 85528 bytes .../examples/pong/resources/ball.wav | Bin 0 -> 15442 bytes .../examples/pong/resources/sansation.ttf | Bin 0 -> 28912 bytes .../examples/shader/Effect.hpp | 88 + .../examples/shader/Shader.cpp | 380 ++++ .../examples/shader/resources/background.jpg | Bin 0 -> 53507 bytes .../examples/shader/resources/blink.frag | 9 + .../examples/shader/resources/blur.frag | 20 + .../examples/shader/resources/devices.png | Bin 0 -> 51410 bytes .../examples/shader/resources/edge.frag | 32 + .../examples/shader/resources/pixelate.frag | 9 + .../examples/shader/resources/sansation.ttf | Bin 0 -> 28912 bytes .../examples/shader/resources/sfml.png | Bin 0 -> 25973 bytes .../examples/shader/resources/storm.vert | 19 + .../shader/resources/text-background.png | Bin 0 -> 745 bytes .../examples/shader/resources/wave.vert | 15 + .../examples/shader/shader | Bin 0 -> 123576 bytes .../examples/sockets/Sockets.cpp | 59 + .../examples/sockets/TCP.cpp | 81 + .../examples/sockets/UDP.cpp | 72 + .../examples/sockets/sockets | Bin 0 -> 60580 bytes .../examples/sound-capture/SoundCapture.cpp | 95 + .../examples/sound-capture/sound-capture | Bin 0 -> 60100 bytes .../examples/sound/Sound.cpp | 98 + .../examples/sound/resources/canary.wav | Bin 0 -> 63504 bytes .../examples/sound/resources/orchestral.ogg | Bin 0 -> 153776 bytes .../examples/sound/sound | Bin 0 -> 59096 bytes .../examples/voip/Client.cpp | 129 ++ .../examples/voip/Server.cpp | 200 ++ .../examples/voip/VoIP.cpp | 50 + .../examples/voip/voip | Bin 0 -> 81756 bytes .../examples/window/Window.cpp | 146 ++ .../examples/window/window | Bin 0 -> 52656 bytes .../extlibs/freetype.framework/Resources | 1 + .../Versions/A/Resources/Info.plist | 20 + .../freetype.framework/Versions/A/freetype | Bin 0 -> 1668068 bytes .../freetype.framework/Versions/Current | 1 + .../extlibs/freetype.framework/freetype | 1 + .../extlibs/sndfile.framework/Resources | 1 + .../Versions/A/Resources/Info.plist | 20 + .../sndfile.framework/Versions/A/sndfile | Bin 0 -> 6602736 bytes .../sndfile.framework/Versions/Current | 1 + .../extlibs/sndfile.framework/sndfile | 1 + .../include/SFML/Audio.hpp | 50 + .../include/SFML/Audio/Export.hpp | 48 + .../include/SFML/Audio/Listener.hpp | 184 ++ .../include/SFML/Audio/Music.hpp | 228 +++ .../include/SFML/Audio/Sound.hpp | 262 +++ .../include/SFML/Audio/SoundBuffer.hpp | 359 ++++ .../SFML/Audio/SoundBufferRecorder.hpp | 138 ++ .../include/SFML/Audio/SoundRecorder.hpp | 270 +++ .../include/SFML/Audio/SoundSource.hpp | 286 +++ .../include/SFML/Audio/SoundStream.hpp | 377 ++++ .../include/SFML/Config.hpp | 159 ++ .../include/SFML/Graphics.hpp | 62 + .../include/SFML/Graphics/BlendMode.hpp | 46 + .../include/SFML/Graphics/CircleShape.hpp | 151 ++ .../include/SFML/Graphics/Color.hpp | 228 +++ .../include/SFML/Graphics/ConvexShape.hpp | 150 ++ .../include/SFML/Graphics/Drawable.hpp | 126 ++ .../include/SFML/Graphics/Export.hpp | 48 + .../include/SFML/Graphics/Font.hpp | 361 ++++ .../include/SFML/Graphics/Glyph.hpp | 79 + .../include/SFML/Graphics/Image.hpp | 318 +++ .../include/SFML/Graphics/PrimitiveType.hpp | 53 + .../include/SFML/Graphics/Rect.hpp | 248 +++ .../include/SFML/Graphics/Rect.inl | 159 ++ .../include/SFML/Graphics/RectangleShape.hpp | 128 ++ .../include/SFML/Graphics/RenderStates.hpp | 174 ++ .../include/SFML/Graphics/RenderTarget.hpp | 451 ++++ .../include/SFML/Graphics/RenderTexture.hpp | 280 +++ .../include/SFML/Graphics/RenderWindow.hpp | 266 +++ .../include/SFML/Graphics/Shader.hpp | 635 ++++++ .../include/SFML/Graphics/Shape.hpp | 345 ++++ .../include/SFML/Graphics/Sprite.hpp | 277 +++ .../include/SFML/Graphics/Text.hpp | 351 ++++ .../include/SFML/Graphics/Texture.hpp | 602 ++++++ .../include/SFML/Graphics/Transform.hpp | 450 ++++ .../include/SFML/Graphics/Transformable.hpp | 417 ++++ .../include/SFML/Graphics/Vertex.hpp | 148 ++ .../include/SFML/Graphics/VertexArray.hpp | 223 ++ .../include/SFML/Graphics/View.hpp | 341 +++ .../include/SFML/Network.hpp | 51 + .../include/SFML/Network/Export.hpp | 48 + .../include/SFML/Network/Ftp.hpp | 591 ++++++ .../include/SFML/Network/Http.hpp | 467 +++++ .../include/SFML/Network/IpAddress.hpp | 316 +++ .../include/SFML/Network/Packet.hpp | 407 ++++ .../include/SFML/Network/Socket.hpp | 218 ++ .../include/SFML/Network/SocketHandle.hpp | 57 + .../include/SFML/Network/SocketSelector.hpp | 263 +++ .../include/SFML/Network/TcpListener.hpp | 162 ++ .../include/SFML/Network/TcpSocket.hpp | 292 +++ .../include/SFML/Network/UdpSocket.hpp | 283 +++ .../include/SFML/OpenGL.hpp | 62 + .../include/SFML/System.hpp | 56 + .../include/SFML/System/Clock.hpp | 117 ++ .../include/SFML/System/Err.hpp | 78 + .../include/SFML/System/Export.hpp | 48 + .../include/SFML/System/InputStream.hpp | 151 ++ .../include/SFML/System/Lock.hpp | 139 ++ .../include/SFML/System/Mutex.hpp | 148 ++ .../include/SFML/System/NonCopyable.hpp | 119 ++ .../include/SFML/System/Sleep.hpp | 52 + .../include/SFML/System/String.hpp | 543 +++++ .../include/SFML/System/Thread.hpp | 282 +++ .../include/SFML/System/Thread.inl | 90 + .../include/SFML/System/ThreadLocal.hpp | 103 + .../include/SFML/System/ThreadLocalPtr.hpp | 158 ++ .../include/SFML/System/ThreadLocalPtr.inl | 77 + .../include/SFML/System/Time.hpp | 452 ++++ .../include/SFML/System/Utf.hpp | 763 +++++++ .../include/SFML/System/Utf.inl | 752 +++++++ .../include/SFML/System/Vector2.hpp | 301 +++ .../include/SFML/System/Vector2.inl | 161 ++ .../include/SFML/System/Vector3.hpp | 302 +++ .../include/SFML/System/Vector3.inl | 168 ++ .../include/SFML/Window.hpp | 52 + .../include/SFML/Window/Context.hpp | 140 ++ .../include/SFML/Window/ContextSettings.hpp | 104 + .../include/SFML/Window/Event.hpp | 237 +++ .../include/SFML/Window/Export.hpp | 48 + .../include/SFML/Window/GlResource.hpp | 76 + .../include/SFML/Window/Joystick.hpp | 203 ++ .../include/SFML/Window/Keyboard.hpp | 209 ++ .../include/SFML/Window/Mouse.hpp | 167 ++ .../include/SFML/Window/VideoMode.hpp | 228 +++ .../include/SFML/Window/Window.hpp | 541 +++++ .../include/SFML/Window/WindowHandle.hpp | 64 + .../include/SFML/Window/WindowStyle.hpp | 53 + SFML-2.1-osx-clang-universal/install.sh | 157 ++ .../lib/libsfml-audio.2.1.dylib | Bin 0 -> 177080 bytes .../lib/libsfml-audio.2.dylib | 1 + .../lib/libsfml-audio.dylib | 1 + .../lib/libsfml-graphics.2.1.dylib | Bin 0 -> 1694516 bytes .../lib/libsfml-graphics.2.dylib | 1 + .../lib/libsfml-graphics.dylib | 1 + .../lib/libsfml-network.2.1.dylib | Bin 0 -> 317248 bytes .../lib/libsfml-network.2.dylib | 1 + .../lib/libsfml-network.dylib | 1 + .../lib/libsfml-system.2.1.dylib | Bin 0 -> 117040 bytes .../lib/libsfml-system.2.dylib | 1 + .../lib/libsfml-system.dylib | 1 + .../lib/libsfml-window.2.1.dylib | Bin 0 -> 361264 bytes .../lib/libsfml-window.2.dylib | 1 + .../lib/libsfml-window.dylib | 1 + SFML-2.1-osx-clang-universal/license.txt | 36 + SFML-2.1-osx-clang-universal/readme.txt | 40 + .../SFML/SFML App.xctemplate/ResourcePath.hpp | 43 + .../SFML/SFML App.xctemplate/ResourcePath.mm | 52 + .../SFML App.xctemplate/TemplateIcon.icns | Bin 0 -> 243806 bytes .../SFML App.xctemplate/TemplateInfo.plist | 268 +++ .../SFML/SFML App.xctemplate/cute_image.jpg | Bin 0 -> 142959 bytes .../SFML/SFML App.xctemplate/icon.png | Bin 0 -> 61926 bytes .../SFML/SFML App.xctemplate/main.cpp | 91 + .../SFML/SFML App.xctemplate/nice_music.ogg | Bin 0 -> 153776 bytes .../SFML/SFML App.xctemplate/sansation.ttf | Bin 0 -> 28912 bytes .../SFML Base.xctemplate/TemplateInfo.plist | 116 ++ .../SFML Bundle.xctemplate/TemplateInfo.plist | 132 ++ .../SFML CLT.xctemplate/TemplateIcon.icns | Bin 0 -> 243806 bytes .../SFML CLT.xctemplate/TemplateInfo.plist | 137 ++ .../SFML/SFML CLT.xctemplate/cute_image.jpg | Bin 0 -> 142959 bytes .../SFML/SFML CLT.xctemplate/icon.png | Bin 0 -> 61926 bytes .../SFML/SFML CLT.xctemplate/main.cpp | 89 + .../SFML/SFML CLT.xctemplate/nice_music.ogg | Bin 0 -> 153776 bytes .../SFML/SFML CLT.xctemplate/sansation.ttf | Bin 0 -> 28912 bytes .../TemplateInfo.plist | 288 +++ .../SFML Linker.xctemplate/TemplateInfo.plist | 363 ++++ assets/4V_figur2.png | Bin 0 -> 11049 bytes assets/6Ling_figur2.png | Bin 0 -> 8044 bytes assets/hel_bakgrund.png | Bin 0 -> 2113904 bytes assets/kir_flaska2.png | Bin 0 -> 5471 bytes "assets/s\303\244ck2.png" | Bin 0 -> 38246 bytes assets/y6_figur2.png | Bin 0 -> 33705 bytes "assets/\303\266l_burk2.png" | Bin 0 -> 2536 bytes 731 files changed, 123624 insertions(+) create mode 100644 SFML-2.1-osx-clang-universal/.DS_Store create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Headers create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Resources create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/SFML create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Listener.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Music.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Sound.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundBuffer.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundBufferRecorder.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundRecorder.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundSource.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundStream.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Config.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/BlendMode.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/CircleShape.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Color.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/ConvexShape.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Drawable.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Font.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Glyph.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Image.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/PrimitiveType.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Rect.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Rect.inl create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RectangleShape.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderStates.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderTarget.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderTexture.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderWindow.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Shader.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Shape.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Sprite.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Text.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Texture.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Transform.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Transformable.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Vertex.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/VertexArray.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/View.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Ftp.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Http.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/IpAddress.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Packet.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Socket.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/SocketHandle.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/SocketSelector.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/TcpListener.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/TcpSocket.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/UdpSocket.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/OpenGL.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Clock.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Err.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/InputStream.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Lock.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Mutex.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/NonCopyable.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Sleep.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/String.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Thread.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Thread.inl create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocal.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocalPtr.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocalPtr.inl create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Time.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Utf.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Utf.inl create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector2.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector2.inl create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector3.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector3.inl create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Context.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/ContextSettings.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Event.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/GlResource.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Joystick.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Keyboard.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Mouse.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/VideoMode.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Window.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/WindowHandle.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/WindowStyle.hpp create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Resources/Info.plist create mode 100755 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/SFML create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/Current create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/Resources create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/Versions/2.1.0/Resources/Info.plist create mode 100755 SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/Versions/2.1.0/sfml-audio create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/Versions/Current create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/sfml-audio create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Resources create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/2.1.0/Resources/Info.plist create mode 100755 SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/2.1.0/sfml-graphics create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/Current create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/sfml-graphics create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Resources create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/2.1.0/Resources/Info.plist create mode 100755 SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/2.1.0/sfml-network create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/Current create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/sfml-network create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Resources create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Versions/2.1.0/Resources/Info.plist create mode 100755 SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Versions/2.1.0/sfml-system create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Versions/Current create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/sfml-system create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/Resources create mode 100644 SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/Versions/2.1.0/Resources/Info.plist create mode 100755 SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/Versions/2.1.0/sfml-window create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/Versions/Current create mode 120000 SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/sfml-window create mode 100644 SFML-2.1-osx-clang-universal/cmake/Modules/FindSFML.cmake create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Audio_2Export_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Audio_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/BlendMode_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/CircleShape_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Clock_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Color_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Config_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ContextSettings_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Context_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ConvexShape_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Drawable_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Err_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Event_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Font_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Ftp_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/GlResource_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Glyph_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Graphics_2Export_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Graphics_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Http_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Image_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/InputStream_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/IpAddress_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Joystick_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Keyboard_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Listener_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Lock_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Mouse_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Music_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Mutex_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Network_2Export_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Network_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/NonCopyable_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/OpenGL_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Packet_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/PrimitiveType_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Rect_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Rect_8inl_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/RectangleShape_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/RenderStates_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/RenderTarget_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/RenderTexture_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/RenderWindow_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Shader_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Shape_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Sleep_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/SocketHandle_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/SocketSelector_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Socket_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/SoundBufferRecorder_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/SoundBuffer_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/SoundRecorder_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/SoundSource_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/SoundStream_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Sound_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Sprite_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/String_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/System_2Export_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/System_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/TcpListener_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/TcpSocket_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Text_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Texture_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ThreadLocalPtr_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ThreadLocalPtr_8inl_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ThreadLocal_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Thread_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Thread_8inl_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Time_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Transform_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Transformable_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/UdpSocket_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Utf_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Utf_8inl_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Vector2_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Vector2_8inl_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Vector3_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Vector3_8inl_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/VertexArray_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Vertex_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/VideoMode_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/View_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/WindowHandle_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/WindowStyle_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Window_2Export_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Window_2Window_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/Window_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/annotated.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/bc_s.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/bdwn.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classes.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Clock-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Clock.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Color-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Color.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ContextSettings-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Event-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Event.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Font-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Font.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1DirectoryResponse-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1DirectoryResponse.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1DirectoryResponse.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1ListingResponse-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1ListingResponse.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1ListingResponse.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1Response-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1Response.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1Response.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Glyph-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Glyph.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Request-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Request.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Response-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Response.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Image-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Image.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1InputStream-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1InputStream.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1IpAddress-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1IpAddress.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Joystick-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Joystick.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Keyboard-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Keyboard.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Listener-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Listener.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mouse-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mouse.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Packet-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Packet.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Rect-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Rect.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderStates-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderStates.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTexture-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTexture.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTexture.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shape-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shape.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shape.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SocketSelector-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SocketSelector.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBuffer-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBuffer.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundSource-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundSource.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundSource.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundStream-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundStream.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundStream.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1String-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1String.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Thread-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Thread.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Thread.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocalPtr-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocalPtr.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocalPtr.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Time-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Time.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transform-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transform.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1UdpSocket-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1UdpSocket.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1UdpSocket.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0116_01_4-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0116_01_4.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0132_01_4-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0132_01_4.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_018_01_4-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_018_01_4.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector2-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector2.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector3-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector3.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vertex-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vertex.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VideoMode-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VideoMode.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1View-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1View.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/closed.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/dir_0ccda3a7de18f509ca1da5cc9f800e28.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/dir_23684cb3154a9a6315b13ddae22451ba.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/dir_5b3d798f7f3738805c48f4569d73ec1e.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/dir_6c7bee9a69c8d4d5a239feb5f32dab30.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/dir_798ce90c6ecad3595159066965e3fff6.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/dir_b57c126f18dbb5f6d210188b78112323.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/dir_c08fb8d44334911c4cd4ccee54f88f02.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/dir_e537a36512cc2fc6f08fd874f83e8f5f.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/doxygen.css create mode 100644 SFML-2.1-osx-clang-universal/doc/html/doxygen.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/dynsections.js create mode 100644 SFML-2.1-osx-clang-universal/doc/html/files.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2blank.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2cl.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2doc.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2folderclosed.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2folderopen.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2lastnode.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2link.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2mlastnode.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2mnode.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2mo.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2node.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2ns.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2plastnode.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2pnode.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2splitbar.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/ftv2vertline.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x62.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x63.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x64.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x65.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x66.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x67.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x68.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x69.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x6a.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x6b.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x6c.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x6d.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x6e.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x6f.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x70.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x71.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x72.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x73.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x74.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x75.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x76.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x77.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x78.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x79.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x7a.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_0x7e.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_enum.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x62.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x63.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x64.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x65.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x66.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x67.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x68.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x69.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6a.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6b.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6c.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6d.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6e.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6f.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x70.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x71.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x72.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x73.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x74.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x75.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x76.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x77.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x78.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x79.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x7a.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x62.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x63.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x64.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x65.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x66.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x67.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x68.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x69.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6b.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6c.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6d.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6e.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6f.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x70.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x72.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x73.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x74.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x75.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x76.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x77.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x7a.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_func_0x7e.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_type.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/functions_vars.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/group__audio.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/group__graphics.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/group__network.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/group__system.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/group__window.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/hierarchy.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/index.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/jquery.js create mode 100644 SFML-2.1-osx-clang-universal/doc/html/mainpage_8hpp_source.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/modules.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/nav_f.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/nav_g.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/nav_h.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/open.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1ContextSettings.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickButtonEvent-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickButtonEvent.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickConnectEvent-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickConnectEvent.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickMoveEvent-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickMoveEvent.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1KeyEvent-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1KeyEvent.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseButtonEvent-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseButtonEvent.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseMoveEvent-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseMoveEvent.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseWheelEvent-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseWheelEvent.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1SizeEvent-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1SizeEvent.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1TextEvent-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1TextEvent.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Shader_1_1CurrentTextureType.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1SoundStream_1_1Chunk-members.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/structsf_1_1SoundStream_1_1Chunk.htm create mode 100644 SFML-2.1-osx-clang-universal/doc/html/sync_off.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/sync_on.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/tab_a.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/tab_b.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/tab_h.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/tab_s.png create mode 100644 SFML-2.1-osx-clang-universal/doc/html/tabs.css create mode 100644 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Info.plist create mode 100755 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/MacOS/cocoa create mode 100644 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/Credits.rtf create mode 100644 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/MainMenu.nib create mode 100644 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/blue.png create mode 100644 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/green.png create mode 100644 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/icon.icns create mode 100644 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/logo.png create mode 100644 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/red.png create mode 100644 SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/sansation.ttf create mode 100644 SFML-2.1-osx-clang-universal/examples/ftp/Ftp.cpp create mode 100755 SFML-2.1-osx-clang-universal/examples/ftp/ftp create mode 100644 SFML-2.1-osx-clang-universal/examples/opengl/OpenGL.cpp create mode 100755 SFML-2.1-osx-clang-universal/examples/opengl/opengl create mode 100644 SFML-2.1-osx-clang-universal/examples/opengl/resources/background.jpg create mode 100644 SFML-2.1-osx-clang-universal/examples/opengl/resources/sansation.ttf create mode 100644 SFML-2.1-osx-clang-universal/examples/opengl/resources/texture.jpg create mode 100644 SFML-2.1-osx-clang-universal/examples/pong/Pong.cpp create mode 100755 SFML-2.1-osx-clang-universal/examples/pong/pong create mode 100644 SFML-2.1-osx-clang-universal/examples/pong/resources/ball.wav create mode 100644 SFML-2.1-osx-clang-universal/examples/pong/resources/sansation.ttf create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/Effect.hpp create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/Shader.cpp create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/background.jpg create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/blink.frag create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/blur.frag create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/devices.png create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/edge.frag create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/pixelate.frag create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/sansation.ttf create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/sfml.png create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/storm.vert create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/text-background.png create mode 100644 SFML-2.1-osx-clang-universal/examples/shader/resources/wave.vert create mode 100755 SFML-2.1-osx-clang-universal/examples/shader/shader create mode 100644 SFML-2.1-osx-clang-universal/examples/sockets/Sockets.cpp create mode 100644 SFML-2.1-osx-clang-universal/examples/sockets/TCP.cpp create mode 100644 SFML-2.1-osx-clang-universal/examples/sockets/UDP.cpp create mode 100755 SFML-2.1-osx-clang-universal/examples/sockets/sockets create mode 100644 SFML-2.1-osx-clang-universal/examples/sound-capture/SoundCapture.cpp create mode 100755 SFML-2.1-osx-clang-universal/examples/sound-capture/sound-capture create mode 100644 SFML-2.1-osx-clang-universal/examples/sound/Sound.cpp create mode 100644 SFML-2.1-osx-clang-universal/examples/sound/resources/canary.wav create mode 100644 SFML-2.1-osx-clang-universal/examples/sound/resources/orchestral.ogg create mode 100755 SFML-2.1-osx-clang-universal/examples/sound/sound create mode 100644 SFML-2.1-osx-clang-universal/examples/voip/Client.cpp create mode 100644 SFML-2.1-osx-clang-universal/examples/voip/Server.cpp create mode 100644 SFML-2.1-osx-clang-universal/examples/voip/VoIP.cpp create mode 100755 SFML-2.1-osx-clang-universal/examples/voip/voip create mode 100644 SFML-2.1-osx-clang-universal/examples/window/Window.cpp create mode 100755 SFML-2.1-osx-clang-universal/examples/window/window create mode 120000 SFML-2.1-osx-clang-universal/extlibs/freetype.framework/Resources create mode 100644 SFML-2.1-osx-clang-universal/extlibs/freetype.framework/Versions/A/Resources/Info.plist create mode 100644 SFML-2.1-osx-clang-universal/extlibs/freetype.framework/Versions/A/freetype create mode 120000 SFML-2.1-osx-clang-universal/extlibs/freetype.framework/Versions/Current create mode 120000 SFML-2.1-osx-clang-universal/extlibs/freetype.framework/freetype create mode 120000 SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Resources create mode 100644 SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Versions/A/Resources/Info.plist create mode 100644 SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Versions/A/sndfile create mode 120000 SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Versions/Current create mode 120000 SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/sndfile create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio/Listener.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio/Music.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio/Sound.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio/SoundBuffer.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio/SoundBufferRecorder.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio/SoundRecorder.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio/SoundSource.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Audio/SoundStream.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Config.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/BlendMode.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/CircleShape.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Color.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/ConvexShape.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Drawable.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Font.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Glyph.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Image.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/PrimitiveType.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Rect.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Rect.inl create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/RectangleShape.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/RenderStates.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/RenderTarget.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/RenderTexture.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/RenderWindow.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Shader.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Shape.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Sprite.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Text.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Texture.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Transform.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Transformable.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/Vertex.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/VertexArray.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Graphics/View.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/Ftp.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/Http.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/IpAddress.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/Packet.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/Socket.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/SocketHandle.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/SocketSelector.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/TcpListener.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/TcpSocket.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Network/UdpSocket.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/OpenGL.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Clock.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Err.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/InputStream.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Lock.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Mutex.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/NonCopyable.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Sleep.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/String.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Thread.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Thread.inl create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/ThreadLocal.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/ThreadLocalPtr.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/ThreadLocalPtr.inl create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Time.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Utf.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Utf.inl create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Vector2.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Vector2.inl create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Vector3.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/System/Vector3.inl create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/Context.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/ContextSettings.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/Event.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/Export.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/GlResource.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/Joystick.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/Keyboard.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/Mouse.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/VideoMode.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/Window.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/WindowHandle.hpp create mode 100644 SFML-2.1-osx-clang-universal/include/SFML/Window/WindowStyle.hpp create mode 100755 SFML-2.1-osx-clang-universal/install.sh create mode 100755 SFML-2.1-osx-clang-universal/lib/libsfml-audio.2.1.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-audio.2.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-audio.dylib create mode 100755 SFML-2.1-osx-clang-universal/lib/libsfml-graphics.2.1.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-graphics.2.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-graphics.dylib create mode 100755 SFML-2.1-osx-clang-universal/lib/libsfml-network.2.1.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-network.2.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-network.dylib create mode 100755 SFML-2.1-osx-clang-universal/lib/libsfml-system.2.1.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-system.2.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-system.dylib create mode 100755 SFML-2.1-osx-clang-universal/lib/libsfml-window.2.1.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-window.2.dylib create mode 120000 SFML-2.1-osx-clang-universal/lib/libsfml-window.dylib create mode 100644 SFML-2.1-osx-clang-universal/license.txt create mode 100644 SFML-2.1-osx-clang-universal/readme.txt create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML App.xctemplate/ResourcePath.hpp create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML App.xctemplate/ResourcePath.mm create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML App.xctemplate/TemplateIcon.icns create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML App.xctemplate/TemplateInfo.plist create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML App.xctemplate/cute_image.jpg create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML App.xctemplate/icon.png create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML App.xctemplate/main.cpp create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML App.xctemplate/nice_music.ogg create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML App.xctemplate/sansation.ttf create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML Base.xctemplate/TemplateInfo.plist create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML Bundle.xctemplate/TemplateInfo.plist create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML CLT.xctemplate/TemplateIcon.icns create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML CLT.xctemplate/TemplateInfo.plist create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML CLT.xctemplate/cute_image.jpg create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML CLT.xctemplate/icon.png create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML CLT.xctemplate/main.cpp create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML CLT.xctemplate/nice_music.ogg create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML CLT.xctemplate/sansation.ttf create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML Compiler.xctemplate/TemplateInfo.plist create mode 100644 SFML-2.1-osx-clang-universal/templates/SFML/SFML Linker.xctemplate/TemplateInfo.plist create mode 100644 assets/4V_figur2.png create mode 100644 assets/6Ling_figur2.png create mode 100644 assets/hel_bakgrund.png create mode 100644 assets/kir_flaska2.png create mode 100644 "assets/s\303\244ck2.png" create mode 100644 assets/y6_figur2.png create mode 100644 "assets/\303\266l_burk2.png" diff --git a/SFML-2.1-osx-clang-universal/.DS_Store b/SFML-2.1-osx-clang-universal/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e44b78348a0663ce0333ab949f7265c3428dcea5 GIT binary patch literal 6148 zcmeHKL2uJA6nn&tkjN3VF*p98a z4OG%c{36w(FxBA(*Ht(LoC5!z0{rdn(ul?s&?S|>U)~a)ARYb^lUJ`%M4CpWubf%m zDlCs;xzzRp+oD*T4<3vd$(H`re)>=r$zsq`Mx9B(tldsj#JS@CJ0=L}J% zG(!a2qWoHlvL)=C3XGECcSt#1tj8cRmwjsH?blfn=@wQv&nI@5{2oryBrm$%A8Myo z-@VoF8eZFbKe*8IK@k+QydO;8^3yA=)9_C@2wx}heAv1BRA)tyWbsrSk|+k{-J2wf z^t`WUS(J;0fz?n{lwtp}GA+zw480?)nwxxh zR?9w3^c>q&7D&0W4tV{lJEfUL2hOe)uygCRuWMYvDc}@v3K#`=fAEnQdlpv)W$QpD zR{&rg)nX{~Ujp{=E%q#~459_5j4RN%DtpCH#vS#(<@GGC3>tS*_VS_Z$jaVOl#Gu4 zeW8=;8FaZ*z$vhtJ{N#Jiz|bufw?~dB7@7E0)JJ3-_vB--2eap literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Headers b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Resources b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/SFML b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/SFML new file mode 120000 index 0000000..4db0e98 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/SFML @@ -0,0 +1 @@ +Versions/Current/SFML \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio.hpp new file mode 100644 index 0000000..1129863 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio.hpp @@ -0,0 +1,50 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_AUDIO_HPP +#define SFML_AUDIO_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // SFML_AUDIO_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup audio Audio module +/// +/// Sounds, streaming (musics or custom sources), recording, +/// spatialization. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Export.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Export.hpp new file mode 100644 index 0000000..7c4b6ca --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_AUDIO_EXPORT_HPP +#define SFML_AUDIO_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_AUDIO_EXPORTS) + + #define SFML_AUDIO_API SFML_API_EXPORT + +#else + + #define SFML_AUDIO_API SFML_API_IMPORT + +#endif + + +#endif // SFML_AUDIO_EXPORT_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Listener.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Listener.hpp new file mode 100644 index 0000000..213d96a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Listener.hpp @@ -0,0 +1,184 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_LISTENER_HPP +#define SFML_LISTENER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief The audio listener is the point in the scene +/// from where all the sounds are heard +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API Listener +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Change the global volume of all the sounds and musics + /// + /// The volume is a number between 0 and 100; it is combined with + /// the individual volume of each sound / music. + /// The default value for the volume is 100 (maximum). + /// + /// \param volume New global volume, in the range [0, 100] + /// + /// \see getGlobalVolume + /// + //////////////////////////////////////////////////////////// + static void setGlobalVolume(float volume); + + //////////////////////////////////////////////////////////// + /// \brief Get the current value of the global volume + /// + /// \return Current global volume, in the range [0, 100] + /// + /// \see setGlobalVolume + /// + //////////////////////////////////////////////////////////// + static float getGlobalVolume(); + + //////////////////////////////////////////////////////////// + /// \brief Set the position of the listener in the scene + /// + /// The default listener's position is (0, 0, 0). + /// + /// \param x X coordinate of the listener's position + /// \param y Y coordinate of the listener's position + /// \param z Z coordinate of the listener's position + /// + /// \see getPosition, setDirection + /// + //////////////////////////////////////////////////////////// + static void setPosition(float x, float y, float z); + + //////////////////////////////////////////////////////////// + /// \brief Set the position of the listener in the scene + /// + /// The default listener's position is (0, 0, 0). + /// + /// \param position New listener's position + /// + /// \see getPosition, setDirection + /// + //////////////////////////////////////////////////////////// + static void setPosition(const Vector3f& position); + + //////////////////////////////////////////////////////////// + /// \brief Get the current position of the listener in the scene + /// + /// \return Listener's position + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + static Vector3f getPosition(); + + //////////////////////////////////////////////////////////// + /// \brief Set the orientation of the listener in the scene + /// + /// The orientation defines the 3D axes of the listener + /// (left, up, front) in the scene. The orientation vector + /// doesn't have to be normalized. + /// The default listener's orientation is (0, 0, -1). + /// + /// \param x X coordinate of the listener's orientation + /// \param y Y coordinate of the listener's orientation + /// \param z Z coordinate of the listener's orientation + /// + /// \see getDirection, setPosition + /// + //////////////////////////////////////////////////////////// + static void setDirection(float x, float y, float z); + + //////////////////////////////////////////////////////////// + /// \brief Set the orientation of the listener in the scene + /// + /// The orientation defines the 3D axes of the listener + /// (left, up, front) in the scene. The orientation vector + /// doesn't have to be normalized. + /// The default listener's orientation is (0, 0, -1). + /// + /// \param direction New listener's orientation + /// + /// \see getDirection, setPosition + /// + //////////////////////////////////////////////////////////// + static void setDirection(const Vector3f& direction); + + //////////////////////////////////////////////////////////// + /// \brief Get the current orientation of the listener in the scene + /// + /// \return Listener's orientation + /// + /// \see setDirection + /// + //////////////////////////////////////////////////////////// + static Vector3f getDirection(); +}; + +} // namespace sf + + +#endif // SFML_LISTENER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Listener +/// \ingroup audio +/// +/// The audio listener defines the global properties of the +/// audio environment, it defines where and how sounds and musics +/// are heard. If sf::View is the eyes of the user, then sf::Listener +/// is his ears (by the way, they are often linked together -- +/// same position, orientation, etc.). +/// +/// sf::Listener is a simple interface, which allows to setup the +/// listener in the 3D audio environment (position and direction), +/// and to adjust the global volume. +/// +/// Because the listener is unique in the scene, sf::Listener only +/// contains static functions and doesn't have to be instanciated. +/// +/// Usage example: +/// \code +/// // Move the listener to the position (1, 0, -5) +/// sf::Listener::setPosition(1, 0, -5); +/// +/// // Make it face the right axis (1, 0, 0) +/// sf::Listener::setDirection(1, 0, 0); +/// +/// // Reduce the global volume +/// sf::Listener::setGlobalVolume(50); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Music.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Music.hpp new file mode 100644 index 0000000..ba922e9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Music.hpp @@ -0,0 +1,228 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_MUSIC_HPP +#define SFML_MUSIC_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class SoundFile; +} + +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Streamed music played from an audio file +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API Music : public SoundStream +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Music(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Music(); + + //////////////////////////////////////////////////////////// + /// \brief Open a music from an audio file + /// + /// This function doesn't start playing the music (call play() + /// to do so). + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param filename Path of the music file to open + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see openFromMemory, openFromStream + /// + //////////////////////////////////////////////////////////// + bool openFromFile(const std::string& filename); + + //////////////////////////////////////////////////////////// + /// \brief Open a music from an audio file in memory + /// + /// This function doesn't start playing the music (call play() + /// to do so). + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// Since the music is not loaded completely but rather streamed + /// continuously, the \a data must remain available as long as the + /// music is playing (ie. you can't deallocate it right after calling + /// this function). + /// + /// \param data Pointer to the file data in memory + /// \param sizeInBytes Size of the data to load, in bytes + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see openFromFile, openFromStream + /// + //////////////////////////////////////////////////////////// + bool openFromMemory(const void* data, std::size_t sizeInBytes); + + //////////////////////////////////////////////////////////// + /// \brief Open a music from an audio file in a custom stream + /// + /// This function doesn't start playing the music (call play() + /// to do so). + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// Since the music is not loaded completely but rather streamed + /// continuously, the \a stream must remain alive as long as the + /// music is playing (ie. you can't destroy it right after calling + /// this function). + /// + /// \param stream Source stream to read from + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see openFromFile, openFromMemory + /// + //////////////////////////////////////////////////////////// + bool openFromStream(InputStream& stream); + + //////////////////////////////////////////////////////////// + /// \brief Get the total duration of the music + /// + /// \return Music duration + /// + //////////////////////////////////////////////////////////// + Time getDuration() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Request a new chunk of audio samples from the stream source + /// + /// This function fills the chunk from the next samples + /// to read from the audio file. + /// + /// \param data Chunk of data to fill + /// + /// \return True to continue playback, false to stop + /// + //////////////////////////////////////////////////////////// + virtual bool onGetData(Chunk& data); + + //////////////////////////////////////////////////////////// + /// \brief Change the current playing position in the stream source + /// + /// \param timeOffset New playing position, from the beginning of the music + /// + //////////////////////////////////////////////////////////// + virtual void onSeek(Time timeOffset); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Initialize the internal state after loading a new music + /// + //////////////////////////////////////////////////////////// + void initialize(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::SoundFile* m_file; ///< Sound file + Time m_duration; ///< Music duration + std::vector m_samples; ///< Temporary buffer of samples + Mutex m_mutex; ///< Mutex protecting the data +}; + +} // namespace sf + + +#endif // SFML_MUSIC_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Music +/// \ingroup audio +/// +/// Musics are sounds that are streamed rather than completely +/// loaded in memory. This is especially useful for compressed +/// musics that usually take hundreds of MB when they are +/// uncompressed: by streaming it instead of loading it entirely, +/// you avoid saturating the memory and have almost no loading delay. +/// +/// Apart from that, a sf::Music has almost the same features as +/// the sf::SoundBuffer / sf::Sound pair: you can play/pause/stop +/// it, request its parameters (channels, sample rate), change +/// the way it is played (pitch, volume, 3D position, ...), etc. +/// +/// As a sound stream, a music is played in its own thread in order +/// not to block the rest of the program. This means that you can +/// leave the music alone after calling play(), it will manage itself +/// very well. +/// +/// Usage example: +/// \code +/// // Declare a new music +/// sf::Music music; +/// +/// // Open it from an audio file +/// if (!music.openFromFile("music.ogg")) +/// { +/// // error... +/// } +/// +/// // Change some parameters +/// music.setPosition(0, 1, 10); // change its 3D position +/// music.setPitch(2); // increase the pitch +/// music.setVolume(50); // reduce the volume +/// music.setLoop(true); // make it loop +/// +/// // Play it +/// music.play(); +/// \endcode +/// +/// \see sf::Sound, sf::SoundStream +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Sound.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Sound.hpp new file mode 100644 index 0000000..1250f42 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/Sound.hpp @@ -0,0 +1,262 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUND_HPP +#define SFML_SOUND_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +class SoundBuffer; + +//////////////////////////////////////////////////////////// +/// \brief Regular sound that can be played in the audio environment +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API Sound : public SoundSource +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Sound(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the sound with a buffer + /// + /// \param buffer Sound buffer containing the audio data to play with the sound + /// + //////////////////////////////////////////////////////////// + explicit Sound(const SoundBuffer& buffer); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + Sound(const Sound& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Sound(); + + //////////////////////////////////////////////////////////// + /// \brief Start or resume playing the sound + /// + /// This function starts the stream if it was stopped, resumes + /// it if it was paused, and restarts it from beginning if it + /// was it already playing. + /// This function uses its own thread so that it doesn't block + /// the rest of the program while the sound is played. + /// + /// \see pause, stop + /// + //////////////////////////////////////////////////////////// + void play(); + + //////////////////////////////////////////////////////////// + /// \brief Pause the sound + /// + /// This function pauses the sound if it was playing, + /// otherwise (sound already paused or stopped) it has no effect. + /// + /// \see play, stop + /// + //////////////////////////////////////////////////////////// + void pause(); + + //////////////////////////////////////////////////////////// + /// \brief stop playing the sound + /// + /// This function stops the sound if it was playing or paused, + /// and does nothing if it was already stopped. + /// It also resets the playing position (unlike pause()). + /// + /// \see play, pause + /// + //////////////////////////////////////////////////////////// + void stop(); + + //////////////////////////////////////////////////////////// + /// \brief Set the source buffer containing the audio data to play + /// + /// It is important to note that the sound buffer is not copied, + /// thus the sf::SoundBuffer instance must remain alive as long + /// as it is attached to the sound. + /// + /// \param buffer Sound buffer to attach to the sound + /// + /// \see getBuffer + /// + //////////////////////////////////////////////////////////// + void setBuffer(const SoundBuffer& buffer); + + //////////////////////////////////////////////////////////// + /// \brief Set whether or not the sound should loop after reaching the end + /// + /// If set, the sound will restart from beginning after + /// reaching the end and so on, until it is stopped or + /// setLoop(false) is called. + /// The default looping state for sound is false. + /// + /// \param loop True to play in loop, false to play once + /// + /// \see getLoop + /// + //////////////////////////////////////////////////////////// + void setLoop(bool loop); + + //////////////////////////////////////////////////////////// + /// \brief Change the current playing position of the sound + /// + /// The playing position can be changed when the sound is + /// either paused or playing. + /// + /// \param timeOffset New playing position, from the beginning of the sound + /// + /// \see getPlayingOffset + /// + //////////////////////////////////////////////////////////// + void setPlayingOffset(Time timeOffset); + + //////////////////////////////////////////////////////////// + /// \brief Get the audio buffer attached to the sound + /// + /// \return Sound buffer attached to the sound (can be NULL) + /// + //////////////////////////////////////////////////////////// + const SoundBuffer* getBuffer() const; + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the sound is in loop mode + /// + /// \return True if the sound is looping, false otherwise + /// + /// \see setLoop + /// + //////////////////////////////////////////////////////////// + bool getLoop() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the current playing position of the sound + /// + /// \return Current playing position, from the beginning of the sound + /// + /// \see setPlayingOffset + /// + //////////////////////////////////////////////////////////// + Time getPlayingOffset() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the current status of the sound (stopped, paused, playing) + /// + /// \return Current status of the sound + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + Sound& operator =(const Sound& right); + + //////////////////////////////////////////////////////////// + /// \brief Reset the internal buffer of the sound + /// + /// This function is for internal use only, you don't have + /// to use it. It is called by the sf::SoundBuffer that + /// this sound uses, when it is destroyed in order to prevent + /// the sound from using a dead buffer. + /// + //////////////////////////////////////////////////////////// + void resetBuffer(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + const SoundBuffer* m_buffer; ///< Sound buffer bound to the source +}; + +} // namespace sf + + +#endif // SFML_SOUND_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Sound +/// \ingroup audio +/// +/// sf::Sound is the class to use to play sounds. +/// It provides: +/// \li Control (play, pause, stop) +/// \li Ability to modify output parameters in real-time (pitch, volume, ...) +/// \li 3D spatial features (position, attenuation, ...). +/// +/// sf::Sound is perfect for playing short sounds that can +/// fit in memory and require no latency, like foot steps or +/// gun shots. For longer sounds, like background musics +/// or long speeches, rather see sf::Music (which is based +/// on streaming). +/// +/// In order to work, a sound must be given a buffer of audio +/// data to play. Audio data (samples) is stored in sf::SoundBuffer, +/// and attached to a sound with the setBuffer() function. +/// The buffer object attached to a sound must remain alive +/// as long as the sound uses it. Note that multiple sounds +/// can use the same sound buffer at the same time. +/// +/// Usage example: +/// \code +/// sf::SoundBuffer buffer; +/// buffer.loadFromFile("sound.wav"); +/// +/// sf::Sound sound; +/// sound.setBuffer(buffer); +/// sound.play(); +/// \endcode +/// +/// \see sf::SoundBuffer, sf::Music +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundBuffer.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundBuffer.hpp new file mode 100644 index 0000000..23fed88 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundBuffer.hpp @@ -0,0 +1,359 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDBUFFER_HPP +#define SFML_SOUNDBUFFER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class SoundFile; +} + +class Sound; +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Storage for audio samples defining a sound +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundBuffer +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + SoundBuffer(); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + SoundBuffer(const SoundBuffer& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~SoundBuffer(); + + //////////////////////////////////////////////////////////// + /// \brief Load the sound buffer from a file + /// + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param filename Path of the sound file to load + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromMemory, loadFromStream, loadFromSamples, saveToFile + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename); + + //////////////////////////////////////////////////////////// + /// \brief Load the sound buffer from a file in memory + /// + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param data Pointer to the file data in memory + /// \param sizeInBytes Size of the data to load, in bytes + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromStream, loadFromSamples + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const void* data, std::size_t sizeInBytes); + + //////////////////////////////////////////////////////////// + /// \brief Load the sound buffer from a custom stream + /// + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param stream Source stream to read from + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory, loadFromSamples + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& stream); + + //////////////////////////////////////////////////////////// + /// \brief Load the sound buffer from an array of audio samples + /// + /// The assumed format of the audio samples is 16 bits signed integer + /// (sf::Int16). + /// + /// \param samples Pointer to the array of samples in memory + /// \param sampleCount Number of samples in the array + /// \param channelCount Number of channels (1 = mono, 2 = stereo, ...) + /// \param sampleRate Sample rate (number of samples to play per second) + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory, saveToFile + /// + //////////////////////////////////////////////////////////// + bool loadFromSamples(const Int16* samples, std::size_t sampleCount, unsigned int channelCount, unsigned int sampleRate); + + //////////////////////////////////////////////////////////// + /// \brief Save the sound buffer to an audio file + /// + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param filename Path of the sound file to write + /// + /// \return True if saving succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory, loadFromSamples + /// + //////////////////////////////////////////////////////////// + bool saveToFile(const std::string& filename) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the array of audio samples stored in the buffer + /// + /// The format of the returned samples is 16 bits signed integer + /// (sf::Int16). The total number of samples in this array + /// is given by the getSampleCount() function. + /// + /// \return Read-only pointer to the array of sound samples + /// + /// \see getSampleCount + /// + //////////////////////////////////////////////////////////// + const Int16* getSamples() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the number of samples stored in the buffer + /// + /// The array of samples can be accessed with the getSamples() + /// function. + /// + /// \return Number of samples + /// + /// \see getSamples + /// + //////////////////////////////////////////////////////////// + std::size_t getSampleCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the sample rate of the sound + /// + /// The sample rate is the number of samples played per second. + /// The higher, the better the quality (for example, 44100 + /// samples/s is CD quality). + /// + /// \return Sample rate (number of samples per second) + /// + /// \see getChannelCount, getDuration + /// + //////////////////////////////////////////////////////////// + unsigned int getSampleRate() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the number of channels used by the sound + /// + /// If the sound is mono then the number of channels will + /// be 1, 2 for stereo, etc. + /// + /// \return Number of channels + /// + /// \see getSampleRate, getDuration + /// + //////////////////////////////////////////////////////////// + unsigned int getChannelCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the total duration of the sound + /// + /// \return Sound duration + /// + /// \see getSampleRate, getChannelCount + /// + //////////////////////////////////////////////////////////// + Time getDuration() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + SoundBuffer& operator =(const SoundBuffer& right); + +private : + + friend class Sound; + + //////////////////////////////////////////////////////////// + /// \brief Initialize the internal state after loading a new sound + /// + /// \param file Sound file providing access to the new loaded sound + /// + /// \return True on succesful initialization, false on failure + /// + //////////////////////////////////////////////////////////// + bool initialize(priv::SoundFile& file); + + //////////////////////////////////////////////////////////// + /// \brief Update the internal buffer with the cached audio samples + /// + /// \param channelCount Number of channels + /// \param sampleRate Sample rate (number of samples per second) + /// + /// \return True on success, false if any error happened + /// + //////////////////////////////////////////////////////////// + bool update(unsigned int channelCount, unsigned int sampleRate); + + //////////////////////////////////////////////////////////// + /// \brief Add a sound to the list of sounds that use this buffer + /// + /// \param sound Sound instance to attach + /// + //////////////////////////////////////////////////////////// + void attachSound(Sound* sound) const; + + //////////////////////////////////////////////////////////// + /// \brief Remove a sound from the list of sounds that use this buffer + /// + /// \param sound Sound instance to detach + /// + //////////////////////////////////////////////////////////// + void detachSound(Sound* sound) const; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::set SoundList; ///< Set of unique sound instances + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int m_buffer; ///< OpenAL buffer identifier + std::vector m_samples; ///< Samples buffer + Time m_duration; ///< Sound duration + mutable SoundList m_sounds; ///< List of sounds that are using this buffer +}; + +} // namespace sf + + +#endif // SFML_SOUNDBUFFER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundBuffer +/// \ingroup audio +/// +/// A sound buffer holds the data of a sound, which is +/// an array of audio samples. A sample is a 16 bits signed integer +/// that defines the amplitude of the sound at a given time. +/// The sound is then restituted by playing these samples at +/// a high rate (for example, 44100 samples per second is the +/// standard rate used for playing CDs). In short, audio samples +/// are like texture pixels, and a sf::SoundBuffer is similar to +/// a sf::Texture. +/// +/// A sound buffer can be loaded from a file (see loadFromFile() +/// for the complete list of supported formats), from memory, from +/// a custom stream (see sf::InputStream) or directly from an array +/// of samples. It can also be saved back to a file. +/// +/// Sound buffers alone are not very useful: they hold the audio data +/// but cannot be played. To do so, you need to use the sf::Sound class, +/// which provides functions to play/pause/stop the sound as well as +/// changing the way it is outputted (volume, pitch, 3D position, ...). +/// This separation allows more flexibility and better performances: +/// indeed a sf::SoundBuffer is a heavy resource, and any operation on it +/// is slow (often too slow for real-time applications). On the other +/// side, a sf::Sound is a lightweight object, which can use the audio data +/// of a sound buffer and change the way it is played without actually +/// modifying that data. Note that it is also possible to bind +/// several sf::Sound instances to the same sf::SoundBuffer. +/// +/// It is important to note that the sf::Sound instance doesn't +/// copy the buffer that it uses, it only keeps a reference to it. +/// Thus, a sf::SoundBuffer must not be destructed while it is +/// used by a sf::Sound (i.e. never write a function that +/// uses a local sf::SoundBuffer instance for loading a sound). +/// +/// Usage example: +/// \code +/// // Declare a new sound buffer +/// sf::SoundBuffer buffer; +/// +/// // Load it from a file +/// if (!buffer.loadFromFile("sound.wav")) +/// { +/// // error... +/// } +/// +/// // Create a sound source and bind it to the buffer +/// sf::Sound sound1; +/// sound1.setBuffer(buffer); +/// +/// // Play the sound +/// sound1.play(); +/// +/// // Create another sound source bound to the same buffer +/// sf::Sound sound2; +/// sound2.setBuffer(buffer); +/// +/// // Play it with a higher pitch -- the first sound remains unchanged +/// sound2.setPitch(2); +/// sound2.play(); +/// \endcode +/// +/// \see sf::Sound, sf::SoundBufferRecorder +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundBufferRecorder.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundBufferRecorder.hpp new file mode 100644 index 0000000..fa4ac4c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundBufferRecorder.hpp @@ -0,0 +1,138 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDBUFFERRECORDER_HPP +#define SFML_SOUNDBUFFERRECORDER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Specialized SoundRecorder which stores the captured +/// audio data into a sound buffer +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundBufferRecorder : public SoundRecorder +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Get the sound buffer containing the captured audio data + /// + /// The sound buffer is valid only after the capture has ended. + /// This function provides a read-only access to the internal + /// sound buffer, but it can be copied if you need to + /// make any modification to it. + /// + /// \return Read-only access to the sound buffer + /// + //////////////////////////////////////////////////////////// + const SoundBuffer& getBuffer() const; + +protected: + + //////////////////////////////////////////////////////////// + /// \brief Start capturing audio data + /// + /// \return True to start the capture, or false to abort it + /// + //////////////////////////////////////////////////////////// + virtual bool onStart(); + + //////////////////////////////////////////////////////////// + /// \brief Process a new chunk of recorded samples + /// + /// \param samples Pointer to the new chunk of recorded samples + /// \param sampleCount Number of samples pointed by \a samples + /// + /// \return True to continue the capture, or false to stop it + /// + //////////////////////////////////////////////////////////// + virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount); + + //////////////////////////////////////////////////////////// + /// \brief Stop capturing audio data + /// + //////////////////////////////////////////////////////////// + virtual void onStop(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_samples; ///< Temporary sample buffer to hold the recorded data + SoundBuffer m_buffer; ///< Sound buffer that will contain the recorded data +}; + +} // namespace sf + +#endif // SFML_SOUNDBUFFERRECORDER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundBufferRecorder +/// \ingroup audio +/// +/// sf::SoundBufferRecorder allows to access a recorded sound +/// through a sf::SoundBuffer, so that it can be played, saved +/// to a file, etc. +/// +/// It has the same simple interface as its base class (start(), stop()) +/// and adds a function to retrieve the recorded sound buffer +/// (getBuffer()). +/// +/// As usual, don't forget to call the isAvailable() function +/// before using this class (see sf::SoundRecorder for more details +/// about this). +/// +/// Usage example: +/// \code +/// if (sf::SoundBufferRecorder::isAvailable()) +/// { +/// // Record some audio data +/// sf::SoundBufferRecorder recorder; +/// recorder.start(); +/// ... +/// recorder.stop(); +/// +/// // Get the buffer containing the captured audio data +/// const sf::SoundBuffer& buffer = recorder.getBuffer(); +/// +/// // Save it to a file (for example...) +/// buffer.saveToFile("my_record.ogg"); +/// } +/// \endcode +/// +/// \see sf::SoundRecorder +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundRecorder.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundRecorder.hpp new file mode 100644 index 0000000..eddf48e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundRecorder.hpp @@ -0,0 +1,270 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDRECORDER_HPP +#define SFML_SOUNDRECORDER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Abstract base class for capturing sound data +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundRecorder +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief destructor + /// + //////////////////////////////////////////////////////////// + virtual ~SoundRecorder(); + + //////////////////////////////////////////////////////////// + /// \brief Start the capture + /// + /// The \a sampleRate parameter defines the number of audio samples + /// captured per second. The higher, the better the quality + /// (for example, 44100 samples/sec is CD quality). + /// This function uses its own thread so that it doesn't block + /// the rest of the program while the capture runs. + /// Please note that only one capture can happen at the same time. + /// + /// \param sampleRate Desired capture rate, in number of samples per second + /// + /// \see stop + /// + //////////////////////////////////////////////////////////// + void start(unsigned int sampleRate = 44100); + + //////////////////////////////////////////////////////////// + /// \brief Stop the capture + /// + /// \see start + /// + //////////////////////////////////////////////////////////// + void stop(); + + //////////////////////////////////////////////////////////// + /// \brief Get the sample rate + /// + /// The sample rate defines the number of audio samples + /// captured per second. The higher, the better the quality + /// (for example, 44100 samples/sec is CD quality). + /// + /// \return Sample rate, in samples per second + /// + //////////////////////////////////////////////////////////// + unsigned int getSampleRate() const; + + //////////////////////////////////////////////////////////// + /// \brief Check if the system supports audio capture + /// + /// This function should always be called before using + /// the audio capture features. If it returns false, then + /// any attempt to use sf::SoundRecorder or one of its derived + /// classes will fail. + /// + /// \return True if audio capture is supported, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isAvailable(); + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor is only meant to be called by derived classes. + /// + //////////////////////////////////////////////////////////// + SoundRecorder(); + + //////////////////////////////////////////////////////////// + /// \brief Start capturing audio data + /// + /// This virtual function may be overriden by a derived class + /// if something has to be done every time a new capture + /// starts. If not, this function can be ignored; the default + /// implementation does nothing. + /// + /// \return True to start the capture, or false to abort it + /// + //////////////////////////////////////////////////////////// + virtual bool onStart(); + + //////////////////////////////////////////////////////////// + /// \brief Process a new chunk of recorded samples + /// + /// This virtual function is called every time a new chunk of + /// recorded data is available. The derived class can then do + /// whatever it wants with it (storing it, playing it, sending + /// it over the network, etc.). + /// + /// \param samples Pointer to the new chunk of recorded samples + /// \param sampleCount Number of samples pointed by \a samples + /// + /// \return True to continue the capture, or false to stop it + /// + //////////////////////////////////////////////////////////// + virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Stop capturing audio data + /// + /// This virtual function may be overriden by a derived class + /// if something has to be done every time the capture + /// ends. If not, this function can be ignored; the default + /// implementation does nothing. + /// + //////////////////////////////////////////////////////////// + virtual void onStop(); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Function called as the entry point of the thread + /// + /// This function starts the recording loop, and returns + /// only when the capture is stopped. + /// + //////////////////////////////////////////////////////////// + void record(); + + //////////////////////////////////////////////////////////// + /// \brief Get the new available audio samples and process them + /// + /// This function is called continuously during the + /// capture loop. It retrieves the captured samples and + /// forwards them to the derived class. + /// + //////////////////////////////////////////////////////////// + void processCapturedSamples(); + + //////////////////////////////////////////////////////////// + /// \brief Clean up the recorder's internal resources + /// + /// This function is called when the capture stops. + /// + //////////////////////////////////////////////////////////// + void cleanup(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Thread m_thread; ///< Thread running the background recording task + std::vector m_samples; ///< Buffer to store captured samples + unsigned int m_sampleRate; ///< Sample rate + bool m_isCapturing; ///< Capturing state +}; + +} // namespace sf + + +#endif // SFML_SOUNDRECORDER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundRecorder +/// \ingroup audio +/// +/// sf::SoundBuffer provides a simple interface to access +/// the audio recording capabilities of the computer +/// (the microphone). As an abstract base class, it only cares +/// about capturing sound samples, the task of making something +/// useful with them is left to the derived class. Note that +/// SFML provides a built-in specialization for saving the +/// captured data to a sound buffer (see sf::SoundBufferRecorder). +/// +/// A derived class has only one virtual function to override: +/// \li onProcessSamples provides the new chunks of audio samples while the capture happens +/// +/// Moreover, two additionnal virtual functions can be overriden +/// as well if necessary: +/// \li onStart is called before the capture happens, to perform custom initializations +/// \li onStop is called after the capture ends, to perform custom cleanup +/// +/// The audio capture feature may not be supported or activated +/// on every platform, thus it is recommended to check its +/// availability with the isAvailable() function. If it returns +/// false, then any attempt to use an audio recorder will fail. +/// +/// It is important to note that the audio capture happens in a +/// separate thread, so that it doesn't block the rest of the +/// program. In particular, the onProcessSamples and onStop +/// virtual functions (but not onStart) will be called +/// from this separate thread. It is important to keep this in +/// mind, because you may have to take care of synchronization +/// issues if you share data between threads. +/// +/// Usage example: +/// \code +/// class CustomRecorder : public sf::SoundRecorder +/// { +/// virtual bool onStart() // optional +/// { +/// // Initialize whatever has to be done before the capture starts +/// ... +/// +/// // Return true to start playing +/// return true; +/// } +/// +/// virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount) +/// { +/// // Do something with the new chunk of samples (store them, send them, ...) +/// ... +/// +/// // Return true to continue playing +/// return true; +/// } +/// +/// virtual void onStop() // optional +/// { +/// // Clean up whatever has to be done after the capture ends +/// ... +/// } +/// } +/// +/// // Usage +/// if (CustomRecorder::isAvailable()) +/// { +/// CustomRecorder recorder; +/// recorder.start(); +/// ... +/// recorder.stop(); +/// } +/// \endcode +/// +/// \see sf::SoundBufferRecorder +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundSource.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundSource.hpp new file mode 100644 index 0000000..8ccc0b7 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundSource.hpp @@ -0,0 +1,286 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDSOURCE_HPP +#define SFML_SOUNDSOURCE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Base class defining a sound's properties +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundSource +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Enumeration of the sound source states + /// + //////////////////////////////////////////////////////////// + enum Status + { + Stopped, ///< Sound is not playing + Paused, ///< Sound is paused + Playing ///< Sound is playing + }; + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + SoundSource(const SoundSource& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~SoundSource(); + + //////////////////////////////////////////////////////////// + /// \brief Set the pitch of the sound + /// + /// The pitch represents the perceived fundamental frequency + /// of a sound; thus you can make a sound more acute or grave + /// by changing its pitch. A side effect of changing the pitch + /// is to modify the playing speed of the sound as well. + /// The default value for the pitch is 1. + /// + /// \param pitch New pitch to apply to the sound + /// + /// \see getPitch + /// + //////////////////////////////////////////////////////////// + void setPitch(float pitch); + + //////////////////////////////////////////////////////////// + /// \brief Set the volume of the sound + /// + /// The volume is a value between 0 (mute) and 100 (full volume). + /// The default value for the volume is 100. + /// + /// \param volume Volume of the sound + /// + /// \see getVolume + /// + //////////////////////////////////////////////////////////// + void setVolume(float volume); + + //////////////////////////////////////////////////////////// + /// \brief Set the 3D position of the sound in the audio scene + /// + /// Only sounds with one channel (mono sounds) can be + /// spatialized. + /// The default position of a sound is (0, 0, 0). + /// + /// \param x X coordinate of the position of the sound in the scene + /// \param y Y coordinate of the position of the sound in the scene + /// \param z Z coordinate of the position of the sound in the scene + /// + /// \see getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(float x, float y, float z); + + //////////////////////////////////////////////////////////// + /// \brief Set the 3D position of the sound in the audio scene + /// + /// Only sounds with one channel (mono sounds) can be + /// spatialized. + /// The default position of a sound is (0, 0, 0). + /// + /// \param position Position of the sound in the scene + /// + /// \see getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(const Vector3f& position); + + //////////////////////////////////////////////////////////// + /// \brief Make the sound's position relative to the listener or absolute + /// + /// Making a sound relative to the listener will ensure that it will always + /// be played the same way regardless the position of the listener. + /// This can be useful for non-spatialized sounds, sounds that are + /// produced by the listener, or sounds attached to it. + /// The default value is false (position is absolute). + /// + /// \param relative True to set the position relative, false to set it absolute + /// + /// \see isRelativeToListener + /// + //////////////////////////////////////////////////////////// + void setRelativeToListener(bool relative); + + //////////////////////////////////////////////////////////// + /// \brief Set the minimum distance of the sound + /// + /// The "minimum distance" of a sound is the maximum + /// distance at which it is heard at its maximum volume. Further + /// than the minimum distance, it will start to fade out according + /// to its attenuation factor. A value of 0 ("inside the head + /// of the listener") is an invalid value and is forbidden. + /// The default value of the minimum distance is 1. + /// + /// \param distance New minimum distance of the sound + /// + /// \see getMinDistance, setAttenuation + /// + //////////////////////////////////////////////////////////// + void setMinDistance(float distance); + + //////////////////////////////////////////////////////////// + /// \brief Set the attenuation factor of the sound + /// + /// The attenuation is a multiplicative factor which makes + /// the sound more or less loud according to its distance + /// from the listener. An attenuation of 0 will produce a + /// non-attenuated sound, i.e. its volume will always be the same + /// whether it is heard from near or from far. On the other hand, + /// an attenuation value such as 100 will make the sound fade out + /// very quickly as it gets further from the listener. + /// The default value of the attenuation is 1. + /// + /// \param attenuation New attenuation factor of the sound + /// + /// \see getAttenuation, setMinDistance + /// + //////////////////////////////////////////////////////////// + void setAttenuation(float attenuation); + + //////////////////////////////////////////////////////////// + /// \brief Get the pitch of the sound + /// + /// \return Pitch of the sound + /// + /// \see setPitch + /// + //////////////////////////////////////////////////////////// + float getPitch() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the volume of the sound + /// + /// \return Volume of the sound, in the range [0, 100] + /// + /// \see setVolume + /// + //////////////////////////////////////////////////////////// + float getVolume() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the 3D position of the sound in the audio scene + /// + /// \return Position of the sound + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + Vector3f getPosition() const; + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the sound's position is relative to the + /// listener or is absolute + /// + /// \return True if the position is relative, false if it's absolute + /// + /// \see setRelativeToListener + /// + //////////////////////////////////////////////////////////// + bool isRelativeToListener() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the minimum distance of the sound + /// + /// \return Minimum distance of the sound + /// + /// \see setMinDistance, getAttenuation + /// + //////////////////////////////////////////////////////////// + float getMinDistance() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the attenuation factor of the sound + /// + /// \return Attenuation factor of the sound + /// + /// \see setAttenuation, getMinDistance + /// + //////////////////////////////////////////////////////////// + float getAttenuation() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor is meant ot be called by derived classes only. + /// + //////////////////////////////////////////////////////////// + SoundSource(); + + //////////////////////////////////////////////////////////// + /// \brief Get the current status of the sound (stopped, paused, playing) + /// + /// \return Current status of the sound + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int m_source; ///< OpenAL source identifier +}; + +} // namespace sf + + +#endif // SFML_SOUNDSOURCE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundSource +/// \ingroup audio +/// +/// sf::SoundSource is not meant to be used directly, it +/// only serves as a common base for all audio objects +/// that can live in the audio environment. +/// +/// It defines several properties for the sound: pitch, +/// volume, position, attenuation, etc. All of them can be +/// changed at any time with no impact on performances. +/// +/// \see sf::Sound, sf::SoundStream +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundStream.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundStream.hpp new file mode 100644 index 0000000..461dd92 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Audio/SoundStream.hpp @@ -0,0 +1,377 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDSTREAM_HPP +#define SFML_SOUNDSTREAM_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Abstract base class for streamed audio sources +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundStream : public SoundSource +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Structure defining a chunk of audio data to stream + /// + //////////////////////////////////////////////////////////// + struct Chunk + { + const Int16* samples; ///< Pointer to the audio samples + std::size_t sampleCount; ///< Number of samples pointed by Samples + }; + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~SoundStream(); + + //////////////////////////////////////////////////////////// + /// \brief Start or resume playing the audio stream + /// + /// This function starts the stream if it was stopped, resumes + /// it if it was paused, and restarts it from beginning if it + /// was it already playing. + /// This function uses its own thread so that it doesn't block + /// the rest of the program while the stream is played. + /// + /// \see pause, stop + /// + //////////////////////////////////////////////////////////// + void play(); + + //////////////////////////////////////////////////////////// + /// \brief Pause the audio stream + /// + /// This function pauses the stream if it was playing, + /// otherwise (stream already paused or stopped) it has no effect. + /// + /// \see play, stop + /// + //////////////////////////////////////////////////////////// + void pause(); + + //////////////////////////////////////////////////////////// + /// \brief Stop playing the audio stream + /// + /// This function stops the stream if it was playing or paused, + /// and does nothing if it was already stopped. + /// It also resets the playing position (unlike pause()). + /// + /// \see play, pause + /// + //////////////////////////////////////////////////////////// + void stop(); + + //////////////////////////////////////////////////////////// + /// \brief Return the number of channels of the stream + /// + /// 1 channel means a mono sound, 2 means stereo, etc. + /// + /// \return Number of channels + /// + //////////////////////////////////////////////////////////// + unsigned int getChannelCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the stream sample rate of the stream + /// + /// The sample rate is the number of audio samples played per + /// second. The higher, the better the quality. + /// + /// \return Sample rate, in number of samples per second + /// + //////////////////////////////////////////////////////////// + unsigned int getSampleRate() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the current status of the stream (stopped, paused, playing) + /// + /// \return Current status + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + /// \brief Change the current playing position of the stream + /// + /// The playing position can be changed when the stream is + /// either paused or playing. + /// + /// \param timeOffset New playing position, from the beginning of the stream + /// + /// \see getPlayingOffset + /// + //////////////////////////////////////////////////////////// + void setPlayingOffset(Time timeOffset); + + //////////////////////////////////////////////////////////// + /// \brief Get the current playing position of the stream + /// + /// \return Current playing position, from the beginning of the stream + /// + /// \see setPlayingOffset + /// + //////////////////////////////////////////////////////////// + Time getPlayingOffset() const; + + //////////////////////////////////////////////////////////// + /// \brief Set whether or not the stream should loop after reaching the end + /// + /// If set, the stream will restart from beginning after + /// reaching the end and so on, until it is stopped or + /// setLoop(false) is called. + /// The default looping state for streams is false. + /// + /// \param loop True to play in loop, false to play once + /// + /// \see getLoop + /// + //////////////////////////////////////////////////////////// + void setLoop(bool loop); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the stream is in loop mode + /// + /// \return True if the stream is looping, false otherwise + /// + /// \see setLoop + /// + //////////////////////////////////////////////////////////// + bool getLoop() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor is only meant to be called by derived classes. + /// + //////////////////////////////////////////////////////////// + SoundStream(); + + //////////////////////////////////////////////////////////// + /// \brief Define the audio stream parameters + /// + /// This function must be called by derived classes as soon + /// as they know the audio settings of the stream to play. + /// Any attempt to manipulate the stream (play(), ...) before + /// calling this function will fail. + /// It can be called multiple times if the settings of the + /// audio stream change, but only when the stream is stopped. + /// + /// \param channelCount Number of channels of the stream + /// \param sampleRate Sample rate, in samples per second + /// + //////////////////////////////////////////////////////////// + void initialize(unsigned int channelCount, unsigned int sampleRate); + + //////////////////////////////////////////////////////////// + /// \brief Request a new chunk of audio samples from the stream source + /// + /// This function must be overriden by derived classes to provide + /// the audio samples to play. It is called continuously by the + /// streaming loop, in a separate thread. + /// The source can choose to stop the streaming loop at any time, by + /// returning false to the caller. + /// + /// \param data Chunk of data to fill + /// + /// \return True to continue playback, false to stop + /// + //////////////////////////////////////////////////////////// + virtual bool onGetData(Chunk& data) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Change the current playing position in the stream source + /// + /// This function must be overriden by derived classes to + /// allow random seeking into the stream source. + /// + /// \param timeOffset New playing position, relative to the beginning of the stream + /// + //////////////////////////////////////////////////////////// + virtual void onSeek(Time timeOffset) = 0; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Function called as the entry point of the thread + /// + /// This function starts the streaming loop, and returns + /// only when the sound is stopped. + /// + //////////////////////////////////////////////////////////// + void streamData(); + + //////////////////////////////////////////////////////////// + /// \brief Fill a new buffer with audio samples, and append + /// it to the playing queue + /// + /// This function is called as soon as a buffer has been fully + /// consumed; it fills it again and inserts it back into the + /// playing queue. + /// + /// \param buffer Number of the buffer to fill (in [0, BufferCount]) + /// + /// \return True if the stream source has requested to stop, false otherwise + /// + //////////////////////////////////////////////////////////// + bool fillAndPushBuffer(unsigned int bufferNum); + + //////////////////////////////////////////////////////////// + /// \brief Fill the audio buffers and put them all into the playing queue + /// + /// This function is called when playing starts and the + /// playing queue is empty. + /// + /// \return True if the derived class has requested to stop, false otherwise + /// + //////////////////////////////////////////////////////////// + bool fillQueue(); + + //////////////////////////////////////////////////////////// + /// \brief Clear all the audio buffers and empty the playing queue + /// + /// This function is called when the stream is stopped. + /// + //////////////////////////////////////////////////////////// + void clearQueue(); + + enum + { + BufferCount = 3 ///< Number of audio buffers used by the streaming loop + }; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Thread m_thread; ///< Thread running the background tasks + bool m_isStreaming; ///< Streaming state (true = playing, false = stopped) + unsigned int m_buffers[BufferCount]; ///< Sound buffers used to store temporary audio data + unsigned int m_channelCount; ///< Number of channels (1 = mono, 2 = stereo, ...) + unsigned int m_sampleRate; ///< Frequency (samples / second) + Uint32 m_format; ///< Format of the internal sound buffers + bool m_loop; ///< Loop flag (true to loop, false to play once) + Uint64 m_samplesProcessed; ///< Number of buffers processed since beginning of the stream + bool m_endBuffers[BufferCount]; ///< Each buffer is marked as "end buffer" or not, for proper duration calculation +}; + +} // namespace sf + + +#endif // SFML_SOUNDSTREAM_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundStream +/// \ingroup audio +/// +/// Unlike audio buffers (see sf::SoundBuffer), audio streams +/// are never completely loaded in memory. Instead, the audio +/// data is acquired continuously while the stream is playing. +/// This behaviour allows to play a sound with no loading delay, +/// and keeps the memory consumption very low. +/// +/// Sound sources that need to be streamed are usually big files +/// (compressed audio musics that would eat hundreds of MB in memory) +/// or files that would take a lot of time to be received +/// (sounds played over the network). +/// +/// sf::SoundStream is a base class that doesn't care about the +/// stream source, which is left to the derived class. SFML provides +/// a built-in specialization for big files (see sf::Music). +/// No network stream source is provided, but you can write your own +/// by combining this class with the network module. +/// +/// A derived class has to override two virtual functions: +/// \li onGetData fills a new chunk of audio data to be played +/// \li onSeek changes the current playing position in the source +/// +/// It is important to note that each SoundStream is played in its +/// own separate thread, so that the streaming loop doesn't block the +/// rest of the program. In particular, the OnGetData and OnSeek +/// virtual functions may sometimes be called from this separate thread. +/// It is important to keep this in mind, because you may have to take +/// care of synchronization issues if you share data between threads. +/// +/// Usage example: +/// \code +/// class CustomStream : public sf::SoundStream +/// { +/// public : +/// +/// bool open(const std::string& location) +/// { +/// // Open the source and get audio settings +/// ... +/// unsigned int channelCount = ...; +/// unsigned int sampleRate = ...; +/// +/// // Initialize the stream -- important! +/// initialize(channelCount, sampleRate); +/// } +/// +/// private : +/// +/// virtual bool onGetData(Chunk& data) +/// { +/// // Fill the chunk with audio data from the stream source +/// data.samples = ...; +/// data.sampleCount = ...; +/// +/// // Return true to continue playing +/// return true; +/// } +/// +/// virtual void onSeek(Uint32 timeOffset) +/// { +/// // Change the current position in the stream source +/// ... +/// } +/// } +/// +/// // Usage +/// CustomStream stream; +/// stream.open("path/to/stream"); +/// stream.play(); +/// \endcode +/// +/// \see sf::Music +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Config.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Config.hpp new file mode 100644 index 0000000..933cd11 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Config.hpp @@ -0,0 +1,159 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CONFIG_HPP +#define SFML_CONFIG_HPP + + +//////////////////////////////////////////////////////////// +// Define the SFML version +//////////////////////////////////////////////////////////// +#define SFML_VERSION_MAJOR 2 +#define SFML_VERSION_MINOR 1 + + +//////////////////////////////////////////////////////////// +// Identify the operating system +//////////////////////////////////////////////////////////// +#if defined(_WIN32) || defined(__WIN32__) + + // Windows + #define SFML_SYSTEM_WINDOWS + #ifndef NOMINMAX + #define NOMINMAX + #endif + +#elif defined(linux) || defined(__linux) + + // Linux + #define SFML_SYSTEM_LINUX + +#elif defined(__APPLE__) || defined(MACOSX) || defined(macintosh) || defined(Macintosh) + + // MacOS + #define SFML_SYSTEM_MACOS + +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + + // FreeBSD + #define SFML_SYSTEM_FREEBSD + +#else + + // Unsupported system + #error This operating system is not supported by SFML library + +#endif + + +//////////////////////////////////////////////////////////// +// Define a portable debug macro +//////////////////////////////////////////////////////////// +#if !defined(NDEBUG) + + #define SFML_DEBUG + +#endif + + +//////////////////////////////////////////////////////////// +// Define helpers to create portable import / export macros for each module +//////////////////////////////////////////////////////////// +#if !defined(SFML_STATIC) + + #if defined(SFML_SYSTEM_WINDOWS) + + // Windows compilers need specific (and different) keywords for export and import + #define SFML_API_EXPORT __declspec(dllexport) + #define SFML_API_IMPORT __declspec(dllimport) + + // For Visual C++ compilers, we also need to turn off this annoying C4251 warning + #ifdef _MSC_VER + + #pragma warning(disable : 4251) + + #endif + + #else // Linux, FreeBSD, Mac OS X + + #if __GNUC__ >= 4 + + // GCC 4 has special keywords for showing/hidding symbols, + // the same keyword is used for both importing and exporting + #define SFML_API_EXPORT __attribute__ ((__visibility__ ("default"))) + #define SFML_API_IMPORT __attribute__ ((__visibility__ ("default"))) + + #else + + // GCC < 4 has no mechanism to explicitely hide symbols, everything's exported + #define SFML_API_EXPORT + #define SFML_API_IMPORT + + #endif + + #endif + +#else + + // Static build doesn't need import/export macros + #define SFML_API_EXPORT + #define SFML_API_IMPORT + +#endif + + +//////////////////////////////////////////////////////////// +// Define portable fixed-size types +//////////////////////////////////////////////////////////// +namespace sf +{ + // All "common" platforms use the same size for char, short and int + // (basically there are 3 types for 3 sizes, so no other match is possible), + // we can use them without doing any kind of check + + // 8 bits integer types + typedef signed char Int8; + typedef unsigned char Uint8; + + // 16 bits integer types + typedef signed short Int16; + typedef unsigned short Uint16; + + // 32 bits integer types + typedef signed int Int32; + typedef unsigned int Uint32; + + // 64 bits integer types + #if defined(_MSC_VER) + typedef signed __int64 Int64; + typedef unsigned __int64 Uint64; + #else + typedef signed long long Int64; + typedef unsigned long long Uint64; + #endif + +} // namespace sf + + +#endif // SFML_CONFIG_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics.hpp new file mode 100644 index 0000000..0dc6534 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics.hpp @@ -0,0 +1,62 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_GRAPHICS_HPP +#define SFML_GRAPHICS_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // SFML_GRAPHICS_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup graphics Graphics module +/// +/// 2D graphics module: sprites, text, shapes, ... +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/BlendMode.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/BlendMode.hpp new file mode 100644 index 0000000..4b12e11 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/BlendMode.hpp @@ -0,0 +1,46 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_BLENDMODE_HPP +#define SFML_BLENDMODE_HPP + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \ingroup graphics +/// \brief Available blending modes for drawing +/// +//////////////////////////////////////////////////////////// +enum BlendMode +{ + BlendAlpha, ///< Pixel = Source * Source.a + Dest * (1 - Source.a) + BlendAdd, ///< Pixel = Source + Dest + BlendMultiply, ///< Pixel = Source * Dest + BlendNone ///< Pixel = Source +}; + +} // namespace sf + + +#endif // SFML_BLENDMODE_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/CircleShape.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/CircleShape.hpp new file mode 100644 index 0000000..b82539e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/CircleShape.hpp @@ -0,0 +1,151 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CIRCLESHAPE_HPP +#define SFML_CIRCLESHAPE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Specialized shape representing a circle +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API CircleShape : public Shape +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param radius Radius of the circle + /// \param pointCount Number of points composing the circle + /// + //////////////////////////////////////////////////////////// + explicit CircleShape(float radius = 0, unsigned int pointCount = 30); + + //////////////////////////////////////////////////////////// + /// \brief Set the radius of the circle + /// + /// \param radius New radius of the circle + /// + /// \see getRadius + /// + //////////////////////////////////////////////////////////// + void setRadius(float radius); + + //////////////////////////////////////////////////////////// + /// \brief Get the radius of the circle + /// + /// \return Radius of the circle + /// + /// \see setRadius + /// + //////////////////////////////////////////////////////////// + float getRadius() const; + + //////////////////////////////////////////////////////////// + /// \brief Set the number of points of the circle + /// + /// \param count New number of points of the circle + /// + /// \see getPointCount + /// + //////////////////////////////////////////////////////////// + void setPointCount(unsigned int count); + + //////////////////////////////////////////////////////////// + /// \brief Get the number of points of the shape + /// + /// \return Number of points of the shape + /// + /// \see setPointCount + /// + //////////////////////////////////////////////////////////// + virtual unsigned int getPointCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get a point of the shape + /// + /// The result is undefined if \a index is out of the valid range. + /// + /// \param index Index of the point to get, in range [0 .. getPointCount() - 1] + /// + /// \return Index-th point of the shape + /// + //////////////////////////////////////////////////////////// + virtual Vector2f getPoint(unsigned int index) const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + float m_radius; ///< Radius of the circle + unsigned int m_pointCount; ///< Number of points composing the circle +}; + +} // namespace sf + + +#endif // SFML_CIRCLESHAPE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::CircleShape +/// \ingroup graphics +/// +/// This class inherits all the functions of sf::Transformable +/// (position, rotation, scale, bounds, ...) as well as the +/// functions of sf::Shape (outline, color, texture, ...). +/// +/// Usage example: +/// \code +/// sf::CircleShape circle; +/// circle.setRadius(150); +/// circle.setOutlineColor(sf::Color::Red); +/// circle.setOutlineThickness(5); +/// circle.setPosition(10, 20); +/// ... +/// window.draw(circle); +/// \endcode +/// +/// Since the graphics card can't draw perfect circles, we have to +/// fake them with multiple triangles connected to each other. The +/// "points count" property of sf::CircleShape defines how many of these +/// triangles to use, and therefore defines the quality of the circle. +/// +/// The number of points can also be used for another purpose; with +/// small numbers you can create any regular polygon shape: +/// equilateral triangle, square, pentagon, hexagon, ... +/// +/// \see sf::Shape, sf::RectangleShape, sf::ConvexShape +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Color.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Color.hpp new file mode 100644 index 0000000..fb2aa2d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Color.hpp @@ -0,0 +1,228 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_COLOR_HPP +#define SFML_COLOR_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility class for manpulating RGBA colors +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Color +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Constructs an opaque black color. It is equivalent to + /// sf::Color(0, 0, 0, 255). + /// + //////////////////////////////////////////////////////////// + Color(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the color from its 4 RGBA components + /// + /// \param red Red component (in the range [0, 255]) + /// \param green Green component (in the range [0, 255]) + /// \param blue Blue component (in the range [0, 255]) + /// \param alpha Alpha (opacity) component (in the range [0, 255]) + /// + //////////////////////////////////////////////////////////// + Color(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha = 255); + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const Color Black; ///< Black predefined color + static const Color White; ///< White predefined color + static const Color Red; ///< Red predefined color + static const Color Green; ///< Green predefined color + static const Color Blue; ///< Blue predefined color + static const Color Yellow; ///< Yellow predefined color + static const Color Magenta; ///< Magenta predefined color + static const Color Cyan; ///< Cyan predefined color + static const Color Transparent; ///< Transparent (black) predefined color + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Uint8 r; ///< Red component + Uint8 g; ///< Green component + Uint8 b; ///< Blue component + Uint8 a; ///< Alpha (opacity) component +}; + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the == operator +/// +/// This operator compares two colors and check if they are equal. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return True if colors are equal, false if they are different +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API bool operator ==(const Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the != operator +/// +/// This operator compares two colors and check if they are different. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return True if colors are different, false if they are equal +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API bool operator !=(const Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the binary + operator +/// +/// This operator returns the component-wise sum of two colors. +/// Components that exceed 255 are clamped to 255. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return Result of \a left + \a right +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Color operator +(const Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the binary * operator +/// +/// This operator returns the component-wise multiplication +/// (also called "modulation") of two colors. +/// Components are then divided by 255 so that the result is +/// still in the range [0, 255]. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return Result of \a left * \a right +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Color operator *(const Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the binary += operator +/// +/// This operator computes the component-wise sum of two colors, +/// and assigns the result to the left operand. +/// Components that exceed 255 are clamped to 255. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Color& operator +=(Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the binary *= operator +/// +/// This operator returns the component-wise multiplication +/// (also called "modulation") of two colors, and assigns +/// the result to the left operand. +/// Components are then divided by 255 so that the result is +/// still in the range [0, 255]. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Color& operator *=(Color& left, const Color& right); + +} // namespace sf + + +#endif // SFML_COLOR_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Color +/// \ingroup graphics +/// +/// sf::Color is a simple color class composed of 4 components: +/// \li Red +/// \li Green +/// \li Blue +/// \li Alpha (opacity) +/// +/// Each component is a public member, an unsigned integer in +/// the range [0, 255]. Thus, colors can be constructed and +/// manipulated very easily: +/// +/// \code +/// sf::Color color(255, 0, 0); // red +/// color.r = 0; // make it black +/// color.b = 128; // make it dark blue +/// \endcode +/// +/// The fourth component of colors, named "alpha", represents +/// the opacity of the color. A color with an alpha value of +/// 255 will be fully opaque, while an alpha value of 0 will +/// make a color fully transparent, whatever the value of the +/// other components is. +/// +/// The most common colors are already defined as static variables: +/// \code +/// sf::Color black = sf::Color::Black; +/// sf::Color white = sf::Color::White; +/// sf::Color red = sf::Color::Red; +/// sf::Color green = sf::Color::Green; +/// sf::Color blue = sf::Color::Blue; +/// sf::Color yellow = sf::Color::Yellow; +/// sf::Color magenta = sf::Color::Magenta; +/// sf::Color cyan = sf::Color::Cyan; +/// sf::Color transparent = sf::Color::Transparent; +/// \endcode +/// +/// Colors can also be added and modulated (multiplied) using the +/// overloaded operators + and *. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/ConvexShape.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/ConvexShape.hpp new file mode 100644 index 0000000..03af57f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/ConvexShape.hpp @@ -0,0 +1,150 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CONVEXSHAPE_HPP +#define SFML_CONVEXSHAPE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Specialized shape representing a convex polygon +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API ConvexShape : public Shape +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param pointCount Number of points of the polygon + /// + //////////////////////////////////////////////////////////// + explicit ConvexShape(unsigned int pointCount = 0); + + //////////////////////////////////////////////////////////// + /// \brief Set the number of points of the polygon + /// + /// \a count must be greater than 2 to define a valid shape. + /// + /// \param count New number of points of the polygon + /// + /// \see getPointCount + /// + //////////////////////////////////////////////////////////// + void setPointCount(unsigned int count); + + //////////////////////////////////////////////////////////// + /// \brief Get the number of points of the polygon + /// + /// \return Number of points of the polygon + /// + /// \see setPointCount + /// + //////////////////////////////////////////////////////////// + virtual unsigned int getPointCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Set the position of a point + /// + /// Don't forget that the polygon must remain convex, and + /// the points need to stay ordered! + /// setPointCount must be called first in order to set the total + /// number of points. The result is undefined if \a index is out + /// of the valid range. + /// + /// \param index Index of the point to change, in range [0 .. getPointCount() - 1] + /// \param point New position of the point + /// + /// \see getPoint + /// + //////////////////////////////////////////////////////////// + void setPoint(unsigned int index, const Vector2f& point); + + //////////////////////////////////////////////////////////// + /// \brief Get the position of a point + /// + /// The result is undefined if \a index is out of the valid range. + /// + /// \param index Index of the point to get, in range [0 .. getPointCount() - 1] + /// + /// \return Position of the index-th point of the polygon + /// + /// \see setPoint + /// + //////////////////////////////////////////////////////////// + virtual Vector2f getPoint(unsigned int index) const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_points; ///< Points composing the convex polygon +}; + +} // namespace sf + + +#endif // SFML_CONVEXSHAPE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::ConvexShape +/// \ingroup graphics +/// +/// This class inherits all the functions of sf::Transformable +/// (position, rotation, scale, bounds, ...) as well as the +/// functions of sf::Shape (outline, color, texture, ...). +/// +/// It is important to keep in mind that a convex shape must +/// always be... convex, otherwise it may not be drawn correctly. +/// Moreover, the points must be defined in order; using a random +/// order would result in an incorrect shape. +/// +/// Usage example: +/// \code +/// sf::ConvexShape polygon; +/// polygon.setPointCount(3); +/// polygon.setPoint(0, sf::Vector2f(0, 0)); +/// polygon.setPoint(1, sf::Vector2f(0, 10)); +/// polygon.setPoint(2, sf::Vector2f(25, 5)); +/// polygon.setOutlineColor(sf::Color::Red); +/// polygon.setOutlineThickness(5); +/// polygon.setPosition(10, 20); +/// ... +/// window.draw(polygon); +/// \endcode +/// +/// \see sf::Shape, sf::RectangleShape, sf::CircleShape +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Drawable.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Drawable.hpp new file mode 100644 index 0000000..accebfc --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Drawable.hpp @@ -0,0 +1,126 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_DRAWABLE_HPP +#define SFML_DRAWABLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class RenderTarget; + +//////////////////////////////////////////////////////////// +/// \brief Abstract base class for objects that can be drawn +/// to a render target +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Drawable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Drawable() {} + +protected : + + friend class RenderTarget; + + //////////////////////////////////////////////////////////// + /// \brief Draw the object to a render target + /// + /// This is a pure virtual function that has to be implemented + /// by the derived class to define how the drawable should be + /// drawn. + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const = 0; +}; + +} // namespace sf + + +#endif // SFML_DRAWABLE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Drawable +/// \ingroup graphics +/// +/// sf::Drawable is a very simple base class that allows objects +/// of derived classes to be drawn to a sf::RenderTarget. +/// +/// All you have to do in your derived class is to override the +/// draw virtual function. +/// +/// Note that inheriting from sf::Drawable is not mandatory, +/// but it allows this nice syntax "window.draw(object)" rather +/// than "object.draw(window)", which is more consistent with other +/// SFML classes. +/// +/// Example: +/// \code +/// class MyDrawable : public sf::Drawable +/// { +/// public : +/// +/// ... +/// +/// private : +/// +/// virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const +/// { +/// // You can draw other high-level objects +/// target.draw(m_sprite, states); +/// +/// // ... or use the low-level API +/// states.texture = &m_texture; +/// target.draw(m_vertices, states); +/// +/// // ... or draw with OpenGL directly +/// glBegin(GL_QUADS); +/// ... +/// glEnd(); +/// } +/// +/// sf::Sprite m_sprite; +/// sf::Texture m_texture; +/// sf::VertexArray m_vertices; +/// }; +/// \endcode +/// +/// \see sf::RenderTarget +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Export.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Export.hpp new file mode 100644 index 0000000..eb76ae8 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_GRAPHICS_EXPORT_HPP +#define SFML_GRAPHICS_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_GRAPHICS_EXPORTS) + + #define SFML_GRAPHICS_API SFML_API_EXPORT + +#else + + #define SFML_GRAPHICS_API SFML_API_IMPORT + +#endif + + +#endif // SFML_GRAPHICS_EXPORT_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Font.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Font.hpp new file mode 100644 index 0000000..d3b1955 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Font.hpp @@ -0,0 +1,361 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_FONT_HPP +#define SFML_FONT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Class for loading and manipulating character fonts +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Font +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor defines an empty font + /// + //////////////////////////////////////////////////////////// + Font(); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + Font(const Font& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// Cleans up all the internal resources used by the font + /// + //////////////////////////////////////////////////////////// + ~Font(); + + //////////////////////////////////////////////////////////// + /// \brief Load the font from a file + /// + /// The supported font formats are: TrueType, Type 1, CFF, + /// OpenType, SFNT, X11 PCF, Windows FNT, BDF, PFR and Type 42. + /// Note that this function know nothing about the standard + /// fonts installed on the user's system, thus you can't + /// load them directly. + /// + /// \param filename Path of the font file to load + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromMemory, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename); + + //////////////////////////////////////////////////////////// + /// \brief Load the font from a file in memory + /// + /// The supported font formats are: TrueType, Type 1, CFF, + /// OpenType, SFNT, X11 PCF, Windows FNT, BDF, PFR and Type 42. + /// Warning: SFML cannot preload all the font data in this + /// function, so the buffer pointed by \a data has to remain + /// valid as long as the font is used. + /// + /// \param data Pointer to the file data in memory + /// \param sizeInBytes Size of the data to load, in bytes + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const void* data, std::size_t sizeInBytes); + + //////////////////////////////////////////////////////////// + /// \brief Load the font from a custom stream + /// + /// The supported font formats are: TrueType, Type 1, CFF, + /// OpenType, SFNT, X11 PCF, Windows FNT, BDF, PFR and Type 42. + /// Warning: SFML cannot preload all the font data in this + /// function, so the contents of \a stream have to remain + /// valid as long as the font is used. + /// + /// \param stream Source stream to read from + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& stream); + + //////////////////////////////////////////////////////////// + /// \brief Retrieve a glyph of the font + /// + /// \param codePoint Unicode code point of the character to get + /// \param characterSize Reference character size + /// \param bold Retrieve the bold version or the regular one? + /// + /// \return The glyph corresponding to \a codePoint and \a characterSize + /// + //////////////////////////////////////////////////////////// + const Glyph& getGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the kerning offset of two glyphs + /// + /// The kerning is an extra offset (negative) to apply between two + /// glyphs when rendering them, to make the pair look more "natural". + /// For example, the pair "AV" have a special kerning to make them + /// closer than other characters. Most of the glyphs pairs have a + /// kerning offset of zero, though. + /// + /// \param first Unicode code point of the first character + /// \param second Unicode code point of the second character + /// \param characterSize Reference character size + /// + /// \return Kerning value for \a first and \a second, in pixels + /// + //////////////////////////////////////////////////////////// + int getKerning(Uint32 first, Uint32 second, unsigned int characterSize) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the line spacing + /// + /// Line spacing is the vertical offset to apply between two + /// consecutive lines of text. + /// + /// \param characterSize Reference character size + /// + /// \return Line spacing, in pixels + /// + //////////////////////////////////////////////////////////// + int getLineSpacing(unsigned int characterSize) const; + + //////////////////////////////////////////////////////////// + /// \brief Retrieve the texture containing the loaded glyphs of a certain size + /// + /// The contents of the returned texture changes as more glyphs + /// are requested, thus it is not very relevant. It is mainly + /// used internally by sf::Text. + /// + /// \param characterSize Reference character size + /// + /// \return Texture containing the glyphs of the requested size + /// + //////////////////////////////////////////////////////////// + const Texture& getTexture(unsigned int characterSize) const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + Font& operator =(const Font& right); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Structure defining a row of glyphs + /// + //////////////////////////////////////////////////////////// + struct Row + { + Row(unsigned int rowTop, unsigned int rowHeight) : width(0), top(rowTop), height(rowHeight) {} + + unsigned int width; ///< Current width of the row + unsigned int top; ///< Y position of the row into the texture + unsigned int height; ///< Height of the row + }; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map GlyphTable; ///< Table mapping a codepoint to its glyph + + //////////////////////////////////////////////////////////// + /// \brief Structure defining a page of glyphs + /// + //////////////////////////////////////////////////////////// + struct Page + { + Page(); + + GlyphTable glyphs; ///< Table mapping code points to their corresponding glyph + sf::Texture texture; ///< Texture containing the pixels of the glyphs + unsigned int nextRow; ///< Y position of the next new row in the texture + std::vector rows; ///< List containing the position of all the existing rows + }; + + //////////////////////////////////////////////////////////// + /// \brief Free all the internal resources + /// + //////////////////////////////////////////////////////////// + void cleanup(); + + //////////////////////////////////////////////////////////// + /// \brief Load a new glyph and store it in the cache + /// + /// \param codePoint Unicode code point of the character to load + /// \param characterSize Reference character size + /// \param bold Retrieve the bold version or the regular one? + /// + /// \return The glyph corresponding to \a codePoint and \a characterSize + /// + //////////////////////////////////////////////////////////// + Glyph loadGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const; + + //////////////////////////////////////////////////////////// + /// \brief Find a suitable rectangle within the texture for a glyph + /// + /// \param page Page of glyphs to search in + /// \param width Width of the rectangle + /// \param height Height of the rectangle + /// + /// \return Found rectangle within the texture + /// + //////////////////////////////////////////////////////////// + IntRect findGlyphRect(Page& page, unsigned int width, unsigned int height) const; + + //////////////////////////////////////////////////////////// + /// \brief Make sure that the given size is the current one + /// + /// \param characterSize Reference character size + /// + /// \return True on success, false if any error happened + /// + //////////////////////////////////////////////////////////// + bool setCurrentSize(unsigned int characterSize) const; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map PageTable; ///< Table mapping a character size to its page (texture) + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + void* m_library; ///< Pointer to the internal library interface (it is typeless to avoid exposing implementation details) + void* m_face; ///< Pointer to the internal font face (it is typeless to avoid exposing implementation details) + void* m_streamRec; ///< Pointer to the stream rec instance (it is typeless to avoid exposing implementation details) + int* m_refCount; ///< Reference counter used by implicit sharing + mutable PageTable m_pages; ///< Table containing the glyphs pages by character size + mutable std::vector m_pixelBuffer; ///< Pixel buffer holding a glyph's pixels before being written to the texture +}; + +} // namespace sf + + +#endif // SFML_FONT_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Font +/// \ingroup graphics +/// +/// Fonts can be loaded from a file, from memory or from a custom +/// stream, and supports the most common types of fonts. See +/// the loadFromFile function for the complete list of supported formats. +/// +/// Once it is loaded, a sf::Font instance provides three +/// types of information about the font: +/// \li Global metrics, such as the line spacing +/// \li Per-glyph metrics, such as bounding box or kerning +/// \li Pixel representation of glyphs +/// +/// Fonts alone are not very useful: they hold the font data +/// but cannot make anything useful of it. To do so you need to +/// use the sf::Text class, which is able to properly output text +/// with several options such as character size, style, color, +/// position, rotation, etc. +/// This separation allows more flexibility and better performances: +/// indeed a sf::Font is a heavy resource, and any operation on it +/// is slow (often too slow for real-time applications). On the other +/// side, a sf::Text is a lightweight object which can combine the +/// glyphs data and metrics of a sf::Font to display any text on a +/// render target. +/// Note that it is also possible to bind several sf::Text instances +/// to the same sf::Font. +/// +/// It is important to note that the sf::Text instance doesn't +/// copy the font that it uses, it only keeps a reference to it. +/// Thus, a sf::Font must not be destructed while it is +/// used by a sf::Text (i.e. never write a function that +/// uses a local sf::Font instance for creating a text). +/// +/// Usage example: +/// \code +/// // Declare a new font +/// sf::Font font; +/// +/// // Load it from a file +/// if (!font.loadFromFile("arial.ttf")) +/// { +/// // error... +/// } +/// +/// // Create a text which uses our font +/// sf::Text text1; +/// text1.setFont(font); +/// text1.setCharacterSize(30); +/// text1.setStyle(sf::Text::Regular); +/// +/// // Create another text using the same font, but with different parameters +/// sf::Text text2; +/// text2.setFont(font); +/// text2.setCharacterSize(50); +/// text1.setStyle(sf::Text::Italic); +/// \endcode +/// +/// Apart from loading font files, and passing them to instances +/// of sf::Text, you should normally not have to deal directly +/// with this class. However, it may be useful to access the +/// font metrics or rasterized glyphs for advanced usage. +/// +/// \see sf::Text +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Glyph.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Glyph.hpp new file mode 100644 index 0000000..d97616f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Glyph.hpp @@ -0,0 +1,79 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_GLYPH_HPP +#define SFML_GLYPH_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Structure describing a glyph +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Glyph +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Glyph() : advance(0) {} + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + int advance; ///< Offset to move horizontically to the next character + IntRect bounds; ///< Bounding rectangle of the glyph, in coordinates relative to the baseline + IntRect textureRect; ///< Texture coordinates of the glyph inside the font's texture +}; + +} // namespace sf + + +#endif // SFML_GLYPH_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Glyph +/// \ingroup graphics +/// +/// A glyph is the visual representation of a character. +/// +/// The sf::Glyph structure provides the information needed +/// to handle the glyph: +/// \li its coordinates in the font's texture +/// \li its bounding rectangle +/// \li the offset to apply to get the starting position of the next glyph +/// +/// \see sf::Font +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Image.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Image.hpp new file mode 100644 index 0000000..0b61d6c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Image.hpp @@ -0,0 +1,318 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_IMAGE_HPP +#define SFML_IMAGE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Class for loading, manipulating and saving images +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Image +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty image. + /// + //////////////////////////////////////////////////////////// + Image(); + + //////////////////////////////////////////////////////////// + /// \brief Create the image and fill it with a unique color + /// + /// \param width Width of the image + /// \param height Height of the image + /// \param color Fill color + /// + //////////////////////////////////////////////////////////// + void create(unsigned int width, unsigned int height, const Color& color = Color(0, 0, 0)); + + //////////////////////////////////////////////////////////// + /// \brief Create the image from an array of pixels + /// + /// The \a pixel array is assumed to contain 32-bits RGBA pixels, + /// and have the given \a width and \a height. If not, this is + /// an undefined behaviour. + /// If \a pixels is null, an empty image is created. + /// + /// \param width Width of the image + /// \param height Height of the image + /// \param pixels Array of pixels to copy to the image + /// + //////////////////////////////////////////////////////////// + void create(unsigned int width, unsigned int height, const Uint8* pixels); + + //////////////////////////////////////////////////////////// + /// \brief Load the image from a file on disk + /// + /// The supported image formats are bmp, png, tga, jpg, gif, + /// psd, hdr and pic. Some format options are not supported, + /// like progressive jpeg. + /// If this function fails, the image is left unchanged. + /// + /// \param filename Path of the image file to load + /// + /// \return True if loading was successful + /// + /// \see loadFromMemory, loadFromStream, saveToFile + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename); + + //////////////////////////////////////////////////////////// + /// \brief Load the image from a file in memory + /// + /// The supported image formats are bmp, png, tga, jpg, gif, + /// psd, hdr and pic. Some format options are not supported, + /// like progressive jpeg. + /// If this function fails, the image is left unchanged. + /// + /// \param data Pointer to the file data in memory + /// \param size Size of the data to load, in bytes + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const void* data, std::size_t size); + + //////////////////////////////////////////////////////////// + /// \brief Load the image from a custom stream + /// + /// The supported image formats are bmp, png, tga, jpg, gif, + /// psd, hdr and pic. Some format options are not supported, + /// like progressive jpeg. + /// If this function fails, the image is left unchanged. + /// + /// \param stream Source stream to read from + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& stream); + + //////////////////////////////////////////////////////////// + /// \brief Save the image to a file on disk + /// + /// The format of the image is automatically deduced from + /// the extension. The supported image formats are bmp, png, + /// tga and jpg. The destination file is overwritten + /// if it already exists. This function fails if the image is empty. + /// + /// \param filename Path of the file to save + /// + /// \return True if saving was successful + /// + /// \see create, loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool saveToFile(const std::string& filename) const; + + //////////////////////////////////////////////////////////// + /// \brief Return the size (width and height) of the image + /// + /// \return Size of the image, in pixels + /// + //////////////////////////////////////////////////////////// + Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Create a transparency mask from a specified color-key + /// + /// This function sets the alpha value of every pixel matching + /// the given color to \a alpha (0 by default), so that they + /// become transparent. + /// + /// \param color Color to make transparent + /// \param alpha Alpha value to assign to transparent pixels + /// + //////////////////////////////////////////////////////////// + void createMaskFromColor(const Color& color, Uint8 alpha = 0); + + //////////////////////////////////////////////////////////// + /// \brief Copy pixels from another image onto this one + /// + /// This function does a slow pixel copy and should not be + /// used intensively. It can be used to prepare a complex + /// static image from several others, but if you need this + /// kind of feature in real-time you'd better use sf::RenderTexture. + /// + /// If \a sourceRect is empty, the whole image is copied. + /// If \a applyAlpha is set to true, the transparency of + /// source pixels is applied. If it is false, the pixels are + /// copied unchanged with their alpha value. + /// + /// \param source Source image to copy + /// \param destX X coordinate of the destination position + /// \param destY Y coordinate of the destination position + /// \param sourceRect Sub-rectangle of the source image to copy + /// \param applyAlpha Should the copy take in account the source transparency? + /// + //////////////////////////////////////////////////////////// + void copy(const Image& source, unsigned int destX, unsigned int destY, const IntRect& sourceRect = IntRect(0, 0, 0, 0), bool applyAlpha = false); + + //////////////////////////////////////////////////////////// + /// \brief Change the color of a pixel + /// + /// This function doesn't check the validity of the pixel + /// coordinates, using out-of-range values will result in + /// an undefined behaviour. + /// + /// \param x X coordinate of pixel to change + /// \param y Y coordinate of pixel to change + /// \param color New color of the pixel + /// + /// \see getPixel + /// + //////////////////////////////////////////////////////////// + void setPixel(unsigned int x, unsigned int y, const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Get the color of a pixel + /// + /// This function doesn't check the validity of the pixel + /// coordinates, using out-of-range values will result in + /// an undefined behaviour. + /// + /// \param x X coordinate of pixel to get + /// \param y Y coordinate of pixel to get + /// + /// \return Color of the pixel at coordinates (x, y) + /// + /// \see setPixel + /// + //////////////////////////////////////////////////////////// + Color getPixel(unsigned int x, unsigned int y) const; + + //////////////////////////////////////////////////////////// + /// \brief Get a read-only pointer to the array of pixels + /// + /// The returned value points to an array of RGBA pixels made of + /// 8 bits integers components. The size of the array is + /// width * height * 4 (getSize().x * getSize().y * 4). + /// Warning: the returned pointer may become invalid if you + /// modify the image, so you should never store it for too long. + /// If the image is empty, a null pointer is returned. + /// + /// \return Read-only pointer to the array of pixels + /// + //////////////////////////////////////////////////////////// + const Uint8* getPixelsPtr() const; + + //////////////////////////////////////////////////////////// + /// \brief Flip the image horizontally (left <-> right) + /// + //////////////////////////////////////////////////////////// + void flipHorizontally(); + + //////////////////////////////////////////////////////////// + /// \brief Flip the image vertically (top <-> bottom) + /// + //////////////////////////////////////////////////////////// + void flipVertically(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2u m_size; ///< Image size + std::vector m_pixels; ///< Pixels of the image +}; + +} // namespace sf + + +#endif // SFML_IMAGE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Image +/// \ingroup graphics +/// +/// sf::Image is an abstraction to manipulate images +/// as bidimensional arrays of pixels. The class provides +/// functions to load, read, write and save pixels, as well +/// as many other useful functions. +/// +/// sf::Image can handle a unique internal representation of +/// pixels, which is RGBA 32 bits. This means that a pixel +/// must be composed of 8 bits red, green, blue and alpha +/// channels -- just like a sf::Color. +/// All the functions that return an array of pixels follow +/// this rule, and all parameters that you pass to sf::Image +/// functions (such as loadFromPixels) must use this +/// representation as well. +/// +/// A sf::Image can be copied, but it is a heavy resource and +/// if possible you should always use [const] references to +/// pass or return them to avoid useless copies. +/// +/// Usage example: +/// \code +/// // Load an image file from a file +/// sf::Image background; +/// if (!background.loadFromFile("background.jpg")) +/// return -1; +/// +/// // Create a 20x20 image filled with black color +/// sf::Image image; +/// image.create(20, 20, sf::Color::Black); +/// +/// // Copy image1 on image2 at position (10, 10) +/// image.copy(background, 10, 10); +/// +/// // Make the top-left pixel transparent +/// sf::Color color = image.getPixel(0, 0); +/// color.a = 0; +/// image.setPixel(0, 0, color); +/// +/// // Save the image to a file +/// if (!image.saveToFile("result.png")) +/// return -1; +/// \endcode +/// +/// \see sf::Texture +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/PrimitiveType.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/PrimitiveType.hpp new file mode 100644 index 0000000..8f3cfb2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/PrimitiveType.hpp @@ -0,0 +1,53 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_PRIMITIVETYPE_HPP +#define SFML_PRIMITIVETYPE_HPP + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \ingroup graphics +/// \brief Types of primitives that a sf::VertexArray can render +/// +/// Points and lines have no area, therefore their thickness +/// will always be 1 pixel, regarldess the current transform +/// and view. +/// +//////////////////////////////////////////////////////////// +enum PrimitiveType +{ + Points, ///< List of individual points + Lines, ///< List of individual lines + LinesStrip, ///< List of connected lines, a point uses the previous point to form a line + Triangles, ///< List of individual triangles + TrianglesStrip, ///< List of connected triangles, a point uses the two previous points to form a triangle + TrianglesFan, ///< List of connected triangles, a point uses the common center and the previous point to form a triangle + Quads ///< List of individual quads +}; + +} // namespace sf + + +#endif // SFML_PRIMITIVETYPE_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Rect.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Rect.hpp new file mode 100644 index 0000000..3a3acc7 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Rect.hpp @@ -0,0 +1,248 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RECT_HPP +#define SFML_RECT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility class for manipulating 2D axis aligned rectangles +/// +//////////////////////////////////////////////////////////// +template +class Rect +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty rectangle (it is equivalent to calling + /// Rect(0, 0, 0, 0)). + /// + //////////////////////////////////////////////////////////// + Rect(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the rectangle from its coordinates + /// + /// Be careful, the last two parameters are the width + /// and height, not the right and bottom coordinates! + /// + /// \param rectLeft Left coordinate of the rectangle + /// \param rectTop Top coordinate of the rectangle + /// \param rectWidth Width of the rectangle + /// \param rectHeight Height of the rectangle + /// + //////////////////////////////////////////////////////////// + Rect(T rectLeft, T rectTop, T rectWidth, T rectHeight); + + //////////////////////////////////////////////////////////// + /// \brief Construct the rectangle from position and size + /// + /// Be careful, the last parameter is the size, + /// not the bottom-right corner! + /// + /// \param position Position of the top-left corner of the rectangle + /// \param size Size of the rectangle + /// + //////////////////////////////////////////////////////////// + Rect(const Vector2& position, const Vector2& size); + + //////////////////////////////////////////////////////////// + /// \brief Construct the rectangle from another type of rectangle + /// + /// This constructor doesn't replace the copy constructor, + /// it's called only when U != T. + /// A call to this constructor will fail to compile if U + /// is not convertible to T. + /// + /// \param rectangle Rectangle to convert + /// + //////////////////////////////////////////////////////////// + template + explicit Rect(const Rect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Check if a point is inside the rectangle's area + /// + /// \param x X coordinate of the point to test + /// \param y Y coordinate of the point to test + /// + /// \return True if the point is inside, false otherwise + /// + /// \see intersects + /// + //////////////////////////////////////////////////////////// + bool contains(T x, T y) const; + + //////////////////////////////////////////////////////////// + /// \brief Check if a point is inside the rectangle's area + /// + /// \param point Point to test + /// + /// \return True if the point is inside, false otherwise + /// + /// \see intersects + /// + //////////////////////////////////////////////////////////// + bool contains(const Vector2& point) const; + + //////////////////////////////////////////////////////////// + /// \brief Check the intersection between two rectangles + /// + /// \param rectangle Rectangle to test + /// + /// \return True if rectangles overlap, false otherwise + /// + /// \see contains + /// + //////////////////////////////////////////////////////////// + bool intersects(const Rect& rectangle) const; + + //////////////////////////////////////////////////////////// + /// \brief Check the intersection between two rectangles + /// + /// This overload returns the overlapped rectangle in the + /// \a intersection parameter. + /// + /// \param rectangle Rectangle to test + /// \param intersection Rectangle to be filled with the intersection + /// + /// \return True if rectangles overlap, false otherwise + /// + /// \see contains + /// + //////////////////////////////////////////////////////////// + bool intersects(const Rect& rectangle, Rect& intersection) const; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + T left; ///< Left coordinate of the rectangle + T top; ///< Top coordinate of the rectangle + T width; ///< Width of the rectangle + T height; ///< Height of the rectangle +}; + +//////////////////////////////////////////////////////////// +/// \relates Rect +/// \brief Overload of binary operator == +/// +/// This operator compares strict equality between two rectangles. +/// +/// \param left Left operand (a rectangle) +/// \param right Right operand (a rectangle) +/// +/// \return True if \a left is equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator ==(const Rect& left, const Rect& right); + +//////////////////////////////////////////////////////////// +/// \relates Rect +/// \brief Overload of binary operator != +/// +/// This operator compares strict difference between two rectangles. +/// +/// \param left Left operand (a rectangle) +/// \param right Right operand (a rectangle) +/// +/// \return True if \a left is not equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator !=(const Rect& left, const Rect& right); + +#include + +// Create typedefs for the most common types +typedef Rect IntRect; +typedef Rect FloatRect; + +} // namespace sf + + +#endif // SFML_RECT_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Rect +/// \ingroup graphics +/// +/// A rectangle is defined by its top-left corner and its size. +/// It is a very simple class defined for convenience, so +/// its member variables (left, top, width and height) are public +/// and can be accessed directly, just like the vector classes +/// (Vector2 and Vector3). +/// +/// To keep things simple, sf::Rect doesn't define +/// functions to emulate the properties that are not directly +/// members (such as right, bottom, center, etc.), it rather +/// only provides intersection functions. +/// +/// sf::Rect uses the usual rules for its boundaries: +/// \li The left and top edges are included in the rectangle's area +/// \li The right (left + width) and bottom (top + height) edges are excluded from the rectangle's area +/// +/// This means that sf::IntRect(0, 0, 1, 1) and sf::IntRect(1, 1, 1, 1) +/// don't intersect. +/// +/// sf::Rect is a template and may be used with any numeric type, but +/// for simplicity the instanciations used by SFML are typedefed: +/// \li sf::Rect is sf::IntRect +/// \li sf::Rect is sf::FloatRect +/// +/// So that you don't have to care about the template syntax. +/// +/// Usage example: +/// \code +/// // Define a rectangle, located at (0, 0) with a size of 20x5 +/// sf::IntRect r1(0, 0, 20, 5); +/// +/// // Define another rectangle, located at (4, 2) with a size of 18x10 +/// sf::Vector2i position(4, 2); +/// sf::Vector2i size(18, 10); +/// sf::IntRect r2(position, size); +/// +/// // Test intersections with the point (3, 1) +/// bool b1 = r1.contains(3, 1); // true +/// bool b2 = r2.contains(3, 1); // false +/// +/// // Test the intersection between r1 and r2 +/// sf::IntRect result; +/// bool b3 = r1.intersects(r2, result); // true +/// // result == (4, 2, 16, 3) +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Rect.inl b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Rect.inl new file mode 100644 index 0000000..0a97b99 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Rect.inl @@ -0,0 +1,159 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +template +Rect::Rect() : +left (0), +top (0), +width (0), +height(0) +{ + +} + + +//////////////////////////////////////////////////////////// +template +Rect::Rect(T rectLeft, T rectTop, T rectWidth, T rectHeight) : +left (rectLeft), +top (rectTop), +width (rectWidth), +height(rectHeight) +{ + +} + + +//////////////////////////////////////////////////////////// +template +Rect::Rect(const Vector2& position, const Vector2& size) : +left (position.x), +top (position.y), +width (size.x), +height(size.y) +{ + +} + + +//////////////////////////////////////////////////////////// +template +template +Rect::Rect(const Rect& rectangle) : +left (static_cast(rectangle.left)), +top (static_cast(rectangle.top)), +width (static_cast(rectangle.width)), +height(static_cast(rectangle.height)) +{ +} + + +//////////////////////////////////////////////////////////// +template +bool Rect::contains(T x, T y) const +{ + // Rectangles with negative dimensions are allowed, so we must handle them correctly + + // Compute the real min and max of the rectangle on both axes + T minX = std::min(left, left + width); + T maxX = std::max(left, left + width); + T minY = std::min(top, top + height); + T maxY = std::max(top, top + height); + + return (x >= minX) && (x < maxX) && (y >= minY) && (y < maxY); +} + + +//////////////////////////////////////////////////////////// +template +bool Rect::contains(const Vector2& point) const +{ + return contains(point.x, point.y); +} + + +//////////////////////////////////////////////////////////// +template +bool Rect::intersects(const Rect& rectangle) const +{ + Rect intersection; + return intersects(rectangle, intersection); +} + + +//////////////////////////////////////////////////////////// +template +bool Rect::intersects(const Rect& rectangle, Rect& intersection) const +{ + // Rectangles with negative dimensions are allowed, so we must handle them correctly + + // Compute the min and max of the first rectangle on both axes + T r1MinX = std::min(left, left + width); + T r1MaxX = std::max(left, left + width); + T r1MinY = std::min(top, top + height); + T r1MaxY = std::max(top, top + height); + + // Compute the min and max of the second rectangle on both axes + T r2MinX = std::min(rectangle.left, rectangle.left + rectangle.width); + T r2MaxX = std::max(rectangle.left, rectangle.left + rectangle.width); + T r2MinY = std::min(rectangle.top, rectangle.top + rectangle.height); + T r2MaxY = std::max(rectangle.top, rectangle.top + rectangle.height); + + // Compute the intersection boundaries + T interLeft = std::max(r1MinX, r2MinX); + T interTop = std::max(r1MinY, r2MinY); + T interRight = std::min(r1MaxX, r2MaxX); + T interBottom = std::min(r1MaxY, r2MaxY); + + // If the intersection is valid (positive non zero area), then there is an intersection + if ((interLeft < interRight) && (interTop < interBottom)) + { + intersection = Rect(interLeft, interTop, interRight - interLeft, interBottom - interTop); + return true; + } + else + { + intersection = Rect(0, 0, 0, 0); + return false; + } +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator ==(const Rect& left, const Rect& right) +{ + return (left.left == right.left) && (left.width == right.width) && + (left.top == right.top) && (left.height == right.height); +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator !=(const Rect& left, const Rect& right) +{ + return !(left == right); +} diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RectangleShape.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RectangleShape.hpp new file mode 100644 index 0000000..2140e91 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RectangleShape.hpp @@ -0,0 +1,128 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RECTANGLESHAPE_HPP +#define SFML_RECTANGLESHAPE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Specialized shape representing a rectangle +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RectangleShape : public Shape +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param size Size of the rectangle + /// + //////////////////////////////////////////////////////////// + explicit RectangleShape(const Vector2f& size = Vector2f(0, 0)); + + //////////////////////////////////////////////////////////// + /// \brief Set the size of the rectangle + /// + /// \param size New size of the rectangle + /// + /// \see getSize + /// + //////////////////////////////////////////////////////////// + void setSize(const Vector2f& size); + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the rectangle + /// + /// \return Size of the rectangle + /// + /// \see setSize + /// + //////////////////////////////////////////////////////////// + const Vector2f& getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the number of points defining the shape + /// + /// \return Number of points of the shape + /// + //////////////////////////////////////////////////////////// + virtual unsigned int getPointCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get a point of the shape + /// + /// The result is undefined if \a index is out of the valid range. + /// + /// \param index Index of the point to get, in range [0 .. getPointCount() - 1] + /// + /// \return Index-th point of the shape + /// + //////////////////////////////////////////////////////////// + virtual Vector2f getPoint(unsigned int index) const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2f m_size; ///< Size of the rectangle +}; + +} // namespace sf + + +#endif // SFML_RECTANGLESHAPE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RectangleShape +/// \ingroup graphics +/// +/// This class inherits all the functions of sf::Transformable +/// (position, rotation, scale, bounds, ...) as well as the +/// functions of sf::Shape (outline, color, texture, ...). +/// +/// Usage example: +/// \code +/// sf::RectangleShape rectangle; +/// rectangle.setSize(sf::Vector2f(100, 50)); +/// rectangle.setOutlineColor(sf::Color::Red); +/// rectangle.setOutlineThickness(5); +/// rectangle.setPosition(10, 20); +/// ... +/// window.draw(rectangle); +/// \endcode +/// +/// \see sf::Shape, sf::CircleShape, sf::ConvexShape +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderStates.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderStates.hpp new file mode 100644 index 0000000..bf4183c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderStates.hpp @@ -0,0 +1,174 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RENDERSTATES_HPP +#define SFML_RENDERSTATES_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class Shader; +class Texture; + +//////////////////////////////////////////////////////////// +/// \brief Define the states used for drawing to a RenderTarget +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RenderStates +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Constructing a default set of render states is equivalent + /// to using sf::RenderStates::Default. + /// The default set defines: + /// \li the BlendAlpha blend mode + /// \li the identity transform + /// \li a null texture + /// \li a null shader + /// + //////////////////////////////////////////////////////////// + RenderStates(); + + //////////////////////////////////////////////////////////// + /// \brief Construct a default set of render states with a custom blend mode + /// + /// \param theBlendMode Blend mode to use + /// + //////////////////////////////////////////////////////////// + RenderStates(BlendMode theBlendMode); + + //////////////////////////////////////////////////////////// + /// \brief Construct a default set of render states with a custom transform + /// + /// \param theTransform Transform to use + /// + //////////////////////////////////////////////////////////// + RenderStates(const Transform& theTransform); + + //////////////////////////////////////////////////////////// + /// \brief Construct a default set of render states with a custom texture + /// + /// \param theTexture Texture to use + /// + //////////////////////////////////////////////////////////// + RenderStates(const Texture* theTexture); + + //////////////////////////////////////////////////////////// + /// \brief Construct a default set of render states with a custom shader + /// + /// \param theShader Shader to use + /// + //////////////////////////////////////////////////////////// + RenderStates(const Shader* theShader); + + //////////////////////////////////////////////////////////// + /// \brief Construct a set of render states with all its attributes + /// + /// \param theBlendMode Blend mode to use + /// \param theTransform Transform to use + /// \param theTexture Texture to use + /// \param theShader Shader to use + /// + //////////////////////////////////////////////////////////// + RenderStates(BlendMode theBlendMode, const Transform& theTransform, + const Texture* theTexture, const Shader* theShader); + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const RenderStates Default; ///< Special instance holding the default render states + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + BlendMode blendMode; ///< Blending mode + Transform transform; ///< Transform + const Texture* texture; ///< Texture + const Shader* shader; ///< Shader +}; + +} // namespace sf + + +#endif // SFML_RENDERSTATES_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RenderStates +/// \ingroup graphics +/// +/// There are four global states that can be applied to +/// the drawn objects: +/// \li the blend mode: how pixels of the object are blended with the background +/// \li the transform: how the object is positioned/rotated/scaled +/// \li the texture: what image is mapped to the object +/// \li the shader: what custom effect is applied to the object +/// +/// High-level objects such as sprites or text force some of +/// these states when they are drawn. For example, a sprite +/// will set its own texture, so that you don't have to care +/// about it when drawing the sprite. +/// +/// The transform is a special case: sprites, texts and shapes +/// (and it's a good idea to do it with your own drawable classes +/// too) combine their transform with the one that is passed in the +/// RenderStates structure. So that you can use a "global" transform +/// on top of each object's transform. +/// +/// Most objects, especially high-level drawables, can be drawn +/// directly without defining render states explicitely -- the +/// default set of states is ok in most cases. +/// \code +/// window.Draw(sprite); +/// \endcode +/// +/// If you want to use a single specific render state, +/// for example a shader, you can pass it directly to the Draw +/// function: sf::RenderStates has an implicit one-argument +/// constructor for each state. +/// \code +/// window.draw(sprite, shader); +/// \endcode +/// +/// When you're inside the Draw function of a drawable +/// object (inherited from sf::Drawable), you can +/// either pass the render states unmodified, or change +/// some of them. +/// For example, a transformable object will combine the +/// current transform with its own transform. A sprite will +/// set its texture. Etc. +/// +/// \see sf::RenderTarget, sf::Drawable +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderTarget.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderTarget.hpp new file mode 100644 index 0000000..5f69e7f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderTarget.hpp @@ -0,0 +1,451 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RENDERTARGET_HPP +#define SFML_RENDERTARGET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +class Drawable; + +//////////////////////////////////////////////////////////// +/// \brief Base class for all render targets (window, texture, ...) +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RenderTarget : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~RenderTarget(); + + //////////////////////////////////////////////////////////// + /// \brief Clear the entire target with a single color + /// + /// This function is usually called once every frame, + /// to clear the previous contents of the target. + /// + /// \param color Fill color to use to clear the render target + /// + //////////////////////////////////////////////////////////// + void clear(const Color& color = Color(0, 0, 0, 255)); + + //////////////////////////////////////////////////////////// + /// \brief Change the current active view + /// + /// The view is like a 2D camera, it controls which part of + /// the 2D scene is visible, and how it is viewed in the + /// render-target. + /// The new view will affect everything that is drawn, until + /// another view is set. + /// The render target keeps its own copy of the view object, + /// so it is not necessary to keep the original one alive + /// after calling this function. + /// To restore the original view of the target, you can pass + /// the result of getDefaultView() to this function. + /// + /// \param view New view to use + /// + /// \see getView, getDefaultView + /// + //////////////////////////////////////////////////////////// + void setView(const View& view); + + //////////////////////////////////////////////////////////// + /// \brief Get the view currently in use in the render target + /// + /// \return The view object that is currently used + /// + /// \see setView, getDefaultView + /// + //////////////////////////////////////////////////////////// + const View& getView() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the default view of the render target + /// + /// The default view has the initial size of the render target, + /// and never changes after the target has been created. + /// + /// \return The default view of the render target + /// + /// \see setView, getView + /// + //////////////////////////////////////////////////////////// + const View& getDefaultView() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the viewport of a view, applied to this render target + /// + /// The viewport is defined in the view as a ratio, this function + /// simply applies this ratio to the current dimensions of the + /// render target to calculate the pixels rectangle that the viewport + /// actually covers in the target. + /// + /// \param view The view for which we want to compute the viewport + /// + /// \return Viewport rectangle, expressed in pixels + /// + //////////////////////////////////////////////////////////// + IntRect getViewport(const View& view) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert a point from target coordinates to world + /// coordinates, using the current view + /// + /// This function is an overload of the mapPixelToCoords + /// function that implicitely uses the current view. + /// It is equivalent to: + /// \code + /// target.mapPixelToCoords(point, target.getView()); + /// \endcode + /// + /// \param point Pixel to convert + /// + /// \return The converted point, in "world" coordinates + /// + /// \see mapCoordsToPixel + /// + //////////////////////////////////////////////////////////// + Vector2f mapPixelToCoords(const Vector2i& point) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert a point from target coordinates to world coordinates + /// + /// This function finds the 2D position that matches the + /// given pixel of the render-target. In other words, it does + /// the inverse of what the graphics card does, to find the + /// initial position of a rendered pixel. + /// + /// Initially, both coordinate systems (world units and target pixels) + /// match perfectly. But if you define a custom view or resize your + /// render-target, this assertion is not true anymore, ie. a point + /// located at (10, 50) in your render-target may map to the point + /// (150, 75) in your 2D world -- if the view is translated by (140, 25). + /// + /// For render-windows, this function is typically used to find + /// which point (or object) is located below the mouse cursor. + /// + /// This version uses a custom view for calculations, see the other + /// overload of the function if you want to use the current view of the + /// render-target. + /// + /// \param point Pixel to convert + /// \param view The view to use for converting the point + /// + /// \return The converted point, in "world" units + /// + /// \see mapCoordsToPixel + /// + //////////////////////////////////////////////////////////// + Vector2f mapPixelToCoords(const Vector2i& point, const View& view) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert a point from world coordinates to target + /// coordinates, using the current view + /// + /// This function is an overload of the mapCoordsToPixel + /// function that implicitely uses the current view. + /// It is equivalent to: + /// \code + /// target.mapCoordsToPixel(point, target.getView()); + /// \endcode + /// + /// \param point Point to convert + /// + /// \return The converted point, in target coordinates (pixels) + /// + /// \see mapPixelToCoords + /// + //////////////////////////////////////////////////////////// + Vector2i mapCoordsToPixel(const Vector2f& point) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert a point from world coordinates to target coordinates + /// + /// This function finds the pixel of the render-target that matches + /// the given 2D point. In other words, it goes through the same process + /// as the graphics card, to compute the final position of a rendered point. + /// + /// Initially, both coordinate systems (world units and target pixels) + /// match perfectly. But if you define a custom view or resize your + /// render-target, this assertion is not true anymore, ie. a point + /// located at (150, 75) in your 2D world may map to the pixel + /// (10, 50) of your render-target -- if the view is translated by (140, 25). + /// + /// This version uses a custom view for calculations, see the other + /// overload of the function if you want to use the current view of the + /// render-target. + /// + /// \param point Point to convert + /// \param view The view to use for converting the point + /// + /// \return The converted point, in target coordinates (pixels) + /// + /// \see mapPixelToCoords + /// + //////////////////////////////////////////////////////////// + Vector2i mapCoordsToPixel(const Vector2f& point, const View& view) const; + + //////////////////////////////////////////////////////////// + /// \brief Draw a drawable object to the render-target + /// + /// \param drawable Object to draw + /// \param states Render states to use for drawing + /// + //////////////////////////////////////////////////////////// + void draw(const Drawable& drawable, const RenderStates& states = RenderStates::Default); + + //////////////////////////////////////////////////////////// + /// \brief Draw primitives defined by an array of vertices + /// + /// \param vertices Pointer to the vertices + /// \param vertexCount Number of vertices in the array + /// \param type Type of primitives to draw + /// \param states Render states to use for drawing + /// + //////////////////////////////////////////////////////////// + void draw(const Vertex* vertices, unsigned int vertexCount, + PrimitiveType type, const RenderStates& states = RenderStates::Default); + + //////////////////////////////////////////////////////////// + /// \brief Return the size of the rendering region of the target + /// + /// \return Size in pixels + /// + //////////////////////////////////////////////////////////// + virtual Vector2u getSize() const = 0; + + //////////////////////////////////////////////////////////// + /// \brief Save the current OpenGL render states and matrices + /// + /// This function can be used when you mix SFML drawing + /// and direct OpenGL rendering. Combined with PopGLStates, + /// it ensures that: + /// \li SFML's internal states are not messed up by your OpenGL code + /// \li your OpenGL states are not modified by a call to a SFML function + /// + /// More specifically, it must be used around code that + /// calls Draw functions. Example: + /// \code + /// // OpenGL code here... + /// window.pushGLStates(); + /// window.draw(...); + /// window.draw(...); + /// window.popGLStates(); + /// // OpenGL code here... + /// \endcode + /// + /// Note that this function is quite expensive: it saves all the + /// possible OpenGL states and matrices, even the ones you + /// don't care about. Therefore it should be used wisely. + /// It is provided for convenience, but the best results will + /// be achieved if you handle OpenGL states yourself (because + /// you know which states have really changed, and need to be + /// saved and restored). Take a look at the ResetGLStates + /// function if you do so. + /// + /// \see popGLStates + /// + //////////////////////////////////////////////////////////// + void pushGLStates(); + + //////////////////////////////////////////////////////////// + /// \brief Restore the previously saved OpenGL render states and matrices + /// + /// See the description of pushGLStates to get a detailed + /// description of these functions. + /// + /// \see pushGLStates + /// + //////////////////////////////////////////////////////////// + void popGLStates(); + + //////////////////////////////////////////////////////////// + /// \brief Reset the internal OpenGL states so that the target is ready for drawing + /// + /// This function can be used when you mix SFML drawing + /// and direct OpenGL rendering, if you choose not to use + /// pushGLStates/popGLStates. It makes sure that all OpenGL + /// states needed by SFML are set, so that subsequent draw() + /// calls will work as expected. + /// + /// Example: + /// \code + /// // OpenGL code here... + /// glPushAttrib(...); + /// window.resetGLStates(); + /// window.draw(...); + /// window.draw(...); + /// glPopAttrib(...); + /// // OpenGL code here... + /// \endcode + /// + //////////////////////////////////////////////////////////// + void resetGLStates(); + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + RenderTarget(); + + //////////////////////////////////////////////////////////// + /// \brief Performs the common initialization step after creation + /// + /// The derived classes must call this function after the + /// target is created and ready for drawing. + /// + //////////////////////////////////////////////////////////// + void initialize(); + +private: + + //////////////////////////////////////////////////////////// + /// \brief Apply the current view + /// + //////////////////////////////////////////////////////////// + void applyCurrentView(); + + //////////////////////////////////////////////////////////// + /// \brief Apply a new blending mode + /// + /// \param mode Blending mode to apply + /// + //////////////////////////////////////////////////////////// + void applyBlendMode(BlendMode mode); + + //////////////////////////////////////////////////////////// + /// \brief Apply a new transform + /// + /// \param transform Transform to apply + /// + //////////////////////////////////////////////////////////// + void applyTransform(const Transform& transform); + + //////////////////////////////////////////////////////////// + /// \brief Apply a new texture + /// + /// \param texture Texture to apply + /// + //////////////////////////////////////////////////////////// + void applyTexture(const Texture* texture); + + //////////////////////////////////////////////////////////// + /// \brief Apply a new shader + /// + /// \param shader Shader to apply + /// + //////////////////////////////////////////////////////////// + void applyShader(const Shader* shader); + + //////////////////////////////////////////////////////////// + /// \brief Activate the target for rendering + /// + /// This function must be implemented by derived classes to make + /// their OpenGL context current; it is called by the base class + /// everytime it's going to use OpenGL calls. + /// + /// \param active True to make the target active, false to deactivate it + /// + /// \return True if the function succeeded + /// + //////////////////////////////////////////////////////////// + virtual bool activate(bool active) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Render states cache + /// + //////////////////////////////////////////////////////////// + struct StatesCache + { + enum {VertexCacheSize = 4}; + + bool glStatesSet; ///< Are our internal GL states set yet? + bool viewChanged; ///< Has the current view changed since last draw? + BlendMode lastBlendMode; ///< Cached blending mode + Uint64 lastTextureId; ///< Cached texture + bool useVertexCache; ///< Did we previously use the vertex cache? + Vertex vertexCache[VertexCacheSize]; ///< Pre-transformed vertices cache + }; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + View m_defaultView; ///< Default view + View m_view; ///< Current view + StatesCache m_cache; ///< Render states cache +}; + +} // namespace sf + + +#endif // SFML_RENDERTARGET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RenderTarget +/// \ingroup graphics +/// +/// sf::RenderTarget defines the common behaviour of all the +/// 2D render targets usable in the graphics module. It makes +/// it possible to draw 2D entities like sprites, shapes, text +/// without using any OpenGL command directly. +/// +/// A sf::RenderTarget is also able to use views (sf::View), +/// which are a kind of 2D cameras. With views you can globally +/// scroll, rotate or zoom everything that is drawn, +/// without having to transform every single entity. See the +/// documentation of sf::View for more details and sample pieces of +/// code about this class. +/// +/// On top of that, render targets are still able to render direct +/// OpenGL stuff. It is even possible to mix together OpenGL calls +/// and regular SFML drawing commands. When doing so, make sure that +/// OpenGL states are not messed up by calling the +/// pushGLStates/popGLStates functions. +/// +/// \see sf::RenderWindow, sf::RenderTexture, sf::View +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderTexture.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderTexture.hpp new file mode 100644 index 0000000..384e459 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderTexture.hpp @@ -0,0 +1,280 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RENDERTEXTURE_HPP +#define SFML_RENDERTEXTURE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class RenderTextureImpl; +} + +//////////////////////////////////////////////////////////// +/// \brief Target for off-screen 2D rendering into a texture +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RenderTexture : public RenderTarget +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Constructs an empty, invalid render-texture. You must + /// call create to have a valid render-texture. + /// + /// \see create + /// + //////////////////////////////////////////////////////////// + RenderTexture(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~RenderTexture(); + + //////////////////////////////////////////////////////////// + /// \brief Create the render-texture + /// + /// Before calling this function, the render-texture is in + /// an invalid state, thus it is mandatory to call it before + /// doing anything with the render-texture. + /// The last parameter, \a depthBuffer, is useful if you want + /// to use the render-texture for 3D OpenGL rendering that requires + /// a depth-buffer. Otherwise it is unnecessary, and you should + /// leave this parameter to false (which is its default value). + /// + /// \param width Width of the render-texture + /// \param height Height of the render-texture + /// \param depthBuffer Do you want this render-texture to have a depth buffer? + /// + /// \return True if creation has been successful + /// + //////////////////////////////////////////////////////////// + bool create(unsigned int width, unsigned int height, bool depthBuffer = false); + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable texture smoothing + /// + /// This function is similar to Texture::setSmooth. + /// This parameter is disabled by default. + /// + /// \param smooth True to enable smoothing, false to disable it + /// + /// \see isSmooth + /// + //////////////////////////////////////////////////////////// + void setSmooth(bool smooth); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the smooth filtering is enabled or not + /// + /// \return True if texture smoothing is enabled + /// + /// \see setSmooth + /// + //////////////////////////////////////////////////////////// + bool isSmooth() const; + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable texture repeating + /// + /// This function is similar to Texture::setRepeated. + /// This parameter is disabled by default. + /// + /// \param repeated True to enable repeating, false to disable it + /// + /// \see isRepeated + /// + //////////////////////////////////////////////////////////// + void setRepeated(bool repeated); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the texture is repeated or not + /// + /// \return True if texture is repeated + /// + /// \see setRepeated + /// + //////////////////////////////////////////////////////////// + bool isRepeated() const; + + //////////////////////////////////////////////////////////// + /// \brief Activate of deactivate the render-texture for rendering + /// + /// This function makes the render-texture's context current for + /// future OpenGL rendering operations (so you shouldn't care + /// about it if you're not doing direct OpenGL stuff). + /// Only one context can be current in a thread, so if you + /// want to draw OpenGL geometry to another render target + /// (like a RenderWindow) don't forget to activate it again. + /// + /// \param active True to activate, false to deactivate + /// + /// \return True if operation was successful, false otherwise + /// + //////////////////////////////////////////////////////////// + bool setActive(bool active = true); + + //////////////////////////////////////////////////////////// + /// \brief Update the contents of the target texture + /// + /// This function updates the target texture with what + /// has been drawn so far. Like for windows, calling this + /// function is mandatory at the end of rendering. Not calling + /// it may leave the texture in an undefined state. + /// + //////////////////////////////////////////////////////////// + void display(); + + //////////////////////////////////////////////////////////// + /// \brief Return the size of the rendering region of the texture + /// + /// The returned value is the size that you passed to + /// the create function. + /// + /// \return Size in pixels + /// + //////////////////////////////////////////////////////////// + virtual Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Get a read-only reference to the target texture + /// + /// After drawing to the render-texture and calling Display, + /// you can retrieve the updated texture using this function, + /// and draw it using a sprite (for example). + /// The internal sf::Texture of a render-texture is always the + /// same instance, so that it is possible to call this function + /// once and keep a reference to the texture even after it is + /// modified. + /// + /// \return Const reference to the texture + /// + //////////////////////////////////////////////////////////// + const Texture& getTexture() const; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Activate the target for rendering + /// + /// This function is called by the base class + /// everytime it's going to use OpenGL calls. + /// + /// \param active True to make the target active, false to deactivate it + /// + /// \return True if the function succeeded + /// + //////////////////////////////////////////////////////////// + virtual bool activate(bool active); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::RenderTextureImpl* m_impl; ///< Platform/hardware specific implementation + Texture m_texture; ///< Target texture to draw on +}; + +} // namespace sf + + +#endif // SFML_RENDERTEXTURE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RenderTexture +/// \ingroup graphics +/// +/// sf::RenderTexture is the little brother of sf::RenderWindow. +/// It implements the same 2D drawing and OpenGL-related functions +/// (see their base class sf::RenderTarget for more details), +/// the difference is that the result is stored in an off-screen +/// texture rather than being show in a window. +/// +/// Rendering to a texture can be useful in a variety of situations: +/// \li precomputing a complex static texture (like a level's background from multiple tiles) +/// \li applying post-effects to the whole scene with shaders +/// \li creating a sprite from a 3D object rendered with OpenGL +/// \li etc. +/// +/// Usage example: +/// +/// \code +/// // Create a new render-window +/// sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window"); +/// +/// // Create a new render-texture +/// sf::RenderTexture texture; +/// if (!texture.create(500, 500)) +/// return -1; +/// +/// // The main loop +/// while (window.isOpen()) +/// { +/// // Event processing +/// // ... +/// +/// // Clear the whole texture with red color +/// texture.clear(sf::Color::Red); +/// +/// // Draw stuff to the texture +/// texture.draw(sprite); // sprite is a sf::Sprite +/// texture.draw(shape); // shape is a sf::Shape +/// texture.draw(text); // text is a sf::Text +/// +/// // We're done drawing to the texture +/// texture.display(); +/// +/// // Now we start rendering to the window, clear it first +/// window.clear(); +/// +/// // Draw the texture +/// sf::Sprite sprite(texture.getTexture()); +/// window.draw(sprite); +/// +/// // End the current frame and display its contents on screen +/// window.display(); +/// } +/// \endcode +/// +/// Like sf::RenderWindow, sf::RenderTexture is still able to render direct +/// OpenGL stuff. It is even possible to mix together OpenGL calls +/// and regular SFML drawing commands. If you need a depth buffer for +/// 3D rendering, don't forget to request it when calling RenderTexture::create. +/// +/// \see sf::RenderTarget, sf::RenderWindow, sf::View, sf::Texture +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderWindow.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderWindow.hpp new file mode 100644 index 0000000..b069347 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/RenderWindow.hpp @@ -0,0 +1,266 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RENDERWINDOW_HPP +#define SFML_RENDERWINDOW_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Window that can serve as a target for 2D drawing +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RenderWindow : public Window, public RenderTarget +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor doesn't actually create the window, + /// use the other constructors or call "create" to do so. + /// + //////////////////////////////////////////////////////////// + RenderWindow(); + + //////////////////////////////////////////////////////////// + /// \brief Construct a new window + /// + /// This constructor creates the window with the size and pixel + /// depth defined in \a mode. An optional style can be passed to + /// customize the look and behaviour of the window (borders, + /// title bar, resizable, closable, ...). + /// + /// The fourth parameter is an optional structure specifying + /// advanced OpenGL context settings such as antialiasing, + /// depth-buffer bits, etc. You shouldn't care about these + /// parameters for a regular usage of the graphics module. + /// + /// \param mode Video mode to use (defines the width, height and depth of the rendering area of the window) + /// \param title Title of the window + /// \param style Window style + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + RenderWindow(VideoMode mode, const String& title, Uint32 style = Style::Default, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Construct the window from an existing control + /// + /// Use this constructor if you want to create an SFML + /// rendering area into an already existing control. + /// + /// The fourth parameter is an optional structure specifying + /// advanced OpenGL context settings such as antialiasing, + /// depth-buffer bits, etc. You shouldn't care about these + /// parameters for a regular usage of the graphics module. + /// + /// \param handle Platform-specific handle of the control + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + explicit RenderWindow(WindowHandle handle, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// Closes the window and free all the resources attached to it. + /// + //////////////////////////////////////////////////////////// + virtual ~RenderWindow(); + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the rendering region of the window + /// + /// The size doesn't include the titlebar and borders + /// of the window. + /// + /// \return Size in pixels + /// + //////////////////////////////////////////////////////////// + virtual Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Copy the current contents of the window to an image + /// + /// This is a slow operation, whose main purpose is to make + /// screenshots of the application. If you want to update an + /// image with the contents of the window and then use it for + /// drawing, you should rather use a sf::Texture and its + /// update(Window&) function. + /// You can also draw things directly to a texture with the + /// sf::RenderTexture class. + /// + /// \return Image containing the captured contents + /// + //////////////////////////////////////////////////////////// + Image capture() const; + +protected: + + //////////////////////////////////////////////////////////// + /// \brief Function called after the window has been created + /// + /// This function is called so that derived classes can + /// perform their own specific initialization as soon as + /// the window is created. + /// + //////////////////////////////////////////////////////////// + virtual void onCreate(); + + //////////////////////////////////////////////////////////// + /// \brief Function called after the window has been resized + /// + /// This function is called so that derived classes can + /// perform custom actions when the size of the window changes. + /// + //////////////////////////////////////////////////////////// + virtual void onResize(); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Activate the target for rendering + /// + /// \param active True to make the target active, false to deactivate it + /// + /// \return True if the function succeeded + /// + //////////////////////////////////////////////////////////// + virtual bool activate(bool active); +}; + +} // namespace sf + + +#endif // SFML_RENDERWINDOW_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RenderWindow +/// \ingroup graphics +/// +/// sf::RenderWindow is the main class of the Graphics module. +/// It defines an OS window that can be painted using the other +/// classes of the graphics module. +/// +/// sf::RenderWindow is derived from sf::Window, thus it inherits +/// all its features: events, window management, OpenGL rendering, +/// etc. See the documentation of sf::Window for a more complete +/// description of all these features, as well as code examples. +/// +/// On top of that, sf::RenderWindow adds more features related to +/// 2D drawing with the graphics module (see its base class +/// sf::RenderTarget for more details). +/// Here is a typical rendering and event loop with a sf::RenderWindow: +/// +/// \code +/// // Declare and create a new render-window +/// sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window"); +/// +/// // Limit the framerate to 60 frames per second (this step is optional) +/// window.setFramerateLimit(60); +/// +/// // The main loop - ends as soon as the window is closed +/// while (window.isOpen()) +/// { +/// // Event processing +/// sf::Event event; +/// while (window.pollEvent(event)) +/// { +/// // Request for closing the window +/// if (event.type == sf::Event::Closed) +/// window.close(); +/// } +/// +/// // Clear the whole window before rendering a new frame +/// window.clear(); +/// +/// // Draw some graphical entities +/// window.draw(sprite); +/// window.draw(circle); +/// window.draw(text); +/// +/// // End the current frame and display its contents on screen +/// window.display(); +/// } +/// \endcode +/// +/// Like sf::Window, sf::RenderWindow is still able to render direct +/// OpenGL stuff. It is even possible to mix together OpenGL calls +/// and regular SFML drawing commands. +/// +/// \code +/// // Create the render window +/// sf::RenderWindow window(sf::VideoMode(800, 600), "SFML OpenGL"); +/// +/// // Create a sprite and a text to display +/// sf::Sprite sprite; +/// sf::Text text; +/// ... +/// +/// // Perform OpenGL initializations +/// glMatrixMode(GL_PROJECTION); +/// ... +/// +/// // Start the rendering loop +/// while (window.isOpen()) +/// { +/// // Process events +/// ... +/// +/// // Draw a background sprite +/// window.pushGLStates(); +/// window.draw(sprite); +/// window.popGLStates(); +/// +/// // Draw a 3D object using OpenGL +/// glBegin(GL_QUADS); +/// glVertex3f(...); +/// ... +/// glEnd(); +/// +/// // Draw text on top of the 3D object +/// window.pushGLStates(); +/// window.draw(text); +/// window.popGLStates(); +/// +/// // Finally, display the rendered frame on screen +/// window.display(); +/// } +/// \endcode +/// +/// \see sf::Window, sf::RenderTarget, sf::RenderTexture, sf::View +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Shader.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Shader.hpp new file mode 100644 index 0000000..2fbbf6e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Shader.hpp @@ -0,0 +1,635 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SHADER_HPP +#define SFML_SHADER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +class InputStream; +class Texture; + +//////////////////////////////////////////////////////////// +/// \brief Shader class (vertex and fragment) +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Shader : GlResource, NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Types of shaders + /// + //////////////////////////////////////////////////////////// + enum Type + { + Vertex, ///< Vertex shader + Fragment ///< Fragment (pixel) shader + }; + + //////////////////////////////////////////////////////////// + /// \brief Special type/value that can be passed to setParameter, + /// and that represents the texture of the object being drawn + /// + //////////////////////////////////////////////////////////// + struct CurrentTextureType {}; + static CurrentTextureType CurrentTexture; + +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates an invalid shader. + /// + //////////////////////////////////////////////////////////// + Shader(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Shader(); + + //////////////////////////////////////////////////////////// + /// \brief Load either the vertex or fragment shader from a file + /// + /// This function loads a single shader, either vertex or + /// fragment, identified by the second argument. + /// The source must be a text file containing a valid + /// shader in GLSL language. GLSL is a C-like language + /// dedicated to OpenGL shaders; you'll probably need to + /// read a good documentation for it before writing your + /// own shaders. + /// + /// \param filename Path of the vertex or fragment shader file to load + /// \param type Type of shader (vertex or fragment) + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromMemory, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename, Type type); + + //////////////////////////////////////////////////////////// + /// \brief Load both the vertex and fragment shaders from files + /// + /// This function loads both the vertex and the fragment + /// shaders. If one of them fails to load, the shader is left + /// empty (the valid shader is unloaded). + /// The sources must be text files containing valid shaders + /// in GLSL language. GLSL is a C-like language dedicated to + /// OpenGL shaders; you'll probably need to read a good documentation + /// for it before writing your own shaders. + /// + /// \param vertexShaderFilename Path of the vertex shader file to load + /// \param fragmentShaderFilename Path of the fragment shader file to load + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromMemory, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& vertexShaderFilename, const std::string& fragmentShaderFilename); + + //////////////////////////////////////////////////////////// + /// \brief Load either the vertex or fragment shader from a source code in memory + /// + /// This function loads a single shader, either vertex or + /// fragment, identified by the second argument. + /// The source code must be a valid shader in GLSL language. + /// GLSL is a C-like language dedicated to OpenGL shaders; + /// you'll probably need to read a good documentation for + /// it before writing your own shaders. + /// + /// \param shader String containing the source code of the shader + /// \param type Type of shader (vertex or fragment) + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const std::string& shader, Type type); + + //////////////////////////////////////////////////////////// + /// \brief Load both the vertex and fragment shaders from source codes in memory + /// + /// This function loads both the vertex and the fragment + /// shaders. If one of them fails to load, the shader is left + /// empty (the valid shader is unloaded). + /// The sources must be valid shaders in GLSL language. GLSL is + /// a C-like language dedicated to OpenGL shaders; you'll + /// probably need to read a good documentation for it before + /// writing your own shaders. + /// + /// \param vertexShader String containing the source code of the vertex shader + /// \param fragmentShader String containing the source code of the fragment shader + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const std::string& vertexShader, const std::string& fragmentShader); + + //////////////////////////////////////////////////////////// + /// \brief Load either the vertex or fragment shader from a custom stream + /// + /// This function loads a single shader, either vertex or + /// fragment, identified by the second argument. + /// The source code must be a valid shader in GLSL language. + /// GLSL is a C-like language dedicated to OpenGL shaders; + /// you'll probably need to read a good documentation for it + /// before writing your own shaders. + /// + /// \param stream Source stream to read from + /// \param type Type of shader (vertex or fragment) + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& stream, Type type); + + //////////////////////////////////////////////////////////// + /// \brief Load both the vertex and fragment shaders from custom streams + /// + /// This function loads both the vertex and the fragment + /// shaders. If one of them fails to load, the shader is left + /// empty (the valid shader is unloaded). + /// The source codes must be valid shaders in GLSL language. + /// GLSL is a C-like language dedicated to OpenGL shaders; + /// you'll probably need to read a good documentation for + /// it before writing your own shaders. + /// + /// \param vertexShaderStream Source stream to read the vertex shader from + /// \param fragmentShaderStream Source stream to read the fragment shader from + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& vertexShaderStream, InputStream& fragmentShaderStream); + + //////////////////////////////////////////////////////////// + /// \brief Change a float parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a float + /// (float GLSL type). + /// + /// Example: + /// \code + /// uniform float myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", 5.2f); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param x Value to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, float x); + + //////////////////////////////////////////////////////////// + /// \brief Change a 2-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 2x1 vector + /// (vec2 GLSL type). + /// + /// Example: + /// \code + /// uniform vec2 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", 5.2f, 6.0f); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param x First component of the value to assign + /// \param y Second component of the value to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief Change a 3-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 3x1 vector + /// (vec3 GLSL type). + /// + /// Example: + /// \code + /// uniform vec3 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", 5.2f, 6.0f, -8.1f); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param x First component of the value to assign + /// \param y Second component of the value to assign + /// \param z Third component of the value to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, float x, float y, float z); + + //////////////////////////////////////////////////////////// + /// \brief Change a 4-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 4x1 vector + /// (vec4 GLSL type). + /// + /// Example: + /// \code + /// uniform vec4 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", 5.2f, 6.0f, -8.1f, 0.4f); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param x First component of the value to assign + /// \param y Second component of the value to assign + /// \param z Third component of the value to assign + /// \param w Fourth component of the value to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, float x, float y, float z, float w); + + //////////////////////////////////////////////////////////// + /// \brief Change a 2-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 2x1 vector + /// (vec2 GLSL type). + /// + /// Example: + /// \code + /// uniform vec2 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", sf::Vector2f(5.2f, 6.0f)); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param vector Vector to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const Vector2f& vector); + + //////////////////////////////////////////////////////////// + /// \brief Change a 3-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 3x1 vector + /// (vec3 GLSL type). + /// + /// Example: + /// \code + /// uniform vec3 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", sf::Vector3f(5.2f, 6.0f, -8.1f)); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param vector Vector to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const Vector3f& vector); + + //////////////////////////////////////////////////////////// + /// \brief Change a color parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 4x1 vector + /// (vec4 GLSL type). + /// + /// It is important to note that the components of the color are + /// normalized before being passed to the shader. Therefore, + /// they are converted from range [0 .. 255] to range [0 .. 1]. + /// For example, a sf::Color(255, 125, 0, 255) will be transformed + /// to a vec4(1.0, 0.5, 0.0, 1.0) in the shader. + /// + /// Example: + /// \code + /// uniform vec4 color; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("color", sf::Color(255, 128, 0, 255)); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param color Color to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Change a matrix parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 4x4 matrix + /// (mat4 GLSL type). + /// + /// Example: + /// \code + /// uniform mat4 matrix; // this is the variable in the shader + /// \endcode + /// \code + /// sf::Transform transform; + /// transform.translate(5, 10); + /// shader.setParameter("matrix", transform); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param transform Transform to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const sf::Transform& transform); + + //////////////////////////////////////////////////////////// + /// \brief Change a texture parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 2D texture + /// (sampler2D GLSL type). + /// + /// Example: + /// \code + /// uniform sampler2D the_texture; // this is the variable in the shader + /// \endcode + /// \code + /// sf::Texture texture; + /// ... + /// shader.setParameter("the_texture", texture); + /// \endcode + /// It is important to note that \a texture must remain alive as long + /// as the shader uses it, no copy is made internally. + /// + /// To use the texture of the object being draw, which cannot be + /// known in advance, you can pass the special value + /// sf::Shader::CurrentTexture: + /// \code + /// shader.setParameter("the_texture", sf::Shader::CurrentTexture). + /// \endcode + /// + /// \param name Name of the texture in the shader + /// \param texture Texture to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const Texture& texture); + + //////////////////////////////////////////////////////////// + /// \brief Change a texture parameter of the shader + /// + /// This overload maps a shader texture variable to the + /// texture of the object being drawn, which cannot be + /// known in advance. The second argument must be + /// sf::Shader::CurrentTexture. + /// The corresponding parameter in the shader must be a 2D texture + /// (sampler2D GLSL type). + /// + /// Example: + /// \code + /// uniform sampler2D current; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("current", sf::Shader::CurrentTexture); + /// \endcode + /// + /// \param name Name of the texture in the shader + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, CurrentTextureType); + + //////////////////////////////////////////////////////////// + /// \brief Bind a shader for rendering + /// + /// This function is not part of the graphics API, it mustn't be + /// used when drawing SFML entities. It must be used only if you + /// mix sf::Shader with OpenGL code. + /// + /// \code + /// sf::Shader s1, s2; + /// ... + /// sf::Shader::bind(&s1); + /// // draw OpenGL stuff that use s1... + /// sf::Shader::bind(&s2); + /// // draw OpenGL stuff that use s2... + /// sf::Shader::bind(NULL); + /// // draw OpenGL stuff that use no shader... + /// \endcode + /// + /// \param shader Shader to bind, can be null to use no shader + /// + //////////////////////////////////////////////////////////// + static void bind(const Shader* shader); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the system supports shaders + /// + /// This function should always be called before using + /// the shader features. If it returns false, then + /// any attempt to use sf::Shader will fail. + /// + /// \return True if shaders are supported, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isAvailable(); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Compile the shader(s) and create the program + /// + /// If one of the arguments is NULL, the corresponding shader + /// is not created. + /// + /// \param vertexShaderCode Source code of the vertex shader + /// \param fragmentShaderCode Source code of the fragment shader + /// + /// \return True on success, false if any error happened + /// + //////////////////////////////////////////////////////////// + bool compile(const char* vertexShaderCode, const char* fragmentShaderCode); + + //////////////////////////////////////////////////////////// + /// \brief Bind all the textures used by the shader + /// + /// This function each texture to a different unit, and + /// updates the corresponding variables in the shader accordingly. + /// + //////////////////////////////////////////////////////////// + void bindTextures() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the location ID of a shader parameter + /// + /// \param name Name of the parameter to search + /// + /// \return Location ID of the parameter, or -1 if not found + /// + //////////////////////////////////////////////////////////// + int getParamLocation(const std::string& name); + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map TextureTable; + typedef std::map ParamTable; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int m_shaderProgram; ///< OpenGL identifier for the program + int m_currentTexture; ///< Location of the current texture in the shader + TextureTable m_textures; ///< Texture variables in the shader, mapped to their location + ParamTable m_params; ///< Parameters location cache +}; + +} // namespace sf + + +#endif // SFML_SHADER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Shader +/// \ingroup graphics +/// +/// Shaders are programs written using a specific language, +/// executed directly by the graphics card and allowing +/// to apply real-time operations to the rendered entities. +/// +/// There are two kinds of shaders: +/// \li Vertex shaders, that process vertices +/// \li Fragment (pixel) shaders, that process pixels +/// +/// A sf::Shader can be composed of either a vertex shader +/// alone, a fragment shader alone, or both combined +/// (see the variants of the load functions). +/// +/// Shaders are written in GLSL, which is a C-like +/// language dedicated to OpenGL shaders. You'll probably +/// need to learn its basics before writing your own shaders +/// for SFML. +/// +/// Like any C/C++ program, a shader has its own variables +/// that you can set from your C++ application. sf::Shader +/// handles 5 different types of variables: +/// \li floats +/// \li vectors (2, 3 or 4 components) +/// \li colors +/// \li textures +/// \li transforms (matrices) +/// +/// The value of the variables can be changed at any time +/// with the various overloads of the setParameter function: +/// \code +/// shader.setParameter("offset", 2.f); +/// shader.setParameter("point", 0.5f, 0.8f, 0.3f); +/// shader.setParameter("color", sf::Color(128, 50, 255)); +/// shader.setParameter("matrix", transform); // transform is a sf::Transform +/// shader.setParameter("overlay", texture); // texture is a sf::Texture +/// shader.setParameter("texture", sf::Shader::CurrentTexture); +/// \endcode +/// +/// The special Shader::CurrentTexture argument maps the +/// given texture variable to the current texture of the +/// object being drawn (which cannot be known in advance). +/// +/// To apply a shader to a drawable, you must pass it as an +/// additional parameter to the Draw function: +/// \code +/// window.draw(sprite, &shader); +/// \endcode +/// +/// ... which is in fact just a shortcut for this: +/// \code +/// sf::RenderStates states; +/// states.shader = &shader; +/// window.draw(sprite, states); +/// \endcode +/// +/// In the code above we pass a pointer to the shader, because it may +/// be null (which means "no shader"). +/// +/// Shaders can be used on any drawable, but some combinations are +/// not interesting. For example, using a vertex shader on a sf::Sprite +/// is limited because there are only 4 vertices, the sprite would +/// have to be subdivided in order to apply wave effects. +/// Another bad example is a fragment shader with sf::Text: the texture +/// of the text is not the actual text that you see on screen, it is +/// a big texture containing all the characters of the font in an +/// arbitrary order; thus, texture lookups on pixels other than the +/// current one may not give you the expected result. +/// +/// Shaders can also be used to apply global post-effects to the +/// current contents of the target (like the old sf::PostFx class +/// in SFML 1). This can be done in two different ways: +/// \li draw everything to a sf::RenderTexture, then draw it to +/// the main target using the shader +/// \li draw everything directly to the main target, then use +/// sf::Texture::update(Window&) to copy its contents to a texture +/// and draw it to the main target using the shader +/// +/// The first technique is more optimized because it doesn't involve +/// retrieving the target's pixels to system memory, but the +/// second one doesn't impact the rendering process and can be +/// easily inserted anywhere without impacting all the code. +/// +/// Like sf::Texture that can be used as a raw OpenGL texture, +/// sf::Shader can also be used directly as a raw shader for +/// custom OpenGL geometry. +/// \code +/// sf::Shader::bind(&shader); +/// ... render OpenGL geometry ... +/// sf::Shader::bind(NULL); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Shape.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Shape.hpp new file mode 100644 index 0000000..bc38775 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Shape.hpp @@ -0,0 +1,345 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SHAPE_HPP +#define SFML_SHAPE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Base class for textured shapes with outline +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Shape : public Drawable, public Transformable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Shape(); + + //////////////////////////////////////////////////////////// + /// \brief Change the source texture of the shape + /// + /// The \a texture argument refers to a texture that must + /// exist as long as the shape uses it. Indeed, the shape + /// doesn't store its own copy of the texture, but rather keeps + /// a pointer to the one that you passed to this function. + /// If the source texture is destroyed and the shape tries to + /// use it, the behaviour is undefined. + /// \a texture can be NULL to disable texturing. + /// If \a resetRect is true, the TextureRect property of + /// the shape is automatically adjusted to the size of the new + /// texture. If it is false, the texture rect is left unchanged. + /// + /// \param texture New texture + /// \param resetRect Should the texture rect be reset to the size of the new texture? + /// + /// \see getTexture, setTextureRect + /// + //////////////////////////////////////////////////////////// + void setTexture(const Texture* texture, bool resetRect = false); + + //////////////////////////////////////////////////////////// + /// \brief Set the sub-rectangle of the texture that the shape will display + /// + /// The texture rect is useful when you don't want to display + /// the whole texture, but rather a part of it. + /// By default, the texture rect covers the entire texture. + /// + /// \param rect Rectangle defining the region of the texture to display + /// + /// \see getTextureRect, setTexture + /// + //////////////////////////////////////////////////////////// + void setTextureRect(const IntRect& rect); + + //////////////////////////////////////////////////////////// + /// \brief Set the fill color of the shape + /// + /// This color is modulated (multiplied) with the shape's + /// texture if any. It can be used to colorize the shape, + /// or change its global opacity. + /// You can use sf::Color::Transparent to make the inside of + /// the shape transparent, and have the outline alone. + /// By default, the shape's fill color is opaque white. + /// + /// \param color New color of the shape + /// + /// \see getFillColor, setOutlineColor + /// + //////////////////////////////////////////////////////////// + void setFillColor(const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Set the outline color of the shape + /// + /// By default, the shape's outline color is opaque white. + /// + /// \param color New outline color of the shape + /// + /// \see getOutlineColor, setFillColor + /// + //////////////////////////////////////////////////////////// + void setOutlineColor(const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Set the thickness of the shape's outline + /// + /// Note that negative values are allowed (so that the outline + /// expands towards the center of the shape), and using zero + /// disables the outline. + /// By default, the outline thickness is 0. + /// + /// \param thickness New outline thickness + /// + /// \see getOutlineThickness + /// + //////////////////////////////////////////////////////////// + void setOutlineThickness(float thickness); + + //////////////////////////////////////////////////////////// + /// \brief Get the source texture of the shape + /// + /// If the shape has no source texture, a NULL pointer is returned. + /// The returned pointer is const, which means that you can't + /// modify the texture when you retrieve it with this function. + /// + /// \return Pointer to the shape's texture + /// + /// \see setTexture + /// + //////////////////////////////////////////////////////////// + const Texture* getTexture() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the sub-rectangle of the texture displayed by the shape + /// + /// \return Texture rectangle of the shape + /// + /// \see setTextureRect + /// + //////////////////////////////////////////////////////////// + const IntRect& getTextureRect() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the fill color of the shape + /// + /// \return Fill color of the shape + /// + /// \see setFillColor + /// + //////////////////////////////////////////////////////////// + const Color& getFillColor() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the outline color of the shape + /// + /// \return Outline color of the shape + /// + /// \see setOutlineColor + /// + //////////////////////////////////////////////////////////// + const Color& getOutlineColor() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the outline thickness of the shape + /// + /// \return Outline thickness of the shape + /// + /// \see setOutlineThickness + /// + //////////////////////////////////////////////////////////// + float getOutlineThickness() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the total number of points of the shape + /// + /// \return Number of points of the shape + /// + /// \see getPoint + /// + //////////////////////////////////////////////////////////// + virtual unsigned int getPointCount() const = 0; + + //////////////////////////////////////////////////////////// + /// \brief Get a point of the shape + /// + /// The result is undefined if \a index is out of the valid range. + /// + /// \param index Index of the point to get, in range [0 .. getPointCount() - 1] + /// + /// \return Index-th point of the shape + /// + /// \see getPointCount + /// + //////////////////////////////////////////////////////////// + virtual Vector2f getPoint(unsigned int index) const = 0; + + //////////////////////////////////////////////////////////// + /// \brief Get the local bounding rectangle of the entity + /// + /// The returned rectangle is in local coordinates, which means + /// that it ignores the transformations (translation, rotation, + /// scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// entity in the entity's coordinate system. + /// + /// \return Local bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getLocalBounds() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global bounding rectangle of the entity + /// + /// The returned rectangle is in global coordinates, which means + /// that it takes in account the transformations (translation, + /// rotation, scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// sprite in the global 2D world's coordinate system. + /// + /// \return Global bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getGlobalBounds() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Shape(); + + //////////////////////////////////////////////////////////// + /// \brief Recompute the internal geometry of the shape + /// + /// This function must be called by the derived class everytime + /// the shape's points change (ie. the result of either + /// getPointCount or getPoint is different). + /// + //////////////////////////////////////////////////////////// + void update(); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Draw the shape to a render target + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const; + + //////////////////////////////////////////////////////////// + /// \brief Update the fill vertices' color + /// + //////////////////////////////////////////////////////////// + void updateFillColors(); + + //////////////////////////////////////////////////////////// + /// \brief Update the fill vertices' texture coordinates + /// + //////////////////////////////////////////////////////////// + void updateTexCoords(); + + //////////////////////////////////////////////////////////// + /// \brief Update the outline vertices' position + /// + //////////////////////////////////////////////////////////// + void updateOutline(); + + //////////////////////////////////////////////////////////// + /// \brief Update the outline vertices' color + /// + //////////////////////////////////////////////////////////// + void updateOutlineColors(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + const Texture* m_texture; ///< Texture of the shape + IntRect m_textureRect; ///< Rectangle defining the area of the source texture to display + Color m_fillColor; ///< Fill color + Color m_outlineColor; ///< Outline color + float m_outlineThickness; ///< Thickness of the shape's outline + VertexArray m_vertices; ///< Vertex array containing the fill geometry + VertexArray m_outlineVertices; ///< Vertex array containing the outline geometry + FloatRect m_insideBounds; ///< Bounding rectangle of the inside (fill) + FloatRect m_bounds; ///< Bounding rectangle of the whole shape (outline + fill) +}; + +} // namespace sf + + +#endif // SFML_SHAPE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Shape +/// \ingroup graphics +/// +/// sf::Shape is a drawable class that allows to define and +/// display a custom convex shape on a render target. +/// It's only an abstract base, it needs to be specialized for +/// concrete types of shapes (circle, rectangle, convex polygon, +/// star, ...). +/// +/// In addition to the attributes provided by the specialized +/// shape classes, a shape always has the following attributes: +/// \li a texture +/// \li a texture rectangle +/// \li a fill color +/// \li an outline color +/// \li an outline thickness +/// +/// Each feature is optional, and can be disabled easily: +/// \li the texture can be null +/// \li the fill/outline colors can be sf::Color::Transparent +/// \li the outline thickness can be zero +/// +/// You can write your own derived shape class, there are only +/// two virtual functions to override: +/// \li getPointCount must return the number of points of the shape +/// \li getPoint must return the points of the shape +/// +/// \see sf::RectangleShape, sf::CircleShape, sf::ConvexShape, sf::Transformable +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Sprite.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Sprite.hpp new file mode 100644 index 0000000..954881d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Sprite.hpp @@ -0,0 +1,277 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SPRITE_HPP +#define SFML_SPRITE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +class Texture; + +//////////////////////////////////////////////////////////// +/// \brief Drawable representation of a texture, with its +/// own transformations, color, etc. +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Sprite : public Drawable, public Transformable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty sprite with no source texture. + /// + //////////////////////////////////////////////////////////// + Sprite(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the sprite from a source texture + /// + /// \param texture Source texture + /// + /// \see setTexture + /// + //////////////////////////////////////////////////////////// + explicit Sprite(const Texture& texture); + + //////////////////////////////////////////////////////////// + /// \brief Construct the sprite from a sub-rectangle of a source texture + /// + /// \param texture Source texture + /// \param rectangle Sub-rectangle of the texture to assign to the sprite + /// + /// \see setTexture, setTextureRect + /// + //////////////////////////////////////////////////////////// + Sprite(const Texture& texture, const IntRect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Change the source texture of the sprite + /// + /// The \a texture argument refers to a texture that must + /// exist as long as the sprite uses it. Indeed, the sprite + /// doesn't store its own copy of the texture, but rather keeps + /// a pointer to the one that you passed to this function. + /// If the source texture is destroyed and the sprite tries to + /// use it, the behaviour is undefined. + /// If \a resetRect is true, the TextureRect property of + /// the sprite is automatically adjusted to the size of the new + /// texture. If it is false, the texture rect is left unchanged. + /// + /// \param texture New texture + /// \param resetRect Should the texture rect be reset to the size of the new texture? + /// + /// \see getTexture, setTextureRect + /// + //////////////////////////////////////////////////////////// + void setTexture(const Texture& texture, bool resetRect = false); + + //////////////////////////////////////////////////////////// + /// \brief Set the sub-rectangle of the texture that the sprite will display + /// + /// The texture rect is useful when you don't want to display + /// the whole texture, but rather a part of it. + /// By default, the texture rect covers the entire texture. + /// + /// \param rectangle Rectangle defining the region of the texture to display + /// + /// \see getTextureRect, setTexture + /// + //////////////////////////////////////////////////////////// + void setTextureRect(const IntRect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Set the global color of the sprite + /// + /// This color is modulated (multiplied) with the sprite's + /// texture. It can be used to colorize the sprite, or change + /// its global opacity. + /// By default, the sprite's color is opaque white. + /// + /// \param color New color of the sprite + /// + /// \see getColor + /// + //////////////////////////////////////////////////////////// + void setColor(const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Get the source texture of the sprite + /// + /// If the sprite has no source texture, a NULL pointer is returned. + /// The returned pointer is const, which means that you can't + /// modify the texture when you retrieve it with this function. + /// + /// \return Pointer to the sprite's texture + /// + /// \see setTexture + /// + //////////////////////////////////////////////////////////// + const Texture* getTexture() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the sub-rectangle of the texture displayed by the sprite + /// + /// \return Texture rectangle of the sprite + /// + /// \see setTextureRect + /// + //////////////////////////////////////////////////////////// + const IntRect& getTextureRect() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global color of the sprite + /// + /// \return Global color of the sprite + /// + /// \see setColor + /// + //////////////////////////////////////////////////////////// + const Color& getColor() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the local bounding rectangle of the entity + /// + /// The returned rectangle is in local coordinates, which means + /// that it ignores the transformations (translation, rotation, + /// scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// entity in the entity's coordinate system. + /// + /// \return Local bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getLocalBounds() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global bounding rectangle of the entity + /// + /// The returned rectangle is in global coordinates, which means + /// that it takes in account the transformations (translation, + /// rotation, scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// sprite in the global 2D world's coordinate system. + /// + /// \return Global bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getGlobalBounds() const; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Draw the sprite to a render target + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const; + + //////////////////////////////////////////////////////////// + /// \brief Update the vertices' positions + /// + //////////////////////////////////////////////////////////// + void updatePositions(); + + //////////////////////////////////////////////////////////// + /// \brief Update the vertices' texture coordinates + /// + //////////////////////////////////////////////////////////// + void updateTexCoords(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vertex m_vertices[4]; ///< Vertices defining the sprite's geometry + const Texture* m_texture; ///< Texture of the sprite + IntRect m_textureRect; ///< Rectangle defining the area of the source texture to display +}; + +} // namespace sf + + +#endif // SFML_SPRITE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Sprite +/// \ingroup graphics +/// +/// sf::Sprite is a drawable class that allows to easily display +/// a texture (or a part of it) on a render target. +/// +/// It inherits all the functions from sf::Transformable: +/// position, rotation, scale, origin. It also adds sprite-specific +/// properties such as the texture to use, the part of it to display, +/// and some convenience functions to change the overall color of the +/// sprite, or to get its bounding rectangle. +/// +/// sf::Sprite works in combination with the sf::Texture class, which +/// loads and provides the pixel data of a given texture. +/// +/// The separation of sf::Sprite and sf::Texture allows more flexibility +/// and better performances: indeed a sf::Texture is a heavy resource, +/// and any operation on it is slow (often too slow for real-time +/// applications). On the other side, a sf::Sprite is a lightweight +/// object which can use the pixel data of a sf::Texture and draw +/// it with its own transformation/color/blending attributes. +/// +/// It is important to note that the sf::Sprite instance doesn't +/// copy the texture that it uses, it only keeps a reference to it. +/// Thus, a sf::Texture must not be destroyed while it is +/// used by a sf::Sprite (i.e. never write a function that +/// uses a local sf::Texture instance for creating a sprite). +/// +/// Usage example: +/// \code +/// // Declare and load a texture +/// sf::Texture texture; +/// texture.loadFromFile("texture.png"); +/// +/// // Create a sprite +/// sf::Sprite sprite; +/// sprite.setTexture(texture); +/// sprite.setTextureRect(sf::IntRect(10, 10, 50, 30)); +/// sprite.setColor(sf::Color(255, 255, 255, 200)); +/// sprite.setPosition(100, 25); +/// +/// // Draw it +/// window.draw(sprite); +/// \endcode +/// +/// \see sf::Texture, sf::Transformable +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Text.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Text.hpp new file mode 100644 index 0000000..04abd24 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Text.hpp @@ -0,0 +1,351 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TEXT_HPP +#define SFML_TEXT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Graphical text that can be drawn to a render target +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Text : public Drawable, public Transformable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Enumeration of the string drawing styles + /// + //////////////////////////////////////////////////////////// + enum Style + { + Regular = 0, ///< Regular characters, no style + Bold = 1 << 0, ///< Bold characters + Italic = 1 << 1, ///< Italic characters + Underlined = 1 << 2 ///< Underlined characters + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty text. + /// + //////////////////////////////////////////////////////////// + Text(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the text from a string, font and size + /// + /// \param string Text assigned to the string + /// \param font Font used to draw the string + /// \param characterSize Base size of characters, in pixels + /// + //////////////////////////////////////////////////////////// + Text(const String& string, const Font& font, unsigned int characterSize = 30); + + //////////////////////////////////////////////////////////// + /// \brief Set the text's string + /// + /// The \a string argument is a sf::String, which can + /// automatically be constructed from standard string types. + /// So, the following calls are all valid: + /// \code + /// text.setString("hello"); + /// text.setString(L"hello"); + /// text.setString(std::string("hello")); + /// text.setString(std::wstring(L"hello")); + /// \endcode + /// A text's string is empty by default. + /// + /// \param string New string + /// + /// \see getString + /// + //////////////////////////////////////////////////////////// + void setString(const String& string); + + //////////////////////////////////////////////////////////// + /// \brief Set the text's font + /// + /// The \a font argument refers to a font that must + /// exist as long as the text uses it. Indeed, the text + /// doesn't store its own copy of the font, but rather keeps + /// a pointer to the one that you passed to this function. + /// If the font is destroyed and the text tries to + /// use it, the behaviour is undefined. + /// + /// \param font New font + /// + /// \see getFont + /// + //////////////////////////////////////////////////////////// + void setFont(const Font& font); + + //////////////////////////////////////////////////////////// + /// \brief Set the character size + /// + /// The default size is 30. + /// + /// \param size New character size, in pixels + /// + /// \see getCharacterSize + /// + //////////////////////////////////////////////////////////// + void setCharacterSize(unsigned int size); + + //////////////////////////////////////////////////////////// + /// \brief Set the text's style + /// + /// You can pass a combination of one or more styles, for + /// example sf::Text::Bold | sf::Text::Italic. + /// The default style is sf::Text::Regular. + /// + /// \param style New style + /// + /// \see getStyle + /// + //////////////////////////////////////////////////////////// + void setStyle(Uint32 style); + + //////////////////////////////////////////////////////////// + /// \brief Set the global color of the text + /// + /// By default, the text's color is opaque white. + /// + /// \param color New color of the text + /// + /// \see getColor + /// + //////////////////////////////////////////////////////////// + void setColor(const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Get the text's string + /// + /// The returned string is a sf::String, which can automatically + /// be converted to standard string types. So, the following + /// lines of code are all valid: + /// \code + /// sf::String s1 = text.getString(); + /// std::string s2 = text.getString(); + /// std::wstring s3 = text.getString(); + /// \endcode + /// + /// \return Text's string + /// + /// \see setString + /// + //////////////////////////////////////////////////////////// + const String& getString() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the text's font + /// + /// If the text has no font attached, a NULL pointer is returned. + /// The returned reference is const, which means that you + /// cannot modify the font when you get it from this function. + /// + /// \return Pointer to the text's font + /// + /// \see setFont + /// + //////////////////////////////////////////////////////////// + const Font* getFont() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the character size + /// + /// \return Size of the characters, in pixels + /// + /// \see setCharacterSize + /// + //////////////////////////////////////////////////////////// + unsigned int getCharacterSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the text's style + /// + /// \return Text's style + /// + /// \see setStyle + /// + //////////////////////////////////////////////////////////// + Uint32 getStyle() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global color of the text + /// + /// \return Global color of the text + /// + /// \see setColor + /// + //////////////////////////////////////////////////////////// + const Color& getColor() const; + + //////////////////////////////////////////////////////////// + /// \brief Return the position of the \a index-th character + /// + /// This function computes the visual position of a character + /// from its index in the string. The returned position is + /// in global coordinates (translation, rotation, scale and + /// origin are applied). + /// If \a index is out of range, the position of the end of + /// the string is returned. + /// + /// \param index Index of the character + /// + /// \return Position of the character + /// + //////////////////////////////////////////////////////////// + Vector2f findCharacterPos(std::size_t index) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the local bounding rectangle of the entity + /// + /// The returned rectangle is in local coordinates, which means + /// that it ignores the transformations (translation, rotation, + /// scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// entity in the entity's coordinate system. + /// + /// \return Local bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getLocalBounds() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global bounding rectangle of the entity + /// + /// The returned rectangle is in global coordinates, which means + /// that it takes in account the transformations (translation, + /// rotation, scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// sprite in the global 2D world's coordinate system. + /// + /// \return Global bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getGlobalBounds() const; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Draw the text to a render target + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const; + + //////////////////////////////////////////////////////////// + /// \brief Update the text's geometry + /// + //////////////////////////////////////////////////////////// + void updateGeometry(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + String m_string; ///< String to display + const Font* m_font; ///< Font used to display the string + unsigned int m_characterSize; ///< Base size of characters, in pixels + Uint32 m_style; ///< Text style (see Style enum) + Color m_color; ///< Text color + VertexArray m_vertices; ///< Vertex array containing the text's geometry + FloatRect m_bounds; ///< Bounding rectangle of the text (in local coordinates) +}; + +} // namespace sf + + +#endif // SFML_TEXT_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Text +/// \ingroup graphics +/// +/// sf::Text is a drawable class that allows to easily display +/// some text with custom style and color on a render target. +/// +/// It inherits all the functions from sf::Transformable: +/// position, rotation, scale, origin. It also adds text-specific +/// properties such as the font to use, the character size, +/// the font style (bold, italic, underlined), the global color +/// and the text to display of course. +/// It also provides convenience functions to calculate the +/// graphical size of the text, or to get the global position +/// of a given character. +/// +/// sf::Text works in combination with the sf::Font class, which +/// loads and provides the glyphs (visual characters) of a given font. +/// +/// The separation of sf::Font and sf::Text allows more flexibility +/// and better performances: indeed a sf::Font is a heavy resource, +/// and any operation on it is slow (often too slow for real-time +/// applications). On the other side, a sf::Text is a lightweight +/// object which can combine the glyphs data and metrics of a sf::Font +/// to display any text on a render target. +/// +/// It is important to note that the sf::Text instance doesn't +/// copy the font that it uses, it only keeps a reference to it. +/// Thus, a sf::Font must not be destructed while it is +/// used by a sf::Text (i.e. never write a function that +/// uses a local sf::Font instance for creating a text). +/// +/// Usage example: +/// \code +/// // Declare and load a font +/// sf::Font font; +/// font.loadFromFile("arial.ttf"); +/// +/// // Create a text +/// sf::Text text("hello", font); +/// text.setCharacterSize(30); +/// text.setStyle(sf::Text::Bold); +/// text.setColor(sf::Color::Red); +/// +/// // Draw it +/// window.draw(text); +/// \endcode +/// +/// \see sf::Font, sf::Transformable +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Texture.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Texture.hpp new file mode 100644 index 0000000..ba61f54 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Texture.hpp @@ -0,0 +1,602 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TEXTURE_HPP +#define SFML_TEXTURE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class Window; +class RenderTarget; +class RenderTexture; +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Image living on the graphics card that can be used for drawing +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Texture : GlResource +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Types of texture coordinates that can be used for rendering + /// + //////////////////////////////////////////////////////////// + enum CoordinateType + { + Normalized, ///< Texture coordinates in range [0 .. 1] + Pixels ///< Texture coordinates in range [0 .. size] + }; + +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty texture. + /// + //////////////////////////////////////////////////////////// + Texture(); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy instance to copy + /// + //////////////////////////////////////////////////////////// + Texture(const Texture& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Texture(); + + //////////////////////////////////////////////////////////// + /// \brief Create the texture + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param width Width of the texture + /// \param height Height of the texture + /// + /// \return True if creation was successful + /// + //////////////////////////////////////////////////////////// + bool create(unsigned int width, unsigned int height); + + //////////////////////////////////////////////////////////// + /// \brief Load the texture from a file on disk + /// + /// This function is a shortcut for the following code: + /// \code + /// sf::Image image; + /// image.loadFromFile(filename); + /// texture.loadFromImage(image, area); + /// \endcode + /// + /// The \a area argument can be used to load only a sub-rectangle + /// of the whole image. If you want the entire image then leave + /// the default value (which is an empty IntRect). + /// If the \a area rectangle crosses the bounds of the image, it + /// is adjusted to fit the image size. + /// + /// The maximum size for a texture depends on the graphics + /// driver and can be retrieved with the getMaximumSize function. + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param filename Path of the image file to load + /// \param area Area of the image to load + /// + /// \return True if loading was successful + /// + /// \see loadFromMemory, loadFromStream, loadFromImage + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename, const IntRect& area = IntRect()); + + //////////////////////////////////////////////////////////// + /// \brief Load the texture from a file in memory + /// + /// This function is a shortcut for the following code: + /// \code + /// sf::Image image; + /// image.loadFromMemory(data, size); + /// texture.loadFromImage(image, area); + /// \endcode + /// + /// The \a area argument can be used to load only a sub-rectangle + /// of the whole image. If you want the entire image then leave + /// the default value (which is an empty IntRect). + /// If the \a area rectangle crosses the bounds of the image, it + /// is adjusted to fit the image size. + /// + /// The maximum size for a texture depends on the graphics + /// driver and can be retrieved with the getMaximumSize function. + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param data Pointer to the file data in memory + /// \param size Size of the data to load, in bytes + /// \param area Area of the image to load + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromStream, loadFromImage + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const void* data, std::size_t size, const IntRect& area = IntRect()); + + //////////////////////////////////////////////////////////// + /// \brief Load the texture from a custom stream + /// + /// This function is a shortcut for the following code: + /// \code + /// sf::Image image; + /// image.loadFromStream(stream); + /// texture.loadFromImage(image, area); + /// \endcode + /// + /// The \a area argument can be used to load only a sub-rectangle + /// of the whole image. If you want the entire image then leave + /// the default value (which is an empty IntRect). + /// If the \a area rectangle crosses the bounds of the image, it + /// is adjusted to fit the image size. + /// + /// The maximum size for a texture depends on the graphics + /// driver and can be retrieved with the getMaximumSize function. + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param stream Source stream to read from + /// \param area Area of the image to load + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromMemory, loadFromImage + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(sf::InputStream& stream, const IntRect& area = IntRect()); + + //////////////////////////////////////////////////////////// + /// \brief Load the texture from an image + /// + /// The \a area argument can be used to load only a sub-rectangle + /// of the whole image. If you want the entire image then leave + /// the default value (which is an empty IntRect). + /// If the \a area rectangle crosses the bounds of the image, it + /// is adjusted to fit the image size. + /// + /// The maximum size for a texture depends on the graphics + /// driver and can be retrieved with the getMaximumSize function. + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param image Image to load into the texture + /// \param area Area of the image to load + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromImage(const Image& image, const IntRect& area = IntRect()); + + //////////////////////////////////////////////////////////// + /// \brief Return the size of the texture + /// + /// \return Size in pixels + /// + //////////////////////////////////////////////////////////// + Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Copy the texture pixels to an image + /// + /// This function performs a slow operation that downloads + /// the texture's pixels from the graphics card and copies + /// them to a new image, potentially applying transformations + /// to pixels if necessary (texture may be padded or flipped). + /// + /// \return Image containing the texture's pixels + /// + /// \see loadFromImage + /// + //////////////////////////////////////////////////////////// + Image copyToImage() const; + + //////////////////////////////////////////////////////////// + /// \brief Update the whole texture from an array of pixels + /// + /// The \a pixel array is assumed to have the same size as + /// the \a area rectangle, and to contain 32-bits RGBA pixels. + /// + /// No additional check is performed on the size of the pixel + /// array, passing invalid arguments will lead to an undefined + /// behaviour. + /// + /// This function does nothing if \a pixels is null or if the + /// texture was not previously created. + /// + /// \param pixels Array of pixels to copy to the texture + /// + //////////////////////////////////////////////////////////// + void update(const Uint8* pixels); + + //////////////////////////////////////////////////////////// + /// \brief Update a part of the texture from an array of pixels + /// + /// The size of the \a pixel array must match the \a width and + /// \a height arguments, and it must contain 32-bits RGBA pixels. + /// + /// No additional check is performed on the size of the pixel + /// array or the bounds of the area to update, passing invalid + /// arguments will lead to an undefined behaviour. + /// + /// This function does nothing if \a pixels is null or if the + /// texture was not previously created. + /// + /// \param pixels Array of pixels to copy to the texture + /// \param width Width of the pixel region contained in \a pixels + /// \param height Height of the pixel region contained in \a pixels + /// \param x X offset in the texture where to copy the source pixels + /// \param y Y offset in the texture where to copy the source pixels + /// + //////////////////////////////////////////////////////////// + void update(const Uint8* pixels, unsigned int width, unsigned int height, unsigned int x, unsigned int y); + + //////////////////////////////////////////////////////////// + /// \brief Update the texture from an image + /// + /// Although the source image can be smaller than the texture, + /// this function is usually used for updating the whole texture. + /// The other overload, which has (x, y) additional arguments, + /// is more convenient for updating a sub-area of the texture. + /// + /// No additional check is performed on the size of the image, + /// passing an image bigger than the texture will lead to an + /// undefined behaviour. + /// + /// This function does nothing if the texture was not + /// previously created. + /// + /// \param image Image to copy to the texture + /// + //////////////////////////////////////////////////////////// + void update(const Image& image); + + //////////////////////////////////////////////////////////// + /// \brief Update a part of the texture from an image + /// + /// No additional check is performed on the size of the image, + /// passing an invalid combination of image size and offset + /// will lead to an undefined behaviour. + /// + /// This function does nothing if the texture was not + /// previously created. + /// + /// \param image Image to copy to the texture + /// \param x X offset in the texture where to copy the source image + /// \param y Y offset in the texture where to copy the source image + /// + //////////////////////////////////////////////////////////// + void update(const Image& image, unsigned int x, unsigned int y); + + //////////////////////////////////////////////////////////// + /// \brief Update the texture from the contents of a window + /// + /// Although the source window can be smaller than the texture, + /// this function is usually used for updating the whole texture. + /// The other overload, which has (x, y) additional arguments, + /// is more convenient for updating a sub-area of the texture. + /// + /// No additional check is performed on the size of the window, + /// passing a window bigger than the texture will lead to an + /// undefined behaviour. + /// + /// This function does nothing if either the texture or the window + /// was not previously created. + /// + /// \param window Window to copy to the texture + /// + //////////////////////////////////////////////////////////// + void update(const Window& window); + + //////////////////////////////////////////////////////////// + /// \brief Update a part of the texture from the contents of a window + /// + /// No additional check is performed on the size of the window, + /// passing an invalid combination of window size and offset + /// will lead to an undefined behaviour. + /// + /// This function does nothing if either the texture or the window + /// was not previously created. + /// + /// \param window Window to copy to the texture + /// \param x X offset in the texture where to copy the source window + /// \param y Y offset in the texture where to copy the source window + /// + //////////////////////////////////////////////////////////// + void update(const Window& window, unsigned int x, unsigned int y); + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable the smooth filter + /// + /// When the filter is activated, the texture appears smoother + /// so that pixels are less noticeable. However if you want + /// the texture to look exactly the same as its source file, + /// you should leave it disabled. + /// The smooth filter is disabled by default. + /// + /// \param smooth True to enable smoothing, false to disable it + /// + /// \see isSmooth + /// + //////////////////////////////////////////////////////////// + void setSmooth(bool smooth); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the smooth filter is enabled or not + /// + /// \return True if smoothing is enabled, false if it is disabled + /// + /// \see setSmooth + /// + //////////////////////////////////////////////////////////// + bool isSmooth() const; + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable repeating + /// + /// Repeating is involved when using texture coordinates + /// outside the texture rectangle [0, 0, width, height]. + /// In this case, if repeat mode is enabled, the whole texture + /// will be repeated as many times as needed to reach the + /// coordinate (for example, if the X texture coordinate is + /// 3 * width, the texture will be repeated 3 times). + /// If repeat mode is disabled, the "extra space" will instead + /// be filled with border pixels. + /// Warning: on very old graphics cards, white pixels may appear + /// when the texture is repeated. With such cards, repeat mode + /// can be used reliably only if the texture has power-of-two + /// dimensions (such as 256x128). + /// Repeating is disabled by default. + /// + /// \param repeated True to repeat the texture, false to disable repeating + /// + /// \see isRepeated + /// + //////////////////////////////////////////////////////////// + void setRepeated(bool repeated); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the texture is repeated or not + /// + /// \return True if repeat mode is enabled, false if it is disabled + /// + /// \see setRepeated + /// + //////////////////////////////////////////////////////////// + bool isRepeated() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + Texture& operator =(const Texture& right); + + //////////////////////////////////////////////////////////// + /// \brief Bind a texture for rendering + /// + /// This function is not part of the graphics API, it mustn't be + /// used when drawing SFML entities. It must be used only if you + /// mix sf::Texture with OpenGL code. + /// + /// \code + /// sf::Texture t1, t2; + /// ... + /// sf::Texture::bind(&t1); + /// // draw OpenGL stuff that use t1... + /// sf::Texture::bind(&t2); + /// // draw OpenGL stuff that use t2... + /// sf::Texture::bind(NULL); + /// // draw OpenGL stuff that use no texture... + /// \endcode + /// + /// The \a coordinateType argument controls how texture + /// coordinates will be interpreted. If Normalized (the default), they + /// must be in range [0 .. 1], which is the default way of handling + /// texture coordinates with OpenGL. If Pixels, they must be given + /// in pixels (range [0 .. size]). This mode is used internally by + /// the graphics classes of SFML, it makes the definition of texture + /// coordinates more intuitive for the high-level API, users don't need + /// to compute normalized values. + /// + /// \param texture Pointer to the texture to bind, can be null to use no texture + /// \param coordinateType Type of texture coordinates to use + /// + //////////////////////////////////////////////////////////// + static void bind(const Texture* texture, CoordinateType coordinateType = Normalized); + + //////////////////////////////////////////////////////////// + /// \brief Get the maximum texture size allowed + /// + /// This maximum size is defined by the graphics driver. + /// You can expect a value of 512 pixels for low-end graphics + /// card, and up to 8192 pixels or more for newer hardware. + /// + /// \return Maximum size allowed for textures, in pixels + /// + //////////////////////////////////////////////////////////// + static unsigned int getMaximumSize(); + +private : + + friend class RenderTexture; + friend class RenderTarget; + + //////////////////////////////////////////////////////////// + /// \brief Get a valid image size according to hardware support + /// + /// This function checks whether the graphics driver supports + /// non power of two sizes or not, and adjusts the size + /// accordingly. + /// The returned size is greater than or equal to the original size. + /// + /// \param Size size to convert + /// + /// \return Valid nearest size (greater than or equal to specified size) + /// + //////////////////////////////////////////////////////////// + static unsigned int getValidSize(unsigned int size); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2u m_size; ///< Public texture size + Vector2u m_actualSize; ///< Actual texture size (can be greater than public size because of padding) + unsigned int m_texture; ///< Internal texture identifier + bool m_isSmooth; ///< Status of the smooth filter + bool m_isRepeated; ///< Is the texture in repeat mode? + mutable bool m_pixelsFlipped; ///< To work around the inconsistency in Y orientation + Uint64 m_cacheId; ///< Unique number that identifies the texture to the render target's cache +}; + +} // namespace sf + + +#endif // SFML_TEXTURE_HPP + +//////////////////////////////////////////////////////////// +/// \class sf::Texture +/// \ingroup graphics +/// +/// sf::Texture stores pixels that can be drawn, with a sprite +/// for example. A texture lives in the graphics card memory, +/// therefore it is very fast to draw a texture to a render target, +/// or copy a render target to a texture (the graphics card can +/// access both directly). +/// +/// Being stored in the graphics card memory has some drawbacks. +/// A texture cannot be manipulated as freely as a sf::Image, +/// you need to prepare the pixels first and then upload them +/// to the texture in a single operation (see Texture::update). +/// +/// sf::Texture makes it easy to convert from/to sf::Image, but +/// keep in mind that these calls require transfers between +/// the graphics card and the central memory, therefore they are +/// slow operations. +/// +/// A texture can be loaded from an image, but also directly +/// from a file/memory/stream. The necessary shortcuts are defined +/// so that you don't need an image first for the most common cases. +/// However, if you want to perform some modifications on the pixels +/// before creating the final texture, you can load your file to a +/// sf::Image, do whatever you need with the pixels, and then call +/// Texture::loadFromImage. +/// +/// Since they live in the graphics card memory, the pixels of a texture +/// cannot be accessed without a slow copy first. And they cannot be +/// accessed individually. Therefore, if you need to read the texture's +/// pixels (like for pixel-perfect collisions), it is recommended to +/// store the collision information separately, for example in an array +/// of booleans. +/// +/// Like sf::Image, sf::Texture can handle a unique internal +/// representation of pixels, which is RGBA 32 bits. This means +/// that a pixel must be composed of 8 bits red, green, blue and +/// alpha channels -- just like a sf::Color. +/// +/// Usage example: +/// \code +/// // This example shows the most common use of sf::Texture: +/// // drawing a sprite +/// +/// // Load a texture from a file +/// sf::Texture texture; +/// if (!texture.loadFromFile("texture.png")) +/// return -1; +/// +/// // Assign it to a sprite +/// sf::Sprite sprite; +/// sprite.setTexture(texture); +/// +/// // Draw the textured sprite +/// window.draw(sprite); +/// \endcode +/// +/// \code +/// // This example shows another common use of sf::Texture: +/// // streaming real-time data, like video frames +/// +/// // Create an empty texture +/// sf::Texture texture; +/// if (!texture.create(640, 480)) +/// return -1; +/// +/// // Create a sprite that will display the texture +/// sf::Sprite sprite(texture); +/// +/// while (...) // the main loop +/// { +/// ... +/// +/// // update the texture +/// sf::Uint8* pixels = ...; // get a fresh chunk of pixels (the next frame of a movie, for example) +/// texture.update(pixels); +/// +/// // draw it +/// window.draw(sprite); +/// +/// ... +/// } +/// +/// \endcode +/// +/// Like sf::Shader that can be used as a raw OpenGL shader, +/// sf::Texture can also be used directly as a raw texture for +/// custom OpenGL geometry. +/// \code +/// sf::Texture::bind(&texture); +/// ... render OpenGL geometry ... +/// sf::Texture::bind(NULL); +/// \endcode +/// +/// \see sf::Sprite, sf::Image, sf::RenderTexture +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Transform.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Transform.hpp new file mode 100644 index 0000000..3b91a8a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Transform.hpp @@ -0,0 +1,450 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TRANSFORM_HPP +#define SFML_TRANSFORM_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Define a 3x3 transform matrix +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Transform +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an identity transform (a transform that does nothing). + /// + //////////////////////////////////////////////////////////// + Transform(); + + //////////////////////////////////////////////////////////// + /// \brief Construct a transform from a 3x3 matrix + /// + /// \param a00 Element (0, 0) of the matrix + /// \param a01 Element (0, 1) of the matrix + /// \param a02 Element (0, 2) of the matrix + /// \param a10 Element (1, 0) of the matrix + /// \param a11 Element (1, 1) of the matrix + /// \param a12 Element (1, 2) of the matrix + /// \param a20 Element (2, 0) of the matrix + /// \param a21 Element (2, 1) of the matrix + /// \param a22 Element (2, 2) of the matrix + /// + //////////////////////////////////////////////////////////// + Transform(float a00, float a01, float a02, + float a10, float a11, float a12, + float a20, float a21, float a22); + + //////////////////////////////////////////////////////////// + /// \brief Return the transform as a 4x4 matrix + /// + /// This function returns a pointer to an array of 16 floats + /// containing the transform elements as a 4x4 matrix, which + /// is directly compatible with OpenGL functions. + /// + /// \code + /// sf::Transform transform = ...; + /// glLoadMatrixf(transform.getMatrix()); + /// \endcode + /// + /// \return Pointer to a 4x4 matrix + /// + //////////////////////////////////////////////////////////// + const float* getMatrix() const; + + //////////////////////////////////////////////////////////// + /// \brief Return the inverse of the transform + /// + /// If the inverse cannot be computed, an identity transform + /// is returned. + /// + /// \return A new transform which is the inverse of self + /// + //////////////////////////////////////////////////////////// + Transform getInverse() const; + + //////////////////////////////////////////////////////////// + /// \brief Transform a 2D point + /// + /// \param x X coordinate of the point to transform + /// \param y Y coordinate of the point to transform + /// + /// \return Transformed point + /// + //////////////////////////////////////////////////////////// + Vector2f transformPoint(float x, float y) const; + + //////////////////////////////////////////////////////////// + /// \brief Transform a 2D point + /// + /// \param point Point to transform + /// + /// \return Transformed point + /// + //////////////////////////////////////////////////////////// + Vector2f transformPoint(const Vector2f& point) const; + + //////////////////////////////////////////////////////////// + /// \brief Transform a rectangle + /// + /// Since SFML doesn't provide support for oriented rectangles, + /// the result of this function is always an axis-aligned + /// rectangle. Which means that if the transform contains a + /// rotation, the bounding rectangle of the transformed rectangle + /// is returned. + /// + /// \param rectangle Rectangle to transform + /// + /// \return Transformed rectangle + /// + //////////////////////////////////////////////////////////// + FloatRect transformRect(const FloatRect& rectangle) const; + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with another one + /// + /// The result is a transform that is equivalent to applying + /// *this followed by \a transform. Mathematically, it is + /// equivalent to a matrix multiplication. + /// + /// \param transform Transform to combine with this transform + /// + /// \return Reference to *this + /// + //////////////////////////////////////////////////////////// + Transform& combine(const Transform& transform); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a translation + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.translate(100, 200).rotate(45); + /// \endcode + /// + /// \param x Offset to apply on X axis + /// \param y Offset to apply on Y axis + /// + /// \return Reference to *this + /// + /// \see rotate, scale + /// + //////////////////////////////////////////////////////////// + Transform& translate(float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a translation + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.translate(sf::Vector2f(100, 200)).rotate(45); + /// \endcode + /// + /// \param offset Translation offset to apply + /// + /// \return Reference to *this + /// + /// \see rotate, scale + /// + //////////////////////////////////////////////////////////// + Transform& translate(const Vector2f& offset); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a rotation + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.rotate(90).translate(50, 20); + /// \endcode + /// + /// \param angle Rotation angle, in degrees + /// + /// \return Reference to *this + /// + /// \see translate, scale + /// + //////////////////////////////////////////////////////////// + Transform& rotate(float angle); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a rotation + /// + /// The center of rotation is provided for convenience as a second + /// argument, so that you can build rotations around arbitrary points + /// more easily (and efficiently) than the usual + /// translate(-center).rotate(angle).translate(center). + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.rotate(90, 8, 3).translate(50, 20); + /// \endcode + /// + /// \param angle Rotation angle, in degrees + /// \param centerX X coordinate of the center of rotation + /// \param centerY Y coordinate of the center of rotation + /// + /// \return Reference to *this + /// + /// \see translate, scale + /// + //////////////////////////////////////////////////////////// + Transform& rotate(float angle, float centerX, float centerY); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a rotation + /// + /// The center of rotation is provided for convenience as a second + /// argument, so that you can build rotations around arbitrary points + /// more easily (and efficiently) than the usual + /// translate(-center).rotate(angle).translate(center). + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.rotate(90, sf::Vector2f(8, 3)).translate(sf::Vector2f(50, 20)); + /// \endcode + /// + /// \param angle Rotation angle, in degrees + /// \param center Center of rotation + /// + /// \return Reference to *this + /// + /// \see translate, scale + /// + //////////////////////////////////////////////////////////// + Transform& rotate(float angle, const Vector2f& center); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a scaling + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.scale(2, 1).rotate(45); + /// \endcode + /// + /// \param scaleX Scaling factor on the X axis + /// \param scaleY Scaling factor on the Y axis + /// + /// \return Reference to *this + /// + /// \see translate, rotate + /// + //////////////////////////////////////////////////////////// + Transform& scale(float scaleX, float scaleY); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a scaling + /// + /// The center of scaling is provided for convenience as a second + /// argument, so that you can build scaling around arbitrary points + /// more easily (and efficiently) than the usual + /// translate(-center).scale(factors).translate(center). + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.scale(2, 1, 8, 3).rotate(45); + /// \endcode + /// + /// \param scaleX Scaling factor on X axis + /// \param scaleY Scaling factor on Y axis + /// \param centerX X coordinate of the center of scaling + /// \param centerY Y coordinate of the center of scaling + /// + /// \return Reference to *this + /// + /// \see translate, rotate + /// + //////////////////////////////////////////////////////////// + Transform& scale(float scaleX, float scaleY, float centerX, float centerY); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a scaling + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.scale(sf::Vector2f(2, 1)).rotate(45); + /// \endcode + /// + /// \param factors Scaling factors + /// + /// \return Reference to *this + /// + /// \see translate, rotate + /// + //////////////////////////////////////////////////////////// + Transform& scale(const Vector2f& factors); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a scaling + /// + /// The center of scaling is provided for convenience as a second + /// argument, so that you can build scaling around arbitrary points + /// more easily (and efficiently) than the usual + /// translate(-center).scale(factors).translate(center). + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.scale(sf::Vector2f(2, 1), sf::Vector2f(8, 3)).rotate(45); + /// \endcode + /// + /// \param factors Scaling factors + /// \param center Center of scaling + /// + /// \return Reference to *this + /// + /// \see translate, rotate + /// + //////////////////////////////////////////////////////////// + Transform& scale(const Vector2f& factors, const Vector2f& center); + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const Transform Identity; ///< The identity transform (does nothing) + +private: + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + float m_matrix[16]; ///< 4x4 matrix defining the transformation +}; + +//////////////////////////////////////////////////////////// +/// \relates sf::Transform +/// \brief Overload of binary operator * to combine two transforms +/// +/// This call is equivalent to calling Transform(left).combine(right). +/// +/// \param left Left operand (the first transform) +/// \param right Right operand (the second transform) +/// +/// \return New combined transform +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Transform operator *(const Transform& left, const Transform& right); + +//////////////////////////////////////////////////////////// +/// \relates sf::Transform +/// \brief Overload of binary operator *= to combine two transforms +/// +/// This call is equivalent to calling left.combine(right). +/// +/// \param left Left operand (the first transform) +/// \param right Right operand (the second transform) +/// +/// \return The combined transform +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Transform& operator *=(Transform& left, const Transform& right); + +//////////////////////////////////////////////////////////// +/// \relates sf::Transform +/// \brief Overload of binary operator * to transform a point +/// +/// This call is equivalent to calling left.transformPoint(right). +/// +/// \param left Left operand (the transform) +/// \param right Right operand (the point to transform) +/// +/// \return New transformed point +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Vector2f operator *(const Transform& left, const Vector2f& right); + +} // namespace sf + + +#endif // SFML_TRANSFORM_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Transform +/// \ingroup graphics +/// +/// A sf::Transform specifies how to translate, rotate, scale, +/// shear, project, whatever things. In mathematical terms, it defines +/// how to transform a coordinate system into another. +/// +/// For example, if you apply a rotation transform to a sprite, the +/// result will be a rotated sprite. And anything that is transformed +/// by this rotation transform will be rotated the same way, according +/// to its initial position. +/// +/// Transforms are typically used for drawing. But they can also be +/// used for any computation that requires to transform points between +/// the local and global coordinate systems of an entity (like collision +/// detection). +/// +/// Example: +/// \code +/// // define a translation transform +/// sf::Transform translation; +/// translation.translate(20, 50); +/// +/// // define a rotation transform +/// sf::Transform rotation; +/// rotation.rotate(45); +/// +/// // combine them +/// sf::Transform transform = translation * rotation; +/// +/// // use the result to transform stuff... +/// sf::Vector2f point = transform.transformPoint(10, 20); +/// sf::FloatRect rect = transform.transformRect(sf::FloatRect(0, 0, 10, 100)); +/// \endcode +/// +/// \see sf::Transformable, sf::RenderStates +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Transformable.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Transformable.hpp new file mode 100644 index 0000000..28fb386 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Transformable.hpp @@ -0,0 +1,417 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TRANSFORMABLE_HPP +#define SFML_TRANSFORMABLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Decomposed transform defined by a position, a rotation and a scale +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Transformable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Transformable(); + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Transformable(); + + //////////////////////////////////////////////////////////// + /// \brief set the position of the object + /// + /// This function completely overwrites the previous position. + /// See the move function to apply an offset based on the previous position instead. + /// The default position of a transformable object is (0, 0). + /// + /// \param x X coordinate of the new position + /// \param y Y coordinate of the new position + /// + /// \see move, getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief set the position of the object + /// + /// This function completely overwrites the previous position. + /// See the move function to apply an offset based on the previous position instead. + /// The default position of a transformable object is (0, 0). + /// + /// \param position New position + /// + /// \see move, getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(const Vector2f& position); + + //////////////////////////////////////////////////////////// + /// \brief set the orientation of the object + /// + /// This function completely overwrites the previous rotation. + /// See the rotate function to add an angle based on the previous rotation instead. + /// The default rotation of a transformable object is 0. + /// + /// \param angle New rotation, in degrees + /// + /// \see rotate, getRotation + /// + //////////////////////////////////////////////////////////// + void setRotation(float angle); + + //////////////////////////////////////////////////////////// + /// \brief set the scale factors of the object + /// + /// This function completely overwrites the previous scale. + /// See the scale function to add a factor based on the previous scale instead. + /// The default scale of a transformable object is (1, 1). + /// + /// \param factorX New horizontal scale factor + /// \param factorY New vertical scale factor + /// + /// \see scale, getScale + /// + //////////////////////////////////////////////////////////// + void setScale(float factorX, float factorY); + + //////////////////////////////////////////////////////////// + /// \brief set the scale factors of the object + /// + /// This function completely overwrites the previous scale. + /// See the scale function to add a factor based on the previous scale instead. + /// The default scale of a transformable object is (1, 1). + /// + /// \param factors New scale factors + /// + /// \see scale, getScale + /// + //////////////////////////////////////////////////////////// + void setScale(const Vector2f& factors); + + //////////////////////////////////////////////////////////// + /// \brief set the local origin of the object + /// + /// The origin of an object defines the center point for + /// all transformations (position, scale, rotation). + /// The coordinates of this point must be relative to the + /// top-left corner of the object, and ignore all + /// transformations (position, scale, rotation). + /// The default origin of a transformable object is (0, 0). + /// + /// \param x X coordinate of the new origin + /// \param y Y coordinate of the new origin + /// + /// \see getOrigin + /// + //////////////////////////////////////////////////////////// + void setOrigin(float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief set the local origin of the object + /// + /// The origin of an object defines the center point for + /// all transformations (position, scale, rotation). + /// The coordinates of this point must be relative to the + /// top-left corner of the object, and ignore all + /// transformations (position, scale, rotation). + /// The default origin of a transformable object is (0, 0). + /// + /// \param origin New origin + /// + /// \see getOrigin + /// + //////////////////////////////////////////////////////////// + void setOrigin(const Vector2f& origin); + + //////////////////////////////////////////////////////////// + /// \brief get the position of the object + /// + /// \return Current position + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + const Vector2f& getPosition() const; + + //////////////////////////////////////////////////////////// + /// \brief get the orientation of the object + /// + /// The rotation is always in the range [0, 360]. + /// + /// \return Current rotation, in degrees + /// + /// \see setRotation + /// + //////////////////////////////////////////////////////////// + float getRotation() const; + + //////////////////////////////////////////////////////////// + /// \brief get the current scale of the object + /// + /// \return Current scale factors + /// + /// \see setScale + /// + //////////////////////////////////////////////////////////// + const Vector2f& getScale() const; + + //////////////////////////////////////////////////////////// + /// \brief get the local origin of the object + /// + /// \return Current origin + /// + /// \see setOrigin + /// + //////////////////////////////////////////////////////////// + const Vector2f& getOrigin() const; + + //////////////////////////////////////////////////////////// + /// \brief Move the object by a given offset + /// + /// This function adds to the current position of the object, + /// unlike setPosition which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// sf::Vector2f pos = object.getPosition(); + /// object.setPosition(pos.x + offsetX, pos.y + offsetY); + /// \endcode + /// + /// \param offsetX X offset + /// \param offsetY Y offset + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + void move(float offsetX, float offsetY); + + //////////////////////////////////////////////////////////// + /// \brief Move the object by a given offset + /// + /// This function adds to the current position of the object, + /// unlike setPosition which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// object.setPosition(object.getPosition() + offset); + /// \endcode + /// + /// \param offset Offset + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + void move(const Vector2f& offset); + + //////////////////////////////////////////////////////////// + /// \brief Rotate the object + /// + /// This function adds to the current rotation of the object, + /// unlike setRotation which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// object.setRotation(object.getRotation() + angle); + /// \endcode + /// + /// \param angle Angle of rotation, in degrees + /// + //////////////////////////////////////////////////////////// + void rotate(float angle); + + //////////////////////////////////////////////////////////// + /// \brief Scale the object + /// + /// This function multiplies the current scale of the object, + /// unlike setScale which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// sf::Vector2f scale = object.getScale(); + /// object.setScale(scale.x * factorX, scale.y * factorY); + /// \endcode + /// + /// \param factorX Horizontal scale factor + /// \param factorY Vertical scale factor + /// + /// \see setScale + /// + //////////////////////////////////////////////////////////// + void scale(float factorX, float factorY); + + //////////////////////////////////////////////////////////// + /// \brief Scale the object + /// + /// This function multiplies the current scale of the object, + /// unlike setScale which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// sf::Vector2f scale = object.getScale(); + /// object.setScale(scale.x * factor.x, scale.y * factor.y); + /// \endcode + /// + /// \param factor Scale factors + /// + /// \see setScale + /// + //////////////////////////////////////////////////////////// + void scale(const Vector2f& factor); + + //////////////////////////////////////////////////////////// + /// \brief get the combined transform of the object + /// + /// \return Transform combining the position/rotation/scale/origin of the object + /// + /// \see getInverseTransform + /// + //////////////////////////////////////////////////////////// + const Transform& getTransform() const; + + //////////////////////////////////////////////////////////// + /// \brief get the inverse of the combined transform of the object + /// + /// \return Inverse of the combined transformations applied to the object + /// + /// \see getTransform + /// + //////////////////////////////////////////////////////////// + const Transform& getInverseTransform() const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2f m_origin; ///< Origin of translation/rotation/scaling of the object + Vector2f m_position; ///< Position of the object in the 2D world + float m_rotation; ///< Orientation of the object, in degrees + Vector2f m_scale; ///< Scale of the object + mutable Transform m_transform; ///< Combined transformation of the object + mutable bool m_transformNeedUpdate; ///< Does the transform need to be recomputed? + mutable Transform m_inverseTransform; ///< Combined transformation of the object + mutable bool m_inverseTransformNeedUpdate; ///< Does the transform need to be recomputed? +}; + +} // namespace sf + + +#endif // SFML_TRANSFORMABLE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Transformable +/// \ingroup graphics +/// +/// This class is provided for convenience, on top of sf::Transform. +/// +/// sf::Transform, as a low-level class, offers a great level of +/// flexibility but it is not always convenient to manage. Indeed, +/// one can easily combine any kind of operation, such as a translation +/// followed by a rotation followed by a scaling, but once the result +/// transform is built, there's no way to go backward and, let's say, +/// change only the rotation without modifying the translation and scaling. +/// The entire transform must be recomputed, which means that you +/// need to retrieve the initial translation and scale factors as +/// well, and combine them the same way you did before updating the +/// rotation. This is a tedious operation, and it requires to store +/// all the individual components of the final transform. +/// +/// That's exactly what sf::Transformable was written for: it hides +/// these variables and the composed transform behind an easy to use +/// interface. You can set or get any of the individual components +/// without worrying about the others. It also provides the composed +/// transform (as a sf::Transform), and keeps it up-to-date. +/// +/// In addition to the position, rotation and scale, sf::Transformable +/// provides an "origin" component, which represents the local origin +/// of the three other components. Let's take an example with a 10x10 +/// pixels sprite. By default, the sprite is positioned/rotated/scaled +/// relatively to its top-left corner, because it is the local point +/// (0, 0). But if we change the origin to be (5, 5), the sprite will +/// be positioned/rotated/scaled around its center instead. And if +/// we set the origin to (10, 10), it will be transformed around its +/// bottom-right corner. +/// +/// To keep the sf::Transformable class simple, there's only one +/// origin for all the components. You cannot position the sprite +/// relatively to its top-left corner while rotating it around its +/// center, for example. To do such things, use sf::Transform directly. +/// +/// sf::Transformable can be used as a base class. It is often +/// combined with sf::Drawable -- that's what SFML's sprites, +/// texts and shapes do. +/// \code +/// class MyEntity : public sf::Transformable, public sf::Drawable +/// { +/// virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const +/// { +/// states.transform *= getTransform(); +/// target.draw(..., states); +/// } +/// }; +/// +/// MyEntity entity; +/// entity.setPosition(10, 20); +/// entity.setRotation(45); +/// window.draw(entity); +/// \endcode +/// +/// It can also be used as a member, if you don't want to use +/// its API directly (because you don't need all its functions, +/// or you have different naming conventions for example). +/// \code +/// class MyEntity +/// { +/// public : +/// void SetPosition(const MyVector& v) +/// { +/// myTransform.setPosition(v.x(), v.y()); +/// } +/// +/// void Draw(sf::RenderTarget& target) const +/// { +/// target.draw(..., myTransform.getTransform()); +/// } +/// +/// private : +/// sf::Transformable myTransform; +/// }; +/// \endcode +/// +/// \see sf::Transform +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Vertex.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Vertex.hpp new file mode 100644 index 0000000..b983ef2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/Vertex.hpp @@ -0,0 +1,148 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VERTEX_HPP +#define SFML_VERTEX_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Define a point with color and texture coordinates +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Vertex +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Vertex(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex from its position + /// + /// The vertex color is white and texture coordinates are (0, 0). + /// + /// \param thePosition Vertex position + /// + //////////////////////////////////////////////////////////// + Vertex(const Vector2f& thePosition); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex from its position and color + /// + /// The texture coordinates are (0, 0). + /// + /// \param thePosition Vertex position + /// \param theColor Vertex color + /// + //////////////////////////////////////////////////////////// + Vertex(const Vector2f& thePosition, const Color& theColor); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex from its position and texture coordinates + /// + /// The vertex color is white. + /// + /// \param thePosition Vertex position + /// \param theTexCoords Vertex texture coordinates + /// + //////////////////////////////////////////////////////////// + Vertex(const Vector2f& thePosition, const Vector2f& theTexCoords); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex from its position, color and texture coordinates + /// + /// \param thePosition Vertex position + /// \param theColor Vertex color + /// \param theTexCoords Vertex texture coordinates + /// + //////////////////////////////////////////////////////////// + Vertex(const Vector2f& thePosition, const Color& theColor, const Vector2f& theTexCoords); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2f position; ///< 2D position of the vertex + Color color; ///< Color of the vertex + Vector2f texCoords; ///< Coordinates of the texture's pixel to map to the vertex +}; + +} // namespace sf + + +#endif // SFML_VERTEX_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Vertex +/// \ingroup graphics +/// +/// A vertex is an improved point. It has a position and other +/// extra attributes that will be used for drawing: in SFML, +/// vertices also have a color and a pair of texture coordinates. +/// +/// The vertex is the building block of drawing. Everything which +/// is visible on screen is made of vertices. They are grouped +/// as 2D primitives (triangles, quads, ...), and these primitives +/// are grouped to create even more complex 2D entities such as +/// sprites, texts, etc. +/// +/// If you use the graphical entities of SFML (sprite, text, shape) +/// you won't have to deal with vertices directly. But if you want +/// to define your own 2D entities, such as tiled maps or particle +/// systems, using vertices will allow you to get maximum performances. +/// +/// Example: +/// \code +/// // define a 100x100 square, red, with a 10x10 texture mapped on it +/// sf::Vertex vertices[] = +/// { +/// sf::Vertex(sf::Vector2f( 0, 0), sf::Color::Red, sf::Vector2f( 0, 0)), +/// sf::Vertex(sf::Vector2f( 0, 100), sf::Color::Red, sf::Vector2f( 0, 10)), +/// sf::Vertex(sf::Vector2f(100, 100), sf::Color::Red, sf::Vector2f(10, 10)), +/// sf::Vertex(sf::Vector2f(100, 0), sf::Color::Red, sf::Vector2f(10, 0)) +/// }; +/// +/// // draw it +/// window.draw(vertices, 4, sf::Quads); +/// \endcode +/// +/// Note: although texture coordinates are supposed to be an integer +/// amount of pixels, their type is float because of some buggy graphics +/// drivers that are not able to process integer coordinates correctly. +/// +/// \see sf::VertexArray +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/VertexArray.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/VertexArray.hpp new file mode 100644 index 0000000..fc67845 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/VertexArray.hpp @@ -0,0 +1,223 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VERTEXARRAY_HPP +#define SFML_VERTEXARRAY_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Define a set of one or more 2D primitives +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API VertexArray : public Drawable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty vertex array. + /// + //////////////////////////////////////////////////////////// + VertexArray(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex array with a type and an initial number of vertices + /// + /// \param type Type of primitives + /// \param vertexCount Initial number of vertices in the array + /// + //////////////////////////////////////////////////////////// + explicit VertexArray(PrimitiveType type, unsigned int vertexCount = 0); + + //////////////////////////////////////////////////////////// + /// \brief Return the vertex count + /// + /// \return Number of vertices in the array + /// + //////////////////////////////////////////////////////////// + unsigned int getVertexCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get a read-write access to a vertex by its index + /// + /// This function doesn't check \a index, it must be in range + /// [0, getVertexCount() - 1]. The behaviour is undefined + /// otherwise. + /// + /// \param index Index of the vertex to get + /// + /// \return Reference to the index-th vertex + /// + /// \see getVertexCount + /// + //////////////////////////////////////////////////////////// + Vertex& operator [](unsigned int index); + + //////////////////////////////////////////////////////////// + /// \brief Get a read-only access to a vertex by its index + /// + /// This function doesn't check \a index, it must be in range + /// [0, getVertexCount() - 1]. The behaviour is undefined + /// otherwise. + /// + /// \param index Index of the vertex to get + /// + /// \return Const reference to the index-th vertex + /// + /// \see getVertexCount + /// + //////////////////////////////////////////////////////////// + const Vertex& operator [](unsigned int index) const; + + //////////////////////////////////////////////////////////// + /// \brief Clear the vertex array + /// + /// This function removes all the vertices from the array. + /// It doesn't deallocate the corresponding memory, so that + /// adding new vertices after clearing doesn't involve + /// reallocating all the memory. + /// + //////////////////////////////////////////////////////////// + void clear(); + + //////////////////////////////////////////////////////////// + /// \brief Resize the vertex array + /// + /// If \a vertexCount is greater than the current size, the previous + /// vertices are kept and new (default-constructed) vertices are + /// added. + /// If \a vertexCount is less than the current size, existing vertices + /// are removed from the array. + /// + /// \param vertexCount New size of the array (number of vertices) + /// + //////////////////////////////////////////////////////////// + void resize(unsigned int vertexCount); + + //////////////////////////////////////////////////////////// + /// \brief Add a vertex to the array + /// + /// \param vertex Vertex to add + /// + //////////////////////////////////////////////////////////// + void append(const Vertex& vertex); + + //////////////////////////////////////////////////////////// + /// \brief Set the type of primitives to draw + /// + /// This function defines how the vertices must be interpreted + /// when it's time to draw them: + /// \li As points + /// \li As lines + /// \li As triangles + /// \li As quads + /// The default primitive type is sf::Points. + /// + /// \param type Type of primitive + /// + //////////////////////////////////////////////////////////// + void setPrimitiveType(PrimitiveType type); + + //////////////////////////////////////////////////////////// + /// \brief Get the type of primitives drawn by the vertex array + /// + /// \return Primitive type + /// + //////////////////////////////////////////////////////////// + PrimitiveType getPrimitiveType() const; + + //////////////////////////////////////////////////////////// + /// \brief Compute the bounding rectangle of the vertex array + /// + /// This function returns the axis-aligned rectangle that + /// contains all the vertices of the array. + /// + /// \return Bounding rectangle of the vertex array + /// + //////////////////////////////////////////////////////////// + FloatRect getBounds() const; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Draw the vertex array to a render target + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const; + +private: + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_vertices; ///< Vertices contained in the array + PrimitiveType m_primitiveType; ///< Type of primitives to draw +}; + +} // namespace sf + + +#endif // SFML_VERTEXARRAY_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::VertexArray +/// \ingroup graphics +/// +/// sf::VertexArray is a very simple wrapper around a dynamic +/// array of vertices and a primitives type. +/// +/// It inherits sf::Drawable, but unlike other drawables it +/// is not transformable. +/// +/// Example: +/// \code +/// sf::VertexArray lines(sf::LinesStrip, 4); +/// lines[0].position = sf::Vector2f(10, 0); +/// lines[1].position = sf::Vector2f(20, 0); +/// lines[2].position = sf::Vector2f(30, 5); +/// lines[3].position = sf::Vector2f(40, 2); +/// +/// window.draw(lines); +/// \endcode +/// +/// \see sf::Vertex +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/View.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/View.hpp new file mode 100644 index 0000000..7713aef --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Graphics/View.hpp @@ -0,0 +1,341 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VIEW_HPP +#define SFML_VIEW_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief 2D camera that defines what region is shown on screen +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API View +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates a default view of (0, 0, 1000, 1000) + /// + //////////////////////////////////////////////////////////// + View(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the view from a rectangle + /// + /// \param rectangle Rectangle defining the zone to display + /// + //////////////////////////////////////////////////////////// + explicit View(const FloatRect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Construct the view from its center and size + /// + /// \param center Center of the zone to display + /// \param size Size of zone to display + /// + //////////////////////////////////////////////////////////// + View(const Vector2f& center, const Vector2f& size); + + //////////////////////////////////////////////////////////// + /// \brief Set the center of the view + /// + /// \param x X coordinate of the new center + /// \param y Y coordinate of the new center + /// + /// \see setSize, getCenter + /// + //////////////////////////////////////////////////////////// + void setCenter(float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief Set the center of the view + /// + /// \param center New center + /// + /// \see setSize, getCenter + /// + //////////////////////////////////////////////////////////// + void setCenter(const Vector2f& center); + + //////////////////////////////////////////////////////////// + /// \brief Set the size of the view + /// + /// \param width New width of the view + /// \param height New height of the view + /// + /// \see setCenter, getCenter + /// + //////////////////////////////////////////////////////////// + void setSize(float width, float height); + + //////////////////////////////////////////////////////////// + /// \brief Set the size of the view + /// + /// \param size New size + /// + /// \see setCenter, getCenter + /// + //////////////////////////////////////////////////////////// + void setSize(const Vector2f& size); + + //////////////////////////////////////////////////////////// + /// \brief Set the orientation of the view + /// + /// The default rotation of a view is 0 degree. + /// + /// \param angle New angle, in degrees + /// + /// \see getRotation + /// + //////////////////////////////////////////////////////////// + void setRotation(float angle); + + //////////////////////////////////////////////////////////// + /// \brief Set the target viewport + /// + /// The viewport is the rectangle into which the contents of the + /// view are displayed, expressed as a factor (between 0 and 1) + /// of the size of the RenderTarget to which the view is applied. + /// For example, a view which takes the left side of the target would + /// be defined with View.setViewport(sf::FloatRect(0, 0, 0.5, 1)). + /// By default, a view has a viewport which covers the entire target. + /// + /// \param viewport New viewport rectangle + /// + /// \see getViewport + /// + //////////////////////////////////////////////////////////// + void setViewport(const FloatRect& viewport); + + //////////////////////////////////////////////////////////// + /// \brief Reset the view to the given rectangle + /// + /// Note that this function resets the rotation angle to 0. + /// + /// \param rectangle Rectangle defining the zone to display + /// + /// \see setCenter, setSize, setRotation + /// + //////////////////////////////////////////////////////////// + void reset(const FloatRect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Get the center of the view + /// + /// \return Center of the view + /// + /// \see getSize, setCenter + /// + //////////////////////////////////////////////////////////// + const Vector2f& getCenter() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the view + /// + /// \return Size of the view + /// + /// \see getCenter, setSize + /// + //////////////////////////////////////////////////////////// + const Vector2f& getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the current orientation of the view + /// + /// \return Rotation angle of the view, in degrees + /// + /// \see setRotation + /// + //////////////////////////////////////////////////////////// + float getRotation() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the target viewport rectangle of the view + /// + /// \return Viewport rectangle, expressed as a factor of the target size + /// + /// \see setViewport + /// + //////////////////////////////////////////////////////////// + const FloatRect& getViewport() const; + + //////////////////////////////////////////////////////////// + /// \brief Move the view relatively to its current position + /// + /// \param offsetX X coordinate of the move offset + /// \param offsetY Y coordinate of the move offset + /// + /// \see setCenter, rotate, zoom + /// + //////////////////////////////////////////////////////////// + void move(float offsetX, float offsetY); + + //////////////////////////////////////////////////////////// + /// \brief Move the view relatively to its current position + /// + /// \param offset Move offset + /// + /// \see setCenter, rotate, zoom + /// + //////////////////////////////////////////////////////////// + void move(const Vector2f& offset); + + //////////////////////////////////////////////////////////// + /// \brief Rotate the view relatively to its current orientation + /// + /// \param angle Angle to rotate, in degrees + /// + /// \see setRotation, move, zoom + /// + //////////////////////////////////////////////////////////// + void rotate(float angle); + + //////////////////////////////////////////////////////////// + /// \brief Resize the view rectangle relatively to its current size + /// + /// Resizing the view simulates a zoom, as the zone displayed on + /// screen grows or shrinks. + /// \a factor is a multiplier: + /// \li 1 keeps the size unchanged + /// \li > 1 makes the view bigger (objects appear smaller) + /// \li < 1 makes the view smaller (objects appear bigger) + /// + /// \param factor Zoom factor to apply + /// + /// \see setSize, move, rotate + /// + //////////////////////////////////////////////////////////// + void zoom(float factor); + + //////////////////////////////////////////////////////////// + /// \brief Get the projection transform of the view + /// + /// This function is meant for internal use only. + /// + /// \return Projection transform defining the view + /// + /// \see getInverseTransform + /// + //////////////////////////////////////////////////////////// + const Transform& getTransform() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the inverse projection transform of the view + /// + /// This function is meant for internal use only. + /// + /// \return Inverse of the projection transform defining the view + /// + /// \see getTransform + /// + //////////////////////////////////////////////////////////// + const Transform& getInverseTransform() const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2f m_center; ///< Center of the view, in scene coordinates + Vector2f m_size; ///< Size of the view, in scene coordinates + float m_rotation; ///< Angle of rotation of the view rectangle, in degrees + FloatRect m_viewport; ///< Viewport rectangle, expressed as a factor of the render-target's size + mutable Transform m_transform; ///< Precomputed projection transform corresponding to the view + mutable Transform m_inverseTransform; ///< Precomputed inverse projection transform corresponding to the view + mutable bool m_transformUpdated; ///< Internal state telling if the transform needs to be updated + mutable bool m_invTransformUpdated; ///< Internal state telling if the inverse transform needs to be updated +}; + +} // namespace sf + + +#endif // SFML_VIEW_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::View +/// \ingroup graphics +/// +/// sf::View defines a camera in the 2D scene. This is a +/// very powerful concept: you can scroll, rotate or zoom +/// the entire scene without altering the way that your +/// drawable objects are drawn. +/// +/// A view is composed of a source rectangle, which defines +/// what part of the 2D scene is shown, and a target viewport, +/// which defines where the contents of the source rectangle +/// will be displayed on the render target (window or texture). +/// +/// The viewport allows to map the scene to a custom part +/// of the render target, and can be used for split-screen +/// or for displaying a minimap, for example. If the source +/// rectangle has not the same size as the viewport, its +/// contents will be stretched to fit in. +/// +/// To apply a view, you have to assign it to the render target. +/// Then, every objects drawn in this render target will be +/// affected by the view until you use another view. +/// +/// Usage example: +/// \code +/// sf::RenderWindow window; +/// sf::View view; +/// +/// // Initialize the view to a rectangle located at (100, 100) and with a size of 400x200 +/// view.reset(sf::FloatRect(100, 100, 400, 200)); +/// +/// // Rotate it by 45 degrees +/// view.rotate(45); +/// +/// // Set its target viewport to be half of the window +/// view.setViewport(sf::FloatRect(0.f, 0.f, 0.5f, 1.f)); +/// +/// // Apply it +/// window.setView(view); +/// +/// // Render stuff +/// window.draw(someSprite); +/// +/// // Set the default view back +/// window.setView(window.getDefaultView()); +/// +/// // Render stuff not affected by the view +/// window.draw(someText); +/// \endcode +/// +/// \see sf::RenderWindow, sf::RenderTexture +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network.hpp new file mode 100644 index 0000000..66b3b85 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network.hpp @@ -0,0 +1,51 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_NETWORK_HPP +#define SFML_NETWORK_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // SFML_NETWORK_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup network Network module +/// +/// Socket-based communication, utilities and higher-level +/// network protocols (HTTP, FTP). +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Export.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Export.hpp new file mode 100644 index 0000000..7dcd1d0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_NETWORK_EXPORT_HPP +#define SFML_NETWORK_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_NETWORK_EXPORTS) + + #define SFML_NETWORK_API SFML_API_EXPORT + +#else + + #define SFML_NETWORK_API SFML_API_IMPORT + +#endif + + +#endif // SFML_NETWORK_EXPORT_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Ftp.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Ftp.hpp new file mode 100644 index 0000000..9b8ed9b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Ftp.hpp @@ -0,0 +1,591 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_FTP_HPP +#define SFML_FTP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +class IpAddress; + +//////////////////////////////////////////////////////////// +/// \brief A FTP client +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API Ftp : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Enumeration of transfer modes + /// + //////////////////////////////////////////////////////////// + enum TransferMode + { + Binary, ///< Binary mode (file is transfered as a sequence of bytes) + Ascii, ///< Text mode using ASCII encoding + Ebcdic ///< Text mode using EBCDIC encoding + }; + + //////////////////////////////////////////////////////////// + /// \brief Define a FTP response + /// + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API Response + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Status codes possibly returned by a FTP response + /// + //////////////////////////////////////////////////////////// + enum Status + { + // 1xx: the requested action is being initiated, + // expect another reply before proceeding with a new command + RestartMarkerReply = 110, ///< Restart marker reply + ServiceReadySoon = 120, ///< Service ready in N minutes + DataConnectionAlreadyOpened = 125, ///< Data connection already opened, transfer starting + OpeningDataConnection = 150, ///< File status ok, about to open data connection + + // 2xx: the requested action has been successfully completed + Ok = 200, ///< Command ok + PointlessCommand = 202, ///< Command not implemented + SystemStatus = 211, ///< System status, or system help reply + DirectoryStatus = 212, ///< Directory status + FileStatus = 213, ///< File status + HelpMessage = 214, ///< Help message + SystemType = 215, ///< NAME system type, where NAME is an official system name from the list in the Assigned Numbers document + ServiceReady = 220, ///< Service ready for new user + ClosingConnection = 221, ///< Service closing control connection + DataConnectionOpened = 225, ///< Data connection open, no transfer in progress + ClosingDataConnection = 226, ///< Closing data connection, requested file action successful + EnteringPassiveMode = 227, ///< Entering passive mode + LoggedIn = 230, ///< User logged in, proceed. Logged out if appropriate + FileActionOk = 250, ///< Requested file action ok + DirectoryOk = 257, ///< PATHNAME created + + // 3xx: the command has been accepted, but the requested action + // is dormant, pending receipt of further information + NeedPassword = 331, ///< User name ok, need password + NeedAccountToLogIn = 332, ///< Need account for login + NeedInformation = 350, ///< Requested file action pending further information + + // 4xx: the command was not accepted and the requested action did not take place, + // but the error condition is temporary and the action may be requested again + ServiceUnavailable = 421, ///< Service not available, closing control connection + DataConnectionUnavailable = 425, ///< Can't open data connection + TransferAborted = 426, ///< Connection closed, transfer aborted + FileActionAborted = 450, ///< Requested file action not taken + LocalError = 451, ///< Requested action aborted, local error in processing + InsufficientStorageSpace = 452, ///< Requested action not taken; insufficient storage space in system, file unavailable + + // 5xx: the command was not accepted and + // the requested action did not take place + CommandUnknown = 500, ///< Syntax error, command unrecognized + ParametersUnknown = 501, ///< Syntax error in parameters or arguments + CommandNotImplemented = 502, ///< Command not implemented + BadCommandSequence = 503, ///< Bad sequence of commands + ParameterNotImplemented = 504, ///< Command not implemented for that parameter + NotLoggedIn = 530, ///< Not logged in + NeedAccountToStore = 532, ///< Need account for storing files + FileUnavailable = 550, ///< Requested action not taken, file unavailable + PageTypeUnknown = 551, ///< Requested action aborted, page type unknown + NotEnoughMemory = 552, ///< Requested file action aborted, exceeded storage allocation + FilenameNotAllowed = 553, ///< Requested action not taken, file name not allowed + + // 10xx: SFML custom codes + InvalidResponse = 1000, ///< Response is not a valid FTP one + ConnectionFailed = 1001, ///< Connection with server failed + ConnectionClosed = 1002, ///< Connection with server closed + InvalidFile = 1003 ///< Invalid file to upload / download + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor is used by the FTP client to build + /// the response. + /// + /// \param code Response status code + /// \param message Response message + /// + //////////////////////////////////////////////////////////// + explicit Response(Status code = InvalidResponse, const std::string& message = ""); + + //////////////////////////////////////////////////////////// + /// \brief Check if the status code means a success + /// + /// This function is defined for convenience, it is + /// equivalent to testing if the status code is < 400. + /// + /// \return True if the status is a success, false if it is a failure + /// + //////////////////////////////////////////////////////////// + bool isOk() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the status code of the response + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the full message contained in the response + /// + /// \return The response message + /// + //////////////////////////////////////////////////////////// + const std::string& getMessage() const; + + private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Status m_status; ///< Status code returned from the server + std::string m_message; ///< Last message received from the server + }; + + //////////////////////////////////////////////////////////// + /// \brief Specialization of FTP response returning a directory + /// + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API DirectoryResponse : public Response + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param response Source response + /// + //////////////////////////////////////////////////////////// + DirectoryResponse(const Response& response); + + //////////////////////////////////////////////////////////// + /// \brief Get the directory returned in the response + /// + /// \return Directory name + /// + //////////////////////////////////////////////////////////// + const std::string& getDirectory() const; + + private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::string m_directory; ///< Directory extracted from the response message + }; + + + //////////////////////////////////////////////////////////// + /// \brief Specialization of FTP response returning a + /// filename lisiting + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API ListingResponse : public Response + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param response Source response + /// \param data Data containing the raw listing + /// + //////////////////////////////////////////////////////////// + ListingResponse(const Response& response, const std::vector& data); + + //////////////////////////////////////////////////////////// + /// \brief Return the array of directory/file names + /// + /// \return Array containing the requested listing + /// + //////////////////////////////////////////////////////////// + const std::vector& getListing() const; + + private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_listing; ///< Directory/file names extracted from the data + }; + + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// Automatically closes the connection with the server if + /// it is still opened. + /// + //////////////////////////////////////////////////////////// + ~Ftp(); + + //////////////////////////////////////////////////////////// + /// \brief Connect to the specified FTP server + /// + /// The port has a default value of 21, which is the standard + /// port used by the FTP protocol. You shouldn't use a different + /// value, unless you really know what you do. + /// This function tries to connect to the server so it may take + /// a while to complete, especially if the server is not + /// reachable. To avoid blocking your application for too long, + /// you can use a timeout. The default value, Time::Zero, means that the + /// system timeout will be used (which is usually pretty long). + /// + /// \param server Name or address of the FTP server to connect to + /// \param port Port used for the connection + /// \param timeout Maximum time to wait + /// + /// \return Server response to the request + /// + /// \see disconnect + /// + //////////////////////////////////////////////////////////// + Response connect(const IpAddress& server, unsigned short port = 21, Time timeout = Time::Zero); + + //////////////////////////////////////////////////////////// + /// \brief Close the connection with the server + /// + /// \return Server response to the request + /// + /// \see connect + /// + //////////////////////////////////////////////////////////// + Response disconnect(); + + //////////////////////////////////////////////////////////// + /// \brief Log in using an anonymous account + /// + /// Logging in is mandatory after connecting to the server. + /// Users that are not logged in cannot perform any operation. + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response login(); + + //////////////////////////////////////////////////////////// + /// \brief Log in using a username and a password + /// + /// Logging in is mandatory after connecting to the server. + /// Users that are not logged in cannot perform any operation. + /// + /// \param name User name + /// \param password Password + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response login(const std::string& name, const std::string& password); + + //////////////////////////////////////////////////////////// + /// \brief Send a null command to keep the connection alive + /// + /// This command is useful because the server may close the + /// connection automatically if no command is sent. + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response keepAlive(); + + //////////////////////////////////////////////////////////// + /// \brief Get the current working directory + /// + /// The working directory is the root path for subsequent + /// operations involving directories and/or filenames. + /// + /// \return Server response to the request + /// + /// \see getDirectoryListing, changeDirectory, parentDirectory + /// + //////////////////////////////////////////////////////////// + DirectoryResponse getWorkingDirectory(); + + //////////////////////////////////////////////////////////// + /// \brief Get the contents of the given directory + /// + /// This function retrieves the sub-directories and files + /// contained in the given directory. It is not recursive. + /// The \a directory parameter is relative to the current + /// working directory. + /// + /// \param directory Directory to list + /// + /// \return Server response to the request + /// + /// \see getWorkingDirectory, changeDirectory, parentDirectory + /// + //////////////////////////////////////////////////////////// + ListingResponse getDirectoryListing(const std::string& directory = ""); + + //////////////////////////////////////////////////////////// + /// \brief Change the current working directory + /// + /// The new directory must be relative to the current one. + /// + /// \param directory New working directory + /// + /// \return Server response to the request + /// + /// \see getWorkingDirectory, getDirectoryListing, parentDirectory + /// + //////////////////////////////////////////////////////////// + Response changeDirectory(const std::string& directory); + + //////////////////////////////////////////////////////////// + /// \brief Go to the parent directory of the current one + /// + /// \return Server response to the request + /// + /// \see getWorkingDirectory, getDirectoryListing, changeDirectory + /// + //////////////////////////////////////////////////////////// + Response parentDirectory(); + + //////////////////////////////////////////////////////////// + /// \brief Create a new directory + /// + /// The new directory is created as a child of the current + /// working directory. + /// + /// \param name Name of the directory to create + /// + /// \return Server response to the request + /// + /// \see deleteDirectory + /// + //////////////////////////////////////////////////////////// + Response createDirectory(const std::string& name); + + //////////////////////////////////////////////////////////// + /// \brief Remove an existing directory + /// + /// The directory to remove must be relative to the + /// current working directory. + /// Use this function with caution, the directory will + /// be removed permanently! + /// + /// \param name Name of the directory to remove + /// + /// \return Server response to the request + /// + /// \see createDirectory + /// + //////////////////////////////////////////////////////////// + Response deleteDirectory(const std::string& name); + + //////////////////////////////////////////////////////////// + /// \brief Rename an existing file + /// + /// The filenames must be relative to the current working + /// directory. + /// + /// \param file File to rename + /// \param newName New name of the file + /// + /// \return Server response to the request + /// + /// \see deleteFile + /// + //////////////////////////////////////////////////////////// + Response renameFile(const std::string& file, const std::string& newName); + + //////////////////////////////////////////////////////////// + /// \brief Remove an existing file + /// + /// The file name must be relative to the current working + /// directory. + /// Use this function with caution, the file will be + /// removed permanently! + /// + /// \param name File to remove + /// + /// \return Server response to the request + /// + /// \see renameFile + /// + //////////////////////////////////////////////////////////// + Response deleteFile(const std::string& name); + + //////////////////////////////////////////////////////////// + /// \brief Download a file from the server + /// + /// The filename of the distant file is relative to the + /// current working directory of the server, and the local + /// destination path is relative to the current directory + /// of your application. + /// + /// \param remoteFile Filename of the distant file to download + /// \param localPath Where to put to file on the local computer + /// \param mode Transfer mode + /// + /// \return Server response to the request + /// + /// \see upload + /// + //////////////////////////////////////////////////////////// + Response download(const std::string& remoteFile, const std::string& localPath, TransferMode mode = Binary); + + //////////////////////////////////////////////////////////// + /// \brief Upload a file to the server + /// + /// The name of the local file is relative to the current + /// working directory of your application, and the + /// remote path is relative to the current directory of the + /// FTP server. + /// + /// \param localFile Path of the local file to upload + /// \param remotePath Where to put to file on the server + /// \param mode Transfer mode + /// + /// \return Server response to the request + /// + /// \see download + /// + //////////////////////////////////////////////////////////// + Response upload(const std::string& localFile, const std::string& remotePath, TransferMode mode = Binary); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Send a command to the FTP server + /// + /// \param command Command to send + /// \param parameter Command parameter + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response sendCommand(const std::string& command, const std::string& parameter = ""); + + //////////////////////////////////////////////////////////// + /// \brief Receive a response from the server + /// + /// This function must be called after each call to + /// SendCommand that expects a response. + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response getResponse(); + + //////////////////////////////////////////////////////////// + /// \brief Utility class for exchanging datas with the server + /// on the data channel + /// + //////////////////////////////////////////////////////////// + class DataChannel; + + friend class DataChannel; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + TcpSocket m_commandSocket; ///< Socket holding the control connection with the server +}; + +} // namespace sf + + +#endif // SFML_FTP_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Ftp +/// \ingroup network +/// +/// sf::Ftp is a very simple FTP client that allows you +/// to communicate with a FTP server. The FTP protocol allows +/// you to manipulate a remote file system (list files, +/// upload, download, create, remove, ...). +/// +/// Using the FTP client consists of 4 parts: +/// \li Connecting to the FTP server +/// \li Logging in (either as a registered user or anonymously) +/// \li Sending commands to the server +/// \li Disconnecting (this part can be done implicitely by the destructor) +/// +/// Every command returns a FTP response, which contains the +/// status code as well as a message from the server. Some +/// commands such as getWorkingDirectory and getDirectoryListing +/// return additional data, and use a class derived from +/// sf::Ftp::Response to provide this data. +/// +/// All commands, especially upload and download, may take some +/// time to complete. This is important to know if you don't want +/// to block your application while the server is completing +/// the task. +/// +/// Usage example: +/// \code +/// // Create a new FTP client +/// sf::Ftp ftp; +/// +/// // Connect to the server +/// sf::Ftp::Response response = ftp.connect("ftp://ftp.myserver.com"); +/// if (response.isOk()) +/// std::cout << "Connected" << std::endl; +/// +/// // Log in +/// response = ftp.login("laurent", "dF6Zm89D"); +/// if (response.isOk()) +/// std::cout << "Logged in" << std::endl; +/// +/// // Print the working directory +/// sf::Ftp::DirectoryResponse directory = ftp.getWorkingDirectory(); +/// if (directory.isOk()) +/// std::cout << "Working directory: " << directory.getDirectory() << std::endl; +/// +/// // Create a new directory +/// response = ftp.createDirectory("files"); +/// if (response.isOk()) +/// std::cout << "Created new directory" << std::endl; +/// +/// // Upload a file to this new directory +/// response = ftp.upload("local-path/file.txt", "files", sf::Ftp::Ascii); +/// if (response.isOk()) +/// std::cout << "File uploaded" << std::endl; +/// +/// // Disconnect from the server (optional) +/// ftp.disconnect(); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Http.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Http.hpp new file mode 100644 index 0000000..7338f5a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Http.hpp @@ -0,0 +1,467 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_HTTP_HPP +#define SFML_HTTP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief A HTTP client +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API Http : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Define a HTTP request + /// + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API Request + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Enumerate the available HTTP methods for a request + /// + //////////////////////////////////////////////////////////// + enum Method + { + Get, ///< Request in get mode, standard method to retrieve a page + Post, ///< Request in post mode, usually to send data to a page + Head ///< Request a page's header only + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates a GET request, with the root + /// URI ("/") and an empty body. + /// + /// \param uri Target URI + /// \param method Method to use for the request + /// \param body Content of the request's body + /// + //////////////////////////////////////////////////////////// + Request(const std::string& uri = "/", Method method = Get, const std::string& body = ""); + + //////////////////////////////////////////////////////////// + /// \brief Set the value of a field + /// + /// The field is created if it doesn't exist. The name of + /// the field is case insensitive. + /// By default, a request doesn't contain any field (but the + /// mandatory fields are added later by the HTTP client when + /// sending the request). + /// + /// \param field Name of the field to set + /// \param value Value of the field + /// + //////////////////////////////////////////////////////////// + void setField(const std::string& field, const std::string& value); + + //////////////////////////////////////////////////////////// + /// \brief Set the request method + /// + /// See the Method enumeration for a complete list of all + /// the availale methods. + /// The method is Http::Request::Get by default. + /// + /// \param method Method to use for the request + /// + //////////////////////////////////////////////////////////// + void setMethod(Method method); + + //////////////////////////////////////////////////////////// + /// \brief Set the requested URI + /// + /// The URI is the resource (usually a web page or a file) + /// that you want to get or post. + /// The URI is "/" (the root page) by default. + /// + /// \param uri URI to request, relative to the host + /// + //////////////////////////////////////////////////////////// + void setUri(const std::string& uri); + + //////////////////////////////////////////////////////////// + /// \brief Set the HTTP version for the request + /// + /// The HTTP version is 1.0 by default. + /// + /// \param major Major HTTP version number + /// \param minor Minor HTTP version number + /// + //////////////////////////////////////////////////////////// + void setHttpVersion(unsigned int major, unsigned int minor); + + //////////////////////////////////////////////////////////// + /// \brief Set the body of the request + /// + /// The body of a request is optional and only makes sense + /// for POST requests. It is ignored for all other methods. + /// The body is empty by default. + /// + /// \param body Content of the body + /// + //////////////////////////////////////////////////////////// + void setBody(const std::string& body); + + private : + + friend class Http; + + //////////////////////////////////////////////////////////// + /// \brief Prepare the final request to send to the server + /// + /// This is used internally by Http before sending the + /// request to the web server. + /// + /// \return String containing the request, ready to be sent + /// + //////////////////////////////////////////////////////////// + std::string prepare() const; + + //////////////////////////////////////////////////////////// + /// \brief Check if the request defines a field + /// + /// This function uses case-insensitive comparisons. + /// + /// \param field Name of the field to test + /// + /// \return True if the field exists, false otherwise + /// + //////////////////////////////////////////////////////////// + bool hasField(const std::string& field) const; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map FieldTable; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + FieldTable m_fields; ///< Fields of the header associated to their value + Method m_method; ///< Method to use for the request + std::string m_uri; ///< Target URI of the request + unsigned int m_majorVersion; ///< Major HTTP version + unsigned int m_minorVersion; ///< Minor HTTP version + std::string m_body; ///< Body of the request + }; + + //////////////////////////////////////////////////////////// + /// \brief Define a HTTP response + /// + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API Response + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Enumerate all the valid status codes for a response + /// + //////////////////////////////////////////////////////////// + enum Status + { + // 2xx: success + Ok = 200, ///< Most common code returned when operation was successful + Created = 201, ///< The resource has successfully been created + Accepted = 202, ///< The request has been accepted, but will be processed later by the server + NoContent = 204, ///< The server didn't send any data in return + ResetContent = 205, ///< The server informs the client that it should clear the view (form) that caused the request to be sent + PartialContent = 206, ///< The server has sent a part of the resource, as a response to a partial GET request + + // 3xx: redirection + MultipleChoices = 300, ///< The requested page can be accessed from several locations + MovedPermanently = 301, ///< The requested page has permanently moved to a new location + MovedTemporarily = 302, ///< The requested page has temporarily moved to a new location + NotModified = 304, ///< For conditionnal requests, means the requested page hasn't changed and doesn't need to be refreshed + + // 4xx: client error + BadRequest = 400, ///< The server couldn't understand the request (syntax error) + Unauthorized = 401, ///< The requested page needs an authentification to be accessed + Forbidden = 403, ///< The requested page cannot be accessed at all, even with authentification + NotFound = 404, ///< The requested page doesn't exist + RangeNotSatisfiable = 407, ///< The server can't satisfy the partial GET request (with a "Range" header field) + + // 5xx: server error + InternalServerError = 500, ///< The server encountered an unexpected error + NotImplemented = 501, ///< The server doesn't implement a requested feature + BadGateway = 502, ///< The gateway server has received an error from the source server + ServiceNotAvailable = 503, ///< The server is temporarily unavailable (overloaded, in maintenance, ...) + GatewayTimeout = 504, ///< The gateway server couldn't receive a response from the source server + VersionNotSupported = 505, ///< The server doesn't support the requested HTTP version + + // 10xx: SFML custom codes + InvalidResponse = 1000, ///< Response is not a valid HTTP one + ConnectionFailed = 1001 ///< Connection with server failed + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Constructs an empty response. + /// + //////////////////////////////////////////////////////////// + Response(); + + //////////////////////////////////////////////////////////// + /// \brief Get the value of a field + /// + /// If the field \a field is not found in the response header, + /// the empty string is returned. This function uses + /// case-insensitive comparisons. + /// + /// \param field Name of the field to get + /// + /// \return Value of the field, or empty string if not found + /// + //////////////////////////////////////////////////////////// + const std::string& getField(const std::string& field) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the response status code + /// + /// The status code should be the first thing to be checked + /// after receiving a response, it defines whether it is a + /// success, a failure or anything else (see the Status + /// enumeration). + /// + /// \return Status code of the response + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the major HTTP version number of the response + /// + /// \return Major HTTP version number + /// + /// \see getMinorHttpVersion + /// + //////////////////////////////////////////////////////////// + unsigned int getMajorHttpVersion() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the minor HTTP version number of the response + /// + /// \return Minor HTTP version number + /// + /// \see getMajorHttpVersion + /// + //////////////////////////////////////////////////////////// + unsigned int getMinorHttpVersion() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the body of the response + /// + /// The body of a response may contain: + /// \li the requested page (for GET requests) + /// \li a response from the server (for POST requests) + /// \li nothing (for HEAD requests) + /// \li an error message (in case of an error) + /// + /// \return The response body + /// + //////////////////////////////////////////////////////////// + const std::string& getBody() const; + + private : + + friend class Http; + + //////////////////////////////////////////////////////////// + /// \brief Construct the header from a response string + /// + /// This function is used by Http to build the response + /// of a request. + /// + /// \param data Content of the response to parse + /// + //////////////////////////////////////////////////////////// + void parse(const std::string& data); + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map FieldTable; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + FieldTable m_fields; ///< Fields of the header + Status m_status; ///< Status code + unsigned int m_majorVersion; ///< Major HTTP version + unsigned int m_minorVersion; ///< Minor HTTP version + std::string m_body; ///< Body of the response + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Http(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the HTTP client with the target host + /// + /// This is equivalent to calling setHost(host, port). + /// The port has a default value of 0, which means that the + /// HTTP client will use the right port according to the + /// protocol used (80 for HTTP, 443 for HTTPS). You should + /// leave it like this unless you really need a port other + /// than the standard one, or use an unknown protocol. + /// + /// \param host Web server to connect to + /// \param port Port to use for connection + /// + //////////////////////////////////////////////////////////// + Http(const std::string& host, unsigned short port = 0); + + //////////////////////////////////////////////////////////// + /// \brief Set the target host + /// + /// This function just stores the host address and port, it + /// doesn't actually connect to it until you send a request. + /// The port has a default value of 0, which means that the + /// HTTP client will use the right port according to the + /// protocol used (80 for HTTP, 443 for HTTPS). You should + /// leave it like this unless you really need a port other + /// than the standard one, or use an unknown protocol. + /// + /// \param host Web server to connect to + /// \param port Port to use for connection + /// + //////////////////////////////////////////////////////////// + void setHost(const std::string& host, unsigned short port = 0); + + //////////////////////////////////////////////////////////// + /// \brief Send a HTTP request and return the server's response. + /// + /// You must have a valid host before sending a request (see setHost). + /// Any missing mandatory header field in the request will be added + /// with an appropriate value. + /// Warning: this function waits for the server's response and may + /// not return instantly; use a thread if you don't want to block your + /// application, or use a timeout to limit the time to wait. A value + /// of Time::Zero means that the client will use the system defaut timeout + /// (which is usually pretty long). + /// + /// \param request Request to send + /// \param timeout Maximum time to wait + /// + /// \return Server's response + /// + //////////////////////////////////////////////////////////// + Response sendRequest(const Request& request, Time timeout = Time::Zero); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + TcpSocket m_connection; ///< Connection to the host + IpAddress m_host; ///< Web host address + std::string m_hostName; ///< Web host name + unsigned short m_port; ///< Port used for connection with host +}; + +} // namespace sf + + +#endif // SFML_HTTP_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Http +/// \ingroup network +/// +/// sf::Http is a very simple HTTP client that allows you +/// to communicate with a web server. You can retrieve +/// web pages, send data to an interactive resource, +/// download a remote file, etc. +/// +/// The HTTP client is split into 3 classes: +/// \li sf::Http::Request +/// \li sf::Http::Response +/// \li sf::Http +/// +/// sf::Http::Request builds the request that will be +/// sent to the server. A request is made of: +/// \li a method (what you want to do) +/// \li a target URI (usually the name of the web page or file) +/// \li one or more header fields (options that you can pass to the server) +/// \li an optional body (for POST requests) +/// +/// sf::Http::Response parse the response from the web server +/// and provides getters to read them. The response contains: +/// \li a status code +/// \li header fields (that may be answers to the ones that you requested) +/// \li a body, which contains the contents of the requested resource +/// +/// sf::Http provides a simple function, SendRequest, to send a +/// sf::Http::Request and return the corresponding sf::Http::Response +/// from the server. +/// +/// Usage example: +/// \code +/// // Create a new HTTP client +/// sf::Http http; +/// +/// // We'll work on http://www.sfml-dev.org +/// http.setHost("http://www.sfml-dev.org"); +/// +/// // Prepare a request to get the 'features.php' page +/// sf::Http::Request request("features.php"); +/// +/// // Send the request +/// sf::Http::Response response = http.sendRequest(request); +/// +/// // Check the status code and display the result +/// sf::Http::Response::Status status = response.getStatus(); +/// if (status == sf::Http::Response::Ok) +/// { +/// std::cout << response.getBody() << std::endl; +/// } +/// else +/// { +/// std::cout << "Error " << status << std::endl; +/// } +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/IpAddress.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/IpAddress.hpp new file mode 100644 index 0000000..15c4ac3 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/IpAddress.hpp @@ -0,0 +1,316 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_IPADDRESS_HPP +#define SFML_IPADDRESS_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Encapsulate an IPv4 network address +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API IpAddress +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates an empty (invalid) address + /// + //////////////////////////////////////////////////////////// + IpAddress(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the address from a string + /// + /// Here \a address can be either a decimal address + /// (ex: "192.168.1.56") or a network name (ex: "localhost"). + /// + /// \param address IP address or network name + /// + //////////////////////////////////////////////////////////// + IpAddress(const std::string& address); + + //////////////////////////////////////////////////////////// + /// \brief Construct the address from a string + /// + /// Here \a address can be either a decimal address + /// (ex: "192.168.1.56") or a network name (ex: "localhost"). + /// This is equivalent to the constructor taking a std::string + /// parameter, it is defined for convenience so that the + /// implicit conversions from literal strings to IpAddress work. + /// + /// \param address IP address or network name + /// + //////////////////////////////////////////////////////////// + IpAddress(const char* address); + + //////////////////////////////////////////////////////////// + /// \brief Construct the address from 4 bytes + /// + /// Calling IpAddress(a, b, c, d) is equivalent to calling + /// IpAddress("a.b.c.d"), but safer as it doesn't have to + /// parse a string to get the address components. + /// + /// \param byte0 First byte of the address + /// \param byte1 Second byte of the address + /// \param byte2 Third byte of the address + /// \param byte3 Fourth byte of the address + /// + //////////////////////////////////////////////////////////// + IpAddress(Uint8 byte0, Uint8 byte1, Uint8 byte2, Uint8 byte3); + + //////////////////////////////////////////////////////////// + /// \brief Construct the address from a 32-bits integer + /// + /// This constructor uses the internal representation of + /// the address directly. It should be used for optimization + /// purposes, and only if you got that representation from + /// IpAddress::ToInteger(). + /// + /// \param address 4 bytes of the address packed into a 32-bits integer + /// + /// \see toInteger + /// + //////////////////////////////////////////////////////////// + explicit IpAddress(Uint32 address); + + //////////////////////////////////////////////////////////// + /// \brief Get a string representation of the address + /// + /// The returned string is the decimal representation of the + /// IP address (like "192.168.1.56"), even if it was constructed + /// from a host name. + /// + /// \return String representation of the address + /// + /// \see toInteger + /// + //////////////////////////////////////////////////////////// + std::string toString() const; + + //////////////////////////////////////////////////////////// + /// \brief Get an integer representation of the address + /// + /// The returned number is the internal representation of the + /// address, and should be used for optimization purposes only + /// (like sending the address through a socket). + /// The integer produced by this function can then be converted + /// back to a sf::IpAddress with the proper constructor. + /// + /// \return 32-bits unsigned integer representation of the address + /// + /// \see toString + /// + //////////////////////////////////////////////////////////// + Uint32 toInteger() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the computer's local address + /// + /// The local address is the address of the computer from the + /// LAN point of view, i.e. something like 192.168.1.56. It is + /// meaningful only for communications over the local network. + /// Unlike getPublicAddress, this function is fast and may be + /// used safely anywhere. + /// + /// \return Local IP address of the computer + /// + /// \see getPublicAddress + /// + //////////////////////////////////////////////////////////// + static IpAddress getLocalAddress(); + + //////////////////////////////////////////////////////////// + /// \brief Get the computer's public address + /// + /// The public address is the address of the computer from the + /// internet point of view, i.e. something like 89.54.1.169. + /// It is necessary for communications over the world wide web. + /// The only way to get a public address is to ask it to a + /// distant website; as a consequence, this function depends on + /// both your network connection and the server, and may be + /// very slow. You should use it as few as possible. Because + /// this function depends on the network connection and on a distant + /// server, you may use a time limit if you don't want your program + /// to be possibly stuck waiting in case there is a problem; this + /// limit is deactivated by default. + /// + /// \param timeout Maximum time to wait + /// + /// \return Public IP address of the computer + /// + /// \see getLocalAddress + /// + //////////////////////////////////////////////////////////// + static IpAddress getPublicAddress(Time timeout = Time::Zero); + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const IpAddress None; ///< Value representing an empty/invalid address + static const IpAddress LocalHost; ///< The "localhost" address (for connecting a computer to itself locally) + static const IpAddress Broadcast; ///< The "broadcast" address (for sending UDP messages to everyone on a local network) + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Uint32 m_address; ///< Address stored as an unsigned 32 bits integer +}; + +//////////////////////////////////////////////////////////// +/// \brief Overload of == operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if both addresses are equal +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator ==(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of != operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if both addresses are different +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator !=(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of < operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if \a left is lesser than \a right +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator <(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of > operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if \a left is greater than \a right +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator >(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of <= operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if \a left is lesser or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator <=(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of >= operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if \a left is greater or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator >=(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of >> operator to extract an IP address from an input stream +/// +/// \param stream Input stream +/// \param address IP address to extract +/// +/// \return Reference to the input stream +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API std::istream& operator >>(std::istream& stream, IpAddress& address); + +//////////////////////////////////////////////////////////// +/// \brief Overload of << operator to print an IP address to an output stream +/// +/// \param stream Output stream +/// \param address IP address to print +/// +/// \return Reference to the output stream +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API std::ostream& operator <<(std::ostream& stream, const IpAddress& address); + +} // namespace sf + + +#endif // SFML_IPADDRESS_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::IpAddress +/// \ingroup network +/// +/// sf::IpAddress is a utility class for manipulating network +/// addresses. It provides a set a implicit constructors and +/// conversion functions to easily build or transform an IP +/// address from/to various representations. +/// +/// Usage example: +/// \code +/// sf::IpAddress a0; // an invalid address +/// sf::IpAddress a1 = sf::IpAddress::None; // an invalid address (same as a0) +/// sf::IpAddress a2("127.0.0.1"); // the local host address +/// sf::IpAddress a3 = sf::IpAddress::Broadcast; // the broadcast address +/// sf::IpAddress a4(192, 168, 1, 56); // a local address +/// sf::IpAddress a5("my_computer"); // a local address created from a network name +/// sf::IpAddress a6("89.54.1.169"); // a distant address +/// sf::IpAddress a7("www.google.com"); // a distant address created from a network name +/// sf::IpAddress a8 = sf::IpAddress::getLocalAddress(); // my address on the local network +/// sf::IpAddress a9 = sf::IpAddress::getPublicAddress(); // my address on the internet +/// \endcode +/// +/// Note that sf::IpAddress currently doesn't support IPv6 +/// nor other types of network addresses. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Packet.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Packet.hpp new file mode 100644 index 0000000..2d3e201 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Packet.hpp @@ -0,0 +1,407 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_PACKET_HPP +#define SFML_PACKET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class String; +class TcpSocket; +class UdpSocket; + +//////////////////////////////////////////////////////////// +/// \brief Utility class to build blocks of data to transfer +/// over the network +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API Packet +{ + // A bool-like type that cannot be converted to integer or pointer types + typedef bool (Packet::*BoolType)(std::size_t); + +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty packet. + /// + //////////////////////////////////////////////////////////// + Packet(); + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Packet(); + + //////////////////////////////////////////////////////////// + /// \brief Append data to the end of the packet + /// + /// \param data Pointer to the sequence of bytes to append + /// \param sizeInBytes Number of bytes to append + /// + /// \see clear + /// + //////////////////////////////////////////////////////////// + void append(const void* data, std::size_t sizeInBytes); + + //////////////////////////////////////////////////////////// + /// \brief Clear the packet + /// + /// After calling Clear, the packet is empty. + /// + /// \see append + /// + //////////////////////////////////////////////////////////// + void clear(); + + //////////////////////////////////////////////////////////// + /// \brief Get a pointer to the data contained in the packet + /// + /// Warning: the returned pointer may become invalid after + /// you append data to the packet, therefore it should never + /// be stored. + /// The return pointer is NULL if the packet is empty. + /// + /// \return Pointer to the data + /// + /// \see getDataSize + /// + //////////////////////////////////////////////////////////// + const void* getData() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the data contained in the packet + /// + /// This function returns the number of bytes pointed to by + /// what getData returns. + /// + /// \return Data size, in bytes + /// + /// \see getData + /// + //////////////////////////////////////////////////////////// + std::size_t getDataSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Tell if the reading position has reached the + /// end of the packet + /// + /// This function is useful to know if there is some data + /// left to be read, without actually reading it. + /// + /// \return True if all data was read, false otherwise + /// + /// \see operator bool + /// + //////////////////////////////////////////////////////////// + bool endOfPacket() const; + +public: + + //////////////////////////////////////////////////////////// + /// \brief Test the validity of the packet, for reading + /// + /// This operator allows to test the packet as a boolean + /// variable, to check if a reading operation was successful. + /// + /// A packet will be in an invalid state if it has no more + /// data to read. + /// + /// This behaviour is the same as standard C++ streams. + /// + /// Usage example: + /// \code + /// float x; + /// packet >> x; + /// if (packet) + /// { + /// // ok, x was extracted successfully + /// } + /// + /// // -- or -- + /// + /// float x; + /// if (packet >> x) + /// { + /// // ok, x was extracted successfully + /// } + /// \endcode + /// + /// Don't focus on the return type, it's equivalent to bool but + /// it disallows unwanted implicit conversions to integer or + /// pointer types. + /// + /// \return True if last data extraction from packet was successful + /// + /// \see endOfPacket + /// + //////////////////////////////////////////////////////////// + operator BoolType() const; + + //////////////////////////////////////////////////////////// + /// Overloads of operator >> to read data from the packet + /// + //////////////////////////////////////////////////////////// + Packet& operator >>(bool& data); + Packet& operator >>(Int8& data); + Packet& operator >>(Uint8& data); + Packet& operator >>(Int16& data); + Packet& operator >>(Uint16& data); + Packet& operator >>(Int32& data); + Packet& operator >>(Uint32& data); + Packet& operator >>(float& data); + Packet& operator >>(double& data); + Packet& operator >>(char* data); + Packet& operator >>(std::string& data); + Packet& operator >>(wchar_t* data); + Packet& operator >>(std::wstring& data); + Packet& operator >>(String& data); + + //////////////////////////////////////////////////////////// + /// Overloads of operator << to write data into the packet + /// + //////////////////////////////////////////////////////////// + Packet& operator <<(bool data); + Packet& operator <<(Int8 data); + Packet& operator <<(Uint8 data); + Packet& operator <<(Int16 data); + Packet& operator <<(Uint16 data); + Packet& operator <<(Int32 data); + Packet& operator <<(Uint32 data); + Packet& operator <<(float data); + Packet& operator <<(double data); + Packet& operator <<(const char* data); + Packet& operator <<(const std::string& data); + Packet& operator <<(const wchar_t* data); + Packet& operator <<(const std::wstring& data); + Packet& operator <<(const String& data); + +protected: + + friend class TcpSocket; + friend class UdpSocket; + + //////////////////////////////////////////////////////////// + /// \brief Called before the packet is sent over the network + /// + /// This function can be defined by derived classes to + /// transform the data before it is sent; this can be + /// used for compression, encryption, etc. + /// The function must return a pointer to the modified data, + /// as well as the number of bytes pointed. + /// The default implementation provides the packet's data + /// without transforming it. + /// + /// \param size Variable to fill with the size of data to send + /// + /// \return Pointer to the array of bytes to send + /// + /// \see onReceive + /// + //////////////////////////////////////////////////////////// + virtual const void* onSend(std::size_t& size); + + //////////////////////////////////////////////////////////// + /// \brief Called after the packet is received over the network + /// + /// This function can be defined by derived classes to + /// transform the data after it is received; this can be + /// used for uncompression, decryption, etc. + /// The function receives a pointer to the received data, + /// and must fill the packet with the transformed bytes. + /// The default implementation fills the packet directly + /// without transforming the data. + /// + /// \param data Pointer to the received bytes + /// \param size Number of bytes + /// + /// \see onSend + /// + //////////////////////////////////////////////////////////// + virtual void onReceive(const void* data, std::size_t size); + +private : + + //////////////////////////////////////////////////////////// + /// Disallow comparisons between packets + /// + //////////////////////////////////////////////////////////// + bool operator ==(const Packet& right) const; + bool operator !=(const Packet& right) const; + + //////////////////////////////////////////////////////////// + /// \brief Check if the packet can extract a given number of bytes + /// + /// This function updates accordingly the state of the packet. + /// + /// \param size Size to check + /// + /// \return True if \a size bytes can be read from the packet + /// + //////////////////////////////////////////////////////////// + bool checkSize(std::size_t size); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_data; ///< Data stored in the packet + std::size_t m_readPos; ///< Current reading position in the packet + bool m_isValid; ///< Reading state of the packet +}; + +} // namespace sf + + +#endif // SFML_PACKET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Packet +/// \ingroup network +/// +/// Packets provide a safe and easy way to serialize data, +/// in order to send it over the network using sockets +/// (sf::TcpSocket, sf::UdpSocket). +/// +/// Packets solve 2 fundamental problems that arise when +/// transfering data over the network: +/// \li data is interpreted correctly according to the endianness +/// \li the bounds of the packet are preserved (one send == one receive) +/// +/// The sf::Packet class provides both input and output modes. +/// It is designed to follow the behaviour of standard C++ streams, +/// using operators >> and << to extract and insert data. +/// +/// It is recommended to use only fixed-size types (like sf::Int32, etc.), +/// to avoid possible differences between the sender and the receiver. +/// Indeed, the native C++ types may have different sizes on two platforms +/// and your data may be corrupted if that happens. +/// +/// Usage example: +/// \code +/// sf::Uint32 x = 24; +/// std::string s = "hello"; +/// double d = 5.89; +/// +/// // Group the variables to send into a packet +/// sf::Packet packet; +/// packet << x << s << d; +/// +/// // Send it over the network (socket is a valid sf::TcpSocket) +/// socket.send(packet); +/// +/// ----------------------------------------------------------------- +/// +/// // Receive the packet at the other end +/// sf::Packet packet; +/// socket.receive(packet); +/// +/// // Extract the variables contained in the packet +/// sf::Uint32 x; +/// std::string s; +/// double d; +/// if (packet >> x >> s >> d) +/// { +/// // Data extracted successfully... +/// } +/// \endcode +/// +/// Packets have built-in operator >> and << overloads for +/// standard types: +/// \li bool +/// \li fixed-size integer types (sf::Int8/16/32, sf::Uint8/16/32) +/// \li floating point numbers (float, double) +/// \li string types (char*, wchar_t*, std::string, std::wstring, sf::String) +/// +/// Like standard streams, it is also possible to define your own +/// overloads of operators >> and << in order to handle your +/// custom types. +/// +/// \code +/// struct MyStruct +/// { +/// float number; +/// sf::Int8 integer; +/// std::string str; +/// }; +/// +/// sf::Packet& operator <<(sf::Packet& packet, const MyStruct& m) +/// { +/// return packet << m.number << m.integer << m.str; +/// } +/// +/// sf::Packet& operator >>(sf::Packet& packet, MyStruct& m) +/// { +/// return packet >> m.number >> m.integer >> m.str; +/// } +/// \endcode +/// +/// Packets also provide an extra feature that allows to apply +/// custom transformations to the data before it is sent, +/// and after it is received. This is typically used to +/// handle automatic compression or encryption of the data. +/// This is achieved by inheriting from sf::Packet, and overriding +/// the onSend and onReceive functions. +/// +/// Here is an example: +/// \code +/// class ZipPacket : public sf::Packet +/// { +/// virtual const void* onSend(std::size_t& size) +/// { +/// const void* srcData = getData(); +/// std::size_t srcSize = getDataSize(); +/// +/// return MySuperZipFunction(srcData, srcSize, &size); +/// } +/// +/// virtual void onReceive(const void* data, std::size_t size) +/// { +/// std::size_t dstSize; +/// const void* dstData = MySuperUnzipFunction(data, size, &dstSize); +/// +/// append(dstData, dstSize); +/// } +/// }; +/// +/// // Use like regular packets: +/// ZipPacket packet; +/// packet << x << s << d; +/// ... +/// \endcode +/// +/// \see sf::TcpSocket, sf::UdpSocket +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Socket.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Socket.hpp new file mode 100644 index 0000000..4b30307 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/Socket.hpp @@ -0,0 +1,218 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKET_HPP +#define SFML_SOCKET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +class SocketSelector; + +//////////////////////////////////////////////////////////// +/// \brief Base class for all the socket types +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API Socket : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Status codes that may be returned by socket functions + /// + //////////////////////////////////////////////////////////// + enum Status + { + Done, ///< The socket has sent / received the data + NotReady, ///< The socket is not ready to send / receive data yet + Disconnected, ///< The TCP socket has been disconnected + Error ///< An unexpected error happened + }; + + //////////////////////////////////////////////////////////// + /// \brief Some special values used by sockets + /// + //////////////////////////////////////////////////////////// + enum + { + AnyPort = 0 ///< Special value that tells the system to pick any available port + }; + +public : + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Socket(); + + //////////////////////////////////////////////////////////// + /// \brief Set the blocking state of the socket + /// + /// In blocking mode, calls will not return until they have + /// completed their task. For example, a call to Receive in + /// blocking mode won't return until some data was actually + /// received. + /// In non-blocking mode, calls will always return immediately, + /// using the return code to signal whether there was data + /// available or not. + /// By default, all sockets are blocking. + /// + /// \param blocking True to set the socket as blocking, false for non-blocking + /// + /// \see isBlocking + /// + //////////////////////////////////////////////////////////// + void setBlocking(bool blocking); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the socket is in blocking or non-blocking mode + /// + /// \return True if the socket is blocking, false otherwise + /// + /// \see setBlocking + /// + //////////////////////////////////////////////////////////// + bool isBlocking() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Types of protocols that the socket can use + /// + //////////////////////////////////////////////////////////// + enum Type + { + Tcp, ///< TCP protocol + Udp ///< UDP protocol + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor can only be accessed by derived classes. + /// + /// \param type Type of the socket (TCP or UDP) + /// + //////////////////////////////////////////////////////////// + Socket(Type type); + + //////////////////////////////////////////////////////////// + /// \brief Return the internal handle of the socket + /// + /// The returned handle may be invalid if the socket + /// was not created yet (or already destroyed). + /// This function can only be accessed by derived classes. + /// + /// \return The internal (OS-specific) handle of the socket + /// + //////////////////////////////////////////////////////////// + SocketHandle getHandle() const; + + //////////////////////////////////////////////////////////// + /// \brief Create the internal representation of the socket + /// + /// This function can only be accessed by derived classes. + /// + //////////////////////////////////////////////////////////// + void create(); + + //////////////////////////////////////////////////////////// + /// \brief Create the internal representation of the socket + /// from a socket handle + /// + /// This function can only be accessed by derived classes. + /// + /// \param handle OS-specific handle of the socket to wrap + /// + //////////////////////////////////////////////////////////// + void create(SocketHandle handle); + + //////////////////////////////////////////////////////////// + /// \brief Close the socket gracefully + /// + /// This function can only be accessed by derived classes. + /// + //////////////////////////////////////////////////////////// + void close(); + +private : + + friend class SocketSelector; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Type m_type; ///< Type of the socket (TCP or UDP) + SocketHandle m_socket; ///< Socket descriptor + bool m_isBlocking; ///< Current blocking mode of the socket +}; + +} // namespace sf + + +#endif // SFML_SOCKET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Socket +/// \ingroup network +/// +/// This class mainly defines internal stuff to be used by +/// derived classes. +/// +/// The only public features that it defines, and which +/// is therefore common to all the socket classes, is the +/// blocking state. All sockets can be set as blocking or +/// non-blocking. +/// +/// In blocking mode, socket functions will hang until +/// the operation completes, which means that the entire +/// program (well, in fact the current thread if you use +/// multiple ones) will be stuck waiting for your socket +/// operation to complete. +/// +/// In non-blocking mode, all the socket functions will +/// return immediately. If the socket is not ready to complete +/// the requested operation, the function simply returns +/// the proper status code (Socket::NotReady). +/// +/// The default mode, which is blocking, is the one that is +/// generally used, in combination with threads or selectors. +/// The non-blocking mode is rather used in real-time +/// applications that run an endless loop that can poll +/// the socket often enough, and cannot afford blocking +/// this loop. +/// +/// \see sf::TcpListener, sf::TcpSocket, sf::UdpSocket +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/SocketHandle.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/SocketHandle.hpp new file mode 100644 index 0000000..8edd46a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/SocketHandle.hpp @@ -0,0 +1,57 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETHANDLE_HPP +#define SFML_SOCKETHANDLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + +#if defined(SFML_SYSTEM_WINDOWS) + #include +#endif + + +namespace sf +{ +//////////////////////////////////////////////////////////// +// Define the low-level socket handle type, specific to +// each platform +//////////////////////////////////////////////////////////// +#if defined(SFML_SYSTEM_WINDOWS) + + typedef UINT_PTR SocketHandle; + +#else + + typedef int SocketHandle; + +#endif + +} // namespace sf + + +#endif // SFML_SOCKETHANDLE_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/SocketSelector.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/SocketSelector.hpp new file mode 100644 index 0000000..414a941 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/SocketSelector.hpp @@ -0,0 +1,263 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETSELECTOR_HPP +#define SFML_SOCKETSELECTOR_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class Socket; + +//////////////////////////////////////////////////////////// +/// \brief Multiplexer that allows to read from multiple sockets +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API SocketSelector +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + SocketSelector(); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + SocketSelector(const SocketSelector& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~SocketSelector(); + + //////////////////////////////////////////////////////////// + /// \brief Add a new socket to the selector + /// + /// This function keeps a weak reference to the socket, + /// so you have to make sure that the socket is not destroyed + /// while it is stored in the selector. + /// This function does nothing if the socket is not valid. + /// + /// \param socket Reference to the socket to add + /// + /// \see remove, clear + /// + //////////////////////////////////////////////////////////// + void add(Socket& socket); + + //////////////////////////////////////////////////////////// + /// \brief Remove a socket from the selector + /// + /// This function doesn't destroy the socket, it simply + /// removes the reference that the selector has to it. + /// + /// \param socket Reference to the socket to remove + /// + /// \see add, clear + /// + //////////////////////////////////////////////////////////// + void remove(Socket& socket); + + //////////////////////////////////////////////////////////// + /// \brief Remove all the sockets stored in the selector + /// + /// This function doesn't destroy any instance, it simply + /// removes all the references that the selector has to + /// external sockets. + /// + /// \see add, remove + /// + //////////////////////////////////////////////////////////// + void clear(); + + //////////////////////////////////////////////////////////// + /// \brief Wait until one or more sockets are ready to receive + /// + /// This function returns as soon as at least one socket has + /// some data available to be received. To know which sockets are + /// ready, use the isReady function. + /// If you use a timeout and no socket is ready before the timeout + /// is over, the function returns false. + /// + /// \param timeout Maximum time to wait, (use Time::Zero for infinity) + /// + /// \return True if there are sockets ready, false otherwise + /// + /// \see isReady + /// + //////////////////////////////////////////////////////////// + bool wait(Time timeout = Time::Zero); + + //////////////////////////////////////////////////////////// + /// \brief Test a socket to know if it is ready to receive data + /// + /// This function must be used after a call to Wait, to know + /// which sockets are ready to receive data. If a socket is + /// ready, a call to receive will never block because we know + /// that there is data available to read. + /// Note that if this function returns true for a TcpListener, + /// this means that it is ready to accept a new connection. + /// + /// \param socket Socket to test + /// + /// \return True if the socket is ready to read, false otherwise + /// + /// \see isReady + /// + //////////////////////////////////////////////////////////// + bool isReady(Socket& socket) const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + SocketSelector& operator =(const SocketSelector& right); + +private : + + struct SocketSelectorImpl; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + SocketSelectorImpl* m_impl; ///< Opaque pointer to the implementation (which requires OS-specific types) +}; + +} // namespace sf + + +#endif // SFML_SOCKETSELECTOR_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SocketSelector +/// \ingroup network +/// +/// Socket selectors provide a way to wait until some data is +/// available on a set of sockets, instead of just one. This +/// is convenient when you have multiple sockets that may +/// possibly receive data, but you don't know which one will +/// be ready first. In particular, it avoids to use a thread +/// for each socket; with selectors, a single thread can handle +/// all the sockets. +/// +/// All types of sockets can be used in a selector: +/// \li sf::TcpListener +/// \li sf::TcpSocket +/// \li sf::UdpSocket +/// +/// A selector doesn't store its own copies of the sockets +/// (socket classes are not copyable anyway), it simply keeps +/// a reference to the original sockets that you pass to the +/// "add" function. Therefore, you can't use the selector as a +/// socket container, you must store them oustide and make sure +/// that they are alive as long as they are used in the selector. +/// +/// Using a selector is simple: +/// \li populate the selector with all the sockets that you want to observe +/// \li make it wait until there is data available on any of the sockets +/// \li test each socket to find out which ones are ready +/// +/// Usage example: +/// \code +/// // Create a socket to listen to new connections +/// sf::TcpListener listener; +/// listener.listen(55001); +/// +/// // Create a list to store the future clients +/// std::list clients; +/// +/// // Create a selector +/// sf::SocketSelector selector; +/// +/// // Add the listener to the selector +/// selector.add(listener); +/// +/// // Endless loop that waits for new connections +/// while (running) +/// { +/// // Make the selector wait for data on any socket +/// if (selector.wait()) +/// { +/// // Test the listener +/// if (selector.isReady(listener)) +/// { +/// // The listener is ready: there is a pending connection +/// sf::TcpSocket* client = new sf::TcpSocket; +/// if (listener.accept(*client) == sf::Socket::Done) +/// { +/// // Add the new client to the clients list +/// clients.push_back(client); +/// +/// // Add the new client to the selector so that we will +/// // be notified when he sends something +/// selector.add(*client); +/// } +/// else +/// { +/// // Error, we won't get a new connection, delete the socket +/// delete client; +/// } +/// } +/// else +/// { +/// // The listener socket is not ready, test all other sockets (the clients) +/// for (std::list::iterator it = clients.begin(); it != clients.end(); ++it) +/// { +/// sf::TcpSocket& client = **it; +/// if (selector.isReady(client)) +/// { +/// // The client has sent some data, we can receive it +/// sf::Packet packet; +/// if (client.receive(packet) == sf::Socket::Done) +/// { +/// ... +/// } +/// } +/// } +/// } +/// } +/// } +/// \endcode +/// +/// \see sf::Socket +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/TcpListener.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/TcpListener.hpp new file mode 100644 index 0000000..5a5bdb3 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/TcpListener.hpp @@ -0,0 +1,162 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TCPLISTENER_HPP +#define SFML_TCPLISTENER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class TcpSocket; + +//////////////////////////////////////////////////////////// +/// \brief Socket that listens to new TCP connections +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API TcpListener : public Socket +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + TcpListener(); + + //////////////////////////////////////////////////////////// + /// \brief Get the port to which the socket is bound locally + /// + /// If the socket is not listening to a port, this function + /// returns 0. + /// + /// \return Port to which the socket is bound + /// + /// \see listen + /// + //////////////////////////////////////////////////////////// + unsigned short getLocalPort() const; + + //////////////////////////////////////////////////////////// + /// \brief Start listening for connections + /// + /// This functions makes the socket listen to the specified + /// port, waiting for new connections. + /// If the socket was previously listening to another port, + /// it will be stopped first and bound to the new port. + /// + /// \param port Port to listen for new connections + /// + /// \return Status code + /// + /// \see accept, close + /// + //////////////////////////////////////////////////////////// + Status listen(unsigned short port); + + //////////////////////////////////////////////////////////// + /// \brief Stop listening and close the socket + /// + /// This function gracefully stops the listener. If the + /// socket is not listening, this function has no effect. + /// + /// \see listen + /// + //////////////////////////////////////////////////////////// + void close(); + + //////////////////////////////////////////////////////////// + /// \brief Accept a new connection + /// + /// If the socket is in blocking mode, this function will + /// not return until a connection is actually received. + /// + /// \param socket Socket that will hold the new connection + /// + /// \return Status code + /// + /// \see listen + /// + //////////////////////////////////////////////////////////// + Status accept(TcpSocket& socket); +}; + + +} // namespace sf + + +#endif // SFML_TCPLISTENER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::TcpListener +/// \ingroup network +/// +/// A listener socket is a special type of socket that listens to +/// a given port and waits for connections on that port. +/// This is all it can do. +/// +/// When a new connection is received, you must call accept and +/// the listener returns a new instance of sf::TcpSocket that +/// is properly initialized and can be used to communicate with +/// the new client. +/// +/// Listener sockets are specific to the TCP protocol, +/// UDP sockets are connectionless and can therefore communicate +/// directly. As a consequence, a listener socket will always +/// return the new connections as sf::TcpSocket instances. +/// +/// A listener is automatically closed on destruction, like all +/// other types of socket. However if you want to stop listening +/// before the socket is destroyed, you can call its close() +/// function. +/// +/// Usage example: +/// \code +/// // Create a listener socket and make it wait for new +/// // connections on port 55001 +/// sf::TcpListener listener; +/// listener.listen(55001); +/// +/// // Endless loop that waits for new connections +/// while (running) +/// { +/// sf::TcpSocket client; +/// if (listener.accept(client) == sf::Socket::Done) +/// { +/// // A new client just connected! +/// std::cout << "New connection received from " << client.getRemoteAddress() << std::endl; +/// doSomethingWith(client); +/// } +/// } +/// \endcode +/// +/// \see sf::TcpSocket, sf::Socket +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/TcpSocket.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/TcpSocket.hpp new file mode 100644 index 0000000..2db2b72 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/TcpSocket.hpp @@ -0,0 +1,292 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TCPSOCKET_HPP +#define SFML_TCPSOCKET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class TcpListener; +class IpAddress; +class Packet; + +//////////////////////////////////////////////////////////// +/// \brief Specialized socket using the TCP protocol +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API TcpSocket : public Socket +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + TcpSocket(); + + //////////////////////////////////////////////////////////// + /// \brief Get the port to which the socket is bound locally + /// + /// If the socket is not connected, this function returns 0. + /// + /// \return Port to which the socket is bound + /// + /// \see connect, getRemotePort + /// + //////////////////////////////////////////////////////////// + unsigned short getLocalPort() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the address of the connected peer + /// + /// It the socket is not connected, this function returns + /// sf::IpAddress::None. + /// + /// \return Address of the remote peer + /// + /// \see getRemotePort + /// + //////////////////////////////////////////////////////////// + IpAddress getRemoteAddress() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the port of the connected peer to which + /// the socket is connected + /// + /// If the socket is not connected, this function returns 0. + /// + /// \return Remote port to which the socket is connected + /// + /// \see getRemoteAddress + /// + //////////////////////////////////////////////////////////// + unsigned short getRemotePort() const; + + //////////////////////////////////////////////////////////// + /// \brief Connect the socket to a remote peer + /// + /// In blocking mode, this function may take a while, especially + /// if the remote peer is not reachable. The last parameter allows + /// you to stop trying to connect after a given timeout. + /// If the socket was previously connected, it is first disconnected. + /// + /// \param remoteAddress Address of the remote peer + /// \param remotePort Port of the remote peer + /// \param timeout Optional maximum time to wait + /// + /// \return Status code + /// + /// \see disconnect + /// + //////////////////////////////////////////////////////////// + Status connect(const IpAddress& remoteAddress, unsigned short remotePort, Time timeout = Time::Zero); + + //////////////////////////////////////////////////////////// + /// \brief Disconnect the socket from its remote peer + /// + /// This function gracefully closes the connection. If the + /// socket is not connected, this function has no effect. + /// + /// \see connect + /// + //////////////////////////////////////////////////////////// + void disconnect(); + + //////////////////////////////////////////////////////////// + /// \brief Send raw data to the remote peer + /// + /// This function will fail if the socket is not connected. + /// + /// \param data Pointer to the sequence of bytes to send + /// \param size Number of bytes to send + /// + /// \return Status code + /// + /// \see receive + /// + //////////////////////////////////////////////////////////// + Status send(const void* data, std::size_t size); + + //////////////////////////////////////////////////////////// + /// \brief Receive raw data from the remote peer + /// + /// In blocking mode, this function will wait until some + /// bytes are actually received. + /// This function will fail if the socket is not connected. + /// + /// \param data Pointer to the array to fill with the received bytes + /// \param size Maximum number of bytes that can be received + /// \param received This variable is filled with the actual number of bytes received + /// + /// \return Status code + /// + /// \see send + /// + //////////////////////////////////////////////////////////// + Status receive(void* data, std::size_t size, std::size_t& received); + + //////////////////////////////////////////////////////////// + /// \brief Send a formatted packet of data to the remote peer + /// + /// This function will fail if the socket is not connected. + /// + /// \param packet Packet to send + /// + /// \return Status code + /// + /// \see receive + /// + //////////////////////////////////////////////////////////// + Status send(Packet& packet); + + //////////////////////////////////////////////////////////// + /// \brief Receive a formatted packet of data from the remote peer + /// + /// In blocking mode, this function will wait until the whole packet + /// has been received. + /// This function will fail if the socket is not connected. + /// + /// \param packet Packet to fill with the received data + /// + /// \return Status code + /// + /// \see send + /// + //////////////////////////////////////////////////////////// + Status receive(Packet& packet); + +private: + + friend class TcpListener; + + //////////////////////////////////////////////////////////// + /// \brief Structure holding the data of a pending packet + /// + //////////////////////////////////////////////////////////// + struct PendingPacket + { + PendingPacket(); + + Uint32 Size; ///< Data of packet size + std::size_t SizeReceived; ///< Number of size bytes received so far + std::vector Data; ///< Data of the packet + }; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + PendingPacket m_pendingPacket; ///< Temporary data of the packet currently being received +}; + +} // namespace sf + + +#endif // SFML_TCPSOCKET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::TcpSocket +/// \ingroup network +/// +/// TCP is a connected protocol, which means that a TCP +/// socket can only communicate with the host it is connected +/// to. It can't send or receive anything if it is not connected. +/// +/// The TCP protocol is reliable but adds a slight overhead. +/// It ensures that your data will always be received in order +/// and without errors (no data corrupted, lost or duplicated). +/// +/// When a socket is connected to a remote host, you can +/// retrieve informations about this host with the +/// getRemoteAddress and getRemotePort functions. You can +/// also get the local port to which the socket is bound +/// (which is automatically chosen when the socket is connected), +/// with the getLocalPort function. +/// +/// Sending and receiving data can use either the low-level +/// or the high-level functions. The low-level functions +/// process a raw sequence of bytes, and cannot ensure that +/// one call to Send will exactly match one call to Receive +/// at the other end of the socket. +/// +/// The high-level interface uses packets (see sf::Packet), +/// which are easier to use and provide more safety regarding +/// the data that is exchanged. You can look at the sf::Packet +/// class to get more details about how they work. +/// +/// The socket is automatically disconnected when it is destroyed, +/// but if you want to explicitely close the connection while +/// the socket instance is still alive, you can call disconnect. +/// +/// Usage example: +/// \code +/// // ----- The client ----- +/// +/// // Create a socket and connect it to 192.168.1.50 on port 55001 +/// sf::TcpSocket socket; +/// socket.connect("192.168.1.50", 55001); +/// +/// // Send a message to the connected host +/// std::string message = "Hi, I am a client"; +/// socket.send(message.c_str(), message.size() + 1); +/// +/// // Receive an answer from the server +/// char buffer[1024]; +/// std::size_t received = 0; +/// socket.receive(buffer, sizeof(buffer), received); +/// std::cout << "The server said: " << buffer << std::endl; +/// +/// // ----- The server ----- +/// +/// // Create a listener to wait for incoming connections on port 55001 +/// sf::TcpListener listener; +/// listener.listen(55001); +/// +/// // Wait for a connection +/// sf::TcpSocket socket; +/// listener.accept(socket); +/// std::cout << "New client connected: " << socket.getRemoteAddress() << std::endl; +/// +/// // Receive a message from the client +/// char buffer[1024]; +/// std::size_t received = 0; +/// socket.receive(buffer, sizeof(buffer), received); +/// std::cout << "The client said: " << buffer << std::endl; +/// +/// // Send an answer +/// std::string message = "Welcome, client"; +/// socket.send(message.c_str(), message.size() + 1); +/// \endcode +/// +/// \see sf::Socket, sf::UdpSocket, sf::Packet +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/UdpSocket.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/UdpSocket.hpp new file mode 100644 index 0000000..e5fa3b0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Network/UdpSocket.hpp @@ -0,0 +1,283 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_UDPSOCKET_HPP +#define SFML_UDPSOCKET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class IpAddress; +class Packet; + +//////////////////////////////////////////////////////////// +/// \brief Specialized socket using the UDP protocol +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API UdpSocket : public Socket +{ +public : + + //////////////////////////////////////////////////////////// + // Constants + //////////////////////////////////////////////////////////// + enum + { + MaxDatagramSize = 65507 ///< The maximum number of bytes that can be sent in a single UDP datagram + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + UdpSocket(); + + //////////////////////////////////////////////////////////// + /// \brief Get the port to which the socket is bound locally + /// + /// If the socket is not bound to a port, this function + /// returns 0. + /// + /// \return Port to which the socket is bound + /// + /// \see bind + /// + //////////////////////////////////////////////////////////// + unsigned short getLocalPort() const; + + //////////////////////////////////////////////////////////// + /// \brief Bind the socket to a specific port + /// + /// Binding the socket to a port is necessary for being + /// able to receive data on that port. + /// You can use the special value Socket::AnyPort to tell the + /// system to automatically pick an available port, and then + /// call getLocalPort to retrieve the chosen port. + /// + /// \param port Port to bind the socket to + /// + /// \return Status code + /// + /// \see unbind, getLocalPort + /// + //////////////////////////////////////////////////////////// + Status bind(unsigned short port); + + //////////////////////////////////////////////////////////// + /// \brief Unbind the socket from the local port to which it is bound + /// + /// The port that the socket was previously using is immediately + /// available after this function is called. If the + /// socket is not bound to a port, this function has no effect. + /// + /// \see bind + /// + //////////////////////////////////////////////////////////// + void unbind(); + + //////////////////////////////////////////////////////////// + /// \brief Send raw data to a remote peer + /// + /// Make sure that \a size is not greater than + /// UdpSocket::MaxDatagramSize, otherwise this function will + /// fail and no data will be sent. + /// + /// \param data Pointer to the sequence of bytes to send + /// \param size Number of bytes to send + /// \param remoteAddress Address of the receiver + /// \param remotePort Port of the receiver to send the data to + /// + /// \return Status code + /// + /// \see receive + /// + //////////////////////////////////////////////////////////// + Status send(const void* data, std::size_t size, const IpAddress& remoteAddress, unsigned short remotePort); + + //////////////////////////////////////////////////////////// + /// \brief Receive raw data from a remote peer + /// + /// In blocking mode, this function will wait until some + /// bytes are actually received. + /// Be careful to use a buffer which is large enough for + /// the data that you intend to receive, if it is too small + /// then an error will be returned and *all* the data will + /// be lost. + /// + /// \param data Pointer to the array to fill with the received bytes + /// \param size Maximum number of bytes that can be received + /// \param received This variable is filled with the actual number of bytes received + /// \param remoteAddress Address of the peer that sent the data + /// \param remotePort Port of the peer that sent the data + /// + /// \return Status code + /// + /// \see send + /// + //////////////////////////////////////////////////////////// + Status receive(void* data, std::size_t size, std::size_t& received, IpAddress& remoteAddress, unsigned short& remotePort); + + //////////////////////////////////////////////////////////// + /// \brief Send a formatted packet of data to a remote peer + /// + /// Make sure that the packet size is not greater than + /// UdpSocket::MaxDatagramSize, otherwise this function will + /// fail and no data will be sent. + /// + /// \param packet Packet to send + /// \param remoteAddress Address of the receiver + /// \param remotePort Port of the receiver to send the data to + /// + /// \return Status code + /// + /// \see receive + /// + //////////////////////////////////////////////////////////// + Status send(Packet& packet, const IpAddress& remoteAddress, unsigned short remotePort); + + //////////////////////////////////////////////////////////// + /// \brief Receive a formatted packet of data from a remote peer + /// + /// In blocking mode, this function will wait until the whole packet + /// has been received. + /// + /// \param packet Packet to fill with the received data + /// \param remoteAddress Address of the peer that sent the data + /// \param remotePort Port of the peer that sent the data + /// + /// \return Status code + /// + /// \see send + /// + //////////////////////////////////////////////////////////// + Status receive(Packet& packet, IpAddress& remoteAddress, unsigned short& remotePort); + +private: + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_buffer; ///< Temporary buffer holding the received data in Receive(Packet) +}; + +} // namespace sf + + +#endif // SFML_UDPSOCKET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::UdpSocket +/// \ingroup network +/// +/// A UDP socket is a connectionless socket. Instead of +/// connecting once to a remote host, like TCP sockets, +/// it can send to and receive from any host at any time. +/// +/// It is a datagram protocol: bounded blocks of data (datagrams) +/// are transfered over the network rather than a continuous +/// stream of data (TCP). Therefore, one call to send will always +/// match one call to receive (if the datagram is not lost), +/// with the same data that was sent. +/// +/// The UDP protocol is lightweight but unreliable. Unreliable +/// means that datagrams may be duplicated, be lost or +/// arrive reordered. However, if a datagram arrives, its +/// data is guaranteed to be valid. +/// +/// UDP is generally used for real-time communication +/// (audio or video streaming, real-time games, etc.) where +/// speed is crucial and lost data doesn't matter much. +/// +/// Sending and receiving data can use either the low-level +/// or the high-level functions. The low-level functions +/// process a raw sequence of bytes, whereas the high-level +/// interface uses packets (see sf::Packet), which are easier +/// to use and provide more safety regarding the data that is +/// exchanged. You can look at the sf::Packet class to get +/// more details about how they work. +/// +/// It is important to note that UdpSocket is unable to send +/// datagrams bigger than MaxDatagramSize. In this case, it +/// returns an error and doesn't send anything. This applies +/// to both raw data and packets. Indeed, even packets are +/// unable to split and recompose data, due to the unreliability +/// of the protocol (dropped, mixed or duplicated datagrams may +/// lead to a big mess when trying to recompose a packet). +/// +/// If the socket is bound to a port, it is automatically +/// unbound from it when the socket is destroyed. However, +/// you can unbind the socket explicitely with the Unbind +/// function if necessary, to stop receiving messages or +/// make the port available for other sockets. +/// +/// Usage example: +/// \code +/// // ----- The client ----- +/// +/// // Create a socket and bind it to the port 55001 +/// sf::UdpSocket socket; +/// socket.bind(55001); +/// +/// // Send a message to 192.168.1.50 on port 55002 +/// std::string message = "Hi, I am " + sf::IpAddress::getLocalAddress().toString(); +/// socket.send(message.c_str(), message.size() + 1, "192.168.1.50", 55002); +/// +/// // Receive an answer (most likely from 192.168.1.50, but could be anyone else) +/// char buffer[1024]; +/// std::size_t received = 0; +/// sf::IpAddress sender; +/// unsigned short port; +/// socket.receive(buffer, sizeof(buffer), received, sender, port); +/// std::cout << sender.ToString() << " said: " << buffer << std::endl; +/// +/// // ----- The server ----- +/// +/// // Create a socket and bind it to the port 55002 +/// sf::UdpSocket socket; +/// socket.bind(55002); +/// +/// // Receive a message from anyone +/// char buffer[1024]; +/// std::size_t received = 0; +/// sf::IpAddress sender; +/// unsigned short port; +/// socket.receive(buffer, sizeof(buffer), received, sender, port); +/// std::cout << sender.ToString() << " said: " << buffer << std::endl; +/// +/// // Send an answer +/// std::string message = "Welcome " + sender.toString(); +/// socket.send(message.c_str(), message.size() + 1, sender, port); +/// \endcode +/// +/// \see sf::Socket, sf::TcpSocket, sf::Packet +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/OpenGL.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/OpenGL.hpp new file mode 100644 index 0000000..3d04603 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/OpenGL.hpp @@ -0,0 +1,62 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_OPENGL_HPP +#define SFML_OPENGL_HPP + + +//////////////////////////////////////////////////////////// +/// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +/// This file just includes the OpenGL (GL and GLU) headers, +/// which have actually different paths on each system +//////////////////////////////////////////////////////////// +#if defined(SFML_SYSTEM_WINDOWS) + + // The Visual C++ version of gl.h uses WINGDIAPI and APIENTRY but doesn't define them + #ifdef _MSC_VER + #include + #endif + + #include + #include + +#elif defined(SFML_SYSTEM_LINUX) || defined(SFML_SYSTEM_FREEBSD) + + #include + #include + +#elif defined(SFML_SYSTEM_MACOS) + + #include + #include + +#endif + + +#endif // SFML_OPENGL_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System.hpp new file mode 100644 index 0000000..9d2166b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System.hpp @@ -0,0 +1,56 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SYSTEM_HPP +#define SFML_SYSTEM_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif // SFML_SYSTEM_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup system System module +/// +/// Base module of SFML, defining various utilities. It provides +/// vector classes, unicode strings and conversion functions, +/// threads and mutexes, timing classes. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Clock.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Clock.hpp new file mode 100644 index 0000000..4ae0f2d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Clock.hpp @@ -0,0 +1,117 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CLOCK_HPP +#define SFML_CLOCK_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility class that measures the elapsed time +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Clock +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// The clock starts automatically after being constructed. + /// + //////////////////////////////////////////////////////////// + Clock(); + + //////////////////////////////////////////////////////////// + /// \brief Get the elapsed time + /// + /// This function returns the time elapsed since the last call + /// to restart() (or the construction of the instance if restart() + /// has not been called). + /// + /// \return Time elapsed + /// + //////////////////////////////////////////////////////////// + Time getElapsedTime() const; + + //////////////////////////////////////////////////////////// + /// \brief Restart the clock + /// + /// This function puts the time counter back to zero. + /// It also returns the time elapsed since the clock was started. + /// + /// \return Time elapsed + /// + //////////////////////////////////////////////////////////// + Time restart(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Time m_startTime; ///< Time of last reset, in microseconds +}; + +} // namespace sf + + +#endif // SFML_CLOCK_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Clock +/// \ingroup system +/// +/// sf::Clock is a lightweight class for measuring time. +/// +/// Its provides the most precise time that the underlying +/// OS can achieve (generally microseconds or nanoseconds). +/// It also ensures monotonicity, which means that the returned +/// time can never go backward, even if the system time is +/// changed. +/// +/// Usage example: +/// \code +/// sf::Clock clock; +/// ... +/// Time time1 = clock.getElapsedTime(); +/// ... +/// Time time2 = clock.restart(); +/// \endcode +/// +/// The sf::Time value returned by the clock can then be +/// converted to a number of seconds, milliseconds or even +/// microseconds. +/// +/// \see sf::Time +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Err.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Err.hpp new file mode 100644 index 0000000..7903020 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Err.hpp @@ -0,0 +1,78 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_ERR_HPP +#define SFML_ERR_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Standard stream used by SFML to output warnings and errors +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API std::ostream& err(); + +} // namespace sf + + +#endif // SFML_ERR_HPP + + +//////////////////////////////////////////////////////////// +/// \fn sf::err +/// \ingroup system +/// +/// By default, sf::err() outputs to the same location as std::cerr, +/// (-> the stderr descriptor) which is the console if there's +/// one available. +/// +/// It is a standard std::ostream instance, so it supports all the +/// insertion operations defined by the STL +/// (operator <<, manipulators, etc.). +/// +/// sf::err() can be redirected to write to another output, independantly +/// of std::cerr, by using the rdbuf() function provided by the +/// std::ostream class. +/// +/// Example: +/// \code +/// // Redirect to a file +/// std::ofstream file("sfml-log.txt"); +/// std::streambuf* previous = sf::err().rdbuf(file.rdbuf()); +/// +/// // Redirect to nothing +/// sf::err().rdbuf(NULL); +/// +/// // Restore the original output +/// sf::err().rdbuf(previous); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Export.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Export.hpp new file mode 100644 index 0000000..ec08fbe --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SYSTEM_EXPORT_HPP +#define SFML_SYSTEM_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_SYSTEM_EXPORTS) + + #define SFML_SYSTEM_API SFML_API_EXPORT + +#else + + #define SFML_SYSTEM_API SFML_API_IMPORT + +#endif + + +#endif // SFML_SYSTEM_EXPORT_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/InputStream.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/InputStream.hpp new file mode 100644 index 0000000..b79436a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/InputStream.hpp @@ -0,0 +1,151 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_INPUTSTREAM_HPP +#define SFML_INPUTSTREAM_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Abstract class for custom file input streams +/// +//////////////////////////////////////////////////////////// +class InputStream +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~InputStream() {} + + //////////////////////////////////////////////////////////// + /// \brief Read data from the stream + /// + /// After reading, the stream's reading position must be + /// advanced by the amount of bytes read. + /// + /// \param data Buffer where to copy the read data + /// \param size Desired number of bytes to read + /// + /// \return The number of bytes actually read, or -1 on error + /// + //////////////////////////////////////////////////////////// + virtual Int64 read(void* data, Int64 size) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Change the current reading position + /// + /// \param position The position to seek to, from the beginning + /// + /// \return The position actually sought to, or -1 on error + /// + //////////////////////////////////////////////////////////// + virtual Int64 seek(Int64 position) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Get the current reading position in the stream + /// + /// \return The current position, or -1 on error. + /// + //////////////////////////////////////////////////////////// + virtual Int64 tell() = 0; + + //////////////////////////////////////////////////////////// + /// \brief Return the size of the stream + /// + /// \return The total number of bytes available in the stream, or -1 on error + /// + //////////////////////////////////////////////////////////// + virtual Int64 getSize() = 0; +}; + +} // namespace sf + + +#endif // SFML_INPUTSTREAM_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::InputStream +/// \ingroup system +/// +/// This class allows users to define their own file input sources +/// from which SFML can load resources. +/// +/// SFML resource classes like sf::Texture and +/// sf::SoundBuffer provide loadFromFile and loadFromMemory functions, +/// which read data from conventional sources. However, if you +/// have data coming from a different source (over a network, +/// embedded, encrypted, compressed, etc) you can derive your +/// own class from sf::InputStream and load SFML resources with +/// their loadFromStream function. +/// +/// Usage example: +/// \code +/// // custom stream class that reads from inside a zip file +/// class ZipStream : public sf::InputStream +/// { +/// public : +/// +/// ZipStream(std::string archive); +/// +/// bool open(std::string filename); +/// +/// Int64 read(void* data, Int64 size); +/// +/// Int64 seek(Int64 position); +/// +/// Int64 tell(); +/// +/// Int64 getSize(); +/// +/// private : +/// +/// ... +/// }; +/// +/// // now you can load textures... +/// sf::Texture texture; +/// ZipStream stream("resources.zip"); +/// stream.open("images/img.png"); +/// texture.loadFromStream(stream); +/// +/// // musics... +/// sf::Music music; +/// ZipStream stream("resources.zip"); +/// stream.open("musics/msc.ogg"); +/// music.openFromStream(stream); +/// +/// // etc. +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Lock.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Lock.hpp new file mode 100644 index 0000000..09c2a8e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Lock.hpp @@ -0,0 +1,139 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_LOCK_HPP +#define SFML_LOCK_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class Mutex; + +//////////////////////////////////////////////////////////// +/// \brief Automatic wrapper for locking and unlocking mutexes +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Lock : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Construct the lock with a target mutex + /// + /// The mutex passed to sf::Lock is automatically locked. + /// + /// \param mutex Mutex to lock + /// + //////////////////////////////////////////////////////////// + explicit Lock(Mutex& mutex); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// The destructor of sf::Lock automatically unlocks its mutex. + /// + //////////////////////////////////////////////////////////// + ~Lock(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Mutex& m_mutex; ///< Mutex to lock / unlock +}; + +} // namespace sf + + +#endif // SFML_LOCK_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Lock +/// \ingroup system +/// +/// sf::Lock is a RAII wrapper for sf::Mutex. By unlocking +/// it in its destructor, it ensures that the mutex will +/// always be released when the current scope (most likely +/// a function) ends. +/// This is even more important when an exception or an early +/// return statement can interrupt the execution flow of the +/// function. +/// +/// For maximum robustness, sf::Lock should always be used +/// to lock/unlock a mutex. +/// +/// Usage example: +/// \code +/// sf::Mutex mutex; +/// +/// void function() +/// { +/// sf::Lock lock(mutex); // mutex is now locked +/// +/// functionThatMayThrowAnException(); // mutex is unlocked if this function throws +/// +/// if (someCondition) +/// return; // mutex is unlocked +/// +/// } // mutex is unlocked +/// \endcode +/// +/// Because the mutex is not explicitely unlocked in the code, +/// it may remain locked longer than needed. If the region +/// of the code that needs to be protected by the mutex is +/// not the entire function, a good practice is to create a +/// smaller, inner scope so that the lock is limited to this +/// part of the code. +/// +/// \code +/// sf::Mutex mutex; +/// +/// void function() +/// { +/// { +/// sf::Lock lock(mutex); +/// codeThatRequiresProtection(); +/// +/// } // mutex is unlocked here +/// +/// codeThatDoesntCareAboutTheMutex(); +/// } +/// \endcode +/// +/// Having a mutex locked longer than required is a bad practice +/// which can lead to bad performances. Don't forget that when +/// a mutex is locked, other threads may be waiting doing nothing +/// until it is released. +/// +/// \see sf::Mutex +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Mutex.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Mutex.hpp new file mode 100644 index 0000000..ac95236 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Mutex.hpp @@ -0,0 +1,148 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_MUTEX_HPP +#define SFML_MUTEX_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +namespace priv +{ + class MutexImpl; +} + +//////////////////////////////////////////////////////////// +/// \brief Blocks concurrent access to shared resources +/// from multiple threads +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Mutex : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Mutex(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Mutex(); + + //////////////////////////////////////////////////////////// + /// \brief Lock the mutex + /// + /// If the mutex is already locked in another thread, + /// this call will block the execution until the mutex + /// is released. + /// + /// \see unlock + /// + //////////////////////////////////////////////////////////// + void lock(); + + //////////////////////////////////////////////////////////// + /// \brief Unlock the mutex + /// + /// \see lock + /// + //////////////////////////////////////////////////////////// + void unlock(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::MutexImpl* m_mutexImpl; ///< OS-specific implementation +}; + +} // namespace sf + + +#endif // SFML_MUTEX_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Mutex +/// \ingroup system +/// +/// Mutex stands for "MUTual EXclusion". A mutex is a +/// synchronization object, used when multiple threads are involved. +/// +/// When you want to protect a part of the code from being accessed +/// simultaneously by multiple threads, you typically use a +/// mutex. When a thread is locked by a mutex, any other thread +/// trying to lock it will be blocked until the mutex is released +/// by the thread that locked it. This way, you can allow only +/// one thread at a time to access a critical region of your code. +/// +/// Usage example: +/// \code +/// Database database; // this is a critical resource that needs some protection +/// sf::Mutex mutex; +/// +/// void thread1() +/// { +/// mutex.lock(); // this call will block the thread if the mutex is already locked by thread2 +/// database.write(...); +/// mutex.unlock(); // if thread2 was waiting, it will now be unblocked +/// } +/// +/// void thread2() +/// { +/// mutex.lock(); // this call will block the thread if the mutex is already locked by thread1 +/// database.write(...); +/// mutex.unlock(); // if thread1 was waiting, it will now be unblocked +/// } +/// \endcode +/// +/// Be very careful with mutexes. A bad usage can lead to bad problems, +/// like deadlocks (two threads are waiting for each other and the +/// application is globally stuck). +/// +/// To make the usage of mutexes more robust, particularly in +/// environments where exceptions can be thrown, you should +/// use the helper class sf::Lock to lock/unlock mutexes. +/// +/// SFML mutexes are recursive, which means that you can lock +/// a mutex multiple times in the same thread without creating +/// a deadlock. In this case, the first call to lock() behaves +/// as usual, and the following ones have no effect. +/// However, you must call unlock() exactly as many times as you +/// called lock(). If you don't, the mutex won't be released. +/// +/// \see sf::Lock +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/NonCopyable.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/NonCopyable.hpp new file mode 100644 index 0000000..8c9cdb6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/NonCopyable.hpp @@ -0,0 +1,119 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_NONCOPYABLE_HPP +#define SFML_NONCOPYABLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility class that makes any derived +/// class non-copyable +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API NonCopyable +{ +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Because this class has a copy constructor, the compiler + /// will not automatically generate the default constructor. + /// That's why we must define it explicitely. + /// + //////////////////////////////////////////////////////////// + NonCopyable() {} + +private : + + //////////////////////////////////////////////////////////// + /// \brief Disabled copy constructor + /// + /// By making the copy constructor private, the compiler will + /// trigger an error if anyone outside tries to use it. + /// To prevent NonCopyable or friend classes from using it, + /// we also give no definition, so that the linker will + /// produce an error if the first protection was inefficient. + /// + //////////////////////////////////////////////////////////// + NonCopyable(const NonCopyable&); + + //////////////////////////////////////////////////////////// + /// \brief Disabled assignment operator + /// + /// By making the assignment operator private, the compiler will + /// trigger an error if anyone outside tries to use it. + /// To prevent NonCopyable or friend classes from using it, + /// we also give no definition, so that the linker will + /// produce an error if the first protection was inefficient. + /// + //////////////////////////////////////////////////////////// + NonCopyable& operator =(const NonCopyable&); +}; + +} // namespace sf + + +#endif // SFML_NONCOPYABLE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::NonCopyable +/// \ingroup system +/// +/// This class makes its instances non-copyable, by explicitely +/// disabling its copy constructor and its assignment operator. +/// +/// To create a non-copyable class, simply inherit from +/// sf::NonCopyable. +/// +/// The type of inheritance (public or private) doesn't matter, +/// the copy constructor and assignment operator are declared private +/// in sf::NonCopyable so they will end up being inaccessible in both +/// cases. Thus you can use a shorter syntax for inheriting from it +/// (see below). +/// +/// Usage example: +/// \code +/// class MyNonCopyableClass : sf::NonCopyable +/// { +/// ... +/// }; +/// \endcode +/// +/// Deciding whether the instances of a class can be copied +/// or not is a very important design choice. You are strongly +/// encouraged to think about it before writing a class, +/// and to use sf::NonCopyable when necessary to prevent +/// many potential future errors when using it. This is also +/// a very important indication to users of your class. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Sleep.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Sleep.hpp new file mode 100644 index 0000000..47567a9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Sleep.hpp @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SLEEP_HPP +#define SFML_SLEEP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \ingroup system +/// \brief Make the current thread sleep for a given duration +/// +/// sf::sleep is the best way to block a program or one of its +/// threads, as it doesn't consume any CPU power. +/// +/// \param duration Time to sleep +/// +//////////////////////////////////////////////////////////// +void SFML_SYSTEM_API sleep(Time duration); + +} // namespace sf + + +#endif // SFML_SLEEP_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/String.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/String.hpp new file mode 100644 index 0000000..080a809 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/String.hpp @@ -0,0 +1,543 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_STRING_HPP +#define SFML_STRING_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility string class that automatically handles +/// conversions between types and encodings +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API String +{ +public : + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::basic_string::iterator Iterator; ///< Iterator type + typedef std::basic_string::const_iterator ConstIterator; ///< Constant iterator type + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const std::size_t InvalidPos; ///< Represents an invalid position in the string + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates an empty string. + /// + //////////////////////////////////////////////////////////// + String(); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a single ANSI character and a locale + /// + /// The source character is converted to UTF-32 according + /// to the given locale. + /// + /// \param ansiChar ANSI character to convert + /// \param locale Locale to use for conversion + /// + //////////////////////////////////////////////////////////// + String(char ansiChar, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Construct from single wide character + /// + /// \param wideChar Wide character to convert + /// + //////////////////////////////////////////////////////////// + String(wchar_t wideChar); + + //////////////////////////////////////////////////////////// + /// \brief Construct from single UTF-32 character + /// + /// \param utf32Char UTF-32 character to convert + /// + //////////////////////////////////////////////////////////// + String(Uint32 utf32Char); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a null-terminated C-style ANSI string and a locale + /// + /// The source string is converted to UTF-32 according + /// to the given locale. + /// + /// \param ansiString ANSI string to convert + /// \param locale Locale to use for conversion + /// + //////////////////////////////////////////////////////////// + String(const char* ansiString, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Construct from an ANSI string and a locale + /// + /// The source string is converted to UTF-32 according + /// to the given locale. + /// + /// \param ansiString ANSI string to convert + /// \param locale Locale to use for conversion + /// + //////////////////////////////////////////////////////////// + String(const std::string& ansiString, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Construct from null-terminated C-style wide string + /// + /// \param wideString Wide string to convert + /// + //////////////////////////////////////////////////////////// + String(const wchar_t* wideString); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a wide string + /// + /// \param wideString Wide string to convert + /// + //////////////////////////////////////////////////////////// + String(const std::wstring& wideString); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a null-terminated C-style UTF-32 string + /// + /// \param utf32String UTF-32 string to assign + /// + //////////////////////////////////////////////////////////// + String(const Uint32* utf32String); + + //////////////////////////////////////////////////////////// + /// \brief Construct from an UTF-32 string + /// + /// \param utf32String UTF-32 string to assign + /// + //////////////////////////////////////////////////////////// + String(const std::basic_string& utf32String); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + String(const String& copy); + + //////////////////////////////////////////////////////////// + /// \brief Implicit cast operator to std::string (ANSI string) + /// + /// The current global locale is used for conversion. If you + /// want to explicitely specify a locale, see toAnsiString. + /// Characters that do not fit in the target encoding are + /// discarded from the returned string. + /// This operator is defined for convenience, and is equivalent + /// to calling toAnsiString(). + /// + /// \return Converted ANSI string + /// + /// \see toAnsiString, operator std::wstring + /// + //////////////////////////////////////////////////////////// + operator std::string() const; + + //////////////////////////////////////////////////////////// + /// \brief Implicit cast operator to std::wstring (wide string) + /// + /// Characters that do not fit in the target encoding are + /// discarded from the returned string. + /// This operator is defined for convenience, and is equivalent + /// to calling toWideString(). + /// + /// \return Converted wide string + /// + /// \see toWideString, operator std::string + /// + //////////////////////////////////////////////////////////// + operator std::wstring() const; + + //////////////////////////////////////////////////////////// + /// \brief Convert the unicode string to an ANSI string + /// + /// The UTF-32 string is converted to an ANSI string in + /// the encoding defined by \a locale. + /// Characters that do not fit in the target encoding are + /// discarded from the returned string. + /// + /// \param locale Locale to use for conversion + /// + /// \return Converted ANSI string + /// + /// \see toWideString, operator std::string + /// + //////////////////////////////////////////////////////////// + std::string toAnsiString(const std::locale& locale = std::locale()) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert the unicode string to a wide string + /// + /// Characters that do not fit in the target encoding are + /// discarded from the returned string. + /// + /// \return Converted wide string + /// + /// \see toAnsiString, operator std::wstring + /// + //////////////////////////////////////////////////////////// + std::wstring toWideString() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + String& operator =(const String& right); + + //////////////////////////////////////////////////////////// + /// \brief Overload of += operator to append an UTF-32 string + /// + /// \param right String to append + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + String& operator +=(const String& right); + + //////////////////////////////////////////////////////////// + /// \brief Overload of [] operator to access a character by its position + /// + /// This function provides read-only access to characters. + /// Note: this function doesn't throw if \a index is out of range. + /// + /// \param index Index of the character to get + /// + /// \return Character at position \a index + /// + //////////////////////////////////////////////////////////// + Uint32 operator [](std::size_t index) const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of [] operator to access a character by its position + /// + /// This function provides read and write access to characters. + /// Note: this function doesn't throw if \a index is out of range. + /// + /// \param index Index of the character to get + /// + /// \return Reference to the character at position \a index + /// + //////////////////////////////////////////////////////////// + Uint32& operator [](std::size_t index); + + //////////////////////////////////////////////////////////// + /// \brief Clear the string + /// + /// This function removes all the characters from the string. + /// + /// \see isEmpty, erase + /// + //////////////////////////////////////////////////////////// + void clear(); + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the string + /// + /// \return Number of characters in the string + /// + /// \see isEmpty + /// + //////////////////////////////////////////////////////////// + std::size_t getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Check whether the string is empty or not + /// + /// \return True if the string is empty (i.e. contains no character) + /// + /// \see clear, getSize + /// + //////////////////////////////////////////////////////////// + bool isEmpty() const; + + //////////////////////////////////////////////////////////// + /// \brief Erase one or more characters from the string + /// + /// This function removes a sequence of \a count characters + /// starting from \a position. + /// + /// \param position Position of the first character to erase + /// \param count Number of characters to erase + /// + //////////////////////////////////////////////////////////// + void erase(std::size_t position, std::size_t count = 1); + + //////////////////////////////////////////////////////////// + /// \brief Insert one or more characters into the string + /// + /// This function inserts the characters of \a str + /// into the string, starting from \a position. + /// + /// \param position Position of insertion + /// \param str Characters to insert + /// + //////////////////////////////////////////////////////////// + void insert(std::size_t position, const String& str); + + //////////////////////////////////////////////////////////// + /// \brief Find a sequence of one or more characters in the string + /// + /// This function searches for the characters of \a str + /// into the string, starting from \a start. + /// + /// \param str Characters to find + /// \param start Where to begin searching + /// + /// \return Position of \a str in the string, or String::InvalidPos if not found + /// + //////////////////////////////////////////////////////////// + std::size_t find(const String& str, std::size_t start = 0) const; + + //////////////////////////////////////////////////////////// + /// \brief Get a pointer to the C-style array of characters + /// + /// This functions provides a read-only access to a + /// null-terminated C-style representation of the string. + /// The returned pointer is temporary and is meant only for + /// immediate use, thus it is not recommended to store it. + /// + /// \return Read-only pointer to the array of characters + /// + //////////////////////////////////////////////////////////// + const Uint32* getData() const; + + //////////////////////////////////////////////////////////// + /// \brief Return an iterator to the beginning of the string + /// + /// \return Read-write iterator to the beginning of the string characters + /// + /// \see end + /// + //////////////////////////////////////////////////////////// + Iterator begin(); + + //////////////////////////////////////////////////////////// + /// \brief Return an iterator to the beginning of the string + /// + /// \return Read-only iterator to the beginning of the string characters + /// + /// \see end + /// + //////////////////////////////////////////////////////////// + ConstIterator begin() const; + + //////////////////////////////////////////////////////////// + /// \brief Return an iterator to the beginning of the string + /// + /// The end iterator refers to 1 position past the last character; + /// thus it represents an invalid character and should never be + /// accessed. + /// + /// \return Read-write iterator to the end of the string characters + /// + /// \see begin + /// + //////////////////////////////////////////////////////////// + Iterator end(); + + //////////////////////////////////////////////////////////// + /// \brief Return an iterator to the beginning of the string + /// + /// The end iterator refers to 1 position past the last character; + /// thus it represents an invalid character and should never be + /// accessed. + /// + /// \return Read-only iterator to the end of the string characters + /// + /// \see begin + /// + //////////////////////////////////////////////////////////// + ConstIterator end() const; + +private : + + friend SFML_SYSTEM_API bool operator ==(const String& left, const String& right); + friend SFML_SYSTEM_API bool operator <(const String& left, const String& right); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::basic_string m_string; ///< Internal string of UTF-32 characters +}; + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of == operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if both strings are equal +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator ==(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of != operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if both strings are different +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator !=(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of < operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if \a left is alphabetically lesser than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator <(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of > operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if \a left is alphabetically greater than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator >(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of <= operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if \a left is alphabetically lesser or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator <=(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of >= operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if \a left is alphabetically greater or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator >=(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of binary + operator to concatenate two strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return Concatenated string +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API String operator +(const String& left, const String& right); + +} // namespace sf + + +#endif // SFML_STRING_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::String +/// \ingroup system +/// +/// sf::String is a utility string class defined mainly for +/// convenience. It is a Unicode string (implemented using +/// UTF-32), thus it can store any character in the world +/// (european, chinese, arabic, hebrew, etc.). +/// +/// It automatically handles conversions from/to ANSI and +/// wide strings, so that you can work with standard string +/// classes and still be compatible with functions taking a +/// sf::String. +/// +/// \code +/// sf::String s; +/// +/// std::string s1 = s; // automatically converted to ANSI string +/// std::wstring s2 = s; // automatically converted to wide string +/// s = "hello"; // automatically converted from ANSI string +/// s = L"hello"; // automatically converted from wide string +/// s += 'a'; // automatically converted from ANSI string +/// s += L'a'; // automatically converted from wide string +/// \endcode +/// +/// Conversions involving ANSI strings use the default user locale. However +/// it is possible to use a custom locale if necessary: +/// \code +/// std::locale locale; +/// sf::String s; +/// ... +/// std::string s1 = s.toAnsiString(locale); +/// s = sf::String("hello", locale); +/// \endcode +/// +/// sf::String defines the most important functions of the +/// standard std::string class: removing, random access, iterating, +/// appending, comparing, etc. However it is a simple class +/// provided for convenience, and you may have to consider using +/// a more optimized class if your program requires complex string +/// handling. The automatic conversion functions will then take +/// care of converting your string to sf::String whenever SFML +/// requires it. +/// +/// Please note that SFML also defines a low-level, generic +/// interface for Unicode handling, see the sf::Utf classes. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Thread.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Thread.hpp new file mode 100644 index 0000000..8313646 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Thread.hpp @@ -0,0 +1,282 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_THREAD_HPP +#define SFML_THREAD_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class ThreadImpl; + struct ThreadFunc; +} + +//////////////////////////////////////////////////////////// +/// \brief Utility class to manipulate threads +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Thread : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Construct the thread from a functor with no argument + /// + /// This constructor works for function objects, as well + /// as free function. + /// + /// Use this constructor for this kind of function: + /// \code + /// void function(); + /// + /// // --- or ---- + /// + /// struct Functor + /// { + /// void operator()(); + /// }; + /// \endcode + /// Note: this does *not* run the thread, use Launch(). + /// + /// \param function Functor or free function to use as the entry point of the thread + /// + //////////////////////////////////////////////////////////// + template + Thread(F function); + + //////////////////////////////////////////////////////////// + /// \brief Construct the thread from a functor with an argument + /// + /// This constructor works for function objects, as well + /// as free function. + /// It is a template, which means that the argument can + /// have any type (int, std::string, void*, Toto, ...). + /// + /// Use this constructor for this kind of function: + /// \code + /// void function(int arg); + /// + /// // --- or ---- + /// + /// struct Functor + /// { + /// void operator()(std::string arg); + /// }; + /// \endcode + /// Note: this does *not* run the thread, use Launch(). + /// + /// \param function Functor or free function to use as the entry point of the thread + /// \param argument argument to forward to the function + /// + //////////////////////////////////////////////////////////// + template + Thread(F function, A argument); + + //////////////////////////////////////////////////////////// + /// \brief Construct the thread from a member function and an object + /// + /// This constructor is template, which means that you can + /// use it with any class. + /// Use this constructor for this kind of function: + /// \code + /// class MyClass + /// { + /// public : + /// + /// void function(); + /// }; + /// \endcode + /// Note: this does *not* run the thread, use Launch(). + /// + /// \param function Entry point of the thread + /// \param object Pointer to the object to use + /// + //////////////////////////////////////////////////////////// + template + Thread(void(C::*function)(), C* object); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// This destructor calls Wait(), so that the internal thread + /// cannot survive after its sf::Thread instance is destroyed. + /// + //////////////////////////////////////////////////////////// + ~Thread(); + + //////////////////////////////////////////////////////////// + /// \brief Run the thread + /// + /// This function starts the entry point passed to the + /// thread's constructor, and returns immediately. + /// After this function returns, the thread's function is + /// running in parallel to the calling code. + /// + //////////////////////////////////////////////////////////// + void launch(); + + //////////////////////////////////////////////////////////// + /// \brief Wait until the thread finishes + /// + /// This function will block the execution until the + /// thread's function ends. + /// Warning: if the thread function never ends, the calling + /// thread will block forever. + /// If this function is called from its owner thread, it + /// returns without doing anything. + /// + //////////////////////////////////////////////////////////// + void wait(); + + //////////////////////////////////////////////////////////// + /// \brief Terminate the thread + /// + /// This function immediately stops the thread, without waiting + /// for its function to finish. + /// Terminating a thread with this function is not safe, + /// and can lead to local variables not being destroyed + /// on some operating systems. You should rather try to make + /// the thread function terminate by itself. + /// + //////////////////////////////////////////////////////////// + void terminate(); + +private : + + friend class priv::ThreadImpl; + + //////////////////////////////////////////////////////////// + /// \brief Internal entry point of the thread + /// + /// This function is called by the thread implementation. + /// + //////////////////////////////////////////////////////////// + void run(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::ThreadImpl* m_impl; ///< OS-specific implementation of the thread + priv::ThreadFunc* m_entryPoint; ///< Abstraction of the function to run +}; + +#include + +} // namespace sf + +#endif // SFML_THREAD_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Thread +/// \ingroup system +/// +/// Threads provide a way to run multiple parts of the code +/// in parallel. When you launch a new thread, the execution +/// is split and both the new thread and the caller run +/// in parallel. +/// +/// To use a sf::Thread, you construct it directly with the +/// function to execute as the entry point of the thread. +/// sf::Thread has multiple template constructors, which means +/// that you can use several types of entry points: +/// \li non-member functions with no argument +/// \li non-member functions with one argument of any type +/// \li functors with no argument (this one is particularly useful for compatibility with boost/std::bind) +/// \li functors with one argument of any type +/// \li member functions from any class with no argument +/// +/// The function argument, if any, is copied in the sf::Thread +/// instance, as well as the functor (if the corresponding +/// constructor is used). Class instances, however, are passed +/// by pointer so you must make sure that the object won't be +/// destroyed while the thread is still using it. +/// +/// The thread ends when its function is terminated. If the +/// owner sf::Thread instance is destroyed before the +/// thread is finished, the destructor will wait (see wait()) +/// +/// Usage examples: +/// \code +/// // example 1: non member function with one argument +/// +/// void threadFunc(int argument) +/// { +/// ... +/// } +/// +/// sf::Thread thread(&threadFunc, 5); +/// thread.launch(); // start the thread (internally calls threadFunc(5)) +/// \endcode +/// +/// \code +/// // example 2: member function +/// +/// class Task +/// { +/// public : +/// void run() +/// { +/// ... +/// } +/// }; +/// +/// Task task; +/// sf::Thread thread(&Task::run, &task); +/// thread.launch(); // start the thread (internally calls task.run()) +/// \endcode +/// +/// \code +/// // example 3: functor +/// +/// struct Task +/// { +/// void operator()() +/// { +/// ... +/// } +/// }; +/// +/// sf::Thread thread(Task()); +/// thread.launch(); // start the thread (internally calls operator() on the Task instance) +/// \endcode +/// +/// Creating parallel threads of execution can be dangerous: +/// all threads inside the same process share the same memory space, +/// which means that you may end up accessing the same variable +/// from multiple threads at the same time. To prevent this +/// kind of situations, you can use mutexes (see sf::Mutex). +/// +/// \see sf::Mutex +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Thread.inl b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Thread.inl new file mode 100644 index 0000000..126228a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Thread.inl @@ -0,0 +1,90 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +namespace priv +{ +// Base class for abstract thread functions +struct ThreadFunc +{ + virtual ~ThreadFunc() {} + virtual void run() = 0; +}; + +// Specialization using a functor (including free functions) with no argument +template +struct ThreadFunctor : ThreadFunc +{ + ThreadFunctor(T functor) : m_functor(functor) {} + virtual void run() {m_functor();} + T m_functor; +}; + +// Specialization using a functor (including free functions) with one argument +template +struct ThreadFunctorWithArg : ThreadFunc +{ + ThreadFunctorWithArg(F function, A arg) : m_function(function), m_arg(arg) {} + virtual void run() {m_function(m_arg);} + F m_function; + A m_arg; +}; + +// Specialization using a member function +template +struct ThreadMemberFunc : ThreadFunc +{ + ThreadMemberFunc(void(C::*function)(), C* object) : m_function(function), m_object(object) {} + virtual void run() {(m_object->*m_function)();} + void(C::*m_function)(); + C* m_object; +}; + +} // namespace priv + + +//////////////////////////////////////////////////////////// +template +Thread::Thread(F functor) : +m_impl (NULL), +m_entryPoint(new priv::ThreadFunctor(functor)) +{ +} + + +//////////////////////////////////////////////////////////// +template +Thread::Thread(F function, A argument) : +m_impl (NULL), +m_entryPoint(new priv::ThreadFunctorWithArg(function, argument)) +{ +} + + +//////////////////////////////////////////////////////////// +template +Thread::Thread(void(C::*function)(), C* object) : +m_impl (NULL), +m_entryPoint(new priv::ThreadMemberFunc(function, object)) +{ +} diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocal.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocal.hpp new file mode 100644 index 0000000..fe2ba82 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocal.hpp @@ -0,0 +1,103 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_THREADLOCAL_HPP +#define SFML_THREADLOCAL_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class ThreadLocalImpl; +} + +//////////////////////////////////////////////////////////// +/// \brief Defines variables with thread-local storage +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API ThreadLocal : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param value Optional value to initalize the variable + /// + //////////////////////////////////////////////////////////// + ThreadLocal(void* value = NULL); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~ThreadLocal(); + + //////////////////////////////////////////////////////////// + /// \brief Set the thread-specific value of the variable + /// + /// \param value Value of the variable for the current thread + /// + //////////////////////////////////////////////////////////// + void setValue(void* value); + + //////////////////////////////////////////////////////////// + /// \brief Retrieve the thread-specific value of the variable + /// + /// \return Value of the variable for the current thread + /// + //////////////////////////////////////////////////////////// + void* getValue() const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::ThreadLocalImpl* m_impl; ///< Pointer to the OS specific implementation +}; + +} // namespace sf + + +#endif // SFML_THREADLOCAL_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::ThreadLocal +/// \ingroup system +/// +/// This class manipulates void* parameters and thus is not +/// appropriate for strongly-typed variables. You should rather +/// use the sf::ThreadLocalPtr template class. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocalPtr.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocalPtr.hpp new file mode 100644 index 0000000..e6dc1eb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocalPtr.hpp @@ -0,0 +1,158 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_THREADLOCALPTR_HPP +#define SFML_THREADLOCALPTR_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Pointer to a thread-local variable +/// +//////////////////////////////////////////////////////////// +template +class ThreadLocalPtr : private ThreadLocal +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param value Optional value to initalize the variable + /// + //////////////////////////////////////////////////////////// + ThreadLocalPtr(T* value = NULL); + + //////////////////////////////////////////////////////////// + /// \brief Overload of unary operator * + /// + /// Like raw pointers, applying the * operator returns a + /// reference to the pointed object. + /// + /// \return Reference to the pointed object + /// + //////////////////////////////////////////////////////////// + T& operator *() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of operator -> + /// + /// Like raw pointers, applying the -> operator returns the + /// pointed object. + /// + /// \return Pointed object + /// + //////////////////////////////////////////////////////////// + T* operator ->() const; + + //////////////////////////////////////////////////////////// + /// \brief Cast operator to implicitely convert the + /// pointer to its raw pointer type (T*) + /// + /// \return Pointer to the actual object + /// + //////////////////////////////////////////////////////////// + operator T*() const; + + //////////////////////////////////////////////////////////// + /// \brief Assignment operator for a raw pointer parameter + /// + /// \param value Pointer to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + ThreadLocalPtr& operator =(T* value); + + //////////////////////////////////////////////////////////// + /// \brief Assignment operator for a ThreadLocalPtr parameter + /// + /// \param right ThreadLocalPtr to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + ThreadLocalPtr& operator =(const ThreadLocalPtr& right); +}; + +} // namespace sf + +#include + + +#endif // SFML_THREADLOCALPTR_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::ThreadLocalPtr +/// \ingroup system +/// +/// sf::ThreadLocalPtr is a type-safe wrapper for storing +/// pointers to thread-local variables. A thread-local +/// variable holds a different value for each different +/// thread, unlike normal variable that are shared. +/// +/// Its usage is completely transparent, so that it is similar +/// to manipulating the raw pointer directly (like any smart pointer). +/// +/// Usage example: +/// \code +/// MyClass object1; +/// MyClass object2; +/// sf::ThreadLocalPtr objectPtr; +/// +/// void thread1() +/// { +/// objectPtr = &object1; // doesn't impact thread2 +/// ... +/// } +/// +/// void thread2() +/// { +/// objectPtr = &object2; // doesn't impact thread1 +/// ... +/// } +/// +/// int main() +/// { +/// // Create and launch the two threads +/// sf::Thread t1(&thread1); +/// sf::Thread t2(&thread2); +/// t1.launch(); +/// t2.launch(); +/// +/// return 0; +/// } +/// \endcode +/// +/// ThreadLocalPtr is designed for internal use; however you +/// can use it if you feel like it fits well your implementation. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocalPtr.inl b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocalPtr.inl new file mode 100644 index 0000000..8442025 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/ThreadLocalPtr.inl @@ -0,0 +1,77 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +namespace sf +{ +//////////////////////////////////////////////////////////// +template +ThreadLocalPtr::ThreadLocalPtr(T* value) : +ThreadLocal(value) +{ +} + + +//////////////////////////////////////////////////////////// +template +T& ThreadLocalPtr::operator *() const +{ + return *static_cast(getValue()); +} + + +//////////////////////////////////////////////////////////// +template +T* ThreadLocalPtr::operator ->() const +{ + return static_cast(getValue()); +} + + +//////////////////////////////////////////////////////////// +template +ThreadLocalPtr::operator T*() const +{ + return static_cast(getValue()); +} + + +//////////////////////////////////////////////////////////// +template +ThreadLocalPtr& ThreadLocalPtr::operator =(T* value) +{ + setValue(value); + return *this; +} + + +//////////////////////////////////////////////////////////// +template +ThreadLocalPtr& ThreadLocalPtr::operator =(const ThreadLocalPtr& right) +{ + setValue(right.getValue()); + return *this; +} + +} // namespace sf diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Time.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Time.hpp new file mode 100644 index 0000000..5037f52 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Time.hpp @@ -0,0 +1,452 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TIME_HPP +#define SFML_TIME_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Represents a time value +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Time +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Sets the time value to zero. + /// + //////////////////////////////////////////////////////////// + Time(); + + //////////////////////////////////////////////////////////// + /// \brief Return the time value as a number of seconds + /// + /// \return Time in seconds + /// + /// \see asMilliseconds, asMicroseconds + /// + //////////////////////////////////////////////////////////// + float asSeconds() const; + + //////////////////////////////////////////////////////////// + /// \brief Return the time value as a number of milliseconds + /// + /// \return Time in milliseconds + /// + /// \see asSeconds, asMicroseconds + /// + //////////////////////////////////////////////////////////// + Int32 asMilliseconds() const; + + //////////////////////////////////////////////////////////// + /// \brief Return the time value as a number of microseconds + /// + /// \return Time in microseconds + /// + /// \see asSeconds, asMilliseconds + /// + //////////////////////////////////////////////////////////// + Int64 asMicroseconds() const; + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const Time Zero; ///< Predefined "zero" time value + +private : + + friend SFML_SYSTEM_API Time seconds(float); + friend SFML_SYSTEM_API Time milliseconds(Int32); + friend SFML_SYSTEM_API Time microseconds(Int64); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a number of microseconds + /// + /// This function is internal. To construct time values, + /// use sf::seconds, sf::milliseconds or sf::microseconds instead. + /// + /// \param microseconds Number of microseconds + /// + //////////////////////////////////////////////////////////// + explicit Time(Int64 microseconds); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Int64 m_microseconds; ///< Time value stored as microseconds +}; + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Construct a time value from a number of seconds +/// +/// \param amount Number of seconds +/// +/// \return Time value constructed from the amount of seconds +/// +/// \see milliseconds, microseconds +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time seconds(float amount); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Construct a time value from a number of milliseconds +/// +/// \param amount Number of milliseconds +/// +/// \return Time value constructed from the amount of milliseconds +/// +/// \see seconds, microseconds +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time milliseconds(Int32 amount); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Construct a time value from a number of microseconds +/// +/// \param amount Number of microseconds +/// +/// \return Time value constructed from the amount of microseconds +/// +/// \see seconds, milliseconds +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time microseconds(Int64 amount); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of == operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if both time values are equal +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator ==(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of != operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if both time values are different +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator !=(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of < operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if \a left is lesser than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator <(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of > operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if \a left is greater than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator >(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of <= operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if \a left is lesser or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator <=(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of >= operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if \a left is greater or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator >=(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of unary - operator to negate a time value +/// +/// \param right Right operand (a time) +/// +/// \return Opposite of the time value +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator -(Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary + operator to add two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return Sum of the two times values +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator +(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary += operator to add/assign two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return Sum of the two times values +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator +=(Time& left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary - operator to subtract two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return Difference of the two times values +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator -(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary -= operator to subtract/assign two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return Difference of the two times values +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator -=(Time& left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary * operator to scale a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator *(Time left, float right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary * operator to scale a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator *(Time left, Int64 right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary * operator to scale a time value +/// +/// \param left Left operand (a number) +/// \param right Right operand (a time) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator *(float left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary * operator to scale a time value +/// +/// \param left Left operand (a number) +/// \param right Right operand (a time) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator *(Int64 left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary *= operator to scale/assign a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator *=(Time& left, float right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary *= operator to scale/assign a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator *=(Time& left, Int64 right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary / operator to scale a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left divided by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator /(Time left, float right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary / operator to scale a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left divided by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator /(Time left, Int64 right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary /= operator to scale/assign a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left divided by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator /=(Time& left, float right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary /= operator to scale/assign a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left divided by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator /=(Time& left, Int64 right); + +} // namespace sf + + +#endif // SFML_TIME_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Time +/// \ingroup system +/// +/// sf::Time encapsulates a time value in a flexible way. +/// It allows to define a time value either as a number of +/// seconds, milliseconds or microseconds. It also works the +/// other way round: you can read a time value as either +/// a number of seconds, milliseconds or microseconds. +/// +/// By using such a flexible interface, the API doesn't +/// impose any fixed type or resolution for time values, +/// and let the user choose its own favorite representation. +/// +/// Time values support the usual mathematical operations: +/// you can add or subtract two times, multiply or divide +/// a time by a number, compare two times, etc. +/// +/// Since they represent a time span and not an absolute time +/// value, times can also be negative. +/// +/// Usage example: +/// \code +/// sf::Time t1 = sf::seconds(0.1f); +/// Int32 milli = t1.asMilliseconds(); // 100 +/// +/// sf::Time t2 = sf::milliseconds(30); +/// Int64 micro = t2.asMicroseconds(); // 30000 +/// +/// sf::Time t3 = sf::microseconds(-800000); +/// float sec = t3.asSeconds(); // -0.8 +/// \endcode +/// +/// \code +/// void update(sf::Time elapsed) +/// { +/// position += speed * elapsed.asSeconds(); +/// } +/// +/// update(sf::milliseconds(100)); +/// \endcode +/// +/// \see sf::Clock +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Utf.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Utf.hpp new file mode 100644 index 0000000..48e6e1b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Utf.hpp @@ -0,0 +1,763 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_UTF_HPP +#define SFML_UTF_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +template +class Utf; + +//////////////////////////////////////////////////////////// +/// \brief Specialization of the Utf template for UTF-8 +/// +//////////////////////////////////////////////////////////// +template <> +class Utf<8> +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Decode a single UTF-8 character + /// + /// Decoding a character means finding its unique 32-bits + /// code (called the codepoint) in the Unicode standard. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Codepoint of the decoded UTF-8 character + /// \param replacement Replacement character to use in case the UTF-8 sequence is invalid + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In decode(In begin, In end, Uint32& output, Uint32 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-8 character + /// + /// Encoding a character means converting a unique 32-bits + /// code (called the codepoint) in the target encoding, UTF-8. + /// + /// \param input Codepoint to encode as UTF-8 + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to UTF-8 (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encode(Uint32 input, Out output, Uint8 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Advance to the next UTF-8 character + /// + /// This function is necessary for multi-elements encodings, as + /// a single character may use more than 1 storage element. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In next(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Count the number of characters of a UTF-8 sequence + /// + /// This function is necessary for multi-elements encodings, as + /// a single character may use more than 1 storage element, thus the + /// total size can be different from (begin - end). + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static std::size_t count(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Convert an ANSI characters range to UTF-8 + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert a wide characters range to UTF-8 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromWide(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a latin-1 (ISO-5589-1) characters range to UTF-8 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromLatin1(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-8 characters range to ANSI characters + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to ANSI (use 0 to skip them) + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-8 characters range to wide characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toWide(In begin, In end, Out output, wchar_t replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-8 characters range to latin-1 (ISO-5589-1) characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toLatin1(In begin, In end, Out output, char replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-8 characters range to UTF-8 + /// + /// This functions does nothing more than a direct copy; + /// it is defined only to provide the same interface as other + /// specializations of the sf::Utf<> template, and allow + /// generic code to be written on top of it. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf8(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-8 characters range to UTF-16 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf16(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-8 characters range to UTF-32 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf32(In begin, In end, Out output); +}; + +//////////////////////////////////////////////////////////// +/// \brief Specialization of the Utf template for UTF-16 +/// +//////////////////////////////////////////////////////////// +template <> +class Utf<16> +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Decode a single UTF-16 character + /// + /// Decoding a character means finding its unique 32-bits + /// code (called the codepoint) in the Unicode standard. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Codepoint of the decoded UTF-16 character + /// \param replacement Replacement character to use in case the UTF-8 sequence is invalid + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In decode(In begin, In end, Uint32& output, Uint32 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-16 character + /// + /// Encoding a character means converting a unique 32-bits + /// code (called the codepoint) in the target encoding, UTF-16. + /// + /// \param input Codepoint to encode as UTF-16 + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to UTF-16 (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encode(Uint32 input, Out output, Uint16 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Advance to the next UTF-16 character + /// + /// This function is necessary for multi-elements encodings, as + /// a single character may use more than 1 storage element. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In next(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Count the number of characters of a UTF-16 sequence + /// + /// This function is necessary for multi-elements encodings, as + /// a single character may use more than 1 storage element, thus the + /// total size can be different from (begin - end). + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static std::size_t count(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Convert an ANSI characters range to UTF-16 + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert a wide characters range to UTF-16 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromWide(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a latin-1 (ISO-5589-1) characters range to UTF-16 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromLatin1(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-16 characters range to ANSI characters + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to ANSI (use 0 to skip them) + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-16 characters range to wide characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toWide(In begin, In end, Out output, wchar_t replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toLatin1(In begin, In end, Out output, char replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-16 characters range to UTF-8 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf8(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-16 characters range to UTF-16 + /// + /// This functions does nothing more than a direct copy; + /// it is defined only to provide the same interface as other + /// specializations of the sf::Utf<> template, and allow + /// generic code to be written on top of it. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf16(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-16 characters range to UTF-32 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf32(In begin, In end, Out output); +}; + +//////////////////////////////////////////////////////////// +/// \brief Specialization of the Utf template for UTF-32 +/// +//////////////////////////////////////////////////////////// +template <> +class Utf<32> +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Decode a single UTF-32 character + /// + /// Decoding a character means finding its unique 32-bits + /// code (called the codepoint) in the Unicode standard. + /// For UTF-32, the character value is the same as the codepoint. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Codepoint of the decoded UTF-32 character + /// \param replacement Replacement character to use in case the UTF-8 sequence is invalid + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In decode(In begin, In end, Uint32& output, Uint32 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-32 character + /// + /// Encoding a character means converting a unique 32-bits + /// code (called the codepoint) in the target encoding, UTF-32. + /// For UTF-32, the codepoint is the same as the character value. + /// + /// \param input Codepoint to encode as UTF-32 + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to UTF-32 (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encode(Uint32 input, Out output, Uint32 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Advance to the next UTF-32 character + /// + /// This function is trivial for UTF-32, which can store + /// every character in a single storage element. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In next(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Count the number of characters of a UTF-32 sequence + /// + /// This function is trivial for UTF-32, which can store + /// every character in a single storage element. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static std::size_t count(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Convert an ANSI characters range to UTF-32 + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert a wide characters range to UTF-32 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromWide(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a latin-1 (ISO-5589-1) characters range to UTF-32 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromLatin1(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-32 characters range to ANSI characters + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to ANSI (use 0 to skip them) + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-32 characters range to wide characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toWide(In begin, In end, Out output, wchar_t replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toLatin1(In begin, In end, Out output, char replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-32 characters range to UTF-8 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf8(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-32 characters range to UTF-16 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf16(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-32 characters range to UTF-32 + /// + /// This functions does nothing more than a direct copy; + /// it is defined only to provide the same interface as other + /// specializations of the sf::Utf<> template, and allow + /// generic code to be written on top of it. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf32(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Decode a single ANSI character to UTF-32 + /// + /// This function does not exist in other specializations + /// of sf::Utf<>, it is defined for convenience (it is used by + /// several other conversion functions). + /// + /// \param input Input ANSI character + /// \param locale Locale to use for conversion + /// + /// \return Converted character + /// + //////////////////////////////////////////////////////////// + template + static Uint32 decodeAnsi(In input, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Decode a single wide character to UTF-32 + /// + /// This function does not exist in other specializations + /// of sf::Utf<>, it is defined for convenience (it is used by + /// several other conversion functions). + /// + /// \param input Input wide character + /// + /// \return Converted character + /// + //////////////////////////////////////////////////////////// + template + static Uint32 decodeWide(In input); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-32 character to ANSI + /// + /// This function does not exist in other specializations + /// of sf::Utf<>, it is defined for convenience (it is used by + /// several other conversion functions). + /// + /// \param codepoint Iterator pointing to the beginning of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement if the input character is not convertible to ANSI (use 0 to skip it) + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encodeAnsi(Uint32 codepoint, Out output, char replacement = 0, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-32 character to wide + /// + /// This function does not exist in other specializations + /// of sf::Utf<>, it is defined for convenience (it is used by + /// several other conversion functions). + /// + /// \param codepoint Iterator pointing to the beginning of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement if the input character is not convertible to wide (use 0 to skip it) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encodeWide(Uint32 codepoint, Out output, wchar_t replacement = 0); +}; + +#include + +// Make typedefs to get rid of the template syntax +typedef Utf<8> Utf8; +typedef Utf<16> Utf16; +typedef Utf<32> Utf32; + +} // namespace sf + + +#endif // SFML_UTF_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Utf +/// \ingroup system +/// +/// Utility class providing generic functions for UTF conversions. +/// +/// sf::Utf is a low-level, generic interface for counting, iterating, +/// encoding and decoding Unicode characters and strings. It is able +/// to handle ANSI, wide, latin-1, UTF-8, UTF-16 and UTF-32 encodings. +/// +/// sf::Utf functions are all static, these classes are not meant to +/// be instanciated. All the functions are template, so that you +/// can use any character / string type for a given encoding. +/// +/// It has 3 specializations: +/// \li sf::Utf<8> (typedef'd to sf::Utf8) +/// \li sf::Utf<16> (typedef'd to sf::Utf16) +/// \li sf::Utf<32> (typedef'd to sf::Utf32) +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Utf.inl b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Utf.inl new file mode 100644 index 0000000..672a0fa --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Utf.inl @@ -0,0 +1,752 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +// References : +// +// http://www.unicode.org/ +// http://www.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.c +// http://www.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.h +// http://people.w3.org/rishida/scripts/uniview/conversion +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +template +In Utf<8>::decode(In begin, In end, Uint32& output, Uint32 replacement) +{ + // Some useful precomputed data + static const int trailing[256] = + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5 + }; + static const Uint32 offsets[6] = + { + 0x00000000, 0x00003080, 0x000E2080, 0x03C82080, 0xFA082080, 0x82082080 + }; + + // decode the character + int trailingBytes = trailing[static_cast(*begin)]; + if (begin + trailingBytes < end) + { + output = 0; + switch (trailingBytes) + { + case 5 : output += static_cast(*begin++); output <<= 6; + case 4 : output += static_cast(*begin++); output <<= 6; + case 3 : output += static_cast(*begin++); output <<= 6; + case 2 : output += static_cast(*begin++); output <<= 6; + case 1 : output += static_cast(*begin++); output <<= 6; + case 0 : output += static_cast(*begin++); + } + output -= offsets[trailingBytes]; + } + else + { + // Incomplete character + begin = end; + output = replacement; + } + + return begin; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::encode(Uint32 input, Out output, Uint8 replacement) +{ + // Some useful precomputed data + static const Uint8 firstBytes[7] = + { + 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC + }; + + // encode the character + if ((input > 0x0010FFFF) || ((input >= 0xD800) && (input <= 0xDBFF))) + { + // Invalid character + if (replacement) + *output++ = replacement; + } + else + { + // Valid character + + // Get the number of bytes to write + std::size_t bytestoWrite = 1; + if (input < 0x80) bytestoWrite = 1; + else if (input < 0x800) bytestoWrite = 2; + else if (input < 0x10000) bytestoWrite = 3; + else if (input <= 0x0010FFFF) bytestoWrite = 4; + + // Extract the bytes to write + Uint8 bytes[4]; + switch (bytestoWrite) + { + case 4 : bytes[3] = static_cast((input | 0x80) & 0xBF); input >>= 6; + case 3 : bytes[2] = static_cast((input | 0x80) & 0xBF); input >>= 6; + case 2 : bytes[1] = static_cast((input | 0x80) & 0xBF); input >>= 6; + case 1 : bytes[0] = static_cast (input | firstBytes[bytestoWrite]); + } + + // Add them to the output + output = std::copy(bytes, bytes + bytestoWrite, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<8>::next(In begin, In end) +{ + Uint32 codepoint; + return decode(begin, end, codepoint); +} + + +//////////////////////////////////////////////////////////// +template +std::size_t Utf<8>::count(In begin, In end) +{ + std::size_t length = 0; + while (begin < end) + { + begin = next(begin, end); + ++length; + } + + return length; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::fromAnsi(In begin, In end, Out output, const std::locale& locale) +{ + while (begin < end) + { + Uint32 codepoint = Utf<32>::decodeAnsi(*begin++, locale); + output = encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::fromWide(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint = Utf<32>::decodeWide(*begin++); + output = encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::fromLatin1(In begin, In end, Out output) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + output = encode(*begin++, output); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<32>::encodeAnsi(codepoint, output, replacement, locale); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toWide(In begin, In end, Out output, wchar_t replacement) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<32>::encodeWide(codepoint, output, replacement); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toLatin1(In begin, In end, Out output, char replacement) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + *output++ = codepoint < 256 ? static_cast(codepoint) : replacement; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toUtf8(In begin, In end, Out output) +{ + return std::copy(begin, end, output); +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toUtf16(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<16>::encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toUtf32(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + *output++ = codepoint; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<16>::decode(In begin, In end, Uint32& output, Uint32 replacement) +{ + Uint16 first = *begin++; + + // If it's a surrogate pair, first convert to a single UTF-32 character + if ((first >= 0xD800) && (first <= 0xDBFF)) + { + if (begin < end) + { + Uint32 second = *begin++; + if ((second >= 0xDC00) && (second <= 0xDFFF)) + { + // The second element is valid: convert the two elements to a UTF-32 character + output = static_cast(((first - 0xD800) << 10) + (second - 0xDC00) + 0x0010000); + } + else + { + // Invalid character + output = replacement; + } + } + else + { + // Invalid character + begin = end; + output = replacement; + } + } + else + { + // We can make a direct copy + output = first; + } + + return begin; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::encode(Uint32 input, Out output, Uint16 replacement) +{ + if (input < 0xFFFF) + { + // The character can be copied directly, we just need to check if it's in the valid range + if ((input >= 0xD800) && (input <= 0xDFFF)) + { + // Invalid character (this range is reserved) + if (replacement) + *output++ = replacement; + } + else + { + // Valid character directly convertible to a single UTF-16 character + *output++ = static_cast(input); + } + } + else if (input > 0x0010FFFF) + { + // Invalid character (greater than the maximum unicode value) + if (replacement) + *output++ = replacement; + } + else + { + // The input character will be converted to two UTF-16 elements + input -= 0x0010000; + *output++ = static_cast((input >> 10) + 0xD800); + *output++ = static_cast((input & 0x3FFUL) + 0xDC00); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<16>::next(In begin, In end) +{ + Uint32 codepoint; + return decode(begin, end, codepoint); +} + + +//////////////////////////////////////////////////////////// +template +std::size_t Utf<16>::count(In begin, In end) +{ + std::size_t length = 0; + while (begin < end) + { + begin = next(begin, end); + ++length; + } + + return length; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::fromAnsi(In begin, In end, Out output, const std::locale& locale) +{ + while (begin < end) + { + Uint32 codepoint = Utf<32>::decodeAnsi(*begin++, locale); + output = encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::fromWide(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint = Utf<32>::decodeWide(*begin++); + output = encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::fromLatin1(In begin, In end, Out output) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + return std::copy(begin, end, output); +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<32>::encodeAnsi(codepoint, output, replacement, locale); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toWide(In begin, In end, Out output, wchar_t replacement) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<32>::encodeWide(codepoint, output, replacement); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toLatin1(In begin, In end, Out output, char replacement) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + { + *output++ = *begin < 256 ? static_cast(*begin) : replacement; + begin++; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toUtf8(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<8>::encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toUtf16(In begin, In end, Out output) +{ + return std::copy(begin, end, output); +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toUtf32(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + *output++ = codepoint; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<32>::decode(In begin, In /*end*/, Uint32& output, Uint32 /*replacement*/) +{ + output = *begin++; + return begin; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::encode(Uint32 input, Out output, Uint32 /*replacement*/) +{ + *output++ = input; + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<32>::next(In begin, In /*end*/) +{ + return ++begin; +} + + +//////////////////////////////////////////////////////////// +template +std::size_t Utf<32>::count(In begin, In end) +{ + return begin - end; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::fromAnsi(In begin, In end, Out output, const std::locale& locale) +{ + while (begin < end) + *output++ = decodeAnsi(*begin++, locale); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::fromWide(In begin, In end, Out output) +{ + while (begin < end) + *output++ = decodeWide(*begin++); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::fromLatin1(In begin, In end, Out output) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + return std::copy(begin, end, output); +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale) +{ + while (begin < end) + output = encodeAnsi(*begin++, output, replacement, locale); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toWide(In begin, In end, Out output, wchar_t replacement) +{ + while (begin < end) + output = encodeWide(*begin++, output, replacement); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toLatin1(In begin, In end, Out output, char replacement) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + { + *output++ = *begin < 256 ? static_cast(*begin) : replacement; + begin++; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toUtf8(In begin, In end, Out output) +{ + while (begin < end) + output = Utf<8>::encode(*begin++, output); + + return output; +} + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toUtf16(In begin, In end, Out output) +{ + while (begin < end) + output = Utf<16>::encode(*begin++, output); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toUtf32(In begin, In end, Out output) +{ + return std::copy(begin, end, output); +} + + +//////////////////////////////////////////////////////////// +template +Uint32 Utf<32>::decodeAnsi(In input, const std::locale& locale) +{ + // On Windows, gcc's standard library (glibc++) has almost + // no support for Unicode stuff. As a consequence, in this + // context we can only use the default locale and ignore + // the one passed as parameter. + + #if defined(SFML_SYSTEM_WINDOWS) && /* if Windows ... */ \ + (defined(__GLIBCPP__) || defined (__GLIBCXX__)) && /* ... and standard library is glibc++ ... */ \ + !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) /* ... and STLPort is not used on top of it */ + + (void)locale; // to avoid warnings + + wchar_t character = 0; + mbtowc(&character, &input, 1); + return static_cast(character); + + #else + + // Get the facet of the locale which deals with character conversion + const std::ctype& facet = std::use_facet< std::ctype >(locale); + + // Use the facet to convert each character of the input string + return static_cast(facet.widen(input)); + + #endif +} + + +//////////////////////////////////////////////////////////// +template +Uint32 Utf<32>::decodeWide(In input) +{ + // The encoding of wide characters is not well defined and is left to the system; + // however we can safely assume that it is UCS-2 on Windows and + // UCS-4 on Unix systems. + // In both cases, a simple copy is enough (UCS-2 is a subset of UCS-4, + // and UCS-4 *is* UTF-32). + + return input; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::encodeAnsi(Uint32 codepoint, Out output, char replacement, const std::locale& locale) +{ + // On Windows, gcc's standard library (glibc++) has almost + // no support for Unicode stuff. As a consequence, in this + // context we can only use the default locale and ignore + // the one passed as parameter. + + #if defined(SFML_SYSTEM_WINDOWS) && /* if Windows ... */ \ + (defined(__GLIBCPP__) || defined (__GLIBCXX__)) && /* ... and standard library is glibc++ ... */ \ + !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) /* ... and STLPort is not used on top of it */ + + (void)locale; // to avoid warnings + + char character = 0; + if (wctomb(&character, static_cast(codepoint)) >= 0) + *output++ = character; + else if (replacement) + *output++ = replacement; + + return output; + + #else + + // Get the facet of the locale which deals with character conversion + const std::ctype& facet = std::use_facet< std::ctype >(locale); + + // Use the facet to convert each character of the input string + *output++ = facet.narrow(static_cast(codepoint), replacement); + + return output; + + #endif +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::encodeWide(Uint32 codepoint, Out output, wchar_t replacement) +{ + // The encoding of wide characters is not well defined and is left to the system; + // however we can safely assume that it is UCS-2 on Windows and + // UCS-4 on Unix systems. + // For UCS-2 we need to check if the source characters fits in (UCS-2 is a subset of UCS-4). + // For UCS-4 we can do a direct copy (UCS-4 *is* UTF-32). + + switch (sizeof(wchar_t)) + { + case 4: + { + *output++ = static_cast(codepoint); + break; + } + + default: + { + if ((codepoint <= 0xFFFF) && ((codepoint < 0xD800) || (codepoint > 0xDFFF))) + { + *output++ = static_cast(codepoint); + } + else if (replacement) + { + *output++ = replacement; + } + break; + } + } + + return output; +} diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector2.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector2.hpp new file mode 100644 index 0000000..5c3bb64 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector2.hpp @@ -0,0 +1,301 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VECTOR2_HPP +#define SFML_VECTOR2_HPP + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility template class for manipulating +/// 2-dimensional vectors +/// +//////////////////////////////////////////////////////////// +template +class Vector2 +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates a Vector2(0, 0). + /// + //////////////////////////////////////////////////////////// + Vector2(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vector from its coordinates + /// + /// \param X X coordinate + /// \param Y Y coordinate + /// + //////////////////////////////////////////////////////////// + Vector2(T X, T Y); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vector from another type of vector + /// + /// This constructor doesn't replace the copy constructor, + /// it's called only when U != T. + /// A call to this constructor will fail to compile if U + /// is not convertible to T. + /// + /// \param vector Vector to convert + /// + //////////////////////////////////////////////////////////// + template + explicit Vector2(const Vector2& vector); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + T x; ///< X coordinate of the vector + T y; ///< Y coordinate of the vector +}; + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of unary operator - +/// +/// \param right Vector to negate +/// +/// \return Memberwise opposite of the vector +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator -(const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator += +/// +/// This operator performs a memberwise addition of both vectors, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2& operator +=(Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator -= +/// +/// This operator performs a memberwise subtraction of both vectors, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2& operator -=(Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator + +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Memberwise addition of both vectors +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator +(const Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator - +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Memberwise subtraction of both vectors +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator -(const Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator * +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Memberwise multiplication by \a right +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator *(const Vector2& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator * +/// +/// \param left Left operand (a scalar value) +/// \param right Right operand (a vector) +/// +/// \return Memberwise multiplication by \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator *(T left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator *= +/// +/// This operator performs a memberwise multiplication by \a right, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2& operator *=(Vector2& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator / +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Memberwise division by \a right +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator /(const Vector2& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator /= +/// +/// This operator performs a memberwise division by \a right, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2& operator /=(Vector2& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator == +/// +/// This operator compares strict equality between two vectors. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return True if \a left is equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator ==(const Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator != +/// +/// This operator compares strict difference between two vectors. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return True if \a left is not equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator !=(const Vector2& left, const Vector2& right); + +#include + +// Define the most common types +typedef Vector2 Vector2i; +typedef Vector2 Vector2u; +typedef Vector2 Vector2f; + +} // namespace sf + + +#endif // SFML_VECTOR2_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Vector2 +/// \ingroup system +/// +/// sf::Vector2 is a simple class that defines a mathematical +/// vector with two coordinates (x and y). It can be used to +/// represent anything that has two dimensions: a size, a point, +/// a velocity, etc. +/// +/// The template parameter T is the type of the coordinates. It +/// can be any type that supports arithmetic operations (+, -, /, *) +/// and comparisons (==, !=), for example int or float. +/// +/// You generally don't have to care about the templated form (sf::Vector2), +/// the most common specializations have special typedefs: +/// \li sf::Vector2 is sf::Vector2f +/// \li sf::Vector2 is sf::Vector2i +/// \li sf::Vector2 is sf::Vector2u +/// +/// The sf::Vector2 class has a small and simple interface, its x and y members +/// can be accessed directly (there's no accessor like setX(), getX()) and it +/// contains no mathematical function like dot product, cross product, length, etc. +/// +/// Usage example: +/// \code +/// sf::Vector2f v1(16.5f, 24.f); +/// v1.x = 18.2f; +/// float y = v1.y; +/// +/// sf::Vector2f v2 = v1 * 5.f; +/// sf::Vector2f v3; +/// v3 = v1 + v2; +/// +/// bool different = (v2 != v3); +/// \endcode +/// +/// Note: for 3-dimensional vectors, see sf::Vector3. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector2.inl b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector2.inl new file mode 100644 index 0000000..e1a87ae --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector2.inl @@ -0,0 +1,161 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +template +inline Vector2::Vector2() : +x(0), +y(0) +{ + +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2::Vector2(T X, T Y) : +x(X), +y(Y) +{ + +} + + +//////////////////////////////////////////////////////////// +template +template +inline Vector2::Vector2(const Vector2& vector) : +x(static_cast(vector.x)), +y(static_cast(vector.y)) +{ +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator -(const Vector2& right) +{ + return Vector2(-right.x, -right.y); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2& operator +=(Vector2& left, const Vector2& right) +{ + left.x += right.x; + left.y += right.y; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2& operator -=(Vector2& left, const Vector2& right) +{ + left.x -= right.x; + left.y -= right.y; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator +(const Vector2& left, const Vector2& right) +{ + return Vector2(left.x + right.x, left.y + right.y); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator -(const Vector2& left, const Vector2& right) +{ + return Vector2(left.x - right.x, left.y - right.y); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator *(const Vector2& left, T right) +{ + return Vector2(left.x * right, left.y * right); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator *(T left, const Vector2& right) +{ + return Vector2(right.x * left, right.y * left); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2& operator *=(Vector2& left, T right) +{ + left.x *= right; + left.y *= right; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator /(const Vector2& left, T right) +{ + return Vector2(left.x / right, left.y / right); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2& operator /=(Vector2& left, T right) +{ + left.x /= right; + left.y /= right; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator ==(const Vector2& left, const Vector2& right) +{ + return (left.x == right.x) && (left.y == right.y); +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator !=(const Vector2& left, const Vector2& right) +{ + return (left.x != right.x) || (left.y != right.y); +} diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector3.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector3.hpp new file mode 100644 index 0000000..76a26cb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector3.hpp @@ -0,0 +1,302 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VECTOR3_HPP +#define SFML_VECTOR3_HPP + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility template class for manipulating +/// 3-dimensional vectors +/// +//////////////////////////////////////////////////////////// +template +class Vector3 +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates a Vector3(0, 0, 0). + /// + //////////////////////////////////////////////////////////// + Vector3(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vector from its coordinates + /// + /// \param X X coordinate + /// \param Y Y coordinate + /// \param Z Z coordinate + /// + //////////////////////////////////////////////////////////// + Vector3(T X, T Y, T Z); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vector from another type of vector + /// + /// This constructor doesn't replace the copy constructor, + /// it's called only when U != T. + /// A call to this constructor will fail to compile if U + /// is not convertible to T. + /// + /// \param vector Vector to convert + /// + //////////////////////////////////////////////////////////// + template + explicit Vector3(const Vector3& vector); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + T x; ///< X coordinate of the vector + T y; ///< Y coordinate of the vector + T z; ///< Z coordinate of the vector +}; + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of unary operator - +/// +/// \param left Vector to negate +/// +/// \return Memberwise opposite of the vector +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator -(const Vector3& left); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator += +/// +/// This operator performs a memberwise addition of both vectors, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3& operator +=(Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator -= +/// +/// This operator performs a memberwise subtraction of both vectors, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3& operator -=(Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator + +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Memberwise addition of both vectors +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator +(const Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator - +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Memberwise subtraction of both vectors +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator -(const Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator * +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Memberwise multiplication by \a right +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator *(const Vector3& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator * +/// +/// \param left Left operand (a scalar value) +/// \param right Right operand (a vector) +/// +/// \return Memberwise multiplication by \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator *(T left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator *= +/// +/// This operator performs a memberwise multiplication by \a right, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3& operator *=(Vector3& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator / +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Memberwise division by \a right +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator /(const Vector3& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator /= +/// +/// This operator performs a memberwise division by \a right, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3& operator /=(Vector3& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator == +/// +/// This operator compares strict equality between two vectors. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return True if \a left is equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator ==(const Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator != +/// +/// This operator compares strict difference between two vectors. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return True if \a left is not equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator !=(const Vector3& left, const Vector3& right); + +#include + +// Define the most common types +typedef Vector3 Vector3i; +typedef Vector3 Vector3f; + +} // namespace sf + + +#endif // SFML_VECTOR3_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Vector3 +/// \ingroup system +/// +/// sf::Vector3 is a simple class that defines a mathematical +/// vector with three coordinates (x, y and z). It can be used to +/// represent anything that has three dimensions: a size, a point, +/// a velocity, etc. +/// +/// The template parameter T is the type of the coordinates. It +/// can be any type that supports arithmetic operations (+, -, /, *) +/// and comparisons (==, !=), for example int or float. +/// +/// You generally don't have to care about the templated form (sf::Vector3), +/// the most common specializations have special typedefs: +/// \li sf::Vector3 is sf::Vector3f +/// \li sf::Vector3 is sf::Vector3i +/// +/// The sf::Vector3 class has a small and simple interface, its x and y members +/// can be accessed directly (there's no accessor like setX(), getX()) and it +/// contains no mathematical function like dot product, cross product, length, etc. +/// +/// Usage example: +/// \code +/// sf::Vector3f v1(16.5f, 24.f, -8.2f); +/// v1.x = 18.2f; +/// float y = v1.y; +/// float z = v1.z; +/// +/// sf::Vector3f v2 = v1 * 5.f; +/// sf::Vector3f v3; +/// v3 = v1 + v2; +/// +/// bool different = (v2 != v3); +/// \endcode +/// +/// Note: for 2-dimensional vectors, see sf::Vector2. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector3.inl b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector3.inl new file mode 100644 index 0000000..cff1a30 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/System/Vector3.inl @@ -0,0 +1,168 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +template +inline Vector3::Vector3() : +x(0), +y(0), +z(0) +{ + +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3::Vector3(T X, T Y, T Z) : +x(X), +y(Y), +z(Z) +{ + +} + + +//////////////////////////////////////////////////////////// +template +template +inline Vector3::Vector3(const Vector3& vector) : +x(static_cast(vector.x)), +y(static_cast(vector.y)), +z(static_cast(vector.z)) +{ +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator -(const Vector3& left) +{ + return Vector3(-left.x, -left.y, -left.z); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3& operator +=(Vector3& left, const Vector3& right) +{ + left.x += right.x; + left.y += right.y; + left.z += right.z; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3& operator -=(Vector3& left, const Vector3& right) +{ + left.x -= right.x; + left.y -= right.y; + left.z -= right.z; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator +(const Vector3& left, const Vector3& right) +{ + return Vector3(left.x + right.x, left.y + right.y, left.z + right.z); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator -(const Vector3& left, const Vector3& right) +{ + return Vector3(left.x - right.x, left.y - right.y, left.z - right.z); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator *(const Vector3& left, T right) +{ + return Vector3(left.x * right, left.y * right, left.z * right); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator *(T left, const Vector3& right) +{ + return Vector3(right.x * left, right.y * left, right.z * left); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3& operator *=(Vector3& left, T right) +{ + left.x *= right; + left.y *= right; + left.z *= right; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator /(const Vector3& left, T right) +{ + return Vector3(left.x / right, left.y / right, left.z / right); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3& operator /=(Vector3& left, T right) +{ + left.x /= right; + left.y /= right; + left.z /= right; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator ==(const Vector3& left, const Vector3& right) +{ + return (left.x == right.x) && (left.y == right.y) && (left.z == right.z); +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator !=(const Vector3& left, const Vector3& right) +{ + return (left.x != right.x) || (left.y != right.y) || (left.z != right.z); +} diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window.hpp new file mode 100644 index 0000000..5d51134 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window.hpp @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SFML_WINDOW_HPP +#define SFML_SFML_WINDOW_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // SFML_SFML_WINDOW_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup window Window module +/// +/// Provides OpenGL-based windows, and abstractions for +/// events and input handling. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Context.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Context.hpp new file mode 100644 index 0000000..5f67164 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Context.hpp @@ -0,0 +1,140 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CONTEXT_HPP +#define SFML_CONTEXT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class GlContext; +} + +//////////////////////////////////////////////////////////// +/// \brief Class holding a valid drawing context +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Context : GlResource, NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// The constructor creates and activates the context + /// + //////////////////////////////////////////////////////////// + Context(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// The desctructor deactivates and destroys the context + /// + //////////////////////////////////////////////////////////// + ~Context(); + + //////////////////////////////////////////////////////////// + /// \brief Activate or deactivate explicitely the context + /// + /// \param active True to activate, false to deactivate + /// + /// \return True on success, false on failure + /// + //////////////////////////////////////////////////////////// + bool setActive(bool active); + +public : + + //////////////////////////////////////////////////////////// + /// \brief Construct a in-memory context + /// + /// This constructor is for internal use, you don't need + /// to bother with it. + /// + /// \param settings Creation parameters + /// \param width Back buffer width + /// \param height Back buffer height + /// + //////////////////////////////////////////////////////////// + Context(const ContextSettings& settings, unsigned int width, unsigned int height); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::GlContext* m_context; ///< Internal OpenGL context +}; + +} // namespace sf + + +#endif // SFML_CONTEXT_HPP + +//////////////////////////////////////////////////////////// +/// \class sf::Context +/// \ingroup window +/// +/// If you need to make OpenGL calls without having an +/// active window (like in a thread), you can use an +/// instance of this class to get a valid context. +/// +/// Having a valid context is necessary for *every* OpenGL call. +/// +/// Note that a context is only active in its current thread, +/// if you create a new thread it will have no valid context +/// by default. +/// +/// To use a sf::Context instance, just construct it and let it +/// live as long as you need a valid context. No explicit activation +/// is needed, all it has to do is to exist. Its destructor +/// will take care of deactivating and freeing all the attached +/// resources. +/// +/// Usage example: +/// \code +/// void threadFunction(void*) +/// { +/// sf::Context context; +/// // from now on, you have a valid context +/// +/// // you can make OpenGL calls +/// glClear(GL_DEPTH_BUFFER_BIT); +/// } +/// // the context is automatically deactivated and destroyed +/// // by the sf::Context destructor +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/ContextSettings.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/ContextSettings.hpp new file mode 100644 index 0000000..1bd2b3e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/ContextSettings.hpp @@ -0,0 +1,104 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CONTEXTSETTINGS_HPP +#define SFML_CONTEXTSETTINGS_HPP + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Structure defining the settings of the OpenGL +/// context attached to a window +/// +//////////////////////////////////////////////////////////// +struct ContextSettings +{ + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param depth Depth buffer bits + /// \param stencil Stencil buffer bits + /// \param antialiasing Antialiasing level + /// \param major Major number of the context version + /// \param minor Minor number of the context version + /// + //////////////////////////////////////////////////////////// + explicit ContextSettings(unsigned int depth = 0, unsigned int stencil = 0, unsigned int antialiasing = 0, unsigned int major = 2, unsigned int minor = 0) : + depthBits (depth), + stencilBits (stencil), + antialiasingLevel(antialiasing), + majorVersion (major), + minorVersion (minor) + { + } + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int depthBits; ///< Bits of the depth buffer + unsigned int stencilBits; ///< Bits of the stencil buffer + unsigned int antialiasingLevel; ///< Level of antialiasing + unsigned int majorVersion; ///< Major number of the context version to create + unsigned int minorVersion; ///< Minor number of the context version to create +}; + +} // namespace sf + + +#endif // SFML_CONTEXTSETTINGS_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::ContextSettings +/// \ingroup window +/// +/// ContextSettings allows to define several advanced settings +/// of the OpenGL context attached to a window. All these +/// settings have no impact on the regular SFML rendering +/// (graphics module) -- except the anti-aliasing level, so +/// you may need to use this structure only if you're using +/// SFML as a windowing system for custom OpenGL rendering. +/// +/// The depthBits and stencilBits members define the number +/// of bits per pixel requested for the (respectively) depth +/// and stencil buffers. +/// +/// antialiasingLevel represents the requested number of +/// multisampling levels for anti-aliasing. +/// +/// majorVersion and minorVersion define the version of the +/// OpenGL context that you want. Only versions greater or +/// equal to 3.0 are relevant; versions lesser than 3.0 are +/// all handled the same way (i.e. you can use any version +/// < 3.0 if you don't want an OpenGL 3 context). +/// +/// Please note that these values are only a hint. +/// No failure will be reported if one or more of these values +/// are not supported by the system; instead, SFML will try to +/// find the closest valid match. You can then retrieve the +/// settings that the window actually used to create its context, +/// with Window::getSettings(). +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Event.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Event.hpp new file mode 100644 index 0000000..e86c2bf --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Event.hpp @@ -0,0 +1,237 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_EVENT_HPP +#define SFML_EVENT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Defines a system event and its parameters +/// +//////////////////////////////////////////////////////////// +class Event +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Size events parameters (Resized) + /// + //////////////////////////////////////////////////////////// + struct SizeEvent + { + unsigned int width; ///< New width, in pixels + unsigned int height; ///< New height, in pixels + }; + + //////////////////////////////////////////////////////////// + /// \brief Keyboard event parameters (KeyPressed, KeyReleased) + /// + //////////////////////////////////////////////////////////// + struct KeyEvent + { + Keyboard::Key code; ///< Code of the key that has been pressed + bool alt; ///< Is the Alt key pressed? + bool control; ///< Is the Control key pressed? + bool shift; ///< Is the Shift key pressed? + bool system; ///< Is the System key pressed? + }; + + //////////////////////////////////////////////////////////// + /// \brief Text event parameters (TextEntered) + /// + //////////////////////////////////////////////////////////// + struct TextEvent + { + Uint32 unicode; ///< UTF-32 unicode value of the character + }; + + //////////////////////////////////////////////////////////// + /// \brief Mouse move event parameters (MouseMoved) + /// + //////////////////////////////////////////////////////////// + struct MouseMoveEvent + { + int x; ///< X position of the mouse pointer, relative to the left of the owner window + int y; ///< Y position of the mouse pointer, relative to the top of the owner window + }; + + //////////////////////////////////////////////////////////// + /// \brief Mouse buttons events parameters + /// (MouseButtonPressed, MouseButtonReleased) + /// + //////////////////////////////////////////////////////////// + struct MouseButtonEvent + { + Mouse::Button button; ///< Code of the button that has been pressed + int x; ///< X position of the mouse pointer, relative to the left of the owner window + int y; ///< Y position of the mouse pointer, relative to the top of the owner window + }; + + //////////////////////////////////////////////////////////// + /// \brief Mouse wheel events parameters (MouseWheelMoved) + /// + //////////////////////////////////////////////////////////// + struct MouseWheelEvent + { + int delta; ///< Number of ticks the wheel has moved (positive is up, negative is down) + int x; ///< X position of the mouse pointer, relative to the left of the owner window + int y; ///< Y position of the mouse pointer, relative to the top of the owner window + }; + + //////////////////////////////////////////////////////////// + /// \brief Joystick connection events parameters + /// (JoystickConnected, JoystickDisconnected) + /// + //////////////////////////////////////////////////////////// + struct JoystickConnectEvent + { + unsigned int joystickId; ///< Index of the joystick (in range [0 .. Joystick::Count - 1]) + }; + + //////////////////////////////////////////////////////////// + /// \brief Joystick axis move event parameters (JoystickMoved) + /// + //////////////////////////////////////////////////////////// + struct JoystickMoveEvent + { + unsigned int joystickId; ///< Index of the joystick (in range [0 .. Joystick::Count - 1]) + Joystick::Axis axis; ///< Axis on which the joystick moved + float position; ///< New position on the axis (in range [-100 .. 100]) + }; + + //////////////////////////////////////////////////////////// + /// \brief Joystick buttons events parameters + /// (JoystickButtonPressed, JoystickButtonReleased) + /// + //////////////////////////////////////////////////////////// + struct JoystickButtonEvent + { + unsigned int joystickId; ///< Index of the joystick (in range [0 .. Joystick::Count - 1]) + unsigned int button; ///< Index of the button that has been pressed (in range [0 .. Joystick::ButtonCount - 1]) + }; + + //////////////////////////////////////////////////////////// + /// \brief Enumeration of the different types of events + /// + //////////////////////////////////////////////////////////// + enum EventType + { + Closed, ///< The window requested to be closed (no data) + Resized, ///< The window was resized (data in event.size) + LostFocus, ///< The window lost the focus (no data) + GainedFocus, ///< The window gained the focus (no data) + TextEntered, ///< A character was entered (data in event.text) + KeyPressed, ///< A key was pressed (data in event.key) + KeyReleased, ///< A key was released (data in event.key) + MouseWheelMoved, ///< The mouse wheel was scrolled (data in event.mouseWheel) + MouseButtonPressed, ///< A mouse button was pressed (data in event.mouseButton) + MouseButtonReleased, ///< A mouse button was released (data in event.mouseButton) + MouseMoved, ///< The mouse cursor moved (data in event.mouseMove) + MouseEntered, ///< The mouse cursor entered the area of the window (no data) + MouseLeft, ///< The mouse cursor left the area of the window (no data) + JoystickButtonPressed, ///< A joystick button was pressed (data in event.joystickButton) + JoystickButtonReleased, ///< A joystick button was released (data in event.joystickButton) + JoystickMoved, ///< The joystick moved along an axis (data in event.joystickMove) + JoystickConnected, ///< A joystick was connected (data in event.joystickConnect) + JoystickDisconnected, ///< A joystick was disconnected (data in event.joystickConnect) + + Count ///< Keep last -- the total number of event types + }; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + EventType type; ///< Type of the event + + union + { + SizeEvent size; ///< Size event parameters (Event::Resized) + KeyEvent key; ///< Key event parameters (Event::KeyPressed, Event::KeyReleased) + TextEvent text; ///< Text event parameters (Event::TextEntered) + MouseMoveEvent mouseMove; ///< Mouse move event parameters (Event::MouseMoved) + MouseButtonEvent mouseButton; ///< Mouse button event parameters (Event::MouseButtonPressed, Event::MouseButtonReleased) + MouseWheelEvent mouseWheel; ///< Mouse wheel event parameters (Event::MouseWheelMoved) + JoystickMoveEvent joystickMove; ///< Joystick move event parameters (Event::JoystickMoved) + JoystickButtonEvent joystickButton; ///< Joystick button event parameters (Event::JoystickButtonPressed, Event::JoystickButtonReleased) + JoystickConnectEvent joystickConnect; ///< Joystick (dis)connect event parameters (Event::JoystickConnected, Event::JoystickDisconnected) + }; +}; + +} // namespace sf + + +#endif // SFML_EVENT_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Event +/// \ingroup window +/// +/// sf::Event holds all the informations about a system event +/// that just happened. Events are retrieved using the +/// sf::Window::pollEvent and sf::Window::waitEvent functions. +/// +/// A sf::Event instance contains the type of the event +/// (mouse moved, key pressed, window closed, ...) as well +/// as the details about this particular event. Please note that +/// the event parameters are defined in a union, which means that +/// only the member matching the type of the event will be properly +/// filled; all other members will have undefined values and must not +/// be read if the type of the event doesn't match. For example, +/// if you received a KeyPressed event, then you must read the +/// event.key member, all other members such as event.MouseMove +/// or event.text will have undefined values. +/// +/// Usage example: +/// \code +/// sf::Event event; +/// while (window.pollEvent(event)) +/// { +/// // Request for closing the window +/// if (event.type == sf::Event::Closed) +/// window.close(); +/// +/// // The escape key was pressed +/// if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)) +/// window.close(); +/// +/// // The window was resized +/// if (event.type == sf::Event::Resized) +/// doSomethingWithTheNewSize(event.size.width, event.size.height); +/// +/// // etc ... +/// } +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Export.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Export.hpp new file mode 100644 index 0000000..ff06576 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_WINDOW_EXPORT_HPP +#define SFML_WINDOW_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_WINDOW_EXPORTS) + + #define SFML_WINDOW_API SFML_API_EXPORT + +#else + + #define SFML_WINDOW_API SFML_API_IMPORT + +#endif + + +#endif // SFML_WINDOW_EXPORT_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/GlResource.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/GlResource.hpp new file mode 100644 index 0000000..560a637 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/GlResource.hpp @@ -0,0 +1,76 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_GLRESOURCE_HPP +#define SFML_GLRESOURCE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Base class for classes that require an OpenGL context +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API GlResource +{ +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + GlResource(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~GlResource(); + + //////////////////////////////////////////////////////////// + /// \brief Make sure that a valid OpenGL context exists in the current thread + /// + //////////////////////////////////////////////////////////// + static void ensureGlContext(); +}; + +} // namespace sf + + +#endif // SFML_GLRESOURCE_HPP + +//////////////////////////////////////////////////////////// +/// \class sf::GlResource +/// \ingroup window +/// +/// This class is for internal use only, it must be the base +/// of every class that requires a valid OpenGL context in +/// order to work. +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Joystick.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Joystick.hpp new file mode 100644 index 0000000..8e65309 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Joystick.hpp @@ -0,0 +1,203 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_JOYSTICK_HPP +#define SFML_JOYSTICK_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Give access to the real-time state of the joysticks +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Joystick +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Constants related to joysticks capabilities + /// + //////////////////////////////////////////////////////////// + enum + { + Count = 8, ///< Maximum number of supported joysticks + ButtonCount = 32, ///< Maximum number of supported buttons + AxisCount = 8 ///< Maximum number of supported axes + }; + + //////////////////////////////////////////////////////////// + /// \brief Axes supported by SFML joysticks + /// + //////////////////////////////////////////////////////////// + enum Axis + { + X, ///< The X axis + Y, ///< The Y axis + Z, ///< The Z axis + R, ///< The R axis + U, ///< The U axis + V, ///< The V axis + PovX, ///< The X axis of the point-of-view hat + PovY ///< The Y axis of the point-of-view hat + }; + + //////////////////////////////////////////////////////////// + /// \brief Check if a joystick is connected + /// + /// \param joystick Index of the joystick to check + /// + /// \return True if the joystick is connected, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isConnected(unsigned int joystick); + + //////////////////////////////////////////////////////////// + /// \brief Return the number of buttons supported by a joystick + /// + /// If the joystick is not connected, this function returns 0. + /// + /// \param joystick Index of the joystick + /// + /// \return Number of buttons supported by the joystick + /// + //////////////////////////////////////////////////////////// + static unsigned int getButtonCount(unsigned int joystick); + + //////////////////////////////////////////////////////////// + /// \brief Check if a joystick supports a given axis + /// + /// If the joystick is not connected, this function returns false. + /// + /// \param joystick Index of the joystick + /// \param axis Axis to check + /// + /// \return True if the joystick supports the axis, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool hasAxis(unsigned int joystick, Axis axis); + + //////////////////////////////////////////////////////////// + /// \brief Check if a joystick button is pressed + /// + /// If the joystick is not connected, this function returns false. + /// + /// \param joystick Index of the joystick + /// \param button Button to check + /// + /// \return True if the button is pressed, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isButtonPressed(unsigned int joystick, unsigned int button); + + //////////////////////////////////////////////////////////// + /// \brief Get the current position of a joystick axis + /// + /// If the joystick is not connected, this function returns 0. + /// + /// \param joystick Index of the joystick + /// \param axis Axis to check + /// + /// \return Current position of the axis, in range [-100 .. 100] + /// + //////////////////////////////////////////////////////////// + static float getAxisPosition(unsigned int joystick, Axis axis); + + //////////////////////////////////////////////////////////// + /// \brief Update the states of all joysticks + /// + /// This function is used internally by SFML, so you normally + /// don't have to call it explicitely. However, you may need to + /// call it if you have no window yet (or no window at all): + /// in this case the joysticks states are not updated automatically. + /// + //////////////////////////////////////////////////////////// + static void update(); +}; + +} // namespace sf + + +#endif // SFML_JOYSTICK_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Joystick +/// \ingroup window +/// +/// sf::Joystick provides an interface to the state of the +/// joysticks. It only contains static functions, so it's not +/// meant to be instanciated. Instead, each joystick is identified +/// by an index that is passed to the functions of this class. +/// +/// This class allows users to query the state of joysticks at any +/// time and directly, without having to deal with a window and +/// its events. Compared to the JoystickMoved, JoystickButtonPressed +/// and JoystickButtonReleased events, sf::Joystick can retrieve the +/// state of axes and buttons of joysticks at any time +/// (you don't need to store and update a boolean on your side +/// in order to know if a button is pressed or released), and you +/// always get the real state of joysticks, even if they are +/// moved, pressed or released when your window is out of focus +/// and no event is triggered. +/// +/// SFML supports: +/// \li 8 joysticks (sf::Joystick::Count) +/// \li 32 buttons per joystick (sf::Joystick::ButtonCount) +/// \li 8 axes per joystick (sf::Joystick::AxisCount) +/// +/// Unlike the keyboard or mouse, the state of joysticks is sometimes +/// not directly available (depending on the OS), therefore an update() +/// function must be called in order to update the current state of +/// joysticks. When you have a window with event handling, this is done +/// automatically, you don't need to call anything. But if you have no +/// window, or if you want to check joysticks state before creating one, +/// you must call sf::Joystick::update explicitely. +/// +/// Usage example: +/// \code +/// // Is joystick #0 connected? +/// bool connected = sf::Joystick::isConnected(0); +/// +/// // How many buttons does joystick #0 support? +/// unsigned int buttons = sf::Joystick::getButtonCount(0); +/// +/// // Does joystick #0 define a X axis? +/// bool hasX = sf::Joystick::hasAxis(0, sf::Joystick::X); +/// +/// // Is button #2 pressed on joystick #0? +/// bool pressed = sf::Joystick::isButtonPressed(0, 2); +/// +/// // What's the current position of the Y axis on joystick #0? +/// float position = sf::Joystick::getAxisPosition(0, sf::Joystick::Y); +/// \endcode +/// +/// \see sf::Keyboard, sf::Mouse +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Keyboard.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Keyboard.hpp new file mode 100644 index 0000000..f10dc7c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Keyboard.hpp @@ -0,0 +1,209 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_KEYBOARD_HPP +#define SFML_KEYBOARD_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Give access to the real-time state of the keyboard +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Keyboard +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Key codes + /// + //////////////////////////////////////////////////////////// + enum Key + { + Unknown = -1, ///< Unhandled key + A = 0, ///< The A key + B, ///< The B key + C, ///< The C key + D, ///< The D key + E, ///< The E key + F, ///< The F key + G, ///< The G key + H, ///< The H key + I, ///< The I key + J, ///< The J key + K, ///< The K key + L, ///< The L key + M, ///< The M key + N, ///< The N key + O, ///< The O key + P, ///< The P key + Q, ///< The Q key + R, ///< The R key + S, ///< The S key + T, ///< The T key + U, ///< The U key + V, ///< The V key + W, ///< The W key + X, ///< The X key + Y, ///< The Y key + Z, ///< The Z key + Num0, ///< The 0 key + Num1, ///< The 1 key + Num2, ///< The 2 key + Num3, ///< The 3 key + Num4, ///< The 4 key + Num5, ///< The 5 key + Num6, ///< The 6 key + Num7, ///< The 7 key + Num8, ///< The 8 key + Num9, ///< The 9 key + Escape, ///< The Escape key + LControl, ///< The left Control key + LShift, ///< The left Shift key + LAlt, ///< The left Alt key + LSystem, ///< The left OS specific key: window (Windows and Linux), apple (MacOS X), ... + RControl, ///< The right Control key + RShift, ///< The right Shift key + RAlt, ///< The right Alt key + RSystem, ///< The right OS specific key: window (Windows and Linux), apple (MacOS X), ... + Menu, ///< The Menu key + LBracket, ///< The [ key + RBracket, ///< The ] key + SemiColon, ///< The ; key + Comma, ///< The , key + Period, ///< The . key + Quote, ///< The ' key + Slash, ///< The / key + BackSlash, ///< The \ key + Tilde, ///< The ~ key + Equal, ///< The = key + Dash, ///< The - key + Space, ///< The Space key + Return, ///< The Return key + BackSpace, ///< The Backspace key + Tab, ///< The Tabulation key + PageUp, ///< The Page up key + PageDown, ///< The Page down key + End, ///< The End key + Home, ///< The Home key + Insert, ///< The Insert key + Delete, ///< The Delete key + Add, ///< The + key + Subtract, ///< The - key + Multiply, ///< The * key + Divide, ///< The / key + Left, ///< Left arrow + Right, ///< Right arrow + Up, ///< Up arrow + Down, ///< Down arrow + Numpad0, ///< The numpad 0 key + Numpad1, ///< The numpad 1 key + Numpad2, ///< The numpad 2 key + Numpad3, ///< The numpad 3 key + Numpad4, ///< The numpad 4 key + Numpad5, ///< The numpad 5 key + Numpad6, ///< The numpad 6 key + Numpad7, ///< The numpad 7 key + Numpad8, ///< The numpad 8 key + Numpad9, ///< The numpad 9 key + F1, ///< The F1 key + F2, ///< The F2 key + F3, ///< The F3 key + F4, ///< The F4 key + F5, ///< The F5 key + F6, ///< The F6 key + F7, ///< The F7 key + F8, ///< The F8 key + F9, ///< The F9 key + F10, ///< The F10 key + F11, ///< The F11 key + F12, ///< The F12 key + F13, ///< The F13 key + F14, ///< The F14 key + F15, ///< The F15 key + Pause, ///< The Pause key + + KeyCount ///< Keep last -- the total number of keyboard keys + }; + + //////////////////////////////////////////////////////////// + /// \brief Check if a key is pressed + /// + /// \param key Key to check + /// + /// \return True if the key is pressed, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isKeyPressed(Key key); +}; + +} // namespace sf + + +#endif // SFML_KEYBOARD_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Keyboard +/// \ingroup window +/// +/// sf::Keyboard provides an interface to the state of the +/// keyboard. It only contains static functions (a single +/// keyboard is assumed), so it's not meant to be instanciated. +/// +/// This class allows users to query the keyboard state at any +/// time and directly, without having to deal with a window and +/// its events. Compared to the KeyPressed and KeyReleased events, +/// sf::Keyboard can retrieve the state of a key at any time +/// (you don't need to store and update a boolean on your side +/// in order to know if a key is pressed or released), and you +/// always get the real state of the keyboard, even if keys are +/// pressed or released when your window is out of focus and no +/// event is triggered. +/// +/// Usage example: +/// \code +/// if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) +/// { +/// // move left... +/// } +/// else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) +/// { +/// // move right... +/// } +/// else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) +/// { +/// // quit... +/// } +/// \endcode +/// +/// \see sf::Joystick, sf::Mouse +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Mouse.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Mouse.hpp new file mode 100644 index 0000000..dd26d1a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Mouse.hpp @@ -0,0 +1,167 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_MOUSE_HPP +#define SFML_MOUSE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class Window; + +//////////////////////////////////////////////////////////// +/// \brief Give access to the real-time state of the mouse +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Mouse +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Mouse buttons + /// + //////////////////////////////////////////////////////////// + enum Button + { + Left, ///< The left mouse button + Right, ///< The right mouse button + Middle, ///< The middle (wheel) mouse button + XButton1, ///< The first extra mouse button + XButton2, ///< The second extra mouse button + + ButtonCount ///< Keep last -- the total number of mouse buttons + }; + + //////////////////////////////////////////////////////////// + /// \brief Check if a mouse button is pressed + /// + /// \param button Button to check + /// + /// \return True if the button is pressed, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isButtonPressed(Button button); + + //////////////////////////////////////////////////////////// + /// \brief Get the current position of the mouse in desktop coordinates + /// + /// This function returns the global position of the mouse + /// cursor on the desktop. + /// + /// \return Current position of the mouse + /// + //////////////////////////////////////////////////////////// + static Vector2i getPosition(); + + //////////////////////////////////////////////////////////// + /// \brief Get the current position of the mouse in window coordinates + /// + /// This function returns the current position of the mouse + /// cursor, relative to the given window. + /// + /// \param relativeTo Reference window + /// + /// \return Current position of the mouse + /// + //////////////////////////////////////////////////////////// + static Vector2i getPosition(const Window& relativeTo); + + //////////////////////////////////////////////////////////// + /// \brief Set the current position of the mouse in desktop coordinates + /// + /// This function sets the global position of the mouse + /// cursor on the desktop. + /// + /// \param position New position of the mouse + /// + //////////////////////////////////////////////////////////// + static void setPosition(const Vector2i& position); + + //////////////////////////////////////////////////////////// + /// \brief Set the current position of the mouse in window coordinates + /// + /// This function sets the current position of the mouse + /// cursor, relative to the given window. + /// + /// \param position New position of the mouse + /// \param relativeTo Reference window + /// + //////////////////////////////////////////////////////////// + static void setPosition(const Vector2i& position, const Window& relativeTo); +}; + +} // namespace sf + + +#endif // SFML_MOUSE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Mouse +/// \ingroup window +/// +/// sf::Mouse provides an interface to the state of the +/// mouse. It only contains static functions (a single +/// mouse is assumed), so it's not meant to be instanciated. +/// +/// This class allows users to query the mouse state at any +/// time and directly, without having to deal with a window and +/// its events. Compared to the MouseMoved, MouseButtonPressed +/// and MouseButtonReleased events, sf::Mouse can retrieve the +/// state of the cursor and the buttons at any time +/// (you don't need to store and update a boolean on your side +/// in order to know if a button is pressed or released), and you +/// always get the real state of the mouse, even if it is +/// moved, pressed or released when your window is out of focus +/// and no event is triggered. +/// +/// The setPosition and getPosition functions can be used to change +/// or retrieve the current position of the mouse pointer. There are +/// two versions: one that operates in global coordinates (relative +/// to the desktop) and one that operates in window coordinates +/// (relative to a specific window). +/// +/// Usage example: +/// \code +/// if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) +/// { +/// // left click... +/// } +/// +/// // get global mouse position +/// sf::Vector2i position = sf::Mouse::getPosition(); +/// +/// // set mouse position relative to a window +/// sf::Mouse::setPosition(sf::Vector2i(100, 200), window); +/// \endcode +/// +/// \see sf::Joystick, sf::Keyboard +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/VideoMode.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/VideoMode.hpp new file mode 100644 index 0000000..beec607 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/VideoMode.hpp @@ -0,0 +1,228 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VIDEOMODE_HPP +#define SFML_VIDEOMODE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief VideoMode defines a video mode (width, height, bpp) +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API VideoMode +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructors initializes all members to 0. + /// + //////////////////////////////////////////////////////////// + VideoMode(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the video mode with its attributes + /// + /// \param modeWidth Width in pixels + /// \param modeHeight Height in pixels + /// \param modeBitsPerPixel Pixel depths in bits per pixel + /// + //////////////////////////////////////////////////////////// + VideoMode(unsigned int modeWidth, unsigned int modeHeight, unsigned int modeBitsPerPixel = 32); + + //////////////////////////////////////////////////////////// + /// \brief Get the current desktop video mode + /// + /// \return Current desktop video mode + /// + //////////////////////////////////////////////////////////// + static VideoMode getDesktopMode(); + + //////////////////////////////////////////////////////////// + /// \brief Retrieve all the video modes supported in fullscreen mode + /// + /// When creating a fullscreen window, the video mode is restricted + /// to be compatible with what the graphics driver and monitor + /// support. This function returns the complete list of all video + /// modes that can be used in fullscreen mode. + /// The returned array is sorted from best to worst, so that + /// the first element will always give the best mode (higher + /// width, height and bits-per-pixel). + /// + /// \return Array containing all the supported fullscreen modes + /// + //////////////////////////////////////////////////////////// + static const std::vector& getFullscreenModes(); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the video mode is valid + /// + /// The validity of video modes is only relevant when using + /// fullscreen windows; otherwise any video mode can be used + /// with no restriction. + /// + /// \return True if the video mode is valid for fullscreen mode + /// + //////////////////////////////////////////////////////////// + bool isValid() const; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int width; ///< Video mode width, in pixels + unsigned int height; ///< Video mode height, in pixels + unsigned int bitsPerPixel; ///< Video mode pixel depth, in bits per pixels +}; + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of == operator to compare two video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if modes are equal +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator ==(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of != operator to compare two video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if modes are different +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator !=(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of < operator to compare video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if \a left is lesser than \a right +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator <(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of > operator to compare video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if \a left is greater than \a right +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator >(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of <= operator to compare video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if \a left is lesser or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator <=(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of >= operator to compare video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if \a left is greater or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator >=(const VideoMode& left, const VideoMode& right); + +} // namespace sf + + +#endif // SFML_VIDEOMODE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::VideoMode +/// \ingroup window +/// +/// A video mode is defined by a width and a height (in pixels) +/// and a depth (in bits per pixel). Video modes are used to +/// setup windows (sf::Window) at creation time. +/// +/// The main usage of video modes is for fullscreen mode: +/// indeed you must use one of the valid video modes +/// allowed by the OS (which are defined by what the monitor +/// and the graphics card support), otherwise your window +/// creation will just fail. +/// +/// sf::VideoMode provides a static function for retrieving +/// the list of all the video modes supported by the system: +/// getFullscreenModes(). +/// +/// A custom video mode can also be checked directly for +/// fullscreen compatibility with its isValid() function. +/// +/// Additionnally, sf::VideoMode provides a static function +/// to get the mode currently used by the desktop: getDesktopMode(). +/// This allows to build windows with the same size or pixel +/// depth as the current resolution. +/// +/// Usage example: +/// \code +/// // Display the list of all the video modes available for fullscreen +/// std::vector modes = sf::VideoMode::getFullscreenModes(); +/// for (std::size_t i = 0; i < modes.size(); ++i) +/// { +/// sf::VideoMode mode = modes[i]; +/// std::cout << "Mode #" << i << ": " +/// << mode.width << "x" << mode.height << " - " +/// << mode.bitsPerPixel << " bpp" << std::endl; +/// } +/// +/// // Create a window with the same pixel depth as the desktop +/// sf::VideoMode desktop = sf::VideoMode::getDesktopMode(); +/// window.create(sf::VideoMode(1024, 768, desktop.bitsPerPixel), "SFML window"); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Window.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Window.hpp new file mode 100644 index 0000000..21bb2c5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/Window.hpp @@ -0,0 +1,541 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_WINDOW_HPP +#define SFML_WINDOW_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class GlContext; + class WindowImpl; +} + +class Event; + +//////////////////////////////////////////////////////////// +/// \brief Window that serves as a target for OpenGL rendering +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Window : GlResource, NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor doesn't actually create the window, + /// use the other constructors or call "create" to do so. + /// + //////////////////////////////////////////////////////////// + Window(); + + //////////////////////////////////////////////////////////// + /// \brief Construct a new window + /// + /// This constructor creates the window with the size and pixel + /// depth defined in \a mode. An optional style can be passed to + /// customize the look and behaviour of the window (borders, + /// title bar, resizable, closable, ...). If \a style contains + /// Style::Fullscreen, then \a mode must be a valid video mode. + /// + /// The fourth parameter is an optional structure specifying + /// advanced OpenGL context settings such as antialiasing, + /// depth-buffer bits, etc. + /// + /// \param mode Video mode to use (defines the width, height and depth of the rendering area of the window) + /// \param title Title of the window + /// \param style Window style + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + Window(VideoMode mode, const String& title, Uint32 style = Style::Default, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Construct the window from an existing control + /// + /// Use this constructor if you want to create an OpenGL + /// rendering area into an already existing control. + /// + /// The second parameter is an optional structure specifying + /// advanced OpenGL context settings such as antialiasing, + /// depth-buffer bits, etc. + /// + /// \param handle Platform-specific handle of the control + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + explicit Window(WindowHandle handle, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// Closes the window and free all the resources attached to it. + /// + //////////////////////////////////////////////////////////// + virtual ~Window(); + + //////////////////////////////////////////////////////////// + /// \brief Create (or recreate) the window + /// + /// If the window was already created, it closes it first. + /// If \a style contains Style::Fullscreen, then \a mode + /// must be a valid video mode. + /// + /// \param mode Video mode to use (defines the width, height and depth of the rendering area of the window) + /// \param title Title of the window + /// \param style Window style + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + void create(VideoMode mode, const String& title, Uint32 style = Style::Default, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Create (or recreate) the window from an existing control + /// + /// Use this function if you want to create an OpenGL + /// rendering area into an already existing control. + /// If the window was already created, it closes it first. + /// + /// \param handle Platform-specific handle of the control + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + void create(WindowHandle handle, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Close the window and destroy all the attached resources + /// + /// After calling this function, the sf::Window instance remains + /// valid and you can call create() to recreate the window. + /// All other functions such as pollEvent() or display() will + /// still work (i.e. you don't have to test isOpen() every time), + /// and will have no effect on closed windows. + /// + //////////////////////////////////////////////////////////// + void close(); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the window is open + /// + /// This function returns whether or not the window exists. + /// Note that a hidden window (setVisible(false)) is open + /// (therefore this function would return true). + /// + /// \return True if the window is open, false if it has been closed + /// + //////////////////////////////////////////////////////////// + bool isOpen() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the settings of the OpenGL context of the window + /// + /// Note that these settings may be different from what was + /// passed to the constructor or the create() function, + /// if one or more settings were not supported. In this case, + /// SFML chose the closest match. + /// + /// \return Structure containing the OpenGL context settings + /// + //////////////////////////////////////////////////////////// + const ContextSettings& getSettings() const; + + //////////////////////////////////////////////////////////// + /// \brief Pop the event on top of the event queue, if any, and return it + /// + /// This function is not blocking: if there's no pending event then + /// it will return false and leave \a event unmodified. + /// Note that more than one event may be present in the event queue, + /// thus you should always call this function in a loop + /// to make sure that you process every pending event. + /// \code + /// sf::Event event; + /// while (window.pollEvent(event)) + /// { + /// // process event... + /// } + /// \endcode + /// + /// \param event Event to be returned + /// + /// \return True if an event was returned, or false if the event queue was empty + /// + /// \see waitEvent + /// + //////////////////////////////////////////////////////////// + bool pollEvent(Event& event); + + //////////////////////////////////////////////////////////// + /// \brief Wait for an event and return it + /// + /// This function is blocking: if there's no pending event then + /// it will wait until an event is received. + /// After this function returns (and no error occured), + /// the \a event object is always valid and filled properly. + /// This function is typically used when you have a thread that + /// is dedicated to events handling: you want to make this thread + /// sleep as long as no new event is received. + /// \code + /// sf::Event event; + /// if (window.waitEvent(event)) + /// { + /// // process event... + /// } + /// \endcode + /// + /// \param event Event to be returned + /// + /// \return False if any error occured + /// + /// \see pollEvent + /// + //////////////////////////////////////////////////////////// + bool waitEvent(Event& event); + + //////////////////////////////////////////////////////////// + /// \brief Get the position of the window + /// + /// \return Position of the window, in pixels + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + Vector2i getPosition() const; + + //////////////////////////////////////////////////////////// + /// \brief Change the position of the window on screen + /// + /// This function only works for top-level windows + /// (i.e. it will be ignored for windows created from + /// the handle of a child window/control). + /// + /// \param position New position, in pixels + /// + /// \see getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(const Vector2i& position); + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the rendering region of the window + /// + /// The size doesn't include the titlebar and borders + /// of the window. + /// + /// \return Size in pixels + /// + /// \see setSize + /// + //////////////////////////////////////////////////////////// + Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Change the size of the rendering region of the window + /// + /// \param size New size, in pixels + /// + /// \see getSize + /// + //////////////////////////////////////////////////////////// + void setSize(const Vector2u size); + + //////////////////////////////////////////////////////////// + /// \brief Change the title of the window + /// + /// \param title New title + /// + /// \see setIcon + /// + //////////////////////////////////////////////////////////// + void setTitle(const String& title); + + //////////////////////////////////////////////////////////// + /// \brief Change the window's icon + /// + /// \a pixels must be an array of \a width x \a height pixels + /// in 32-bits RGBA format. + /// + /// The OS default icon is used by default. + /// + /// \param width Icon's width, in pixels + /// \param height Icon's height, in pixels + /// \param pixels Pointer to the array of pixels in memory + /// + /// \see setTitle + /// + //////////////////////////////////////////////////////////// + void setIcon(unsigned int width, unsigned int height, const Uint8* pixels); + + //////////////////////////////////////////////////////////// + /// \brief Show or hide the window + /// + /// The window is shown by default. + /// + /// \param visible True to show the window, false to hide it + /// + //////////////////////////////////////////////////////////// + void setVisible(bool visible); + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable vertical synchronization + /// + /// Activating vertical synchronization will limit the number + /// of frames displayed to the refresh rate of the monitor. + /// This can avoid some visual artifacts, and limit the framerate + /// to a good value (but not constant across different computers). + /// + /// Vertical synchronization is disabled by default. + /// + /// \param enabled True to enable v-sync, false to deactivate it + /// + //////////////////////////////////////////////////////////// + void setVerticalSyncEnabled(bool enabled); + + //////////////////////////////////////////////////////////// + /// \brief Show or hide the mouse cursor + /// + /// The mouse cursor is visible by default. + /// + /// \param visible True to show the mouse cursor, false to hide it + /// + //////////////////////////////////////////////////////////// + void setMouseCursorVisible(bool visible); + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable automatic key-repeat + /// + /// If key repeat is enabled, you will receive repeated + /// KeyPressed events while keeping a key pressed. If it is disabled, + /// you will only get a single event when the key is pressed. + /// + /// Key repeat is enabled by default. + /// + /// \param enabled True to enable, false to disable + /// + //////////////////////////////////////////////////////////// + void setKeyRepeatEnabled(bool enabled); + + //////////////////////////////////////////////////////////// + /// \brief Limit the framerate to a maximum fixed frequency + /// + /// If a limit is set, the window will use a small delay after + /// each call to display() to ensure that the current frame + /// lasted long enough to match the framerate limit. + /// SFML will try to match the given limit as much as it can, + /// but since it internally uses sf::sleep, whose precision + /// depends on the underlying OS, the results may be a little + /// unprecise as well (for example, you can get 65 FPS when + /// requesting 60). + /// + /// \param limit Framerate limit, in frames per seconds (use 0 to disable limit) + /// + //////////////////////////////////////////////////////////// + void setFramerateLimit(unsigned int limit); + + //////////////////////////////////////////////////////////// + /// \brief Change the joystick threshold + /// + /// The joystick threshold is the value below which + /// no JoystickMoved event will be generated. + /// + /// The threshold value is 0.1 by default. + /// + /// \param threshold New threshold, in the range [0, 100] + /// + //////////////////////////////////////////////////////////// + void setJoystickThreshold(float threshold); + + //////////////////////////////////////////////////////////// + /// \brief Activate or deactivate the window as the current target + /// for OpenGL rendering + /// + /// A window is active only on the current thread, if you want to + /// make it active on another thread you have to deactivate it + /// on the previous thread first if it was active. + /// Only one window can be active on a thread at a time, thus + /// the window previously active (if any) automatically gets deactivated. + /// + /// \param active True to activate, false to deactivate + /// + /// \return True if operation was successful, false otherwise + /// + //////////////////////////////////////////////////////////// + bool setActive(bool active = true) const; + + //////////////////////////////////////////////////////////// + /// \brief Display on screen what has been rendered to the window so far + /// + /// This function is typically called after all OpenGL rendering + /// has been done for the current frame, in order to show + /// it on screen. + /// + //////////////////////////////////////////////////////////// + void display(); + + //////////////////////////////////////////////////////////// + /// \brief Get the OS-specific handle of the window + /// + /// The type of the returned handle is sf::WindowHandle, + /// which is a typedef to the handle type defined by the OS. + /// You shouldn't need to use this function, unless you have + /// very specific stuff to implement that SFML doesn't support, + /// or implement a temporary workaround until a bug is fixed. + /// + /// \return System handle of the window + /// + //////////////////////////////////////////////////////////// + WindowHandle getSystemHandle() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Function called after the window has been created + /// + /// This function is called so that derived classes can + /// perform their own specific initialization as soon as + /// the window is created. + /// + //////////////////////////////////////////////////////////// + virtual void onCreate(); + + //////////////////////////////////////////////////////////// + /// \brief Function called after the window has been resized + /// + /// This function is called so that derived classes can + /// perform custom actions when the size of the window changes. + /// + //////////////////////////////////////////////////////////// + virtual void onResize(); + +private: + + //////////////////////////////////////////////////////////// + /// \brief Processes an event before it is sent to the user + /// + /// This function is called every time an event is received + /// from the internal window (through pollEvent or waitEvent). + /// It filters out unwanted events, and performs whatever internal + /// stuff the window needs before the event is returned to the + /// user. + /// + /// \param event Event to filter + /// + //////////////////////////////////////////////////////////// + bool filterEvent(const Event& event); + + //////////////////////////////////////////////////////////// + /// \brief Perform some common internal initializations + /// + //////////////////////////////////////////////////////////// + void initialize(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::WindowImpl* m_impl; ///< Platform-specific implementation of the window + priv::GlContext* m_context; ///< Platform-specific implementation of the OpenGL context + Clock m_clock; ///< Clock for measuring the elapsed time between frames + Time m_frameTimeLimit; ///< Current framerate limit + Vector2u m_size; ///< Current size of the window +}; + +} // namespace sf + + +#endif // SFML_WINDOW_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Window +/// \ingroup window +/// +/// sf::Window is the main class of the Window module. It defines +/// an OS window that is able to receive an OpenGL rendering. +/// +/// A sf::Window can create its own new window, or be embedded into +/// an already existing control using the create(handle) function. +/// This can be useful for embedding an OpenGL rendering area into +/// a view which is part of a bigger GUI with existing windows, +/// controls, etc. It can also serve as embedding an OpenGL rendering +/// area into a window created by another (probably richer) GUI library +/// like Qt or wxWidgets. +/// +/// The sf::Window class provides a simple interface for manipulating +/// the window: move, resize, show/hide, control mouse cursor, etc. +/// It also provides event handling through its pollEvent() and waitEvent() +/// functions. +/// +/// Note that OpenGL experts can pass their own parameters (antialiasing +/// level, bits for the depth and stencil buffers, etc.) to the +/// OpenGL context attached to the window, with the sf::ContextSettings +/// structure which is passed as an optional argument when creating the +/// window. +/// +/// Usage example: +/// \code +/// // Declare and create a new window +/// sf::Window window(sf::VideoMode(800, 600), "SFML window"); +/// +/// // Limit the framerate to 60 frames per second (this step is optional) +/// window.setFramerateLimit(60); +/// +/// // The main loop - ends as soon as the window is closed +/// while (window.isOpen()) +/// { +/// // Event processing +/// sf::Event event; +/// while (window.pollEvent(event)) +/// { +/// // Request for closing the window +/// if (event.type == sf::Event::Closed) +/// window.close(); +/// } +/// +/// // Activate the window for OpenGL rendering +/// window.setActive(); +/// +/// // OpenGL drawing commands go here... +/// +/// // End the current frame and display its contents on screen +/// window.display(); +/// } +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/WindowHandle.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/WindowHandle.hpp new file mode 100644 index 0000000..7fb2bb8 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/WindowHandle.hpp @@ -0,0 +1,64 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_WINDOWHANDLE_HPP +#define SFML_WINDOWHANDLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + +// Windows' HWND is a typedef on struct HWND__* +#if defined(SFML_SYSTEM_WINDOWS) + struct HWND__; +#endif + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// Define a low-level window handle type, specific to +/// each platform +//////////////////////////////////////////////////////////// +#if defined(SFML_SYSTEM_WINDOWS) + + // Window handle is HWND (HWND__*) on Windows + typedef HWND__* WindowHandle; + +#elif defined(SFML_SYSTEM_LINUX) || defined(SFML_SYSTEM_FREEBSD) + + // Window handle is Window (unsigned long) on Unix - X11 + typedef unsigned long WindowHandle; + +#elif defined(SFML_SYSTEM_MACOS) + + // Window handle is NSWindow (void*) on Mac OS X - Cocoa + typedef void* WindowHandle; + +#endif + +} // namespace sf + + +#endif // SFML_WINDOWHANDLE_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/WindowStyle.hpp b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/WindowStyle.hpp new file mode 100644 index 0000000..fa69d32 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Headers/Window/WindowStyle.hpp @@ -0,0 +1,53 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_WINDOWSTYLE_HPP +#define SFML_WINDOWSTYLE_HPP + + +namespace sf +{ +namespace Style +{ + //////////////////////////////////////////////////////////// + /// \ingroup window + /// \brief Enumeration of the window styles + /// + //////////////////////////////////////////////////////////// + enum + { + None = 0, ///< No border / title bar (this flag and all others are mutually exclusive) + Titlebar = 1 << 0, ///< Title bar + fixed border + Resize = 1 << 1, ///< Titlebar + resizable border + maximize button + Close = 1 << 2, ///< Titlebar + close button + Fullscreen = 1 << 3, ///< Fullscreen mode (this flag and all others are mutually exclusive) + + Default = Titlebar | Resize | Close ///< Default window style + }; +} + +} // namespace sf + + +#endif // SFML_WINDOWSTYLE_HPP diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Resources/Info.plist b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Resources/Info.plist new file mode 100644 index 0000000..1c27720 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/Resources/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + SFML + CFBundleIconFile + + CFBundleIdentifier + org.sfml-dev.SFML + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 2.1.0 + CFBundleShortVersionString + 2.1.0 + CSResourcesFileMapped + + + diff --git a/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/SFML b/SFML-2.1-osx-clang-universal/Frameworks/SFML.framework/Versions/2.1.0/SFML new file mode 100755 index 0000000000000000000000000000000000000000..6aa2e96442439eb1c2aa015ab53a9674ee23b6d2 GIT binary patch literal 16536 zcmeI2ziSg=7{}k3sL@u*;GpPGii#S!i{cQ_p_Qhz7)59i2jP-5Ck>`Q$XzrAhd8)( z6*@ZVrnouy2Po*|s;f)4x^$?1zn8ms))Pu;5aIj4bMN~+_q_K$`DA+D_j$kd_MI_i zAM_wJZA=bBZWWK=RNq&iZ;d{vLYKmf-m|x@kFEU`g;~aQ zBb(nULLH|(ed|VPVmjKNYeVHB1^15j#nc>u-h&>8#{FY%$DM2Y)mqbamaG1}ZCUnY ztGeJmT53J;?3u}%W$S)q+jrcS*H~Kg?90|As}Q`!_ePEB7BKEqc&NfWn#h;AbTA&n zI0U^7O_F%dN$-<E@~h<<$fMA_5{H0wN#+ zA|L`HAOa#F0wN#+A}|O7pL+NIDK!4~@Bd$*Lg)QIq>ZAPYO{8_0(LXVf=9n+I1C i5fA|p5CIVo0TB=Z5fA|p5P_W$_!m6@% + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + sfml-audio + CFBundleIconFile + + CFBundleIdentifier + org.sfml-dev.sfml-audio + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 2.1.0 + CFBundleShortVersionString + 2.1.0 + CSResourcesFileMapped + + + diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/Versions/2.1.0/sfml-audio b/SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/Versions/2.1.0/sfml-audio new file mode 100755 index 0000000000000000000000000000000000000000..1f5f2694f448208bb78d4b3d16c034c906c8735b GIT binary patch literal 177080 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
T%^Y8H?pXZ!apoj! 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/Versions/Current b/SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/Versions/Current new file mode 120000 index 0000000..50aea0e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/Versions/Current @@ -0,0 +1 @@ +2.1.0 \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/sfml-audio b/SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/sfml-audio new file mode 120000 index 0000000..134330d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-audio.framework/sfml-audio @@ -0,0 +1 @@ +Versions/Current/sfml-audio \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Resources b/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/2.1.0/Resources/Info.plist b/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/2.1.0/Resources/Info.plist new file mode 100644 index 0000000..f5d7026 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/2.1.0/Resources/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + sfml-graphics + CFBundleIconFile + + CFBundleIdentifier + org.sfml-dev.sfml-graphics + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 2.1.0 + CFBundleShortVersionString + 2.1.0 + CSResourcesFileMapped + + + diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/2.1.0/sfml-graphics b/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/2.1.0/sfml-graphics new file mode 100755 index 0000000000000000000000000000000000000000..8a225050af155f1c0e3eb062dbed4d48a7952f14 GIT binary patch literal 1694516 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

Zz!FTnpi{G0kmM|)A9 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 K9-BGOoR4zH_ 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

JP1*lgd)6M(@lPJ|vxE`*(Zo~XV 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 Xh0z`Yl9mxP>EJd1NCu1 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

)wkU&b63%p2STi-tT}9p|AgbT{shLigrgV?& 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/Current b/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/Current new file mode 120000 index 0000000..50aea0e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/Versions/Current @@ -0,0 +1 @@ +2.1.0 \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/sfml-graphics b/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/sfml-graphics new file mode 120000 index 0000000..209fa00 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-graphics.framework/sfml-graphics @@ -0,0 +1 @@ +Versions/Current/sfml-graphics \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Resources b/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/2.1.0/Resources/Info.plist b/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/2.1.0/Resources/Info.plist new file mode 100644 index 0000000..71104b6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/2.1.0/Resources/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + sfml-network + CFBundleIconFile + + CFBundleIdentifier + org.sfml-dev.sfml-network + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 2.1.0 + CFBundleShortVersionString + 2.1.0 + CSResourcesFileMapped + + + diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/2.1.0/sfml-network b/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/2.1.0/sfml-network new file mode 100755 index 0000000000000000000000000000000000000000..f29c9c85222fff8b8e5c46cb42d4a401bc0d90d6 GIT binary patch literal 317248 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/Current b/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/Current new file mode 120000 index 0000000..50aea0e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/Versions/Current @@ -0,0 +1 @@ +2.1.0 \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/sfml-network b/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/sfml-network new file mode 120000 index 0000000..2d1647c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-network.framework/sfml-network @@ -0,0 +1 @@ +Versions/Current/sfml-network \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Resources b/SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Versions/2.1.0/Resources/Info.plist b/SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Versions/2.1.0/Resources/Info.plist new file mode 100644 index 0000000..089d958 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Versions/2.1.0/Resources/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + sfml-system + CFBundleIconFile + + CFBundleIdentifier + org.sfml-dev.sfml-system + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 2.1.0 + CFBundleShortVersionString + 2.1.0 + CSResourcesFileMapped + + + diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Versions/2.1.0/sfml-system b/SFML-2.1-osx-clang-universal/Frameworks/sfml-system.framework/Versions/2.1.0/sfml-system new file mode 100755 index 0000000000000000000000000000000000000000..a29f39502afd86a7fa12a75e5fe09597c41f65bf GIT binary patch literal 117040 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 + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + sfml-window + CFBundleIconFile + + CFBundleIdentifier + org.sfml-dev.sfml-window + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 2.1.0 + CFBundleShortVersionString + 2.1.0 + CSResourcesFileMapped + + + diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/Versions/2.1.0/sfml-window b/SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/Versions/2.1.0/sfml-window new file mode 100755 index 0000000000000000000000000000000000000000..c3fd8d4a10066284ddb78a319f1b581e6d63deb2 GIT binary patch literal 361264 zcmeFaeS8$v^*_FwEXe{Zvq*#}5vWEbf@Y7`2wQk}T521p^0lziXk-kH0zA;Gq<&+m`l z>y>@IX78E%aPGP1o_p@OkF)#ipGs{uTMV9fJh3*L8*k4)1K4FZ{bJsR-)F^G;y@P%x;W6qf&ZUz;L|fdoHYjiwm8s!37)14 zY_{S+ZyUz{wwah2$jiIKJM)fq1uLUa{NPghZg`yZj$dA$Z{aE*hxvPS`artPc27^c zja)}08odO}*Sx%fhwh)hd}&^R&p#iY?P<^_+il}9TS2Zt2}|ni#&J+tfCGv1?p?Ta z#lrj!a16cOZrcn3$fXGo@iTDHdtTl>3l`)pT(w}~3SXXY-u(7-luftWS}y_{;6~vP z$Oy-R<;w~p3^@nKQs6-1GPqIvh{jRi%U`_g9>cFajvdQ^<8qsgTCl}LDrd&qkY8m8#i^U3GKIlI;{aiwa^wx5dEU4s~5*@AQE*s#;iCd$aQ;^=OqC+A$5h%U<(q@4{m zklVRT+&#}XFM{+OepK3RBZ&aGo#R-r$SPRvag408+cp6Oxz@5oa^+>Y|NiC6OuzOx zDv@@O5opDM;)!2g-u!|B@kThK`Jn^H1cQNAxw7IQ_)P@nawi@o5 zas@TVeyEG31$p@k7a0U}lzuM7M0zXz(0PQF{U8$y3kv4lv(UiP9>-kJFc*pEo*&2Z zyZuWSM%rg|Im-TKx78rGvi;F?z{^6%f~E5;oNQ0Wrf*OeV8f=*&X1!2r(YJr33s68)^#Za3OLfYeK{=41ggkU%S<$QE-g<;B8 zdmOg!Q7=@?ug-^q=$N-`!NR-;=j9iiBVTiY<2|65dtMw1=J`;uW_jAvkr1}qG9bGN z2hT^xiu~oiAUCf|r-w*P={1rHVY7T*68eB+T= zJ~M%yXk_`YTC&@QO=C!gO(^pB`R~ z*N(sT?uYQk>xJ5hNMj#&PMQTnhM;}%1n03-cdbykKEL$C-5yk>wY~JKIs7pM`hJ=ij&B+Hof5IE{Bl z(dhXp8mXM;C(arJ*kFn?y)g2!7@H2sOEKP)l6mVKVtL=fz2MXJ>*7Ec2f8@W#epsk zba9}I16>^G;y@P%x;W6qfi4boaiEI>T^#7*Koy#ivwL8=;A;Z2f8@W#epskba9}I16>^G;y@P%x;W6qfi4boaiEI>T^#7* zKo&&kWJ zP^u{2lQ`?Cj7-+|;*w5%!UcAlG_Z&MfL{Z67Z{{Z}A~ z7ovtB6ru-ZDzi*&7Wz9$|0|JxlaYQm?h?_{&q+^wdLBn~Rd0flk&H69;W$*Uiwdy$ z93EeYB1Q2y)j+?5&>zL0G;pkyKEi)vXZS~+gZ~}WWEB2=NK3`|F^_v-3B5j`%CpAYow{1PLq4BMyuX-i0^%DKC(Jh{dCK zgOD3Rh^Xl*!*eh^snV0c9Q{fBvHZ;TZt{25BZvjrx*D-T#}GY@vSB)}AG|uPe~@Ki zXOuo-{2asElO~@nLm`J2K$)ZWV8;{D1#zpk+ap1rFZ$Xhi8apFy$ho?TiDjbc?ireu(#9wSZb6Au-iHWNa#|pT_#Z$*dHoHM^jQe#pub_&n`g3eJmINQ*N<2O7xhZ{@81eme%zmY zfNM8!cE-xP5N4{%J%Il!R%%3aqp9$jx_cG$Q{I=rwdfZnpGk&%et6ev9w~)oj0Q0J zUu|u?0rZ7eXEeVW%V=huMF!;qLCOazHQS9o+pV&$+ofhZ@#ZvHl1F_A2>J+#J42k! z5wm{dW5E9vGXh9R%t*3S`7^{IWbT4{ZhIB{xb76F%f=@ zq@2Ky`9O7Eek?cm@jE2$4DpQ|G2_Qufd4CgtU$u{{3szFfgi01JC`5a9+;_>objO$ zFczhC+i!n}YhmBb+B2g8D@n=vaXUzFMsF0`!q^0_Bjm+;BXz7BEupPO*aZl^AEAb> zuJ1-9FkRb11ftO_Ct}+5Pt3k!;tFz>5IKIQ(rexJid6gtN2CT+vZ}Fm~lKM{b4L zKbb`hP}W|j;tY*-P-hn!>*NmIHGwy7HjQOw6QvH2H|yV!Y6z^)@>5?*ld55WsyC=p z9YYEel(VM}OOsC7KOK^jsO+QA-S%VZROgVKB&Ft5tu$$;y_#%(G7OC$@a5M3ZyT&{ zf#0ytCpb*wJPEshJM*bst`-&f6kPStRVy zBqDo)L(Orc6TDH4G4+?SSDoVaR2TG9C3Jzu!dH;ASoE`}yx?MW3U!Zv(efNhVPn{> zts+-x3CF?FavRkV!^?_K`fr2ECEn@9$X}_F%iO+rv{tn{7*031!6IdBR~~UHBh*5d z8m~HwcPWiNha#!5$b*%`m8|zZYqPawIp4OEwo5G;=P>lnPKS+^XU230teWHU9G5na zcS%K;L2N~TuHNblJmj)T#TZW5)NxMr2G3sqCF&|iahvb@z*-o?{leE;$_MWZ^7h|U zHO^)CG)kMtx~j4WQg-^^sjmXvp5DF`^)`oko$`PKbr7dab^@_7p8h>f-!NsWBRmw5 zoXYO-Vmw!?`3@zugP7we=1q!Q>7m@_RFU3UHQr^f8tbwFz2Yw3?~5g@Q=Jq%)#-@= z%3B@EI7j$qB!P1S(!zr!7D-X5y@9xc)ZGv{9D}5GWrEX?!|3tJ9PNeIp#Y$GXsAk+ zq+k9o@U8T#`{BC=J$(*A>QCX1+u!Z;TN$0-4=t46YBRsX$0$E~MSkQ^etQu|f3K-sejmV>^7|c8b7iOb z#Yg8?h*WJGd&1M-OW3IQ1`gJ)D(at++K5$@gii|Vf;{R8;-T7DG&E@k-NfG6;~ z4g9^@GTHi*b>Q) z>Kpn~hs6ZbfQ%zHz42ggn%>|_G+Lh-@&5vuw8Xz2@l{LoD1H$BSEA#`QT%L|v@OF4 z?L>1Zram?B`=jH3i|H97esYKLz0vWv@%Ue6lo;r(^D{&bZY*W2cpecMLbC}(%j09g zX=p@6Wm0i2`Z}$Y-iW(rz}@09sVED+q2Q?%W+QDeAdUGc!4r571=~b;>;q=Zcmt{m zN(6<1{X|e70Sy#Te*s-3pvwg`Oh7{fG)h1t1az~2(gc(xpmYIE5zs^d%@EKu0nHN7 z0s-A)Kw6OelwcnIL%}5?e7S%M45%u&nxIgyLIiy*pbrJ~zJT5p&|3m}LqM+y=p_NY zD4=Hr^t6C}DWJy%qzY)gfMfx!6;Mb(dj<5F0ck<Y>OPe6SHBnhaefZ_!dE1)((Qj3623Fw4?eiTqxKqCZ} zGy&agKw6Oelpv|4P%vGDX9;Mc0aXR35flnOD}tUD&@Tn_xPVjvtrw6iptS;8EufVG zDiF|e0WA^GJpx)FpgaN163`3*y(pm91oVah8GS(TCA^1%Z;9}C1@yiFRRupLC={el ziAzDOfZ9a#76F|S&X)7(cu z{R~J8lAjWk@E;2H7vTd1bh!al1&0t63Koc<>0@@*5D`@gE8tHGD$>T|f;6R266D` zRziMCNe2EyfvF<=4gt+HpsK)Jfbhm)s6wrGD+HOEv3Hd1{Z{t4{*dfBp1XO82Re?POg#rn* zAju#$$HpL+@N){tAt2-KVWe#pXqyGpB%nqCH3&!-&`|-^3Fwf3Y6WyaKs5qN6toNy zka6d#O)DWkr6dXep}=4fP9GkiUnnr#fT{vF5EKdoM9>-mtrCz=Kq~~aR6zF%=xzbc z70_$}(Ki|B7Yf`Vps50yB%lcb$`H_40gVw*k$^S`Xp;eHCFG}+l;A%U*et@I5zuo6 zR26ucpirPe1nB}gDxf+69THHjfDQ<#MnHQ6R4t%N0hI}8hk&*V=sf|wEuc3Av{gWj z0%{ges{v^xoCZ`Ca1#^?%oIU)2xzK+CJAVQfHDL$RzPC} zbc29K3TU{1h6-q~fRY6?NI-NiI{iX{L;)oTXtn|6*4N+?e)QkD_3z_D4w3omC0^H3 z%%x}<_PMzg2#>rcv3IPGt!tnjko6NY)xeTFVMr8@rP*t&JvOSjPPt-k>Pe+|0=(FC zO=SK>TfHN&dWX%wk_?IEAYhDLD)yq4veo!MPC^Q;U<(DtV9o_I9c((7t$})naHaTkg}ZNA@N^y6iV%B6u5MOl43RdEkfMkOP3W z3+O!ob=hx$q)7iNpacQA1>_QtQ$P*@*#y*OzXiJNw?LQu7U;6y0$ujoPuOqn`vK9}=x3H4OIo?6yYGMwf!KW2{jdTHy)%pmWH%zG|rVDioY zK;9#nHyiJfHw_NS`%>n816j=EokRvRyyKYn%ceICBFOv4Wkd$El_@qE*5q9aZ+*dH zo2_&%tf}brJT+s~7Hr}9nL26I%gXMQojyt4*((37RX*No-=~l#5d3fiMpwqDXPEVt zF={jUee_q@g;ksVrRE}X*rrr{NExUZ0}Ye|J3xpdInY2kkfFSfP*wmXnTP*8 zjE{6h)}#M}{Tnv}wK0#z()0ZxlxbT!3^8NZc4YlD5-w##!Xx&1Zv9o{KQMqw;P(5| z?cPtdd!K>j$OwL#ucM@xW^-`INe*q18B6$nGCbRbD2kJ|Zeg=Rb^>-ISohapVf4J= zk@5}OO`LJ$Vkd~j9;Nl;;V@BQu09rAJ%iRe{dZ}l1d(j_LPbDACSVZ{KJ*I(mkX%C zfYe~mY;&TM;*qGR!9L^%#$St?C0x~TRfZ>x;qb50ymb`eqH0h^ql`K=`>44^Ph&AD zc>Y18%dW%L8|>gYsx+rm`})acO@Dgh_19lN^|$ixV^8g0veRV`DG0<4m>Wel>P8|} z%V|{Zz-A0%b-Nd^aolp{aDJxXKR{lGaRUkH9dM2PG@N<*+cXFWUWYGXsvEDxzo*=H zjhf?Bue0oz@ud3Q>O+pShaK31^N=&`VW+RVT<-Ez`~R+#d&;FJ%OIdcQ$*gTV{oXZ z4ll!&owV!xz10UCY55L+ckG@?8}F1hvjpeH$M&BNQUH=#HM`9y5>jTTr#@MTt0D-qwIie-SuRHyhYi+hQx1iyGN;kInP=BOU zf51}JD>annOsst;HIHU0i2b+;y7WuYDTN0S#iD*WBDQad8tji>fCleTHM>^zNlrD( zsdyVaRsIw;-V^H|p=L;qv@F`qRxk=Js2;nHdG`{*M`8Ub?0YBS^3c99yNHqKGt4zIP+oBx1Z-sH({^nb4AG-?k+ z6Y6SqgJ(jk|3Wne`FQMTDexQHoHpJeJ-QzhrWMvnMRUPi?cqe64`@yEHuw|O>(nVt zo@0>wmCa~g(xZP@uc(Az+XGig4B62~bXmXfxnc}_?fUqVC($!cf# zLdK2=KM|r%cY40?_f_M-6t|l0NXvBO>*2n9KUMzWX#RmaX%9J3K4Rg86dOGJKHS4> zZv}@zWN;D0(sS51Moo9BlbxP&#Eez@dUk>xnU1t{M}Ay*P{9DTFWx{Db|8ZASVnjs zCEcM+WJS(xlnamA{3A?R|1~xVl~kDR=MfjllLkN9PD5r<(Lpu0Q7S%;{mh7z(x@Cu z`4SpXli^WcNxoB>P#cQBLCvjG3!KWzRwLW2CIvF2tNsS%fo5e~E346suy!E5;St0D zAL|jn(xJ|DDtSb>4TQ(5xeZF9vciGB6qT!drcQH);~<}SQKvXP`@r83o>AcM zN=I6Oqd@Stpgn)fnmkj9zau=u!L=0>JKw_J{KGirAorpoJpd-7%!Q3oQ57~P*Z&oQ zrDh+9-LP&t_II{@O=3EsRXMC?Iz81=F+LzneV*D|?FDkWtJ587p`JFQS$b4PNd1fW zQx0o$5~7^M1Q5)@y|AYjOdaiMN9ViM7} z%gwrfr}BBYm*$H}jMOK!lQ`9TR6#4kK2ksIg+pi)+Bg@=t9&9A_Xn5jA0?WZN_1-J zoHbCsmwkq&cpvw7Y3YeznKigO1yAI`ZY@0-!5ze^-;Y>V6kM+MQckHe9HwZR42Wlv zsoX|lX&&*IjOwMQ5XxguH=FG!o>;sa_8;qi(Eqwv%{0&!1C_e1AQyhblYO@kY)uEax7|T`Xt#exd9H=?YrjC;mQZ1N;(84RxJ1*^%Ep zdCV=3h|%K8h*H ze;~G{!Bc&}sT5c<2OnW?-saRM*r6=RoIs&-8a-#AANr^_FIVfh8d02*rc6Xv*a*d{O^89QkQI3sIM?WDfnpkf3OM5Lp`5@*X{a0JFc4i;aD_Tr z#pdP{M0vi6D#n6JE{j#lm1^@83hysWehgKy9e+(S`cFC~>Qr-GY`ZXL%a41>3TRZl ziDdXqaVqFx_xTf4H+1Wl;87eJLfTYE!K`px!3^a~brdy>D0Qn0#};ddu7dRF8po18 zQCA`xbYM_NI?gPlsQuJfPmOXI(h&!3mo~$poPkxE|Fe3SYiQ1mNK;Sq^U4{Dgdj;S zr;s=mW?f-}@&(!r=VCnMAWn%V$;m?9>Sziq+Zf7ry3@$B1{HFX+6NUAr>=ISJwg>y zQ1F1-2Mr1QM`Kt`e54i>tMpYSJCt(5g~mWdh$UPFPRNSqI1r_&sh+by1lxW!A-cL? zu$l@)7_p(pTxC{>O&Ni@g|q?(PFd6shPncoa^+AarsBK-Kd(2F%-TYiaysQ$`RSO& zyU0$g@*c6vr(rAhqaL6|dnA!<1CR6oX`iwlz*8#~y-VtUSIEl-DExdQYoFdmPnOf) z2Tbe%ORm~aM-jle>ZwDMce>JYT+(Lm zk?>kM)YOit-(oo@d=K|`X_>t5i17T+6g+_kyQ%x7zT=!&zoS@}6$}CeeIc{dMCOoS zkVO)Qvk4D1la!BZm9}}0n4Jgu+*7DUddA^dg=Z6G~Ci>wT$FzS86S5eBFis@jcb}Ix9vFyUf1^9*I(}exmbCzz0I>%8h?6S8%yS-WY-{> z(!8XZnTSDpLGK=i;XG+Rx92mdXeY8}@|(H~a}mAOiB1@9hPt#te?kn zPvS#auo}R3+G>t=oyCTsIwo?|;L~Y#NDh;ptb|Zj5|1~CoTzR>^CzuE9 z4>~RO9rVBD{D6`FJuLr&H+Gu;y)6HJ|7QL=&{6)EQU1^3@7(;2`6s%nz}tv2c}X$A z9_IY`0>f_bqjP#{cTpt{QnPVPD^cC{^k~KyQrztsqxu^$J^^;OS4S`z&37axVrGc$ zNN^ML$sQ8(LgbNRkiP(h)(_#&I=(RbPkvr=jzRF1jNo65>6C$2SqawAbhmx(>6~Wt z=$vL6b9F%SRg7fga49=&;|Br6^0$zWJ{UB&w||B*fy*QPkm*E|lEnFX-p8iH&(0`&9bp#AR^pW?^TX9QeUHB0rcQ8bIWFZ^Q}M@OI7H?r<0diKKL|oh zG65xr!^(!1b0k9sNJw2LcgFE)!tOPAb?g7r3*?}oz|!FM z@Dr|fP!yJQ7ZJ!rrjhsnQrE!M|A{~I{3q#$K{}XcGsQb=H?_wPsk%DWPZO#@Qt;IE zo$4pdBr!cME=Mu+8@rtW`rYEs1<&j9lrBIA=Mtlk z+il6bBXhU&9t=L2k@RPv4{#+w9}E*P5#kbOdE2JCV9}+P!A$NW0vOtQ(&n3LO9hx&lBmsep0j;+M->!YH|W09A~f<0kF zU_EY2Bkf0%>n|E^uW*^a3JtO{f% zp{|w8LB=gWIPFm)0kN}@A#9?kg z<+xCaI~cRtZgaCjw6h;+d2d{jdfOl%GtT3(8e-{TDp=Adc9fp4?{=79Qb+Nbe2E+` z#l#OL8?ji3d@uoo{xU-EAX6a3d^-4V&F{j;D4n!zzbN9l=W~trX>D;=f~%00izqdw zQ=$;KSWB_2e{%U_21p(w8=@-}Jq{Gs8`-A)v90Y7b~KgM`a2(yjrRgZxTfhj8b0kz z&qgvm%Sxd}$@F~qTC3^#61+Pz@OB~0V&FZ6SJJtg;SS%$F10dl_+l#gStIx=xcV0S z{UrYe^D49SZ|CRt&~xHXpUQYOlV+6txFW)LJxs{J0E}xENy~OElBQQ5muBO+Yu5?* zUkU#c(wy=WQg0}OU++M1rYF)xXp$PZ^%`NoWF~NNZ%2P0pzykomP})$zY*pbBgjHO z$=g_?`fyWAf;q&XCzAmrZ@Z1G-OL0U`!%ZT-ybTnr@@*zVxu@TNF;jy^&wN; zw~J)8w7QD=XheXLa{xD8QEdEyLYA8C)CU1GMp<;D6}waID}+m>bi37nNhdXvl~(K*1XQNLU%!qnz(3F@j>6v$KutAiD?s) z{MSj_s?}JgRFZJN;7H>0m57bO5`KJs>R>p*s^7KS?8>yn5_^`X(CvQ*GjwucgUxpj z=J{|}%A~3k+z#hd6EWeJgozK>OO&6Qo|u-N>jZ> zgab0LA04xS-)-WbVBi;bd_DUrPtPw8W$6bP>7U@~xjb;4sRb@U~ zg964>Iz}zzByuN#oT_x3vP@6rK7+V3lskjDGm<;Qxif}4H*hC|J7c*si8~Xxa|d^( za%VPoW|C8tKGznKw-AV5NPdn3fSwT$wL$uY=%;7E_+$*vX^Zlw3SCg zZp{K}5>TUn8VsmPM$boNE)^)mE_L~C;Wt-6vjsF$Kz9ges(>a5Xo7$;1Y}GrAYWs^ z00?s&>=%+p3TU_iRmm#|3dwJapf?4yRX{HbXp4ZJ6VNjP+AN?=0@@&;5&;znC?KFU z0$L>?p8-|L?-3M|n?z8ffEom(3+SkT>I8I1K(zuoAfOrn?GaG5fGP!4CZHVx+HOEq zax+08c{q*Q7&KHsg9Vf+cAlxf5cyC_)7%o*U(Ja>LhkDOsP8YivCGy4WQ+FU%K#&BW<=s(cx}@|EDkm8NSqOoI7Ev65{okwnMUGBkvQEb z&RP~{MO2*d`>c3WqBx2(i^U;{ir@)F;>1&&QHZmyf~u3pIYLD@7k{u%8VkqVy4nh5 zMSBDaT%J?DAu8Q@tq0zLr518vG5JUA3Q)0qr95Syua{ijDu3N7A8WN&E9qFKZ&Ya( zfbCkCj1;s=io_pdTLKxRR{PU3ewwKTMkk|xgS{E2(LOY0ja^1m%yFuZxI8UB4<(PJ zhq(i^4L~bbII!#BM_N9|RL40qWk%EVCrZIDJFfpdV9R(Qnx5A$KZl+tum|b<^vwQ` z>A5;W4_(;ZIe#uWm!6oPq-PH}_@D9TSCqoI47wdXY)FNHE=E-WYHRJs6Ndfjcgl|> z+WdKeLbu&N&g3tdOw=nHlNG~Z7tz9r{><-T24Vk2WFUoV{T)0BiEmdpkrJ-8BpiN_ zg-oa2xR@84o}heD{-aZMeSpD!`QIEEH930YZ&GhE;ApM1x2PcF7_ja7q_p7l>(b7z7spISWz?OPJ>RnewW0`waD`lrfH%5=80IVnkE2OBC;Bqd;wz0_{~NCa498DSJJqL~*`+1I1xw=YgJ` zzR~t$%5Jj=`=|&Z`xm}slKP@W(j(=ecnP_v{!NMx#qe*2gLN>s3#c=d0*nwgt0-!@ zV=Q)oNX27NuGC#B&MJEY#bqj!1F7hFU@-QtcuP>(kJ)a>xL}WO)foGBOisLI>}pB8+@W+EznFIE5ngRlP;D z=V+6X(HG;H&2XGXHK^W_v5<~&Y1skk(ZwKHW`t(QOk6XNhL>gz?mAWtNjHuWQ$yg# zh<^kj?dCtxE_ne=q1vm?Nl+&zrW~OHkcNjy<-CpppdC(k@j%qU)exg2XwF=QViUIG z#(G+ECs}s0#!SnTy<>oCoH7}+j(kpwkLQ^F8N+5R-8b4GQP`0RBD=Bk*yG&T6{@e=}qWdroRFKeMm76anbTBy>goJ(}Z>cw-7< zElR5#LzibS_p~UVN=5Hbs@IksabtckypMX2$dm5P6bG}z;t z^2vkK%3ETzbUXIrYZ5c{85?j=yO?7s|9+r0ySIH`%Li0rDPL-?5==&w{}_{UMDuNT=pPeH zvBSSN!-n(emH%!&qM<)9(?tat56pSPt7|IQkIfti6SGA2`e-ZEGq24!htR zW5+zBoRGGiDF4cbP4oHx;#cj3wx*^+e%sy;G zg|gP5{Lusg7@hJ^S|U{+bcSR1>6sdopDP*j-QGP)NZ)`sN^>|~_19#o-aVcwNj?s| z%8|#gza4Y(0}}Y0yoUCI7XC9tr)l}2Qt4;r(%L@7Uvpzyn;V;cS8mrzY=be#JZ*Ep z%zm9|y&D5Si0$B?hG&!#_inT~5jMJ%hR8SCz>xe)S@M;ulydp&o7e54_$ApV%JsNX zV6jE{9*1v~$1!-ICsUQnK&iCNmD;_$B)f64R(LEdS?tNlk4aflX*ui4z?vm5K?$6c zin_t(34a69b{GYG6alQ@$4A(0C%tvV*=#)=t7U(!LTf&8`$+JEw(szzQw+adM5BHj z>9E@YsQVHWSvaVIl^mmBI-T+Fas<*VMf~A6hzOPV5?nnA0T94*#(#W&%PdmVW0LjK zU$a~Q{hpwZDj!e9Fjbv?9ixhwRrdmus@?^k@^53%J<^i6dBhatk_0}drz4W7cbL?f z^2WbsFpD$=s=Jy+ z2>Vcw8oaWDD6dl#L2B^&4x+3_6ob^-@^50PKBmIUm@;{bDx_BM)a0kwpTzbM7f~e8 zi=+h%Y#?wxffZVCQD1}0?Amrt`i00L!sXzD9YpyN$s=4220Mtd2T?3shSnefe1h_2 zXDb>|xwP}&sAGKqcIX*JVP~@0d2q&mzCUx8es~MgS}u!!g5IlOEj&zB7{l}1D5LI` z+#1DSn|hLz(ka-d#`p(4xXRnaK}za9WH!y6SbW8bAeM+spG_5Pqomh=2&+{G@ckp6 z?lYt-KB?x`NX5?~pYYH0+g?DQrOqw`KI2IBm+0TaYl);+5L+M4A{1L9Y)6FX6?lH3 z{7o;SfzSra$0VatP*In|)4C|x!xq{4c?-fU>+gN>O4%mBMJEG&zzZ5kWWFGG z4t(k6EbKnDslfss%2ro1DF0K+M>P6I>DR{-#>cG~FC&bPM`1*1TpVL@a}22b23%L4 zXY(5B(;r88z7YQHSXxVB9tNu!ORwq`VQCFKJ7Q`5ZaZP2bUz|WeI@01iXsPl60uRm z_k)e+7C#TZRQy+gNe!;F6yJ*wK5-+>D3emW)p)k68&^}5Ke7TnN%J<)@h&ZAI~=S2 zBqgE8G7L)*3C*ggj2P@KLtPc$3$N6+MVshVqZfQhq8A@JlS2JpDuH*0I&wSboGLTc zt5(*(Msd{ktp5dkv5RDCR@z6DZT<@?8>6cMqFU1!y^}z1_IB1i!3q$$lGbNbX9I^) zY*1aC12kbLdcoopa7a&h7TFrr*=DKEr!ZD*SDkfKElH^6bE?x$GSSKA=&KNBX(3I> zk6OraxTz=WVL2Jh$It~+LQfK#1IXK?DFs|Mv>gy?1g}Q0Nh``a0k2f%OiE?&owrV!4H=;{uB)Vm%jQG4(2hpT@P)dU z5~B0hsq(L+7nJxNP_KVLf8@jUA^HpKr_qZc=9s}S%h@-UEVwe+{G4NyeL(SZqT@dZ zTcp$Ymi}{=D!+qDSJlg|jwq2~j8^3fgW9`xFg=Wk7x`D%wT?YH*$w6<9W)#4(T; zZPbCTWEK(d!*$SF3(b{KcE?Gcs%Un>^!b*2Px7bV`05tpy)N;i;}GaLj>H0uV5s&ZB&8=Ta;yf?_ z478sjw|-Pl>wAa3&}@y4AkMtedxi z5c7qkU*ja9+Ec?qL`2!^LGtuAV7t&b9%~-azS^N)pK=zG!M;)A=>mSke z(HnW3Qy(Wcx2unRAfmJSSV$PoUmq?+`OoX4;g?h&7jKW$hYvm-)yEmo%j)Ake8$GC zk0VrwPU@o@2(r}2enh4EsDax-eSBdAFMz8b!e6`ki0IpyA#W4Ox)$iygHvKC;1?L> zu-dPueC|W`m=ahH2M6gd*St-v8S{;iWb5j8A*iIBR&FG(w~6mHWE+^o{J%L~g@Px$ z6&J!ZsPZGRELWE*Kg=PgDnAHFy+J9|A&8`W(UI{|PtT+^5QXgQjjeP0Tv{KPQ#3D5| z4?;ux=mB0y@`KIvi0CC>`Bk3SGB8~E3yMPhAyp=2s^14MLfD(k&gVCQdFmT~L@YzS zT>+ntn$sId#+uWwkO`v?6~76d9W^IoyXLzHwzQ}KUWwR8C>6Isz5zw`)I;li7$qAl zlsx-*drG(=_cJ7qqQo$nVhL>rZQHc}5Nsjl1eFuS93vM+xf4W$FCu6;8bjb_;|{;u zVFQ}t$=e1Pe-LS4UVckSP4hBj;F|_l--Ew)`hfM9G=EwZN0XH1%=`u-Iupxv@aRsJ zx*8svmf*gb*>UJY;}U!~!+6nr_5|Dn?MAC+`$>6+I2BRRiQ&$SA8F@@)AOb8LZvpP z8uQ$8UF)e@EGe}raanTPLS*ZILoH>UKq*PRZ+ujH;d@MMgfHYsV=??;m`8}|IqmC9 z6Z;XQ@vTabaHyr!R?k75u$ir+ClilLTL3r;Jg*4rVzG6*ayFU25y6u)D96vMQ@ zxV>eur*N6~3;%*>;iNOoKgbPk+Iq^TrQ#r_)RalV=@$V%>~BPX^sI*TK;P@P6BU(i z=<9_?vHT|?qFmRge4A3GG$AG#)yB4PZ@F4Ho>-`W@x{eQPJ>rH)CI z_X^e++m&}dr{mu!?@c`BPnGv^RyS^}BS)3@Zzu(o&n)lY*3Qa1dqZdC#o8vDNp8T< zOI=Umfr`6AeVoLB-Lu)-y4uOTp%Z9-uDYJ2lSe0M>>xVxM)W&abZQ(tIyHt4qBCzq zzk)@lw#lPYTkIe@^G5WODiK4fp|p~xNmU;web7M~=8ZHvktRyMGDfu`vw^B>6iXGg z$O}Itc^paPswUi{?%!v&6!c5~KGP;MI{$5^4P?>(ZKgFoMqK!}nO4rC6VpC4n1)*a z38rb3CS#z%sDT|YY9KLc5u(WzO>zquMIG9Hg^kxN`UK+vSc0$z(SN`mTy`3Dm4Q&t7&d0E{F?mHgT4>9V|!4wq}*nvJVEMXp^14f{rh#>&Lbr%&rolES_gQ8e|DH;}|Ix3&cVM_qrwY;t`JXkkXqt<8u)ni$3W z89Y0(a40MbVHWcyfy#nXTnM+mm={2Q3z=!^E0*j>QT9<2cen`y$v&d8&;-259-hB} zXNTD%tQuiv_MqlTyb@Kvq$HeCzX2t}l4AEYY(^k18+ei8R#2`oK}oo=0j^$xzxLw+ zWBr5VnOU?>6pVEbOVc!eDjlZFKY{TSV5v8Pc z7$(4ZLwhfV+OoQV zIcXbW4&cpyiN-Fib!bH~)bL4IzD0IwTv%eKhaJkr=x4E5jl)oE14j_K7WodB>iUH(vu(kR~c`V-&EYlkAP)jR>|-Fbl6l!JXuS_$5>#bNS{N z=0b2&E5(8Ry@;Z)@hVuGWyJps)ajG(V(o8CdxOgl?sKhG12;8+D|~$i+VLnEJV0|T zl9NeQ)_UVNV7;{duaFe%SdzBAXMg9{z`E{i8)i^wfQcq9wgVhOT${4+fVL*NQEA0F zY8)}tuP0m$!y#PB8umI(N*<))G~A?Q9PBDX-MFRq4|7#f!=*XN0VL2y34{!;i?%Dk zWm2whK$&m@4Jjz82*V_sUWeH|vd403HT9CM$lnl-`Q*>cLef)IssX%ILeUu3oyK)d zjZE=fgi5{@Trt(nJIo)4}^4U9!8Rf;>@Gdw4v&ne~Wz`=#)tT2%2? z4?Dvq7ap=QFPH%F#Tib?b(u!e-)l`h3@w54!=U@}`?MhvUekFE3K{SaX%N>aez^p$Y+qxduK+ltKh;64YH zxWz@mVJ~v6p}l8kDq}Nq(l*;kW%zodJp1wK_R(fx61AKr+U%ee*-ahtn*dm0s*Guz z%XB8SoxDRjO(9t(ozk`<`-fOM%dOasu9tR@oB9v!Lwetfx?pu8@#tXtDkC;D zQTzSo2Fmwyoa@fCLD{VAC!bln@|x7L*bTo}fwHuHy?qqRWZh0%cUa12e!kL;Ai7ln zLAS6V9JCdPCR$wxN|Xg`f(?QI~Q^1 zdhXb{#F#O(VKL42Ydl-=yoF~Qo{#WU;`s#6emq3Q|K&qfLahJNz*`6R zJ3Rj|-YKttT3|D8;y%?Q=Fn|4cbSN1Af7An(1HfGhS_jgiETWdTkuT9GXu{YJPYwG z#Y0!9Ka6J`o)SEd<9Q0t^LSpyL+$4cxbNVhd}#+=86N8HKgIJGJap#o8$93RX+@l4 zaOqH28y>n|@&Y_`%&tG4%kZS&p~HKaakq_vdlMcno=JEpk7;o4!ZQ!gy@nr6K|YA5 z5Kj>v+Qx43f$$LggyHu;mM}98xm(~*^b!1;B@UJG_jvy!o*j59@a)F34^J(gBX}sy zw{U+jU=wc>-dpg*K+Sc>Lmw6Chlj!k7%olH(ECus9bvem4R;(|l7R_ur{E!3m<~4= z&)s;I;K|4H5S{>@^>{Yoq53yhNlkk$iLMUnhugSQKF7xX%ynlGXKa2C>Uw{C7;NjO z<~dV7Q);nS8Jis21{Mrd*E&+Zzz)^&wwQe_xK(}pVRX3%OOejzO9{Iz!5<>Q&51{VS?6blS;8Gz5$z^HAg8XGUCl$#m3qRdTdxd$`|?!P=R|rG1)zw-E-?u zX42goPO@TuhcI(MgwDHN|IO!%bs`MwzoSpH{U=!eC5XzWAvJQw`tNn*1Jmhg2nN=F z>+yE(`tL(LRW4F#K}r#sQz2{~q7&B5lZa=o|7HPSWc}Ad&nz0B-=zPQaH$Xeh?KM? z(-@-;0|p#3>tJ|xYE@?;-&jH%RAT*I_?Q%OdLs4}U4N@>KLvdu>=zWlw3Eq1B@}R7 zD1c2L12W}ihwmV54Q7{ivHOCsUm$^Tcc%9CR>EcFKUmQzz6KPK;gjj^CfrB^r3862 z?qgxYycXzMnRbm>>?_7UKK{6q&N-|rh0>#o()kc1`eQIK)YpBEa0FUbZe9mkC5{S6 zCB)7MRzBNN+C_$A6cj*qhZ*qQHwXyfQxv!bnbtrMOiV!xHmE=|7W*xBgWXC6Rco9% z>oSirgH(kn2ol2T2>S$KJJ*ue39LcP#(JN>PTNQ-*BpHGMmip(ZM@y$-}WH<)AX%K zt8Kg<47Uo6PJwi$l*&K^>Xqa}++kD6<^WK)13Q-ow5hhSjtKwheS+ovTzS2QvR11a zqO)F08FeVHS)GQAu!L}OW8q`UE8oA--d=A1&gkRowRfuPe*bq+h0olOFuZF=S=Q}X zHyxDHPb#Kv40kE7`#^ZnEn$u8KDY}}NC@P^ZR9K{kv zYPTQ(0aFSO>Cf{-skr<4s1~5Y(i(`P)F9;5IzHo`t*7p%<{H`GA)kp~dEt1EUAx8M zKan;3U|M0rnh@?PqU)fYO3^O}71+A4RxLba5ZH(3Rdf(HuHl%I+C2@Q3+aiGxjFvR zpY)xh|0Xewf%aRet~>h;1cx_XTzKPD#wTLH^y>FS^Bz47n~w~t>xfyE?&14s3hD~9 zI_^(RcDw$HAMaSK@m4Df-?K31o0JNLQA%^5(91H9hmSTeeUs*|mb41gygKGxUY<<7 zLESY z0gZvu`hy@ZEi1vl2=NVFrGh6w_U;2LW&H<;A@n_V@kqt5!N)+q%0ORML*L6;uOUQ5 z9Tlyc48y@*-BxED-(c8}hI8pYXPm*pNPD>2gHE{h2+zh`4oXQFHGD5*bjW*%G$eaH z6dn@t(p*1(tqmuIya!0tvd{zJ3qsx+WW--<%$~3(r(7AnXcNl312?Z1AHeSF@Fb)n zp8SH>0^U^bb}DLsdko*NE_{#3SD1*AU`oY%fnM6S(-clo8EO{3OoDsbDzzubXu@G` zqA7YORSC?0RI9qum9`SIMSFbx`1&5Q>|@YS1UGTMvh`~J zB?=awi$DjMyTa*-QyTrJ!WS@kq=_YL)N01{1Un<;dE2NJDj*Y#7rDnf_WDa;T;K`LOj;?jsBJ0zehA}KxvR4n*!F?;>A;SahY6am-)qeW`Ata z|CsM_S@nvX~S*&d;14H~uZ#63s_dA7()}8#8v08L1 zR{X>dbP}Plyj_oF&6;e`+uTELbK!1t#jW;+T!(Ms`a;cjS7i)$*m2aV_@w`5%I8!X zOZ%md2jS>!q&|V+L(W?Jzv`8#y-bi?vK zl!JuwUGgBo-@ly6Bk7nwBCJY&5dpa3 zodevd`|rnw9@#9RRVl8`_WZ{2DYe z-jHDi7MAEYaMH2B@e12!?|5DU&JOxwJ%Pte#oY)2%GYy5(r6qk`r<78;xCQvX0!im z*5pg5MSQf3RV{I6g)41^TdDBnYK413-j@lDP&;og<v7PGQH2-E|Lva#n9v@T>kJsL%w#9C&IPpq&EC|A-15{B7_wyQHywctlv5-96 zn{&|Od*T(9i44C;EM}UJ=^$)DMFb{PvYwu$|yR}9;;$3t~A05=!v5XIEqec z83Xfg@5O9Rx>K%7u&g0R=}WVGV^~u~|5AfH{ODU7erNb{+9!!ajD(FYLjtpL?S5NS zdL{ROmflR?2TX6pVpMooyYdqXHV}it*+i`vGJZJRT{(+vsQ$6P`4kRBrkug2{F-Cf zHv+R!Hu=nIY2zvYxZa?CpuK$GX>H`=>&{R!mo|{b0Z!TgL~G^6&s$1%NYG zwb(F*lN(s61=Z!@82cxh<3$We@aobhgCEQgf0324R_$qUs;wWL@c9^saef~k*6WG$ z*|FGz{Tc3Hc4~+>+gY7GBNfk!I%MSI&=}Fkx3uAIMa8vD&aoog=$VMNQ_r{u;a1yzXlGR z#BT)3`X^0%sk_F&zzkB3aTLD?D37sZf~^#7Zk8SwmClFo^im`xE<6%Q#sOD&3JeT< zUW<`o5D}GRm<88Nu#1|aO7lmT@ipnscQT??( z`s|oj505tWHSV#X6O5oNy8*}DIUiUOIn)Z84}+7qc%UaXm%`*@AJ9Ron&rR+7&7#v zjeoIHoUcG^36ZhT)&Mg$BSia1@X;N7=8V3ricjxUwBoj4;(t>jgN7yZ4b-3xluurmDBk@D6M%jG2r{%#S+EC_i@SO1Xfb`Y>3&btj zMAAs|WR$DW-PVsP?5|W|h8z)n^?TvL+RG7EM<>h#RDDHd%2{7uZ6&@Z6~3`u`}6n@ zVcQ2P2FdXC7M=~d9Fwpk_y(0B&+t`pYdwdhqF*4sVGko&Pe?>8eVMJ$y=W7=m`jwf ztsfGh66&=~w0_hvW;$?jmpZZ4%&DT48V>F^p!5ysePufa;o+?)6wK_=rh1?=qfjr; z-Hq97Y|69f9USW~otG?xc(yQowg!ax*yDW#UKOK40vMqgE&3cvb|_@gNBm5Sz( zPZh~db`3s4_-Y)j*YWlgX=21|TB$`jS?iFLnEEI1&Sr$T>LdI1UkkA6OY`keTyexm zu3+2HL?J)aL-8qN)+rsdHVA{Ld+ezDkWmpU`PS0Mo>Vv5V)J0$d!>eorBRdP{crR#~dPf}%Q z6DDdeGdiKE;^@>&H!36H-V`qLl+QUP;{Hw1mU7z7OH}Rk>60E(PCloh|YsigPM87Tqi@kLE%UWe7sDAm;4LXJ7i3mAXv*SAp_I zbpy(mz&>8R7*`xq&w~A!ier>~*5OMA%#Ltk@|SlQRp>DMf3=?t_Z0IlXwOJD0D2jk zOdIFGm)88xnrj(+e%3PIJ(I))pAN(|Pnhqi@_uKBG-1=ngXvtzIh)Wy^dmuIS9h4K z!#B#jdRspxZC=s~xYcQyI^GHSxYb!t^NRFQH%xrA)v4*NkRQ$$!bPq4AyVOSq*!|? z>8P5qi4j(6gNa~|Aj zq)SCKgOPeNjzZ;RV)rabf41&RkiCsmQ#1>;3>IZQEsMg2@_dPl z=)S9`#nO%{13ZnWXjTnU(SD}-NJXC{2o`LdGO@M(0@A&>2pqNmQ@daNf%B zP3J&EV^M>}(r_OaDd&8;hA62*kYxUeWq7UBVirf7y5fmm5Cy0~oNe z7shS|dR@wcPjL62@y{lmU#J2Y9$?r{J=Lc!p~&DkZ5N_Z%wez_-=7TrilMsDf~t~2 zHui-Nx*>@k~i7~!j#K)gR-&lj4eA9i_EDVZ+AHpW2?^7kAkeGZML=L{j zs&~H=t3$98U{4)>gyv1qvo>O0m%=gI%N=9ZhRqCPzL-2U+{T8J|BUmr+YV+=DZGsj z1z?sR9@%$cB@TQUH5)_KxAAB2FPgsB5DT9w>VQ6d=}bY~IFmRu>wk;BoEor`s+adi zAZI{(`hJJQu0-F{*fXNLIekojuVDnjvyha}wzC zwlZYZ3-n=*HIkytlHv-HBIMn1K@@HD7D=?jlBf|i%!#6GZg(g-+t0}d#o2C2@)1jt zAg^-Tq@posv?1?%X&sb}{34mYXTh*qWE%3mJt~S)dW$4_+ma~LlITrR6%p3cTO`q& zmPEZRiMHMlm5AOViMCo29hwov6MQcD<#Tufxp>)<2|xNuHRl;CzO%$qTvjnI5$gFN z{j=#%5gT*YA+ABmEcit45y$*lQnLOvXead+yyO!^pw1bdRaBsJ4^MiZW_th-h|hgI z%_2jAypMO%Yk#Cf!9Njwr2KK+DzxV!MpuH0J3nbv6rXLO4{*D0p{ql0r4M*w!1Iuv zOyoY^+d}S}IY1M25`upS@;YQfn!gLzrbNvJm|Fn#W5^t!=5LN|kC<1hjlLUTU%4P^p~=wW->QmomTiXPu}j zN?{z&n)x&a?+kWJekpw}5B%bvGTc>Uckqv4OX^XuEpdEgzrJ7(e6f!zIa~R9U5I&S$lh?%F@MyPiL89SJCs$hhek1`ZAz#Iqd zv?SVCXbsznyn!#7z(8W)uL+FYI}Ul&f*%%|M_Opu)`M`nt^WsswDqrOfp);(h0&U? z!*`!&BzYC<_BRC!FryUuU^Ei(RSxW8ZUf~rF>;Y*i@{s<9uuFHCml(D5$i#0vBQH%c^IalEmKZ6$ zJl`Mumh-4HnJNE^&!g5L@}E49xng48u%P%e+mbST`Pvq+7aAoiY*~q9E*S18i za~-ZMah(?9+L6e0ro$EB^{J76$O0w<+Y`CYakz5D_4^pt&P1-$9WI~6qtjo+xL!!) zI?Lg*0&s=la?8fvUo-3PaGk#Y%%G;vWbp>+p2nEeUropCRqxf3Z+HSWPcNIt{(C>Y zp8gf-tej)}NwfzIlm!{5KEqQ2y&kkB`TSz+{4A%FzhSUp-{scdqjGpfuixO(Mz_2} z%1*a;^;osqt)7r832A(0+50N!WnaqezHY_e5Trnr>#{H968O0jsA639rCb8PZ~|3o z%f6IL;NP7<71FXV*A;f@NRICGaZ(PnWqbmqWnU1Z+3C^SOt8 zmy^YKeYVf@G9k&N2H&>gD<;%&I~=#ww!>qrnq51LDv%wX@Pu4KNQxak)66{C4xc)K z33m9K6PRF!&z-;oJAB~;CfMQcPGEu^4iK1Nhc5}(ZgS@f7xZj=_nA))U-psd2KefP z=>~YP_sS=PsT+8s@xZC?J+rT8{fG1ge2t>lVV|md=6G?|ZCBLwSstysLeDcN?$-n; zVrD(89eQc)ux=<5>%j78s5iR^ya8SunjM+dh2gj#j#VeS+iGq%MSV5<754c|^Zs0( z5H@tBn>K%W|N9^8=@xUWtb$$%Gaf`clf+++hT9y8RGSPp^nZ(c$c(D=ITj{&9PMZv`4mVuvVVDHNs^R7Q+a4vt;UD6JK34vDt7*&Rg z<}}bv3a4h`_6Uc^LJ2>4mFW7sytW8=Q!RMx6?yeWPEAUd%8Z=x9?6pkX&k|*AZha12{2!oNSTu!W#lXgk6jeLbCNCJeGhcxQx+I{J~PIw+RXQI)j!(n ztC`y9#TIKuzX_LSvW_jb63Y-SNFqD{q5h_FtFC)^cqz-p43)?f{?xL4csV_RSy*Ys z;$1(*`opPCa*c2APE4-Aks9(!9dApe2e$uA5bIxf_F`7|rF6V{-lRG}N3T_MZnZk& zr1Yu(3Fqfsn)Zp|8@7dGZE-?tFF z8()GQUTyBf4cEH4VzYBK--saQijk(SYKgJ@v+h&#cf(2?BV)$!P}+#*JZM2u#9f9J zho@Od32jnB-;48a<;|B$4Oa5dP1)QSZkQ?M80?g-jfAPN?G_w)nI$0`NR9c;Hk(+Q z6If_GS!zU)2gRDdyz#GmQsejGhS_$G&8B*zNJ}^Hn7CkhW5N1xcrHYV;slpT&1p_0 z;(Mc!!v)>q0yKpp7x~b_;dzp3bF)_D<(*hNayBID+iBsjF|)I0yV^dobqYkf1etl= zz9Z+bs+_}{b5{w88-wRell{xK-A+F2w&0$JCGqXKWj;;Gay1{b@A)&Pb06O?XFvaf zH&714QI*wc+)334ue`(wRLC+y8g44JLKDL)PqD+jAFBb4o>;gu_1x3eV+pF)}p8_VAc zW%9T$BfRoei2IIO{#M<|G|>~oE8mDSQ*$#UDDv?z+0OnfPf~hjzG#xee&b$~!OoNf z$6%X?$!nbn(Y#T|&m6+{MHo@Rve{10CNOWj$q<&X{zI6{U2XywB?eA#MR+-{RN#v4 zZYE5D*qJyT3dc9XEB>U4#q*vORSuW)tmkkToEd9;eX)fxo7x=PUrW9>^8?%77@$T5 z;JKnQs(L=%ypsJV6kB-30_8`&M(@6n|58ZP4GQttq=8V^%x?Qilz(zs`J;{e<2>>& zHS+r;$v^Fo^0&X5PXB#Oj>0P*gXZf0rb3!tRES6a=Lk)!zx)13zWly4qv2-S_w;bX zidTrOpSdrbxZ5g-VB(&ntG%Z6QjgZuUDj8E=|@iI`JM zJ1;@ChDmNz1fMHq!!-)=%ruTO%Gxi8^z65=zRzyaL&l|9R;XM3;&O{W@@yYc?hB79 z<*=z~Ggkr6?J>$@089sntlpx1=Un*T0yhs zTg{QvFVkcs)LpZ%2XQ7gn>VgHw^PSfqs-i7WwtoewFe^`2fG^CQ~3=zp`PmZ*a zNRdS`{)y{hoi2WpZvN(d$JrC8Edk9_~Pc3Dx#Qs9r|_t#yBr*rW`cQ)>HyZ?msn(4po{)7qd99M)r z5x5@_;WhUYs1q%o!Ke{J!;Pgp!PP4r>TfKw>W&Mq{Gk(Dm1VB6HfM=ep7^4KJS>_= z!U#z?5DlFd9?jqxSv7J0s=7aOj6agKD*uybKJK+@;$KW9GzDtb95)YeQex8QP3a#@ zl(pORLuNkVm5+IJ_z=pRh65LMUw$`cVCv|h?SK|u^OQoI8Q!l5p=Df>$akONdp6D& zn`GV!rHgeKN$@$>n#;m@OZeYFc;!_lyFXI|Pj;smF^}2`n7JeW?NupVDMEtQ=MggJ z@_t{0x}tksU9WInDU2lRznNS_c4u>Z>6yI+%E>{HR_b#phV912oE>q#W`c;_dFD*{Gz_@-+!k2W6!vI z8lL%8V*41r(^1e~5Z)r;Ywq5GJ6-?$jpec&f*C5P|6gqv(`}0B;TRzfQ~$?)$NK;C z{&CC2=lh=d7wz|lsA3Fg>-T}?mTL|t=_LJL&}>da*{R``IZhnS^EJy0qmX0NF@MsN zKzG13>*d7s?sd~6`$VrHI%gMFHn}3HJ2MEQSoomE9r4guA>=|;&7vjTyjjoi8V*M5 zPGJe?@*=f&oF{B}!Yg0Ire;`z{Ev&lb>s{g*M8(x*jeAlzbZj}i{IGKbCTCb$@j_p zCjVn1v@pxwU){qtr)n4Nrs31)ZMFF4w6rOgW@ab#5A;p??j9G1#WL|CTbT#)f5gGO zNp=z$zo{qhEq8L|bl`mzeYi&JiQ$Hiw^1_T;Yz?MoGv2skGl+x-gtsPL9YHXxQs-? z;e$5C%w}~846WYN1e8_$b&Yk~A`dd>SRGzh8W(#mA&JLjcyk8j_^9TA>}50@{tygy zqmO)_z;vfi*h+3gVap!pb~0&34`+Z*e%3BgSm9#XW4I0ioviOF-g&n)XDp}lFx~%g z(A(}nrqurPK&ideqjsGM`PdUOn~{(fPihzsNTO*N@922UO+6cbrGM~p_@uG5VNZtr-|A4|>bjju_fk&hpuai*=hW@- zG$-bHQ|y0lhI9Gkb4H^++nm*v$plAXG^dOB?0CFmqhL$8ZtK2m<{o=adFH?=4STw* z9+~m?XFGKtwzKi&hL=12{aJtaVLU6=3m~i6{0bixUf?HQ!_z96J3quVb=2RNB*F{F zF*0{QYqh?*#Wa_%6HR)Cf3*VFuoUcZYpD(sUqu#otb8S>s9D`VW6_K-J=wL%y_yweDv&i`~fCpuqWgcLK6EB`)Kq-=O?uq=h@jx!qYVz zhx{;Px9!lB7ILd5RfpeJkG1XYa(%er0;h=CPR}Z6PAFohiFP9^rn~IEynvXof?P}1 z!r|E-Bfg_lzF1wiO3meP4jVbmg+H&@3x$uyN2473pGsN{s=mBjIy|-~m2i~bbHwWv z0`$?SiObzUwAJ^wRAuXV0zi_gmGx%E9-9fxBz0Avv6o^nQtr~tp603&&%IMq9OR5?&dliA{>xCI!?ttv67c;q4y_l|8=AY@ywrNOk&tgI< zhO}>BWS%(9xu>}bh>tnBx;;8F+R&Z-;&XL_GF#9*GJqR*{v9x54fF3~o`Qo4=FGnz zfG50SGD(M<{_-10wlQKQ(IEPWjBwLiu(+10G=Z6kfm2OjPX>4M=;sO9PFve^TR^n6 zJyYUI*-`a;_}#-8iR<0?dcl6cm>F&yCk35NAE&t5l)z0{Y3B0`PP~>l{=O`C{mjd! zray_C#uMThjognIvucjdw>|vl8U8z zww@Mc4tO=Zl&6PT1-zs?l$*?~Ssab7;K4{wJBHa=AkJ_-vCMyc--&iVvYYo-Onza& ztIi}0Z$L}qQbwUEj7m2>bJ#0-e^dA=^jEv3EqkBb{pcKwF_zEIZ*AnOlnt+)MBPY;*uf8MvhMhOl#%GGMl=t{N*jTVB9R7nNN5hsTcTRa-8jIiX ztn4ZA)YSe`qG5YH^&FLHIj@U}eDtJU&JR5PeQ^IMh2OG9kn1-a%boFlw9`er|p!PKMyyJcC>C!)VhKAZY}l9-x~Ix z>m;ZHd_DQv>}vZ6_mQKS&zPP6*VX-9QD7!2=kV?#ig|jt>D^zWUTnlNbz-2Bpib~k zw26E74W|fJJdux4MyP)t>Fu96W_uGyax2+aoWwTRG<~tp{ygGME%C>sy9e;S!q~A9 zcYoHdpE^*i<~&`WQ7H^J^-opjfwOFNWHFxo$zq#e9+=E*78(m|W^wM?cY;$V@k}iH z*8Z$ukNih?JiwlYDR+9ei-~DUB`bfExV2H1PeJ#{-}>hC%`(E_7=g_G*3GPY2Dyd6 z0&J6D0&0BzX2sryo+RT`iFP4mfdBk*u0<@rofdOt`L|En{lDhZ~>kN21M`Hzh7 znwfD4krrZVyj*iiJTRu#10t?G<#DHAyyt&Rg6;tj@A;2-|EP|Z-uYLL#qt{&Z=#vr zH*Qbw`BeCyS8`6b&?lAO)1S^@B^X|D(|^KG7lp%s^0Qx|a?^HPSH`<%DC7yaIMLH| zm!wbV+c&(lCp-UahHG2X{ogwor$aS!W(vgk0mtvHDgnKh-}ZZ|;9`clfixO_WvBsD9%jjQDC#|m<{~E62Y(ZAurMv4M?p(KZ=w%ao z*8PW;s(iWm(PSIZ9-6KhYSt|U^rDsdYCzsqOa9i#_mQhs$bpj{`ESFtgB6On6B&1h zo9;zHwJ?qcc)R#XQjFB^ha8^XV)nw+&C}d3gT(V@qt+*$qB~9DO+QqIJx^(lG~8#a zS~>B*?yLB*klw8E6{1Svyf)Kr#gP|JBa?~qiNyV^vA-nVnm=qtwo?V~Lz1?%Y|6VH z%B@gXY~L6u?!#4O>;@!XgHO`Tyhzs6&|Kf>Z}-q~}+bDYSJqi`gf8@K;= z$Ey|n??8P1>vm((Xuv$~rAN^&aeMPN;u_kk(8z^7j$`-hMYy@AzOv5U_lDWyo$|44 zxEbumg;&gw4K)bctB)(B6z{R4x9AzpXygD)u3!J4G{<0c?1on6*WujAcv;oHAE5ie z-18!jSRtQlhW*GN2~L==8QEE8bNFzLyFWZG_9e^I=i#P4*v~_FpV3}3Bx*doLNR+E zPl_{puC{l?uE-;M+IS?Z_vf266n_WdxbWU^<3}=#Q-!8sZg^l->uP^!8(b4%6d&9^X^sn&Av!O@+URtNII>v}ut?*nK8s2_dWR+I<(C zp1u4AL#y|2Urz{z(g@xAa*E-s{7B?f!sss;nfnz)lKYDTZ{{CpFyApwIe+C$N3i`l z;imgG86};4%!mr(c;u=v*>e%|P36{oJ?wc!#F=Ka4rmECeev^n23rGWH~O?>iDt6( zJVYd_o7=nZa9a|O9GS4NXX#D{Uw}Qo?EM#Gj74Mn!INlXKV=3e+zrPkJI-;B)qc;MEIh!gmf-#ZcpRc3{^@7Jux&iOrykJ(XsO zNh8PQR;{PO&mpw!Q)D&P?TTFfJuRqzHVzYsveLRZmdIh)%*hqlM#j#d)@jB6{2BVKhJqN&wSw8$chtHry8b_ zS*O|_MM%;%y7}t$x|5t5bavRbv#P^l0@KzYX!k*LYY^3;f?HLK>mp|XE8M-K$*{lcWBrxyVcapb<wmB{`&1Sq)Wu_z2{Udei`YfTo9oI|s?dEGt>6yXcUS=HW>RaCv zoci{}Dj3vFQl}0hu%r5RJ~U5#`-YTM-@d|6tZ!Xm6y**mkt4WCu5aG;s6X5|@nQJw ztZF^vquE8SBU%UR(ZuyL@sCZ6uVx!LyW{u?_WFqV(dzKVsWA;Am4u|T*XP*L^zgT> zgu$`bo0`sb@Zb3;G>^S@sT{D%i;|PjKHqRCv+yHt;UwG3yS}A2edtGVZHF4`chLWt zjY`(f8{_;(r}8J*0uc;{^gcvd3SbdF-)OcE%o0 zNKS%1wmX#Z_>te@B-+EHFXt8BeTWp-T<0;#`7$T#Et^v5p&Sdvthd^GlFK!}9|@z= z#1;{fm`i)Tb&%XEmn&bq6^7V)>wSVd%4at;_T=+**^hj_itntqGR=DHF{Am%9{uWw znP`e9oya5bBP}@Yd_U9aU#Dk;^BB2jNLJzi+Ye!eHVYc%W3RAi(kziuZ50pX!-n!pFI5V!(V*x%*UO-cy->hnZ6y3ym}Yyx~P&-6&4>u4LPMA z8^y}AcVvQy=Arc=whauW=5qJ(H)?XT8zbu81uP zXJ5?s7B4g%`ku`BwDb<0x35$PGxq4dn%*N>v zzC5V+u;8S0@|s^#(G6%|cq=2t%R2#>|WuaWb+#`eZHzG%~lzEfWL%J*#NiS4#A zG0Z3mLnau+8`&CpEpowrp3igoQmg&Qy{4pM=be+^e_`9lv>$zcM=>Vx+NRYFC#s2e z-M(U2C;ojI8F~~+G|c&L-0(}dZarvK()>*|{Hg*y?dov|oEpduH#}w{ZTCdFN0GvB zJU|T3KGdy*?kncNuHpA4GSBcQr!dh@fwMeMq@-}EiSdV|6i!p<#EiyUa>)}XeeXvB z&+^+3*`~ z6=NT1WJEkNzQ)vvoi8s^rj(a4#kPmsWpUwi2<)iqy&amT>z&H2igz-8TTeCc?fVY5 z=ftxl#co4WXF`DML-dMFBi!&OwNJZ$WPQ%Vm_6!9^!^==sMyP@<0h;Ae0&SZb=$tu z)SufLu3e-0P&akE!F!XRX*TX8+xV=tl za_uF|wbv-*q}VH$K-p^`K7UTWSJt@+*R{^M3J>2Rjhza3A|a8g!^J+_uut-^{{w}? z6ML`bvk$*qph)g(-n2ExUdcPqsh?QNm`p)^=gD3-h}rD|&}Xv*Ire&233%+a9-7Yq~Y zXK|{$$!J=?QRSdG{PnM4TRc6=)Be7q*`Tx)tjlEXzJR@tDH5dT z&z@Obf1`ljg5cQCv%lx$?|Yu~qf|8>5jRfcNlN6M0{%pP;2mBPtMekf2tqr1iT%;H z>eISDRiArFzidqv$JCL{mDk|3}B- z-^PoS^D|bhRS#%aq~))M5cA{j+hTr-?~1uCCMM;1UQ8asY%#7rzxq#G(BJNg3mW1I zvftoB{Uq8B*~eYOs{p_N1g;(CZj%=@4iR)(aAsTsj z%>`)fhTKUAPo`p%4z;Hwc}LlAk6yFJlgVjB+hKomrr`?Kp5c|}o5U{hBsRz-_Ms=_ zjD*Bu<&~J89!IS?#gkS$Jx5|%Pv5C*?7(%ip)bgX*VKB_dV-L6#uDu9NpJPzr!>IF zp!YC!gjK-l?y2W?2C;-vGkr9S=fS85dI5Xm_PDjj8KowBl)A(y)!C!e=?O}?{he2z zm1}N6EG_RuTfA%hQ#@t%o>WUP{?m6DgW$Rbc@iEB;?d^Egm?_%8K1oAKi*yGlfAo{ zZ?Nq@MR*f9(`^;ZeV*J*PSN8^qsIu39{NObc+F>?kW&-%Q2#N#?T<7L=Y>ZJ^>4=N zr*77o#GX{E2}L&JgjdYFo>28j>}K&ORCm}+fAn!`^4jR>#VtN7dU~mG%ZyuL+-l>7 zjJwFVON?7@+~vkyW!&41yVkhtjJw{r8;sj*+y{-j(YTKocaw298+VIww;H#_xZ8}o z)402g+iKj`jl0{pZyR@yarYWGV%+`4Z8z@c#yw!%Z;Wd_qx|}fn_=8c<7OGRr*V53 zx3_Tv#_em|e#Sl5xY@?N(71z)JJ`6n#vNwdk;WZk+(P3{FzyuNPBU(?aZ8O`X50$n zRvR~D+(pJ+V%&P;E;sHfg%-1WxYVBBWoK4{#H#(l)Nn~b~JxLb_7)wnIj z-DcdK#@%JyR^z^I+}*}~+qip-yVtl8{OanChwws9{s?jYk1Hg2wQhZ%RIamN_9(6|$fJH@!uj9YBnQsb5x zx5Bv9#tj*Fk#Uz8x8AtRjk^k$@2L3giiNwjOs%i&WA<#y`U&HMwb8Os!rl;8E^L>u zRl=SX#*)Zt+al~~VLuc0dtna>`@68ag>@&bHhl}Mte>zI!t{miwk5)fh1CeVNtphG zQ?@}EtBPpZHevklCt9{&*j2*xnfkU|Vf}?&EKGBnwsVC|5!Odoxv*Zs^fCIjqlD?x z^KE`%8-;y!5Uf>LyRg3q`$*Uk^kQvq3p-2LtHQTE z_Mx!5gmq?QXuDn5$--_Crtza~k+AE8RSMf6tW?-GVb=)zSXiO3UJS5p!-WkMHdt7x zuz|vE71mGK-NH^5_M)(!!uAV0Tv%sjFm0BwUc&zV53m8k_6y4u_JOcMVY`LR6!wxZ zeN?G!o3Ph~Jt6E%VVi`FX42R8Lt*y`+aPS8usejEl>xR&Sh=v9glX>H783TUu{DTLg++ud751*M`-QzO>^WgC3j0`Ci?G93$+bNu>`Y;g2pcBseqqJJ)(cxA ztV!4gVatVW5_W^Iox-Yx?G-jh*g;{_gdNA~u5G-q3xtgnHbK}G!penRD6B!)*~0D> z77+GpVaEx3Sy-m9KMCt3tSh@TZ3n&vJ4M(h!iEUjD{O|aKM1Q4)+($~*mhwL2-_-5 z-w9}YRM<Bd$G=t$diCrD*d=o`hx&pwwK~f|9=`E zxrzBdhk$&AjsTSYWWYBLC#IP}Ohx~m99=@#zqbCQoAZEOLUcv%8P$1+ zkZE#s36b4i(M<_ZBShD00Cn2>2=Kj&lcM)}U*|O@50^qUmk{cO_1_9s#;XByJ&sE~ zwjLGbIe_K0ed)8SXM>t=Zmr-ZmX8Oxk>!4h@B0bPu}&0=@y}3NMcIjyqMKurK5h&l zO8^NPurTPD*~Aa{X7zQVlkj5b33SSZYB%gyH5g{nPn2t7QpM)0m-vVnE8Ms{6`tQf%P%kN?y7#{MK=3PRn<4|H=Mp!9zZ_j<{k##4@~6h#gD z$96d7K!{T5j_=cakRjf_j&mqyh;lMchx#YjPm#HIF;xQA zwSbbmSvM+o-P{297U7%#m`hbj?Of&W#-F30p@7U}t}?zUOdK zWI27jnz*@ys6LI=T|S^WgSldTLjtc1XOcS|B$0PW7dyS0u8_uZa|D?Q>1Ha9s)f0t z_c-mybVmvjBDpo4(fS;2OfwUunH%NDP!4dTp{pxx!}88*^#Q)#UCk z_`W~kq}bXiw=bLsmJn6|OmME)mhPjko+(_CR_`cV1V)gYM zZqyY1CQ1ZHV~x4&^rH7@d^(4aqkws$TnfY_$HseoY}Q;tq~Cl648e)j=PGWb#m)G> zg*Yj8aculAk>&R9q+>1_P+<^i|nQft{iKd!RiT2gVS8Gc4L~of`mxFwc^znFcmP@AV+gE|I}9}FLWvT zVzA_^Ci#@Xn11do^OvG%mYJfTW1nnj<`SaxyGg}K+)T2=E$b0(WFPGnTfgJxVwZ9R zAxi&PeBUuRvGn!k5LxbgQO?9kN#7~!(~)N`A(|du2(vYr8#4}ybTJ{SeUl|i4_Vab zo6C-S=sN1oRV3eBLJEOK-Gu?=;vT@Ki9?F6ZhZBv<`SX_?RSiitP(_)hk5{HoyE-qb~p=OhcZNzPr13=rKpvuwGGDi<>18XMxH~NB+6Kvl)UZob$$+6 zo-tj6yEN$A6{i`P2bfE90BL=ZD93Q~10yM+Uo4NA1QGT@b=NpR?%gO^H{%?FsmP*SB!m17N^I2A2XT}az3$Sdo#I$t zF5yP$j}YZboRsvPybOWKTtbvelkVmMGP$|d;!0LC;9HOL|7BVKlCp2LI**mD&jSWi zpjI)UeU2R6$ll!njm_3J=f+TuB;-^AOdKsLMss5>XRazdR&GMVFdYP}%{WT36LrD* z12^jY4Mh`V74IpkDw#N{QJS~-j>kEg8*@pB+usShN{%ieuLEa@LytcsOuG9t?5ETf zcf81f%UnVf|2W0(<;0g9U!bG-r^Bg6Fb6PWrIIuyQwE|Nb;4$Cn6|%maHgnO9Z4xMWsE zFoBw#$F%%P@mxH)yt1@vVFFb$O#JK-72|`oRdqG96Qe_C2l{3&#Pk`EZA%;b;LBsPQa9tt z_UHnkE6@#4{ZU7JIH0zqnYt>N=9y~OSwIg!P3st-C!pc!IN*3dQ&3ggjp-b1xhL^sul)I&kfWrEDy~tGZCsBreJAcepPAEnot%D)C8}u z3)Y4RT2NjZtTKd{j0Gj-6>2_7Qc3~~N-D}7A;aMzcBm>)GCNehpd=Iwgpg~ib7pN| zw%tChu|-9p8q~0AjW@YGRF-FlK?BpR>mcXJ0|BtI@rbI{OOCPO*PrLKzjZw#+qqSxGh7m4Wgx zWyqReRaYAvQ#BiXt17M8bv3nBHHB5R<+>eSQ#Idk$zt=X>q5a16;-oJDqQ-wIpc#B zL|hOotfClltdXOJjjDvNpro>7F8Yyjd8Nr+f6Gl{)G%vUa6$R(;KW*Z3IXrEYZ=uJ z)#7=<#j~nPYDxptiK@Dgm0wdsE*F+j3#!P6X;rY1FxAH-YE2FX=BoY0}pK%00BWI%uh3 zI?ZWLIinn-a&=W@X|TpZ<%!ifR;Xt2gsQ?|4Xt>7j!cweEf_E`H#_IT+(A}#P1WpR zZLMA177S7-wQrnh5FlRN-F_!eT~;OO%ns$$h89-@jl#1^X3tY6RT`WVtjUp#c*AvL z4zDShZ*mZFWT-VLMS}7x!if?~ z&%LLuc*%1r>T1h|*3CgTBfO-7ZaoK!6qZP*kXPlx@&inWs9FNlX(FM2OoS~l$JB{fMoo+H%3`!~Yu;>oXy~tYue{i0 z#L!eer#x6QyrN`ot@1M78KPW!-c9$OVc6T7PCp&zED@Js3{ zLeAYBnRZxtX&!y!T*@68<7Od|0VAiDqMRM7s>!KTm9V?R9GXuN!=>t$TZg5b^rn%h zMkvE$!D9?LREqgk3xbKtnUv`k&Ddmjf1xV7M%g2;OB+gcnow0_<_J_f<6CvrrIdj& zoEaaSfW+Q-TwO>u9XH1m3qy6VWWFoaPH_$$w4J8ucJddMGmprzrR2+8y0f*9nFR~l zgM5{S5Tn8{iXzAK60uC%GHgPeQElC%BqSb8>zO+@mT&>KBH7YlMW|$|GF(+rF}W-l ztU#6Wxn&_wlJWbPb`NFeqP%v9Q)8V% z8(TyrHm0R`=w}V8S~sMorev{IB3A>r-BaaIi7{w(O)%s}qoLCO<Kgy^S-~vgW8&+4U7G#aL@c&1L+id!s8ht*_R~9eANS%Nu8oEmFg| zT!<<6%je8ls+*$n8-l`@4x&|(-0;|B)Cy7+Jhx77JmW^Y8`tW{%w{j2G2_Y`O|L(g zNmY(90dvhzX->|}nFDg{At61Xny15;>d6tgk#YbC&5p z<8cFLA0l>udCwK(;zpzT(o_V|n!D660tHKFR+p4}^bMT-Pl{it%+jSxuN`#bRaH#u%4g3r9l+&7uN^dJ`n4Af96EjJ^f|dhDN@t%mQ<*a zHJo1T)&;lJ2U!UfBF+%2BZD*x(0CE=t!LZgZ^`W0!Rk=$@Wj!4c1h*XAl4GU=?W7Q za0m4A*wEg8_M%0Yw~`e_-RzK+YYV^8Z6KGIYx2J|#y)?hyV$9*{#_OSUsDyW`7;@% zJ#~lxGYX8V9aRa=Y}QQ7%!r@cCvghU2L=W%Q;ki9HPyGz!t&BkS)Vz5%7Pja`pj7h zTW!+7oZBa5u$Hv4^3u{^Wo)=M2|8nUA5VX3l~(0d&1X?iI&^W7I~8!Jr8$G>=i`H& zx8ge!-J;`&N_kAiG*+^1Ixk7=S^YIZDZ`GX?o`dW)70ESowbFVtg`_S&>Vrq(88*k zc}NZ!A^ijW#uWvo1S-nsGojRUjHQWIh~KKXoyS8fZ59*Qy+||n9CW8A8&_SzFk=S7 zk<4jo$5jpsy4w{dbWCu8W(Z@83WAk&iXne!NzJ74+H!g@MoN4B2W1$gIalizu??|% zGBc?#GY>NmFf>CmLu$~TpL&9a)P)#h%{GH!V-c%4e<_oc%DjpyFjAB6)PS)?tOQsV zThzRuRaa>|@62yPl_q(}GLyTJrb=6(@=!%^R!NO>i#ld)GNGz^OmI%fp1(;+d&T0_ zXM$ofzp7z{#T<|+7mE>^-w<{%6vpI8i*2JK1{+!)nqN{qYCbDzCOA|nXYa-Yv%V`S ztSG5uRbkc)wUfz%gN~%><;*G%)v|IcDq%_x%&9e=0?ZO6r>vxQNJVv7NltmKq?FXK zfl*OaQ&e3tJ2+O;>RH+$f_;3|LRXX>Q(3dIlF*c##VT2&VoX1KTw}tH(u~fOuBnK2 zp~hFZqcF6I7~eDrvWN{(T`Ji?`IgF!P*zlIiJ96xVvO1s{RGoF=BCUQ%S5rB>JXlehUs|rE zT&T*Ojpy3)9i|*)*S$dtJJmiW*egkvBD!7cypv};f4PIaVTknJIxHUPUMkG-geKMo zna@?0vSsBoY7g}M3)#k#xPp>JlpMRNY-X7Po?o(Pi2ZCWO=s@uJVn*+ zh+VJTyMft>UArB@W6i{_-Frt=#}ul7`Fdu?jElNaqct|&zNVzkFl@In_r@b$bwpc6 zHJ)ZxT3$Mgb$1$RF$>xTN+?I~<|w5ZW6fX0d;?AF0QH`l7rXaVk)+$$lHbFk%94Z?9v3(|%T3(ij)KGE!%dZOE#Xm)k&Aeb4) z99ESn)S>o@6>>F?7R$Bg9#?i~aBg{}Jv_v9&1XGhMhp)lMP3sc!{aZvbYixGJ2hOE zN$Nb@WGR&nC?-8Wmd>8Vbd$wYU&awmE`6v)4xM_M@+3y3mn zls#Rot;5*%^VrjzkYL3e>xQbzAlpIo{nvn9?#yjrox|ge_{!ZG?^(GglNNe5X`Pv1 zj+y^`3u8hYyMHxth>!Bri$#mwDd}m0^o%2@-DK|rWNF7};Ld5|GuS?E5RJ0Ne#!t} zJR{CbmyAqu)(<5tNZkid_I3k{ah}bxPL3^5)Ni=6ck>9XG&rknu6GIJF8n5&$+ea( z_ChdmIquGtYi8USdxn1bs8OSq4jRKSGRH2L)GZ12UF^zj201$kZN^m1tuQ-<+N+5_ zjuRz*GC~Saz=_FeLuCPvTMn_EVsDTr361f|+an6s1_P_eBKs*kkARFZYs+uYUOLY? z%_c!oSZpmhpPn(G&Hn(8QQ0KXb7gaDo?M55a~Xr#*hPzyfc<2hCuz0rV_URmomD|+ z&as6WCXp43VP!T{Qff9moawT=F=N(b=Bc*X8_;f$9&!J3$tyeTps)iL%Y@ko_-Dm9 zN+FHM;(>Bjecvhfv07zJZxszsEE>vvfu5nMwu;ined1j{zq-nt;lQwV?Frb6=)kPt z>=L#Y1LdIrv`Xh>gY_*(8v^#Tynxk@qX2rQZyU0_MyDoB{}QY{tAAi>Rb60i3FV6@ z`xuCJEUbwWh7YnEl68e6slUbZ)$-c1F(q}C=A;hW0oo*T+GJrBOV-jF?E>n|l>TC) zGgA6fjqV2nI#(97I{SdD6@0qY>1se^{;cEkWwiLL`aJ%L0OJJ0B4Z87+$+3=e-yOh z>tui7Fw4rtUyEOl--_RYpRMz3QwYb;l|O>B>G*p_@~=ny7EUovm`XaFsI13d%Sqlx z@S6)PYd3xtrvwj(jz5f}y6yOD@e5JtZTzfBoPFfqTG<>N9Eoq$@{cC``sJLP)%~rO zwMX~(foVP~cLj$&@!Rp6@dJ&7PshKFaQv1q;rPY36Ayn6et`dHG;{x{?wzi=D&nvMN-kS_k(7tlxdzvZ4kqSe2F{qS2pv#i_ki$CWKIllEb&btM< z|B7(@cKluVYdHv=Ifr=v;E*(a_Ce_Qt@yj}vrh6^nRCh4_k7ky{5||zZc!Qf4e(jp z@Y^r+S;P3xTk$2x!e2YcXT6Qze5udscOClX_^c3q^JVCSzxE2B)pH(ruFqP6um9t1 z#ov_Yv%bO49pdP!&{dJa=HJ>oL zgX$XMb5OUi*7CR1T3z`!pRc~o>eP&%z0mTtEVBIBi_z}}%h$>uNLuT$bp!m%vGoee zSGdaZZMu#8gt6Bh@ZCxLJF(-Pq_NKO7q3Itb)-RC3EX9M$-T?6TJZPaXKk>$=58ST z2UeHnA7JaBLEnUZfcjrpzCDjwovRG`CVVTP%n@w3)!umcRaKWIb(lZEmrw+-=xyo7L5N-s+P5JUZ{Nx>WD5{CjqSzd*iTw7L|& zNW5KEr{-Pow_5(dt5&DtS1oJL>&W^YVZXP!to^;^Yk$-774Nb9h3{Kkir=?7wY(4Q zL*#!*`hT=K<$eVI5qkc~vWnZ_{TTW_t5fwp(%NrzZQpPCoBxcQzrfdSb!lmb_E*an z_!R$B()-Nvt^J(%f3tiof3rFT{*Ju`U!dOs%h&v+r9U!s%KF;!<^BU3AGCa%qU6Ey zb#4K2efU0Kr{Ye&u5{y_+B^HYuJ!vmwRGXWtFKdGSMIy|{H@^a-F#gNGkpH6BYd3# zNBI0mj{WV@cSGTr@s@8%Mz?!TKZ7F5%IxA_Mbizy(-&Cv%i)@XFdQ5nlS z4L#DIzrw$gHY*;{HoH7;rSkNIuFH3WNyX>N*LmCCz)s@Q>}XGpY|sGE47?5Pa(w@D zsd58^tGhhl^1PRxCjw7TUY|1!-~V-bo=oyv=<*!@o0NPWDi7;;QIF0Zd-I^Y>GIh3 zdF+{D-$A6SqV{|BAHJf?N`FIV$yfsP{K>)SO8l67$Nr*k0G30aorWGDY!&c2bgHH0 z|B)yEo;3DAYkuTlbUc1?8Ucc6D%Kw8`m3P-=czKp(++I-*}*77oaH|=)rR8fN&G=S zKN#&QIp=$L99_i25M%Y-_n_w82>Mo&OSEM3q;#o3uAj+@6_(30zwXcK^z4rnUp z%^lEG&KuLv4yB`?*RUyFZ@$u%KmXoJDgOxRG3~YdMNh=->FJ-BAlCod!RS=4{Gs;v zsWdhKrSBh%{>odPo_l8t6;GP<1B5rjv(x2? zrs^m?WUIa(+x>H_etGh_7a2YOdN8^G-~Y8ohNG|Q<$fR+8JqB9GKQ@%^MefHeGctb zFU?c``av(#XbquM6(-^g2D zlXRC3x;!#gr;|~9STy>T%C5m9!zurc?4~|K^7|ec?QrfnC=E?7Mqwj__}wmwM^+KhjD4dLgfoeKv`f#um$tOJmQy#5Lp8X&ze~qAs|$=+`}( zb`CZOU3#aX1qfdcWIVGeN8Wue3j*UjY2Tv>wM}~BejCIFHqaUP6L-bterM&Dn9X$a3 zLFgBr5RGbl@V}K_2id9qq-gXg{A3*@BSLs}?`U)jzW?!58RF490y0mIM)fuw|1qiM zEFO(<{Q}YGH1SlW@+d!9&`NoY@pAB(E*_gp#^$r4(O0~5kG&M^X`6pNCQW^uaJEw) zFGy)Zns$6tK9&G)4~Rz3#*gX6yhG`(2il>%?xlHTZy`MUf@rj-AH?mSJ!9)`g0lui zqmMGK$LOB;2MBJtA{y1pGSbm|5#D+wZL$OUAklddcaIM8j#O_QoZll&9n8v)Mw{XD zzxJzm|K!w%0O48_-R|=IB|VSkFB!urgD%K9;<30KC$EyT78o`<8eN9(pX=fAq_r8^ zCYPrnm8YY6(u;U1FF$WyNNy7W!nJRC0J$IG`{$*~6^~vAvaKL$uh~|n=a~Rc;n-+& z9sK?W((^2WXP3+KbSjVZ+zE^v7mXI;$I9K)1|tM7f_|2l4z7Iqk$*e1guNufC0Bj) zCTQvUq>gN-c!KqX9k<=V(05)PjZVf-r|&d^`;CuARi9&YXWg}kpiI6sx(eN5G^bu1 zN~cm@Jbx7ZY;rv5E1f1xil*Jqm7S#1gV0rfWAQyYWlWAn&3oO_wA=MW={Gf+xGr|e zM`>>XHbQ?6KPKBl-%aq8Ym(+LN$q|k^fx<*uXexc+GzAzFWnPg?SALC(5FDpnAUN8 z)zOjAH>Qy<+pUMb8~TM_I=Er*E1-v<|Fi?Tf<5zMc`Gxon2MzdCB3Kcv&^b?Aey?|2>fIrLr7&q^a- zdiNy!?V4yb8$2c-R5XoA?a&6Kp^bsolaER#)0C$&XoH|7tf4&Pi~8bK(9_vU^YjgA zXp-9kZ4!E*J-QNj4U3o4d?%N&E)!*%P~v_>0lipC*ros&9*KVZNtC-1(0uZPmAp z(6f-8Oz%jp%0&69Z%CbkD_obS{k+eTDJ4G>hGUjv7V3bu9NI=`ddp(6 z%w}j?JD_ca)(Y*MH1T#r+Y9a7G_=p59q53@c{?jJ9F3~YBrHl7Dv?*!g zb<`I~Pt(qblTfyfo}vu~K8LPz9WlFk=+g)uwmKS}lZGxEEdlzjN#ED3hqj2g;WTlT z_7)%lePIXm-Gq;9Vy@l+{Q%)xppQsHSCD&g7SUWSj<1^*J%ILHb9KnzJ6>x!Tg-Vz zD*$lD(Q3Y)`A|KP7a;c*`d*CEt_?O6*BRWbpKz~5-ow;G2J&VO;RHUR&HV-VBlt(q z_d~Nd+e)W8XuQuF3XB0J0mZ;|KnS=ASOwexYyf@;YyzGDwgE2zyMYgY{lMP=i_b+I z4)g?02KoU5fx*CVpb)qQCi zy?{QzxxmFhE^rkv0hj@l0X4u9Uqrg^RJJ1UJ0oV(C0vrH3ab7$VI1UH^ zX9E`kR{$e{@xU}-4p0r;04xWZfc3!rz$3t8KsE=}S|(8L&Y5&-g1K6rg*KLO(>UEw z+h<;DwP@hsGVZoC_47IE#_jOYzzV5noMnw&itl&oG~K3^;l_7;!itGseIIrB-dMEn zj7WZ=Bflg4nvt(F+&a(Q5~Yp<)qpO=ujhjdvVnWG!>=>fI)B|dlJHU71NA^Fki~~B z3V~)|50E_?Tzp)T*Ni;n$-Uo${S+QR&*~c}>jt0oWyppv!22wxOo1X`KH$>4{=-iA z3;5ovr}qXtYa4a)R-ZKvxE~m`!e{*%C|K!Z4&$?yF;Vye5bdr;>NSvao6ou)@Zw9u zKI=~oTzb3D`u`<(v!whr?~CU--~V>`wL0nT-2@J-+=!B z?qMT$U_JBnn|;;^%Y4>PfvaxuS)T#-t!3?d2WyTyeb!Rs{}*r{a2@iift!I{!0&+D zNN+vx3t$v!&H^fddx0MVKLdUZ>;zs0jz^cPfnuN%NoyP)e zfgb=r0iFbY3q*jw06ob|4loj!0^AO40DcBM3+x2m0rmo40u~RWdjP$F9N=nT22cSk z0hR;nfct@;0#5?lfZqcj0v`ik0Nt?PvA{XN6~Gu^I&d9O3oHd505$_VfmY!6z`H;@ z@HKE4YqhD^|0lp@l*K6E6W~jrJLM4oEEuP z4}njC49fCEpfAuL7zUIf=UV&^fvc@>hDfh*!8=nN$a{n&zUIHEiJ^>CV{Cr?I@O|KRU>WczyetFEn!{Zi z{8RTI|8w!PlK2Bj_t{DJxk>khN%v}?$@=czi%qG!YJ6Q zAK>!$0@;E-dmR2PpTyJI3BQH@>MvY=ts(cr-?PmQ+vVYRc~sxD|DgZex?yTF?@&Lp zPPAou?Wnz-Y@5~EgpE@!bnx2I%fGDyey<(9{3)^(fPAkVzYD+QyLL>+@3o`kd+nHx zKb;-b&wc;|c=v#=Qvvm_r_+u%b+P*n*}0{g-L{2iXV`tI_8RKJ)wc`))`F`a9}d0= zTz#$hTMxJU4dHvh)z>P`c5wB@+6!5G1p3o2il;c!?n_Nv@OtRt*>og(LJr;nu0B?B zTEW%N3eP^u?rVjw1y_G-(gIgMExftA-ERxu1Frs9cp%H}mxb4Zt1mY^;OfhTukB&? z*}`*=w)<}3&EV?ih3kuZ8qM@txQtHBDpw$V}qY>9Gdk9-2I&s>;HHH|uyaz(p34r?Cyp^;K!qng12I>p_Y6sUC zB|Bwb7`Ia{xNE0saE)QIQ!}`0C%uD1W18&Ld{Nv^?clDR^nMPFbH?6-;&v(ockQHi zcer-Sy)1iB!pRi8>?VGC2ym<%p15kW7j^ev<6u$?cxuW_vw|w0;;Fhafrfzw< zWvMxe>bqNpZuz-&+$}e^%ru`;`MPE0mXljX8nfKG+?)D56qp0t47>~+03Kxj{3+lJ z>Ze>nazt8IPGas0uKU*!1L zJN})H|6|AB>iEBR{J%K<;Z3%@zK(x|<4<<{1&+VY@gH@3)$%;*kosix3wsDx-_nM! zefqxv+UwW)Mt(OyyqWmg_wNH}@BeZ@`~PzQJp=dwpgvn`B0UHAIUv6Uko*X~o(pJx zFL_$y==s1=jxHzSEB!N^`~QEcx5e97Gtmxo_1tIso1Vuf54y7dZ2P%{y-Xf9eq!H? z7T6w-yUXEIxHu|2e467-;lADzCZ2Vkdv5=IeTxNpoSIqfA3vlzv$|jL8ed*fesxB5 z*2Fwqe|1Jtf$k;^9Y1siQ0*^1dPMPnVbvMM$Kq6H7WWuYol&2Wd37JFc$05vedkP= zGOKajA9wzuVbxhhdE7h+q`I;e-!YXz}c!MMI|!Egn6z_|m-k zE=I-iLt?+74rcp9i~9^IE{0ls#*pH^Lrix3MbL~cc~>7D`1l81>TmOPs_tCf>1u4z zBX{P^Ys`l_CzQ_*UU*HgrYhgM`ue_W-SCSF`1;kNVFU6PSoM*pbNSXDldD%l!mZaW zTlItCx9{~zS8Hug-SQDJtA2kxj>7WzMB*&-{=V@ehUUdyThAQRNYLx)%nSN>r=|TS zQSS>?t@`%3wBvGT&YLi*$a!1n;)#{KF0WK?0&lJ_~iBo$SgA|1>;1fI-&DIy#M$OJ2$lE@x zddFA^w1qa!m~q0Su>-RC;?1H(C9}#G3>a_;xITF}Q&MJ@^PR2#hrM@?kE%HT$0x}K zqJoKX5v`Y~Sn&qgTu4@+W=WRpN&=At#40YiY#@*u+1(&j+tq+@T%++;ZPhkj>)lwZ zVykr#Bxr4oceGw&#dc#*qoRPK{NB&ZoIPjH+1*6i&+qm9BY|`FeP*6{X6BjuoH@?} zCcUGVrac;qJR3p1^)W)+5J_BDY0Q9Dx4W$|R>+sWmqC-dW_De`!`3#GqksqZsUAxi zcWzqU$N>^x zJCCF)Q0(Ex!WQ_ON}HQoxE@Mgf86dOGW&@lg3@Si4YP=(w1CtM!xp9o_3w~S+8Cs3 zWzif`He5r7jwCl0*!N{58ctCO;T8)^168eSP%lvR8fK&Ty_6%ch$i611au^58)_4< z<_cpTWGu0v+}G-wSK$_RNUfxW@Z45t-}kgS9K4a7vq}h*8_SIsP-mc5gbF+;6Td%+ z%YB}xOxA3-n;UL&SHqTti+JX7z1$8Y!4|RGLpQ3a-$77xys}7 z$ss=0tQJ_!b3>OnjL$8YTan`yl|fBZB7O@D2^$u}0ykO#G)t3aZ8vOs_}n?J1?6+9 z%dLpYH6L~)9SxpF=uM}5mh;TERc5&>^4*ngth)7?%|_!g@T!MSXtJZ>^SCH=`OBbG z6n43|G;I<6r^t6Xa_VqYYn)$-Stvt9kvQEt?pelk!obxA<)xyA8BI}Z5#)kFbOaUTB%1=XmWaQo zrjW;K=Nw&1w3h^35o=+mrhdN_u z@Ll8JRSY9Wq>8!Fyr_b)z|%1+mYQzfoBa5)w&tk~)$MPphZ!R3X>w7UcKu((mMELK zBAZcV(uP@0v#E+4+{ErI2^q0_vf}@T^vs;q#u3;SU<$ zU82jQ*oB=>cYU2}vA30?uJ^j3^LjPrGH#fe#Ka1zu0+Inyiz#Y9Jw^fa8%gb_#d|@ zho2-d5xgsQ8A&#=x)#%5H5|EJ6st^DM3=$}RN}b2;3-OAyq*(=2x|QpW58;t;b4Ur z4&+#~C1%DY!`vUqQ1FbAGB8TqmuQKS={h|Im%JaJ9LcRWW-c4N)JIvZH87+}=H+0c z3R7VGkr=Hxn4#3yxSP?Nz#^)vhAJWYq4K#kV)9VQ`!#D;2@D8%oBgdd9`r10Q+c|j zpLJeyQ&Drv8Zz7v)$Mc@cU20)3hEpUOl}rkd!_I*FfsHde5sSO&{yXwT~Xk0Oy@S% zF|iUod3F|W#A5!SwWoO)^sLz;f5;wGn7eAYn^6?xsH^B)I3%D-_lk-l_i{|ExTR)p zz?}u|-6O>;(l2JcqUhquAwX`$gRmlm}=9bwHo zU(Ht?C2*(a(O9pAsmQ{lm#rGqe49Kb-(AvoE>+5?!humTQ8+x&dvtUnx7J)xI2x*2 zVAqbPk<;zd(M=aipnTBLQdZ=X0|W6bY72Y}L)ek=q1vHSzU7TyIUD zP$=f=#oUe?HDuMYxtzW8&|L;P#HTLdiTPb-Z!SpkyEoz|86vERjC>!A;ak3Z4LYT& z2AHcMlI}z#P$UnMKgA%Sg(CTFjN!M?3k!eb`E)$ba!C-15J+oT+#U-B-D2{A>_o=6 z$hMjM`3i=DzGUqtUlquJ4KSyCyod;M8;wRo{?QWw0?`kChxz?=Vs?Z1T$3VT!R)7kfBD z$!iiSjSI%2mU&tu6>F!7q5_r1QyU=|OvY|gX&Hjft*%w8!!B~f4iwdN*cc>J?bv1D zHn+qUl&h)5@2lWr9i@1Wq~{5U_~3VJnOR22%Lm6>Y&_;R@?A z(VqKUjWG4d*AKK21xuxv;0lY{ZVUs>av-=ln$2|DoN4gbU_!!O2dk9WMwo{lm2a0J z(p#gc3+kJ_Ji6)2JU)aJU0IhTQg=d(`qH36cIO?~#X{fmKj3JK%=I0Z z*q~4PAMjMi#0R5!8D~^9%QDV5966{+A|>4i5IV1}0XscH-hVoP@YBgcXzLmp_A&J# zd2BpzE~*%wJ^&UCUI(xIp{TI38md!-EwMb+Shq!aMyg~E_IokYLiMbLQC2sMNOIHK zur1mO3(CAX2=ToXJG|VJTS2nv6(kit8~S0G(?VnB!~VP6oo}&Lla(uMT)>zrh3M0K zJQTC)zC&~8``GTPYAk3dMA+n0v&s)MIOMm}=%<=Dg5RL#C$mK%cBLFe(}`kXmzO#^ z?7PY*+PLMz(;gF%j)J)Ciz1+K#EILX<@VYzp(e6`MIRZFp{JCFdf~k`mNyLN`naSv zn0yy_8pwb!alR_blSk|&JG}I43-Y^*{E%5WieN~n!A2bU+)F-~x?xCz)kw|#L2|Eb zt!na;#VhHd4ouyapA@=bj;F>A!;y`&DS&-dOqTgCas5+-pwYXm0yT>qHyRx)$TArD zJZOW?Incp)nkL=|En zm5W@s@>K9jv{pKccPiKm$2KAH-;jEAp?hHwDj}~)4d{>HjK5@TZn9&h@+u_WR5ig! zle=OLd&I>?&trp0R(8#)+3e;sbFw{6Uc44Uy6Wrd@#3d~3@(xh`g&h|16B;RZS0d7 zHg2bh-j%em+Z~ncA;+nxt%?8UUwjr5TRqXoFV#2}xk;V?mC;MhFPt5`;e20_W zZn3g2M;EZ$((`y%U}d54+B*dH&k3GY*vF)ai1uOu8-eV@iC8|y^7zlh2KMR1W$f-F zri-qDy>bjoDPq4#v3bdkx(|j79o6jXlw$T>3QM*+*xf1F4)%B8HrA8ESz7aCGEwk8 zbf#X%iWTfei-iSnaE0hTPe6AI=z2kC;YVXAhBl^HXiwl8^1)FV3+u$87+`+y#sL_X zVq=d$65nQIvu96dDJ2c6oZhhTNiW%#X0M!4LGSap{2t3^sa6(9jmp%=snctCuj*j8 zjVflJj>29=8~Zn`9%ZqoQghfqYObdZHoj4#&{x7Lt7Ao+{MO@-?HtXLmo+rw1q#(Z zaC$qHtnJm~O(b6)e~^lt;D`?HI0S?IUQN;wA&M|oH2GT)=-N@DM$44L<)%>xfukpo z=e0tf&y0$b4z?Mzp&N;+9JL_JZOsy;N&<1LU>}Y`$@~X2ftz?benYa%LL8TkCb_R4 zO#%C~>cmv(W{y8yHdyZ$x+S^5|bs3iPYOQEv zeWR`H_HoG0?>J+A@57xX$9q%BZcEc`*|E)s>eaS^p6%nO@bn*i(myS6S@lqfqN;fAq({jA5N)(PxQQeE+Y#e)`jRmOPBt zH?NG1_eSZhu@*}oBxtd8b&(wT8?FO>&HBut30^O=PmZ=&25(0!=)ylbw3vN=s5MXY zCy_o9&Gn{q(a(NyD7E+9hoV8=Lk%+U2TC9H1i^Ijxi;Ox2H}Rj_g=bp-$(xHdtCPS zbalVMnqBV&CS%&zP{clEmOBT}4)*8qEXB&cNzaGLSN_@;Z%?w^;teo+C}X;xo9{(b zyI?cUTJJ@#*M#Lic&uQzXV50)Y`@P(+ww4d3b#LG^+f4HvCWV=tA-iVdJY`knJ_q2*N zL%B64vL@jZqQ_3R)ruub6x|B;)aeB{JfI3p?z^#IZno;g2dc}b=R`(pa)tU`CzBIJTgt|>x-Ienyc8;Gns{V!7hHP1+P5X*jI-avAu^EvyO3^ z@b7>Y;?4)vvR^-r%Kl!sbw8uJ-NM}-hTGsvgcsh`n0ArvWUx^3 zwaTIE4Sw`lFZ=!`~kfd&2nM5lGJ`@x#3pC)`H}*Nt#U4Zn8|fJX{- z_S%esUU2Ak(D)l{2fOyj|J4iKb-4%f^7gtjSqk5!x$da{`3v#C9TWH6vG)G{iJ2IJ zNnFX0&rt7+wPPM%9hLYcu10wa#`wTaDvtwrC;i1w@Vc1o{>cHq?%jbgE3kK%*)zU* ze*fsinKaVhj;s!ThiYgE{4mTYwIfr{ACovTjq)Kx(|K7kq6w|T(ddJU*t%mQi;cIB zD`wAUVrQ<|OFi-c?45p*X=Bfykk7WmuK3N9v)PL{}!|` z`T4-{R`&e~v_8bdWr3#!XY|Co$yzLbA2|sxZLtZ4T?jfmTw33V1>OqwIIKBGE%E+# zJjfQ+d+X^0K{eYl88O~M{HND@>CG5Yu^;iQJAq!S%D1Mko*1<#z4IjGh&0M3)7pvM zc>)cM6>IS7tWns;29F-ZTcNG0o;@KlVzsfYCt`@ajl#DyH#CUDnsh)yp4()*PgsqU z6K3}i!gc+Q!qwF`V1HOr&|ZQX^v@?Ecaf-g;YAIOFM&ni_axMAe(&re+{^EQ+le*8 zvz;f(xe_w6i84Z~W5g0+g+nv!y2-8@ny;-WpSzs>6=LjE!&lb(Als;#!!}NCZeo9j z;6k8+`1rm14#bF^6%+`a?8N(^iZx9&TAAKSi@-LcHc=^@KR@7bm+mm zyt$#)QOEv*NczASvbvK;br;8X)4iA9yYC^~$M0QanJQUq;ZX%V3GdXzUcdnO^uiaE zbhiu=<)}yxvGu2XE8?1yi`k7QXS2VYT+q^t%>lgZ5a$~NtY&*o=I?`Il+{|SE)S%! zwV#aR9LmW^*Ta;$&?9sYbdxBlJ>7RQwWmi;ruOtWQ9VQcgMZ~zA8)czXUKJ3o^f>i;kKf z3SzgNR>1B&4bxVH6NZ)CSw@xG_ zDp8ot$zvf7_R#6FyyrJXwr5wYSWv~+_lTCisOGCg{%)3U8d&oTs{;ocoFTWFDzOhL zKe8y#pI5=YKy2@q{;TOl04Qst;v8yO31SOxdMwV|5_WT)WH6KulIzQy;`iQ59 zT|PBCtKQ4Io9Klqibw3_M%E|Yu!(M5P`eAFM8@u)I-NZ+71Gi;ijNp}-dRPw5`|EZMN8xepZGpCe*y>OGQG#O|^d zvyIka=kmtv>2+ABEJVM?I&y3c%~iEL^(1n6>Ry}`VISt?lP?5dJ~ht%lSA=;mzB+4 zvgWW`vh&!R*#+$SoGc0=SA3@R1N$^*dQ&sL|G=m~FA2cf>+msHUmzjsR?ELbRf?R2 zaWpovH*!$nzTicQbpO#x9pQR%`%-n=%H3XuTPJrj?2H%-@|tX!H{Kr1ng1skb%7CN z{k1G)N;Yk0;Ijmita`yNI#YYWAhd^q>as#@p0aaUjy8W0(r;rgAVBwCiZSpVFaH2O z*452()QX6lZ_e@4`J>9_MdGWRB5E>?>??2>T$=(8eOJ)EcLUu+9UNan_s;7%zKQPL zx6(ay8{G%_z3X?tmaYd7FLv!;$Sq>sdBto?p0;E0ex9wR!M|*or`FYk^M&h>yk+XuH!xZ(Z?-TU~xyPI$?zjr-GxSQWYxKp;Dn4VAH(}=eMUrf(!rupLv z_Wkt8!l6B16Ua6B7@)PXL`nvx8}`$7PtR#|Q|%CS$LnDCxghsH@nrCOAHR2QB$v>$ zbnn{4@6X|G3B5@7u9xUO_%_Gya`*Qs!9{E!-^!jXC}!{2^0gV>6=!D0pMqU=CW)@R z!s=%G^Knj;!0!tX_kU7EUlU{1a)k{749EAs-^P-2#A_Y(6$!2C@8UkX0-E{B7T}+}rvr&E7WuyA? zEvN!`vxd^&NB7?E=|1=a-9!61rn{v(U_of>O7wv=4Wt8Z7=^?;&lTn&mAyJ6dpQn^ zG(?78ulSs?cEtjsjyKwFpOGg=?NU#jZvoCIU`SD;q0zg-ZH^3$FX0gWJ_hN|%Po{U ze(zdGIB*5syTpA1;l6Ix4@-6O`LEKqd5xakum2LZ3G5gn9 zw#H^00bAH&_t7vNJ{XfLMf z%bu8pMf%=Zs0-L#okg=PZ8{LOPHE&%G3xZwKZ7{Fr_6)J6F)l;7SDl2Cs?4?T$W1G zT??xZqqErqXXUUj3-eavL|^mjQk)T)(_G`H9_~?lzHltTWY1HpIzMT*vS;ixiPx4x z*A&ND7TX;3a~kq1D)_T94tSAMvZUJdRn;4j+582r`T$%{)JQ0kH%+xKMCs$zY4R`|xaxe5i1c zXy9sc&f@W&yWHbxsHkbh+TT+P$~usKIy>%4_r_x60Kw7a@O$VQVui*)>5thQ?xxhT zH;|^zPM#)yALRG0YssaT-vifiUw#ivBA`JN;JH&hFL@8$Qdn>p=o=pOhj$G7nNt+-n{Zv&4M{@n-baV(;qk?otq zKQv*_lwjG~(pry~-VQ6fYEI;3!DDmq3Y&cb$7g}G*K+KNIg#@USoX|8Lf+;{jQT3& zp*gzO;dt{f2k#a^W?^gJp%iuDj;e4jZ|?l1Kie_Kyr}vH+6lQ_)QJ>6v^2 zCLu6EVe@<73NVb$&SOqpvz_ilb4#2r;4O5V4*qU3$2 z%VG&^KtRg|y0a}E2$Bj#0}a?<3pxJq|1T(66-MQx+U&TYI)B8+PT{ zv>c^Qi?`KQcIVlsls&{W#P5Ur-nDIXl8)#$5cNXeHj@7WVrF#2ro23>uyEXEOdJwX|dumSQ3sm1d;>ET}fSd4kSU(L}q8w(yXP0Ss7Vb zg;|IvD{E<1C@Cu=BakwfytJ@yY-bYv%j`?)8U+@k!7zC+DPU>o0=M3zzT`k!R#pH> z>jl4zjLwwK6u{opF3VsN{#iPcLn$FkpQRI=17rJ$D1iKC_9i0=1n5o)jLstGuC%_S z-m%@uUCG^}x{*Hm*LN_*oiUgq93Z8>q{80hrJ0aaN~fg-qUo|^WON}REq!3Nbm`LW zB$6aDnzVFjD5)={Fpx@|TDswlzdp<07?2>hffTrPCqwWpSy{ahOJ7n}i^!EFz$wbR zlgbB^iD5Sq-<=dlE)S%XcP3{*pvm3I_#PO^25DASd3hm(hf<`!!a_Wi;~y1Dc}t6+ z%3$BVKZY7-7m9o=F7*$uFt}N4EbmwsE=)1Gxm?U8*gjkclaz~JSk+5fieJ>3qz(9m znx&)%@p}+{U&k+0!6%dIr9<#rj9;i;N^U@$fb4W!6c2bXiYEhy@~2jz%6q2Lnq*l6 z+)^ZM7O8p0f-g@N4E&Zq+49^hjeFNpD{mXR@C2O;fr)N-mln$DQ6iCP?#t|;ayR51=k zF8Z8|ohC8a5V1*2wnR#Rk4*}&!5bNSO1gJ`z!=PJ@UWym@@ViNKBNN?>eM(U-G}E& zOu7$OOH8^Ce=RZTK72xA(tY@v#H9Q1AS8}>lI}yY5ysOAe73}-`*4NCr2BA##H9Q1 zK8bsQu{kZ$GZywPBqrU5X=rtvKk$hXlkUTr5|i%3#S#w!`z7v5Ph!_g+y{)U0L~{f z1A6cz4gi0q(g5SE4yPgAho?(Sx)0||Ou7#nB_`d6of4Do!>3f53DC(aG3h?sqtYJ< zUA5>jC@)>WXGlysJkOVy^dSC1V$y$jm&By^aI3_m_wZwh*-v0+M`F@;cF zGKu?6Okyh~CVhw3N=*6=pHyjp-;@C1oT-(k7Lr0;O0#H8==YKckT z;iD3hzQb1~CVhurNlf|!Ut-dC*eWsUJG@C^(sTHf>JHt8Z%9mf4);n-dJd04&&}lkY?qky9C{=s zJ%^V|OnMFaUt-95(j`=RC?gcRr3D6<$16JC2;`wGl?GrPQvI)>DdlEUgAB#Kb5%n=dg7paVPNE62A+4 zfy7hJhu&<7oxlN!eZbdA+y#7>#C^a|NSt{AbdgHD6!;yL9(bopvjjG!R2tw67+#?? zcLARuaUXE5#F-bO>?B?a{BwyXxzSfhTnqdwi93O>mH27kJ0%VSKOyn*rAVj5y}<8C zd~_AkDe*SoA0!R~XTZP=r8Bo0>6ADCoGUS_K{_SQ1pc|iUBHd1doAQCaRcym5?=*; zm&7jtKOylL57Md90KcQs0Pj?3>X1%}OMx>oL^`hmK0)G_fO91tvkW>yCB7GUvBVcG zN1r3{7T`-IF0O}8ScyAw3GiW1GDz}# z8u&zs_W|cgJhK7vl=u?h^9Un+cq`H-@lN17Bpw9bChj=r`Va7ZXXCz_HAaObHOA>b_qYgm1H^rL?{%1>^fj;&;iMuNq3#jfDunR140JvM? zLEvo?mxI2K;{YT3f#adPI6W!A$Tp#aW5}utCInS{J8Wx8y!0k4KqL+UA9s{UTQ}(E zsrW9&ekn1#nXy|WCfjZsB_>;MZ>Tf~`=!L4rAW_D1kc{N(5EVKCfv`LxCQQOB<=*h zN#btc$0ZH{zb0|vJ4my{OM!oSH29-m*n+lj4q+M--(}1zaR_tQUrU_%A#@Z=T#m3G zsP40p*w|x4*sd8UQ;DefqQouFF}7af5W@aN;_g3V5t1qB%R`J!k+}D7n6F6O z`2u6Vk(eg%e~~!w3}f#}oB{X!5|?j58jcq{GZvxTCGM(&>QRZiFJ$Z{iCdOqU7%vn z{8Qqr7RJ7pnC$4Ca)RI)m;>F#5|honyCrUMVh$!TE5Vq4qM&a9o+fct5o|n29B^O` zBXI~cf0mf+^z}>J4Voh-3qF0oXG@%gG+e4;)TKYF7<@ia>5=B+PZD7Z!Sg(cGk~v` zm}~?-D>2y(+^y2U{q&!Tup!E?iVM-lN*wqZ=JOJ>+0bu$vY_vT`yz?Ek>86XCVPdy zl{f_aw8SmwXLhReZ!?xPMeqr{i8>&0)^^6OleqIO=xvs`5BLj-yAU?#6cLueeX+#l z2z#l-8F0Tt;t=S2RQE?18&KVWGf$Oy=|&xvc<@oiI#hQDbWf{z4r6ag9B`r@s_rF> zoqU?$vvfXVDjvQA>Mhk2Rm4t%S` zgO4-zn#8?NV3Xwx!LuAVPvXKSu@;iJ8+fC{nV{J%G1;FyW~vCwzD8L{OtvYnm6&W* z{!ztWVXZ6i(r=-2ewqjy_>Qr1iI?tTtV!ZQ&^#$|CulxX>A%MYQI-fxHZdnl+zWh` z>fXxOa)~p6*GXIm{6~q)fp<#GfG1f6&rk>CAaT~Uj4hBja1HuKiOW0DH%i=l9bvD+)uYjFni8F)f^Hmz~nUEv+3?klai93PM zlbCFldL<^?r5zH7K=YWynMnV3iMxTnmpHHvY0DM-GZn@fB@V2`xGZrY()PScb0zw7 zi5bGC+y^{U;>=>SJBfRN*Ge2H!niMS7TV4hl?LwHB`yd3PKi5# z*>n*vTZr~3aTaiq#3A5S5_basTH-)yJ43ai9)k zoWz~LA4^O&UdP!4&q9m^6%v#E*L4z;{nv*j&X|w9s~GiUm&Bb{GdAu_!6)+uh*{zm zxX+h30Q!1~yHKCkNnD6D-@$Q!+iLzuVzSw6ok2VU+;($7VzS-5P2x^?9XnIdkUi&S ziOD|nUsU&x(Pz#QG-QLiRbsLQ{bz~EcJ#LrlRfCXp9y-hE!`(^CV1M<67FPo`XPzQ zW^`(ykzE5JZSv{!YooKVO1wGlZzC>cOXZqF01^U}1X272j9)mu0Gwea24G<=qzNbk{wtgKFlWkzP#0+>9;nV;lTfG}3Ci}fz z9HXy=`_mGWo!|E)CL77SB_?~qhoOzpz8l#-K9MlekO}^0N!$&*RN^kA=NA$O;C_R| zeQ>{rFw#SI!E+saQ`y4sS0V60gc}4-A&gg}kSgOekLvK>bo3wT-1q75ggIK+GX&;5 z@r^$5KCNSrdhH+O-+hl>c`_FXl7wT}E4tEO7)9`y8?$+UL zI{c0ff33rZU=E??Ws(k0(cu|7T&BZ|b+}rGSL<+4hkvWX_v`Rq1U{I`>unwWN{7d} zcse=FX*xVxhZpN`qYhuL!?)=0y#gmwypQSd79GtSI{b+ae=l$vvnV`c{bhuE57wB-U4!7y>)jHgz z!%yn)KXmwW9j0*?iQ(xvRfmfOPNV#;)!_$p_yrvvk1-5PIDM54-=o9t>F~sJH2Q@) ze60>|)#3Mb_!}J_vq0l>f)1ar!>e_8gAPBU!*A=brGj_{cwWZn@Hmb|znv#AuNy@I zbNWR(yiA9Gp~Khc@Lf8*QHOhU_&tGnT%YT3awX3@?|;VV@R0)Zwlh_S%XGL&U|#<_ z1?K#3*5TU)K7{JPUv&5d9e!7b2X)x8kf)9F9HYZ`qmn#`>mghZ;JOpneYhUM^%$-{ z;i7kxPvZJLt}a}+#iIvLj#T=X9ER9vUw zIs?~KT+?t_ab@Gm!Ig_E57%^D`M3&j?E|mxaa{ns1lLixeu66rS28Yok!!(~ifa_E z(YVrZ9fa#(T!-KqgKI3VLvf|!%D{CPuETMS!!;h)1Y8qwW#T#>*JNDh;QBePYFstA z>T%g{or!A(u9>)I;rbb_vv3vSvg4YKs|eQ|TqU@ixLmmC{p~zl^KmV}Re`G#*Fs#2 za4p95CGz?eu3fmk#`O)Z-MIGP+KcO3T;JjP0oQ(93}KGLbpozhTpnC?xR&8sj_X6v z{0rAdxOU+B7}vjX{RdYVS3j;#a1G$viR)8bpW*r(*C4JhaGeM~^u8H?h3Db-HGnMq z{sDgY3!D$!4SYI&i*Y${{SD6-;@6F9DXuD9N8maV*U`9+!F4RINw{7GlaabOQWu9? z7c&_d6M(IclG6FJ?WJz_JbXk($FNCHX)7$LsHbh)K&aBV+*PJ0)gl3zifE~-<=P6H z{XVFOB!$&(s}1LmNjrD7zfRL`&3#OIB}r>FENtXKfj7)c6wrVAhAyHPk#u{JRxYVP_b8p>PtXnsKD>OyQ>; z_RFNNFX&u8|4i8IjWC{8O+SMvI4M?5;Ehwa3p_AWKst0Qo6YRGKfZCr=S*f#oZLYn zcuKf-D)p%G{5mLx!-1?e4_BpZ4&~vxnQ;{9~oK z*|*%&%7q*|wB{cxv@Y(}D*7DD9K8@@JYS7H4s6F}P{Y5@R%EAKb}D#>MnGRzD9g$I-&RFiMauFXV+@kp-*L7yXCvX-MK;k8+O(;tTlpYyLCnyN*r zjf%&_gYKR_t5K_FW%J@Q&xXc1haoBH!=YtO=mX+W3Z+a!n{b@+@lokkSGDSiqQ4P{G);1rF&QYL zTAINxW;-*`#B5~-nwV|OKohft8EB&0m%$T>6{Q@jbs1?RZOhM^3^cJ@lYuB+TQZQDTatmm(2k;~`z1w1ZqG$Dw{mms##zkhVl}zs zm|SvAE_o)G=_Z$KlZ!c2zKN#5XXa4m6b>i$ z1C#xMO3|F6Y;$H0ENd|e&CF;x(jQJJb9tC0Vl`*hYL>Ru%*tx6>*h3>UH(_)Z;stu zMCRO@Tah`1F$6N4VCKlI=DfxdtvTIRGcR*8&CJc!#$1rY6I+aJm0YZ5$WjYUm*^|t z7<(Ajyn4gFODv-41|n}PR@qh~6}MRxi`1Iqg7`P>SBzcx7HYG zJ{GA^{?e*uDxy~6M~2nK8l_S;qTIw`C50kbDhSoUd^5-t>5mIqnunU_;}x&eT2Sxh zJY5lO?X^>@DFR)}j2|6aNvnxY@qr^7Tq>7)%7u=z3Md}->UI?cKSMo&&LgPmA;nq_ z7Q@(qE_f_&Z4)AvuVGgq7D@EfFBXNU%JF@uuaI9aLt54-&0*vatvifdVrU#A=l{Ke zGvbO8;R@7>BG!#!Lq=`ooM<-=G@_3pm`LHZ}lLvWC(xnK-H;bQUHKoP%^GQeikmXrq3^#N=3+MD#bR zN)Lw!p=r_MuLy<|Wh_mSiKD>6N3{!tEn}hh(a>X=3alWerp1Ku3|kdvLN1z?&V*zM zRCFc`mq_tv!hq%;)F?A^FKVPP_oOBY({M4wsy4b$G7`t>x{PEo@@7~|$H<$3B1Ybf z6z05%89ynG;ub`#(Td=r%fm=( z&gKc_Z|Q|DwPBNUm1{##N3RQqNO$&X{!)s+jv{S&iFxN}2^T8qh9K8(_mjT5A;?8q z=v5X};*t)$#Pl(g3MLK^Q{iCZAaN8ACJdAvUlU&9aB;QdB@C88b!5VD`SLYQolT8h*)ZzhYA#D z?2RFWp><0S6_%0x}XW zRj0!aW{{IE28_)yVu(AH)#VAs?1u`bOZ zBv{j!ZU||OYf{TdIIL`|apr@Xe{7()NoL@fcmX9j4fT#fB^zpiq|(K=_z;~s<6f@} zuMS2DCgwxE&oFR`Z$K_OLFO(-G9po%ms~nezQ#g=Bh^&5!jfbKFk>ssjYn#`<|9_! z+N?$OLAlIjPs#7U9XE9+<@a*4QQ|A_E0(x&gnRi63| zyg=O^w8nn(qxqZdGRsocNXQ05T+_>DYNNegO(GGNrsZ42C#G>}H4b%y-85xXO;k%l z-Ep9}FNJh8310(NC-Igt>II$I-G^3y@ne43MWl-;(AasHROAeZa zQ$x%#k}iXoI!h`at@h>1<2$mYs0I(+?ppc|(p_EU^>9-g(mW~67Id~4v)%ZF6cY?j zRckbZM7AUiJmT4Nq#VlRB;qz)qmMdv|CL2bjZb#I+l|AOWcReW$qn14K0MM#pbZ|M z$3^KH%8ayT%6QmZhie--njt<2rm}3HbD-|3I(*$KQ|>B9GU-cVPSJ$Zo1)0e+fcBM zHhdMFC%QdR5;=`kExbBJhJ{=jf6U+ff@^Mr$Ln=fQ1M2WIQg|y)wjCl!V~-{CP)26 zjs+F=sJLi0SRS#Xr8PogCz!? z-iOZ(d8a1$Ku%Q5!zx?N@V8bJk?@I2F-}k_B3DFs+(MW-nTS&gT=JAH6q~!PssRm} z>L*ShyC5fg+#M~+(rPPY2RD5a&nJ22<5VvWA;L5ye63bpb#YbXyQ#87ONl4-0L#vr zr#36Mzo{Ob5Qbu;_J0>aqRix)GSkLC4&`-6>otu+;{D(-jLhq*!tnV{ukzA&Z?1A~ zte%QTe9`2tuX8Q-wo*}i3TJ4knN)%ikFLWHt&h@Qn@i;1MZv59va`>q* zG^yz_r0HvaL-jdu$*hRxgr%M%u7u&)wxCjW*sa!U#X(J2@kPuH)BI!GmgBWV$eN+9O=J)i864g|j)u+&xZ;b$+o^ ztPvPftn-QN_vz9Xm11t+EKU-1ezB9F5g3!8^D!iW`{<8e z)Y8DiZDD6;@!?U-d$i7G9)@zWnQXWjYZ?*ih8J!q8!g*W>0VJ$vV^sn!^ie}B7T8~t7T98lLRd176^uR|h{v*WId=1EV}@$QJPiih?I4KdACIG0 zWz7prblk?!%WkaH+4MML<>S z8o>@9fRWOcXfLe%I45#N@Jfuxu3~za=Wnd`v}y?v&oM~g6yX51G9E0>DEtC$OP(V? z%xyQffDToazJSv?F7P+Gn&?9P z{NJ+1-q0YQ_*Y*BU!9lEhbSp5uU!u6P{7{ckMxL-^3Cq&*4O%$8=STLtBK>xy-p}< z(UA&AFyPtX%~2K+sk{-*6Zzu+TN5O(l2QlP$-^NeQ(i@e&#-19hcXzvlzHTZS0buY zsi%!M8*GFzw!MYN>qTOZb zb4M8#)Pk?1)tt+hufb?u)lgQ2T5AXr@vCn#`BB9*IWF{~Ta4{muKCDs5cx?vNvt|) zCxi_ie78Q@jlQ~yc3I$AR!>TqL{?St6=5rahNDEZ3p|a@ZP2b2leD5{xu@3O0F@rT zbZgs6FB|acBtmBZs`f7SbRlA^Mc2RRfb87__ut>+eiegV)6_O>R6+OVb3dbtH zP-KP5H?M*#r*btdpuq!=)OYfiUJ<=g`r(Hte(q^)R;dZos~P5oxRApps=u&^2hNqQ z3aan2H&VBWORLsEV;O&+U(xJurDTGT3jrFmgp<|;DqE|Xyjb2eO0FX33yZ*wdqKSx z7`PWUt;R7=H^v};BRz|+qO4*7p`-8(bli?hQFn68swco(3hhi;l#hN3-GtAS>Nc%B{4cwW_f5sH7oIv z3qCbyCBw)vL&9CZvn`mLUGx#;c^f<)Zh4zW6^R9J+(ahoRQ`?ie0zlw9x{szoVh5#p|i%tTlq^VyvMJOd3~ZPKme9hrjrf zVbpo3+bx!$e8Y(EfJ@jee3%dW2#!jWVVRd{r$1wo>=gUl1&So2-ubeGB$CL=wLMlN%aoC9OUzxLw$ zRSv#FQ};`=#X1gKHW*`sRzUMS+?cLNeUT|LE(T++8*|WJqvIY{u)Mkkzjt}GFozWo z$9M2G>>6rUSV-sv_+x?}P*xkfjs{(Xc{M(oz|}Y+RYu57y0136PZt#~(oUnQp&>z$ zT9=c9Z48eOMO<55@8hZ-(OyZBU#lBNxv7pv2{95-?#c5vG8H}>M$X3iCiIiM4OK3h zXGIf%nzX8FXb`YsucW2{n@n!X5jKYFL^ot0qgLgu9~LEcq}m!|lh!tf9=2&URewx1 zu_B?bsqhMkPdOd2M00mQa{Vwjh@Du7R)g5iy0CmLgs1RSba8n zFpt1$h88j0+P3g%^e(G_oF$!ns_;V+(N6BV76{AWhOUU*@PjUy)vjr%1@>3Ft1)DQ z!N}i;1pa@Lz{}r$`U8}TCy_A#QeJ)}u6xsA^CfT?PXRq|gs0nG=~xVX z&!niF3@~tI=lI1G1lt-KrIB9?bl=lo${z7c&)kTCc%+Ab3h9@67=N`l;$-CKgDo`r zBYVj7N6-3{rb&KWVLSW04HV?jxeP%$UBy z`GTKwqF_PKQT#N{9HD=vks;!0~zgS?=`~XD8^t~38`IQw+eOCDyf8B1+ayQpqEPRao zCS51^g<<=M{^(g2wQw-psofSJZnwMGUTN2Ps_nHPm_Zg*3I+qFJhX=-J5cswjR9Rf*CUlKjeL zW1wd}Kg#bNQT!U4@zxOEO1ta)O|*=NmS4sjq8uiv>BF<0A2$*a#gES;cs<4<*=OW8 zMe>v4XY{P+2UZc$5?k5MT3VZZ&9V3`Hl&Z94g7Sei}0(bZGNiC#`LvFe%u%bLejIb z?duuJ^hG)=BfpCzzs{pXD0&`7`n;ZoR!<$edn3QJK~WxLbDsX_S_ zT>3MnuTS#p6Kokh8`39Z5?s$SU&R)uTEX`7I^GDflbocX88~hmjwR8%|tqcd2XMTt~4>o%4~w75eMr zcihBt)@$OK`cXZvv3OpNi~33KPR3pkrqFYdr$)REg1H9Y@@Z42PUBmvtD9R_dZ&5o z8XL}_jmzfMQ~78}&eIlQd5IO6cUtyT>(neg5j%mgKo&R?@0$_P&4{NQi3!7iOaNo~ zau|nMd??z<@yRUXWRYr0Q+Zi3ucLuqB(v_tVxC&g`CzVtU%E~LKeD~@2k9Q`r`Mm% zPUjhn_WcPSDW1Y}&KR@uliZIlJMZPoFaKiFvdM7c4L%Kt!*#0qj9>aALs_caxP*U% z+`Mb>PM~oJxd|d353D_wYwi zeNRtHz;_N_yP*?60mtH9G)?oD{G-x+@|~#8XCz8D-jUC(_r>Nd{9^HC;~q}T6lorZTGbcv#z zI(sTM80xFxjX$bi)LtUtlI(bj4p(#9X=rC65Ye~j=^^VOo^1)IOPQD0vW%#DdUM zfE)e&6c_aqz0PFThnjebeC{R#RQNkh_uM6%xckU$L;@oc7?Hq;1V$tN&rfg-Qm`~@caU|I{r5`{kXL}G9ABF#P3!EzcB`W zVq7SAX|R37+$U26NvA94os4gy1@{M&mG)umq{s-9HB^jE6neFO-XKIuZ~ z3hyPV_AMDadt5Sb+(C}$p|&Hn;d3FQNc%zgcFYPA`$3{X+%v*xT2iL1Qd6P~4ExF~6m#XU(G+AERW%l2R5Yen0#( z5C|##kw|}(lzu@WlJnX?CN;%rc2rFQuZN%58aIf9xh__=Y{LO z-@l)?i&;02$KJs>DQ|->mB?BU2oao0V&x*ZlKXv7s{E@|+3QdS!?)9b&@pQ^ar{F( zj*}(FY~sjAf_sScN6DgzLXa$?2S^3kBYEtGcN}@xRe9WY7ZRB)Vum~x?NjBkmOT1D zM+C7-vJSo^4<87GJdWb!LJj8^+>hi@EadU1kViIgyeS^X@si^S#F5M6*F^fGFT;Z*a~$=9!NN=$<$L8I?*ah{=UfV`?53*P|20qAW=h5<9DWd9Ov#BFZ{+xz zI(Qo~NI`PW;K?aPa(3N;SkDu&qFa9GTQxcVB#%Ow98dWDC17$}R1Z(($N&W@5a%u6HV4J4n+qaNK; z!u6CodrC-87wakEv!0%kN%TZx2p>OAc}w|r_dDsOZv{sc2NzjR*{1aD{vf?{PtseC zQ=ThUUfKP&J-zhBq`kpKX~n0!sPyjMo?iM~(zYd=<@{|)fA3CS1>}6u8C;#Vq(7V7 z)c(z>d_`4a-9LRNI)gb>Tp#U+q=Vix!fz3lv*i;Za^4GR`QiP|Ldy&`R%3K zT*1=GG(`F4ID^T$`2~$t!MT}E+cxibXYddj#C8sxtknmnZIkzSQ1IdH)zXfO)11nZ z-hqj(jtjsK(4~BU`5{0lMhKVkW?67r)(d6pKJ}mb>=XzstU&fI<#}g&DAPB}6+G0b zq`7(=T+H|-xx#x%Mwv3r6|_ut2C1!;DxdjAyA;c0S1{idykv4(_@Duh?Ju63@o17W z=-5`OOxfT}Llv4toz4<5FW1V`_Cxv&b0(#)U5;ABmmj+P1m|T0)=XmQ>*m7K8MI?s zg$d7#{)x^YCRFQQ_2mYBF^TyOA2^-!BbNo_;xFB5pOoaZ?Mc6(aMIS<96FV){)hXM ziIL6fD{uzSNpl9XoysaO`o;&T%ma7Cpv)G(wlv>aPNh6;U?$Ozbt?bp-+=r(l@|vP zco6~|M)BeIY#DG)Bp{Z2EolRo`GVcSPUReU5Z5$H%GSb3$O`H>*%K^^>X~sA7HZzmDHtx#P~|VxSnV+KCc5?FuH>n@tAoR z#OqGK8>Er-6{Y>sK}2>ILWZX!STJ=aASR-RgfISb|Nda=8F<_uQc_PM-XIQ71XcK~ zuhA|=zs5&%xc?AFq=@`W@?V8m4E0g=ehnD{v(KbBIrLR&pfklZo{`xTPOg z$os>HywZu^D9&$;;5SR<_sxGy{5~Qlh~_N>2rts{Thjjxg7M5+J3Dt4sH{c|KMeahrSm1xe8(I&>!+!MbSE`wd_-~H*-v@tmL)!R+ z+N^wKSAGa%0)Z6w6f56^*MdlS`^w@pi`w}{?WYL(W{uvb(oar6f0jmH%;~>M&nVs? zV$iK$!bb?YCH+4GRV1q%i2Pic`ugva*xFF~y3w@L&@t`>IW2}Cv`|UhE>izsc&fTISoFd!CN(`Xs}I#JsSLz3YA%R10uzVd2UU8 zoI>=Z?p6c#r0&q*D;oT(1|QJi%^F;%!B!2rHCU>_+cbEk3YENz0g>XwJh!F>DMU}| z-_?LUsejhsA2fJ_1~1cKlLpV%pi_f+8azRRUJWi)p)%ndK%_V^&#kFd6rv~fPBkF* zjx>0w23KhCTn!d$(5k^>HF$^y_xuJiQ5V&d>e5`Nt56wxG9Ww?^W2)6Pa%3z*Qfz| zQtLEWp}|58o}s~`G&ov=yR@`@sKI||@HmZjj0%<1??HeRC+4{|bu5MGNu93->`9%e z!BaFiQG+QO9Mn?ro(5mk;FB7>OTzGsRlI}WL4A5h-fcG`ogEYEZr;B?9Q=^`Q26li z|010FOY+u@>a!jq&pkwlfp{K%Y5c(QCqtB=tqGbfi*A)g&-!~c*d^iC^&vt%>&Ji-{UL-! zgZqRdxngII{{imQ;0_JGtHIYb_>u;7YmUqwkkm}O2exnAv zCEU8cmr&38qftKe2OfNZEugeCz$LE{?9=$blm`DJ$!ll)0`m{I+pKd16! zCLkC=J+^S^SzoBZ0tvUSUreZH{au>hts1;RgI8&Atp+dApihGh8m!ge1sdF_L8{91 z=TvUG7Z53?w`$y_XZAP`qNSCCD~*R9<9Og8XTiRiw5^;+;?ekrv`Uu zuuuy|t&aXmm20v9k>bUgXSoKQ5^i0;oKVmDKWTmsYVa-%-m1YHG%9puvfyZ>jw$-te0!!-;AN4AtPR1-@u0l2 zsXs$`bJJ&&oSVW08`|69w&D7hAt)@qqoiQiaxw;WwiEfB5Qd%7ed!M!`>-P_#vtfE?x89-v?RIfFdYCo#VD#<5c= zD!_|Ta3ad0Ud4#Yel(B*>4a0s(|_M3TJuSdSQV4P3^~-UcbYSGCu3+(TH`9=P%3j}iXZxl-&h`&+eX+-xw9Tc!FMRWB zMDIH;;Ocn#xQj4QhHGCzcXZii!v4qk!c)Ae8KBqwKbn7miN8h9pWciGUo~uq()h^F z%MJH^+H2szw`j$_DuoaC6w=$j$o^{hE&d#N-?XIv-*C|8V@vvfYL9+iWO%*;&l-Pc z52kaN6NuHed44vOzml(Oyzb=fwh-x!j6H1d6OFg+_Y<52%$!TFXM^DO>@f+cA) z=A@nyn>d{zD>X|_4!KiW15 z{&OrdN`~W~o214cn}5XLsqA$IZB)F|oyfBj>ycp;?-lg2a!G#?Y6mK|dVY~e8Lg!EG1s?udgm<-X8B?l!Ayh>bYr8vaV*PKk}TjeNSro6(67j zbzZjDi`L`(tE{-Ere8f89Vvy{{h3pF%c<cx)~WjN|_I;Z&fR7E0>l*{UI^lQK|C-%x_r|wzlMb0z8Nj*1OKM}bnv0D_TZ%!ydk$M z3+dIiOIgSitFp#Yj5@YIRMz1cBVnTMcE(1`HX?XC_$0>MDF%r<>WNmoBk8+!I_h7Ga#>vA%5^| z{czwoo_vkI^&i|J5}qVSGCm?`L&(Dra>g2qw}0Rux&HIMPYJ(bA=OpeyS_QWiZnYN z^{~C-pBT)s2ggsged&jjZ!+~ct!V?3y(f?>cL`pMJmGi+j#9gnnUj@qir1pdg+TD; zISVxjEg}4e7a+h5J#^k<40=FnUE%BDMlTmXfVdoM_ouIWm(FVi9lfQe^pz?fQX4@x z*3k&p{s(YF!BL?F+tL*8K38zMQ}OPyD~BrQ?omqi@#0>NSxTugIB-mGT+nL?UX-Tb zph>X6smxF^lopFZhdnk!kPD6SC1;#YL3SrlG23$dW5K{a!*B8K7&yGH)BC$cYXZh2EEu6ab-vguQeRk{nPTS`6_CqM?Ef6ZQhdv~I?G~K7>VJ-^R>#W*e>-lj4*!_4j!P$T z>3$nNe;YYDCYJ`wdP~7zts68BYbeqlF(gp6wVj*hpBzlG2lLU8PqR}WZnw1lwEsqG zYxs-Qm-P0_;S{tE91Ir4*gVZ5(B^yGveCKqQD&OHy&n~;I zGIhNFaJ$WyI>w)Bw_TE&(K>1%8}dV?y&!eGUAZ7N(*=a1nHQu^;v;kWp0J;|3><>W zkvd7nm!n*4Q7Y10?V&Nw4*M8n%B8%VzAhKC?5CuW0C?unW$KUb^q2PtPglo6A)QSI zf;>*JaFVN|Y%(|yBLl^epzvmr@JaCYU<<0ZADPZ_Dd+)|G*RKA17XheInqW~Ax7{< z{9cLc0bJ_&hT`CywBq3WG>2`IX%H=*F`GutgKdXm0BGQ;UN~6r-2| zdz1XjgR|2Vyg~^k<1I?Da(J;a8y(NtX?%-($!2Q^MCt1=Gh)TTL&1c|=Lqsq#md3T z*`S`C#uHJ3su1$m1xE#sus!Fm$Bck8!L*>YX5g0~;ql;b4&s?utjs~kd1=Kn&Q9|m zUOeM)|5#3qG+SB^8ko-?yf{ask1mqBfm4P5l;9BqqXj$$84Auz!&K8r2f5Ofi9Cim zX?(*vGM|v=U0upcPUSUz+{qw&<~2ndZay=J2^Ox`X=67(LJ?}?f)Z0kly|v zRbc7{sNbcIz=duTJ%L?8w}md)Vpq_?bvTpI+uDQYrh&=$;0$USKTwPNm1V}ome$b& zE4<6$W`~G)H}@-~8NJ+DN{%v@Drko@*^YB}b{x9`gNgRwS@z&`aDdA%(IfndSe)!V z366FY3D}}8{Srwz%ccCxuH@U5`AEmPY3-pDWs|Zka`rW9eo|hBgKx^;T*~XJ6t<8Q z7D^#Z;)5CqVYKYCAcHaJ0Mgq>;VxxxsSv@Xm_a}U3sH~#h`B5x02*7q^dCtQ$ek=Q zfT4wCklw$E3-m9zlP3)fLKwO}UoQ>}Z&IL0+Dy=sNDm^Bis5SXfY-Z93Y8a*UHKI+ z9mv&=L6HguX+w%SoGJes=~_s-Xt8O!{ZD;=7m;@*&d`2?H8!RzrKjw5ZrYpd+!$Fp zq(8Fhu_Q4?n*hnWI##0-UWRT4JR=D=9d|MsM}E8Jx^DiP|f9Sz?V z95dOa99(AGSE{^#lWM;6BK*Z`$Q--^=^sZ>c|qo9vIzL}#NQ1N%ev_C0C7c`htATphE~F%On0 zucxp32|BudYH}FZ9-|*Iu@jf}VLX}xe@wX6NP zF=e(d({I>3u#%+eYTvqxOZCfe0F`fG5qIo3cT&XTi*O@(%yN-q$Nb6CgBJ;=vWv(w z(|au9LIt9k0M#)}1*qv}*p;?Dc4gka4ccLItYL6MZa-a%aA767|5jX&<5K(Y$ombf z(-vY9kF9|HF69l^DesjjpSd>uknDU)ttqAHk9<)UJlPd2$#5#qm7ann=eNnu^haKC z+1^aQVjAj3*}5IRb6k*#Q`v^;&d{q=7rJD;l?eZWYMFeqj^8xM8qcHY#~QM};QaHV zh5T;en#GJy{9ImHz3GH)k6d@K)a6WaPSR@~e+2HEQWl1~AY`eshZvjNVQIs%rkyX{Y=gc_h^45%)>rA!at6-k(nK3ab(O=2r4#keh3*#<5lr;A z(ziBm3^)YKQstBI?cnNa|9D?n(#Mgq3Jva{YR(`Dyv|4Ga6>CL&K_WV@DLdi%;-{ic@p;xBex-d#(zyeE&}ZFv#5yeU%NyZp5;&s$$ltWLz5!-+;_ z@=C^wo_RClEE;2XgGRAMV{k__SV2@LwpArQVVMw4w29bjSWJkH#?Rqh!rV(yLYOCj zXNC%*s_)2-=bhpAmp7D5f4pqhWQwa6DljkHflNEYZ{RNROH-8KC-pVA^VbeP^lZao ziC4pk6_G@2K{WAwBoSYjn6yY#7EX8}Du^XfX9hOg=^D zaPZX_HLZj<48wYlb5-jbpH-o;5Ynl9qCC;6N!OeFt3 z_Hi+yPn%nn5}|vl#9}&armL567G>$xxO5L-r&qK3LwDC??jy1?xD>PPjpmn<5chHk ztNn0$E9b5#aK;jo+LBJo+E8SD^A(~8XuO9>jG%F?c-x`TEamQ@<%afk(fC@>b#{tI zv)Rvw#wS{@jmF@bgHo~x&2u7!i5T>yr0|mJ#1UI-^79~1m*5@s!NpBg-8MOLigCsg zSlj|po_yOwm|wUMl@V=;NxzA_$YMGXE@F{k9!7sa=N#q}KdfnYlev{bQ@zYxiUUVo zXEd9cE6ngP)VW4`OfPzjdvMxi zJ=MwcR2q|xlZ}lw7L?K!Xe0Y?MlludPRDs$G*tYA_7`jY8)GN{%&V>1p{ucV9=i%0 z6Juex8_h$gwK5W}J2pF02kHBLX;U+wKg+Lk-xTr>V^7#U-^Ht zzS}u&p!NNP7q7m*=`QVU>-(O`)c543Y<-{X)Um#MQwOQP_mS@V5^j0~a?!!mtCkTG; zMV8>Z>@lFKIAwc_53Q#-D52DQm>2m;SLo3!<=cb$3u!aAH+=nCI-M#s^RgihuR^bH zmVnyM<}>h1U--Yludjz+k1T#Nt+rkSGA>?|c@-?K0t>U1zwCTU`Pcrh%Kx7$T>9L^ zi%TCZ-@KYB|6N|C{4bxR{43q^b-&<0?j?tL#r5}!vxc0a{>i1U2Va}^K-k1m!7n{A z;x#wtmA$ZuG^R$It@I&I4x*l=`#N2RY)en<6X9(5khDxGdkH^wFPTXH_aI&lkxovxC9Ed<2wDC~81xj`Yz?o{1WVPm^Uwm`m0s?CriYK)-;3J!cM!~3U%6ZRnf?9D z`azuSmWJfv0mYBTIq@`lwcS42bFtb+i zXJz3M@}*bLwc=)wvV%*Pk4;#3NVJP0&g6x${Owi2rA;E_ve@D_fM{a9xs8l4^7wv& zDTBhWSsFksSQ99zeKla3ZL#&{&%9J841KVp%-d}4CYE`Ap`=EThbrb*5(KAbgMFj9 z508?9y~)nMGUh7$=C_jKucR<@d6Q%xLM3w^o~(TA?&p?OC1NjEC&Kkmu33~c!j)f+ z4P@JBG<_kwWXJ}zE|K5_iVH7dC*!I~IpY}?J|rEZGaplVW7nuNVQ_T#gkkZ%!Ns3@ zjQS$TULCCZGPS4l-$?Q&`O(CwgXiYc!J_HLSo!zyXJTMqJ7ZB^%~Y0YORCFTqQUAF z(Sa+R@XJ-f#RhX&CNs-F5$8Fj&C(Pzo@1CU2Xo5@<=MHfD)Cu*qLdd6R=t<%Wy_0j zTz33mC-(AOCe)45^osa1)x&2rUo~F9&hx_?OcgkK4ao7s;`>kq3)Kg*`#ixvk~kUs z6azM-M?QTQSQu_If?BGUvtSPY;fD(L_M0FZ{Pb;!ry`1H}oZ`JydoN6lw!{(gQn|9Ov|e7Kjdi6+efpDk`hDho zq3?Zx?|r`SeV*@quJ3)8`z{3)h>#$_clZ)~<$K@ad;ie){*Lec4d46AzV{XGyA%}h z3L0&tF)ehM?|rcEz0CJ6rr`1uB>VW@i+t~e?zSHA{e`YVxJ>PO?b2ZhpCG7WvXF^t~_ez0dc(&vW0U zAU*3M0KJng@?Ib^tP9*b>muP_`G9Qky?^L?_s+XW`Zs*x6MZlvzW33-_hG*G!M^u0 z-@8~8dbss*-zzCgYz|*}`Q-|8^Kw}YHk!pOv&?Mk;k5q^vH-&tXPBDcGi`tQpgGUR zS}9!{JsqK z(sOFawVC-`){}ZgUF|i4^Wqa{eVZR2tnvramrO{WC~?j*^h}I5sv!gULUAQa&Dzxd zOv>gaf7%j-*5{(Q~gNdBvl#8$6GSm&*cG`!FKEh{7WYisrjE`F(YRZ(Kk zs>Jl70t-Cd5M|GP@Q@84RqZ??bP3kI36t~WwOP;hpH3hPo>id!Wo57^%(}4GoJ$G( zGI&RFj@G_V5J@ku{f{{b)ApeZJm2nB}P^yE-fmMO6FEDy^{J3zgyag z}O(>5`%Sdd9Bb(divu0@I;aUpX`q5Do)xDv3G2fMl$N6X69|n!>B5 z6vogQ#fH!1>L`(uS>&`nj;IlJrZ7Lwuqs^NF?~PY7NdA4VdbI9|W)8EZ`cx z>l{gr%~vDhWL4+<$Z8WE_<|oyYmf{v=MdI!EUAMxd?NYTlVy30d2{7+S*#3Lag7&P zJ#!zRpTam&e%DqX)EY_lj#QU_2L}t*o!3dQSt~sxqhApkY?DiVu@t~$>ED;ZjL15Yz1yN7s5Su-!#W6p5L^JL`pR~dGy;*9Snb$pRoBRM^Zkus?sorQFudWHU0O?xp+k|GiY>*UC-Nkh}t&b(z>`|4`im=1z6 zqM>zEb@Kee{OIZ((SaLvtwR?;e18G@=>=V(IZTJxX)WX)^ z(k=c~ubBe?e>?bkP0bMPG5>adp$6lULk*OI0v40R)qSK5u`1nciUm~$+mL!O8*$q) zUx`>-PjZOaUa{3^w$Nnbo#|WJ%v#>ecdCR~ZZ?SP&>SjSKck@=%|J=AkiYDHMn+#a z5v_Q$7#BHb7e$EvQX(C#q;K4%1QnJ!2MK@vXG zIr6kOULyy+h{?}HS!xWz&`jh(8J}z1@yS(gtFzOVl|q1vZ<;C3}A^%Lc(9 zabgj+H+_V;^$;0xfuQDG$RKLL9;Z!g8Dh;5ryI6G5{wCao8)V^4*LI0zgzD5PwDp> zIsU)U?;Jtxe?vdjr_sro&n7Ta9bZzNcwU9TWbbAXEDw)5SC>`iV`rm=-NzGM~~z9N`f9SNf2|+FD*)SiLU+(Z7iu4nnk3F<$sJ3U9h$rW3Z{gO3EdUbW;%ZhZmC@*-!GBPLU=9Q(> zv%kqhKM}m{5kj7#fV_%X{9P5Gh}4wI=a|{@D)I^uSVmVqhq!l#d#%IAQXmlM2};GBRr35Ym78%y%@#snAl7}%|0ZtRU{`jzS==5rXV zj^>ihS1NDZGn!r*T>6D*5~lwTl;Aec&EEPby&{@;PY5$7A1t)ab4kP5yDzHp^R|T- z<;(5llj>6ioWpwz(!4(^Kkq3)EnR#A<;u(`4KYwMspiMpB;m++3jYK1iJT1OM7_wk&`Ey%Pk6$>SBGxEGzUz zR4unGHhZ_nX01Q=Ycl0vv)&)Oj@WkCq|H49N_jmb(o^&6syv7ORzIS9s8~0>QUQ9ehI@(4JR*n|DCVvxQ>l zU(H-QQkD2N@s`=Jf(3c(4QCQ;Zc~YapxLd7nTQQm_qJ*k=rZz$M{nAY^UdFBw~!5|sY0k@ZG~fV(lak*@}D}7KsiM(Q66?OH|VEElw`R4fZ0&+j8(VPvzIk(V}xGa6a z?NYAd`=G0_aE$McdBdEi{d8N z@K1PVvsp-_w^RKqNl0^EjVsfHZ2kBLupQpbrp8V8EeM!j<5BM2ZoerqdyA3L;RM3q zVNLd$P5Jw>K$F4y&}bdJ5u9}K80#62Lv69nP8W~j9b3aX<`=2VT)XX_EJ;cr<*v;UIO8J#=cl9UJb`J$D^HrvZJ1mDmI$ch_>x%$A;>5bCwX*3H^M3 zOS==)yHnaNY5fh%9Xvi29+M2s#7P(b%6ewwcr}UhE;Yd-P(ZIdj^s}N(`*Up*CB_U zNZPkP z)4=jFSpjV~Khv71B4nJ?5BrXaBP^;bM+)Bc{0rfdA@M8yp5q0Zo#S-pbn}&uNqwA9 zumegiKE-qP6YZ(uG)HE!R5$I~+dDMEZ@aErFIc`S?c#(!VPY0< zlX`bb{(AE%kzUt*PTO;%c?NgLhSplj9I`=1?sQXai@wV(dfhz5WToqE!b=OFdl0i( z8A#RnY^$S-)1pJ?C?;t$QoS88vDUNa5h>QQg7PuEi#tR!1R~^@&M#`06J(IOUQk= zePtc(+C-`TSmV#j#3v9y+QmcuV}=RR75yrtXZ)>Ce%{t#uh{2XgM-$axy$H^@V2cO zlhkhwo)wnhdJY_vM7jyTu%F|oql(u4$ZVEN?U_Ii2JQze@4;)xnso8$3UyEuxe*p6 zH+QIuF^8}J3co&i;@03{Cl>J6bx3-t?CD^)b%_#Txo98x9)@~cTeQ|DeE#`M?O%|M z&DkyW7XKRqbtmaS8iNhnuX!~WlNX8{jsK?+{40>4c%Mw=7$e6M#JvmG9*;u!0pHrhX*a1jL?U}xbj*chpfhCYKe=@((6jwxa_h=&et%|t%M9OV)+ltr z>jaJSm>mj6S3Bo7mQ)Wvzp*S>cLaT=I(cbh8S-S4g@;hyL}KKB%!@B)%^Kw(8tp45 z)X%`n0=tO?cKifQa3mvXc2$^F^^R!yir}1|2tT^aj7|a| z88VLwoJR8!J0L>D4m0SfihbxjjP7MDSE{$e;I}jAR3be#^kYSEqZx`jxSnR}(_x@D zn~Ie@;7N0-J3=w+l!t^I}Zo?416BP-D!zR@Um6nRFeA~^}exAGv&z|vNBHn^5 zl`l2s?7UN)-U~k9^vqKdq?gL7(mVvRB3&gXeaIBHlrEBI9@N^fE(--fl-?{Ou1*6t zYVAnfl1V)+lX^SM-%Wk0oBC2*4tpv0+1>t~SX`n||Dkeam;7jQX5rF8_94xh8~J;N zKW)*#iHiSVA=bkLs!micFlUXeZ6Ba8G1xUPLt0htk@6EEvlIBPm(+b2GWtN96?Lgd z><8f!7;B~CrzEs_raWxnZJaA^&RCxz^)?p^N=|4RFvUAby&d|JO!O_OQ_K$nhVLQ$ z)k00|1nPPL)7wHl$c35~WU`iidw`&K_-4H+C9Q}LLW{2?A?{XOVLhh{Ih2p+(oBNp z(AJf+M&{MPKUtM9gQw8v$;!LMyhS!7h7T2r1g$qKU5M4V<|Y0z{M74T);`QOn9|&8 zMQ4B(Ezk#{QUZFJO9}Av7xpf$#mHf0Np$#GE6Zxas5DoWvBA2s#GN0oFBnE1-4htz zuQdKyl;iu6^0#XC6G@0;k7yJlwJmLt?R=N3s&iX3!Dm5q-|B++{ZZ#0VRq5s_Xw}6 z84Z62o}mI3o(9KLQRik!CQ$qD3hMO&0eFkV8Gg?a91q_7LC&_jXPapuV&BDvuBMWa~ z7M=tvJV~~Dc#_l(`-~l+Ymb|muO^BKiW4|}PZ^qY;c)X(Ca1ioyU1Al5i$sjNd)pU zrPCe<7AzH_iI3Q+`6#G;yyf#q;)BRQY(L*2iAZ+)k%|@0%>7;clzuHIZC(&@Nl21@ zIle`py>Ww#l`SdOIcamK-R^8=bHtOo`6}WC>wOckIr(~F>KXlu*Z&3o`EI@p{>oU- zWsv#t{|zPnYy8h3)lTq#0x32J|K5K5FGQga9!0yu|F$_f_=`PA+8jy7sIyEPli_+; z)VV>MO}41MsoAH4aHO%O9#G`cF6HKu&ZApTJIy7r=0=;VNm9DGqzmslm&BS=Y_3JV zTr!Y$ol9cP0XEls-k+K4W(`p}8PmJYDzWARNOr-X^B9ucSZrcfuPVk@8_$;9P=QKXV=K2q5{5eZs%K8s!{It!LLu2Vc{|1e( z)vW(6VShsEEMaBvK5?D&wY05Xma z&qoCZ4&o*!!8%;I=MgDMX2np?kR)ZJ?QL_D25vO>i<_JzGqshHq!u=HdT1u~6gPDZ zu1tiY>{~lqc+F;WjvHp~BY>P3c*~v{6C2;~w$9WnuxyqF~^nb!vf;XdZLCukw&t0~8hbC2hWE*s?ZR;BE zPDSO2!x^2yEWMoDq~dE@-vNv{k`&PB%s)yk8qHJJikl-P#hav=s-&7u=qH6jo$cl* z^>&bwWJT0uP9f5hxJxA=6!;NtDsGkud_F+w7B{YAaWk+KNSikWE%q0>YAc(1^>!#u zgtBJy5s{ww^n@g&xW{n?&!?pLoh`$f%-=|YsPvTP5K*bw{K3tA5UyFk-|qFtWn!G> zw$~JDV%sZN_fnoMyo=UdHtUf|2jqhZFE=N68L~n2|89GIL_vH-P4veRpwzZ?i%+Xg zTvjguLkLJW)wUH(J3q#xcwRj>dECLe*WrdLR)n$SKUT;XjXF13clb>!7UGZd4Yy}k z$Z%HWbN)<8(k0c~Zk=o+wvX&Vb{cKY zeK_=yJ7$QxlRi=cvNYNeU2GreuHFufX8XusBE3G6Ckbh^A1H@D@&|#R3{|+r9n!Hl z+eaP~w4Bh=fbAo9skcLMwvRLr>GhFYB_YM#f-8OG4kqesK&qx>8YfLN3Ca%)?LQ} zD7d(waB77Z=KYfJ#_+SG;qr;_B6YDELJ?E?IU-M0@X0ncGd5=lm1?(?R41@EjwEC3 zW>l9J@$zgW(W5lNnTWyya&yF`p1Nb|IAqOJc>w1w9J5raRJ)=iu^bLI-RwUdZ!+}Z zy*M=YpRQ3CdF+ZzONg$)+jO8Vhf0JK8j7{HRBbQyc4!IP@W&GAHGEeExX}b~^#U<_ zGH1Wa;FDp9v#hqQd|FQ>OXOozK7nb$DtN;kpv}3Pno~Hsmh5>a^pepaL!)3cx0S6Z z!&r{L;ngb!*X)z&@k2z*!zMMRKdD|=z^o|Iq4Du=1oh532!5-0U$Bq{yR~yxd_1_F z_~>rRiIQK4+1^4(chk&6l&;<&Nm;O z?(mzI%ZT>ZL~eT1?e?yz-VxHff1A8~Nt)pH=jUo0m(`}rrv+_d*_{PZNy|@^75??0)OU6|y$#?8)TXbUHXPz7 zi_fLsMb7K-bR>Uudef3)wT$EqdEL_K+P2WNeL+F4F3wy{v?Qu2+ya(VTHhG!9ATYt z);YmC5$jB{&Z*Wp%{sDt2HT%n=M3wdX`QpIGub**taG+?&auwVtaGk)&a=*F>x{Ba zg>^<+=X~oNXPu+1vzK+KrQi~hfz~K z=&a&9#yTt<#W&bGA?pmW&QR<0v`!D}jId6*b%t4IxOGacGsrq+);YvFhgxTVbq=%6 z;no>wov?MrTIYD{R9R=db*ilsv(5zToM@ei*7=EbPO{F));YyGJMCv~SIq5hZa>TI zU~V5g#{$dkZf-wwJG9&R+|KTHK6eD<4hwgz*ikig-hHeRSMa>Vvxes_o)(_XJfHD= z&9j52Gt1~bczW^l;W?1!5S}A=hVl&OSxCD7o6n=bTg)@Yg&oD6$a9*ntSP>Cuk7c@ z^CsInf55$;=g&Ngc%I~0%JTxx%RI01yv?(T$MF1kQ6(J7 z6XJOY_#<$~@-*{44)-TKr}Lc6BVYNxjHia@8lEIDuft97%;UL}=N_I1c^>9@oabqt z2A>@Z)Pmqy$n zgbRN1KFpU!>NpDj@jNk}Q+UqgIhW_>JXi2Yo@ux<-FFY}9Q<=Ofa2`)wJ0 zl<1%%Sau+zN4XPMq@=>gz}MAw8Yvh3V}q%XjY+jF{b`NNoV`n9TuWIL9k>pwSGD7O z3h?p^a)R+&D^)9l2UtB571Rm$5kdOt#nVyb631VxAVR z=YoFh+!7#;F;~q#EE{rHJgx7LI5&vf!Qp!{U!Oej#=s61$ZYh>{^S?Dniom$?oX~3 zKPzGcLT`U^DM3u@8wWCo3IuYp;u%TxdwmbwE72l%*jw3?757NwFC`LLsqsoAB>#TO zWdH8uMPKMof2Eh+t*a+r zMVwKSTa&*Ookmulk-g9SyK3i%&^OZ8!hpkIsZpc?J{craDU}P95NWqICIAFsb(zfj z_Q2zokJNa^hKLwp-qsMrI9XH3GlTu=r$u}~te*`bL@VM97sbWFfD^^VLxjo-`(Aao zn>%rl_Rk>?DMd-L=?V>z$;b_nFDglsOw+W*I}Xk?NrR-7CNU54rnM4FhhV$zrZ83C zk(ST1`}93&`Lu!0Z|{@P_P2%Ik}YhiR~Y({5x(~yd+)aW@!3sy=}+zD+4g=vzbJ$L z^S4Wdv~6Gk+#_H4M1FNL^pj(-ZK)lxl5b)CNJc|##YjTrq8qXAtF0J@FTZvJr*JAl z+1I19uSaEH2W4LeW?v6+U(HlFv#h&D!tuj{KV>O?{i8I6nc#;1j&M&C^gAM?Q9q&1 zoIEADSf^bRNn9XDAifvDjQthAVx2vs3+hF={v27tLp~(SIA_EMrUc8$A>3EG)wh1B z{if@*VvgXHcZwuWDvW=Q{TkPrPJb=67ef1}qh*COsVR~uSPhLL&IL=VoeSuKn@yE~ zuKN_?pr|`xn-H{HWOz)vMLR|Oi@(_2`uTLxuQ-8#LeM6WD}o2hW_Zu~AyRw+=Yzrv z%rQ&=Lb7X=L=Eih&RG?#OE3<&p_h{u^Mv)Ryj*C6o%98Bq0QGGZK8?I(SeQCqRH7P zccVQ>vha{kWjx2qzYZpc0%g3@kJEq~&3Bt1efot+d3ZtmeKBsT+egdbE9i8|GcVId zpap_;KhQa3lywFgD9%?E&?W-e9xE+TJrEVZ1iea5|ArUn{Sd08!!BZ*Sp!{YPsTF@ zO`8Egu5IfSAL*G#aJ^mRaE=tJIrf3U8`jX!(cxT)5I>zw{RO(R?QtoK>Zgdv@Y~up zuA+WOyG+`wBf7S}Sw3xW!)?+}l0Bz`QDzT|?+RqQp=|z$9&P2q&O7)cc zJ5=dK;;%VQ9e);5&oie1L)z#>+(r4Rz2$wZ!X@%JUg(X^1#=k*6<3J^Cr(nJRwwb;px8~46-niBNxAk_?YQG*A{-*mwoLhl3XP4BB%=8DL z&wRRprO(+VLZ1`+$WGuc_h(Nik;CP3aHK-^W1-<`0>Gu=0ZPNH{mJg=_hr03>c~0u zwAt_HG@W~UZY*)EcY!V~{5Doc+)+F@(pb<$V}ogCC&rs!)gGgy+6lb(g>(Sv5C&D* zJDS`%p(JuR=h-=RlL)hqfZn9BFg3=VZ=6WU%Br64z`G)JfmLzY67th8;#AW92xSdk z`y-2K%C95kZE;wCY*TRYjCW9~O>U{;%QwNr@%QmedY9(|USjVB7l$`Soj#G_lTAF- zu&FT8u(_nV+xDt%Z#8^e)a})1!~10o@Av7pHQMdlXv3z#v2Lp|h8tF`X3QnpqUKLf z$0r|&J+>=P{E82w$el7y;Qh~~5v1AfZ^I+M-(mf~oD6}Etk?(!e5|6$jCz;*9( z-P>LFCUIAW=kh%S?s|bMtp$FyGql0PzP4Qcj%_jlHY%TeTq=~fTMT5SC%rE{N$zET zP)_*5=0Ek=yl-!rl+Rs6w9JA}l0l4SmEUmVP%v2oL}tYA%%1NEvu_mZosT1q<}eqN zTm<_*vEi_wnp3&3C^=)6H$JKLEWw@=f99ME#r-j}5_f=`YJ6~uS!_NA>kg#^vw)BU zhht#Lw{zf_J(=2-g$gykB!(HCaH&}N$L?lA^0{9L!i{RaYm1m!W_C=KGOjLj3)ze} zQmZM^95*N;qS)de4Uxrb z>q}|^mCl|C7+(v%GL8^8N`t}xt4ehd;N9uU$2eHgB`%Yp18-GkD)}l z_s_hBiYS^sp@_~>rtpM2W-K&1>@Tuk#hqI_Qu{`ea_zco?0sU^(J070vBX!*Z)o+C z$A1nRS%fR%Z#^He$?$WQVWgBy_me3KE5*Drre9QQsvfvik2iAgRKJ$AiAg;&`&*>x zyx`69p&r?8=QwI4zag^vn`pA%tHhS0e+=IACTS>MdP~C(qoNI;jg02YYp3zaq42l( zl4$;`CniU5_q^=ka&SAAFs7QSC&F)xcZPli1|oTik!fXmlA78-F9dZUl-$K16tg01 zNBF*j7vD-eT7NEJk0iQ7(Q2+!i#l>eiIFsV}WlyE92inlxvoqWBge1?U|aRNWgu07h#P6njCuNA)|5_1ePe(8(W3~{@%k_w-$>yFzEI4&e9W7ug(~YUol2J|}LkUYNTN*hA zM$RFUs zw>xNb>5Ql_J{9T2C*Kf1y|m3HP&~F!$kh*_u&L>vZEuJg^tUxdR6Fq{wKLwxiyxEi z^o{3WwYi*cOMvZWZ}|M3KsjXc9t5l7AkU|=1aZQQhc>xKZQvLBwIqkoR#8)mgqayn z+~-%Xb#Uof(?v)D9g{PQbbq*fMpLlvNZJBPiG4mzW@}o5rSu7(Ya^e?cNZ$55v+TI zu8qU0IfEwVsJ) zTnF1sZCLp{72lS!q|(tTAEl}j=|V?OaLy;ZW_ot3>}f`mR~JT;rxs}$v3l4=yE1~5 zA*7Barxrz%Q!wnXjP3nM;w@n=|3vpeseOEvkpny;vQUzofTS{vKZd-TRNFx=^_{JF z3E}mtTgo_&wZxEd4o4cnP#@(E+*Dt>9v_^L4+7Cpa`%O0G`8+U4%Klp!48|_`NEeZ zR$d`AQF@SS&s-3>wOu~%bGWrUqQiZRN6rxy<5zu~PoC@(OK_Y|u4a5gKcvCs8kT|W zTRHcI%$VMnrF{)IO$zIZ`dOD=Dv>&$#WOM7B1Ba>aH)Om)e~@p5jjk%EYpIPH)Ydt zQrQp4o}YzXGzsNnOh?X)X64NLQ0l3Q51-Yb)5F#?IPXJ&vH|SFhcvA z+7~*fx>crMNEPtfsY-j0- zxdhCffA!WgWqQpzf&c0(cZ{mBj>1 z>IPV-k4e!qIxEoZ!MdL+dxf&qrEN;us?xUBDgyssH3nCX2J1dh7I;B@W4IX<^D3W} zrlGs4aL%xn<~V~b26%c?#MvJahxIP)ajdk*u~9xKukCTHZ4a6MRtmpGMf$lVkd4Va6pBvBc-*PWDGz zjbtF2k;2zHxt%U~ISiQ97@}RPr1~YPD6o&el^)kp!h~xx#So?`QpfjSt7?ywMa<616rTv)gYjV3$5uKjq?c zvBjtJF7O#H_#E;d<5Rj5d}g8H5PVJ*eBR{G!^bz@U&QUp-beiG5#-E08_OmF)BKry zkbM!)67Cb4h;RVMdRR;f=omF!8uRqEww`O~!b{NPie^`W#btG?!L{G@z4Fq=@B`f? zOpFViSUtO`+%#fAXte_KZJZeu*`Mm%K5&K$gb-TlMBFvH2!7{05= zF3QqyFPB%=T_)fwOFp2Qm^5F?>LnO>lS^UTF$sjTJHWL~f?mM@jNNsM8y zc@Taf5JYYG39FHG@lgtcOYY#rmzZm%@MP%et2K?;L%e=dTx!^C<_lSP0iFBaW*A?m zWMaLLdjSO7#w31-NY65Mnj~bOE3O#=FaIELLNDN8RFG~KjVzz(JD!?(PMZoY=DlD_FPrlBb&-Ghtuj=0VSJ|Z&1c+o zg8XDgeoJ~joFH8N`4hBe{#n_bhvuGZ`Ti8pG4Co)8GXa<@p+Y;%#|1J0-t+h?eO{A zH(7j+-X%V5KePC}%7kKKyTJz;;#c9s%1Z7>l~1ZFiH2L0-cXsK_IA)XSt(XPgm4W0`jNE~f484Xg-Rw?tRf%tS6NPsJR~v-q%3pm|;tPM^ED4mJ zI%m7UiP5L3*{qe>iN zIGpeIAu?|(cdlyb3*=3UTu71o*&-KuMK17)oJW!K{Y9pW_p}9-u^UHWq0O>eF5=#{ zwSxA^C9+FL_&UPV#hWzn8Ujz2z!x>}WeKcZ@hjgraeLEoY@@M(-@@On`}fY; z?;5hxrFsj8+llzqZ!Azx7|-9)GyLs$%692lf&Sl01uABWlMDrM{=4>j;cJ2OpSItV zZwk`dez$+4hzziZT#wH~WLNEXhAr~nYQG7#Ag}!nm8{Z!KbG)p`|V43y7(Xs%(UMg z8rVYuciMixnPS^-q70JP`0LnyYHvj&UH-k4i*ieVho1UMN_+ebK|uln^=-T+Lr>wz zJSSZ$@URVg&;Z-`^z180L zLp=OmlVO~}udm{_cNV`ATW((u7s0QG4GVZ-f?u1AtYqj5oOH7}!{TT00vQ*tvAhZv zeZj)a=g;nMDgX5F8I^-i;!B}d?dt%y^qObONoYAPy{6l+xECh)Tx7$3reWsAh|){( zS$b9mpT~I>d=fHN3U`K&ZME)T!HRIl8m9F0+K6+eH02Ll1*wY5DM13U6}a8n3h4e2 z-_wyqn@GgPXwQ=~s}Gj?GOUY62N$nQgfYd@q)P=}a?*~cMCF|>zJ)AwKE4dqVZRA| z*v{-PJIN^{wZG(Md)NN*Efx|T?JxOwFA|sh4n!Ed>hO*>m7Sui)BmRVWvA#e1%-_( z=9kZjfM=R07LmZ3U;dTlike^6vT^)ZL9I~OhSMzpfA*4EyB&aO2vot)7l zKaT^Fo${VKgvyF)WgOEJ5$6#>m9Q!#?l3n__8Ev9=f)LMz*A*z++H^B2sf@s;s&{K z+gJ;bueTdlLPefB)Qx-F#%=Fz%Ns3mhr4mI`%J!f-MD-%O?+yA8+X5rd)|%9D|F|8eoN5I`&3 zKpRU_L}q^@PVn}?Mmfl;;nEC*i$nOzOt>@w;o=bfSSDP^Pq;XQ&(DMl=?NEy@Y+nc zkdG-PGW&fYa%6xsL!?6fNp_|roBgfC;5$)$-$)L8WALpEjNl&~teW(8pjSr!J(10W z1Q$-qmoi0oyD<KCx;qn| zOQ^Y-@LWP&o(az-)ESxZ-4g0(NtPkhA?ou8)feB&z~21xsiyT2y0MJrmY%HObZmP= z8FNLAm66;cBN>%v~V8`<3Z(}M zNj4zUW(vN_xd&*&_%{7L=7Ov9mFRo)JT=-ISrP_5`$C8<)=;6xw@8zO%XG1b+7szE zToU1>h!>t1Ly1)$CZ46{(BmcBa^B{td;07u_(vpZ0fy+re zYeeU~ct0BHIw@L;WEtMW6bu(%AV%QI0&b&Mb+Kw>JMvd8o5W=bp||vcPhk-0;uDkx zfkL;K8YyP~oMJvbPK)^%nU`W@Qk6pn?bh3X{)hyTMDMOH`)()CIDxx~XKh!|mA~q) zYJOe^i*oNDK)##3Wgb3alVU}NJI9)fF}Z}!k<4R)MFq#mfAukl2!S4}By~{{&*_CG zQYjVz@fr9uAL*u$+JoX02dJ+daqpRRWAuGdCUNkm;TA8g1S$rV!6{V-6iTpo83WI^ zN)_KT^U0n`MOLoU%cQwS(j;fhlXO?ubg_k)c4?&``}M?Aq1T!O)J6{hy0f--=t3<* zNA=n)LY5@to@k?O+VSdX^kCp>Aw=#Z=RW?NeQizwgS>?qO7Ui9)kspmhazV_7DG+o z$s$<{&(3J#Q+s+Pw0BFUUejkQ<(1DJi_(B1DaZ-c9Q_B)^$Jq*%7U(Zp;fzQhxkWq zJjWJy63^&CBrdUA9p`~7B)q9nM-5atLy*@IL-1tajH?}SOkNF(k>a4%3l2TM40NrSrzjEjVV(jRnWl^kkq6B>Fgz zOLb>vW7LO2UOlpmBt4*vtXV&$q5H|5--;}arcn|sc0Pj)7Wc&q(loN!v{}N%zJdO| zj#=v=ra}1J!9-oEQL-t;G_+27B!0G?=iY&a91o_~-rgi*x z;r-ddyVwWs>RfoY{A+lgeSqvSMibxDteu!Z$Jb7;V7Dm>6&%DTnzVpYP*hV@=0G@4 zxS79L(}@lVNp*x4yj|l4#fcjkIlvRtp5^U-*_Hq0e@02HFw*8Q%?Jj z>R8Bb_`_RdmiG6-`%^Bw?ULeOw7+-1lUNKenuj7LGf@uDtC;|Kmu>_k(WVE~-!M ztr>iix@=|y&(aN!Sx60kVisyIxt_FCK@|ZB$@OL=5ZF>s;397o#b&kMm*NxuRi8qF^{|2qYf2bgY<;@eyz@j5S%0jizgu=> zy;3JFOdW(!7aSO?=UEgyZ4GA-p5MyX>CQT!kdOsD^AtPID7-}6i^zMkz;hS!UMMaF zCf3pZDE%->Jsobkla}A;Ic%i9hDKHu8VTWeA zxU;+}Ni+@TuCI3ds6ib0$^72@|v`+PMuD?V7d`FW?)2wxy zCY>L=vmv;+K|6kq{LNftrQvSmg3W#MwAXhRzO7)qzFV;b@zC;K5xviqLY#`d!A3de z-^oYMjCZ&7)-}EGSvqMpr1g!%MTE)DmpcF0@)H}h{EIW?53|+Cls_y}{vniq9oT6< zE+@k{XD9_V`U={=mDO)Xgk7%kzkDA?RzI7iBpCufJS8<`Pe0VpcFJ_|-tq!%4z8?v$_5eNMMi0H||qgQMUKUpVXbxR0?%)elUD6yC=5O%hea#QD< z+C;tVl(&d=>;h2P z2r4XR(fnC`Aaj(}XA&7(m|4z3gmm%i6oFj*4gwwapjgrO-czS=w^ny)t^P)$)N~WD z*x!7zVBKiu!J;9?Bd&M0c(pPd2yF2xL}hx|%Jc<@)NQ*!adujn7SoTko+-{2r4Bb< z29RcgzW?}@K&7LZ0nk7x5UspXo*MgRHP6Sz` zW`enw_;#Q2i7${EOl40UDe0$VzD+Va1zjth35AIWw!a*>Dl`}9#x3_brXmfg67E ze;LKdo?68;>59ov9!|RWTSh27)Ghb?*ENmYwmFLu;X=O`8YG`nttpJ?=b(`KwKc{dZH&yZ?h@9b6VtQ9RkU|-gM>8?QsSboT2WqRpg|n?P73|91 zRJ!~fg1`Gydhi{m11m9SqCn)cEm%&F-3?nzLQY6#{C~r*y&)6w03mz>#>;Sb zhXl8|31GW752S=-Xx|Aqv{hg0UFCZB5UZoJqWR`4z) zUk=h{3?5g05fck5E&Y++f!sF&tnH$3oOYLr?`TwaK&?eZITSB#)n9~3PeoZ`!+QC{ z)Go*gd@55l=|t@mFs~`eCbs}!i{we5`E^38SMw?#5EuFrI8M98mvAw{v9_^f*qyC{6w=qz1CQw=qcRmoo4*X|c%hAAflegMLeitT`h z{w9sul5Unw7*^wlfyP-dhQRNT+2I~tWc~>rhCCPQAvqE)-u7d<#n*n)K6XEPu(r^E z6Ujco8G0~s6PKH%O(UF%Q6g9IymPAZra=@^PO6AAls>#o4)PT@yoz5Y{@)#H6%^8V zv8L1^sw6R!#((oBhu zFhOzNoat~|O%*s)csT3@4&az1oedA&@_IHLD-gZI1YY50LE2X>EQ6YCd=LDWZ$Z+xB z`jX=R2f$|WzdIX02KZoqO*UTpyDM+c1!i?(IbEtM5noW5c%v$D!2=MWRIqeFRMvDA z2PoqS9SEt?#eKC!dfxaKNr4?e$h^WO&WTNtL~LGIM#&77k zpEJIg04_qr%EKbCuhS$BmO@lv$}OPKHyee1+qy}ogml9*J_Sjes!mr>|l z4l5`V@E1+wZ4xFcUX(&a zJ^VwuSnQW9V@enQT?-FfB4yBU_VSV0E2M#aKRoTardy@8g>Hncrp#N#1;%n;EyHnYx z#r&B_Pxkq>BxGeY4VRO5*!MESa_L={yc*GD{?4Kl1f_KG{{TEYWKb!{8HyHjh6|zv z+|1c{a`bVT`Nh4zsLZZB;b}htT;@tdr~h~*g_4t& zAnhi?+?T#_>EL|uzwAJz$5Oed&76TJ=X%33e?xbozIHzqWa28cjp)i}>X5j)n$SLS z2^f3ju0cVLJf!^r39ye!fPr$GS7o)a<`3iq;2;9I0jV=nq$)@rh-Ie8w@%a=vc3!K z<7GvENWV@OfBh$IBX%owcK7Y~X3JZpvXqq#$C?erTHdn+`pX-dE$`>q^8VyyW&c&n zo3pd>umx}eSJ|X81C%vN5&eHkS~Zb8ovid`-jl^2imc*6W&iDtIeH9LkhDV#yh|bFF$iFhM;6mpadsS*VYVvQQu250{C?E#v|5Y9TTLJ#Gusqii7~ z+(P!-bs_7`C?Y-OUQiOkX?x;Y<=#0NY1Fb(_AiNJ0jV&RyRJ7ow6Yt`b+{&y^g>04h=)@3&SRU7}$``X0^zSqfH<c zBUH&zUdN3r?)yn!aY6%uB;Ky-?a=Q;No33*BE89Xhrp*xd@HU;UfUOp>8u@aqe&2H z3h`w3pJ8t$wBQh})6lN6Hen;D_`U|f$c%h7sf88Esvy?pErmXZp|xa|LM1+XBRe0> z-okj7wNIt&I>=hTN#!idJWr&6(YAnkQ!KbSfrW0olqGy}j_92Pn_(p0+a_LMjMUBv zT%(CCr(Kvj#PS?(-Rxzyp)8)m3wV{qbFVq00ZIu;0gm5Yxl|?Ee9M`nD7YkY9%~_g zxTr2AoRxd17hM_AcFnzl4??E9;F;$xc*3(pl*}x3R2dU^MFk+mT5Bf=*>zTtiaDkMX1kHCR1ejzjY&id!{ zeWm13;vU;SFI4X?`sYnVdj0b(Nl5=ZL)`ZL^E@}Q6(r0>czpenb+OD|cKvrh9YNQP z47O82p(FpIcTCQv7yB6|#^~>_TNuCUiESHkm{}XS!DzymDd`s%; zgg*X*t3?`Hkv1Kb^X$V(UM)ithFee2+7mMZvmWYyT)mm^~>*F z5GA z+4ay5(Z=I-*^XPtSVx}gB95s88CLGw%qT?>jJZ2bZlGREtTg2RXgIrK@{O@431t6> zizu6X^BKuxRTS5hji&!}+2LvyxssiMMEK>HGZJZpTRaPC7y4_g{D+$Tk)GtsaTCYt zjgLK8P8lwn`zjTfI#2H5OS~5wKC>_$;=d@qC-s!X&-9WOn5VmOHG6RZQ6(2v!DpM~ z(j2+%thT;~TpPfJ;<8oC7rNzsx8P0eMaa_4bOyszZ}VHg&|ylCks5+8UMns6*Iw-U z$!GQgDWu^>x$%ZI7oUfeyVRN@1KVm!DeSAr(|`So{YAFFA8Gicb7cD(^cg4d%oaq< zQ+o+)z8;E8XRi~QXY7k*4bjJRqQ54VgWYD*AbIn)PTv}N8}b`4M>woXY~#3oqQQ)2 zs&ZoQIFnj9vsdD9+=gR&dJIq(W7+}QuZLL!awU>{uY#M+xMj95I&hoZgBf|o!@fHB z=$CRU_L5U4>93gEX|L1|Sj>kwHlKdLV!M2og4Ewdmbew)BU;{gRVe0MDqz2^=0>xI zwobA9bQX9d_~`mr`Sw_F%n#afPYDfbj!zxhE>muf=rW7Sq+(7@!tSKWMvUeRqPaxd zi|ZR2WG5xr`^-pk`mH@8V#FXHGf$3?PuSfm>!%`ALe0);g^7vul6@oGxbn0M6cv$) zZ09D7X8P!;$m(w+`Oio4-?nYnZ#JEUl296%>lrmN%I0u}S3iqEU#oIIi-Ap^QrJa59@n2kCE!zg!Zfs4EYhAP#>XB_ z;hy+m-62h4ZtJPu3texW^-g!aaq$Xc54}Ve0Z-pIDl^WP7g)YC5WiU{f090HFQM!4!5namCb+2j?sMVeXEWBzIoLe&EI}Ig zh`czVrhkZ2aUT>*7avZY3434(j*xGEp~0SeNMK;Q1Y##3q~*Kh__UqRkznq{*B1RI zU2Ja0pTKzJu2N}lsrB7lX9Luc3YE6t&VlDi6?LA~Bt(4&5*P=hi~l0I{d*>W5?$NV z=Uc*k&ImA<({#I|r&qduq=qQNTfqrt{__Yi_c?)jMsXsK4`U`2Ozmzx4SKc3(FWmCx zx%c3#>_(b!w!8=z065EB5ki`xd1yojya~+bx*? zl)iT>yr6~0fX~3I+6_FnJ^@J%ft9qqGu7xg{@nB;6lKzXC|t|-!4CY&OZGpa+g!kC-lo^au72YCZ*isy{O2l}1sZZ3qFcrUc@X9T`-(=v){>QyK zykRznUk2fv(94U2m@;EPMRqLG1IA_2vua7KPHfF$_)ii?6ZIq-Ac^?pj6XNw=vhB- z4K%QuNKV>sZlVaz1z2ASpUdAy&wWw`zL%|TTaDy8$);Owb5&d46ZrmRc`XlXc?p|y z%%keN2A^y1+$bZ5&F2$jMB5{^Ir#spc!qmU`u2W3YntYx1J@Mh$>EBMG|0n}Tfih; z{5Jno?;4O)!RdWRUdFNjwL3*pyCD0&q**8I1om+j_Wqin*uq}?SGN-V+riGE5BMi5Zd=JD zGf$cs3E|LXMNrGGaf?x*Qr1%qVhroRbI zuje1a9O|KS^No_;N7Ih@bQZXIF5E0_2PwP>lD{2okFy2tuL+86fs6klO{xFpOf;Ep?fsJeEz9zxmWlC$&jtB zyK|S-=S*&GhQwLFv`7EW6wiQ1djmAURlGkJCt3W5B|jh|y=Qx4>yzL&FFoLRN=Ofg z=>ItVuh#zw`aeK&6pQ-<|^#3~juhakQ_5c5{_b%{pR@M6Oo+NFN) zRz=BCwP)UWGm`}Le82zqeP_4tUi-54+H0@9_S(01^7d>0 zBig@7`?qL+K>N38|90(vT>D$Ke~0$((*E7rr@Z&h{;c-z(f+;K-=_U9Y5zX$e?|L) z+P`1>4`}~E?QhrqH?{w;_8-yykoLc;{l~TceeLhi{*Sc(g!X@`{bB9@O#4r1|7q>- z)c&uu|BUv3tNjt}|3UlDYX8sL-=+N*wEv>^U)KJp_W!E=*R}tK_IGRlE$#2o{y(&@ zFc|jEF42CO_NQvUT>JZKe}C;CsQn7u<=Q`2`_0;?o!C3u zul+UJZ`J-f?XQR5eDksAU5mYc%ih_wfCJsMcF+GAyZ-Ju3_Zh86GJ~^D9q3fhAtAu4>Q2?I~h8ep`S9;%n-lB+Z|)*n+)B^&>%zn zGT-y}GW0`+?qcYV4Bf_1DHeIp_cL@HL;NCe_acT;3~gj+BSUvF)W*=`46S461%{d# znlS~TI)>^P;`fNVI~bbF(6tQBV(1Qrj$-IX3{^1nB12OdDxHeZo_7#Blp%gGxqA*n zyBMlv=(h~{8G4GLHimx0P>i7=h8|?-L57}Xh~H`M-Ukbq=ReEPMGS3a=&KCf!qD3c zUBl3la)d5tXbVGehWNvW=lNym?vi~Fx|pG}8Ct{8MGP%xXfs3n-e>oAhWLH$?q4%> z3PVsj^*p~vZ9<1L^cr*bXXt=^5h`J5HbcAjAao8x{F-<7MGQU5&?biX_3Q4N85(Bj zeulo!(9aoqn4z~Ax}TvV_d|%^*zR7$(A^BRGQ{spcgGp}2tzk9lxFBYhWZ#9VkpAU zPKGux^g2W989H!(g!nzv?h_emV5pvtBb*vkG3p`jP&g%b#4TTRojL=oo;0t7jP@AHQUPZttBF@KjZQI7Ty@Xw|YwdUH736x!N%REmhYsnH|0bk9Iga(o*;&b9jMrqfUmm z94TJFdzsS>?|p#U-GB%=xE;`Q8@wYVLw!+lc+2j&AKn<=L?+Y(?HFJ$+|Jkuc&=f9 zZttCf8#QsI7&sWu>rD6%o_+@C-W~2;s`My|zX^{PYZn5?_&g*T?X(yw0RY3GIiPtqdm+A%;{^BAM-4rPFDAs+Iz43Fm=c*Xeo zm(Zd-N5KerIT=%z`Wr$Njdr?ksQRD9b2xND;e1r%&S2zQcyRh{T(%#xTF3x3_bnoP z0?&O6(B*0-&fwhnSZ21}x*RBTsB0SeIb^{*P|4BTa zTj3S0zXqAw)xduj<*zL5WicET8^-`m96#@)p2l-29_?z8!W{m!RP_OPWKO$3BSMkA z3g~$S9u1UsZ%WR-Fhiaact!cw`o}U1d>oH9TC`Ja|DW)9egp4+r2H%pX3OGu^e|+V zS22>r!^o9*JXgRw3XgVZ7@W}`TfUn~HF!>CfR4grc^37MSV8{(nez94IIT**=%Mwb ziZ5mtT!sJ#%PEXpivY*<5sYj@fF?%g>_LFtrpp|KY({1i4Iiw}^&viBtaCOpXCb^9 zK+|p&A{eFWLO|65FWc`_59a7H8xR@OZn0?>XhQH9U>|V%qNtKt8DKso-e{1 zLrZLYwgdxYaxES`PtRt6E^8YoFYOrE4-Z!oY9<~|CfaG-n@df7-z`Jh9f;sFK8l+F z^=WuF8cfoaakR^(Fo1QG@&V2B1_FnmpmyaL29%A?xf~Hz&+mJwYvJin&=Ic=1&Owd zm7Ob*5UH((m*vt>-FxRBp#~Q%1}e3HV^GhAoREIUNEjaL`8^|?*cSk5H16fRh-mjL zB9ureIPtuV$QW5mzr7{}6a(zH8X&8K;LW!=^@yr3QwJ}rq1-ky=X~a@b>;*l zroX;}n4tQhgr`(uGwN3&-OZFS+FYU5p=o^xt7$6sY z#Qiy*7ChRWh!p0K3snbikx9p*6cO@w4WNf2$?|uTiBKatO=$kUDi*75=q zcs7!)pUq>=JIr|yUbg<15Mlkh0X>{5v-NW+&YXh*J^R2LQ@`|e8A@r#0Bd=U30`~4`c%;U4#wBX)Q1-l zm<3qMNChlhAE3^;4iV-Y&YUkHa;(jniWDtTK+i$&va&u>a%M4SCOocRwWBEQyv-1s ztQ`Y0@$@jpl>pnH#^a$dinjlsEuUqK0e&9qPI7oRJl6jeKo2)hMeF}(${&v!xVpa_ zkLtw3DsN(h>m5d}$D>ye1=l^cd;(aye0E<>C1Uw&@pwqAApieN`RxAmd{Ebp0oHjq z#)Jys`5YeYN+7^v5ITW5$05R{gmzC#&O+w=1(7o(L!F2e>Q*J7=l$@qy0t`d&Sg#= zyfJNi!c+PfXc_g<1k>=zK?77#-G!$Ik9PY2kzAk8oP!Y|dF{@{h+r8WC8|zDcpaqO z8yE!4*~FYf;Bhk7ZW$uvdJUk*5AO)cP+gLfU``xfwmp|i&W+5u8s3=ph+Wd%OnMBk z{$DY23!c>s&~XxB{V(J3{2AUDT4H0*w{2m7w5G7xoD`Y>wR>1{W-wYNP`Z?PT4{@JS}c1iFCq z6zOmQGYjySjPNjtlZVcE1`&4e-vB*-g2z$#79*U(4?#pbgyC}M1l&Do$G|u798C-w z6_%e1=;7jIjIP-E@}DU`6E(1zAHbu>39F1T(uRkTjd(oW@Cw>%TYfDNbos2kUXKKp zXHicZyn_6{_wt~q-Kwf&=lpmg+_z*|q&^l+g*K-eZ5|=>D=SyUqV=)(mf(g+Nav={ zVfw=J!_kh|rm^_GWsxqL0^WA>sB?p#HDVurXoY`|vKmLUM5Aq!B-RFR56;ls6boyaO9DdX>M;<$C!8~8( z(KFt6+$nocKB?-|_n)@p^3CmiZNUv4p`NZ7xJe{ay_>dt@QN${ZP|+YRgKLpt!vkv zzy5-YE?!f+H@f${@THdl$+{0U+tB|sJY#Y7qO;FDYhiwap$|xK%3})RJfNF~hdRSS zL<7vR%N-F_hdW;?R|TGf@o+eCpijqh7@ouNaB7-?=SV!o+J>zEN9t!i*d*6zpe`6P z(CDMl*OsM)^p$vS`Pi}s`sy)p<>@TqNTc&L=JatvP9N)I?Xh5^s!xQ1sc^K*o7xof zcJ@Xh$@WAj6!mV>!yxGmC%w^F${UPCVw*x8r+Jf`!m0LdT_7e%p$>0PtRtjayF=bY z=(65WGKHkRa7QSnGqN=Lg5d~g@<8 z;fqug`=90 zxvDwV4kd|2n;KL@s4v_eTAKupACEI`8$q$M&n^vZ*$@jRI=m2OtT&|^6A3W1sT<;p zp-QboKtsilyRKB7AM$ol+j3>0ZeSHj(Jf3&dgoN0JSns)2U<_8H%T4Jk=oFkO2wis zYU7}RnsiYr5sW4yRxkU)iBxYeLe`*~9Z>C%Ze_JswJcrP99XkV`%m zfw|tbQH}!Yxb%0jH=NQ*@$lwQgqqkBOwApOj-hEQmT@o_*29iN@1|hVYt$2@!_jc+ ze6-kTL$zqL9?U`}7zI)?6^yorys=L2s+OESdKJdOoR+1ga6QIcA{L22D^7QjJsEV3 z>RO^QRK1;vSPwdKQ!H^Q%B8x&ddFPvoYgJf_1;Lh2Mwl1L9A57aoI9VOw1C8T{VV8 zOKM9bRGs6jGX#s}4Pn?~fQ`dd0){IQhSeckt6EyLAzanlvmunAko6cIU&Kae9B+k0 z#⁣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 E4_rMq{r~^~ literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/Versions/Current b/SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/Versions/Current new file mode 120000 index 0000000..50aea0e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/Versions/Current @@ -0,0 +1 @@ +2.1.0 \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/sfml-window b/SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/sfml-window new file mode 120000 index 0000000..67a7293 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/Frameworks/sfml-window.framework/sfml-window @@ -0,0 +1 @@ +Versions/Current/sfml-window \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/cmake/Modules/FindSFML.cmake b/SFML-2.1-osx-clang-universal/cmake/Modules/FindSFML.cmake new file mode 100644 index 0000000..3c57641 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/cmake/Modules/FindSFML.cmake @@ -0,0 +1,209 @@ +# This script locates the SFML library +# ------------------------------------ +# +# Usage +# ----- +# +# When you try to locate the SFML libraries, you must specify which modules you want to use (system, window, graphics, network, audio, main). +# If none is given, the SFML_LIBRARIES variable will be empty and you'll end up linking to nothing. +# example: +# find_package(SFML COMPONENTS graphics window system) // find the graphics, window and system modules +# +# You can enforce a specific version, either MAJOR.MINOR or only MAJOR. +# If nothing is specified, the version won't be checked (ie. any version will be accepted). +# example: +# find_package(SFML COMPONENTS ...) // no specific version required +# find_package(SFML 2 COMPONENTS ...) // any 2.x version +# find_package(SFML 2.4 COMPONENTS ...) // version 2.4 or greater +# +# By default, the dynamic libraries of SFML will be found. To find the static ones instead, +# you must set the SFML_STATIC_LIBRARIES variable to TRUE before calling find_package(SFML ...). +# In case of static linking, the SFML_STATIC macro will also be defined by this script. +# example: +# set(SFML_STATIC_LIBRARIES TRUE) +# find_package(SFML 2 COMPONENTS network system) +# +# On Mac OS X if SFML_STATIC_LIBRARIES is not set to TRUE then by default CMake will search for frameworks unless +# CMAKE_FIND_FRAMEWORK is set to "NEVER" for example. Please refer to CMake documentation for more details. +# Moreover, keep in mind that SFML frameworks are only available as release libraries unlike dylibs which +# are available for both release and debug modes. +# +# If SFML is not installed in a standard path, you can use the SFML_ROOT CMake (or environment) variable +# to tell CMake where SFML is. +# +# Output +# ------ +# +# This script defines the following variables: +# - For each specified module XXX (system, window, graphics, network, audio, main): +# - SFML_XXX_LIBRARY_DEBUG: the name of the debug library of the xxx module (set to SFML_XXX_LIBRARY_RELEASE is no debug version is found) +# - SFML_XXX_LIBRARY_RELEASE: the name of the release library of the xxx module (set to SFML_XXX_LIBRARY_DEBUG is no release version is found) +# - SFML_XXX_LIBRARY: the name of the library to link to for the xxx module (includes both debug and optimized names if necessary) +# - SFML_XXX_FOUND: true if either the debug or release library of the xxx module is found +# - SFML_LIBRARIES: the list of all libraries corresponding to the required modules +# - SFML_FOUND: true if all the required modules are found +# - SFML_INCLUDE_DIR: the path where SFML headers are located (the directory containing the SFML/Config.hpp file) +# +# example: +# find_package(SFML 2 COMPONENTS system window graphics audio REQUIRED) +# include_directories(${SFML_INCLUDE_DIR}) +# add_executable(myapp ...) +# target_link_libraries(myapp ${SFML_LIBRARIES}) + +# define the SFML_STATIC macro if static build was chosen +if(SFML_STATIC_LIBRARIES) + add_definitions(-DSFML_STATIC) +endif() + +# deduce the libraries suffix from the options +set(FIND_SFML_LIB_SUFFIX "") +if(SFML_STATIC_LIBRARIES) + set(FIND_SFML_LIB_SUFFIX "${FIND_SFML_LIB_SUFFIX}-s") +endif() + +# find the SFML include directory +find_path(SFML_INCLUDE_DIR SFML/Config.hpp + PATH_SUFFIXES include + PATHS + ${SFML_ROOT} + $ENV{SFML_ROOT} + ~/Library/Frameworks + /Library/Frameworks + /usr/local/ + /usr/ + /sw # Fink + /opt/local/ # DarwinPorts + /opt/csw/ # Blastwave + /opt/) + +# check the version number +set(SFML_VERSION_OK TRUE) +if(SFML_FIND_VERSION AND SFML_INCLUDE_DIR) + # extract the major and minor version numbers from SFML/Config.hpp + # we have to handle framework a little bit differently : + if("${SFML_INCLUDE_DIR}" MATCHES "SFML.framework") + set(SFML_CONFIG_HPP_INPUT "${SFML_INCLUDE_DIR}/Headers/Config.hpp") + else() + set(SFML_CONFIG_HPP_INPUT "${SFML_INCLUDE_DIR}/SFML/Config.hpp") + endif() + FILE(READ "${SFML_CONFIG_HPP_INPUT}" SFML_CONFIG_HPP_CONTENTS) + STRING(REGEX MATCH ".*#define SFML_VERSION_MAJOR ([0-9]+).*#define SFML_VERSION_MINOR ([0-9]+).*" SFML_CONFIG_HPP_CONTENTS "${SFML_CONFIG_HPP_CONTENTS}") + STRING(REGEX REPLACE ".*#define SFML_VERSION_MAJOR ([0-9]+).*" "\\1" SFML_VERSION_MAJOR "${SFML_CONFIG_HPP_CONTENTS}") + STRING(REGEX REPLACE ".*#define SFML_VERSION_MINOR ([0-9]+).*" "\\1" SFML_VERSION_MINOR "${SFML_CONFIG_HPP_CONTENTS}") + math(EXPR SFML_REQUESTED_VERSION "${SFML_FIND_VERSION_MAJOR} * 10 + ${SFML_FIND_VERSION_MINOR}") + + # if we could extract them, compare with the requested version number + if (SFML_VERSION_MAJOR) + # transform version numbers to an integer + math(EXPR SFML_VERSION "${SFML_VERSION_MAJOR} * 10 + ${SFML_VERSION_MINOR}") + + # compare them + if(SFML_VERSION LESS SFML_REQUESTED_VERSION) + set(SFML_VERSION_OK FALSE) + endif() + else() + # SFML version is < 2.0 + if (SFML_REQUESTED_VERSION GREATER 19) + set(SFML_VERSION_OK FALSE) + set(SFML_VERSION_MAJOR 1) + set(SFML_VERSION_MINOR x) + endif() + endif() +endif() + +# find the requested modules +set(SFML_FOUND TRUE) # will be set to false if one of the required modules is not found +set(FIND_SFML_LIB_PATHS + ${SFML_ROOT} + $ENV{SFML_ROOT} + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt) +foreach(FIND_SFML_COMPONENT ${SFML_FIND_COMPONENTS}) + string(TOLOWER ${FIND_SFML_COMPONENT} FIND_SFML_COMPONENT_LOWER) + string(TOUPPER ${FIND_SFML_COMPONENT} FIND_SFML_COMPONENT_UPPER) + set(FIND_SFML_COMPONENT_NAME sfml-${FIND_SFML_COMPONENT_LOWER}${FIND_SFML_LIB_SUFFIX}) + + # no suffix for sfml-main, it is always a static library + if(FIND_SFML_COMPONENT_LOWER STREQUAL "main") + set(FIND_SFML_COMPONENT_NAME sfml-${FIND_SFML_COMPONENT_LOWER}) + endif() + + # debug library + find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG + NAMES ${FIND_SFML_COMPONENT_NAME}-d + PATH_SUFFIXES lib64 lib + PATHS ${FIND_SFML_LIB_PATHS}) + + # release library + find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE + NAMES ${FIND_SFML_COMPONENT_NAME} + PATH_SUFFIXES lib64 lib + PATHS ${FIND_SFML_LIB_PATHS}) + + if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG OR SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE) + # library found + set(SFML_${FIND_SFML_COMPONENT_UPPER}_FOUND TRUE) + + # if both are found, set SFML_XXX_LIBRARY to contain both + if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG AND SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY debug ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG} + optimized ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE}) + endif() + + # if only one debug/release variant is found, set the other to be equal to the found one + if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG AND NOT SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE) + # debug and not release + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG}) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG}) + endif() + if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE AND NOT SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG) + # release and not debug + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE}) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE}) + endif() + else() + # library not found + set(SFML_FOUND FALSE) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_FOUND FALSE) + set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY "") + set(FIND_SFML_MISSING "${FIND_SFML_MISSING} SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY") + endif() + + # mark as advanced + MARK_AS_ADVANCED(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY + SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE + SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG) + + # add to the global list of libraries + set(SFML_LIBRARIES ${SFML_LIBRARIES} "${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY}") +endforeach() + +# handle errors +if(NOT SFML_VERSION_OK) + # SFML version not ok + set(FIND_SFML_ERROR "SFML found but version too low (requested: ${SFML_FIND_VERSION}, found: ${SFML_VERSION_MAJOR}.${SFML_VERSION_MINOR})") + set(SFML_FOUND FALSE) +elseif(NOT SFML_FOUND) + # include directory or library not found + set(FIND_SFML_ERROR "Could NOT find SFML (missing: ${FIND_SFML_MISSING})") +endif() +if (NOT SFML_FOUND) + if(SFML_FIND_REQUIRED) + # fatal error + message(FATAL_ERROR ${FIND_SFML_ERROR}) + elseif(NOT SFML_FIND_QUIETLY) + # error but continue + message("${FIND_SFML_ERROR}") + endif() +endif() + +# handle success +if(SFML_FOUND) + message(STATUS "Found SFML ${SFML_VERSION_MAJOR}.${SFML_VERSION_MINOR} in ${SFML_INCLUDE_DIR}") +endif() diff --git a/SFML-2.1-osx-clang-universal/doc/html/Audio_2Export_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Audio_2Export_8hpp_source.htm new file mode 100644 index 0000000..cd19ffc --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Audio_2Export_8hpp_source.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + +

+ +
+
+
Audio/Export.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_AUDIO_EXPORT_HPP
+
26 #define SFML_AUDIO_EXPORT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 
+
33 
+
35 // Define portable import / export macros
+
37 #if defined(SFML_AUDIO_EXPORTS)
+
38 
+
39  #define SFML_AUDIO_API SFML_API_EXPORT
+
40 
+
41 #else
+
42 
+
43  #define SFML_AUDIO_API SFML_API_IMPORT
+
44 
+
45 #endif
+
46 
+
47 
+
48 #endif // SFML_AUDIO_EXPORT_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Audio_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Audio_8hpp_source.htm new file mode 100644 index 0000000..fb86f08 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Audio_8hpp_source.htm @@ -0,0 +1,88 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Audio.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_AUDIO_HPP
+
26 #define SFML_AUDIO_HPP
+
27 
+
29 // Headers
+
31 
+
32 #include <SFML/System.hpp>
+
33 #include <SFML/Audio/Listener.hpp>
+
34 #include <SFML/Audio/Music.hpp>
+
35 #include <SFML/Audio/Sound.hpp>
+
36 #include <SFML/Audio/SoundBuffer.hpp>
+
37 #include <SFML/Audio/SoundBufferRecorder.hpp>
+
38 #include <SFML/Audio/SoundRecorder.hpp>
+
39 #include <SFML/Audio/SoundStream.hpp>
+
40 
+
41 
+
42 #endif // SFML_AUDIO_HPP
+
43 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/BlendMode_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/BlendMode_8hpp_source.htm new file mode 100644 index 0000000..54bc134 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/BlendMode_8hpp_source.htm @@ -0,0 +1,88 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
BlendMode.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_BLENDMODE_HPP
+
26 #define SFML_BLENDMODE_HPP
+
27 
+
28 namespace sf
+
29 {
+ +
36 {
+ + + + +
41 };
+
42 
+
43 } // namespace sf
+
44 
+
45 
+
46 #endif // SFML_BLENDMODE_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/CircleShape_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/CircleShape_8hpp_source.htm new file mode 100644 index 0000000..e281ded --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/CircleShape_8hpp_source.htm @@ -0,0 +1,110 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
CircleShape.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_CIRCLESHAPE_HPP
+
26 #define SFML_CIRCLESHAPE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Shape.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
41 class SFML_GRAPHICS_API CircleShape : public Shape
+
42 {
+
43 public :
+
44 
+
52  explicit CircleShape(float radius = 0, unsigned int pointCount = 30);
+
53 
+
62  void setRadius(float radius);
+
63 
+
72  float getRadius() const;
+
73 
+
82  void setPointCount(unsigned int count);
+
83 
+
92  virtual unsigned int getPointCount() const;
+
93 
+
104  virtual Vector2f getPoint(unsigned int index) const;
+
105 
+
106 private :
+
107 
+
109  // Member data
+
111  float m_radius;
+
112  unsigned int m_pointCount;
+
113 };
+
114 
+
115 } // namespace sf
+
116 
+
117 
+
118 #endif // SFML_CIRCLESHAPE_HPP
+
119 
+
120 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Clock_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Clock_8hpp_source.htm new file mode 100644 index 0000000..798b218 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Clock_8hpp_source.htm @@ -0,0 +1,103 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Clock.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_CLOCK_HPP
+
26 #define SFML_CLOCK_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 #include <SFML/System/Time.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
41 class SFML_SYSTEM_API Clock
+
42 {
+
43 public :
+
44 
+
51  Clock();
+
52 
+
63  Time getElapsedTime() const;
+
64 
+
74  Time restart();
+
75 
+
76 private :
+
77 
+
79  // Member data
+
81  Time m_startTime;
+
82 };
+
83 
+
84 } // namespace sf
+
85 
+
86 
+
87 #endif // SFML_CLOCK_HPP
+
88 
+
89 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Color_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Color_8hpp_source.htm new file mode 100644 index 0000000..5d01300 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Color_8hpp_source.htm @@ -0,0 +1,124 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Color.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_COLOR_HPP
+
26 #define SFML_COLOR_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 
+
33 
+
34 namespace sf
+
35 {
+
40 class SFML_GRAPHICS_API Color
+
41 {
+
42 public :
+
43 
+
51  Color();
+
52 
+
62  Color(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha = 255);
+
63 
+
65  // Static member data
+
67  static const Color Black;
+
68  static const Color White;
+
69  static const Color Red;
+
70  static const Color Green;
+
71  static const Color Blue;
+
72  static const Color Yellow;
+
73  static const Color Magenta;
+
74  static const Color Cyan;
+
75  static const Color Transparent;
+
76 
+
78  // Member data
+
80  Uint8 r;
+
81  Uint8 g;
+
82  Uint8 b;
+
83  Uint8 a;
+
84 };
+
85 
+
98 SFML_GRAPHICS_API bool operator ==(const Color& left, const Color& right);
+
99 
+
112 SFML_GRAPHICS_API bool operator !=(const Color& left, const Color& right);
+
113 
+
127 SFML_GRAPHICS_API Color operator +(const Color& left, const Color& right);
+
128 
+
144 SFML_GRAPHICS_API Color operator *(const Color& left, const Color& right);
+
145 
+
160 SFML_GRAPHICS_API Color& operator +=(Color& left, const Color& right);
+
161 
+
178 SFML_GRAPHICS_API Color& operator *=(Color& left, const Color& right);
+
179 
+
180 } // namespace sf
+
181 
+
182 
+
183 #endif // SFML_COLOR_HPP
+
184 
+
185 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Config_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Config_8hpp_source.htm new file mode 100644 index 0000000..8df13f0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Config_8hpp_source.htm @@ -0,0 +1,196 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Config.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_CONFIG_HPP
+
26 #define SFML_CONFIG_HPP
+
27 
+
28 
+
30 // Define the SFML version
+
32 #define SFML_VERSION_MAJOR 2
+
33 #define SFML_VERSION_MINOR 1
+
34 
+
35 
+
37 // Identify the operating system
+
39 #if defined(_WIN32) || defined(__WIN32__)
+
40 
+
41  // Windows
+
42  #define SFML_SYSTEM_WINDOWS
+
43  #ifndef NOMINMAX
+
44  #define NOMINMAX
+
45  #endif
+
46 
+
47 #elif defined(linux) || defined(__linux)
+
48 
+
49  // Linux
+
50  #define SFML_SYSTEM_LINUX
+
51 
+
52 #elif defined(__APPLE__) || defined(MACOSX) || defined(macintosh) || defined(Macintosh)
+
53 
+
54  // MacOS
+
55  #define SFML_SYSTEM_MACOS
+
56 
+
57 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+
58 
+
59  // FreeBSD
+
60  #define SFML_SYSTEM_FREEBSD
+
61 
+
62 #else
+
63 
+
64  // Unsupported system
+
65  #error This operating system is not supported by SFML library
+
66 
+
67 #endif
+
68 
+
69 
+
71 // Define a portable debug macro
+
73 #if !defined(NDEBUG)
+
74 
+
75  #define SFML_DEBUG
+
76 
+
77 #endif
+
78 
+
79 
+
81 // Define helpers to create portable import / export macros for each module
+
83 #if !defined(SFML_STATIC)
+
84 
+
85  #if defined(SFML_SYSTEM_WINDOWS)
+
86 
+
87  // Windows compilers need specific (and different) keywords for export and import
+
88  #define SFML_API_EXPORT __declspec(dllexport)
+
89  #define SFML_API_IMPORT __declspec(dllimport)
+
90 
+
91  // For Visual C++ compilers, we also need to turn off this annoying C4251 warning
+
92  #ifdef _MSC_VER
+
93 
+
94  #pragma warning(disable : 4251)
+
95 
+
96  #endif
+
97 
+
98  #else // Linux, FreeBSD, Mac OS X
+
99 
+
100  #if __GNUC__ >= 4
+
101 
+
102  // GCC 4 has special keywords for showing/hidding symbols,
+
103  // the same keyword is used for both importing and exporting
+
104  #define SFML_API_EXPORT __attribute__ ((__visibility__ ("default")))
+
105  #define SFML_API_IMPORT __attribute__ ((__visibility__ ("default")))
+
106 
+
107  #else
+
108 
+
109  // GCC < 4 has no mechanism to explicitely hide symbols, everything's exported
+
110  #define SFML_API_EXPORT
+
111  #define SFML_API_IMPORT
+
112 
+
113  #endif
+
114 
+
115  #endif
+
116 
+
117 #else
+
118 
+
119  // Static build doesn't need import/export macros
+
120  #define SFML_API_EXPORT
+
121  #define SFML_API_IMPORT
+
122 
+
123 #endif
+
124 
+
125 
+
127 // Define portable fixed-size types
+
129 namespace sf
+
130 {
+
131  // All "common" platforms use the same size for char, short and int
+
132  // (basically there are 3 types for 3 sizes, so no other match is possible),
+
133  // we can use them without doing any kind of check
+
134 
+
135  // 8 bits integer types
+
136  typedef signed char Int8;
+
137  typedef unsigned char Uint8;
+
138 
+
139  // 16 bits integer types
+
140  typedef signed short Int16;
+
141  typedef unsigned short Uint16;
+
142 
+
143  // 32 bits integer types
+
144  typedef signed int Int32;
+
145  typedef unsigned int Uint32;
+
146 
+
147  // 64 bits integer types
+
148  #if defined(_MSC_VER)
+
149  typedef signed __int64 Int64;
+
150  typedef unsigned __int64 Uint64;
+
151  #else
+
152  typedef signed long long Int64;
+
153  typedef unsigned long long Uint64;
+
154  #endif
+
155 
+
156 } // namespace sf
+
157 
+
158 
+
159 #endif // SFML_CONFIG_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/ContextSettings_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/ContextSettings_8hpp_source.htm new file mode 100644 index 0000000..0afd1a0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/ContextSettings_8hpp_source.htm @@ -0,0 +1,102 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
ContextSettings.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_CONTEXTSETTINGS_HPP
+
26 #define SFML_CONTEXTSETTINGS_HPP
+
27 
+
28 
+
29 namespace sf
+
30 {
+ +
37 {
+
48  explicit ContextSettings(unsigned int depth = 0, unsigned int stencil = 0, unsigned int antialiasing = 0, unsigned int major = 2, unsigned int minor = 0) :
+
49  depthBits (depth),
+
50  stencilBits (stencil),
+
51  antialiasingLevel(antialiasing),
+
52  majorVersion (major),
+
53  minorVersion (minor)
+
54  {
+
55  }
+
56 
+
58  // Member data
+
60  unsigned int depthBits;
+
61  unsigned int stencilBits;
+
62  unsigned int antialiasingLevel;
+
63  unsigned int majorVersion;
+
64  unsigned int minorVersion;
+
65 };
+
66 
+
67 } // namespace sf
+
68 
+
69 
+
70 #endif // SFML_CONTEXTSETTINGS_HPP
+
71 
+
72 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Context_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Context_8hpp_source.htm new file mode 100644 index 0000000..1b00b80 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Context_8hpp_source.htm @@ -0,0 +1,113 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Context.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_CONTEXT_HPP
+
26 #define SFML_CONTEXT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Window/Export.hpp>
+
32 #include <SFML/Window/GlResource.hpp>
+
33 #include <SFML/Window/ContextSettings.hpp>
+
34 #include <SFML/System/NonCopyable.hpp>
+
35 
+
36 
+
37 namespace sf
+
38 {
+
39 namespace priv
+
40 {
+
41  class GlContext;
+
42 }
+
43 
+
48 class SFML_WINDOW_API Context : GlResource, NonCopyable
+
49 {
+
50 public :
+
51 
+
58  Context();
+
59 
+
66  ~Context();
+
67 
+
76  bool setActive(bool active);
+
77 
+
78 public :
+
79 
+
91  Context(const ContextSettings& settings, unsigned int width, unsigned int height);
+
92 
+
93 private :
+
94 
+
96  // Member data
+
98  priv::GlContext* m_context;
+
99 };
+
100 
+
101 } // namespace sf
+
102 
+
103 
+
104 #endif // SFML_CONTEXT_HPP
+
105 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/ConvexShape_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/ConvexShape_8hpp_source.htm new file mode 100644 index 0000000..ae8c693 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/ConvexShape_8hpp_source.htm @@ -0,0 +1,108 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
ConvexShape.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_CONVEXSHAPE_HPP
+
26 #define SFML_CONVEXSHAPE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Shape.hpp>
+
33 #include <vector>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
42 class SFML_GRAPHICS_API ConvexShape : public Shape
+
43 {
+
44 public :
+
45 
+
52  explicit ConvexShape(unsigned int pointCount = 0);
+
53 
+
64  void setPointCount(unsigned int count);
+
65 
+
74  virtual unsigned int getPointCount() const;
+
75 
+
91  void setPoint(unsigned int index, const Vector2f& point);
+
92 
+
105  virtual Vector2f getPoint(unsigned int index) const;
+
106 
+
107 private :
+
108 
+
110  // Member data
+
112  std::vector<Vector2f> m_points;
+
113 };
+
114 
+
115 } // namespace sf
+
116 
+
117 
+
118 #endif // SFML_CONVEXSHAPE_HPP
+
119 
+
120 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Drawable_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Drawable_8hpp_source.htm new file mode 100644 index 0000000..0287a0b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Drawable_8hpp_source.htm @@ -0,0 +1,102 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Drawable.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_DRAWABLE_HPP
+
26 #define SFML_DRAWABLE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/RenderStates.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
37 class RenderTarget;
+
38 
+
44 class SFML_GRAPHICS_API Drawable
+
45 {
+
46 public :
+
47 
+
52  virtual ~Drawable() {}
+
53 
+
54 protected :
+
55 
+
56  friend class RenderTarget;
+
57 
+
69  virtual void draw(RenderTarget& target, RenderStates states) const = 0;
+
70 };
+
71 
+
72 } // namespace sf
+
73 
+
74 
+
75 #endif // SFML_DRAWABLE_HPP
+
76 
+
77 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Err_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Err_8hpp_source.htm new file mode 100644 index 0000000..47400b0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Err_8hpp_source.htm @@ -0,0 +1,89 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Err.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_ERR_HPP
+
26 #define SFML_ERR_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 #include <ostream>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
41 SFML_SYSTEM_API std::ostream& err();
+
42 
+
43 } // namespace sf
+
44 
+
45 
+
46 #endif // SFML_ERR_HPP
+
47 
+
48 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Event_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Event_8hpp_source.htm new file mode 100644 index 0000000..1ac3646 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Event_8hpp_source.htm @@ -0,0 +1,192 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Event.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_EVENT_HPP
+
26 #define SFML_EVENT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 #include <SFML/Window/Joystick.hpp>
+
33 #include <SFML/Window/Keyboard.hpp>
+
34 #include <SFML/Window/Mouse.hpp>
+
35 
+
36 
+
37 namespace sf
+
38 {
+
43 class Event
+
44 {
+
45 public :
+
46 
+
51  struct SizeEvent
+
52  {
+
53  unsigned int width;
+
54  unsigned int height;
+
55  };
+
56 
+
61  struct KeyEvent
+
62  {
+ +
64  bool alt;
+
65  bool control;
+
66  bool shift;
+
67  bool system;
+
68  };
+
69 
+
74  struct TextEvent
+
75  {
+
76  Uint32 unicode;
+
77  };
+
78 
+ +
84  {
+
85  int x;
+
86  int y;
+
87  };
+
88 
+ +
95  {
+ +
97  int x;
+
98  int y;
+
99  };
+
100 
+ +
106  {
+
107  int delta;
+
108  int x;
+
109  int y;
+
110  };
+
111 
+ +
118  {
+
119  unsigned int joystickId;
+
120  };
+
121 
+ +
127  {
+
128  unsigned int joystickId;
+ +
130  float position;
+
131  };
+
132 
+ +
139  {
+
140  unsigned int joystickId;
+
141  unsigned int button;
+
142  };
+
143 
+ +
149  {
+ + + + + + + + + + + + + + + + + + +
168 
+ +
170  };
+
171 
+
173  // Member data
+ +
176 
+
177  union
+
178  {
+ + + + + + + + + +
188  };
+
189 };
+
190 
+
191 } // namespace sf
+
192 
+
193 
+
194 #endif // SFML_EVENT_HPP
+
195 
+
196 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Font_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Font_8hpp_source.htm new file mode 100644 index 0000000..44fa77d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Font_8hpp_source.htm @@ -0,0 +1,166 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Font.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_FONT_HPP
+
26 #define SFML_FONT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Glyph.hpp>
+
33 #include <SFML/Graphics/Texture.hpp>
+
34 #include <SFML/Graphics/Rect.hpp>
+
35 #include <SFML/System/Vector2.hpp>
+
36 #include <SFML/System/String.hpp>
+
37 #include <map>
+
38 #include <string>
+
39 #include <vector>
+
40 
+
41 
+
42 namespace sf
+
43 {
+
44 class InputStream;
+
45 
+
50 class SFML_GRAPHICS_API Font
+
51 {
+
52 public :
+
53 
+
60  Font();
+
61 
+
68  Font(const Font& copy);
+
69 
+
76  ~Font();
+
77 
+
94  bool loadFromFile(const std::string& filename);
+
95 
+
113  bool loadFromMemory(const void* data, std::size_t sizeInBytes);
+
114 
+
131  bool loadFromStream(InputStream& stream);
+
132 
+
143  const Glyph& getGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const;
+
144 
+
161  int getKerning(Uint32 first, Uint32 second, unsigned int characterSize) const;
+
162 
+
174  int getLineSpacing(unsigned int characterSize) const;
+
175 
+
188  const Texture& getTexture(unsigned int characterSize) const;
+
189 
+
198  Font& operator =(const Font& right);
+
199 
+
200 private :
+
201 
+
206  struct Row
+
207  {
+
208  Row(unsigned int rowTop, unsigned int rowHeight) : width(0), top(rowTop), height(rowHeight) {}
+
209 
+
210  unsigned int width;
+
211  unsigned int top;
+
212  unsigned int height;
+
213  };
+
214 
+
216  // Types
+
218  typedef std::map<Uint32, Glyph> GlyphTable;
+
219 
+
224  struct Page
+
225  {
+
226  Page();
+
227 
+
228  GlyphTable glyphs;
+
229  sf::Texture texture;
+
230  unsigned int nextRow;
+
231  std::vector<Row> rows;
+
232  };
+
233 
+
238  void cleanup();
+
239 
+
250  Glyph loadGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const;
+
251 
+
262  IntRect findGlyphRect(Page& page, unsigned int width, unsigned int height) const;
+
263 
+
272  bool setCurrentSize(unsigned int characterSize) const;
+
273 
+
275  // Types
+
277  typedef std::map<unsigned int, Page> PageTable;
+
278 
+
280  // Member data
+
282  void* m_library;
+
283  void* m_face;
+
284  void* m_streamRec;
+
285  int* m_refCount;
+
286  mutable PageTable m_pages;
+
287  mutable std::vector<Uint8> m_pixelBuffer;
+
288 };
+
289 
+
290 } // namespace sf
+
291 
+
292 
+
293 #endif // SFML_FONT_HPP
+
294 
+
295 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Ftp_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Ftp_8hpp_source.htm new file mode 100644 index 0000000..de50b37 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Ftp_8hpp_source.htm @@ -0,0 +1,261 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Ftp.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_FTP_HPP
+
26 #define SFML_FTP_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Network/Export.hpp>
+
32 #include <SFML/Network/TcpSocket.hpp>
+
33 #include <SFML/System/NonCopyable.hpp>
+
34 #include <SFML/System/Time.hpp>
+
35 #include <string>
+
36 #include <vector>
+
37 
+
38 
+
39 namespace sf
+
40 {
+
41 class IpAddress;
+
42 
+
47 class SFML_NETWORK_API Ftp : NonCopyable
+
48 {
+
49 public :
+
50 
+ +
56  {
+ + +
59  Ebcdic
+
60  };
+
61 
+
66  class SFML_NETWORK_API Response
+
67  {
+
68  public :
+
69 
+
74  enum Status
+
75  {
+
76  // 1xx: the requested action is being initiated,
+
77  // expect another reply before proceeding with a new command
+
78  RestartMarkerReply = 110,
+
79  ServiceReadySoon = 120,
+
80  DataConnectionAlreadyOpened = 125,
+
81  OpeningDataConnection = 150,
+
82 
+
83  // 2xx: the requested action has been successfully completed
+
84  Ok = 200,
+
85  PointlessCommand = 202,
+
86  SystemStatus = 211,
+
87  DirectoryStatus = 212,
+
88  FileStatus = 213,
+
89  HelpMessage = 214,
+
90  SystemType = 215,
+
91  ServiceReady = 220,
+
92  ClosingConnection = 221,
+
93  DataConnectionOpened = 225,
+
94  ClosingDataConnection = 226,
+
95  EnteringPassiveMode = 227,
+
96  LoggedIn = 230,
+
97  FileActionOk = 250,
+
98  DirectoryOk = 257,
+
99 
+
100  // 3xx: the command has been accepted, but the requested action
+
101  // is dormant, pending receipt of further information
+
102  NeedPassword = 331,
+
103  NeedAccountToLogIn = 332,
+
104  NeedInformation = 350,
+
105 
+
106  // 4xx: the command was not accepted and the requested action did not take place,
+
107  // but the error condition is temporary and the action may be requested again
+
108  ServiceUnavailable = 421,
+
109  DataConnectionUnavailable = 425,
+
110  TransferAborted = 426,
+
111  FileActionAborted = 450,
+
112  LocalError = 451,
+
113  InsufficientStorageSpace = 452,
+
114 
+
115  // 5xx: the command was not accepted and
+
116  // the requested action did not take place
+
117  CommandUnknown = 500,
+
118  ParametersUnknown = 501,
+
119  CommandNotImplemented = 502,
+
120  BadCommandSequence = 503,
+
121  ParameterNotImplemented = 504,
+
122  NotLoggedIn = 530,
+
123  NeedAccountToStore = 532,
+
124  FileUnavailable = 550,
+
125  PageTypeUnknown = 551,
+
126  NotEnoughMemory = 552,
+
127  FilenameNotAllowed = 553,
+
128 
+
129  // 10xx: SFML custom codes
+
130  InvalidResponse = 1000,
+
131  ConnectionFailed = 1001,
+
132  ConnectionClosed = 1002,
+
133  InvalidFile = 1003
+
134  };
+
135 
+
146  explicit Response(Status code = InvalidResponse, const std::string& message = "");
+
147 
+
157  bool isOk() const;
+
158 
+
165  Status getStatus() const;
+
166 
+
173  const std::string& getMessage() const;
+
174 
+
175  private :
+
176 
+
178  // Member data
+
180  Status m_status;
+
181  std::string m_message;
+
182  };
+
183 
+
188  class SFML_NETWORK_API DirectoryResponse : public Response
+
189  {
+
190  public :
+
191 
+
198  DirectoryResponse(const Response& response);
+
199 
+
206  const std::string& getDirectory() const;
+
207 
+
208  private :
+
209 
+
211  // Member data
+
213  std::string m_directory;
+
214  };
+
215 
+
216 
+
221  class SFML_NETWORK_API ListingResponse : public Response
+
222  {
+
223  public :
+
224 
+
232  ListingResponse(const Response& response, const std::vector<char>& data);
+
233 
+
240  const std::vector<std::string>& getListing() const;
+
241 
+
242  private :
+
243 
+
245  // Member data
+
247  std::vector<std::string> m_listing;
+
248  };
+
249 
+
250 
+
258  ~Ftp();
+
259 
+
281  Response connect(const IpAddress& server, unsigned short port = 21, Time timeout = Time::Zero);
+
282 
+
291  Response disconnect();
+
292 
+
302  Response login();
+
303 
+
316  Response login(const std::string& name, const std::string& password);
+
317 
+
327  Response keepAlive();
+
328 
+
340  DirectoryResponse getWorkingDirectory();
+
341 
+
357  ListingResponse getDirectoryListing(const std::string& directory = "");
+
358 
+
371  Response changeDirectory(const std::string& directory);
+
372 
+
381  Response parentDirectory();
+
382 
+
396  Response createDirectory(const std::string& name);
+
397 
+
413  Response deleteDirectory(const std::string& name);
+
414 
+
429  Response renameFile(const std::string& file, const std::string& newName);
+
430 
+
446  Response deleteFile(const std::string& name);
+
447 
+
465  Response download(const std::string& remoteFile, const std::string& localPath, TransferMode mode = Binary);
+
466 
+
484  Response upload(const std::string& localFile, const std::string& remotePath, TransferMode mode = Binary);
+
485 
+
486 private :
+
487 
+
497  Response sendCommand(const std::string& command, const std::string& parameter = "");
+
498 
+
508  Response getResponse();
+
509 
+
515  class DataChannel;
+
516 
+
517  friend class DataChannel;
+
518 
+
520  // Member data
+
522  TcpSocket m_commandSocket;
+
523 };
+
524 
+
525 } // namespace sf
+
526 
+
527 
+
528 #endif // SFML_FTP_HPP
+
529 
+
530 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/GlResource_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/GlResource_8hpp_source.htm new file mode 100644 index 0000000..107f000 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/GlResource_8hpp_source.htm @@ -0,0 +1,96 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
GlResource.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_GLRESOURCE_HPP
+
26 #define SFML_GLRESOURCE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Window/Export.hpp>
+
32 
+
33 
+
34 namespace sf
+
35 {
+
40 class SFML_WINDOW_API GlResource
+
41 {
+
42 protected :
+
43 
+
48  GlResource();
+
49 
+
54  ~GlResource();
+
55 
+
60  static void ensureGlContext();
+
61 };
+
62 
+
63 } // namespace sf
+
64 
+
65 
+
66 #endif // SFML_GLRESOURCE_HPP
+
67 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Glyph_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Glyph_8hpp_source.htm new file mode 100644 index 0000000..6d39824 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Glyph_8hpp_source.htm @@ -0,0 +1,99 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Glyph.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_GLYPH_HPP
+
26 #define SFML_GLYPH_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Rect.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
41 class SFML_GRAPHICS_API Glyph
+
42 {
+
43 public :
+
44 
+
49  Glyph() : advance(0) {}
+
50 
+
52  // Member data
+
54  int advance;
+ + +
57 };
+
58 
+
59 } // namespace sf
+
60 
+
61 
+
62 #endif // SFML_GLYPH_HPP
+
63 
+
64 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Graphics_2Export_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Graphics_2Export_8hpp_source.htm new file mode 100644 index 0000000..6fd0b39 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Graphics_2Export_8hpp_source.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Graphics/Export.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_GRAPHICS_EXPORT_HPP
+
26 #define SFML_GRAPHICS_EXPORT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 
+
33 
+
35 // Define portable import / export macros
+
37 #if defined(SFML_GRAPHICS_EXPORTS)
+
38 
+
39  #define SFML_GRAPHICS_API SFML_API_EXPORT
+
40 
+
41 #else
+
42 
+
43  #define SFML_GRAPHICS_API SFML_API_IMPORT
+
44 
+
45 #endif
+
46 
+
47 
+
48 #endif // SFML_GRAPHICS_EXPORT_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Graphics_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Graphics_8hpp_source.htm new file mode 100644 index 0000000..6c1f575 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Graphics_8hpp_source.htm @@ -0,0 +1,101 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Graphics.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_GRAPHICS_HPP
+
26 #define SFML_GRAPHICS_HPP
+
27 
+
29 // Headers
+
31 
+
32 #include <SFML/Window.hpp>
+
33 #include <SFML/Graphics/BlendMode.hpp>
+
34 #include <SFML/Graphics/Color.hpp>
+
35 #include <SFML/Graphics/Font.hpp>
+
36 #include <SFML/Graphics/Glyph.hpp>
+
37 #include <SFML/Graphics/Image.hpp>
+
38 #include <SFML/Graphics/RenderStates.hpp>
+
39 #include <SFML/Graphics/RenderTexture.hpp>
+
40 #include <SFML/Graphics/RenderWindow.hpp>
+
41 #include <SFML/Graphics/Shader.hpp>
+
42 #include <SFML/Graphics/Shape.hpp>
+
43 #include <SFML/Graphics/CircleShape.hpp>
+
44 #include <SFML/Graphics/RectangleShape.hpp>
+
45 #include <SFML/Graphics/ConvexShape.hpp>
+
46 #include <SFML/Graphics/Sprite.hpp>
+
47 #include <SFML/Graphics/Text.hpp>
+
48 #include <SFML/Graphics/Texture.hpp>
+
49 #include <SFML/Graphics/Transform.hpp>
+
50 #include <SFML/Graphics/Vertex.hpp>
+
51 #include <SFML/Graphics/VertexArray.hpp>
+
52 #include <SFML/Graphics/View.hpp>
+
53 
+
54 
+
55 #endif // SFML_GRAPHICS_HPP
+
56 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Http_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Http_8hpp_source.htm new file mode 100644 index 0000000..28904b2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Http_8hpp_source.htm @@ -0,0 +1,225 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Http.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_HTTP_HPP
+
26 #define SFML_HTTP_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Network/Export.hpp>
+
32 #include <SFML/Network/IpAddress.hpp>
+
33 #include <SFML/Network/TcpSocket.hpp>
+
34 #include <SFML/System/NonCopyable.hpp>
+
35 #include <SFML/System/Time.hpp>
+
36 #include <map>
+
37 #include <string>
+
38 
+
39 
+
40 namespace sf
+
41 {
+
46 class SFML_NETWORK_API Http : NonCopyable
+
47 {
+
48 public :
+
49 
+
54  class SFML_NETWORK_API Request
+
55  {
+
56  public :
+
57 
+
62  enum Method
+
63  {
+
64  Get,
+
65  Post,
+
66  Head
+
67  };
+
68 
+
80  Request(const std::string& uri = "/", Method method = Get, const std::string& body = "");
+
81 
+
95  void setField(const std::string& field, const std::string& value);
+
96 
+
107  void setMethod(Method method);
+
108 
+
119  void setUri(const std::string& uri);
+
120 
+
130  void setHttpVersion(unsigned int major, unsigned int minor);
+
131 
+
142  void setBody(const std::string& body);
+
143 
+
144  private :
+
145 
+
146  friend class Http;
+
147 
+
157  std::string prepare() const;
+
158 
+
169  bool hasField(const std::string& field) const;
+
170 
+
172  // Types
+
174  typedef std::map<std::string, std::string> FieldTable;
+
175 
+
177  // Member data
+
179  FieldTable m_fields;
+
180  Method m_method;
+
181  std::string m_uri;
+
182  unsigned int m_majorVersion;
+
183  unsigned int m_minorVersion;
+
184  std::string m_body;
+
185  };
+
186 
+
191  class SFML_NETWORK_API Response
+
192  {
+
193  public :
+
194 
+
199  enum Status
+
200  {
+
201  // 2xx: success
+
202  Ok = 200,
+
203  Created = 201,
+
204  Accepted = 202,
+
205  NoContent = 204,
+
206  ResetContent = 205,
+
207  PartialContent = 206,
+
208 
+
209  // 3xx: redirection
+
210  MultipleChoices = 300,
+
211  MovedPermanently = 301,
+
212  MovedTemporarily = 302,
+
213  NotModified = 304,
+
214 
+
215  // 4xx: client error
+
216  BadRequest = 400,
+
217  Unauthorized = 401,
+
218  Forbidden = 403,
+
219  NotFound = 404,
+
220  RangeNotSatisfiable = 407,
+
221 
+
222  // 5xx: server error
+
223  InternalServerError = 500,
+
224  NotImplemented = 501,
+
225  BadGateway = 502,
+
226  ServiceNotAvailable = 503,
+
227  GatewayTimeout = 504,
+
228  VersionNotSupported = 505,
+
229 
+
230  // 10xx: SFML custom codes
+
231  InvalidResponse = 1000,
+
232  ConnectionFailed = 1001
+
233  };
+
234 
+
241  Response();
+
242 
+
255  const std::string& getField(const std::string& field) const;
+
256 
+
268  Status getStatus() const;
+
269 
+
278  unsigned int getMajorHttpVersion() const;
+
279 
+
288  unsigned int getMinorHttpVersion() const;
+
289 
+
302  const std::string& getBody() const;
+
303 
+
304  private :
+
305 
+
306  friend class Http;
+
307 
+
317  void parse(const std::string& data);
+
318 
+
320  // Types
+
322  typedef std::map<std::string, std::string> FieldTable;
+
323 
+
325  // Member data
+
327  FieldTable m_fields;
+
328  Status m_status;
+
329  unsigned int m_majorVersion;
+
330  unsigned int m_minorVersion;
+
331  std::string m_body;
+
332  };
+
333 
+
338  Http();
+
339 
+
354  Http(const std::string& host, unsigned short port = 0);
+
355 
+
371  void setHost(const std::string& host, unsigned short port = 0);
+
372 
+
391  Response sendRequest(const Request& request, Time timeout = Time::Zero);
+
392 
+
393 private :
+
394 
+
396  // Member data
+
398  TcpSocket m_connection;
+
399  IpAddress m_host;
+
400  std::string m_hostName;
+
401  unsigned short m_port;
+
402 };
+
403 
+
404 } // namespace sf
+
405 
+
406 
+
407 #endif // SFML_HTTP_HPP
+
408 
+
409 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Image_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Image_8hpp_source.htm new file mode 100644 index 0000000..6014b55 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Image_8hpp_source.htm @@ -0,0 +1,133 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Image.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_IMAGE_HPP
+
26 #define SFML_IMAGE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Color.hpp>
+
33 #include <SFML/Graphics/Rect.hpp>
+
34 #include <string>
+
35 #include <vector>
+
36 
+
37 
+
38 namespace sf
+
39 {
+
40 class InputStream;
+
41 
+
46 class SFML_GRAPHICS_API Image
+
47 {
+
48 public :
+
49 
+
56  Image();
+
57 
+
66  void create(unsigned int width, unsigned int height, const Color& color = Color(0, 0, 0));
+
67 
+
81  void create(unsigned int width, unsigned int height, const Uint8* pixels);
+
82 
+
98  bool loadFromFile(const std::string& filename);
+
99 
+
116  bool loadFromMemory(const void* data, std::size_t size);
+
117 
+
133  bool loadFromStream(InputStream& stream);
+
134 
+
150  bool saveToFile(const std::string& filename) const;
+
151 
+
158  Vector2u getSize() const;
+
159 
+
171  void createMaskFromColor(const Color& color, Uint8 alpha = 0);
+
172 
+
193  void copy(const Image& source, unsigned int destX, unsigned int destY, const IntRect& sourceRect = IntRect(0, 0, 0, 0), bool applyAlpha = false);
+
194 
+
209  void setPixel(unsigned int x, unsigned int y, const Color& color);
+
210 
+
226  Color getPixel(unsigned int x, unsigned int y) const;
+
227 
+
241  const Uint8* getPixelsPtr() const;
+
242 
+
247  void flipHorizontally();
+
248 
+
253  void flipVertically();
+
254 
+
255 private :
+
256 
+
258  // Member data
+
260  Vector2u m_size;
+
261  std::vector<Uint8> m_pixels;
+
262 };
+
263 
+
264 } // namespace sf
+
265 
+
266 
+
267 #endif // SFML_IMAGE_HPP
+
268 
+
269 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/InputStream_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/InputStream_8hpp_source.htm new file mode 100644 index 0000000..c300c76 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/InputStream_8hpp_source.htm @@ -0,0 +1,101 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
InputStream.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_INPUTSTREAM_HPP
+
26 #define SFML_INPUTSTREAM_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 
+
33 
+
34 namespace sf
+
35 {
+ +
41 {
+
42 public :
+
43 
+
48  virtual ~InputStream() {}
+
49 
+
62  virtual Int64 read(void* data, Int64 size) = 0;
+
63 
+
72  virtual Int64 seek(Int64 position) = 0;
+
73 
+
80  virtual Int64 tell() = 0;
+
81 
+
88  virtual Int64 getSize() = 0;
+
89 };
+
90 
+
91 } // namespace sf
+
92 
+
93 
+
94 #endif // SFML_INPUTSTREAM_HPP
+
95 
+
96 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/IpAddress_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/IpAddress_8hpp_source.htm new file mode 100644 index 0000000..7e4dbc9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/IpAddress_8hpp_source.htm @@ -0,0 +1,139 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
IpAddress.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_IPADDRESS_HPP
+
26 #define SFML_IPADDRESS_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Network/Export.hpp>
+
32 #include <SFML/System/Time.hpp>
+
33 #include <istream>
+
34 #include <ostream>
+
35 #include <string>
+
36 
+
37 
+
38 namespace sf
+
39 {
+
44 class SFML_NETWORK_API IpAddress
+
45 {
+
46 public :
+
47 
+
54  IpAddress();
+
55 
+
65  IpAddress(const std::string& address);
+
66 
+
79  IpAddress(const char* address);
+
80 
+
94  IpAddress(Uint8 byte0, Uint8 byte1, Uint8 byte2, Uint8 byte3);
+
95 
+
109  explicit IpAddress(Uint32 address);
+
110 
+
123  std::string toString() const;
+
124 
+
139  Uint32 toInteger() const;
+
140 
+
155  static IpAddress getLocalAddress();
+
156 
+
179  static IpAddress getPublicAddress(Time timeout = Time::Zero);
+
180 
+
182  // Static member data
+
184  static const IpAddress None;
+
185  static const IpAddress LocalHost;
+
186  static const IpAddress Broadcast;
+
187 
+
188 private :
+
189 
+
191  // Member data
+
193  Uint32 m_address;
+
194 };
+
195 
+
205 SFML_NETWORK_API bool operator ==(const IpAddress& left, const IpAddress& right);
+
206 
+
216 SFML_NETWORK_API bool operator !=(const IpAddress& left, const IpAddress& right);
+
217 
+
227 SFML_NETWORK_API bool operator <(const IpAddress& left, const IpAddress& right);
+
228 
+
238 SFML_NETWORK_API bool operator >(const IpAddress& left, const IpAddress& right);
+
239 
+
249 SFML_NETWORK_API bool operator <=(const IpAddress& left, const IpAddress& right);
+
250 
+
260 SFML_NETWORK_API bool operator >=(const IpAddress& left, const IpAddress& right);
+
261 
+
271 SFML_NETWORK_API std::istream& operator >>(std::istream& stream, IpAddress& address);
+
272 
+
282 SFML_NETWORK_API std::ostream& operator <<(std::ostream& stream, const IpAddress& address);
+
283 
+
284 } // namespace sf
+
285 
+
286 
+
287 #endif // SFML_IPADDRESS_HPP
+
288 
+
289 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Joystick_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Joystick_8hpp_source.htm new file mode 100644 index 0000000..5b30945 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Joystick_8hpp_source.htm @@ -0,0 +1,122 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Joystick.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_JOYSTICK_HPP
+
26 #define SFML_JOYSTICK_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Window/Export.hpp>
+
32 
+
33 
+
34 namespace sf
+
35 {
+
40 class SFML_WINDOW_API Joystick
+
41 {
+
42 public :
+
43 
+
48  enum
+
49  {
+
50  Count = 8,
+
51  ButtonCount = 32,
+
52  AxisCount = 8
+
53  };
+
54 
+
59  enum Axis
+
60  {
+
61  X,
+
62  Y,
+
63  Z,
+
64  R,
+
65  U,
+
66  V,
+
67  PovX,
+
68  PovY
+
69  };
+
70 
+
79  static bool isConnected(unsigned int joystick);
+
80 
+
91  static unsigned int getButtonCount(unsigned int joystick);
+
92 
+
104  static bool hasAxis(unsigned int joystick, Axis axis);
+
105 
+
117  static bool isButtonPressed(unsigned int joystick, unsigned int button);
+
118 
+
130  static float getAxisPosition(unsigned int joystick, Axis axis);
+
131 
+
141  static void update();
+
142 };
+
143 
+
144 } // namespace sf
+
145 
+
146 
+
147 #endif // SFML_JOYSTICK_HPP
+
148 
+
149 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Keyboard_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Keyboard_8hpp_source.htm new file mode 100644 index 0000000..3786383 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Keyboard_8hpp_source.htm @@ -0,0 +1,201 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Keyboard.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_KEYBOARD_HPP
+
26 #define SFML_KEYBOARD_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Window/Export.hpp>
+
32 
+
33 
+
34 namespace sf
+
35 {
+
40 class SFML_WINDOW_API Keyboard
+
41 {
+
42 public :
+
43 
+
48  enum Key
+
49  {
+
50  Unknown = -1,
+
51  A = 0,
+
52  B,
+
53  C,
+
54  D,
+
55  E,
+
56  F,
+
57  G,
+
58  H,
+
59  I,
+
60  J,
+
61  K,
+
62  L,
+
63  M,
+
64  N,
+
65  O,
+
66  P,
+
67  Q,
+
68  R,
+
69  S,
+
70  T,
+
71  U,
+
72  V,
+
73  W,
+
74  X,
+
75  Y,
+
76  Z,
+
77  Num0,
+
78  Num1,
+
79  Num2,
+
80  Num3,
+
81  Num4,
+
82  Num5,
+
83  Num6,
+
84  Num7,
+
85  Num8,
+
86  Num9,
+ + + +
90  LAlt,
+ + + +
94  RAlt,
+ +
96  Menu,
+ + + + + + + + + + + + + + +
111  Tab,
+ + +
114  End,
+ + + +
118  Add,
+ + + + + +
124  Up,
+ + + + + + + + + + + +
136  F1,
+
137  F2,
+
138  F3,
+
139  F4,
+
140  F5,
+
141  F6,
+
142  F7,
+
143  F8,
+
144  F9,
+
145  F10,
+
146  F11,
+
147  F12,
+
148  F13,
+
149  F14,
+
150  F15,
+ +
152 
+
153  KeyCount
+
154  };
+
155 
+
164  static bool isKeyPressed(Key key);
+
165 };
+
166 
+
167 } // namespace sf
+
168 
+
169 
+
170 #endif // SFML_KEYBOARD_HPP
+
171 
+
172 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Listener_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Listener_8hpp_source.htm new file mode 100644 index 0000000..055552a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Listener_8hpp_source.htm @@ -0,0 +1,108 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Listener.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_LISTENER_HPP
+
26 #define SFML_LISTENER_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Audio/Export.hpp>
+
32 #include <SFML/System/Vector3.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
42 class SFML_AUDIO_API Listener
+
43 {
+
44 public :
+
45 
+
58  static void setGlobalVolume(float volume);
+
59 
+
68  static float getGlobalVolume();
+
69 
+
82  static void setPosition(float x, float y, float z);
+
83 
+
94  static void setPosition(const Vector3f& position);
+
95 
+
104  static Vector3f getPosition();
+
105 
+
121  static void setDirection(float x, float y, float z);
+
122 
+
136  static void setDirection(const Vector3f& direction);
+
137 
+
146  static Vector3f getDirection();
+
147 };
+
148 
+
149 } // namespace sf
+
150 
+
151 
+
152 #endif // SFML_LISTENER_HPP
+
153 
+
154 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Lock_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Lock_8hpp_source.htm new file mode 100644 index 0000000..49d6985 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Lock_8hpp_source.htm @@ -0,0 +1,103 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Lock.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_LOCK_HPP
+
26 #define SFML_LOCK_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 #include <SFML/System/NonCopyable.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
37 class Mutex;
+
38 
+
43 class SFML_SYSTEM_API Lock : NonCopyable
+
44 {
+
45 public :
+
46 
+
55  explicit Lock(Mutex& mutex);
+
56 
+
63  ~Lock();
+
64 
+
65 private :
+
66 
+
68  // Member data
+
70  Mutex& m_mutex;
+
71 };
+
72 
+
73 } // namespace sf
+
74 
+
75 
+
76 #endif // SFML_LOCK_HPP
+
77 
+
78 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Mouse_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Mouse_8hpp_source.htm new file mode 100644 index 0000000..79122cb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Mouse_8hpp_source.htm @@ -0,0 +1,115 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Mouse.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_MOUSE_HPP
+
26 #define SFML_MOUSE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Window/Export.hpp>
+
32 #include <SFML/System/Vector2.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
37 class Window;
+
38 
+
43 class SFML_WINDOW_API Mouse
+
44 {
+
45 public :
+
46 
+
51  enum Button
+
52  {
+
53  Left,
+ + + + +
58 
+
59  ButtonCount
+
60  };
+
61 
+
70  static bool isButtonPressed(Button button);
+
71 
+
81  static Vector2i getPosition();
+
82 
+
94  static Vector2i getPosition(const Window& relativeTo);
+
95 
+
105  static void setPosition(const Vector2i& position);
+
106 
+
117  static void setPosition(const Vector2i& position, const Window& relativeTo);
+
118 };
+
119 
+
120 } // namespace sf
+
121 
+
122 
+
123 #endif // SFML_MOUSE_HPP
+
124 
+
125 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Music_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Music_8hpp_source.htm new file mode 100644 index 0000000..533492f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Music_8hpp_source.htm @@ -0,0 +1,131 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Music.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_MUSIC_HPP
+
26 #define SFML_MUSIC_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Audio/Export.hpp>
+
32 #include <SFML/Audio/SoundStream.hpp>
+
33 #include <SFML/System/Mutex.hpp>
+
34 #include <SFML/System/Time.hpp>
+
35 #include <string>
+
36 #include <vector>
+
37 
+
38 
+
39 namespace sf
+
40 {
+
41 namespace priv
+
42 {
+
43  class SoundFile;
+
44 }
+
45 
+
46 class InputStream;
+
47 
+
52 class SFML_AUDIO_API Music : public SoundStream
+
53 {
+
54 public :
+
55 
+
60  Music();
+
61 
+
66  ~Music();
+
67 
+
84  bool openFromFile(const std::string& filename);
+
85 
+
107  bool openFromMemory(const void* data, std::size_t sizeInBytes);
+
108 
+
129  bool openFromStream(InputStream& stream);
+
130 
+
137  Time getDuration() const;
+
138 
+
139 protected :
+
140 
+
152  virtual bool onGetData(Chunk& data);
+
153 
+
160  virtual void onSeek(Time timeOffset);
+
161 
+
162 private :
+
163 
+
168  void initialize();
+
169 
+
171  // Member data
+
173  priv::SoundFile* m_file;
+
174  Time m_duration;
+
175  std::vector<Int16> m_samples;
+
176  Mutex m_mutex;
+
177 };
+
178 
+
179 } // namespace sf
+
180 
+
181 
+
182 #endif // SFML_MUSIC_HPP
+
183 
+
184 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Mutex_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Mutex_8hpp_source.htm new file mode 100644 index 0000000..1c65afa --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Mutex_8hpp_source.htm @@ -0,0 +1,110 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Mutex.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_MUTEX_HPP
+
26 #define SFML_MUTEX_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 #include <SFML/System/NonCopyable.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
37 namespace priv
+
38 {
+
39  class MutexImpl;
+
40 }
+
41 
+
47 class SFML_SYSTEM_API Mutex : NonCopyable
+
48 {
+
49 public :
+
50 
+
55  Mutex();
+
56 
+
61  ~Mutex();
+
62 
+
73  void lock();
+
74 
+
81  void unlock();
+
82 
+
83 private :
+
84 
+
86  // Member data
+
88  priv::MutexImpl* m_mutexImpl;
+
89 };
+
90 
+
91 } // namespace sf
+
92 
+
93 
+
94 #endif // SFML_MUTEX_HPP
+
95 
+
96 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Network_2Export_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Network_2Export_8hpp_source.htm new file mode 100644 index 0000000..2126679 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Network_2Export_8hpp_source.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Network/Export.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_NETWORK_EXPORT_HPP
+
26 #define SFML_NETWORK_EXPORT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 
+
33 
+
35 // Define portable import / export macros
+
37 #if defined(SFML_NETWORK_EXPORTS)
+
38 
+
39  #define SFML_NETWORK_API SFML_API_EXPORT
+
40 
+
41 #else
+
42 
+
43  #define SFML_NETWORK_API SFML_API_IMPORT
+
44 
+
45 #endif
+
46 
+
47 
+
48 #endif // SFML_NETWORK_EXPORT_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Network_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Network_8hpp_source.htm new file mode 100644 index 0000000..d669def --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Network_8hpp_source.htm @@ -0,0 +1,89 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Network.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_NETWORK_HPP
+
26 #define SFML_NETWORK_HPP
+
27 
+
29 // Headers
+
31 
+
32 #include <SFML/System.hpp>
+
33 #include <SFML/Network/Ftp.hpp>
+
34 #include <SFML/Network/Http.hpp>
+
35 #include <SFML/Network/IpAddress.hpp>
+
36 #include <SFML/Network/Packet.hpp>
+
37 #include <SFML/Network/SocketSelector.hpp>
+
38 #include <SFML/Network/TcpListener.hpp>
+
39 #include <SFML/Network/TcpSocket.hpp>
+
40 #include <SFML/Network/UdpSocket.hpp>
+
41 
+
42 
+
43 #endif // SFML_NETWORK_HPP
+
44 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/NonCopyable_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/NonCopyable_8hpp_source.htm new file mode 100644 index 0000000..68f3c38 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/NonCopyable_8hpp_source.htm @@ -0,0 +1,99 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
NonCopyable.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_NONCOPYABLE_HPP
+
26 #define SFML_NONCOPYABLE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 
+
33 
+
34 namespace sf
+
35 {
+
41 class SFML_SYSTEM_API NonCopyable
+
42 {
+
43 protected :
+
44 
+ +
54 
+
55 private :
+
56 
+
67  NonCopyable(const NonCopyable&);
+
68 
+
79  NonCopyable& operator =(const NonCopyable&);
+
80 };
+
81 
+
82 } // namespace sf
+
83 
+
84 
+
85 #endif // SFML_NONCOPYABLE_HPP
+
86 
+
87 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/OpenGL_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/OpenGL_8hpp_source.htm new file mode 100644 index 0000000..01a0c44 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/OpenGL_8hpp_source.htm @@ -0,0 +1,102 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
OpenGL.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_OPENGL_HPP
+
26 #define SFML_OPENGL_HPP
+
27 
+
28 
+
32 #include <SFML/Config.hpp>
+
33 
+
34 
+
39 #if defined(SFML_SYSTEM_WINDOWS)
+
40 
+
41  // The Visual C++ version of gl.h uses WINGDIAPI and APIENTRY but doesn't define them
+
42  #ifdef _MSC_VER
+
43  #include <windows.h>
+
44  #endif
+
45 
+
46  #include <GL/gl.h>
+
47  #include <GL/glu.h>
+
48 
+
49 #elif defined(SFML_SYSTEM_LINUX) || defined(SFML_SYSTEM_FREEBSD)
+
50 
+
51  #include <GL/gl.h>
+
52  #include <GL/glu.h>
+
53 
+
54 #elif defined(SFML_SYSTEM_MACOS)
+
55 
+
56  #include <OpenGL/gl.h>
+
57  #include <OpenGL/glu.h>
+
58 
+
59 #endif
+
60 
+
61 
+
62 #endif // SFML_OPENGL_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Packet_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Packet_8hpp_source.htm new file mode 100644 index 0000000..f074be5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Packet_8hpp_source.htm @@ -0,0 +1,169 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Packet.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_PACKET_HPP
+
26 #define SFML_PACKET_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Network/Export.hpp>
+
32 #include <string>
+
33 #include <vector>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
38 class String;
+
39 class TcpSocket;
+
40 class UdpSocket;
+
41 
+
47 class SFML_NETWORK_API Packet
+
48 {
+
49  // A bool-like type that cannot be converted to integer or pointer types
+
50  typedef bool (Packet::*BoolType)(std::size_t);
+
51 
+
52 public :
+
53 
+
60  Packet();
+
61 
+
66  virtual ~Packet();
+
67 
+
77  void append(const void* data, std::size_t sizeInBytes);
+
78 
+
87  void clear();
+
88 
+
102  const void* getData() const;
+
103 
+
115  std::size_t getDataSize() const;
+
116 
+
129  bool endOfPacket() const;
+
130 
+
131 public:
+
132 
+
171  operator BoolType() const;
+
172 
+
177  Packet& operator >>(bool& data);
+
178  Packet& operator >>(Int8& data);
+
179  Packet& operator >>(Uint8& data);
+
180  Packet& operator >>(Int16& data);
+
181  Packet& operator >>(Uint16& data);
+
182  Packet& operator >>(Int32& data);
+
183  Packet& operator >>(Uint32& data);
+
184  Packet& operator >>(float& data);
+
185  Packet& operator >>(double& data);
+
186  Packet& operator >>(char* data);
+
187  Packet& operator >>(std::string& data);
+
188  Packet& operator >>(wchar_t* data);
+
189  Packet& operator >>(std::wstring& data);
+
190  Packet& operator >>(String& data);
+
191 
+
196  Packet& operator <<(bool data);
+
197  Packet& operator <<(Int8 data);
+
198  Packet& operator <<(Uint8 data);
+
199  Packet& operator <<(Int16 data);
+
200  Packet& operator <<(Uint16 data);
+
201  Packet& operator <<(Int32 data);
+
202  Packet& operator <<(Uint32 data);
+
203  Packet& operator <<(float data);
+
204  Packet& operator <<(double data);
+
205  Packet& operator <<(const char* data);
+
206  Packet& operator <<(const std::string& data);
+
207  Packet& operator <<(const wchar_t* data);
+
208  Packet& operator <<(const std::wstring& data);
+
209  Packet& operator <<(const String& data);
+
210 
+
211 protected:
+
212 
+
213  friend class TcpSocket;
+
214  friend class UdpSocket;
+
215 
+
234  virtual const void* onSend(std::size_t& size);
+
235 
+
253  virtual void onReceive(const void* data, std::size_t size);
+
254 
+
255 private :
+
256 
+
261  bool operator ==(const Packet& right) const;
+
262  bool operator !=(const Packet& right) const;
+
263 
+
274  bool checkSize(std::size_t size);
+
275 
+
277  // Member data
+
279  std::vector<char> m_data;
+
280  std::size_t m_readPos;
+
281  bool m_isValid;
+
282 };
+
283 
+
284 } // namespace sf
+
285 
+
286 
+
287 #endif // SFML_PACKET_HPP
+
288 
+
289 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/PrimitiveType_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/PrimitiveType_8hpp_source.htm new file mode 100644 index 0000000..c3cbca2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/PrimitiveType_8hpp_source.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
PrimitiveType.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_PRIMITIVETYPE_HPP
+
26 #define SFML_PRIMITIVETYPE_HPP
+
27 
+
28 namespace sf
+
29 {
+ +
40 {
+ + + + + + + +
48 };
+
49 
+
50 } // namespace sf
+
51 
+
52 
+
53 #endif // SFML_PRIMITIVETYPE_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Rect_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Rect_8hpp_source.htm new file mode 100644 index 0000000..bc7d06d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Rect_8hpp_source.htm @@ -0,0 +1,128 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Rect.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_RECT_HPP
+
26 #define SFML_RECT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Vector2.hpp>
+
32 #include <algorithm>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
41 template <typename T>
+
42 class Rect
+
43 {
+
44 public :
+
45 
+
53  Rect();
+
54 
+
67  Rect(T rectLeft, T rectTop, T rectWidth, T rectHeight);
+
68 
+
79  Rect(const Vector2<T>& position, const Vector2<T>& size);
+
80 
+
92  template <typename U>
+
93  explicit Rect(const Rect<U>& rectangle);
+
94 
+
106  bool contains(T x, T y) const;
+
107 
+
118  bool contains(const Vector2<T>& point) const;
+
119 
+
130  bool intersects(const Rect<T>& rectangle) const;
+
131 
+
146  bool intersects(const Rect<T>& rectangle, Rect<T>& intersection) const;
+
147 
+
149  // Member data
+
151  T left;
+
152  T top;
+
153  T width;
+
154  T height;
+
155 };
+
156 
+
169 template <typename T>
+
170 bool operator ==(const Rect<T>& left, const Rect<T>& right);
+
171 
+
184 template <typename T>
+
185 bool operator !=(const Rect<T>& left, const Rect<T>& right);
+
186 
+
187 #include <SFML/Graphics/Rect.inl>
+
188 
+
189 // Create typedefs for the most common types
+
190 typedef Rect<int> IntRect;
+
191 typedef Rect<float> FloatRect;
+
192 
+
193 } // namespace sf
+
194 
+
195 
+
196 #endif // SFML_RECT_HPP
+
197 
+
198 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Rect_8inl_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Rect_8inl_source.htm new file mode 100644 index 0000000..ca98c52 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Rect_8inl_source.htm @@ -0,0 +1,196 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Rect.inl
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 
+
27 template <typename T>
+
28 Rect<T>::Rect() :
+
29 left (0),
+
30 top (0),
+
31 width (0),
+
32 height(0)
+
33 {
+
34 
+
35 }
+
36 
+
37 
+
39 template <typename T>
+
40 Rect<T>::Rect(T rectLeft, T rectTop, T rectWidth, T rectHeight) :
+
41 left (rectLeft),
+
42 top (rectTop),
+
43 width (rectWidth),
+
44 height(rectHeight)
+
45 {
+
46 
+
47 }
+
48 
+
49 
+
51 template <typename T>
+
52 Rect<T>::Rect(const Vector2<T>& position, const Vector2<T>& size) :
+
53 left (position.x),
+
54 top (position.y),
+
55 width (size.x),
+
56 height(size.y)
+
57 {
+
58 
+
59 }
+
60 
+
61 
+
63 template <typename T>
+
64 template <typename U>
+
65 Rect<T>::Rect(const Rect<U>& rectangle) :
+
66 left (static_cast<T>(rectangle.left)),
+
67 top (static_cast<T>(rectangle.top)),
+
68 width (static_cast<T>(rectangle.width)),
+
69 height(static_cast<T>(rectangle.height))
+
70 {
+
71 }
+
72 
+
73 
+
75 template <typename T>
+
76 bool Rect<T>::contains(T x, T y) const
+
77 {
+
78  // Rectangles with negative dimensions are allowed, so we must handle them correctly
+
79 
+
80  // Compute the real min and max of the rectangle on both axes
+
81  T minX = std::min(left, left + width);
+
82  T maxX = std::max(left, left + width);
+
83  T minY = std::min(top, top + height);
+
84  T maxY = std::max(top, top + height);
+
85 
+
86  return (x >= minX) && (x < maxX) && (y >= minY) && (y < maxY);
+
87 }
+
88 
+
89 
+
91 template <typename T>
+
92 bool Rect<T>::contains(const Vector2<T>& point) const
+
93 {
+
94  return contains(point.x, point.y);
+
95 }
+
96 
+
97 
+
99 template <typename T>
+
100 bool Rect<T>::intersects(const Rect<T>& rectangle) const
+
101 {
+
102  Rect<T> intersection;
+
103  return intersects(rectangle, intersection);
+
104 }
+
105 
+
106 
+
108 template <typename T>
+
109 bool Rect<T>::intersects(const Rect<T>& rectangle, Rect<T>& intersection) const
+
110 {
+
111  // Rectangles with negative dimensions are allowed, so we must handle them correctly
+
112 
+
113  // Compute the min and max of the first rectangle on both axes
+
114  T r1MinX = std::min(left, left + width);
+
115  T r1MaxX = std::max(left, left + width);
+
116  T r1MinY = std::min(top, top + height);
+
117  T r1MaxY = std::max(top, top + height);
+
118 
+
119  // Compute the min and max of the second rectangle on both axes
+
120  T r2MinX = std::min(rectangle.left, rectangle.left + rectangle.width);
+
121  T r2MaxX = std::max(rectangle.left, rectangle.left + rectangle.width);
+
122  T r2MinY = std::min(rectangle.top, rectangle.top + rectangle.height);
+
123  T r2MaxY = std::max(rectangle.top, rectangle.top + rectangle.height);
+
124 
+
125  // Compute the intersection boundaries
+
126  T interLeft = std::max(r1MinX, r2MinX);
+
127  T interTop = std::max(r1MinY, r2MinY);
+
128  T interRight = std::min(r1MaxX, r2MaxX);
+
129  T interBottom = std::min(r1MaxY, r2MaxY);
+
130 
+
131  // If the intersection is valid (positive non zero area), then there is an intersection
+
132  if ((interLeft < interRight) && (interTop < interBottom))
+
133  {
+
134  intersection = Rect<T>(interLeft, interTop, interRight - interLeft, interBottom - interTop);
+
135  return true;
+
136  }
+
137  else
+
138  {
+
139  intersection = Rect<T>(0, 0, 0, 0);
+
140  return false;
+
141  }
+
142 }
+
143 
+
144 
+
146 template <typename T>
+
147 inline bool operator ==(const Rect<T>& left, const Rect<T>& right)
+
148 {
+
149  return (left.left == right.left) && (left.width == right.width) &&
+
150  (left.top == right.top) && (left.height == right.height);
+
151 }
+
152 
+
153 
+
155 template <typename T>
+
156 inline bool operator !=(const Rect<T>& left, const Rect<T>& right)
+
157 {
+
158  return !(left == right);
+
159 }
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/RectangleShape_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/RectangleShape_8hpp_source.htm new file mode 100644 index 0000000..b6d9733 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/RectangleShape_8hpp_source.htm @@ -0,0 +1,107 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
RectangleShape.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_RECTANGLESHAPE_HPP
+
26 #define SFML_RECTANGLESHAPE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Shape.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
41 class SFML_GRAPHICS_API RectangleShape : public Shape
+
42 {
+
43 public :
+
44 
+
51  explicit RectangleShape(const Vector2f& size = Vector2f(0, 0));
+
52 
+
61  void setSize(const Vector2f& size);
+
62 
+
71  const Vector2f& getSize() const;
+
72 
+
79  virtual unsigned int getPointCount() const;
+
80 
+
91  virtual Vector2f getPoint(unsigned int index) const;
+
92 
+
93 private :
+
94 
+
96  // Member data
+
98  Vector2f m_size;
+
99 };
+
100 
+
101 } // namespace sf
+
102 
+
103 
+
104 #endif // SFML_RECTANGLESHAPE_HPP
+
105 
+
106 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/RenderStates_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/RenderStates_8hpp_source.htm new file mode 100644 index 0000000..3e78ba0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/RenderStates_8hpp_source.htm @@ -0,0 +1,118 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
RenderStates.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_RENDERSTATES_HPP
+
26 #define SFML_RENDERSTATES_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/BlendMode.hpp>
+
33 #include <SFML/Graphics/Transform.hpp>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
38 class Shader;
+
39 class Texture;
+
40 
+
45 class SFML_GRAPHICS_API RenderStates
+
46 {
+
47 public :
+
48 
+
61  RenderStates();
+
62 
+
69  RenderStates(BlendMode theBlendMode);
+
70 
+
77  RenderStates(const Transform& theTransform);
+
78 
+
85  RenderStates(const Texture* theTexture);
+
86 
+
93  RenderStates(const Shader* theShader);
+
94 
+
104  RenderStates(BlendMode theBlendMode, const Transform& theTransform,
+
105  const Texture* theTexture, const Shader* theShader);
+
106 
+
108  // Static member data
+
110  static const RenderStates Default;
+
111 
+
113  // Member data
+ + +
117  const Texture* texture;
+
118  const Shader* shader;
+
119 };
+
120 
+
121 } // namespace sf
+
122 
+
123 
+
124 #endif // SFML_RENDERSTATES_HPP
+
125 
+
126 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/RenderTarget_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/RenderTarget_8hpp_source.htm new file mode 100644 index 0000000..84ce4ff --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/RenderTarget_8hpp_source.htm @@ -0,0 +1,172 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
RenderTarget.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_RENDERTARGET_HPP
+
26 #define SFML_RENDERTARGET_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Color.hpp>
+
33 #include <SFML/Graphics/Rect.hpp>
+
34 #include <SFML/Graphics/View.hpp>
+
35 #include <SFML/Graphics/Transform.hpp>
+
36 #include <SFML/Graphics/BlendMode.hpp>
+
37 #include <SFML/Graphics/RenderStates.hpp>
+
38 #include <SFML/Graphics/PrimitiveType.hpp>
+
39 #include <SFML/Graphics/Vertex.hpp>
+
40 #include <SFML/System/NonCopyable.hpp>
+
41 
+
42 
+
43 namespace sf
+
44 {
+
45 class Drawable;
+
46 
+
51 class SFML_GRAPHICS_API RenderTarget : NonCopyable
+
52 {
+
53 public :
+
54 
+
59  virtual ~RenderTarget();
+
60 
+
70  void clear(const Color& color = Color(0, 0, 0, 255));
+
71 
+
91  void setView(const View& view);
+
92 
+
101  const View& getView() const;
+
102 
+
114  const View& getDefaultView() const;
+
115 
+
129  IntRect getViewport(const View& view) const;
+
130 
+
149  Vector2f mapPixelToCoords(const Vector2i& point) const;
+
150 
+
180  Vector2f mapPixelToCoords(const Vector2i& point, const View& view) const;
+
181 
+
200  Vector2i mapCoordsToPixel(const Vector2f& point) const;
+
201 
+
227  Vector2i mapCoordsToPixel(const Vector2f& point, const View& view) const;
+
228 
+
236  void draw(const Drawable& drawable, const RenderStates& states = RenderStates::Default);
+
237 
+
247  void draw(const Vertex* vertices, unsigned int vertexCount,
+
248  PrimitiveType type, const RenderStates& states = RenderStates::Default);
+
249 
+
256  virtual Vector2u getSize() const = 0;
+
257 
+
290  void pushGLStates();
+
291 
+
301  void popGLStates();
+
302 
+
324  void resetGLStates();
+
325 
+
326 protected :
+
327 
+
332  RenderTarget();
+
333 
+
341  void initialize();
+
342 
+
343 private:
+
344 
+
349  void applyCurrentView();
+
350 
+
357  void applyBlendMode(BlendMode mode);
+
358 
+
365  void applyTransform(const Transform& transform);
+
366 
+
373  void applyTexture(const Texture* texture);
+
374 
+
381  void applyShader(const Shader* shader);
+
382 
+
395  virtual bool activate(bool active) = 0;
+
396 
+
401  struct StatesCache
+
402  {
+
403  enum {VertexCacheSize = 4};
+
404 
+
405  bool glStatesSet;
+
406  bool viewChanged;
+
407  BlendMode lastBlendMode;
+
408  Uint64 lastTextureId;
+
409  bool useVertexCache;
+
410  Vertex vertexCache[VertexCacheSize];
+
411  };
+
412 
+
414  // Member data
+
416  View m_defaultView;
+
417  View m_view;
+
418  StatesCache m_cache;
+
419 };
+
420 
+
421 } // namespace sf
+
422 
+
423 
+
424 #endif // SFML_RENDERTARGET_HPP
+
425 
+
426 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/RenderTexture_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/RenderTexture_8hpp_source.htm new file mode 100644 index 0000000..06ec919 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/RenderTexture_8hpp_source.htm @@ -0,0 +1,128 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
RenderTexture.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_RENDERTEXTURE_HPP
+
26 #define SFML_RENDERTEXTURE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Texture.hpp>
+
33 #include <SFML/Graphics/RenderTarget.hpp>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
38 namespace priv
+
39 {
+
40  class RenderTextureImpl;
+
41 }
+
42 
+
47 class SFML_GRAPHICS_API RenderTexture : public RenderTarget
+
48 {
+
49 public :
+
50 
+
60  RenderTexture();
+
61 
+
66  virtual ~RenderTexture();
+
67 
+
86  bool create(unsigned int width, unsigned int height, bool depthBuffer = false);
+
87 
+
99  void setSmooth(bool smooth);
+
100 
+
109  bool isSmooth() const;
+
110 
+
122  void setRepeated(bool repeated);
+
123 
+
132  bool isRepeated() const;
+
133 
+
149  bool setActive(bool active = true);
+
150 
+
160  void display();
+
161 
+
171  virtual Vector2u getSize() const;
+
172 
+
187  const Texture& getTexture() const;
+
188 
+
189 private :
+
190 
+
202  virtual bool activate(bool active);
+
203 
+
205  // Member data
+
207  priv::RenderTextureImpl* m_impl;
+
208  Texture m_texture;
+
209 };
+
210 
+
211 } // namespace sf
+
212 
+
213 
+
214 #endif // SFML_RENDERTEXTURE_HPP
+
215 
+
216 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/RenderWindow_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/RenderWindow_8hpp_source.htm new file mode 100644 index 0000000..0c3af24 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/RenderWindow_8hpp_source.htm @@ -0,0 +1,117 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
RenderWindow.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_RENDERWINDOW_HPP
+
26 #define SFML_RENDERWINDOW_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/RenderTarget.hpp>
+
33 #include <SFML/Graphics/Image.hpp>
+
34 #include <SFML/Window/Window.hpp>
+
35 #include <string>
+
36 
+
37 
+
38 namespace sf
+
39 {
+
44 class SFML_GRAPHICS_API RenderWindow : public Window, public RenderTarget
+
45 {
+
46 public :
+
47 
+
55  RenderWindow();
+
56 
+
76  RenderWindow(VideoMode mode, const String& title, Uint32 style = Style::Default, const ContextSettings& settings = ContextSettings());
+
77 
+
93  explicit RenderWindow(WindowHandle handle, const ContextSettings& settings = ContextSettings());
+
94 
+
101  virtual ~RenderWindow();
+
102 
+
112  virtual Vector2u getSize() const;
+
113 
+
128  Image capture() const;
+
129 
+
130 protected:
+
131 
+
140  virtual void onCreate();
+
141 
+
149  virtual void onResize();
+
150 
+
151 private :
+
152 
+
161  virtual bool activate(bool active);
+
162 };
+
163 
+
164 } // namespace sf
+
165 
+
166 
+
167 #endif // SFML_RENDERWINDOW_HPP
+
168 
+
169 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Shader_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Shader_8hpp_source.htm new file mode 100644 index 0000000..4ab1994 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Shader_8hpp_source.htm @@ -0,0 +1,171 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Shader.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SHADER_HPP
+
26 #define SFML_SHADER_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Transform.hpp>
+
33 #include <SFML/Graphics/Color.hpp>
+
34 #include <SFML/Window/GlResource.hpp>
+
35 #include <SFML/System/NonCopyable.hpp>
+
36 #include <SFML/System/Vector2.hpp>
+
37 #include <SFML/System/Vector3.hpp>
+
38 #include <map>
+
39 #include <string>
+
40 
+
41 
+
42 namespace sf
+
43 {
+
44 class InputStream;
+
45 class Texture;
+
46 
+
51 class SFML_GRAPHICS_API Shader : GlResource, NonCopyable
+
52 {
+
53 public :
+
54 
+
59  enum Type
+
60  {
+ +
62  Fragment
+
63  };
+
64 
+
70  struct CurrentTextureType {};
+
71  static CurrentTextureType CurrentTexture;
+
72 
+
73 public :
+
74 
+
81  Shader();
+
82 
+
87  ~Shader();
+
88 
+
108  bool loadFromFile(const std::string& filename, Type type);
+
109 
+
129  bool loadFromFile(const std::string& vertexShaderFilename, const std::string& fragmentShaderFilename);
+
130 
+
149  bool loadFromMemory(const std::string& shader, Type type);
+
150 
+
170  bool loadFromMemory(const std::string& vertexShader, const std::string& fragmentShader);
+
171 
+
190  bool loadFromStream(InputStream& stream, Type type);
+
191 
+
211  bool loadFromStream(InputStream& vertexShaderStream, InputStream& fragmentShaderStream);
+
212 
+
232  void setParameter(const std::string& name, float x);
+
233 
+
254  void setParameter(const std::string& name, float x, float y);
+
255 
+
277  void setParameter(const std::string& name, float x, float y, float z);
+
278 
+
301  void setParameter(const std::string& name, float x, float y, float z, float w);
+
302 
+
322  void setParameter(const std::string& name, const Vector2f& vector);
+
323 
+
343  void setParameter(const std::string& name, const Vector3f& vector);
+
344 
+
370  void setParameter(const std::string& name, const Color& color);
+
371 
+
393  void setParameter(const std::string& name, const sf::Transform& transform);
+
394 
+
425  void setParameter(const std::string& name, const Texture& texture);
+
426 
+
448  void setParameter(const std::string& name, CurrentTextureType);
+
449 
+
471  static void bind(const Shader* shader);
+
472 
+
483  static bool isAvailable();
+
484 
+
485 private :
+
486 
+
499  bool compile(const char* vertexShaderCode, const char* fragmentShaderCode);
+
500 
+
508  void bindTextures() const;
+
509 
+
518  int getParamLocation(const std::string& name);
+
519 
+
521  // Types
+
523  typedef std::map<int, const Texture*> TextureTable;
+
524  typedef std::map<std::string, int> ParamTable;
+
525 
+
527  // Member data
+
529  unsigned int m_shaderProgram;
+
530  int m_currentTexture;
+
531  TextureTable m_textures;
+
532  ParamTable m_params;
+
533 };
+
534 
+
535 } // namespace sf
+
536 
+
537 
+
538 #endif // SFML_SHADER_HPP
+
539 
+
540 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Shape_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Shape_8hpp_source.htm new file mode 100644 index 0000000..784c7e4 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Shape_8hpp_source.htm @@ -0,0 +1,156 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Shape.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SHAPE_HPP
+
26 #define SFML_SHAPE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Drawable.hpp>
+
33 #include <SFML/Graphics/Transformable.hpp>
+
34 #include <SFML/Graphics/VertexArray.hpp>
+
35 #include <SFML/System/Vector2.hpp>
+
36 
+
37 
+
38 namespace sf
+
39 {
+
44 class SFML_GRAPHICS_API Shape : public Drawable, public Transformable
+
45 {
+
46 public :
+
47 
+
52  virtual ~Shape();
+
53 
+
74  void setTexture(const Texture* texture, bool resetRect = false);
+
75 
+
88  void setTextureRect(const IntRect& rect);
+
89 
+
105  void setFillColor(const Color& color);
+
106 
+
117  void setOutlineColor(const Color& color);
+
118 
+
132  void setOutlineThickness(float thickness);
+
133 
+
146  const Texture* getTexture() const;
+
147 
+
156  const IntRect& getTextureRect() const;
+
157 
+
166  const Color& getFillColor() const;
+
167 
+
176  const Color& getOutlineColor() const;
+
177 
+
186  float getOutlineThickness() const;
+
187 
+
196  virtual unsigned int getPointCount() const = 0;
+
197 
+
210  virtual Vector2f getPoint(unsigned int index) const = 0;
+
211 
+
224  FloatRect getLocalBounds() const;
+
225 
+
238  FloatRect getGlobalBounds() const;
+
239 
+
240 protected :
+
241 
+
246  Shape();
+
247 
+
256  void update();
+
257 
+
258 private :
+
259 
+
267  virtual void draw(RenderTarget& target, RenderStates states) const;
+
268 
+
273  void updateFillColors();
+
274 
+
279  void updateTexCoords();
+
280 
+
285  void updateOutline();
+
286 
+
291  void updateOutlineColors();
+
292 
+
293 private :
+
294 
+
296  // Member data
+
298  const Texture* m_texture;
+
299  IntRect m_textureRect;
+
300  Color m_fillColor;
+
301  Color m_outlineColor;
+
302  float m_outlineThickness;
+
303  VertexArray m_vertices;
+
304  VertexArray m_outlineVertices;
+
305  FloatRect m_insideBounds;
+
306  FloatRect m_bounds;
+
307 };
+
308 
+
309 } // namespace sf
+
310 
+
311 
+
312 #endif // SFML_SHAPE_HPP
+
313 
+
314 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Sleep_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Sleep_8hpp_source.htm new file mode 100644 index 0000000..f60dcb5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Sleep_8hpp_source.htm @@ -0,0 +1,87 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Sleep.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SLEEP_HPP
+
26 #define SFML_SLEEP_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 #include <SFML/System/Time.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
47 void SFML_SYSTEM_API sleep(Time duration);
+
48 
+
49 } // namespace sf
+
50 
+
51 
+
52 #endif // SFML_SLEEP_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/SocketHandle_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/SocketHandle_8hpp_source.htm new file mode 100644 index 0000000..d3f7ad8 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/SocketHandle_8hpp_source.htm @@ -0,0 +1,100 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
SocketHandle.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SOCKETHANDLE_HPP
+
26 #define SFML_SOCKETHANDLE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 
+
33 #if defined(SFML_SYSTEM_WINDOWS)
+
34  #include <basetsd.h>
+
35 #endif
+
36 
+
37 
+
38 namespace sf
+
39 {
+
41 // Define the low-level socket handle type, specific to
+
42 // each platform
+
44 #if defined(SFML_SYSTEM_WINDOWS)
+
45 
+
46  typedef UINT_PTR SocketHandle;
+
47 
+
48 #else
+
49 
+
50  typedef int SocketHandle;
+
51 
+
52 #endif
+
53 
+
54 } // namespace sf
+
55 
+
56 
+
57 #endif // SFML_SOCKETHANDLE_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/SocketSelector_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/SocketSelector_8hpp_source.htm new file mode 100644 index 0000000..fb8d20d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/SocketSelector_8hpp_source.htm @@ -0,0 +1,119 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
SocketSelector.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SOCKETSELECTOR_HPP
+
26 #define SFML_SOCKETSELECTOR_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Network/Export.hpp>
+
32 #include <SFML/System/Time.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
37 class Socket;
+
38 
+
43 class SFML_NETWORK_API SocketSelector
+
44 {
+
45 public :
+
46 
+ +
52 
+
59  SocketSelector(const SocketSelector& copy);
+
60 
+
65  ~SocketSelector();
+
66 
+
80  void add(Socket& socket);
+
81 
+
93  void remove(Socket& socket);
+
94 
+
105  void clear();
+
106 
+
123  bool wait(Time timeout = Time::Zero);
+
124 
+
142  bool isReady(Socket& socket) const;
+
143 
+
152  SocketSelector& operator =(const SocketSelector& right);
+
153 
+
154 private :
+
155 
+
156  struct SocketSelectorImpl;
+
157 
+
159  // Member data
+
161  SocketSelectorImpl* m_impl;
+
162 };
+
163 
+
164 } // namespace sf
+
165 
+
166 
+
167 #endif // SFML_SOCKETSELECTOR_HPP
+
168 
+
169 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Socket_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Socket_8hpp_source.htm new file mode 100644 index 0000000..0d29271 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Socket_8hpp_source.htm @@ -0,0 +1,144 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Socket.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SOCKET_HPP
+
26 #define SFML_SOCKET_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Network/Export.hpp>
+
32 #include <SFML/Network/SocketHandle.hpp>
+
33 #include <SFML/System/NonCopyable.hpp>
+
34 #include <vector>
+
35 
+
36 
+
37 namespace sf
+
38 {
+
39 class SocketSelector;
+
40 
+
45 class SFML_NETWORK_API Socket : NonCopyable
+
46 {
+
47 public :
+
48 
+
53  enum Status
+
54  {
+
55  Done,
+ + +
58  Error
+
59  };
+
60 
+
65  enum
+
66  {
+
67  AnyPort = 0
+
68  };
+
69 
+
70 public :
+
71 
+
76  virtual ~Socket();
+
77 
+
95  void setBlocking(bool blocking);
+
96 
+
105  bool isBlocking() const;
+
106 
+
107 protected :
+
108 
+
113  enum Type
+
114  {
+
115  Tcp,
+
116  Udp
+
117  };
+
118 
+
127  Socket(Type type);
+
128 
+
139  SocketHandle getHandle() const;
+
140 
+
147  void create();
+
148 
+
158  void create(SocketHandle handle);
+
159 
+
166  void close();
+
167 
+
168 private :
+
169 
+
170  friend class SocketSelector;
+
171 
+
173  // Member data
+
175  Type m_type;
+
176  SocketHandle m_socket;
+
177  bool m_isBlocking;
+
178 };
+
179 
+
180 } // namespace sf
+
181 
+
182 
+
183 #endif // SFML_SOCKET_HPP
+
184 
+
185 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/SoundBufferRecorder_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/SoundBufferRecorder_8hpp_source.htm new file mode 100644 index 0000000..dcf7341 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/SoundBufferRecorder_8hpp_source.htm @@ -0,0 +1,109 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
SoundBufferRecorder.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SOUNDBUFFERRECORDER_HPP
+
26 #define SFML_SOUNDBUFFERRECORDER_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Audio/Export.hpp>
+
32 #include <SFML/Audio/SoundBuffer.hpp>
+
33 #include <SFML/Audio/SoundRecorder.hpp>
+
34 #include <vector>
+
35 
+
36 
+
37 namespace sf
+
38 {
+
44 class SFML_AUDIO_API SoundBufferRecorder : public SoundRecorder
+
45 {
+
46 public :
+
47 
+
59  const SoundBuffer& getBuffer() const;
+
60 
+
61 protected:
+
62 
+
69  virtual bool onStart();
+
70 
+
80  virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount);
+
81 
+
86  virtual void onStop();
+
87 
+
88 private :
+
89 
+
91  // Member data
+
93  std::vector<Int16> m_samples;
+
94  SoundBuffer m_buffer;
+
95 };
+
96 
+
97 } // namespace sf
+
98 
+
99 #endif // SFML_SOUNDBUFFERRECORDER_HPP
+
100 
+
101 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/SoundBuffer_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/SoundBuffer_8hpp_source.htm new file mode 100644 index 0000000..7b8738c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/SoundBuffer_8hpp_source.htm @@ -0,0 +1,152 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
SoundBuffer.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SOUNDBUFFER_HPP
+
26 #define SFML_SOUNDBUFFER_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Audio/Export.hpp>
+
32 #include <SFML/System/Time.hpp>
+
33 #include <string>
+
34 #include <vector>
+
35 #include <set>
+
36 
+
37 
+
38 namespace sf
+
39 {
+
40 namespace priv
+
41 {
+
42  class SoundFile;
+
43 }
+
44 
+
45 class Sound;
+
46 class InputStream;
+
47 
+
52 class SFML_AUDIO_API SoundBuffer
+
53 {
+
54 public :
+
55 
+
60  SoundBuffer();
+
61 
+
68  SoundBuffer(const SoundBuffer& copy);
+
69 
+
74  ~SoundBuffer();
+
75 
+
90  bool loadFromFile(const std::string& filename);
+
91 
+
107  bool loadFromMemory(const void* data, std::size_t sizeInBytes);
+
108 
+
123  bool loadFromStream(InputStream& stream);
+
124 
+
141  bool loadFromSamples(const Int16* samples, std::size_t sampleCount, unsigned int channelCount, unsigned int sampleRate);
+
142 
+
157  bool saveToFile(const std::string& filename) const;
+
158 
+
171  const Int16* getSamples() const;
+
172 
+
184  std::size_t getSampleCount() const;
+
185 
+
198  unsigned int getSampleRate() const;
+
199 
+
211  unsigned int getChannelCount() const;
+
212 
+
221  Time getDuration() const;
+
222 
+
231  SoundBuffer& operator =(const SoundBuffer& right);
+
232 
+
233 private :
+
234 
+
235  friend class Sound;
+
236 
+
245  bool initialize(priv::SoundFile& file);
+
246 
+
256  bool update(unsigned int channelCount, unsigned int sampleRate);
+
257 
+
264  void attachSound(Sound* sound) const;
+
265 
+
272  void detachSound(Sound* sound) const;
+
273 
+
275  // Types
+
277  typedef std::set<Sound*> SoundList;
+
278 
+
280  // Member data
+
282  unsigned int m_buffer;
+
283  std::vector<Int16> m_samples;
+
284  Time m_duration;
+
285  mutable SoundList m_sounds;
+
286 };
+
287 
+
288 } // namespace sf
+
289 
+
290 
+
291 #endif // SFML_SOUNDBUFFER_HPP
+
292 
+
293 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/SoundRecorder_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/SoundRecorder_8hpp_source.htm new file mode 100644 index 0000000..db985ba --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/SoundRecorder_8hpp_source.htm @@ -0,0 +1,127 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
SoundRecorder.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SOUNDRECORDER_HPP
+
26 #define SFML_SOUNDRECORDER_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Audio/Export.hpp>
+
32 #include <SFML/System/Thread.hpp>
+
33 #include <vector>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
42 class SFML_AUDIO_API SoundRecorder
+
43 {
+
44 public :
+
45 
+
50  virtual ~SoundRecorder();
+
51 
+
67  void start(unsigned int sampleRate = 44100);
+
68 
+
75  void stop();
+
76 
+
87  unsigned int getSampleRate() const;
+
88 
+
100  static bool isAvailable();
+
101 
+
102 protected :
+
103 
+
110  SoundRecorder();
+
111 
+
123  virtual bool onStart();
+
124 
+
139  virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount) = 0;
+
140 
+
150  virtual void onStop();
+
151 
+
152 private :
+
153 
+
161  void record();
+
162 
+
171  void processCapturedSamples();
+
172 
+
179  void cleanup();
+
180 
+
182  // Member data
+
184  Thread m_thread;
+
185  std::vector<Int16> m_samples;
+
186  unsigned int m_sampleRate;
+
187  bool m_isCapturing;
+
188 };
+
189 
+
190 } // namespace sf
+
191 
+
192 
+
193 #endif // SFML_SOUNDRECORDER_HPP
+
194 
+
195 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/SoundSource_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/SoundSource_8hpp_source.htm new file mode 100644 index 0000000..9c908b6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/SoundSource_8hpp_source.htm @@ -0,0 +1,138 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
SoundSource.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SOUNDSOURCE_HPP
+
26 #define SFML_SOUNDSOURCE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Audio/Export.hpp>
+
32 #include <SFML/System/Vector3.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
41 class SFML_AUDIO_API SoundSource
+
42 {
+
43 public :
+
44 
+
49  enum Status
+
50  {
+ + +
53  Playing
+
54  };
+
55 
+
62  SoundSource(const SoundSource& copy);
+
63 
+
68  virtual ~SoundSource();
+
69 
+
84  void setPitch(float pitch);
+
85 
+
97  void setVolume(float volume);
+
98 
+
113  void setPosition(float x, float y, float z);
+
114 
+
127  void setPosition(const Vector3f& position);
+
128 
+
143  void setRelativeToListener(bool relative);
+
144 
+
160  void setMinDistance(float distance);
+
161 
+
179  void setAttenuation(float attenuation);
+
180 
+
189  float getPitch() const;
+
190 
+
199  float getVolume() const;
+
200 
+
209  Vector3f getPosition() const;
+
210 
+
220  bool isRelativeToListener() const;
+
221 
+
230  float getMinDistance() const;
+
231 
+
240  float getAttenuation() const;
+
241 
+
242 protected :
+
243 
+
250  SoundSource();
+
251 
+
258  Status getStatus() const;
+
259 
+
261  // Member data
+
263  unsigned int m_source;
+
264 };
+
265 
+
266 } // namespace sf
+
267 
+
268 
+
269 #endif // SFML_SOUNDSOURCE_HPP
+
270 
+
271 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/SoundStream_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/SoundStream_8hpp_source.htm new file mode 100644 index 0000000..5402426 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/SoundStream_8hpp_source.htm @@ -0,0 +1,159 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
SoundStream.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SOUNDSTREAM_HPP
+
26 #define SFML_SOUNDSTREAM_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Audio/Export.hpp>
+
32 #include <SFML/Audio/SoundSource.hpp>
+
33 #include <SFML/System/Thread.hpp>
+
34 #include <SFML/System/Time.hpp>
+
35 #include <cstdlib>
+
36 
+
37 
+
38 namespace sf
+
39 {
+
44 class SFML_AUDIO_API SoundStream : public SoundSource
+
45 {
+
46 public :
+
47 
+
52  struct Chunk
+
53  {
+
54  const Int16* samples;
+
55  std::size_t sampleCount;
+
56  };
+
57 
+
62  virtual ~SoundStream();
+
63 
+
76  void play();
+
77 
+
87  void pause();
+
88 
+
99  void stop();
+
100 
+
109  unsigned int getChannelCount() const;
+
110 
+
120  unsigned int getSampleRate() const;
+
121 
+
128  Status getStatus() const;
+
129 
+
141  void setPlayingOffset(Time timeOffset);
+
142 
+
151  Time getPlayingOffset() const;
+
152 
+
166  void setLoop(bool loop);
+
167 
+
176  bool getLoop() const;
+
177 
+
178 protected :
+
179 
+
186  SoundStream();
+
187 
+
202  void initialize(unsigned int channelCount, unsigned int sampleRate);
+
203 
+
218  virtual bool onGetData(Chunk& data) = 0;
+
219 
+
229  virtual void onSeek(Time timeOffset) = 0;
+
230 
+
231 private :
+
232 
+
240  void streamData();
+
241 
+
255  bool fillAndPushBuffer(unsigned int bufferNum);
+
256 
+
266  bool fillQueue();
+
267 
+
274  void clearQueue();
+
275 
+
276  enum
+
277  {
+
278  BufferCount = 3
+
279  };
+
280 
+
282  // Member data
+
284  Thread m_thread;
+
285  bool m_isStreaming;
+
286  unsigned int m_buffers[BufferCount];
+
287  unsigned int m_channelCount;
+
288  unsigned int m_sampleRate;
+
289  Uint32 m_format;
+
290  bool m_loop;
+
291  Uint64 m_samplesProcessed;
+
292  bool m_endBuffers[BufferCount];
+
293 };
+
294 
+
295 } // namespace sf
+
296 
+
297 
+
298 #endif // SFML_SOUNDSTREAM_HPP
+
299 
+
300 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Sound_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Sound_8hpp_source.htm new file mode 100644 index 0000000..8dad4f2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Sound_8hpp_source.htm @@ -0,0 +1,133 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Sound.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SOUND_HPP
+
26 #define SFML_SOUND_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Audio/Export.hpp>
+
32 #include <SFML/Audio/SoundSource.hpp>
+
33 #include <SFML/System/Time.hpp>
+
34 #include <cstdlib>
+
35 
+
36 
+
37 namespace sf
+
38 {
+
39 class SoundBuffer;
+
40 
+
45 class SFML_AUDIO_API Sound : public SoundSource
+
46 {
+
47 public :
+
48 
+
53  Sound();
+
54 
+
61  explicit Sound(const SoundBuffer& buffer);
+
62 
+
69  Sound(const Sound& copy);
+
70 
+
75  ~Sound();
+
76 
+
89  void play();
+
90 
+
100  void pause();
+
101 
+
112  void stop();
+
113 
+
126  void setBuffer(const SoundBuffer& buffer);
+
127 
+
141  void setLoop(bool loop);
+
142 
+
154  void setPlayingOffset(Time timeOffset);
+
155 
+
162  const SoundBuffer* getBuffer() const;
+
163 
+
172  bool getLoop() const;
+
173 
+
182  Time getPlayingOffset() const;
+
183 
+
190  Status getStatus() const;
+
191 
+
200  Sound& operator =(const Sound& right);
+
201 
+
211  void resetBuffer();
+
212 
+
213 private :
+
214 
+
216  // Member data
+
218  const SoundBuffer* m_buffer;
+
219 };
+
220 
+
221 } // namespace sf
+
222 
+
223 
+
224 #endif // SFML_SOUND_HPP
+
225 
+
226 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Sprite_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Sprite_8hpp_source.htm new file mode 100644 index 0000000..cbe7b91 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Sprite_8hpp_source.htm @@ -0,0 +1,132 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Sprite.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SPRITE_HPP
+
26 #define SFML_SPRITE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Drawable.hpp>
+
33 #include <SFML/Graphics/Transformable.hpp>
+
34 #include <SFML/Graphics/Vertex.hpp>
+
35 #include <SFML/Graphics/Rect.hpp>
+
36 
+
37 
+
38 namespace sf
+
39 {
+
40 class Texture;
+
41 
+
47 class SFML_GRAPHICS_API Sprite : public Drawable, public Transformable
+
48 {
+
49 public :
+
50 
+
57  Sprite();
+
58 
+
67  explicit Sprite(const Texture& texture);
+
68 
+
78  Sprite(const Texture& texture, const IntRect& rectangle);
+
79 
+
99  void setTexture(const Texture& texture, bool resetRect = false);
+
100 
+
113  void setTextureRect(const IntRect& rectangle);
+
114 
+
128  void setColor(const Color& color);
+
129 
+
142  const Texture* getTexture() const;
+
143 
+
152  const IntRect& getTextureRect() const;
+
153 
+
162  const Color& getColor() const;
+
163 
+
176  FloatRect getLocalBounds() const;
+
177 
+
190  FloatRect getGlobalBounds() const;
+
191 
+
192 private :
+
193 
+
201  virtual void draw(RenderTarget& target, RenderStates states) const;
+
202 
+
207  void updatePositions();
+
208 
+
213  void updateTexCoords();
+
214 
+
216  // Member data
+
218  Vertex m_vertices[4];
+
219  const Texture* m_texture;
+
220  IntRect m_textureRect;
+
221 };
+
222 
+
223 } // namespace sf
+
224 
+
225 
+
226 #endif // SFML_SPRITE_HPP
+
227 
+
228 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/String_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/String_8hpp_source.htm new file mode 100644 index 0000000..73b05d9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/String_8hpp_source.htm @@ -0,0 +1,182 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
String.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_STRING_HPP
+
26 #define SFML_STRING_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 #include <locale>
+
33 #include <string>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
43 class SFML_SYSTEM_API String
+
44 {
+
45 public :
+
46 
+
48  // Types
+
50  typedef std::basic_string<Uint32>::iterator Iterator;
+
51  typedef std::basic_string<Uint32>::const_iterator ConstIterator;
+
52 
+
54  // Static member data
+
56  static const std::size_t InvalidPos;
+
57 
+
64  String();
+
65 
+
76  String(char ansiChar, const std::locale& locale = std::locale());
+
77 
+
84  String(wchar_t wideChar);
+
85 
+
92  String(Uint32 utf32Char);
+
93 
+
104  String(const char* ansiString, const std::locale& locale = std::locale());
+
105 
+
116  String(const std::string& ansiString, const std::locale& locale = std::locale());
+
117 
+
124  String(const wchar_t* wideString);
+
125 
+
132  String(const std::wstring& wideString);
+
133 
+
140  String(const Uint32* utf32String);
+
141 
+
148  String(const std::basic_string<Uint32>& utf32String);
+
149 
+
156  String(const String& copy);
+
157 
+
173  operator std::string() const;
+
174 
+
188  operator std::wstring() const;
+
189 
+
205  std::string toAnsiString(const std::locale& locale = std::locale()) const;
+
206 
+
218  std::wstring toWideString() const;
+
219 
+
228  String& operator =(const String& right);
+
229 
+
238  String& operator +=(const String& right);
+
239 
+
251  Uint32 operator [](std::size_t index) const;
+
252 
+
264  Uint32& operator [](std::size_t index);
+
265 
+
274  void clear();
+
275 
+
284  std::size_t getSize() const;
+
285 
+
294  bool isEmpty() const;
+
295 
+
306  void erase(std::size_t position, std::size_t count = 1);
+
307 
+
318  void insert(std::size_t position, const String& str);
+
319 
+
332  std::size_t find(const String& str, std::size_t start = 0) const;
+
333 
+
345  const Uint32* getData() const;
+
346 
+
355  Iterator begin();
+
356 
+
365  ConstIterator begin() const;
+
366 
+
379  Iterator end();
+
380 
+
393  ConstIterator end() const;
+
394 
+
395 private :
+
396 
+
397  friend SFML_SYSTEM_API bool operator ==(const String& left, const String& right);
+
398  friend SFML_SYSTEM_API bool operator <(const String& left, const String& right);
+
399 
+
401  // Member data
+
403  std::basic_string<Uint32> m_string;
+
404 };
+
405 
+
416 SFML_SYSTEM_API bool operator ==(const String& left, const String& right);
+
417 
+
428 SFML_SYSTEM_API bool operator !=(const String& left, const String& right);
+
429 
+
440 SFML_SYSTEM_API bool operator <(const String& left, const String& right);
+
441 
+
452 SFML_SYSTEM_API bool operator >(const String& left, const String& right);
+
453 
+
464 SFML_SYSTEM_API bool operator <=(const String& left, const String& right);
+
465 
+
476 SFML_SYSTEM_API bool operator >=(const String& left, const String& right);
+
477 
+
488 SFML_SYSTEM_API String operator +(const String& left, const String& right);
+
489 
+
490 } // namespace sf
+
491 
+
492 
+
493 #endif // SFML_STRING_HPP
+
494 
+
495 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/System_2Export_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/System_2Export_8hpp_source.htm new file mode 100644 index 0000000..6cdd495 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/System_2Export_8hpp_source.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
System/Export.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SYSTEM_EXPORT_HPP
+
26 #define SFML_SYSTEM_EXPORT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 
+
33 
+
35 // Define portable import / export macros
+
37 #if defined(SFML_SYSTEM_EXPORTS)
+
38 
+
39  #define SFML_SYSTEM_API SFML_API_EXPORT
+
40 
+
41 #else
+
42 
+
43  #define SFML_SYSTEM_API SFML_API_IMPORT
+
44 
+
45 #endif
+
46 
+
47 
+
48 #endif // SFML_SYSTEM_EXPORT_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/System_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/System_8hpp_source.htm new file mode 100644 index 0000000..4f17f6f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/System_8hpp_source.htm @@ -0,0 +1,93 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
System.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SYSTEM_HPP
+
26 #define SFML_SYSTEM_HPP
+
27 
+
29 // Headers
+
31 
+
32 #include <SFML/Config.hpp>
+
33 #include <SFML/System/Clock.hpp>
+
34 #include <SFML/System/Err.hpp>
+
35 #include <SFML/System/InputStream.hpp>
+
36 #include <SFML/System/Lock.hpp>
+
37 #include <SFML/System/Mutex.hpp>
+
38 #include <SFML/System/Sleep.hpp>
+
39 #include <SFML/System/String.hpp>
+
40 #include <SFML/System/Thread.hpp>
+
41 #include <SFML/System/ThreadLocal.hpp>
+
42 #include <SFML/System/ThreadLocalPtr.hpp>
+
43 #include <SFML/System/Utf.hpp>
+
44 #include <SFML/System/Vector2.hpp>
+
45 #include <SFML/System/Vector3.hpp>
+
46 
+
47 #endif // SFML_SYSTEM_HPP
+
48 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/TcpListener_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/TcpListener_8hpp_source.htm new file mode 100644 index 0000000..d9c344e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/TcpListener_8hpp_source.htm @@ -0,0 +1,105 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
TcpListener.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_TCPLISTENER_HPP
+
26 #define SFML_TCPLISTENER_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Network/Export.hpp>
+
32 #include <SFML/Network/Socket.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
37 class TcpSocket;
+
38 
+
43 class SFML_NETWORK_API TcpListener : public Socket
+
44 {
+
45 public :
+
46 
+
51  TcpListener();
+
52 
+
64  unsigned short getLocalPort() const;
+
65 
+
81  Status listen(unsigned short port);
+
82 
+
92  void close();
+
93 
+
107  Status accept(TcpSocket& socket);
+
108 };
+
109 
+
110 
+
111 } // namespace sf
+
112 
+
113 
+
114 #endif // SFML_TCPLISTENER_HPP
+
115 
+
116 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/TcpSocket_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/TcpSocket_8hpp_source.htm new file mode 100644 index 0000000..e1030d9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/TcpSocket_8hpp_source.htm @@ -0,0 +1,133 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
TcpSocket.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_TCPSOCKET_HPP
+
26 #define SFML_TCPSOCKET_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Network/Export.hpp>
+
32 #include <SFML/Network/Socket.hpp>
+
33 #include <SFML/System/Time.hpp>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
38 class TcpListener;
+
39 class IpAddress;
+
40 class Packet;
+
41 
+
46 class SFML_NETWORK_API TcpSocket : public Socket
+
47 {
+
48 public :
+
49 
+
54  TcpSocket();
+
55 
+
66  unsigned short getLocalPort() const;
+
67 
+
79  IpAddress getRemoteAddress() const;
+
80 
+
92  unsigned short getRemotePort() const;
+
93 
+
111  Status connect(const IpAddress& remoteAddress, unsigned short remotePort, Time timeout = Time::Zero);
+
112 
+
122  void disconnect();
+
123 
+
137  Status send(const void* data, std::size_t size);
+
138 
+
155  Status receive(void* data, std::size_t size, std::size_t& received);
+
156 
+
169  Status send(Packet& packet);
+
170 
+
185  Status receive(Packet& packet);
+
186 
+
187 private:
+
188 
+
189  friend class TcpListener;
+
190 
+
195  struct PendingPacket
+
196  {
+
197  PendingPacket();
+
198 
+
199  Uint32 Size;
+
200  std::size_t SizeReceived;
+
201  std::vector<char> Data;
+
202  };
+
203 
+
205  // Member data
+
207  PendingPacket m_pendingPacket;
+
208 };
+
209 
+
210 } // namespace sf
+
211 
+
212 
+
213 #endif // SFML_TCPSOCKET_HPP
+
214 
+
215 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Text_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Text_8hpp_source.htm new file mode 100644 index 0000000..e4a4b4f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Text_8hpp_source.htm @@ -0,0 +1,152 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Text.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_TEXT_HPP
+
26 #define SFML_TEXT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Drawable.hpp>
+
33 #include <SFML/Graphics/Transformable.hpp>
+
34 #include <SFML/Graphics/Font.hpp>
+
35 #include <SFML/Graphics/Rect.hpp>
+
36 #include <SFML/Graphics/VertexArray.hpp>
+
37 #include <SFML/System/String.hpp>
+
38 #include <string>
+
39 #include <vector>
+
40 
+
41 
+
42 namespace sf
+
43 {
+
48 class SFML_GRAPHICS_API Text : public Drawable, public Transformable
+
49 {
+
50 public :
+
51 
+
56  enum Style
+
57  {
+
58  Regular = 0,
+
59  Bold = 1 << 0,
+
60  Italic = 1 << 1,
+
61  Underlined = 1 << 2
+
62  };
+
63 
+
70  Text();
+
71 
+
80  Text(const String& string, const Font& font, unsigned int characterSize = 30);
+
81 
+
101  void setString(const String& string);
+
102 
+
118  void setFont(const Font& font);
+
119 
+
130  void setCharacterSize(unsigned int size);
+
131 
+
144  void setStyle(Uint32 style);
+
145 
+
156  void setColor(const Color& color);
+
157 
+
175  const String& getString() const;
+
176 
+
189  const Font* getFont() const;
+
190 
+
199  unsigned int getCharacterSize() const;
+
200 
+
209  Uint32 getStyle() const;
+
210 
+
219  const Color& getColor() const;
+
220 
+
236  Vector2f findCharacterPos(std::size_t index) const;
+
237 
+
250  FloatRect getLocalBounds() const;
+
251 
+
264  FloatRect getGlobalBounds() const;
+
265 
+
266 private :
+
267 
+
275  virtual void draw(RenderTarget& target, RenderStates states) const;
+
276 
+
281  void updateGeometry();
+
282 
+
284  // Member data
+
286  String m_string;
+
287  const Font* m_font;
+
288  unsigned int m_characterSize;
+
289  Uint32 m_style;
+
290  Color m_color;
+
291  VertexArray m_vertices;
+
292  FloatRect m_bounds;
+
293 };
+
294 
+
295 } // namespace sf
+
296 
+
297 
+
298 #endif // SFML_TEXT_HPP
+
299 
+
300 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Texture_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Texture_8hpp_source.htm new file mode 100644 index 0000000..8d79e1a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Texture_8hpp_source.htm @@ -0,0 +1,167 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Texture.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_TEXTURE_HPP
+
26 #define SFML_TEXTURE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Image.hpp>
+
33 #include <SFML/Window/GlResource.hpp>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
38 class Window;
+
39 class RenderTarget;
+
40 class RenderTexture;
+
41 class InputStream;
+
42 
+
47 class SFML_GRAPHICS_API Texture : GlResource
+
48 {
+
49 public :
+
50 
+ +
56  {
+ +
58  Pixels
+
59  };
+
60 
+
61 public :
+
62 
+
69  Texture();
+
70 
+
77  Texture(const Texture& copy);
+
78 
+
83  ~Texture();
+
84 
+
96  bool create(unsigned int width, unsigned int height);
+
97 
+
127  bool loadFromFile(const std::string& filename, const IntRect& area = IntRect());
+
128 
+
159  bool loadFromMemory(const void* data, std::size_t size, const IntRect& area = IntRect());
+
160 
+
190  bool loadFromStream(sf::InputStream& stream, const IntRect& area = IntRect());
+
191 
+
214  bool loadFromImage(const Image& image, const IntRect& area = IntRect());
+
215 
+
222  Vector2u getSize() const;
+
223 
+
237  Image copyToImage() const;
+
238 
+
255  void update(const Uint8* pixels);
+
256 
+
277  void update(const Uint8* pixels, unsigned int width, unsigned int height, unsigned int x, unsigned int y);
+
278 
+
297  void update(const Image& image);
+
298 
+
314  void update(const Image& image, unsigned int x, unsigned int y);
+
315 
+
334  void update(const Window& window);
+
335 
+
351  void update(const Window& window, unsigned int x, unsigned int y);
+
352 
+
367  void setSmooth(bool smooth);
+
368 
+
377  bool isSmooth() const;
+
378 
+
401  void setRepeated(bool repeated);
+
402 
+
411  bool isRepeated() const;
+
412 
+
421  Texture& operator =(const Texture& right);
+
422 
+
454  static void bind(const Texture* texture, CoordinateType coordinateType = Normalized);
+
455 
+
466  static unsigned int getMaximumSize();
+
467 
+
468 private :
+
469 
+
470  friend class RenderTexture;
+
471  friend class RenderTarget;
+
472 
+
486  static unsigned int getValidSize(unsigned int size);
+
487 
+
489  // Member data
+
491  Vector2u m_size;
+
492  Vector2u m_actualSize;
+
493  unsigned int m_texture;
+
494  bool m_isSmooth;
+
495  bool m_isRepeated;
+
496  mutable bool m_pixelsFlipped;
+
497  Uint64 m_cacheId;
+
498 };
+
499 
+
500 } // namespace sf
+
501 
+
502 
+
503 #endif // SFML_TEXTURE_HPP
+
504 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/ThreadLocalPtr_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/ThreadLocalPtr_8hpp_source.htm new file mode 100644 index 0000000..db04afd --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/ThreadLocalPtr_8hpp_source.htm @@ -0,0 +1,106 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
ThreadLocalPtr.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_THREADLOCALPTR_HPP
+
26 #define SFML_THREADLOCALPTR_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/ThreadLocal.hpp>
+
32 
+
33 
+
34 namespace sf
+
35 {
+
40 template <typename T>
+
41 class ThreadLocalPtr : private ThreadLocal
+
42 {
+
43 public :
+
44 
+
51  ThreadLocalPtr(T* value = NULL);
+
52 
+
62  T& operator *() const;
+
63 
+
73  T* operator ->() const;
+
74 
+
82  operator T*() const;
+
83 
+
92  ThreadLocalPtr<T>& operator =(T* value);
+
93 
+ +
103 };
+
104 
+
105 } // namespace sf
+
106 
+
107 #include <SFML/System/ThreadLocalPtr.inl>
+
108 
+
109 
+
110 #endif // SFML_THREADLOCALPTR_HPP
+
111 
+
112 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/ThreadLocalPtr_8inl_source.htm b/SFML-2.1-osx-clang-universal/doc/html/ThreadLocalPtr_8inl_source.htm new file mode 100644 index 0000000..c8fd15f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/ThreadLocalPtr_8inl_source.htm @@ -0,0 +1,118 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
ThreadLocalPtr.inl
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 
+
26 namespace sf
+
27 {
+
29 template <typename T>
+ +
31 ThreadLocal(value)
+
32 {
+
33 }
+
34 
+
35 
+
37 template <typename T>
+ +
39 {
+
40  return *static_cast<T*>(getValue());
+
41 }
+
42 
+
43 
+
45 template <typename T>
+ +
47 {
+
48  return static_cast<T*>(getValue());
+
49 }
+
50 
+
51 
+
53 template <typename T>
+ +
55 {
+
56  return static_cast<T*>(getValue());
+
57 }
+
58 
+
59 
+
61 template <typename T>
+ +
63 {
+
64  setValue(value);
+
65  return *this;
+
66 }
+
67 
+
68 
+
70 template <typename T>
+ +
72 {
+
73  setValue(right.getValue());
+
74  return *this;
+
75 }
+
76 
+
77 } // namespace sf
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/ThreadLocal_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/ThreadLocal_8hpp_source.htm new file mode 100644 index 0000000..0e342a8 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/ThreadLocal_8hpp_source.htm @@ -0,0 +1,111 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
ThreadLocal.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_THREADLOCAL_HPP
+
26 #define SFML_THREADLOCAL_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 #include <SFML/System/NonCopyable.hpp>
+
33 #include <cstdlib>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
38 namespace priv
+
39 {
+
40  class ThreadLocalImpl;
+
41 }
+
42 
+
47 class SFML_SYSTEM_API ThreadLocal : NonCopyable
+
48 {
+
49 public :
+
50 
+
57  ThreadLocal(void* value = NULL);
+
58 
+
63  ~ThreadLocal();
+
64 
+
71  void setValue(void* value);
+
72 
+
79  void* getValue() const;
+
80 
+
81 private :
+
82 
+
84  // Member data
+
86  priv::ThreadLocalImpl* m_impl;
+
87 };
+
88 
+
89 } // namespace sf
+
90 
+
91 
+
92 #endif // SFML_THREADLOCAL_HPP
+
93 
+
94 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Thread_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Thread_8hpp_source.htm new file mode 100644 index 0000000..efcc49a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Thread_8hpp_source.htm @@ -0,0 +1,127 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Thread.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_THREAD_HPP
+
26 #define SFML_THREAD_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 #include <SFML/System/NonCopyable.hpp>
+
33 #include <cstdlib>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
38 namespace priv
+
39 {
+
40  class ThreadImpl;
+
41  struct ThreadFunc;
+
42 }
+
43 
+
48 class SFML_SYSTEM_API Thread : NonCopyable
+
49 {
+
50 public :
+
51 
+
74  template <typename F>
+
75  Thread(F function);
+
76 
+
102  template <typename F, typename A>
+
103  Thread(F function, A argument);
+
104 
+
125  template <typename C>
+
126  Thread(void(C::*function)(), C* object);
+
127 
+
135  ~Thread();
+
136 
+
146  void launch();
+
147 
+
159  void wait();
+
160 
+
172  void terminate();
+
173 
+
174 private :
+
175 
+
176  friend class priv::ThreadImpl;
+
177 
+
184  void run();
+
185 
+
187  // Member data
+
189  priv::ThreadImpl* m_impl;
+
190  priv::ThreadFunc* m_entryPoint;
+
191 };
+
192 
+
193 #include <SFML/System/Thread.inl>
+
194 
+
195 } // namespace sf
+
196 
+
197 #endif // SFML_THREAD_HPP
+
198 
+
199 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Thread_8inl_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Thread_8inl_source.htm new file mode 100644 index 0000000..ad840a4 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Thread_8inl_source.htm @@ -0,0 +1,134 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Thread.inl
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 namespace priv
+
26 {
+
27 // Base class for abstract thread functions
+
28 struct ThreadFunc
+
29 {
+
30  virtual ~ThreadFunc() {}
+
31  virtual void run() = 0;
+
32 };
+
33 
+
34 // Specialization using a functor (including free functions) with no argument
+
35 template <typename T>
+
36 struct ThreadFunctor : ThreadFunc
+
37 {
+
38  ThreadFunctor(T functor) : m_functor(functor) {}
+
39  virtual void run() {m_functor();}
+
40  T m_functor;
+
41 };
+
42 
+
43 // Specialization using a functor (including free functions) with one argument
+
44 template <typename F, typename A>
+
45 struct ThreadFunctorWithArg : ThreadFunc
+
46 {
+
47  ThreadFunctorWithArg(F function, A arg) : m_function(function), m_arg(arg) {}
+
48  virtual void run() {m_function(m_arg);}
+
49  F m_function;
+
50  A m_arg;
+
51 };
+
52 
+
53 // Specialization using a member function
+
54 template <typename C>
+
55 struct ThreadMemberFunc : ThreadFunc
+
56 {
+
57  ThreadMemberFunc(void(C::*function)(), C* object) : m_function(function), m_object(object) {}
+
58  virtual void run() {(m_object->*m_function)();}
+
59  void(C::*m_function)();
+
60  C* m_object;
+
61 };
+
62 
+
63 } // namespace priv
+
64 
+
65 
+
67 template <typename F>
+
68 Thread::Thread(F functor) :
+
69 m_impl (NULL),
+
70 m_entryPoint(new priv::ThreadFunctor<F>(functor))
+
71 {
+
72 }
+
73 
+
74 
+
76 template <typename F, typename A>
+
77 Thread::Thread(F function, A argument) :
+
78 m_impl (NULL),
+
79 m_entryPoint(new priv::ThreadFunctorWithArg<F, A>(function, argument))
+
80 {
+
81 }
+
82 
+
83 
+
85 template <typename C>
+
86 Thread::Thread(void(C::*function)(), C* object) :
+
87 m_impl (NULL),
+
88 m_entryPoint(new priv::ThreadMemberFunc<C>(function, object))
+
89 {
+
90 }
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Time_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Time_8hpp_source.htm new file mode 100644 index 0000000..1a348a5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Time_8hpp_source.htm @@ -0,0 +1,163 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Time.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_TIME_HPP
+
26 #define SFML_TIME_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/System/Export.hpp>
+
32 
+
33 
+
34 namespace sf
+
35 {
+
40 class SFML_SYSTEM_API Time
+
41 {
+
42 public :
+
43 
+
50  Time();
+
51 
+
60  float asSeconds() const;
+
61 
+
70  Int32 asMilliseconds() const;
+
71 
+
80  Int64 asMicroseconds() const;
+
81 
+
83  // Static member data
+
85  static const Time Zero;
+
86 
+
87 private :
+
88 
+
89  friend SFML_SYSTEM_API Time seconds(float);
+
90  friend SFML_SYSTEM_API Time milliseconds(Int32);
+
91  friend SFML_SYSTEM_API Time microseconds(Int64);
+
92 
+
102  explicit Time(Int64 microseconds);
+
103 
+
104 private :
+
105 
+
107  // Member data
+
109  Int64 m_microseconds;
+
110 };
+
111 
+
123 SFML_SYSTEM_API Time seconds(float amount);
+
124 
+
136 SFML_SYSTEM_API Time milliseconds(Int32 amount);
+
137 
+
149 SFML_SYSTEM_API Time microseconds(Int64 amount);
+
150 
+
161 SFML_SYSTEM_API bool operator ==(Time left, Time right);
+
162 
+
173 SFML_SYSTEM_API bool operator !=(Time left, Time right);
+
174 
+
185 SFML_SYSTEM_API bool operator <(Time left, Time right);
+
186 
+
197 SFML_SYSTEM_API bool operator >(Time left, Time right);
+
198 
+
209 SFML_SYSTEM_API bool operator <=(Time left, Time right);
+
210 
+
221 SFML_SYSTEM_API bool operator >=(Time left, Time right);
+
222 
+
232 SFML_SYSTEM_API Time operator -(Time right);
+
233 
+
244 SFML_SYSTEM_API Time operator +(Time left, Time right);
+
245 
+
256 SFML_SYSTEM_API Time& operator +=(Time& left, Time right);
+
257 
+
268 SFML_SYSTEM_API Time operator -(Time left, Time right);
+
269 
+
280 SFML_SYSTEM_API Time& operator -=(Time& left, Time right);
+
281 
+
292 SFML_SYSTEM_API Time operator *(Time left, float right);
+
293 
+
304 SFML_SYSTEM_API Time operator *(Time left, Int64 right);
+
305 
+
316 SFML_SYSTEM_API Time operator *(float left, Time right);
+
317 
+
328 SFML_SYSTEM_API Time operator *(Int64 left, Time right);
+
329 
+
340 SFML_SYSTEM_API Time& operator *=(Time& left, float right);
+
341 
+
352 SFML_SYSTEM_API Time& operator *=(Time& left, Int64 right);
+
353 
+
364 SFML_SYSTEM_API Time operator /(Time left, float right);
+
365 
+
376 SFML_SYSTEM_API Time operator /(Time left, Int64 right);
+
377 
+
388 SFML_SYSTEM_API Time& operator /=(Time& left, float right);
+
389 
+
400 SFML_SYSTEM_API Time& operator /=(Time& left, Int64 right);
+
401 
+
402 } // namespace sf
+
403 
+
404 
+
405 #endif // SFML_TIME_HPP
+
406 
+
407 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Transform_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Transform_8hpp_source.htm new file mode 100644 index 0000000..7494374 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Transform_8hpp_source.htm @@ -0,0 +1,143 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Transform.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_TRANSFORM_HPP
+
26 #define SFML_TRANSFORM_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Rect.hpp>
+
33 #include <SFML/System/Vector2.hpp>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
42 class SFML_GRAPHICS_API Transform
+
43 {
+
44 public :
+
45 
+
52  Transform();
+
53 
+
68  Transform(float a00, float a01, float a02,
+
69  float a10, float a11, float a12,
+
70  float a20, float a21, float a22);
+
71 
+
87  const float* getMatrix() const;
+
88 
+
98  Transform getInverse() const;
+
99 
+
109  Vector2f transformPoint(float x, float y) const;
+
110 
+
119  Vector2f transformPoint(const Vector2f& point) const;
+
120 
+
135  FloatRect transformRect(const FloatRect& rectangle) const;
+
136 
+
149  Transform& combine(const Transform& transform);
+
150 
+
169  Transform& translate(float x, float y);
+
170 
+
188  Transform& translate(const Vector2f& offset);
+
189 
+
207  Transform& rotate(float angle);
+
208 
+
233  Transform& rotate(float angle, float centerX, float centerY);
+
234 
+
258  Transform& rotate(float angle, const Vector2f& center);
+
259 
+
278  Transform& scale(float scaleX, float scaleY);
+
279 
+
305  Transform& scale(float scaleX, float scaleY, float centerX, float centerY);
+
306 
+
324  Transform& scale(const Vector2f& factors);
+
325 
+
349  Transform& scale(const Vector2f& factors, const Vector2f& center);
+
350 
+
352  // Static member data
+
354  static const Transform Identity;
+
355 
+
356 private:
+
357 
+
359  // Member data
+
361  float m_matrix[16];
+
362 };
+
363 
+
376 SFML_GRAPHICS_API Transform operator *(const Transform& left, const Transform& right);
+
377 
+
390 SFML_GRAPHICS_API Transform& operator *=(Transform& left, const Transform& right);
+
391 
+
404 SFML_GRAPHICS_API Vector2f operator *(const Transform& left, const Vector2f& right);
+
405 
+
406 } // namespace sf
+
407 
+
408 
+
409 #endif // SFML_TRANSFORM_HPP
+
410 
+
411 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Transformable_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Transformable_8hpp_source.htm new file mode 100644 index 0000000..681da64 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Transformable_8hpp_source.htm @@ -0,0 +1,144 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Transformable.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_TRANSFORMABLE_HPP
+
26 #define SFML_TRANSFORMABLE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Transform.hpp>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
41 class SFML_GRAPHICS_API Transformable
+
42 {
+
43 public :
+
44 
+
49  Transformable();
+
50 
+
55  virtual ~Transformable();
+
56 
+
70  void setPosition(float x, float y);
+
71 
+
84  void setPosition(const Vector2f& position);
+
85 
+
98  void setRotation(float angle);
+
99 
+
113  void setScale(float factorX, float factorY);
+
114 
+
127  void setScale(const Vector2f& factors);
+
128 
+
145  void setOrigin(float x, float y);
+
146 
+
162  void setOrigin(const Vector2f& origin);
+
163 
+
172  const Vector2f& getPosition() const;
+
173 
+
184  float getRotation() const;
+
185 
+
194  const Vector2f& getScale() const;
+
195 
+
204  const Vector2f& getOrigin() const;
+
205 
+
223  void move(float offsetX, float offsetY);
+
224 
+
240  void move(const Vector2f& offset);
+
241 
+
255  void rotate(float angle);
+
256 
+
274  void scale(float factorX, float factorY);
+
275 
+
292  void scale(const Vector2f& factor);
+
293 
+
302  const Transform& getTransform() const;
+
303 
+
312  const Transform& getInverseTransform() const;
+
313 
+
314 private :
+
315 
+
317  // Member data
+
319  Vector2f m_origin;
+
320  Vector2f m_position;
+
321  float m_rotation;
+
322  Vector2f m_scale;
+
323  mutable Transform m_transform;
+
324  mutable bool m_transformNeedUpdate;
+
325  mutable Transform m_inverseTransform;
+
326  mutable bool m_inverseTransformNeedUpdate;
+
327 };
+
328 
+
329 } // namespace sf
+
330 
+
331 
+
332 #endif // SFML_TRANSFORMABLE_HPP
+
333 
+
334 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/UdpSocket_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/UdpSocket_8hpp_source.htm new file mode 100644 index 0000000..5e88e39 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/UdpSocket_8hpp_source.htm @@ -0,0 +1,123 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
UdpSocket.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_UDPSOCKET_HPP
+
26 #define SFML_UDPSOCKET_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Network/Export.hpp>
+
32 #include <SFML/Network/Socket.hpp>
+
33 #include <vector>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
38 class IpAddress;
+
39 class Packet;
+
40 
+
45 class SFML_NETWORK_API UdpSocket : public Socket
+
46 {
+
47 public :
+
48 
+
50  // Constants
+
52  enum
+
53  {
+
54  MaxDatagramSize = 65507
+
55  };
+
56 
+
61  UdpSocket();
+
62 
+
74  unsigned short getLocalPort() const;
+
75 
+
92  Status bind(unsigned short port);
+
93 
+
104  void unbind();
+
105 
+
123  Status send(const void* data, std::size_t size, const IpAddress& remoteAddress, unsigned short remotePort);
+
124 
+
146  Status receive(void* data, std::size_t size, std::size_t& received, IpAddress& remoteAddress, unsigned short& remotePort);
+
147 
+
164  Status send(Packet& packet, const IpAddress& remoteAddress, unsigned short remotePort);
+
165 
+
181  Status receive(Packet& packet, IpAddress& remoteAddress, unsigned short& remotePort);
+
182 
+
183 private:
+
184 
+
186  // Member data
+
188  std::vector<char> m_buffer;
+
189 };
+
190 
+
191 } // namespace sf
+
192 
+
193 
+
194 #endif // SFML_UDPSOCKET_HPP
+
195 
+
196 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Utf_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Utf_8hpp_source.htm new file mode 100644 index 0000000..72722ed --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Utf_8hpp_source.htm @@ -0,0 +1,247 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Utf.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_UTF_HPP
+
26 #define SFML_UTF_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 #include <algorithm>
+
33 #include <locale>
+
34 #include <string>
+
35 #include <cstdlib>
+
36 
+
37 
+
38 namespace sf
+
39 {
+
40 template <unsigned int N>
+
41 class Utf;
+
42 
+
47 template <>
+
48 class Utf<8>
+
49 {
+
50 public :
+
51 
+
66  template <typename In>
+
67  static In decode(In begin, In end, Uint32& output, Uint32 replacement = 0);
+
68 
+
82  template <typename Out>
+
83  static Out encode(Uint32 input, Out output, Uint8 replacement = 0);
+
84 
+
97  template <typename In>
+
98  static In next(In begin, In end);
+
99 
+
113  template <typename In>
+
114  static std::size_t count(In begin, In end);
+
115 
+
130  template <typename In, typename Out>
+
131  static Out fromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale());
+
132 
+
143  template <typename In, typename Out>
+
144  static Out fromWide(In begin, In end, Out output);
+
145 
+
156  template <typename In, typename Out>
+
157  static Out fromLatin1(In begin, In end, Out output);
+
158 
+
174  template <typename In, typename Out>
+
175  static Out toAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale());
+
176 
+
188  template <typename In, typename Out>
+
189  static Out toWide(In begin, In end, Out output, wchar_t replacement = 0);
+
190 
+
202  template <typename In, typename Out>
+
203  static Out toLatin1(In begin, In end, Out output, char replacement = 0);
+
204 
+
220  template <typename In, typename Out>
+
221  static Out toUtf8(In begin, In end, Out output);
+
222 
+
233  template <typename In, typename Out>
+
234  static Out toUtf16(In begin, In end, Out output);
+
235 
+
246  template <typename In, typename Out>
+
247  static Out toUtf32(In begin, In end, Out output);
+
248 };
+
249 
+
254 template <>
+
255 class Utf<16>
+
256 {
+
257 public :
+
258 
+
273  template <typename In>
+
274  static In decode(In begin, In end, Uint32& output, Uint32 replacement = 0);
+
275 
+
289  template <typename Out>
+
290  static Out encode(Uint32 input, Out output, Uint16 replacement = 0);
+
291 
+
304  template <typename In>
+
305  static In next(In begin, In end);
+
306 
+
320  template <typename In>
+
321  static std::size_t count(In begin, In end);
+
322 
+
337  template <typename In, typename Out>
+
338  static Out fromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale());
+
339 
+
350  template <typename In, typename Out>
+
351  static Out fromWide(In begin, In end, Out output);
+
352 
+
363  template <typename In, typename Out>
+
364  static Out fromLatin1(In begin, In end, Out output);
+
365 
+
381  template <typename In, typename Out>
+
382  static Out toAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale());
+
383 
+
395  template <typename In, typename Out>
+
396  static Out toWide(In begin, In end, Out output, wchar_t replacement = 0);
+
397 
+
409  template <typename In, typename Out>
+
410  static Out toLatin1(In begin, In end, Out output, char replacement = 0);
+
411 
+
422  template <typename In, typename Out>
+
423  static Out toUtf8(In begin, In end, Out output);
+
424 
+
440  template <typename In, typename Out>
+
441  static Out toUtf16(In begin, In end, Out output);
+
442 
+
453  template <typename In, typename Out>
+
454  static Out toUtf32(In begin, In end, Out output);
+
455 };
+
456 
+
461 template <>
+
462 class Utf<32>
+
463 {
+
464 public :
+
465 
+
481  template <typename In>
+
482  static In decode(In begin, In end, Uint32& output, Uint32 replacement = 0);
+
483 
+
498  template <typename Out>
+
499  static Out encode(Uint32 input, Out output, Uint32 replacement = 0);
+
500 
+
513  template <typename In>
+
514  static In next(In begin, In end);
+
515 
+
528  template <typename In>
+
529  static std::size_t count(In begin, In end);
+
530 
+
545  template <typename In, typename Out>
+
546  static Out fromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale());
+
547 
+
558  template <typename In, typename Out>
+
559  static Out fromWide(In begin, In end, Out output);
+
560 
+
571  template <typename In, typename Out>
+
572  static Out fromLatin1(In begin, In end, Out output);
+
573 
+
589  template <typename In, typename Out>
+
590  static Out toAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale());
+
591 
+
603  template <typename In, typename Out>
+
604  static Out toWide(In begin, In end, Out output, wchar_t replacement = 0);
+
605 
+
617  template <typename In, typename Out>
+
618  static Out toLatin1(In begin, In end, Out output, char replacement = 0);
+
619 
+
630  template <typename In, typename Out>
+
631  static Out toUtf8(In begin, In end, Out output);
+
632 
+
643  template <typename In, typename Out>
+
644  static Out toUtf16(In begin, In end, Out output);
+
645 
+
661  template <typename In, typename Out>
+
662  static Out toUtf32(In begin, In end, Out output);
+
663 
+
677  template <typename In>
+
678  static Uint32 decodeAnsi(In input, const std::locale& locale = std::locale());
+
679 
+
692  template <typename In>
+
693  static Uint32 decodeWide(In input);
+
694 
+
710  template <typename Out>
+
711  static Out encodeAnsi(Uint32 codepoint, Out output, char replacement = 0, const std::locale& locale = std::locale());
+
712 
+
727  template <typename Out>
+
728  static Out encodeWide(Uint32 codepoint, Out output, wchar_t replacement = 0);
+
729 };
+
730 
+
731 #include <SFML/System/Utf.inl>
+
732 
+
733 // Make typedefs to get rid of the template syntax
+
734 typedef Utf<8> Utf8;
+
735 typedef Utf<16> Utf16;
+
736 typedef Utf<32> Utf32;
+
737 
+
738 } // namespace sf
+
739 
+
740 
+
741 #endif // SFML_UTF_HPP
+
742 
+
743 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Utf_8inl_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Utf_8inl_source.htm new file mode 100644 index 0000000..2d455a5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Utf_8inl_source.htm @@ -0,0 +1,754 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Utf.inl
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 
+
27 // References :
+
28 //
+
29 // http://www.unicode.org/
+
30 // http://www.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.c
+
31 // http://www.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.h
+
32 // http://people.w3.org/rishida/scripts/uniview/conversion
+
33 //
+
35 
+
36 
+
38 template <typename In>
+
39 In Utf<8>::decode(In begin, In end, Uint32& output, Uint32 replacement)
+
40 {
+
41  // Some useful precomputed data
+
42  static const int trailing[256] =
+
43  {
+
44  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
45  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
46  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
47  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
48  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
49  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
50  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
51  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5
+
52  };
+
53  static const Uint32 offsets[6] =
+
54  {
+
55  0x00000000, 0x00003080, 0x000E2080, 0x03C82080, 0xFA082080, 0x82082080
+
56  };
+
57 
+
58  // decode the character
+
59  int trailingBytes = trailing[static_cast<Uint8>(*begin)];
+
60  if (begin + trailingBytes < end)
+
61  {
+
62  output = 0;
+
63  switch (trailingBytes)
+
64  {
+
65  case 5 : output += static_cast<Uint8>(*begin++); output <<= 6;
+
66  case 4 : output += static_cast<Uint8>(*begin++); output <<= 6;
+
67  case 3 : output += static_cast<Uint8>(*begin++); output <<= 6;
+
68  case 2 : output += static_cast<Uint8>(*begin++); output <<= 6;
+
69  case 1 : output += static_cast<Uint8>(*begin++); output <<= 6;
+
70  case 0 : output += static_cast<Uint8>(*begin++);
+
71  }
+
72  output -= offsets[trailingBytes];
+
73  }
+
74  else
+
75  {
+
76  // Incomplete character
+
77  begin = end;
+
78  output = replacement;
+
79  }
+
80 
+
81  return begin;
+
82 }
+
83 
+
84 
+
86 template <typename Out>
+
87 Out Utf<8>::encode(Uint32 input, Out output, Uint8 replacement)
+
88 {
+
89  // Some useful precomputed data
+
90  static const Uint8 firstBytes[7] =
+
91  {
+
92  0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC
+
93  };
+
94 
+
95  // encode the character
+
96  if ((input > 0x0010FFFF) || ((input >= 0xD800) && (input <= 0xDBFF)))
+
97  {
+
98  // Invalid character
+
99  if (replacement)
+
100  *output++ = replacement;
+
101  }
+
102  else
+
103  {
+
104  // Valid character
+
105 
+
106  // Get the number of bytes to write
+
107  std::size_t bytestoWrite = 1;
+
108  if (input < 0x80) bytestoWrite = 1;
+
109  else if (input < 0x800) bytestoWrite = 2;
+
110  else if (input < 0x10000) bytestoWrite = 3;
+
111  else if (input <= 0x0010FFFF) bytestoWrite = 4;
+
112 
+
113  // Extract the bytes to write
+
114  Uint8 bytes[4];
+
115  switch (bytestoWrite)
+
116  {
+
117  case 4 : bytes[3] = static_cast<Uint8>((input | 0x80) & 0xBF); input >>= 6;
+
118  case 3 : bytes[2] = static_cast<Uint8>((input | 0x80) & 0xBF); input >>= 6;
+
119  case 2 : bytes[1] = static_cast<Uint8>((input | 0x80) & 0xBF); input >>= 6;
+
120  case 1 : bytes[0] = static_cast<Uint8> (input | firstBytes[bytestoWrite]);
+
121  }
+
122 
+
123  // Add them to the output
+
124  output = std::copy(bytes, bytes + bytestoWrite, output);
+
125  }
+
126 
+
127  return output;
+
128 }
+
129 
+
130 
+
132 template <typename In>
+
133 In Utf<8>::next(In begin, In end)
+
134 {
+
135  Uint32 codepoint;
+
136  return decode(begin, end, codepoint);
+
137 }
+
138 
+
139 
+
141 template <typename In>
+
142 std::size_t Utf<8>::count(In begin, In end)
+
143 {
+
144  std::size_t length = 0;
+
145  while (begin < end)
+
146  {
+
147  begin = next(begin, end);
+
148  ++length;
+
149  }
+
150 
+
151  return length;
+
152 }
+
153 
+
154 
+
156 template <typename In, typename Out>
+
157 Out Utf<8>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
+
158 {
+
159  while (begin < end)
+
160  {
+
161  Uint32 codepoint = Utf<32>::decodeAnsi(*begin++, locale);
+
162  output = encode(codepoint, output);
+
163  }
+
164 
+
165  return output;
+
166 }
+
167 
+
168 
+
170 template <typename In, typename Out>
+
171 Out Utf<8>::fromWide(In begin, In end, Out output)
+
172 {
+
173  while (begin < end)
+
174  {
+
175  Uint32 codepoint = Utf<32>::decodeWide(*begin++);
+
176  output = encode(codepoint, output);
+
177  }
+
178 
+
179  return output;
+
180 }
+
181 
+
182 
+
184 template <typename In, typename Out>
+
185 Out Utf<8>::fromLatin1(In begin, In end, Out output)
+
186 {
+
187  // Latin-1 is directly compatible with Unicode encodings,
+
188  // and can thus be treated as (a sub-range of) UTF-32
+
189  while (begin < end)
+
190  output = encode(*begin++, output);
+
191 
+
192  return output;
+
193 }
+
194 
+
195 
+
197 template <typename In, typename Out>
+
198 Out Utf<8>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
+
199 {
+
200  while (begin < end)
+
201  {
+
202  Uint32 codepoint;
+
203  begin = decode(begin, end, codepoint);
+
204  output = Utf<32>::encodeAnsi(codepoint, output, replacement, locale);
+
205  }
+
206 
+
207  return output;
+
208 }
+
209 
+
210 
+
212 template <typename In, typename Out>
+
213 Out Utf<8>::toWide(In begin, In end, Out output, wchar_t replacement)
+
214 {
+
215  while (begin < end)
+
216  {
+
217  Uint32 codepoint;
+
218  begin = decode(begin, end, codepoint);
+
219  output = Utf<32>::encodeWide(codepoint, output, replacement);
+
220  }
+
221 
+
222  return output;
+
223 }
+
224 
+
225 
+
227 template <typename In, typename Out>
+
228 Out Utf<8>::toLatin1(In begin, In end, Out output, char replacement)
+
229 {
+
230  // Latin-1 is directly compatible with Unicode encodings,
+
231  // and can thus be treated as (a sub-range of) UTF-32
+
232  while (begin < end)
+
233  {
+
234  Uint32 codepoint;
+
235  begin = decode(begin, end, codepoint);
+
236  *output++ = codepoint < 256 ? static_cast<char>(codepoint) : replacement;
+
237  }
+
238 
+
239  return output;
+
240 }
+
241 
+
242 
+
244 template <typename In, typename Out>
+
245 Out Utf<8>::toUtf8(In begin, In end, Out output)
+
246 {
+
247  return std::copy(begin, end, output);
+
248 }
+
249 
+
250 
+
252 template <typename In, typename Out>
+
253 Out Utf<8>::toUtf16(In begin, In end, Out output)
+
254 {
+
255  while (begin < end)
+
256  {
+
257  Uint32 codepoint;
+
258  begin = decode(begin, end, codepoint);
+
259  output = Utf<16>::encode(codepoint, output);
+
260  }
+
261 
+
262  return output;
+
263 }
+
264 
+
265 
+
267 template <typename In, typename Out>
+
268 Out Utf<8>::toUtf32(In begin, In end, Out output)
+
269 {
+
270  while (begin < end)
+
271  {
+
272  Uint32 codepoint;
+
273  begin = decode(begin, end, codepoint);
+
274  *output++ = codepoint;
+
275  }
+
276 
+
277  return output;
+
278 }
+
279 
+
280 
+
282 template <typename In>
+
283 In Utf<16>::decode(In begin, In end, Uint32& output, Uint32 replacement)
+
284 {
+
285  Uint16 first = *begin++;
+
286 
+
287  // If it's a surrogate pair, first convert to a single UTF-32 character
+
288  if ((first >= 0xD800) && (first <= 0xDBFF))
+
289  {
+
290  if (begin < end)
+
291  {
+
292  Uint32 second = *begin++;
+
293  if ((second >= 0xDC00) && (second <= 0xDFFF))
+
294  {
+
295  // The second element is valid: convert the two elements to a UTF-32 character
+
296  output = static_cast<Uint32>(((first - 0xD800) << 10) + (second - 0xDC00) + 0x0010000);
+
297  }
+
298  else
+
299  {
+
300  // Invalid character
+
301  output = replacement;
+
302  }
+
303  }
+
304  else
+
305  {
+
306  // Invalid character
+
307  begin = end;
+
308  output = replacement;
+
309  }
+
310  }
+
311  else
+
312  {
+
313  // We can make a direct copy
+
314  output = first;
+
315  }
+
316 
+
317  return begin;
+
318 }
+
319 
+
320 
+
322 template <typename Out>
+
323 Out Utf<16>::encode(Uint32 input, Out output, Uint16 replacement)
+
324 {
+
325  if (input < 0xFFFF)
+
326  {
+
327  // The character can be copied directly, we just need to check if it's in the valid range
+
328  if ((input >= 0xD800) && (input <= 0xDFFF))
+
329  {
+
330  // Invalid character (this range is reserved)
+
331  if (replacement)
+
332  *output++ = replacement;
+
333  }
+
334  else
+
335  {
+
336  // Valid character directly convertible to a single UTF-16 character
+
337  *output++ = static_cast<Uint16>(input);
+
338  }
+
339  }
+
340  else if (input > 0x0010FFFF)
+
341  {
+
342  // Invalid character (greater than the maximum unicode value)
+
343  if (replacement)
+
344  *output++ = replacement;
+
345  }
+
346  else
+
347  {
+
348  // The input character will be converted to two UTF-16 elements
+
349  input -= 0x0010000;
+
350  *output++ = static_cast<Uint16>((input >> 10) + 0xD800);
+
351  *output++ = static_cast<Uint16>((input & 0x3FFUL) + 0xDC00);
+
352  }
+
353 
+
354  return output;
+
355 }
+
356 
+
357 
+
359 template <typename In>
+
360 In Utf<16>::next(In begin, In end)
+
361 {
+
362  Uint32 codepoint;
+
363  return decode(begin, end, codepoint);
+
364 }
+
365 
+
366 
+
368 template <typename In>
+
369 std::size_t Utf<16>::count(In begin, In end)
+
370 {
+
371  std::size_t length = 0;
+
372  while (begin < end)
+
373  {
+
374  begin = next(begin, end);
+
375  ++length;
+
376  }
+
377 
+
378  return length;
+
379 }
+
380 
+
381 
+
383 template <typename In, typename Out>
+
384 Out Utf<16>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
+
385 {
+
386  while (begin < end)
+
387  {
+
388  Uint32 codepoint = Utf<32>::decodeAnsi(*begin++, locale);
+
389  output = encode(codepoint, output);
+
390  }
+
391 
+
392  return output;
+
393 }
+
394 
+
395 
+
397 template <typename In, typename Out>
+
398 Out Utf<16>::fromWide(In begin, In end, Out output)
+
399 {
+
400  while (begin < end)
+
401  {
+
402  Uint32 codepoint = Utf<32>::decodeWide(*begin++);
+
403  output = encode(codepoint, output);
+
404  }
+
405 
+
406  return output;
+
407 }
+
408 
+
409 
+
411 template <typename In, typename Out>
+
412 Out Utf<16>::fromLatin1(In begin, In end, Out output)
+
413 {
+
414  // Latin-1 is directly compatible with Unicode encodings,
+
415  // and can thus be treated as (a sub-range of) UTF-32
+
416  return std::copy(begin, end, output);
+
417 }
+
418 
+
419 
+
421 template <typename In, typename Out>
+
422 Out Utf<16>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
+
423 {
+
424  while (begin < end)
+
425  {
+
426  Uint32 codepoint;
+
427  begin = decode(begin, end, codepoint);
+
428  output = Utf<32>::encodeAnsi(codepoint, output, replacement, locale);
+
429  }
+
430 
+
431  return output;
+
432 }
+
433 
+
434 
+
436 template <typename In, typename Out>
+
437 Out Utf<16>::toWide(In begin, In end, Out output, wchar_t replacement)
+
438 {
+
439  while (begin < end)
+
440  {
+
441  Uint32 codepoint;
+
442  begin = decode(begin, end, codepoint);
+
443  output = Utf<32>::encodeWide(codepoint, output, replacement);
+
444  }
+
445 
+
446  return output;
+
447 }
+
448 
+
449 
+
451 template <typename In, typename Out>
+
452 Out Utf<16>::toLatin1(In begin, In end, Out output, char replacement)
+
453 {
+
454  // Latin-1 is directly compatible with Unicode encodings,
+
455  // and can thus be treated as (a sub-range of) UTF-32
+
456  while (begin < end)
+
457  {
+
458  *output++ = *begin < 256 ? static_cast<char>(*begin) : replacement;
+
459  begin++;
+
460  }
+
461 
+
462  return output;
+
463 }
+
464 
+
465 
+
467 template <typename In, typename Out>
+
468 Out Utf<16>::toUtf8(In begin, In end, Out output)
+
469 {
+
470  while (begin < end)
+
471  {
+
472  Uint32 codepoint;
+
473  begin = decode(begin, end, codepoint);
+
474  output = Utf<8>::encode(codepoint, output);
+
475  }
+
476 
+
477  return output;
+
478 }
+
479 
+
480 
+
482 template <typename In, typename Out>
+
483 Out Utf<16>::toUtf16(In begin, In end, Out output)
+
484 {
+
485  return std::copy(begin, end, output);
+
486 }
+
487 
+
488 
+
490 template <typename In, typename Out>
+
491 Out Utf<16>::toUtf32(In begin, In end, Out output)
+
492 {
+
493  while (begin < end)
+
494  {
+
495  Uint32 codepoint;
+
496  begin = decode(begin, end, codepoint);
+
497  *output++ = codepoint;
+
498  }
+
499 
+
500  return output;
+
501 }
+
502 
+
503 
+
505 template <typename In>
+
506 In Utf<32>::decode(In begin, In /*end*/, Uint32& output, Uint32 /*replacement*/)
+
507 {
+
508  output = *begin++;
+
509  return begin;
+
510 }
+
511 
+
512 
+
514 template <typename Out>
+
515 Out Utf<32>::encode(Uint32 input, Out output, Uint32 /*replacement*/)
+
516 {
+
517  *output++ = input;
+
518  return output;
+
519 }
+
520 
+
521 
+
523 template <typename In>
+
524 In Utf<32>::next(In begin, In /*end*/)
+
525 {
+
526  return ++begin;
+
527 }
+
528 
+
529 
+
531 template <typename In>
+
532 std::size_t Utf<32>::count(In begin, In end)
+
533 {
+
534  return begin - end;
+
535 }
+
536 
+
537 
+
539 template <typename In, typename Out>
+
540 Out Utf<32>::fromAnsi(In begin, In end, Out output, const std::locale& locale)
+
541 {
+
542  while (begin < end)
+
543  *output++ = decodeAnsi(*begin++, locale);
+
544 
+
545  return output;
+
546 }
+
547 
+
548 
+
550 template <typename In, typename Out>
+
551 Out Utf<32>::fromWide(In begin, In end, Out output)
+
552 {
+
553  while (begin < end)
+
554  *output++ = decodeWide(*begin++);
+
555 
+
556  return output;
+
557 }
+
558 
+
559 
+
561 template <typename In, typename Out>
+
562 Out Utf<32>::fromLatin1(In begin, In end, Out output)
+
563 {
+
564  // Latin-1 is directly compatible with Unicode encodings,
+
565  // and can thus be treated as (a sub-range of) UTF-32
+
566  return std::copy(begin, end, output);
+
567 }
+
568 
+
569 
+
571 template <typename In, typename Out>
+
572 Out Utf<32>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale)
+
573 {
+
574  while (begin < end)
+
575  output = encodeAnsi(*begin++, output, replacement, locale);
+
576 
+
577  return output;
+
578 }
+
579 
+
580 
+
582 template <typename In, typename Out>
+
583 Out Utf<32>::toWide(In begin, In end, Out output, wchar_t replacement)
+
584 {
+
585  while (begin < end)
+
586  output = encodeWide(*begin++, output, replacement);
+
587 
+
588  return output;
+
589 }
+
590 
+
591 
+
593 template <typename In, typename Out>
+
594 Out Utf<32>::toLatin1(In begin, In end, Out output, char replacement)
+
595 {
+
596  // Latin-1 is directly compatible with Unicode encodings,
+
597  // and can thus be treated as (a sub-range of) UTF-32
+
598  while (begin < end)
+
599  {
+
600  *output++ = *begin < 256 ? static_cast<char>(*begin) : replacement;
+
601  begin++;
+
602  }
+
603 
+
604  return output;
+
605 }
+
606 
+
607 
+
609 template <typename In, typename Out>
+
610 Out Utf<32>::toUtf8(In begin, In end, Out output)
+
611 {
+
612  while (begin < end)
+
613  output = Utf<8>::encode(*begin++, output);
+
614 
+
615  return output;
+
616 }
+
617 
+
619 template <typename In, typename Out>
+
620 Out Utf<32>::toUtf16(In begin, In end, Out output)
+
621 {
+
622  while (begin < end)
+
623  output = Utf<16>::encode(*begin++, output);
+
624 
+
625  return output;
+
626 }
+
627 
+
628 
+
630 template <typename In, typename Out>
+
631 Out Utf<32>::toUtf32(In begin, In end, Out output)
+
632 {
+
633  return std::copy(begin, end, output);
+
634 }
+
635 
+
636 
+
638 template <typename In>
+
639 Uint32 Utf<32>::decodeAnsi(In input, const std::locale& locale)
+
640 {
+
641  // On Windows, gcc's standard library (glibc++) has almost
+
642  // no support for Unicode stuff. As a consequence, in this
+
643  // context we can only use the default locale and ignore
+
644  // the one passed as parameter.
+
645 
+
646  #if defined(SFML_SYSTEM_WINDOWS) && /* if Windows ... */ \
+
647  (defined(__GLIBCPP__) || defined (__GLIBCXX__)) && /* ... and standard library is glibc++ ... */ \
+
648  !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) /* ... and STLPort is not used on top of it */
+
649 
+
650  (void)locale; // to avoid warnings
+
651 
+
652  wchar_t character = 0;
+
653  mbtowc(&character, &input, 1);
+
654  return static_cast<Uint32>(character);
+
655 
+
656  #else
+
657 
+
658  // Get the facet of the locale which deals with character conversion
+
659  const std::ctype<wchar_t>& facet = std::use_facet< std::ctype<wchar_t> >(locale);
+
660 
+
661  // Use the facet to convert each character of the input string
+
662  return static_cast<Uint32>(facet.widen(input));
+
663 
+
664  #endif
+
665 }
+
666 
+
667 
+
669 template <typename In>
+
670 Uint32 Utf<32>::decodeWide(In input)
+
671 {
+
672  // The encoding of wide characters is not well defined and is left to the system;
+
673  // however we can safely assume that it is UCS-2 on Windows and
+
674  // UCS-4 on Unix systems.
+
675  // In both cases, a simple copy is enough (UCS-2 is a subset of UCS-4,
+
676  // and UCS-4 *is* UTF-32).
+
677 
+
678  return input;
+
679 }
+
680 
+
681 
+
683 template <typename Out>
+
684 Out Utf<32>::encodeAnsi(Uint32 codepoint, Out output, char replacement, const std::locale& locale)
+
685 {
+
686  // On Windows, gcc's standard library (glibc++) has almost
+
687  // no support for Unicode stuff. As a consequence, in this
+
688  // context we can only use the default locale and ignore
+
689  // the one passed as parameter.
+
690 
+
691  #if defined(SFML_SYSTEM_WINDOWS) && /* if Windows ... */ \
+
692  (defined(__GLIBCPP__) || defined (__GLIBCXX__)) && /* ... and standard library is glibc++ ... */ \
+
693  !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) /* ... and STLPort is not used on top of it */
+
694 
+
695  (void)locale; // to avoid warnings
+
696 
+
697  char character = 0;
+
698  if (wctomb(&character, static_cast<wchar_t>(codepoint)) >= 0)
+
699  *output++ = character;
+
700  else if (replacement)
+
701  *output++ = replacement;
+
702 
+
703  return output;
+
704 
+
705  #else
+
706 
+
707  // Get the facet of the locale which deals with character conversion
+
708  const std::ctype<wchar_t>& facet = std::use_facet< std::ctype<wchar_t> >(locale);
+
709 
+
710  // Use the facet to convert each character of the input string
+
711  *output++ = facet.narrow(static_cast<wchar_t>(codepoint), replacement);
+
712 
+
713  return output;
+
714 
+
715  #endif
+
716 }
+
717 
+
718 
+
720 template <typename Out>
+
721 Out Utf<32>::encodeWide(Uint32 codepoint, Out output, wchar_t replacement)
+
722 {
+
723  // The encoding of wide characters is not well defined and is left to the system;
+
724  // however we can safely assume that it is UCS-2 on Windows and
+
725  // UCS-4 on Unix systems.
+
726  // For UCS-2 we need to check if the source characters fits in (UCS-2 is a subset of UCS-4).
+
727  // For UCS-4 we can do a direct copy (UCS-4 *is* UTF-32).
+
728 
+
729  switch (sizeof(wchar_t))
+
730  {
+
731  case 4:
+
732  {
+
733  *output++ = static_cast<wchar_t>(codepoint);
+
734  break;
+
735  }
+
736 
+
737  default:
+
738  {
+
739  if ((codepoint <= 0xFFFF) && ((codepoint < 0xD800) || (codepoint > 0xDFFF)))
+
740  {
+
741  *output++ = static_cast<wchar_t>(codepoint);
+
742  }
+
743  else if (replacement)
+
744  {
+
745  *output++ = replacement;
+
746  }
+
747  break;
+
748  }
+
749  }
+
750 
+
751  return output;
+
752 }
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Vector2_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Vector2_8hpp_source.htm new file mode 100644 index 0000000..c2690aa --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Vector2_8hpp_source.htm @@ -0,0 +1,143 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Vector2.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_VECTOR2_HPP
+
26 #define SFML_VECTOR2_HPP
+
27 
+
28 
+
29 namespace sf
+
30 {
+
36 template <typename T>
+
37 class Vector2
+
38 {
+
39 public :
+
40 
+
47  Vector2();
+
48 
+
56  Vector2(T X, T Y);
+
57 
+
69  template <typename U>
+
70  explicit Vector2(const Vector2<U>& vector);
+
71 
+
73  // Member data
+
75  T x;
+
76  T y;
+
77 };
+
78 
+
88 template <typename T>
+
89 Vector2<T> operator -(const Vector2<T>& right);
+
90 
+
104 template <typename T>
+
105 Vector2<T>& operator +=(Vector2<T>& left, const Vector2<T>& right);
+
106 
+
120 template <typename T>
+
121 Vector2<T>& operator -=(Vector2<T>& left, const Vector2<T>& right);
+
122 
+
133 template <typename T>
+
134 Vector2<T> operator +(const Vector2<T>& left, const Vector2<T>& right);
+
135 
+
146 template <typename T>
+
147 Vector2<T> operator -(const Vector2<T>& left, const Vector2<T>& right);
+
148 
+
159 template <typename T>
+
160 Vector2<T> operator *(const Vector2<T>& left, T right);
+
161 
+
172 template <typename T>
+
173 Vector2<T> operator *(T left, const Vector2<T>& right);
+
174 
+
188 template <typename T>
+
189 Vector2<T>& operator *=(Vector2<T>& left, T right);
+
190 
+
201 template <typename T>
+
202 Vector2<T> operator /(const Vector2<T>& left, T right);
+
203 
+
217 template <typename T>
+
218 Vector2<T>& operator /=(Vector2<T>& left, T right);
+
219 
+
232 template <typename T>
+
233 bool operator ==(const Vector2<T>& left, const Vector2<T>& right);
+
234 
+
247 template <typename T>
+
248 bool operator !=(const Vector2<T>& left, const Vector2<T>& right);
+
249 
+
250 #include <SFML/System/Vector2.inl>
+
251 
+
252 // Define the most common types
+
253 typedef Vector2<int> Vector2i;
+ +
255 typedef Vector2<float> Vector2f;
+
256 
+
257 } // namespace sf
+
258 
+
259 
+
260 #endif // SFML_VECTOR2_HPP
+
261 
+
262 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Vector2_8inl_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Vector2_8inl_source.htm new file mode 100644 index 0000000..33ea8c4 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Vector2_8inl_source.htm @@ -0,0 +1,193 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Vector2.inl
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 
+
27 template <typename T>
+
28 inline Vector2<T>::Vector2() :
+
29 x(0),
+
30 y(0)
+
31 {
+
32 
+
33 }
+
34 
+
35 
+
37 template <typename T>
+
38 inline Vector2<T>::Vector2(T X, T Y) :
+
39 x(X),
+
40 y(Y)
+
41 {
+
42 
+
43 }
+
44 
+
45 
+
47 template <typename T>
+
48 template <typename U>
+
49 inline Vector2<T>::Vector2(const Vector2<U>& vector) :
+
50 x(static_cast<T>(vector.x)),
+
51 y(static_cast<T>(vector.y))
+
52 {
+
53 }
+
54 
+
55 
+
57 template <typename T>
+
58 inline Vector2<T> operator -(const Vector2<T>& right)
+
59 {
+
60  return Vector2<T>(-right.x, -right.y);
+
61 }
+
62 
+
63 
+
65 template <typename T>
+
66 inline Vector2<T>& operator +=(Vector2<T>& left, const Vector2<T>& right)
+
67 {
+
68  left.x += right.x;
+
69  left.y += right.y;
+
70 
+
71  return left;
+
72 }
+
73 
+
74 
+
76 template <typename T>
+
77 inline Vector2<T>& operator -=(Vector2<T>& left, const Vector2<T>& right)
+
78 {
+
79  left.x -= right.x;
+
80  left.y -= right.y;
+
81 
+
82  return left;
+
83 }
+
84 
+
85 
+
87 template <typename T>
+
88 inline Vector2<T> operator +(const Vector2<T>& left, const Vector2<T>& right)
+
89 {
+
90  return Vector2<T>(left.x + right.x, left.y + right.y);
+
91 }
+
92 
+
93 
+
95 template <typename T>
+
96 inline Vector2<T> operator -(const Vector2<T>& left, const Vector2<T>& right)
+
97 {
+
98  return Vector2<T>(left.x - right.x, left.y - right.y);
+
99 }
+
100 
+
101 
+
103 template <typename T>
+
104 inline Vector2<T> operator *(const Vector2<T>& left, T right)
+
105 {
+
106  return Vector2<T>(left.x * right, left.y * right);
+
107 }
+
108 
+
109 
+
111 template <typename T>
+
112 inline Vector2<T> operator *(T left, const Vector2<T>& right)
+
113 {
+
114  return Vector2<T>(right.x * left, right.y * left);
+
115 }
+
116 
+
117 
+
119 template <typename T>
+
120 inline Vector2<T>& operator *=(Vector2<T>& left, T right)
+
121 {
+
122  left.x *= right;
+
123  left.y *= right;
+
124 
+
125  return left;
+
126 }
+
127 
+
128 
+
130 template <typename T>
+
131 inline Vector2<T> operator /(const Vector2<T>& left, T right)
+
132 {
+
133  return Vector2<T>(left.x / right, left.y / right);
+
134 }
+
135 
+
136 
+
138 template <typename T>
+
139 inline Vector2<T>& operator /=(Vector2<T>& left, T right)
+
140 {
+
141  left.x /= right;
+
142  left.y /= right;
+
143 
+
144  return left;
+
145 }
+
146 
+
147 
+
149 template <typename T>
+
150 inline bool operator ==(const Vector2<T>& left, const Vector2<T>& right)
+
151 {
+
152  return (left.x == right.x) && (left.y == right.y);
+
153 }
+
154 
+
155 
+
157 template <typename T>
+
158 inline bool operator !=(const Vector2<T>& left, const Vector2<T>& right)
+
159 {
+
160  return (left.x != right.x) || (left.y != right.y);
+
161 }
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Vector3_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Vector3_8hpp_source.htm new file mode 100644 index 0000000..1231740 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Vector3_8hpp_source.htm @@ -0,0 +1,143 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Vector3.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_VECTOR3_HPP
+
26 #define SFML_VECTOR3_HPP
+
27 
+
28 
+
29 namespace sf
+
30 {
+
36 template <typename T>
+
37 class Vector3
+
38 {
+
39 public :
+
40 
+
47  Vector3();
+
48 
+
57  Vector3(T X, T Y, T Z);
+
58 
+
70  template <typename U>
+
71  explicit Vector3(const Vector3<U>& vector);
+
72 
+
74  // Member data
+
76  T x;
+
77  T y;
+
78  T z;
+
79 };
+
80 
+
90 template <typename T>
+
91 Vector3<T> operator -(const Vector3<T>& left);
+
92 
+
106 template <typename T>
+
107 Vector3<T>& operator +=(Vector3<T>& left, const Vector3<T>& right);
+
108 
+
122 template <typename T>
+
123 Vector3<T>& operator -=(Vector3<T>& left, const Vector3<T>& right);
+
124 
+
135 template <typename T>
+
136 Vector3<T> operator +(const Vector3<T>& left, const Vector3<T>& right);
+
137 
+
148 template <typename T>
+
149 Vector3<T> operator -(const Vector3<T>& left, const Vector3<T>& right);
+
150 
+
161 template <typename T>
+
162 Vector3<T> operator *(const Vector3<T>& left, T right);
+
163 
+
174 template <typename T>
+
175 Vector3<T> operator *(T left, const Vector3<T>& right);
+
176 
+
190 template <typename T>
+
191 Vector3<T>& operator *=(Vector3<T>& left, T right);
+
192 
+
203 template <typename T>
+
204 Vector3<T> operator /(const Vector3<T>& left, T right);
+
205 
+
219 template <typename T>
+
220 Vector3<T>& operator /=(Vector3<T>& left, T right);
+
221 
+
234 template <typename T>
+
235 bool operator ==(const Vector3<T>& left, const Vector3<T>& right);
+
236 
+
249 template <typename T>
+
250 bool operator !=(const Vector3<T>& left, const Vector3<T>& right);
+
251 
+
252 #include <SFML/System/Vector3.inl>
+
253 
+
254 // Define the most common types
+
255 typedef Vector3<int> Vector3i;
+
256 typedef Vector3<float> Vector3f;
+
257 
+
258 } // namespace sf
+
259 
+
260 
+
261 #endif // SFML_VECTOR3_HPP
+
262 
+
263 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Vector3_8inl_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Vector3_8inl_source.htm new file mode 100644 index 0000000..ef0a1c1 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Vector3_8inl_source.htm @@ -0,0 +1,200 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Vector3.inl
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 
+
27 template <typename T>
+
28 inline Vector3<T>::Vector3() :
+
29 x(0),
+
30 y(0),
+
31 z(0)
+
32 {
+
33 
+
34 }
+
35 
+
36 
+
38 template <typename T>
+
39 inline Vector3<T>::Vector3(T X, T Y, T Z) :
+
40 x(X),
+
41 y(Y),
+
42 z(Z)
+
43 {
+
44 
+
45 }
+
46 
+
47 
+
49 template <typename T>
+
50 template <typename U>
+
51 inline Vector3<T>::Vector3(const Vector3<U>& vector) :
+
52 x(static_cast<T>(vector.x)),
+
53 y(static_cast<T>(vector.y)),
+
54 z(static_cast<T>(vector.z))
+
55 {
+
56 }
+
57 
+
58 
+
60 template <typename T>
+
61 inline Vector3<T> operator -(const Vector3<T>& left)
+
62 {
+
63  return Vector3<T>(-left.x, -left.y, -left.z);
+
64 }
+
65 
+
66 
+
68 template <typename T>
+
69 inline Vector3<T>& operator +=(Vector3<T>& left, const Vector3<T>& right)
+
70 {
+
71  left.x += right.x;
+
72  left.y += right.y;
+
73  left.z += right.z;
+
74 
+
75  return left;
+
76 }
+
77 
+
78 
+
80 template <typename T>
+
81 inline Vector3<T>& operator -=(Vector3<T>& left, const Vector3<T>& right)
+
82 {
+
83  left.x -= right.x;
+
84  left.y -= right.y;
+
85  left.z -= right.z;
+
86 
+
87  return left;
+
88 }
+
89 
+
90 
+
92 template <typename T>
+
93 inline Vector3<T> operator +(const Vector3<T>& left, const Vector3<T>& right)
+
94 {
+
95  return Vector3<T>(left.x + right.x, left.y + right.y, left.z + right.z);
+
96 }
+
97 
+
98 
+
100 template <typename T>
+
101 inline Vector3<T> operator -(const Vector3<T>& left, const Vector3<T>& right)
+
102 {
+
103  return Vector3<T>(left.x - right.x, left.y - right.y, left.z - right.z);
+
104 }
+
105 
+
106 
+
108 template <typename T>
+
109 inline Vector3<T> operator *(const Vector3<T>& left, T right)
+
110 {
+
111  return Vector3<T>(left.x * right, left.y * right, left.z * right);
+
112 }
+
113 
+
114 
+
116 template <typename T>
+
117 inline Vector3<T> operator *(T left, const Vector3<T>& right)
+
118 {
+
119  return Vector3<T>(right.x * left, right.y * left, right.z * left);
+
120 }
+
121 
+
122 
+
124 template <typename T>
+
125 inline Vector3<T>& operator *=(Vector3<T>& left, T right)
+
126 {
+
127  left.x *= right;
+
128  left.y *= right;
+
129  left.z *= right;
+
130 
+
131  return left;
+
132 }
+
133 
+
134 
+
136 template <typename T>
+
137 inline Vector3<T> operator /(const Vector3<T>& left, T right)
+
138 {
+
139  return Vector3<T>(left.x / right, left.y / right, left.z / right);
+
140 }
+
141 
+
142 
+
144 template <typename T>
+
145 inline Vector3<T>& operator /=(Vector3<T>& left, T right)
+
146 {
+
147  left.x /= right;
+
148  left.y /= right;
+
149  left.z /= right;
+
150 
+
151  return left;
+
152 }
+
153 
+
154 
+
156 template <typename T>
+
157 inline bool operator ==(const Vector3<T>& left, const Vector3<T>& right)
+
158 {
+
159  return (left.x == right.x) && (left.y == right.y) && (left.z == right.z);
+
160 }
+
161 
+
162 
+
164 template <typename T>
+
165 inline bool operator !=(const Vector3<T>& left, const Vector3<T>& right)
+
166 {
+
167  return (left.x != right.x) || (left.y != right.y) || (left.z != right.z);
+
168 }
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/VertexArray_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/VertexArray_8hpp_source.htm new file mode 100644 index 0000000..1ffd346 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/VertexArray_8hpp_source.htm @@ -0,0 +1,128 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
VertexArray.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_VERTEXARRAY_HPP
+
26 #define SFML_VERTEXARRAY_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Vertex.hpp>
+
33 #include <SFML/Graphics/PrimitiveType.hpp>
+
34 #include <SFML/Graphics/Rect.hpp>
+
35 #include <SFML/Graphics/Drawable.hpp>
+
36 #include <vector>
+
37 
+
38 
+
39 namespace sf
+
40 {
+
45 class SFML_GRAPHICS_API VertexArray : public Drawable
+
46 {
+
47 public :
+
48 
+
55  VertexArray();
+
56 
+
64  explicit VertexArray(PrimitiveType type, unsigned int vertexCount = 0);
+
65 
+
72  unsigned int getVertexCount() const;
+
73 
+
88  Vertex& operator [](unsigned int index);
+
89 
+
104  const Vertex& operator [](unsigned int index) const;
+
105 
+
115  void clear();
+
116 
+
129  void resize(unsigned int vertexCount);
+
130 
+
137  void append(const Vertex& vertex);
+
138 
+
153  void setPrimitiveType(PrimitiveType type);
+
154 
+
161  PrimitiveType getPrimitiveType() const;
+
162 
+
172  FloatRect getBounds() const;
+
173 
+
174 private :
+
175 
+
183  virtual void draw(RenderTarget& target, RenderStates states) const;
+
184 
+
185 private:
+
186 
+
188  // Member data
+
190  std::vector<Vertex> m_vertices;
+
191  PrimitiveType m_primitiveType;
+
192 };
+
193 
+
194 } // namespace sf
+
195 
+
196 
+
197 #endif // SFML_VERTEXARRAY_HPP
+
198 
+
199 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Vertex_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Vertex_8hpp_source.htm new file mode 100644 index 0000000..0c7954a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Vertex_8hpp_source.htm @@ -0,0 +1,108 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Vertex.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_VERTEX_HPP
+
26 #define SFML_VERTEX_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Color.hpp>
+
33 #include <SFML/System/Vector2.hpp>
+
34 
+
35 
+
36 namespace sf
+
37 {
+
42 class SFML_GRAPHICS_API Vertex
+
43 {
+
44 public :
+
45 
+
50  Vertex();
+
51 
+
60  Vertex(const Vector2f& thePosition);
+
61 
+
71  Vertex(const Vector2f& thePosition, const Color& theColor);
+
72 
+
82  Vertex(const Vector2f& thePosition, const Vector2f& theTexCoords);
+
83 
+
92  Vertex(const Vector2f& thePosition, const Color& theColor, const Vector2f& theTexCoords);
+
93 
+
95  // Member data
+ + + +
100 };
+
101 
+
102 } // namespace sf
+
103 
+
104 
+
105 #endif // SFML_VERTEX_HPP
+
106 
+
107 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/VideoMode_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/VideoMode_8hpp_source.htm new file mode 100644 index 0000000..a6fa4a9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/VideoMode_8hpp_source.htm @@ -0,0 +1,119 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
VideoMode.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_VIDEOMODE_HPP
+
26 #define SFML_VIDEOMODE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Window/Export.hpp>
+
32 #include <vector>
+
33 
+
34 
+
35 namespace sf
+
36 {
+
41 class SFML_WINDOW_API VideoMode
+
42 {
+
43 public :
+
44 
+
51  VideoMode();
+
52 
+
61  VideoMode(unsigned int modeWidth, unsigned int modeHeight, unsigned int modeBitsPerPixel = 32);
+
62 
+
69  static VideoMode getDesktopMode();
+
70 
+
85  static const std::vector<VideoMode>& getFullscreenModes();
+
86 
+
97  bool isValid() const;
+
98 
+
100  // Member data
+
102  unsigned int width;
+
103  unsigned int height;
+
104  unsigned int bitsPerPixel;
+
105 };
+
106 
+
117 SFML_WINDOW_API bool operator ==(const VideoMode& left, const VideoMode& right);
+
118 
+
129 SFML_WINDOW_API bool operator !=(const VideoMode& left, const VideoMode& right);
+
130 
+
141 SFML_WINDOW_API bool operator <(const VideoMode& left, const VideoMode& right);
+
142 
+
153 SFML_WINDOW_API bool operator >(const VideoMode& left, const VideoMode& right);
+
154 
+
165 SFML_WINDOW_API bool operator <=(const VideoMode& left, const VideoMode& right);
+
166 
+
177 SFML_WINDOW_API bool operator >=(const VideoMode& left, const VideoMode& right);
+
178 
+
179 } // namespace sf
+
180 
+
181 
+
182 #endif // SFML_VIDEOMODE_HPP
+
183 
+
184 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/View_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/View_8hpp_source.htm new file mode 100644 index 0000000..7d6e68b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/View_8hpp_source.htm @@ -0,0 +1,146 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
View.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_VIEW_HPP
+
26 #define SFML_VIEW_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Graphics/Export.hpp>
+
32 #include <SFML/Graphics/Rect.hpp>
+
33 #include <SFML/Graphics/Transform.hpp>
+
34 #include <SFML/System/Vector2.hpp>
+
35 
+
36 
+
37 namespace sf
+
38 {
+
43 class SFML_GRAPHICS_API View
+
44 {
+
45 public :
+
46 
+
53  View();
+
54 
+
61  explicit View(const FloatRect& rectangle);
+
62 
+
70  View(const Vector2f& center, const Vector2f& size);
+
71 
+
81  void setCenter(float x, float y);
+
82 
+
91  void setCenter(const Vector2f& center);
+
92 
+
102  void setSize(float width, float height);
+
103 
+
112  void setSize(const Vector2f& size);
+
113 
+
124  void setRotation(float angle);
+
125 
+
141  void setViewport(const FloatRect& viewport);
+
142 
+
153  void reset(const FloatRect& rectangle);
+
154 
+
163  const Vector2f& getCenter() const;
+
164 
+
173  const Vector2f& getSize() const;
+
174 
+
183  float getRotation() const;
+
184 
+
193  const FloatRect& getViewport() const;
+
194 
+
204  void move(float offsetX, float offsetY);
+
205 
+
214  void move(const Vector2f& offset);
+
215 
+
224  void rotate(float angle);
+
225 
+
241  void zoom(float factor);
+
242 
+
253  const Transform& getTransform() const;
+
254 
+
265  const Transform& getInverseTransform() const;
+
266 
+
267 private :
+
268 
+
270  // Member data
+
272  Vector2f m_center;
+
273  Vector2f m_size;
+
274  float m_rotation;
+
275  FloatRect m_viewport;
+
276  mutable Transform m_transform;
+
277  mutable Transform m_inverseTransform;
+
278  mutable bool m_transformUpdated;
+
279  mutable bool m_invTransformUpdated;
+
280 };
+
281 
+
282 } // namespace sf
+
283 
+
284 
+
285 #endif // SFML_VIEW_HPP
+
286 
+
287 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/WindowHandle_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/WindowHandle_8hpp_source.htm new file mode 100644 index 0000000..90879dd --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/WindowHandle_8hpp_source.htm @@ -0,0 +1,105 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
WindowHandle.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_WINDOWHANDLE_HPP
+
26 #define SFML_WINDOWHANDLE_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 
+
33 // Windows' HWND is a typedef on struct HWND__*
+
34 #if defined(SFML_SYSTEM_WINDOWS)
+
35  struct HWND__;
+
36 #endif
+
37 
+
38 namespace sf
+
39 {
+
44 #if defined(SFML_SYSTEM_WINDOWS)
+
45 
+
46  // Window handle is HWND (HWND__*) on Windows
+
47  typedef HWND__* WindowHandle;
+
48 
+
49 #elif defined(SFML_SYSTEM_LINUX) || defined(SFML_SYSTEM_FREEBSD)
+
50 
+
51  // Window handle is Window (unsigned long) on Unix - X11
+
52  typedef unsigned long WindowHandle;
+
53 
+
54 #elif defined(SFML_SYSTEM_MACOS)
+
55 
+
56  // Window handle is NSWindow (void*) on Mac OS X - Cocoa
+
57  typedef void* WindowHandle;
+
58 
+
59 #endif
+
60 
+
61 } // namespace sf
+
62 
+
63 
+
64 #endif // SFML_WINDOWHANDLE_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/WindowStyle_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/WindowStyle_8hpp_source.htm new file mode 100644 index 0000000..7e34bd1 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/WindowStyle_8hpp_source.htm @@ -0,0 +1,95 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
WindowStyle.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_WINDOWSTYLE_HPP
+
26 #define SFML_WINDOWSTYLE_HPP
+
27 
+
28 
+
29 namespace sf
+
30 {
+
31 namespace Style
+
32 {
+
38  enum
+
39  {
+
40  None = 0,
+
41  Titlebar = 1 << 0,
+
42  Resize = 1 << 1,
+
43  Close = 1 << 2,
+
44  Fullscreen = 1 << 3,
+
45 
+ +
47  };
+
48 }
+
49 
+
50 } // namespace sf
+
51 
+
52 
+
53 #endif // SFML_WINDOWSTYLE_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Window_2Export_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Window_2Export_8hpp_source.htm new file mode 100644 index 0000000..6afc4fb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Window_2Export_8hpp_source.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Window/Export.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_WINDOW_EXPORT_HPP
+
26 #define SFML_WINDOW_EXPORT_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Config.hpp>
+
32 
+
33 
+
35 // Define portable import / export macros
+
37 #if defined(SFML_WINDOW_EXPORTS)
+
38 
+
39  #define SFML_WINDOW_API SFML_API_EXPORT
+
40 
+
41 #else
+
42 
+
43  #define SFML_WINDOW_API SFML_API_IMPORT
+
44 
+
45 #endif
+
46 
+
47 
+
48 #endif // SFML_WINDOW_EXPORT_HPP
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Window_2Window_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Window_2Window_8hpp_source.htm new file mode 100644 index 0000000..3dab402 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Window_2Window_8hpp_source.htm @@ -0,0 +1,179 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Window/Window.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_WINDOW_HPP
+
26 #define SFML_WINDOW_HPP
+
27 
+
29 // Headers
+
31 #include <SFML/Window/Export.hpp>
+
32 #include <SFML/Window/ContextSettings.hpp>
+
33 #include <SFML/Window/VideoMode.hpp>
+
34 #include <SFML/Window/WindowHandle.hpp>
+
35 #include <SFML/Window/WindowStyle.hpp>
+
36 #include <SFML/Window/GlResource.hpp>
+
37 #include <SFML/System/Clock.hpp>
+
38 #include <SFML/System/Vector2.hpp>
+
39 #include <SFML/System/NonCopyable.hpp>
+
40 #include <SFML/System/String.hpp>
+
41 
+
42 
+
43 namespace sf
+
44 {
+
45 namespace priv
+
46 {
+
47  class GlContext;
+
48  class WindowImpl;
+
49 }
+
50 
+
51 class Event;
+
52 
+
57 class SFML_WINDOW_API Window : GlResource, NonCopyable
+
58 {
+
59 public :
+
60 
+
68  Window();
+
69 
+
89  Window(VideoMode mode, const String& title, Uint32 style = Style::Default, const ContextSettings& settings = ContextSettings());
+
90 
+
105  explicit Window(WindowHandle handle, const ContextSettings& settings = ContextSettings());
+
106 
+
113  virtual ~Window();
+
114 
+
128  void create(VideoMode mode, const String& title, Uint32 style = Style::Default, const ContextSettings& settings = ContextSettings());
+
129 
+
141  void create(WindowHandle handle, const ContextSettings& settings = ContextSettings());
+
142 
+
153  void close();
+
154 
+
165  bool isOpen() const;
+
166 
+
178  const ContextSettings& getSettings() const;
+
179 
+
203  bool pollEvent(Event& event);
+
204 
+
230  bool waitEvent(Event& event);
+
231 
+
240  Vector2i getPosition() const;
+
241 
+
254  void setPosition(const Vector2i& position);
+
255 
+
267  Vector2u getSize() const;
+
268 
+
277  void setSize(const Vector2u size);
+
278 
+
287  void setTitle(const String& title);
+
288 
+
304  void setIcon(unsigned int width, unsigned int height, const Uint8* pixels);
+
305 
+
314  void setVisible(bool visible);
+
315 
+
329  void setVerticalSyncEnabled(bool enabled);
+
330 
+
339  void setMouseCursorVisible(bool visible);
+
340 
+
353  void setKeyRepeatEnabled(bool enabled);
+
354 
+
370  void setFramerateLimit(unsigned int limit);
+
371 
+
383  void setJoystickThreshold(float threshold);
+
384 
+
400  bool setActive(bool active = true) const;
+
401 
+
410  void display();
+
411 
+
424  WindowHandle getSystemHandle() const;
+
425 
+
426 protected :
+
427 
+
436  virtual void onCreate();
+
437 
+
445  virtual void onResize();
+
446 
+
447 private:
+
448 
+
461  bool filterEvent(const Event& event);
+
462 
+
467  void initialize();
+
468 
+
470  // Member data
+
472  priv::WindowImpl* m_impl;
+
473  priv::GlContext* m_context;
+
474  Clock m_clock;
+
475  Time m_frameTimeLimit;
+
476  Vector2u m_size;
+
477 };
+
478 
+
479 } // namespace sf
+
480 
+
481 
+
482 #endif // SFML_WINDOW_HPP
+
483 
+
484 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/Window_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/Window_8hpp_source.htm new file mode 100644 index 0000000..745d06d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/Window_8hpp_source.htm @@ -0,0 +1,90 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
Window.hpp
+
+
+
1 //
+
3 // SFML - Simple and Fast Multimedia Library
+
4 // Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
+
5 //
+
6 // This software is provided 'as-is', without any express or implied warranty.
+
7 // In no event will the authors be held liable for any damages arising from the use of this software.
+
8 //
+
9 // Permission is granted to anyone to use this software for any purpose,
+
10 // including commercial applications, and to alter it and redistribute it freely,
+
11 // subject to the following restrictions:
+
12 //
+
13 // 1. The origin of this software must not be misrepresented;
+
14 // you must not claim that you wrote the original software.
+
15 // If you use this software in a product, an acknowledgment
+
16 // in the product documentation would be appreciated but is not required.
+
17 //
+
18 // 2. Altered source versions must be plainly marked as such,
+
19 // and must not be misrepresented as being the original software.
+
20 //
+
21 // 3. This notice may not be removed or altered from any source distribution.
+
22 //
+
24 
+
25 #ifndef SFML_SFML_WINDOW_HPP
+
26 #define SFML_SFML_WINDOW_HPP
+
27 
+
29 // Headers
+
31 
+
32 #include <SFML/System.hpp>
+
33 #include <SFML/Window/Context.hpp>
+
34 #include <SFML/Window/ContextSettings.hpp>
+
35 #include <SFML/Window/Event.hpp>
+
36 #include <SFML/Window/Joystick.hpp>
+
37 #include <SFML/Window/Keyboard.hpp>
+
38 #include <SFML/Window/Mouse.hpp>
+
39 #include <SFML/Window/VideoMode.hpp>
+
40 #include <SFML/Window/Window.hpp>
+
41 #include <SFML/Window/WindowStyle.hpp>
+
42 
+
43 
+
44 #endif // SFML_SFML_WINDOW_HPP
+
45 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/annotated.htm b/SFML-2.1-osx-clang-universal/doc/html/annotated.htm new file mode 100644 index 0000000..233533c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/annotated.htm @@ -0,0 +1,134 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\Nsf
 oCListenerThe audio listener is the point in the scene from where all the sounds are heard
 oCMusicStreamed music played from an audio file
 oCSoundRegular sound that can be played in the audio environment
 oCSoundBufferStorage for audio samples defining a sound
 oCSoundBufferRecorderSpecialized SoundRecorder which stores the captured audio data into a sound buffer
 oCSoundRecorderAbstract base class for capturing sound data
 oCSoundSourceBase class defining a sound's properties
 oCSoundStreamAbstract base class for streamed audio sources
 |\CChunkStructure defining a chunk of audio data to stream
 oCCircleShapeSpecialized shape representing a circle
 oCColorUtility class for manpulating RGBA colors
 oCConvexShapeSpecialized shape representing a convex polygon
 oCDrawableAbstract base class for objects that can be drawn to a render target
 oCFontClass for loading and manipulating character fonts
 oCGlyphStructure describing a glyph
 oCImageClass for loading, manipulating and saving images
 oCRectUtility class for manipulating 2D axis aligned rectangles
 oCRectangleShapeSpecialized shape representing a rectangle
 oCRenderStatesDefine the states used for drawing to a RenderTarget
 oCRenderTargetBase class for all render targets (window, texture, ...)
 oCRenderTextureTarget for off-screen 2D rendering into a texture
 oCRenderWindowWindow that can serve as a target for 2D drawing
 oCShaderShader class (vertex and fragment)
 |\CCurrentTextureTypeSpecial type/value that can be passed to setParameter, and that represents the texture of the object being drawn
 oCShapeBase class for textured shapes with outline
 oCSpriteDrawable representation of a texture, with its own transformations, color, etc
 oCTextGraphical text that can be drawn to a render target
 oCTextureImage living on the graphics card that can be used for drawing
 oCTransformDefine a 3x3 transform matrix
 oCTransformableDecomposed transform defined by a position, a rotation and a scale
 oCVertexDefine a point with color and texture coordinates
 oCVertexArrayDefine a set of one or more 2D primitives
 oCView2D camera that defines what region is shown on screen
 oCFtpA FTP client
 |oCDirectoryResponseSpecialization of FTP response returning a directory
 |oCListingResponseSpecialization of FTP response returning a filename lisiting
 |\CResponseDefine a FTP response
 oCHttpA HTTP client
 |oCRequestDefine a HTTP request
 |\CResponseDefine a HTTP response
 oCIpAddressEncapsulate an IPv4 network address
 oCPacketUtility class to build blocks of data to transfer over the network
 oCSocketBase class for all the socket types
 oCSocketSelectorMultiplexer that allows to read from multiple sockets
 oCTcpListenerSocket that listens to new TCP connections
 oCTcpSocketSpecialized socket using the TCP protocol
 oCUdpSocketSpecialized socket using the UDP protocol
 oCClockUtility class that measures the elapsed time
 oCInputStreamAbstract class for custom file input streams
 oCLockAutomatic wrapper for locking and unlocking mutexes
 oCMutexBlocks concurrent access to shared resources from multiple threads
 oCNonCopyableUtility class that makes any derived class non-copyable
 oCStringUtility string class that automatically handles conversions between types and encodings
 oCThreadUtility class to manipulate threads
 oCThreadLocalDefines variables with thread-local storage
 oCThreadLocalPtrPointer to a thread-local variable
 oCTimeRepresents a time value
 oCUtfUtility class providing generic functions for UTF conversions
 oCUtf< 8 >Specialization of the Utf template for UTF-8
 oCUtf< 16 >Specialization of the Utf template for UTF-16
 oCUtf< 32 >Specialization of the Utf template for UTF-32
 oCVector2Utility template class for manipulating 2-dimensional vectors
 oCVector3Utility template class for manipulating 3-dimensional vectors
 oCContextClass holding a valid drawing context
 oCContextSettingsStructure defining the settings of the OpenGL context attached to a window
 oCEventDefines a system event and its parameters
 |oCJoystickButtonEventJoystick buttons events parameters (JoystickButtonPressed, JoystickButtonReleased)
 |oCJoystickConnectEventJoystick connection events parameters (JoystickConnected, JoystickDisconnected)
 |oCJoystickMoveEventJoystick axis move event parameters (JoystickMoved)
 |oCKeyEventKeyboard event parameters (KeyPressed, KeyReleased)
 |oCMouseButtonEventMouse buttons events parameters (MouseButtonPressed, MouseButtonReleased)
 |oCMouseMoveEventMouse move event parameters (MouseMoved)
 |oCMouseWheelEventMouse wheel events parameters (MouseWheelMoved)
 |oCSizeEventSize events parameters (Resized)
 |\CTextEventText event parameters (TextEntered)
 oCGlResourceBase class for classes that require an OpenGL context
 oCJoystickGive access to the real-time state of the joysticks
 oCKeyboardGive access to the real-time state of the keyboard
 oCMouseGive access to the real-time state of the mouse
 oCVideoModeVideoMode defines a video mode (width, height, bpp)
 \CWindowWindow that serves as a target for OpenGL rendering
+
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/bc_s.png b/SFML-2.1-osx-clang-universal/doc/html/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/bdwn.png b/SFML-2.1-osx-clang-universal/doc/html/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
Class Index
+
+
+
C | D | E | F | G | H | I | J | K | L | M | N | P | R | S | T | U | V | W
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
  C  
+
Glyph (sf)   
  M  
+
Http::Response (sf)   ThreadLocal (sf)   
  H  
+
  S  
+
ThreadLocalPtr (sf)   
SoundStream::Chunk (sf)   Mouse (sf)   Time (sf)   
CircleShape (sf)   Http (sf)   Event::MouseButtonEvent (sf)   Shader (sf)   Transform (sf)   
Clock (sf)   
  I  
+
Event::MouseMoveEvent (sf)   Shape (sf)   Transformable (sf)   
Color (sf)   Event::MouseWheelEvent (sf)   Event::SizeEvent (sf)   
  U  
+
Context (sf)   Image (sf)   Music (sf)   Socket (sf)   
ContextSettings (sf)   InputStream (sf)   Mutex (sf)   SocketSelector (sf)   UdpSocket (sf)   
ConvexShape (sf)   IpAddress (sf)   
  N  
+
Sound (sf)   Utf (sf)   
Shader::CurrentTextureType (sf)   
  J  
+
SoundBuffer (sf)   Utf< 16 > (sf)   
  D  
+
NonCopyable (sf)   SoundBufferRecorder (sf)   Utf< 32 > (sf)   
Joystick (sf)   
  P  
+
SoundRecorder (sf)   Utf< 8 > (sf)   
Ftp::DirectoryResponse (sf)   Event::JoystickButtonEvent (sf)   SoundSource (sf)   
  V  
+
Drawable (sf)   Event::JoystickConnectEvent (sf)   Packet (sf)   SoundStream (sf)   
  E  
+
Event::JoystickMoveEvent (sf)   
  R  
+
Sprite (sf)   Vector2 (sf)   
  K  
+
String (sf)   Vector3 (sf)   
Event (sf)   Rect (sf)   
  T  
+
Vertex (sf)   
  F  
+
Keyboard (sf)   RectangleShape (sf)   VertexArray (sf)   
Event::KeyEvent (sf)   RenderStates (sf)   TcpListener (sf)   VideoMode (sf)   
Font (sf)   
  L  
+
RenderTarget (sf)   TcpSocket (sf)   View (sf)   
Ftp (sf)   RenderTexture (sf)   Text (sf)   
  W  
+
  G  
+
Listener (sf)   RenderWindow (sf)   Event::TextEvent (sf)   
Ftp::ListingResponse (sf)   Http::Request (sf)   Texture (sf)   Window (sf)   
GlResource (sf)   Lock (sf)   Ftp::Response (sf)   Thread (sf)   
+
C | D | E | F | G | H | I | J | K | L | M | N | P | R | S | T | U | V | W
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape-members.htm new file mode 100644 index 0000000..f4c3e4e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape-members.htm @@ -0,0 +1,97 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::CircleShape Member List
+
+
+ +

This is the complete list of members for sf::CircleShape, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CircleShape(float radius=0, unsigned int pointCount=30)sf::CircleShapeexplicit
getFillColor() const sf::Shape
getGlobalBounds() const sf::Shape
getInverseTransform() const sf::Transformable
getLocalBounds() const sf::Shape
getOrigin() const sf::Transformable
getOutlineColor() const sf::Shape
getOutlineThickness() const sf::Shape
getPoint(unsigned int index) const sf::CircleShapevirtual
getPointCount() const sf::CircleShapevirtual
getPosition() const sf::Transformable
getRadius() const sf::CircleShape
getRotation() const sf::Transformable
getScale() const sf::Transformable
getTexture() const sf::Shape
getTextureRect() const sf::Shape
getTransform() const sf::Transformable
move(float offsetX, float offsetY)sf::Transformable
move(const Vector2f &offset)sf::Transformable
rotate(float angle)sf::Transformable
scale(float factorX, float factorY)sf::Transformable
scale(const Vector2f &factor)sf::Transformable
setFillColor(const Color &color)sf::Shape
setOrigin(float x, float y)sf::Transformable
setOrigin(const Vector2f &origin)sf::Transformable
setOutlineColor(const Color &color)sf::Shape
setOutlineThickness(float thickness)sf::Shape
setPointCount(unsigned int count)sf::CircleShape
setPosition(float x, float y)sf::Transformable
setPosition(const Vector2f &position)sf::Transformable
setRadius(float radius)sf::CircleShape
setRotation(float angle)sf::Transformable
setScale(float factorX, float factorY)sf::Transformable
setScale(const Vector2f &factors)sf::Transformable
setTexture(const Texture *texture, bool resetRect=false)sf::Shape
setTextureRect(const IntRect &rect)sf::Shape
Shape()sf::Shapeprotected
Transformable()sf::Transformable
update()sf::Shapeprotected
~Drawable()sf::Drawableinlinevirtual
~Shape()sf::Shapevirtual
~Transformable()sf::Transformablevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape.htm new file mode 100644 index 0000000..97fa2c2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape.htm @@ -0,0 +1,1418 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Specialized shape representing a circle. + More...

+ +

#include <CircleShape.hpp>

+
+Inheritance diagram for sf::CircleShape:
+
+
+ + +sf::Shape +sf::Drawable +sf::Transformable + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 CircleShape (float radius=0, unsigned int pointCount=30)
 Default constructor. More...
 
void setRadius (float radius)
 Set the radius of the circle. More...
 
float getRadius () const
 Get the radius of the circle. More...
 
void setPointCount (unsigned int count)
 Set the number of points of the circle. More...
 
virtual unsigned int getPointCount () const
 Get the number of points of the shape. More...
 
virtual Vector2f getPoint (unsigned int index) const
 Get a point of the shape. More...
 
void setTexture (const Texture *texture, bool resetRect=false)
 Change the source texture of the shape. More...
 
void setTextureRect (const IntRect &rect)
 Set the sub-rectangle of the texture that the shape will display. More...
 
void setFillColor (const Color &color)
 Set the fill color of the shape. More...
 
void setOutlineColor (const Color &color)
 Set the outline color of the shape. More...
 
void setOutlineThickness (float thickness)
 Set the thickness of the shape's outline. More...
 
const TexturegetTexture () const
 Get the source texture of the shape. More...
 
const IntRectgetTextureRect () const
 Get the sub-rectangle of the texture displayed by the shape. More...
 
const ColorgetFillColor () const
 Get the fill color of the shape. More...
 
const ColorgetOutlineColor () const
 Get the outline color of the shape. More...
 
float getOutlineThickness () const
 Get the outline thickness of the shape. More...
 
FloatRect getLocalBounds () const
 Get the local bounding rectangle of the entity. More...
 
FloatRect getGlobalBounds () const
 Get the global bounding rectangle of the entity. More...
 
void setPosition (float x, float y)
 set the position of the object More...
 
void setPosition (const Vector2f &position)
 set the position of the object More...
 
void setRotation (float angle)
 set the orientation of the object More...
 
void setScale (float factorX, float factorY)
 set the scale factors of the object More...
 
void setScale (const Vector2f &factors)
 set the scale factors of the object More...
 
void setOrigin (float x, float y)
 set the local origin of the object More...
 
void setOrigin (const Vector2f &origin)
 set the local origin of the object More...
 
const Vector2fgetPosition () const
 get the position of the object More...
 
float getRotation () const
 get the orientation of the object More...
 
const Vector2fgetScale () const
 get the current scale of the object More...
 
const Vector2fgetOrigin () const
 get the local origin of the object More...
 
void move (float offsetX, float offsetY)
 Move the object by a given offset. More...
 
void move (const Vector2f &offset)
 Move the object by a given offset. More...
 
void rotate (float angle)
 Rotate the object. More...
 
void scale (float factorX, float factorY)
 Scale the object. More...
 
void scale (const Vector2f &factor)
 Scale the object. More...
 
const TransformgetTransform () const
 get the combined transform of the object More...
 
const TransformgetInverseTransform () const
 get the inverse of the combined transform of the object More...
 
+ + + + +

+Protected Member Functions

void update ()
 Recompute the internal geometry of the shape. More...
 
+

Detailed Description

+

Specialized shape representing a circle.

+

This class inherits all the functions of sf::Transformable (position, rotation, scale, bounds, ...) as well as the functions of sf::Shape (outline, color, texture, ...).

+

Usage example:

+
+
circle.setRadius(150);
+ + +
circle.setPosition(10, 20);
+
...
+
window.draw(circle);
+

Since the graphics card can't draw perfect circles, we have to fake them with multiple triangles connected to each other. The "points count" property of sf::CircleShape defines how many of these triangles to use, and therefore defines the quality of the circle.

+

The number of points can also be used for another purpose; with small numbers you can create any regular polygon shape: equilateral triangle, square, pentagon, hexagon, ...

+
See Also
sf::Shape, sf::RectangleShape, sf::ConvexShape
+ +

Definition at line 41 of file CircleShape.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sf::CircleShape::CircleShape (float radius = 0,
unsigned int pointCount = 30 
)
+
+explicit
+
+ +

Default constructor.

+
Parameters
+ + + +
radiusRadius of the circle
pointCountNumber of points composing the circle
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
const Color& sf::Shape::getFillColor () const
+
+inherited
+
+ +

Get the fill color of the shape.

+
Returns
Fill color of the shape
+
See Also
setFillColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
FloatRect sf::Shape::getGlobalBounds () const
+
+inherited
+
+ +

Get the global bounding rectangle of the entity.

+

The returned rectangle is in global coordinates, which means that it takes in account the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the sprite in the global 2D world's coordinate system.

+
Returns
Global bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getInverseTransform () const
+
+inherited
+
+ +

get the inverse of the combined transform of the object

+
Returns
Inverse of the combined transformations applied to the object
+
See Also
getTransform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
FloatRect sf::Shape::getLocalBounds () const
+
+inherited
+
+ +

Get the local bounding rectangle of the entity.

+

The returned rectangle is in local coordinates, which means that it ignores the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the entity in the entity's coordinate system.

+
Returns
Local bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getOrigin () const
+
+inherited
+
+ +

get the local origin of the object

+
Returns
Current origin
+
See Also
setOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Color& sf::Shape::getOutlineColor () const
+
+inherited
+
+ +

Get the outline color of the shape.

+
Returns
Outline color of the shape
+
See Also
setOutlineColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::Shape::getOutlineThickness () const
+
+inherited
+
+ +

Get the outline thickness of the shape.

+
Returns
Outline thickness of the shape
+
See Also
setOutlineThickness
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Vector2f sf::CircleShape::getPoint (unsigned int index) const
+
+virtual
+
+ +

Get a point of the shape.

+

The result is undefined if index is out of the valid range.

+
Parameters
+ + +
indexIndex of the point to get, in range [0 .. getPointCount() - 1]
+
+
+
Returns
Index-th point of the shape
+ +

Implements sf::Shape.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int sf::CircleShape::getPointCount () const
+
+virtual
+
+ +

Get the number of points of the shape.

+
Returns
Number of points of the shape
+
See Also
setPointCount
+ +

Implements sf::Shape.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getPosition () const
+
+inherited
+
+ +

get the position of the object

+
Returns
Current position
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + + + +
float sf::CircleShape::getRadius () const
+
+ +

Get the radius of the circle.

+
Returns
Radius of the circle
+
See Also
setRadius
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::Transformable::getRotation () const
+
+inherited
+
+ +

get the orientation of the object

+

The rotation is always in the range [0, 360].

+
Returns
Current rotation, in degrees
+
See Also
setRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getScale () const
+
+inherited
+
+ +

get the current scale of the object

+
Returns
Current scale factors
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Texture* sf::Shape::getTexture () const
+
+inherited
+
+ +

Get the source texture of the shape.

+

If the shape has no source texture, a NULL pointer is returned. The returned pointer is const, which means that you can't modify the texture when you retrieve it with this function.

+
Returns
Pointer to the shape's texture
+
See Also
setTexture
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const IntRect& sf::Shape::getTextureRect () const
+
+inherited
+
+ +

Get the sub-rectangle of the texture displayed by the shape.

+
Returns
Texture rectangle of the shape
+
See Also
setTextureRect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getTransform () const
+
+inherited
+
+ +

get the combined transform of the object

+
Returns
Transform combining the position/rotation/scale/origin of the object
+
See Also
getInverseTransform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::move (float offsetX,
float offsetY 
)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f pos = object.getPosition();
+
object.setPosition(pos.x + offsetX, pos.y + offsetY);
+
Parameters
+ + + +
offsetXX offset
offsetYY offset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::move (const Vector2foffset)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
object.setPosition(object.getPosition() + offset);
+
Parameters
+ + +
offsetOffset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::rotate (float angle)
+
+inherited
+
+ +

Rotate the object.

+

This function adds to the current rotation of the object, unlike setRotation which overwrites it. Thus, it is equivalent to the following code:

+
object.setRotation(object.getRotation() + angle);
+
Parameters
+ + +
angleAngle of rotation, in degrees
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::scale (float factorX,
float factorY 
)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factorX, scale.y * factorY);
+
Parameters
+ + + +
factorXHorizontal scale factor
factorYVertical scale factor
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::scale (const Vector2ffactor)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factor.x, scale.y * factor.y);
+
Parameters
+ + +
factorScale factors
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setFillColor (const Colorcolor)
+
+inherited
+
+ +

Set the fill color of the shape.

+

This color is modulated (multiplied) with the shape's texture if any. It can be used to colorize the shape, or change its global opacity. You can use sf::Color::Transparent to make the inside of the shape transparent, and have the outline alone. By default, the shape's fill color is opaque white.

+
Parameters
+ + +
colorNew color of the shape
+
+
+
See Also
getFillColor, setOutlineColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setOrigin (float x,
float y 
)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new origin
yY coordinate of the new origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setOrigin (const Vector2forigin)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + +
originNew origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setOutlineColor (const Colorcolor)
+
+inherited
+
+ +

Set the outline color of the shape.

+

By default, the shape's outline color is opaque white.

+
Parameters
+ + +
colorNew outline color of the shape
+
+
+
See Also
getOutlineColor, setFillColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setOutlineThickness (float thickness)
+
+inherited
+
+ +

Set the thickness of the shape's outline.

+

Note that negative values are allowed (so that the outline expands towards the center of the shape), and using zero disables the outline. By default, the outline thickness is 0.

+
Parameters
+ + +
thicknessNew outline thickness
+
+
+
See Also
getOutlineThickness
+ +
+
+ +
+
+ + + + + + + + +
void sf::CircleShape::setPointCount (unsigned int count)
+
+ +

Set the number of points of the circle.

+
Parameters
+ + +
countNew number of points of the circle
+
+
+
See Also
getPointCount
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setPosition (float x,
float y 
)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new position
yY coordinate of the new position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setPosition (const Vector2fposition)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + +
positionNew position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + + + + +
void sf::CircleShape::setRadius (float radius)
+
+ +

Set the radius of the circle.

+
Parameters
+ + +
radiusNew radius of the circle
+
+
+
See Also
getRadius
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setRotation (float angle)
+
+inherited
+
+ +

set the orientation of the object

+

This function completely overwrites the previous rotation. See the rotate function to add an angle based on the previous rotation instead. The default rotation of a transformable object is 0.

+
Parameters
+ + +
angleNew rotation, in degrees
+
+
+
See Also
rotate, getRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setScale (float factorX,
float factorY 
)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + + +
factorXNew horizontal scale factor
factorYNew vertical scale factor
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setScale (const Vector2ffactors)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + +
factorsNew scale factors
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Shape::setTexture (const Texturetexture,
bool resetRect = false 
)
+
+inherited
+
+ +

Change the source texture of the shape.

+

The texture argument refers to a texture that must exist as long as the shape uses it. Indeed, the shape doesn't store its own copy of the texture, but rather keeps a pointer to the one that you passed to this function. If the source texture is destroyed and the shape tries to use it, the behaviour is undefined. texture can be NULL to disable texturing. If resetRect is true, the TextureRect property of the shape is automatically adjusted to the size of the new texture. If it is false, the texture rect is left unchanged.

+
Parameters
+ + + +
textureNew texture
resetRectShould the texture rect be reset to the size of the new texture?
+
+
+
See Also
getTexture, setTextureRect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setTextureRect (const IntRectrect)
+
+inherited
+
+ +

Set the sub-rectangle of the texture that the shape will display.

+

The texture rect is useful when you don't want to display the whole texture, but rather a part of it. By default, the texture rect covers the entire texture.

+
Parameters
+ + +
rectRectangle defining the region of the texture to display
+
+
+
See Also
getTextureRect, setTexture
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Shape::update ()
+
+protectedinherited
+
+ +

Recompute the internal geometry of the shape.

+

This function must be called by the derived class everytime the shape's points change (ie. the result of either getPointCount or getPoint is different).

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1CircleShape.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c65ef4e7287794b35eb15264a69604d32af5f5 GIT binary patch literal 1009 zcmeAS@N?(olHy`uVBq!ia0vp^Pk^|CgBeI3*uQ-qkdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~Zt!$*45?szJNNCjO$q{T=KR@}|EK?1 zHlwEH)@?!KImNeBoeq?>z0|)~T`#3m4fKtK_gyI)gJM?CF_*OLmp|T8SS++Acafgtz8@hcRHpw9EDF@!r{QV2 ze$rE~(@`g5)t9dKcp(%2_27BmHD3FcWpDeQvu?*xf0flQXRQymc`@g&Z_bj}yHZy0 zo{Y)-*S2KU^VeRx)_JCVR;!GddgsQGtcRWFpSu>#)UXtq`exdarmTmW`#x+6tKmxB zHBEBsw$8oAkzwKLnXUHoPTHP4HFJ&UzIwIIS57$X7ui%Y>%zZ1yRLEhTjft&w{e%) z%U#<#*WUN^w3@aRNM?0-dR z2jV|w_A=D~g}*dl$1&VMn|K@YAE>@m@ex`es;245o-~PJZH4=#ofW3B`njG}^R>O* zmcD%T@!Iq!659p#_*_4Gu=bc~uIDAL>r;3fXA777;*gqL{pLi}q%DV1RZq{=PcPaR zZNuUj_4LrosCPCWIZHD*U&QT;+x8(PRZZ9CD!*sc^H=Fb!JoFDPbp(cu3Prf>e{vY z>())$a{l)IS!$d>A5B@pZ0Ok#1`HJ04xpC~RloOVeo!vKQ1zT|(%}N;)7Bn#GQYR) zXgtmDuBn&G-}&AO)z8%_VlZ{NivbMV$2a6qtF2mqtD6&SVPaIk#t$NV7p aA7jWl*G&c + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Clock Member List
+
+
+ +

This is the complete list of members for sf::Clock, including all inherited members.

+ + + + +
Clock()sf::Clock
getElapsedTime() const sf::Clock
restart()sf::Clock
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Clock.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Clock.htm new file mode 100644 index 0000000..232056e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Clock.htm @@ -0,0 +1,148 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Clock Class Reference
+
+
+ +

Utility class that measures the elapsed time. + More...

+ +

#include <Clock.hpp>

+ + + + + + + + + + + +

+Public Member Functions

 Clock ()
 Default constructor. More...
 
Time getElapsedTime () const
 Get the elapsed time. More...
 
Time restart ()
 Restart the clock. More...
 
+

Detailed Description

+

Utility class that measures the elapsed time.

+

sf::Clock is a lightweight class for measuring time.

+

Its provides the most precise time that the underlying OS can achieve (generally microseconds or nanoseconds). It also ensures monotonicity, which means that the returned time can never go backward, even if the system time is changed.

+

Usage example:

+
sf::Clock clock;
+
...
+
Time time1 = clock.getElapsedTime();
+
...
+
Time time2 = clock.restart();
+

The sf::Time value returned by the clock can then be converted to a number of seconds, milliseconds or even microseconds.

+
See Also
sf::Time
+ +

Definition at line 41 of file Clock.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Clock::Clock ()
+
+ +

Default constructor.

+

The clock starts automatically after being constructed.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
Time sf::Clock::getElapsedTime () const
+
+ +

Get the elapsed time.

+

This function returns the time elapsed since the last call to restart() (or the construction of the instance if restart() has not been called).

+
Returns
Time elapsed
+ +
+
+ +
+
+ + + + + + + +
Time sf::Clock::restart ()
+
+ +

Restart the clock.

+

This function puts the time counter back to zero. It also returns the time elapsed since the clock was started.

+
Returns
Time elapsed
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Color-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Color-members.htm new file mode 100644 index 0000000..b1b5e9f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Color-members.htm @@ -0,0 +1,76 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Color Member List
+
+
+ +

This is the complete list of members for sf::Color, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
asf::Color
bsf::Color
Blacksf::Colorstatic
Bluesf::Colorstatic
Color()sf::Color
Color(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha=255)sf::Color
Cyansf::Colorstatic
gsf::Color
Greensf::Colorstatic
Magentasf::Colorstatic
operator!=(const Color &left, const Color &right)sf::Colorrelated
operator*(const Color &left, const Color &right)sf::Colorrelated
operator*=(Color &left, const Color &right)sf::Colorrelated
operator+(const Color &left, const Color &right)sf::Colorrelated
operator+=(Color &left, const Color &right)sf::Colorrelated
operator==(const Color &left, const Color &right)sf::Colorrelated
rsf::Color
Redsf::Colorstatic
Transparentsf::Colorstatic
Whitesf::Colorstatic
Yellowsf::Colorstatic
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Color.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Color.htm new file mode 100644 index 0000000..0c157aa --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Color.htm @@ -0,0 +1,791 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Utility class for manpulating RGBA colors. + More...

+ +

#include <Color.hpp>

+ + + + + + + + +

+Public Member Functions

 Color ()
 Default constructor. More...
 
 Color (Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha=255)
 Construct the color from its 4 RGBA components. More...
 
+ + + + + + + + + + + + + +

+Public Attributes

Uint8 r
 Red component. More...
 
Uint8 g
 Green component. More...
 
Uint8 b
 Blue component. More...
 
Uint8 a
 Alpha (opacity) component. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const Color Black
 Black predefined color. More...
 
static const Color White
 White predefined color. More...
 
static const Color Red
 Red predefined color. More...
 
static const Color Green
 Green predefined color. More...
 
static const Color Blue
 Blue predefined color. More...
 
static const Color Yellow
 Yellow predefined color. More...
 
static const Color Magenta
 Magenta predefined color. More...
 
static const Color Cyan
 Cyan predefined color. More...
 
static const Color Transparent
 Transparent (black) predefined color. More...
 
+ + + + + + + + + + + + + + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
bool operator== (const Color &left, const Color &right)
 Overload of the == operator. More...
 
bool operator!= (const Color &left, const Color &right)
 Overload of the != operator. More...
 
Color operator+ (const Color &left, const Color &right)
 Overload of the binary + operator. More...
 
Color operator* (const Color &left, const Color &right)
 Overload of the binary * operator. More...
 
Coloroperator+= (Color &left, const Color &right)
 Overload of the binary += operator. More...
 
Coloroperator*= (Color &left, const Color &right)
 Overload of the binary *= operator. More...
 
+

Detailed Description

+

Utility class for manpulating RGBA colors.

+

sf::Color is a simple color class composed of 4 components:

+
    +
  • Red
  • +
  • Green
  • +
  • Blue
  • +
  • Alpha (opacity)
  • +
+

Each component is a public member, an unsigned integer in the range [0, 255]. Thus, colors can be constructed and manipulated very easily:

+
sf::Color color(255, 0, 0); // red
+
color.r = 0; // make it black
+
color.b = 128; // make it dark blue
+

The fourth component of colors, named "alpha", represents the opacity of the color. A color with an alpha value of 255 will be fully opaque, while an alpha value of 0 will make a color fully transparent, whatever the value of the other components is.

+

The most common colors are already defined as static variables:

+

Colors can also be added and modulated (multiplied) using the overloaded operators + and *.

+ +

Definition at line 40 of file Color.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Color::Color ()
+
+ +

Default constructor.

+

Constructs an opaque black color. It is equivalent to sf::Color(0, 0, 0, 255).

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sf::Color::Color (Uint8 red,
Uint8 green,
Uint8 blue,
Uint8 alpha = 255 
)
+
+ +

Construct the color from its 4 RGBA components.

+
Parameters
+ + + + + +
redRed component (in the range [0, 255])
greenGreen component (in the range [0, 255])
blueBlue component (in the range [0, 255])
alphaAlpha (opacity) component (in the range [0, 255])
+
+
+ +
+
+

Friends And Related Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator!= (const Colorleft,
const Colorright 
)
+
+related
+
+ +

Overload of the != operator.

+

This operator compares two colors and check if they are different.

+
Parameters
+ + + +
leftLeft operand
rightRight operand
+
+
+
Returns
True if colors are different, false if they are equal
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Color operator* (const Colorleft,
const Colorright 
)
+
+related
+
+ +

Overload of the binary * operator.

+

This operator returns the component-wise multiplication (also called "modulation") of two colors. Components are then divided by 255 so that the result is still in the range [0, 255].

+
Parameters
+ + + +
leftLeft operand
rightRight operand
+
+
+
Returns
Result of left * right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Color & operator*= (Colorleft,
const Colorright 
)
+
+related
+
+ +

Overload of the binary *= operator.

+

This operator returns the component-wise multiplication (also called "modulation") of two colors, and assigns the result to the left operand. Components are then divided by 255 so that the result is still in the range [0, 255].

+
Parameters
+ + + +
leftLeft operand
rightRight operand
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Color operator+ (const Colorleft,
const Colorright 
)
+
+related
+
+ +

Overload of the binary + operator.

+

This operator returns the component-wise sum of two colors. Components that exceed 255 are clamped to 255.

+
Parameters
+ + + +
leftLeft operand
rightRight operand
+
+
+
Returns
Result of left + right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Color & operator+= (Colorleft,
const Colorright 
)
+
+related
+
+ +

Overload of the binary += operator.

+

This operator computes the component-wise sum of two colors, and assigns the result to the left operand. Components that exceed 255 are clamped to 255.

+
Parameters
+ + + +
leftLeft operand
rightRight operand
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator== (const Colorleft,
const Colorright 
)
+
+related
+
+ +

Overload of the == operator.

+

This operator compares two colors and check if they are equal.

+
Parameters
+ + + +
leftLeft operand
rightRight operand
+
+
+
Returns
True if colors are equal, false if they are different
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
Uint8 sf::Color::a
+
+ +

Alpha (opacity) component.

+ +

Definition at line 83 of file Color.hpp.

+ +
+
+ +
+
+ + + + +
Uint8 sf::Color::b
+
+ +

Blue component.

+ +

Definition at line 82 of file Color.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const Color sf::Color::Black
+
+static
+
+ +

Black predefined color.

+ +

Definition at line 67 of file Color.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const Color sf::Color::Blue
+
+static
+
+ +

Blue predefined color.

+ +

Definition at line 71 of file Color.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const Color sf::Color::Cyan
+
+static
+
+ +

Cyan predefined color.

+ +

Definition at line 74 of file Color.hpp.

+ +
+
+ +
+
+ + + + +
Uint8 sf::Color::g
+
+ +

Green component.

+ +

Definition at line 81 of file Color.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const Color sf::Color::Green
+
+static
+
+ +

Green predefined color.

+ +

Definition at line 70 of file Color.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const Color sf::Color::Magenta
+
+static
+
+ +

Magenta predefined color.

+ +

Definition at line 73 of file Color.hpp.

+ +
+
+ +
+
+ + + + +
Uint8 sf::Color::r
+
+ +

Red component.

+ +

Definition at line 80 of file Color.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const Color sf::Color::Red
+
+static
+
+ +

Red predefined color.

+ +

Definition at line 69 of file Color.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const Color sf::Color::Transparent
+
+static
+
+ +

Transparent (black) predefined color.

+ +

Definition at line 75 of file Color.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const Color sf::Color::White
+
+static
+
+ +

White predefined color.

+ +

Definition at line 68 of file Color.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const Color sf::Color::Yellow
+
+static
+
+ +

Yellow predefined color.

+ +

Definition at line 72 of file Color.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context-members.htm new file mode 100644 index 0000000..006161e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context-members.htm @@ -0,0 +1,63 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Context Member List
+
+
+ +

This is the complete list of members for sf::Context, including all inherited members.

+ + + + + + + + + +
Context()sf::Context
Context(const ContextSettings &settings, unsigned int width, unsigned int height)sf::Context
ensureGlContext()sf::GlResourceprivatestatic
GlResource()sf::GlResourceprivate
NonCopyable()sf::NonCopyableinlineprivate
setActive(bool active)sf::Context
~Context()sf::Context
~GlResource()sf::GlResourceprivate
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context.htm new file mode 100644 index 0000000..2cfad7b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context.htm @@ -0,0 +1,221 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Class holding a valid drawing context. + More...

+ +

#include <Context.hpp>

+
+Inheritance diagram for sf::Context:
+
+
+ + +sf::GlResource +sf::NonCopyable + +
+ + + + + + + + + + + + + + +

+Public Member Functions

 Context ()
 Default constructor. More...
 
 ~Context ()
 Destructor. More...
 
bool setActive (bool active)
 Activate or deactivate explicitely the context. More...
 
 Context (const ContextSettings &settings, unsigned int width, unsigned int height)
 Construct a in-memory context. More...
 
+ + + + +

+Static Private Member Functions

static void ensureGlContext ()
 Make sure that a valid OpenGL context exists in the current thread. More...
 
+

Detailed Description

+

Class holding a valid drawing context.

+

If you need to make OpenGL calls without having an active window (like in a thread), you can use an instance of this class to get a valid context.

+

Having a valid context is necessary for every OpenGL call.

+

Note that a context is only active in its current thread, if you create a new thread it will have no valid context by default.

+

To use a sf::Context instance, just construct it and let it live as long as you need a valid context. No explicit activation is needed, all it has to do is to exist. Its destructor will take care of deactivating and freeing all the attached resources.

+

Usage example:

+
void threadFunction(void*)
+
{
+
sf::Context context;
+
// from now on, you have a valid context
+
+
// you can make OpenGL calls
+
glClear(GL_DEPTH_BUFFER_BIT);
+
}
+
// the context is automatically deactivated and destroyed
+
// by the sf::Context destructor
+
+

Definition at line 48 of file Context.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Context::Context ()
+
+ +

Default constructor.

+

The constructor creates and activates the context

+ +
+
+ +
+
+ + + + + + + +
sf::Context::~Context ()
+
+ +

Destructor.

+

The desctructor deactivates and destroys the context

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
sf::Context::Context (const ContextSettingssettings,
unsigned int width,
unsigned int height 
)
+
+ +

Construct a in-memory context.

+

This constructor is for internal use, you don't need to bother with it.

+
Parameters
+ + + + +
settingsCreation parameters
widthBack buffer width
heightBack buffer height
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
bool sf::Context::setActive (bool active)
+
+ +

Activate or deactivate explicitely the context.

+
Parameters
+ + +
activeTrue to activate, false to deactivate
+
+
+
Returns
True on success, false on failure
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Context.png new file mode 100644 index 0000000000000000000000000000000000000000..b82e46ea8433c761d0ecead6c30b0e54c73c0788 GIT binary patch literal 734 zcmeAS@N?(olHy`uVBq!ia0vp^cYrv6gBeJ=etRtdq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0ay?xfLn;{G&b>KpwSs`__Vz#j&F`0W zh%|R@GxOea_4H&nhf}eW*S82b32*$@3M2(pRyOL)Q8Arx*z;1R+_@%pVq_^6cu~hfI2t>2PH9Ul zWA3q;ub-tq0Yq_-U7VYU=U$`P#%x=4^!O1;q4A=cuziqv1smkA} zX7-OJmAE`@_nMUTO5&Y%^znlGH>+AEFR3lE@U+rxpS~T_v96(vDTCO+n6gh$ocbEPudbCW^pXo8YNk3(V+dbfI%II!(Vj=UVgetSAYIZ zn|EymX{AzPyRBQL52qwebt%{tZ+^yp_QAc1cmC`%K32WO&Ok8q`xn8TmG_Qlx1W|Z zn4a#QxsyN7^Vqxxn{@=!we6lO^Z0g-2W!>pd?_Dy=Z+)L9`P=Kwv~RmPX1wl` zFKqCB0<`ngLk2$}UN_}1;~XH4S(zx&rpEMR?mtGyUD{l7UK`wjiIKt6)z4*}Q$iB} Dpx9O< literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ContextSettings-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ContextSettings-members.htm new file mode 100644 index 0000000..0f6e1ab --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ContextSettings-members.htm @@ -0,0 +1,61 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::ContextSettings Member List
+
+
+ +

This is the complete list of members for sf::ContextSettings, including all inherited members.

+ + + + + + + +
antialiasingLevelsf::ContextSettings
ContextSettings(unsigned int depth=0, unsigned int stencil=0, unsigned int antialiasing=0, unsigned int major=2, unsigned int minor=0)sf::ContextSettingsinlineexplicit
depthBitssf::ContextSettings
majorVersionsf::ContextSettings
minorVersionsf::ContextSettings
stencilBitssf::ContextSettings
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape-members.htm new file mode 100644 index 0000000..25a0e1b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape-members.htm @@ -0,0 +1,96 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::ConvexShape Member List
+
+
+ +

This is the complete list of members for sf::ConvexShape, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConvexShape(unsigned int pointCount=0)sf::ConvexShapeexplicit
getFillColor() const sf::Shape
getGlobalBounds() const sf::Shape
getInverseTransform() const sf::Transformable
getLocalBounds() const sf::Shape
getOrigin() const sf::Transformable
getOutlineColor() const sf::Shape
getOutlineThickness() const sf::Shape
getPoint(unsigned int index) const sf::ConvexShapevirtual
getPointCount() const sf::ConvexShapevirtual
getPosition() const sf::Transformable
getRotation() const sf::Transformable
getScale() const sf::Transformable
getTexture() const sf::Shape
getTextureRect() const sf::Shape
getTransform() const sf::Transformable
move(float offsetX, float offsetY)sf::Transformable
move(const Vector2f &offset)sf::Transformable
rotate(float angle)sf::Transformable
scale(float factorX, float factorY)sf::Transformable
scale(const Vector2f &factor)sf::Transformable
setFillColor(const Color &color)sf::Shape
setOrigin(float x, float y)sf::Transformable
setOrigin(const Vector2f &origin)sf::Transformable
setOutlineColor(const Color &color)sf::Shape
setOutlineThickness(float thickness)sf::Shape
setPoint(unsigned int index, const Vector2f &point)sf::ConvexShape
setPointCount(unsigned int count)sf::ConvexShape
setPosition(float x, float y)sf::Transformable
setPosition(const Vector2f &position)sf::Transformable
setRotation(float angle)sf::Transformable
setScale(float factorX, float factorY)sf::Transformable
setScale(const Vector2f &factors)sf::Transformable
setTexture(const Texture *texture, bool resetRect=false)sf::Shape
setTextureRect(const IntRect &rect)sf::Shape
Shape()sf::Shapeprotected
Transformable()sf::Transformable
update()sf::Shapeprotected
~Drawable()sf::Drawableinlinevirtual
~Shape()sf::Shapevirtual
~Transformable()sf::Transformablevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape.htm new file mode 100644 index 0000000..5eeb3fd --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape.htm @@ -0,0 +1,1401 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Specialized shape representing a convex polygon. + More...

+ +

#include <ConvexShape.hpp>

+
+Inheritance diagram for sf::ConvexShape:
+
+
+ + +sf::Shape +sf::Drawable +sf::Transformable + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ConvexShape (unsigned int pointCount=0)
 Default constructor. More...
 
void setPointCount (unsigned int count)
 Set the number of points of the polygon. More...
 
virtual unsigned int getPointCount () const
 Get the number of points of the polygon. More...
 
void setPoint (unsigned int index, const Vector2f &point)
 Set the position of a point. More...
 
virtual Vector2f getPoint (unsigned int index) const
 Get the position of a point. More...
 
void setTexture (const Texture *texture, bool resetRect=false)
 Change the source texture of the shape. More...
 
void setTextureRect (const IntRect &rect)
 Set the sub-rectangle of the texture that the shape will display. More...
 
void setFillColor (const Color &color)
 Set the fill color of the shape. More...
 
void setOutlineColor (const Color &color)
 Set the outline color of the shape. More...
 
void setOutlineThickness (float thickness)
 Set the thickness of the shape's outline. More...
 
const TexturegetTexture () const
 Get the source texture of the shape. More...
 
const IntRectgetTextureRect () const
 Get the sub-rectangle of the texture displayed by the shape. More...
 
const ColorgetFillColor () const
 Get the fill color of the shape. More...
 
const ColorgetOutlineColor () const
 Get the outline color of the shape. More...
 
float getOutlineThickness () const
 Get the outline thickness of the shape. More...
 
FloatRect getLocalBounds () const
 Get the local bounding rectangle of the entity. More...
 
FloatRect getGlobalBounds () const
 Get the global bounding rectangle of the entity. More...
 
void setPosition (float x, float y)
 set the position of the object More...
 
void setPosition (const Vector2f &position)
 set the position of the object More...
 
void setRotation (float angle)
 set the orientation of the object More...
 
void setScale (float factorX, float factorY)
 set the scale factors of the object More...
 
void setScale (const Vector2f &factors)
 set the scale factors of the object More...
 
void setOrigin (float x, float y)
 set the local origin of the object More...
 
void setOrigin (const Vector2f &origin)
 set the local origin of the object More...
 
const Vector2fgetPosition () const
 get the position of the object More...
 
float getRotation () const
 get the orientation of the object More...
 
const Vector2fgetScale () const
 get the current scale of the object More...
 
const Vector2fgetOrigin () const
 get the local origin of the object More...
 
void move (float offsetX, float offsetY)
 Move the object by a given offset. More...
 
void move (const Vector2f &offset)
 Move the object by a given offset. More...
 
void rotate (float angle)
 Rotate the object. More...
 
void scale (float factorX, float factorY)
 Scale the object. More...
 
void scale (const Vector2f &factor)
 Scale the object. More...
 
const TransformgetTransform () const
 get the combined transform of the object More...
 
const TransformgetInverseTransform () const
 get the inverse of the combined transform of the object More...
 
+ + + + +

+Protected Member Functions

void update ()
 Recompute the internal geometry of the shape. More...
 
+

Detailed Description

+

Specialized shape representing a convex polygon.

+

This class inherits all the functions of sf::Transformable (position, rotation, scale, bounds, ...) as well as the functions of sf::Shape (outline, color, texture, ...).

+

It is important to keep in mind that a convex shape must always be... convex, otherwise it may not be drawn correctly. Moreover, the points must be defined in order; using a random order would result in an incorrect shape.

+

Usage example:

+
+
polygon.setPointCount(3);
+
polygon.setPoint(0, sf::Vector2f(0, 0));
+
polygon.setPoint(1, sf::Vector2f(0, 10));
+
polygon.setPoint(2, sf::Vector2f(25, 5));
+ + +
polygon.setPosition(10, 20);
+
...
+
window.draw(polygon);
+
See Also
sf::Shape, sf::RectangleShape, sf::CircleShape
+ +

Definition at line 42 of file ConvexShape.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
sf::ConvexShape::ConvexShape (unsigned int pointCount = 0)
+
+explicit
+
+ +

Default constructor.

+
Parameters
+ + +
pointCountNumber of points of the polygon
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
const Color& sf::Shape::getFillColor () const
+
+inherited
+
+ +

Get the fill color of the shape.

+
Returns
Fill color of the shape
+
See Also
setFillColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
FloatRect sf::Shape::getGlobalBounds () const
+
+inherited
+
+ +

Get the global bounding rectangle of the entity.

+

The returned rectangle is in global coordinates, which means that it takes in account the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the sprite in the global 2D world's coordinate system.

+
Returns
Global bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getInverseTransform () const
+
+inherited
+
+ +

get the inverse of the combined transform of the object

+
Returns
Inverse of the combined transformations applied to the object
+
See Also
getTransform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
FloatRect sf::Shape::getLocalBounds () const
+
+inherited
+
+ +

Get the local bounding rectangle of the entity.

+

The returned rectangle is in local coordinates, which means that it ignores the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the entity in the entity's coordinate system.

+
Returns
Local bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getOrigin () const
+
+inherited
+
+ +

get the local origin of the object

+
Returns
Current origin
+
See Also
setOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Color& sf::Shape::getOutlineColor () const
+
+inherited
+
+ +

Get the outline color of the shape.

+
Returns
Outline color of the shape
+
See Also
setOutlineColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::Shape::getOutlineThickness () const
+
+inherited
+
+ +

Get the outline thickness of the shape.

+
Returns
Outline thickness of the shape
+
See Also
setOutlineThickness
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Vector2f sf::ConvexShape::getPoint (unsigned int index) const
+
+virtual
+
+ +

Get the position of a point.

+

The result is undefined if index is out of the valid range.

+
Parameters
+ + +
indexIndex of the point to get, in range [0 .. getPointCount() - 1]
+
+
+
Returns
Position of the index-th point of the polygon
+
See Also
setPoint
+ +

Implements sf::Shape.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int sf::ConvexShape::getPointCount () const
+
+virtual
+
+ +

Get the number of points of the polygon.

+
Returns
Number of points of the polygon
+
See Also
setPointCount
+ +

Implements sf::Shape.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getPosition () const
+
+inherited
+
+ +

get the position of the object

+
Returns
Current position
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::Transformable::getRotation () const
+
+inherited
+
+ +

get the orientation of the object

+

The rotation is always in the range [0, 360].

+
Returns
Current rotation, in degrees
+
See Also
setRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getScale () const
+
+inherited
+
+ +

get the current scale of the object

+
Returns
Current scale factors
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Texture* sf::Shape::getTexture () const
+
+inherited
+
+ +

Get the source texture of the shape.

+

If the shape has no source texture, a NULL pointer is returned. The returned pointer is const, which means that you can't modify the texture when you retrieve it with this function.

+
Returns
Pointer to the shape's texture
+
See Also
setTexture
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const IntRect& sf::Shape::getTextureRect () const
+
+inherited
+
+ +

Get the sub-rectangle of the texture displayed by the shape.

+
Returns
Texture rectangle of the shape
+
See Also
setTextureRect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getTransform () const
+
+inherited
+
+ +

get the combined transform of the object

+
Returns
Transform combining the position/rotation/scale/origin of the object
+
See Also
getInverseTransform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::move (float offsetX,
float offsetY 
)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f pos = object.getPosition();
+
object.setPosition(pos.x + offsetX, pos.y + offsetY);
+
Parameters
+ + + +
offsetXX offset
offsetYY offset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::move (const Vector2foffset)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
object.setPosition(object.getPosition() + offset);
+
Parameters
+ + +
offsetOffset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::rotate (float angle)
+
+inherited
+
+ +

Rotate the object.

+

This function adds to the current rotation of the object, unlike setRotation which overwrites it. Thus, it is equivalent to the following code:

+
object.setRotation(object.getRotation() + angle);
+
Parameters
+ + +
angleAngle of rotation, in degrees
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::scale (float factorX,
float factorY 
)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factorX, scale.y * factorY);
+
Parameters
+ + + +
factorXHorizontal scale factor
factorYVertical scale factor
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::scale (const Vector2ffactor)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factor.x, scale.y * factor.y);
+
Parameters
+ + +
factorScale factors
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setFillColor (const Colorcolor)
+
+inherited
+
+ +

Set the fill color of the shape.

+

This color is modulated (multiplied) with the shape's texture if any. It can be used to colorize the shape, or change its global opacity. You can use sf::Color::Transparent to make the inside of the shape transparent, and have the outline alone. By default, the shape's fill color is opaque white.

+
Parameters
+ + +
colorNew color of the shape
+
+
+
See Also
getFillColor, setOutlineColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setOrigin (float x,
float y 
)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new origin
yY coordinate of the new origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setOrigin (const Vector2forigin)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + +
originNew origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setOutlineColor (const Colorcolor)
+
+inherited
+
+ +

Set the outline color of the shape.

+

By default, the shape's outline color is opaque white.

+
Parameters
+ + +
colorNew outline color of the shape
+
+
+
See Also
getOutlineColor, setFillColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setOutlineThickness (float thickness)
+
+inherited
+
+ +

Set the thickness of the shape's outline.

+

Note that negative values are allowed (so that the outline expands towards the center of the shape), and using zero disables the outline. By default, the outline thickness is 0.

+
Parameters
+ + +
thicknessNew outline thickness
+
+
+
See Also
getOutlineThickness
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::ConvexShape::setPoint (unsigned int index,
const Vector2fpoint 
)
+
+ +

Set the position of a point.

+

Don't forget that the polygon must remain convex, and the points need to stay ordered! setPointCount must be called first in order to set the total number of points. The result is undefined if index is out of the valid range.

+
Parameters
+ + + +
indexIndex of the point to change, in range [0 .. getPointCount() - 1]
pointNew position of the point
+
+
+
See Also
getPoint
+ +
+
+ +
+
+ + + + + + + + +
void sf::ConvexShape::setPointCount (unsigned int count)
+
+ +

Set the number of points of the polygon.

+

count must be greater than 2 to define a valid shape.

+
Parameters
+ + +
countNew number of points of the polygon
+
+
+
See Also
getPointCount
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setPosition (float x,
float y 
)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new position
yY coordinate of the new position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setPosition (const Vector2fposition)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + +
positionNew position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setRotation (float angle)
+
+inherited
+
+ +

set the orientation of the object

+

This function completely overwrites the previous rotation. See the rotate function to add an angle based on the previous rotation instead. The default rotation of a transformable object is 0.

+
Parameters
+ + +
angleNew rotation, in degrees
+
+
+
See Also
rotate, getRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setScale (float factorX,
float factorY 
)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + + +
factorXNew horizontal scale factor
factorYNew vertical scale factor
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setScale (const Vector2ffactors)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + +
factorsNew scale factors
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Shape::setTexture (const Texturetexture,
bool resetRect = false 
)
+
+inherited
+
+ +

Change the source texture of the shape.

+

The texture argument refers to a texture that must exist as long as the shape uses it. Indeed, the shape doesn't store its own copy of the texture, but rather keeps a pointer to the one that you passed to this function. If the source texture is destroyed and the shape tries to use it, the behaviour is undefined. texture can be NULL to disable texturing. If resetRect is true, the TextureRect property of the shape is automatically adjusted to the size of the new texture. If it is false, the texture rect is left unchanged.

+
Parameters
+ + + +
textureNew texture
resetRectShould the texture rect be reset to the size of the new texture?
+
+
+
See Also
getTexture, setTextureRect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setTextureRect (const IntRectrect)
+
+inherited
+
+ +

Set the sub-rectangle of the texture that the shape will display.

+

The texture rect is useful when you don't want to display the whole texture, but rather a part of it. By default, the texture rect covers the entire texture.

+
Parameters
+ + +
rectRectangle defining the region of the texture to display
+
+
+
See Also
getTextureRect, setTexture
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Shape::update ()
+
+protectedinherited
+
+ +

Recompute the internal geometry of the shape.

+

This function must be called by the derived class everytime the shape's points change (ie. the result of either getPointCount or getPoint is different).

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ConvexShape.png new file mode 100644 index 0000000000000000000000000000000000000000..99b556c43087b320357363c7e93ab908de0a4c78 GIT binary patch literal 1022 zcmeAS@N?(olHy`uVBq!ia0vp^Pk^|CgBeI3*uQ-qkdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~?)7wW45?szJNNCR%~}F%x7)Se|DWXl z$0@q?ES|&}p!ZCTu5^qCK&sEKye9ifL z>?V~Qktz@gpK_;aKD(97s}#ALo-&^ACKkUw^GROiaP_@O6PD=wcQ2}nJ1870b@{tN z?fLL&n`f$iDn0o>tm2;J$&@9vYqs21DC(V`G;N0|r`O~Y-g@SFToaf4ubuv7)ydvT zBA>&JWKZ^s{;~3S`2So{;ji=T`I9xg{`p?dco!J|Tf~0inPu5FexDX3pHnZKurBrF zQZts?)}OmoLha(YUq(&p`NjLmK)ceQGwI>Y`RC<5?+0#BHM*(m$$9h8(bI0OH{5t)SLtixh{uGmd~RYKQJmgRNvzJ&2qBv zPgm;g#Q6$8rQS$S%Wbc1SrQuF5H&;Pz|t8i4zfN%4}yGz7VxQY7HFQIAalI%4->=w z1Lu829s~o0*|FmXaTd>Gj2ZTU;svhvK`?@ty!$$x(`gZ z^15W1zu(kXXn~lTrl)w)B!;a9o}Rk|CbO()Ek0+;{GeQdvFbVJq{lxPPOE$Dlli^9 z1{?r(2A&OaB;aa8p2HV-8uBj`C4h|fWQytVWV)gxX|bZ={q)18pGv$ziz=bv0D~>-Wk7krezK19jEIPezeuhXW+e=zC-uey-$pr>xBgFZDdhbym&KL z@JW;7-QBWXcQgFc zveIUh{mWi!@o&Pdy9NGkx3jdn12^{E(@HGmy+1kn>D>Q$;jxT*s+Ttcop?xv5ga#( mlNi9EBhi+a!FFKzA9jT%*Q0w5Ka~JxRt8U3KbLh*2~7aHhSg>O literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable-members.htm new file mode 100644 index 0000000..db3b626 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable-members.htm @@ -0,0 +1,58 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Drawable Member List
+
+
+ +

This is the complete list of members for sf::Drawable, including all inherited members.

+ + + + +
draw(RenderTarget &target, RenderStates states) const =0sf::Drawableprotectedpure virtual
RenderTarget (defined in sf::Drawable)sf::Drawablefriend
~Drawable()sf::Drawableinlinevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable.htm new file mode 100644 index 0000000..af9e4cf --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable.htm @@ -0,0 +1,208 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Abstract base class for objects that can be drawn to a render target. + More...

+ +

#include <Drawable.hpp>

+
+Inheritance diagram for sf::Drawable:
+
+
+ + +sf::Shape +sf::Sprite +sf::Text +sf::VertexArray +sf::CircleShape +sf::ConvexShape +sf::RectangleShape + +
+ + + + + +

+Public Member Functions

virtual ~Drawable ()
 Virtual destructor. More...
 
+ + + + +

+Protected Member Functions

virtual void draw (RenderTarget &target, RenderStates states) const =0
 Draw the object to a render target. More...
 
+ + + +

+Friends

+class RenderTarget
 
+

Detailed Description

+

Abstract base class for objects that can be drawn to a render target.

+

sf::Drawable is a very simple base class that allows objects of derived classes to be drawn to a sf::RenderTarget.

+

All you have to do in your derived class is to override the draw virtual function.

+

Note that inheriting from sf::Drawable is not mandatory, but it allows this nice syntax "window.draw(object)" rather than "object.draw(window)", which is more consistent with other SFML classes.

+

Example:

+
class MyDrawable : public sf::Drawable
+
{
+
public :
+
+
...
+
+
private :
+
+
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
+
{
+
// You can draw other high-level objects
+
target.draw(m_sprite, states);
+
+
// ... or use the low-level API
+
states.texture = &m_texture;
+
target.draw(m_vertices, states);
+
+
// ... or draw with OpenGL directly
+
glBegin(GL_QUADS);
+
...
+
glEnd();
+
}
+
+
sf::Sprite m_sprite;
+
sf::Texture m_texture;
+
sf::VertexArray m_vertices;
+
};
+
See Also
sf::RenderTarget
+ +

Definition at line 44 of file Drawable.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::Drawable::~Drawable ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 52 of file Drawable.hpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sf::Drawable::draw (RenderTargettarget,
RenderStates states 
) const
+
+protectedpure virtual
+
+ +

Draw the object to a render target.

+

This is a pure virtual function that has to be implemented by the derived class to define how the drawable should be drawn.

+
Parameters
+ + + +
targetRender target to draw to
statesCurrent render states
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Drawable.png new file mode 100644 index 0000000000000000000000000000000000000000..b9876ce50cf54769c3f11f92b8a901229c591b3e GIT binary patch literal 1958 zcmaJ?do-Kb7SET7`l8n$+A4;4O${CNR$9@jpp=&4;+yu$5JLwSEmeK*Vi-C!(cG_M+1DrFc>UTi!Xy8X{FZ$3~860p+OOT8jVH^XBXBoS)JFl=>0?x zMCZzLqE-bn!h*vwTBFS|{5WDS2BW+0sIPYf9awxZnm+Y};5W&Nz%6Tj?TsHSvTHUN zR*#-`@;Y4Ka{oKWRBI%Jd@K0w4lky`-5Yo#LmylrruZ_`uv&|;Bx|e>bJs#e8kcrf zq1L57cP8gp;N&OY1?_xFyJ*qwp*^0S1B40!;w~A?+T%dI785wqV*#5l3Lz-kmg=Farm+meQGpQGvB14 znOl&tK8Xq1EDQl_FIyWcT;gU%$A6!ZuNOF2D4fek0&t*&kN_H@FE+RGSKPPwFt@yi zE}B>?9G$XR1RI4nbJu$p5CkeV;~M{ATzP%vz|1)^dtjy(N%&1YREpM^NVie&)us*? z30|&YN;_u!9r;mAe}J?UQ*mR;9w6CvhhP(rTxH`1i~iJ5dAV_(d%`_CO2i8wD5>~r zd=xaiVQRvM->B>ab^yuxLxD;tiaC;!t6Y-R!&R?1Q!X|^!JcKaxQC-6#070yN4Uts_1(FX)-{{ zr*#e8^lbk|6en9tYd-;Tx_=h(O(qp?Z7}@Cx`~Hf0nS8!SwcBkUJrjU8oY-HFT1xE zl=bpxLjLt^z-2YzFmsEmLn1Nw!+J`r!B)VP!f!%kI|>RVuqz@S7^!MwKfWjXQI zJ$Nj^Rq*!8%#)_?=~^F#e;H?J z`^%r~`%q+Jds_5}F4l7x%T5){8`TmzZtGA8&7zmGNXhfpb5M4oK0k9qQn-o?UPmqJ|E1hhT%gWx1f(6@82dDXWPfQ=(P7g zRZ!QnBh#Sak9#MSL=pm5qzvdsLS63y@h}|yiifv}f%K`k+;jQE$NUgbUW=Rmry>M@ z63VO$NoGROIdvUwu<%2DHp^{H_TKC(bl~j2Fo5{DmNrggcAS<$UYk(<)w*|kZVX|pp501XZICwx@4@+BqQ8(y&^5#w{ z#|tUtv7ZXYM!LeqTg;u!&g6*}e@XX6GJ&SFM62Db!B6)W9f?rRWMUb>wXQ0Qj zcrPI>XWko`d29p_LGohWh25wMshR$V!$d9fV8H;cQufq7tYO#5lDxz@b9=I-9o92N zAoS_i<1V-xIC?Gz>QW`IQPm3ttNv=2XlPr#ll(R_`CeB0Dle=A{I@87BUWq{MRDj_ z;@o=TEEl&aiyIrY^_j>|C}8PYJgd3wCgzSyw^5zw+&d*zZ?lF}&tyX0-$TB&-Mk5c zDDgbmQY#9>6EDBIN;}@X-oSFc!Zeb&5k7Cb01fAZV4w}kGX9+VKSj+K(jd;`aa;o& tIn6$XAs+i+&t*i3I9B)`JnFhm)QoVl&wJ + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event Member List
+
+ + + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Event.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Event.htm new file mode 100644 index 0000000..709cedf --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Event.htm @@ -0,0 +1,440 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event Class Reference
+
+
+ +

Defines a system event and its parameters. + More...

+ +

#include <Event.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

struct  JoystickButtonEvent
 Joystick buttons events parameters (JoystickButtonPressed, JoystickButtonReleased) More...
 
struct  JoystickConnectEvent
 Joystick connection events parameters (JoystickConnected, JoystickDisconnected) More...
 
struct  JoystickMoveEvent
 Joystick axis move event parameters (JoystickMoved) More...
 
struct  KeyEvent
 Keyboard event parameters (KeyPressed, KeyReleased) More...
 
struct  MouseButtonEvent
 Mouse buttons events parameters (MouseButtonPressed, MouseButtonReleased) More...
 
struct  MouseMoveEvent
 Mouse move event parameters (MouseMoved) More...
 
struct  MouseWheelEvent
 Mouse wheel events parameters (MouseWheelMoved) More...
 
struct  SizeEvent
 Size events parameters (Resized) More...
 
struct  TextEvent
 Text event parameters (TextEntered) More...
 
+ + + + +

+Public Types

enum  EventType {
+  Closed, +
+  Resized, +
+  LostFocus, +
+  GainedFocus, +
+  TextEntered, +
+  KeyPressed, +
+  KeyReleased, +
+  MouseWheelMoved, +
+  MouseButtonPressed, +
+  MouseButtonReleased, +
+  MouseMoved, +
+  MouseEntered, +
+  MouseLeft, +
+  JoystickButtonPressed, +
+  JoystickButtonReleased, +
+  JoystickMoved, +
+  JoystickConnected, +
+  JoystickDisconnected, +
+  Count +
+ }
 Enumeration of the different types of events. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

EventType type
 Type of the event. More...
 
+union {
   SizeEvent   size
 Size event parameters (Event::Resized) More...
 
   KeyEvent   key
 Key event parameters (Event::KeyPressed, Event::KeyReleased) More...
 
   TextEvent   text
 Text event parameters (Event::TextEntered) More...
 
   MouseMoveEvent   mouseMove
 Mouse move event parameters (Event::MouseMoved) More...
 
   MouseButtonEvent   mouseButton
 Mouse button event parameters (Event::MouseButtonPressed, Event::MouseButtonReleased) More...
 
   MouseWheelEvent   mouseWheel
 Mouse wheel event parameters (Event::MouseWheelMoved) More...
 
   JoystickMoveEvent   joystickMove
 Joystick move event parameters (Event::JoystickMoved) More...
 
   JoystickButtonEvent   joystickButton
 Joystick button event parameters (Event::JoystickButtonPressed, Event::JoystickButtonReleased) More...
 
   JoystickConnectEvent   joystickConnect
 Joystick (dis)connect event parameters (Event::JoystickConnected, Event::JoystickDisconnected) More...
 
}; 
 
+

Detailed Description

+

Defines a system event and its parameters.

+

sf::Event holds all the informations about a system event that just happened.

+

Events are retrieved using the sf::Window::pollEvent and sf::Window::waitEvent functions.

+

A sf::Event instance contains the type of the event (mouse moved, key pressed, window closed, ...) as well as the details about this particular event. Please note that the event parameters are defined in a union, which means that only the member matching the type of the event will be properly filled; all other members will have undefined values and must not be read if the type of the event doesn't match. For example, if you received a KeyPressed event, then you must read the event.key member, all other members such as event.MouseMove or event.text will have undefined values.

+

Usage example:

+
sf::Event event;
+
while (window.pollEvent(event))
+
{
+
// Request for closing the window
+
if (event.type == sf::Event::Closed)
+
window.close();
+
+
// The escape key was pressed
+
if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape))
+
window.close();
+
+
// The window was resized
+
if (event.type == sf::Event::Resized)
+
doSomethingWithTheNewSize(event.size.width, event.size.height);
+
+
// etc ...
+
}
+
+

Definition at line 43 of file Event.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Event::EventType
+
+ +

Enumeration of the different types of events.

+ + + + + + + + + + + + + + + + + + + + +
Enumerator
Closed  +

The window requested to be closed (no data)

+
Resized  +

The window was resized (data in event.size)

+
LostFocus  +

The window lost the focus (no data)

+
GainedFocus  +

The window gained the focus (no data)

+
TextEntered  +

A character was entered (data in event.text)

+
KeyPressed  +

A key was pressed (data in event.key)

+
KeyReleased  +

A key was released (data in event.key)

+
MouseWheelMoved  +

The mouse wheel was scrolled (data in event.mouseWheel)

+
MouseButtonPressed  +

A mouse button was pressed (data in event.mouseButton)

+
MouseButtonReleased  +

A mouse button was released (data in event.mouseButton)

+
MouseMoved  +

The mouse cursor moved (data in event.mouseMove)

+
MouseEntered  +

The mouse cursor entered the area of the window (no data)

+
MouseLeft  +

The mouse cursor left the area of the window (no data)

+
JoystickButtonPressed  +

A joystick button was pressed (data in event.joystickButton)

+
JoystickButtonReleased  +

A joystick button was released (data in event.joystickButton)

+
JoystickMoved  +

The joystick moved along an axis (data in event.joystickMove)

+
JoystickConnected  +

A joystick was connected (data in event.joystickConnect)

+
JoystickDisconnected  +

A joystick was disconnected (data in event.joystickConnect)

+
Count  +

Keep last – the total number of event types.

+
+ +

Definition at line 148 of file Event.hpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
JoystickButtonEvent sf::Event::joystickButton
+
+ +

Joystick button event parameters (Event::JoystickButtonPressed, Event::JoystickButtonReleased)

+ +

Definition at line 186 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
JoystickConnectEvent sf::Event::joystickConnect
+
+ +

Joystick (dis)connect event parameters (Event::JoystickConnected, Event::JoystickDisconnected)

+ +

Definition at line 187 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
JoystickMoveEvent sf::Event::joystickMove
+
+ +

Joystick move event parameters (Event::JoystickMoved)

+ +

Definition at line 185 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
KeyEvent sf::Event::key
+
+ +

Key event parameters (Event::KeyPressed, Event::KeyReleased)

+ +

Definition at line 180 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
MouseButtonEvent sf::Event::mouseButton
+
+ +

Mouse button event parameters (Event::MouseButtonPressed, Event::MouseButtonReleased)

+ +

Definition at line 183 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
MouseMoveEvent sf::Event::mouseMove
+
+ +

Mouse move event parameters (Event::MouseMoved)

+ +

Definition at line 182 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
MouseWheelEvent sf::Event::mouseWheel
+
+ +

Mouse wheel event parameters (Event::MouseWheelMoved)

+ +

Definition at line 184 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
SizeEvent sf::Event::size
+
+ +

Size event parameters (Event::Resized)

+ +

Definition at line 179 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
TextEvent sf::Event::text
+
+ +

Text event parameters (Event::TextEntered)

+ +

Definition at line 181 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
EventType sf::Event::type
+
+ +

Type of the event.

+ +

Definition at line 175 of file Event.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Font-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Font-members.htm new file mode 100644 index 0000000..db8b6d2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Font-members.htm @@ -0,0 +1,66 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Font Member List
+
+
+ +

This is the complete list of members for sf::Font, including all inherited members.

+ + + + + + + + + + + + +
Font()sf::Font
Font(const Font &copy)sf::Font
getGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const sf::Font
getKerning(Uint32 first, Uint32 second, unsigned int characterSize) const sf::Font
getLineSpacing(unsigned int characterSize) const sf::Font
getTexture(unsigned int characterSize) const sf::Font
loadFromFile(const std::string &filename)sf::Font
loadFromMemory(const void *data, std::size_t sizeInBytes)sf::Font
loadFromStream(InputStream &stream)sf::Font
operator=(const Font &right)sf::Font
~Font()sf::Font
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Font.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Font.htm new file mode 100644 index 0000000..841c87e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Font.htm @@ -0,0 +1,456 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Class for loading and manipulating character fonts. + More...

+ +

#include <Font.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Font ()
 Default constructor. More...
 
 Font (const Font &copy)
 Copy constructor. More...
 
 ~Font ()
 Destructor. More...
 
bool loadFromFile (const std::string &filename)
 Load the font from a file. More...
 
bool loadFromMemory (const void *data, std::size_t sizeInBytes)
 Load the font from a file in memory. More...
 
bool loadFromStream (InputStream &stream)
 Load the font from a custom stream. More...
 
const GlyphgetGlyph (Uint32 codePoint, unsigned int characterSize, bool bold) const
 Retrieve a glyph of the font. More...
 
int getKerning (Uint32 first, Uint32 second, unsigned int characterSize) const
 Get the kerning offset of two glyphs. More...
 
int getLineSpacing (unsigned int characterSize) const
 Get the line spacing. More...
 
const TexturegetTexture (unsigned int characterSize) const
 Retrieve the texture containing the loaded glyphs of a certain size. More...
 
Fontoperator= (const Font &right)
 Overload of assignment operator. More...
 
+

Detailed Description

+

Class for loading and manipulating character fonts.

+

Fonts can be loaded from a file, from memory or from a custom stream, and supports the most common types of fonts.

+

See the loadFromFile function for the complete list of supported formats.

+

Once it is loaded, a sf::Font instance provides three types of information about the font:

+
    +
  • Global metrics, such as the line spacing
  • +
  • Per-glyph metrics, such as bounding box or kerning
  • +
  • Pixel representation of glyphs
  • +
+

Fonts alone are not very useful: they hold the font data but cannot make anything useful of it. To do so you need to use the sf::Text class, which is able to properly output text with several options such as character size, style, color, position, rotation, etc. This separation allows more flexibility and better performances: indeed a sf::Font is a heavy resource, and any operation on it is slow (often too slow for real-time applications). On the other side, a sf::Text is a lightweight object which can combine the glyphs data and metrics of a sf::Font to display any text on a render target. Note that it is also possible to bind several sf::Text instances to the same sf::Font.

+

It is important to note that the sf::Text instance doesn't copy the font that it uses, it only keeps a reference to it. Thus, a sf::Font must not be destructed while it is used by a sf::Text (i.e. never write a function that uses a local sf::Font instance for creating a text).

+

Usage example:

+
// Declare a new font
+
sf::Font font;
+
+
// Load it from a file
+
if (!font.loadFromFile("arial.ttf"))
+
{
+
// error...
+
}
+
+
// Create a text which uses our font
+
sf::Text text1;
+
text1.setFont(font);
+
text1.setCharacterSize(30);
+ +
+
// Create another text using the same font, but with different parameters
+
sf::Text text2;
+
text2.setFont(font);
+
text2.setCharacterSize(50);
+ +

Apart from loading font files, and passing them to instances of sf::Text, you should normally not have to deal directly with this class. However, it may be useful to access the font metrics or rasterized glyphs for advanced usage.

+
See Also
sf::Text
+ +

Definition at line 50 of file Font.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Font::Font ()
+
+ +

Default constructor.

+

This constructor defines an empty font

+ +
+
+ +
+
+ + + + + + + + +
sf::Font::Font (const Fontcopy)
+
+ +

Copy constructor.

+
Parameters
+ + +
copyInstance to copy
+
+
+ +
+
+ +
+
+ + + + + + + +
sf::Font::~Font ()
+
+ +

Destructor.

+

Cleans up all the internal resources used by the font

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
const Glyph& sf::Font::getGlyph (Uint32 codePoint,
unsigned int characterSize,
bool bold 
) const
+
+ +

Retrieve a glyph of the font.

+
Parameters
+ + + + +
codePointUnicode code point of the character to get
characterSizeReference character size
boldRetrieve the bold version or the regular one?
+
+
+
Returns
The glyph corresponding to codePoint and characterSize
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int sf::Font::getKerning (Uint32 first,
Uint32 second,
unsigned int characterSize 
) const
+
+ +

Get the kerning offset of two glyphs.

+

The kerning is an extra offset (negative) to apply between two glyphs when rendering them, to make the pair look more "natural". For example, the pair "AV" have a special kerning to make them closer than other characters. Most of the glyphs pairs have a kerning offset of zero, though.

+
Parameters
+ + + + +
firstUnicode code point of the first character
secondUnicode code point of the second character
characterSizeReference character size
+
+
+
Returns
Kerning value for first and second, in pixels
+ +
+
+ +
+
+ + + + + + + + +
int sf::Font::getLineSpacing (unsigned int characterSize) const
+
+ +

Get the line spacing.

+

Line spacing is the vertical offset to apply between two consecutive lines of text.

+
Parameters
+ + +
characterSizeReference character size
+
+
+
Returns
Line spacing, in pixels
+ +
+
+ +
+
+ + + + + + + + +
const Texture& sf::Font::getTexture (unsigned int characterSize) const
+
+ +

Retrieve the texture containing the loaded glyphs of a certain size.

+

The contents of the returned texture changes as more glyphs are requested, thus it is not very relevant. It is mainly used internally by sf::Text.

+
Parameters
+ + +
characterSizeReference character size
+
+
+
Returns
Texture containing the glyphs of the requested size
+ +
+
+ +
+
+ + + + + + + + +
bool sf::Font::loadFromFile (const std::string & filename)
+
+ +

Load the font from a file.

+

The supported font formats are: TrueType, Type 1, CFF, OpenType, SFNT, X11 PCF, Windows FNT, BDF, PFR and Type 42. Note that this function know nothing about the standard fonts installed on the user's system, thus you can't load them directly.

+
Parameters
+ + +
filenamePath of the font file to load
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromMemory, loadFromStream
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Font::loadFromMemory (const void * data,
std::size_t sizeInBytes 
)
+
+ +

Load the font from a file in memory.

+

The supported font formats are: TrueType, Type 1, CFF, OpenType, SFNT, X11 PCF, Windows FNT, BDF, PFR and Type 42. Warning: SFML cannot preload all the font data in this function, so the buffer pointed by data has to remain valid as long as the font is used.

+
Parameters
+ + + +
dataPointer to the file data in memory
sizeInBytesSize of the data to load, in bytes
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromFile, loadFromStream
+ +
+
+ +
+
+ + + + + + + + +
bool sf::Font::loadFromStream (InputStreamstream)
+
+ +

Load the font from a custom stream.

+

The supported font formats are: TrueType, Type 1, CFF, OpenType, SFNT, X11 PCF, Windows FNT, BDF, PFR and Type 42. Warning: SFML cannot preload all the font data in this function, so the contents of stream have to remain valid as long as the font is used.

+
Parameters
+ + +
streamSource stream to read from
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromFile, loadFromMemory
+ +
+
+ +
+
+ + + + + + + + +
Font& sf::Font::operator= (const Fontright)
+
+ +

Overload of assignment operator.

+
Parameters
+ + +
rightInstance to assign
+
+
+
Returns
Reference to self
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp-members.htm new file mode 100644 index 0000000..15f9318 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp-members.htm @@ -0,0 +1,77 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Ftp Member List
+
+
+ +

This is the complete list of members for sf::Ftp, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
Ascii enum valuesf::Ftp
Binary enum valuesf::Ftp
changeDirectory(const std::string &directory)sf::Ftp
connect(const IpAddress &server, unsigned short port=21, Time timeout=Time::Zero)sf::Ftp
createDirectory(const std::string &name)sf::Ftp
DataChannel (defined in sf::Ftp)sf::Ftpfriend
deleteDirectory(const std::string &name)sf::Ftp
deleteFile(const std::string &name)sf::Ftp
disconnect()sf::Ftp
download(const std::string &remoteFile, const std::string &localPath, TransferMode mode=Binary)sf::Ftp
Ebcdic enum valuesf::Ftp
getDirectoryListing(const std::string &directory="")sf::Ftp
getWorkingDirectory()sf::Ftp
keepAlive()sf::Ftp
login()sf::Ftp
login(const std::string &name, const std::string &password)sf::Ftp
NonCopyable()sf::NonCopyableinlineprivate
parentDirectory()sf::Ftp
renameFile(const std::string &file, const std::string &newName)sf::Ftp
TransferMode enum namesf::Ftp
upload(const std::string &localFile, const std::string &remotePath, TransferMode mode=Binary)sf::Ftp
~Ftp()sf::Ftp
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp.htm new file mode 100644 index 0000000..817fb3e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp.htm @@ -0,0 +1,693 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

A FTP client. + More...

+ +

#include <Ftp.hpp>

+
+Inheritance diagram for sf::Ftp:
+
+
+ + +sf::NonCopyable + +
+ + + + + + + + + + + +

+Classes

class  DirectoryResponse
 Specialization of FTP response returning a directory. More...
 
class  ListingResponse
 Specialization of FTP response returning a filename lisiting. More...
 
class  Response
 Define a FTP response. More...
 
+ + + + +

+Public Types

enum  TransferMode {
+  Binary, +
+  Ascii, +
+  Ebcdic +
+ }
 Enumeration of transfer modes. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ~Ftp ()
 Destructor. More...
 
Response connect (const IpAddress &server, unsigned short port=21, Time timeout=Time::Zero)
 Connect to the specified FTP server. More...
 
Response disconnect ()
 Close the connection with the server. More...
 
Response login ()
 Log in using an anonymous account. More...
 
Response login (const std::string &name, const std::string &password)
 Log in using a username and a password. More...
 
Response keepAlive ()
 Send a null command to keep the connection alive. More...
 
DirectoryResponse getWorkingDirectory ()
 Get the current working directory. More...
 
ListingResponse getDirectoryListing (const std::string &directory="")
 Get the contents of the given directory. More...
 
Response changeDirectory (const std::string &directory)
 Change the current working directory. More...
 
Response parentDirectory ()
 Go to the parent directory of the current one. More...
 
Response createDirectory (const std::string &name)
 Create a new directory. More...
 
Response deleteDirectory (const std::string &name)
 Remove an existing directory. More...
 
Response renameFile (const std::string &file, const std::string &newName)
 Rename an existing file. More...
 
Response deleteFile (const std::string &name)
 Remove an existing file. More...
 
Response download (const std::string &remoteFile, const std::string &localPath, TransferMode mode=Binary)
 Download a file from the server. More...
 
Response upload (const std::string &localFile, const std::string &remotePath, TransferMode mode=Binary)
 Upload a file to the server. More...
 
+ + + +

+Friends

+class DataChannel
 
+

Detailed Description

+

A FTP client.

+

sf::Ftp is a very simple FTP client that allows you to communicate with a FTP server.

+

The FTP protocol allows you to manipulate a remote file system (list files, upload, download, create, remove, ...).

+

Using the FTP client consists of 4 parts:

+
    +
  • Connecting to the FTP server
  • +
  • Logging in (either as a registered user or anonymously)
  • +
  • Sending commands to the server
  • +
  • Disconnecting (this part can be done implicitely by the destructor)
  • +
+

Every command returns a FTP response, which contains the status code as well as a message from the server. Some commands such as getWorkingDirectory and getDirectoryListing return additional data, and use a class derived from sf::Ftp::Response to provide this data.

+

All commands, especially upload and download, may take some time to complete. This is important to know if you don't want to block your application while the server is completing the task.

+

Usage example:

+
// Create a new FTP client
+
sf::Ftp ftp;
+
+
// Connect to the server
+
sf::Ftp::Response response = ftp.connect("ftp://ftp.myserver.com");
+
if (response.isOk())
+
std::cout << "Connected" << std::endl;
+
+
// Log in
+
response = ftp.login("laurent", "dF6Zm89D");
+
if (response.isOk())
+
std::cout << "Logged in" << std::endl;
+
+
// Print the working directory
+ +
if (directory.isOk())
+
std::cout << "Working directory: " << directory.getDirectory() << std::endl;
+
+
// Create a new directory
+
response = ftp.createDirectory("files");
+
if (response.isOk())
+
std::cout << "Created new directory" << std::endl;
+
+
// Upload a file to this new directory
+
response = ftp.upload("local-path/file.txt", "files", sf::Ftp::Ascii);
+
if (response.isOk())
+
std::cout << "File uploaded" << std::endl;
+
+
// Disconnect from the server (optional)
+
ftp.disconnect();
+
+

Definition at line 47 of file Ftp.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Ftp::TransferMode
+
+ +

Enumeration of transfer modes.

+ + + + +
Enumerator
Binary  +

Binary mode (file is transfered as a sequence of bytes)

+
Ascii  +

Text mode using ASCII encoding.

+
Ebcdic  +

Text mode using EBCDIC encoding.

+
+ +

Definition at line 55 of file Ftp.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Ftp::~Ftp ()
+
+ +

Destructor.

+

Automatically closes the connection with the server if it is still opened.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
Response sf::Ftp::changeDirectory (const std::string & directory)
+
+ +

Change the current working directory.

+

The new directory must be relative to the current one.

+
Parameters
+ + +
directoryNew working directory
+
+
+
Returns
Server response to the request
+
See Also
getWorkingDirectory, getDirectoryListing, parentDirectory
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Response sf::Ftp::connect (const IpAddressserver,
unsigned short port = 21,
Time timeout = Time::Zero 
)
+
+ +

Connect to the specified FTP server.

+

The port has a default value of 21, which is the standard port used by the FTP protocol. You shouldn't use a different value, unless you really know what you do. This function tries to connect to the server so it may take a while to complete, especially if the server is not reachable. To avoid blocking your application for too long, you can use a timeout. The default value, Time::Zero, means that the system timeout will be used (which is usually pretty long).

+
Parameters
+ + + + +
serverName or address of the FTP server to connect to
portPort used for the connection
timeoutMaximum time to wait
+
+
+
Returns
Server response to the request
+
See Also
disconnect
+ +
+
+ +
+
+ + + + + + + + +
Response sf::Ftp::createDirectory (const std::string & name)
+
+ +

Create a new directory.

+

The new directory is created as a child of the current working directory.

+
Parameters
+ + +
nameName of the directory to create
+
+
+
Returns
Server response to the request
+
See Also
deleteDirectory
+ +
+
+ +
+
+ + + + + + + + +
Response sf::Ftp::deleteDirectory (const std::string & name)
+
+ +

Remove an existing directory.

+

The directory to remove must be relative to the current working directory. Use this function with caution, the directory will be removed permanently!

+
Parameters
+ + +
nameName of the directory to remove
+
+
+
Returns
Server response to the request
+
See Also
createDirectory
+ +
+
+ +
+
+ + + + + + + + +
Response sf::Ftp::deleteFile (const std::string & name)
+
+ +

Remove an existing file.

+

The file name must be relative to the current working directory. Use this function with caution, the file will be removed permanently!

+
Parameters
+ + +
nameFile to remove
+
+
+
Returns
Server response to the request
+
See Also
renameFile
+ +
+
+ +
+
+ + + + + + + +
Response sf::Ftp::disconnect ()
+
+ +

Close the connection with the server.

+
Returns
Server response to the request
+
See Also
connect
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Response sf::Ftp::download (const std::string & remoteFile,
const std::string & localPath,
TransferMode mode = Binary 
)
+
+ +

Download a file from the server.

+

The filename of the distant file is relative to the current working directory of the server, and the local destination path is relative to the current directory of your application.

+
Parameters
+ + + + +
remoteFileFilename of the distant file to download
localPathWhere to put to file on the local computer
modeTransfer mode
+
+
+
Returns
Server response to the request
+
See Also
upload
+ +
+
+ +
+
+ + + + + + + + +
ListingResponse sf::Ftp::getDirectoryListing (const std::string & directory = "")
+
+ +

Get the contents of the given directory.

+

This function retrieves the sub-directories and files contained in the given directory. It is not recursive. The directory parameter is relative to the current working directory.

+
Parameters
+ + +
directoryDirectory to list
+
+
+
Returns
Server response to the request
+
See Also
getWorkingDirectory, changeDirectory, parentDirectory
+ +
+
+ +
+
+ + + + + + + +
DirectoryResponse sf::Ftp::getWorkingDirectory ()
+
+ +

Get the current working directory.

+

The working directory is the root path for subsequent operations involving directories and/or filenames.

+
Returns
Server response to the request
+
See Also
getDirectoryListing, changeDirectory, parentDirectory
+ +
+
+ +
+
+ + + + + + + +
Response sf::Ftp::keepAlive ()
+
+ +

Send a null command to keep the connection alive.

+

This command is useful because the server may close the connection automatically if no command is sent.

+
Returns
Server response to the request
+ +
+
+ +
+
+ + + + + + + +
Response sf::Ftp::login ()
+
+ +

Log in using an anonymous account.

+

Logging in is mandatory after connecting to the server. Users that are not logged in cannot perform any operation.

+
Returns
Server response to the request
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Response sf::Ftp::login (const std::string & name,
const std::string & password 
)
+
+ +

Log in using a username and a password.

+

Logging in is mandatory after connecting to the server. Users that are not logged in cannot perform any operation.

+
Parameters
+ + + +
nameUser name
passwordPassword
+
+
+
Returns
Server response to the request
+ +
+
+ +
+
+ + + + + + + +
Response sf::Ftp::parentDirectory ()
+
+ +

Go to the parent directory of the current one.

+
Returns
Server response to the request
+
See Also
getWorkingDirectory, getDirectoryListing, changeDirectory
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Response sf::Ftp::renameFile (const std::string & file,
const std::string & newName 
)
+
+ +

Rename an existing file.

+

The filenames must be relative to the current working directory.

+
Parameters
+ + + +
fileFile to rename
newNameNew name of the file
+
+
+
Returns
Server response to the request
+
See Also
deleteFile
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Response sf::Ftp::upload (const std::string & localFile,
const std::string & remotePath,
TransferMode mode = Binary 
)
+
+ +

Upload a file to the server.

+

The name of the local file is relative to the current working directory of your application, and the remote path is relative to the current directory of the FTP server.

+
Parameters
+ + + + +
localFilePath of the local file to upload
remotePathWhere to put to file on the server
modeTransfer mode
+
+
+
Returns
Server response to the request
+
See Also
download
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp.png new file mode 100644 index 0000000000000000000000000000000000000000..04916fce1efcad43e65abe386190e4bad78389ea GIT binary patch literal 488 zcmVP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004ZNklC5xFqR7zwc|e1u4Irwp;JHW0sW18`8LSaa@azQPDU&&xRCRZQk_FJ0{Y|Nh{*W z^LWb+>A7e#M7hyPQd!m&ez#6# zkFE1F_g-C+1?jL(RSzX**-ur17HyXNho|^C=siigpemb^w5z*FZ$WpF-h=wTh9q6q zmy$vV!9xJ2^#X8_8|n4(Lb;I!kQ2&}1mLCbi>Sv0@E_D;0(ic9OaRYUj|t%U>M;R4 zUp=PzGBa}#2H>Dh0=TM&l7{{%`*mCm(55q_?3suFjcO#t08&Wvn(0T9%>cVgs&5PC0vvj<~(|0Cv>8ypsT~s*?b& e%9Uhh=Aj?bNEMv + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Ftp::DirectoryResponse Member List
+
+
+ +

This is the complete list of members for sf::Ftp::DirectoryResponse, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BadCommandSequence enum valuesf::Ftp::Response
ClosingConnection enum valuesf::Ftp::Response
ClosingDataConnection enum valuesf::Ftp::Response
CommandNotImplemented enum valuesf::Ftp::Response
CommandUnknown enum valuesf::Ftp::Response
ConnectionClosed enum valuesf::Ftp::Response
ConnectionFailed enum valuesf::Ftp::Response
DataConnectionAlreadyOpened enum valuesf::Ftp::Response
DataConnectionOpened enum valuesf::Ftp::Response
DataConnectionUnavailable enum valuesf::Ftp::Response
DirectoryOk enum valuesf::Ftp::Response
DirectoryResponse(const Response &response)sf::Ftp::DirectoryResponse
DirectoryStatus enum valuesf::Ftp::Response
EnteringPassiveMode enum valuesf::Ftp::Response
FileActionAborted enum valuesf::Ftp::Response
FileActionOk enum valuesf::Ftp::Response
FilenameNotAllowed enum valuesf::Ftp::Response
FileStatus enum valuesf::Ftp::Response
FileUnavailable enum valuesf::Ftp::Response
getDirectory() const sf::Ftp::DirectoryResponse
getMessage() const sf::Ftp::Response
getStatus() const sf::Ftp::Response
HelpMessage enum valuesf::Ftp::Response
InsufficientStorageSpace enum valuesf::Ftp::Response
InvalidFile enum valuesf::Ftp::Response
InvalidResponse enum valuesf::Ftp::Response
isOk() const sf::Ftp::Response
LocalError enum valuesf::Ftp::Response
LoggedIn enum valuesf::Ftp::Response
NeedAccountToLogIn enum valuesf::Ftp::Response
NeedAccountToStore enum valuesf::Ftp::Response
NeedInformation enum valuesf::Ftp::Response
NeedPassword enum valuesf::Ftp::Response
NotEnoughMemory enum valuesf::Ftp::Response
NotLoggedIn enum valuesf::Ftp::Response
Ok enum valuesf::Ftp::Response
OpeningDataConnection enum valuesf::Ftp::Response
PageTypeUnknown enum valuesf::Ftp::Response
ParameterNotImplemented enum valuesf::Ftp::Response
ParametersUnknown enum valuesf::Ftp::Response
PointlessCommand enum valuesf::Ftp::Response
Response(Status code=InvalidResponse, const std::string &message="")sf::Ftp::Responseexplicit
RestartMarkerReply enum valuesf::Ftp::Response
ServiceReady enum valuesf::Ftp::Response
ServiceReadySoon enum valuesf::Ftp::Response
ServiceUnavailable enum valuesf::Ftp::Response
Status enum namesf::Ftp::Response
SystemStatus enum valuesf::Ftp::Response
SystemType enum valuesf::Ftp::Response
TransferAborted enum valuesf::Ftp::Response
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1DirectoryResponse.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1DirectoryResponse.htm new file mode 100644 index 0000000..e1225c2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1DirectoryResponse.htm @@ -0,0 +1,468 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Ftp::DirectoryResponse Class Reference
+
+
+ +

Specialization of FTP response returning a directory. + More...

+ +

#include <Ftp.hpp>

+
+Inheritance diagram for sf::Ftp::DirectoryResponse:
+
+
+ + +sf::Ftp::Response + +
+ + + + + +

+Public Types

enum  Status {
+  RestartMarkerReply = 110, +
+  ServiceReadySoon = 120, +
+  DataConnectionAlreadyOpened = 125, +
+  OpeningDataConnection = 150, +
+  Ok = 200, +
+  PointlessCommand = 202, +
+  SystemStatus = 211, +
+  DirectoryStatus = 212, +
+  FileStatus = 213, +
+  HelpMessage = 214, +
+  SystemType = 215, +
+  ServiceReady = 220, +
+  ClosingConnection = 221, +
+  DataConnectionOpened = 225, +
+  ClosingDataConnection = 226, +
+  EnteringPassiveMode = 227, +
+  LoggedIn = 230, +
+  FileActionOk = 250, +
+  DirectoryOk = 257, +
+  NeedPassword = 331, +
+  NeedAccountToLogIn = 332, +
+  NeedInformation = 350, +
+  ServiceUnavailable = 421, +
+  DataConnectionUnavailable = 425, +
+  TransferAborted = 426, +
+  FileActionAborted = 450, +
+  LocalError = 451, +
+  InsufficientStorageSpace = 452, +
+  CommandUnknown = 500, +
+  ParametersUnknown = 501, +
+  CommandNotImplemented = 502, +
+  BadCommandSequence = 503, +
+  ParameterNotImplemented = 504, +
+  NotLoggedIn = 530, +
+  NeedAccountToStore = 532, +
+  FileUnavailable = 550, +
+  PageTypeUnknown = 551, +
+  NotEnoughMemory = 552, +
+  FilenameNotAllowed = 553, +
+  InvalidResponse = 1000, +
+  ConnectionFailed = 1001, +
+  ConnectionClosed = 1002, +
+  InvalidFile = 1003 +
+ }
 Status codes possibly returned by a FTP response. More...
 
+ + + + + + + + + + + + + + + + +

+Public Member Functions

 DirectoryResponse (const Response &response)
 Default constructor. More...
 
const std::string & getDirectory () const
 Get the directory returned in the response. More...
 
bool isOk () const
 Check if the status code means a success. More...
 
Status getStatus () const
 Get the status code of the response. More...
 
const std::string & getMessage () const
 Get the full message contained in the response. More...
 
+

Detailed Description

+

Specialization of FTP response returning a directory.

+ +

Definition at line 188 of file Ftp.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum sf::Ftp::Response::Status
+
+inherited
+
+ +

Status codes possibly returned by a FTP response.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enumerator
RestartMarkerReply  +

Restart marker reply.

+
ServiceReadySoon  +

Service ready in N minutes.

+
DataConnectionAlreadyOpened  +

Data connection already opened, transfer starting.

+
OpeningDataConnection  +

File status ok, about to open data connection.

+
Ok  +

Command ok.

+
PointlessCommand  +

Command not implemented.

+
SystemStatus  +

System status, or system help reply.

+
DirectoryStatus  +

Directory status.

+
FileStatus  +

File status.

+
HelpMessage  +

Help message.

+
SystemType  +

NAME system type, where NAME is an official system name from the list in the Assigned Numbers document.

+
ServiceReady  +

Service ready for new user.

+
ClosingConnection  +

Service closing control connection.

+
DataConnectionOpened  +

Data connection open, no transfer in progress.

+
ClosingDataConnection  +

Closing data connection, requested file action successful.

+
EnteringPassiveMode  +

Entering passive mode.

+
LoggedIn  +

User logged in, proceed. Logged out if appropriate.

+
FileActionOk  +

Requested file action ok.

+
DirectoryOk  +

PATHNAME created.

+
NeedPassword  +

User name ok, need password.

+
NeedAccountToLogIn  +

Need account for login.

+
NeedInformation  +

Requested file action pending further information.

+
ServiceUnavailable  +

Service not available, closing control connection.

+
DataConnectionUnavailable  +

Can't open data connection.

+
TransferAborted  +

Connection closed, transfer aborted.

+
FileActionAborted  +

Requested file action not taken.

+
LocalError  +

Requested action aborted, local error in processing.

+
InsufficientStorageSpace  +

Requested action not taken; insufficient storage space in system, file unavailable.

+
CommandUnknown  +

Syntax error, command unrecognized.

+
ParametersUnknown  +

Syntax error in parameters or arguments.

+
CommandNotImplemented  +

Command not implemented.

+
BadCommandSequence  +

Bad sequence of commands.

+
ParameterNotImplemented  +

Command not implemented for that parameter.

+
NotLoggedIn  +

Not logged in.

+
NeedAccountToStore  +

Need account for storing files.

+
FileUnavailable  +

Requested action not taken, file unavailable.

+
PageTypeUnknown  +

Requested action aborted, page type unknown.

+
NotEnoughMemory  +

Requested file action aborted, exceeded storage allocation.

+
FilenameNotAllowed  +

Requested action not taken, file name not allowed.

+
InvalidResponse  +

Response is not a valid FTP one.

+
ConnectionFailed  +

Connection with server failed.

+
ConnectionClosed  +

Connection with server closed.

+
InvalidFile  +

Invalid file to upload / download.

+
+ +

Definition at line 74 of file Ftp.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
sf::Ftp::DirectoryResponse::DirectoryResponse (const Responseresponse)
+
+ +

Default constructor.

+
Parameters
+ + +
responseSource response
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
const std::string& sf::Ftp::DirectoryResponse::getDirectory () const
+
+ +

Get the directory returned in the response.

+
Returns
Directory name
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const std::string& sf::Ftp::Response::getMessage () const
+
+inherited
+
+ +

Get the full message contained in the response.

+
Returns
The response message
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Status sf::Ftp::Response::getStatus () const
+
+inherited
+
+ +

Get the status code of the response.

+
Returns
Status code
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::Ftp::Response::isOk () const
+
+inherited
+
+ +

Check if the status code means a success.

+

This function is defined for convenience, it is equivalent to testing if the status code is < 400.

+
Returns
True if the status is a success, false if it is a failure
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1DirectoryResponse.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1DirectoryResponse.png new file mode 100644 index 0000000000000000000000000000000000000000..0f475fa8b97ac6a7956c6e572d505243169c9fb8 GIT binary patch literal 686 zcmeAS@N?(olHy`uVBq!ia0vp^3xGI)gBeJ!Z0=(NQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;^ab-?+L5}PMS63SVQp&UwA8eX9+&nMIe2b5!Kiw2QQ-lBb?3fq{x@~Xb_*R( z{VWLs-P%U4Q@8*9vwFz!U|(!zaZw}Q3bpT8{ZS-Ras&C^_p!DdtC5&P=r z6%#&Pt5WM<_uu%TM8eER71v&wZuhi+7E#{Q>9O?{4R!PD8Z3#uH}Co#;H5jdd4 z&a&YIBO_2bLpN^jum23r9EoXy49})AGetaUU=X|7kbU*Z(Y=-ok==*aKI~x+cs+~d zgK=oX%co4NpURlOH~cMc;Vihn?#tYb#W5~7pUdyvvGwXzSS!#R6SsH^y7^w@6Pf~XYl&8#w+4K|ynKD27f{b85z^tyGkZbF{N z^S!$R&o|sZmyo#2w=h&CTy%co=4ylWJErV;w8-b~a; + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Ftp::ListingResponse Member List
+
+
+ +

This is the complete list of members for sf::Ftp::ListingResponse, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BadCommandSequence enum valuesf::Ftp::Response
ClosingConnection enum valuesf::Ftp::Response
ClosingDataConnection enum valuesf::Ftp::Response
CommandNotImplemented enum valuesf::Ftp::Response
CommandUnknown enum valuesf::Ftp::Response
ConnectionClosed enum valuesf::Ftp::Response
ConnectionFailed enum valuesf::Ftp::Response
DataConnectionAlreadyOpened enum valuesf::Ftp::Response
DataConnectionOpened enum valuesf::Ftp::Response
DataConnectionUnavailable enum valuesf::Ftp::Response
DirectoryOk enum valuesf::Ftp::Response
DirectoryStatus enum valuesf::Ftp::Response
EnteringPassiveMode enum valuesf::Ftp::Response
FileActionAborted enum valuesf::Ftp::Response
FileActionOk enum valuesf::Ftp::Response
FilenameNotAllowed enum valuesf::Ftp::Response
FileStatus enum valuesf::Ftp::Response
FileUnavailable enum valuesf::Ftp::Response
getListing() const sf::Ftp::ListingResponse
getMessage() const sf::Ftp::Response
getStatus() const sf::Ftp::Response
HelpMessage enum valuesf::Ftp::Response
InsufficientStorageSpace enum valuesf::Ftp::Response
InvalidFile enum valuesf::Ftp::Response
InvalidResponse enum valuesf::Ftp::Response
isOk() const sf::Ftp::Response
ListingResponse(const Response &response, const std::vector< char > &data)sf::Ftp::ListingResponse
LocalError enum valuesf::Ftp::Response
LoggedIn enum valuesf::Ftp::Response
NeedAccountToLogIn enum valuesf::Ftp::Response
NeedAccountToStore enum valuesf::Ftp::Response
NeedInformation enum valuesf::Ftp::Response
NeedPassword enum valuesf::Ftp::Response
NotEnoughMemory enum valuesf::Ftp::Response
NotLoggedIn enum valuesf::Ftp::Response
Ok enum valuesf::Ftp::Response
OpeningDataConnection enum valuesf::Ftp::Response
PageTypeUnknown enum valuesf::Ftp::Response
ParameterNotImplemented enum valuesf::Ftp::Response
ParametersUnknown enum valuesf::Ftp::Response
PointlessCommand enum valuesf::Ftp::Response
Response(Status code=InvalidResponse, const std::string &message="")sf::Ftp::Responseexplicit
RestartMarkerReply enum valuesf::Ftp::Response
ServiceReady enum valuesf::Ftp::Response
ServiceReadySoon enum valuesf::Ftp::Response
ServiceUnavailable enum valuesf::Ftp::Response
Status enum namesf::Ftp::Response
SystemStatus enum valuesf::Ftp::Response
SystemType enum valuesf::Ftp::Response
TransferAborted enum valuesf::Ftp::Response
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1ListingResponse.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1ListingResponse.htm new file mode 100644 index 0000000..aa484e4 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1ListingResponse.htm @@ -0,0 +1,479 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Ftp::ListingResponse Class Reference
+
+
+ +

Specialization of FTP response returning a filename lisiting. + More...

+ +

#include <Ftp.hpp>

+
+Inheritance diagram for sf::Ftp::ListingResponse:
+
+
+ + +sf::Ftp::Response + +
+ + + + + +

+Public Types

enum  Status {
+  RestartMarkerReply = 110, +
+  ServiceReadySoon = 120, +
+  DataConnectionAlreadyOpened = 125, +
+  OpeningDataConnection = 150, +
+  Ok = 200, +
+  PointlessCommand = 202, +
+  SystemStatus = 211, +
+  DirectoryStatus = 212, +
+  FileStatus = 213, +
+  HelpMessage = 214, +
+  SystemType = 215, +
+  ServiceReady = 220, +
+  ClosingConnection = 221, +
+  DataConnectionOpened = 225, +
+  ClosingDataConnection = 226, +
+  EnteringPassiveMode = 227, +
+  LoggedIn = 230, +
+  FileActionOk = 250, +
+  DirectoryOk = 257, +
+  NeedPassword = 331, +
+  NeedAccountToLogIn = 332, +
+  NeedInformation = 350, +
+  ServiceUnavailable = 421, +
+  DataConnectionUnavailable = 425, +
+  TransferAborted = 426, +
+  FileActionAborted = 450, +
+  LocalError = 451, +
+  InsufficientStorageSpace = 452, +
+  CommandUnknown = 500, +
+  ParametersUnknown = 501, +
+  CommandNotImplemented = 502, +
+  BadCommandSequence = 503, +
+  ParameterNotImplemented = 504, +
+  NotLoggedIn = 530, +
+  NeedAccountToStore = 532, +
+  FileUnavailable = 550, +
+  PageTypeUnknown = 551, +
+  NotEnoughMemory = 552, +
+  FilenameNotAllowed = 553, +
+  InvalidResponse = 1000, +
+  ConnectionFailed = 1001, +
+  ConnectionClosed = 1002, +
+  InvalidFile = 1003 +
+ }
 Status codes possibly returned by a FTP response. More...
 
+ + + + + + + + + + + + + + + + +

+Public Member Functions

 ListingResponse (const Response &response, const std::vector< char > &data)
 Default constructor. More...
 
const std::vector< std::string > & getListing () const
 Return the array of directory/file names. More...
 
bool isOk () const
 Check if the status code means a success. More...
 
Status getStatus () const
 Get the status code of the response. More...
 
const std::string & getMessage () const
 Get the full message contained in the response. More...
 
+

Detailed Description

+

Specialization of FTP response returning a filename lisiting.

+ +

Definition at line 221 of file Ftp.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum sf::Ftp::Response::Status
+
+inherited
+
+ +

Status codes possibly returned by a FTP response.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enumerator
RestartMarkerReply  +

Restart marker reply.

+
ServiceReadySoon  +

Service ready in N minutes.

+
DataConnectionAlreadyOpened  +

Data connection already opened, transfer starting.

+
OpeningDataConnection  +

File status ok, about to open data connection.

+
Ok  +

Command ok.

+
PointlessCommand  +

Command not implemented.

+
SystemStatus  +

System status, or system help reply.

+
DirectoryStatus  +

Directory status.

+
FileStatus  +

File status.

+
HelpMessage  +

Help message.

+
SystemType  +

NAME system type, where NAME is an official system name from the list in the Assigned Numbers document.

+
ServiceReady  +

Service ready for new user.

+
ClosingConnection  +

Service closing control connection.

+
DataConnectionOpened  +

Data connection open, no transfer in progress.

+
ClosingDataConnection  +

Closing data connection, requested file action successful.

+
EnteringPassiveMode  +

Entering passive mode.

+
LoggedIn  +

User logged in, proceed. Logged out if appropriate.

+
FileActionOk  +

Requested file action ok.

+
DirectoryOk  +

PATHNAME created.

+
NeedPassword  +

User name ok, need password.

+
NeedAccountToLogIn  +

Need account for login.

+
NeedInformation  +

Requested file action pending further information.

+
ServiceUnavailable  +

Service not available, closing control connection.

+
DataConnectionUnavailable  +

Can't open data connection.

+
TransferAborted  +

Connection closed, transfer aborted.

+
FileActionAborted  +

Requested file action not taken.

+
LocalError  +

Requested action aborted, local error in processing.

+
InsufficientStorageSpace  +

Requested action not taken; insufficient storage space in system, file unavailable.

+
CommandUnknown  +

Syntax error, command unrecognized.

+
ParametersUnknown  +

Syntax error in parameters or arguments.

+
CommandNotImplemented  +

Command not implemented.

+
BadCommandSequence  +

Bad sequence of commands.

+
ParameterNotImplemented  +

Command not implemented for that parameter.

+
NotLoggedIn  +

Not logged in.

+
NeedAccountToStore  +

Need account for storing files.

+
FileUnavailable  +

Requested action not taken, file unavailable.

+
PageTypeUnknown  +

Requested action aborted, page type unknown.

+
NotEnoughMemory  +

Requested file action aborted, exceeded storage allocation.

+
FilenameNotAllowed  +

Requested action not taken, file name not allowed.

+
InvalidResponse  +

Response is not a valid FTP one.

+
ConnectionFailed  +

Connection with server failed.

+
ConnectionClosed  +

Connection with server closed.

+
InvalidFile  +

Invalid file to upload / download.

+
+ +

Definition at line 74 of file Ftp.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
sf::Ftp::ListingResponse::ListingResponse (const Responseresponse,
const std::vector< char > & data 
)
+
+ +

Default constructor.

+
Parameters
+ + + +
responseSource response
dataData containing the raw listing
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
const std::vector<std::string>& sf::Ftp::ListingResponse::getListing () const
+
+ +

Return the array of directory/file names.

+
Returns
Array containing the requested listing
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const std::string& sf::Ftp::Response::getMessage () const
+
+inherited
+
+ +

Get the full message contained in the response.

+
Returns
The response message
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Status sf::Ftp::Response::getStatus () const
+
+inherited
+
+ +

Get the status code of the response.

+
Returns
Status code
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::Ftp::Response::isOk () const
+
+inherited
+
+ +

Check if the status code means a success.

+

This function is defined for convenience, it is equivalent to testing if the status code is < 400.

+
Returns
True if the status is a success, false if it is a failure
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1ListingResponse.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1ListingResponse.png new file mode 100644 index 0000000000000000000000000000000000000000..f8294550d71d479017d833dd6b4e0b05d540f913 GIT binary patch literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^{XiVR!3-qDuU?A=QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;rJ@5MAiN~|n_jz856t}T7soeSa zorM3S-1PKPp1*n*O#P+T+xq`fJzH@!uXnMgr`2n{xW|7oE39|-@z@B>Nm?{*u_r6vJOp-O8<5lItR`htb~(QvKPlN8I|e{pX!2reJ$t>yvL5>Bw%(*#1AWcBZM@SJnqF($zbk*KIphUU_R0gU@eqn{N)Rv%cBN nHSAvs_58J9t))|zU6gM*E_X`Jl + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Ftp::Response Member List
+
+
+ +

This is the complete list of members for sf::Ftp::Response, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BadCommandSequence enum valuesf::Ftp::Response
ClosingConnection enum valuesf::Ftp::Response
ClosingDataConnection enum valuesf::Ftp::Response
CommandNotImplemented enum valuesf::Ftp::Response
CommandUnknown enum valuesf::Ftp::Response
ConnectionClosed enum valuesf::Ftp::Response
ConnectionFailed enum valuesf::Ftp::Response
DataConnectionAlreadyOpened enum valuesf::Ftp::Response
DataConnectionOpened enum valuesf::Ftp::Response
DataConnectionUnavailable enum valuesf::Ftp::Response
DirectoryOk enum valuesf::Ftp::Response
DirectoryStatus enum valuesf::Ftp::Response
EnteringPassiveMode enum valuesf::Ftp::Response
FileActionAborted enum valuesf::Ftp::Response
FileActionOk enum valuesf::Ftp::Response
FilenameNotAllowed enum valuesf::Ftp::Response
FileStatus enum valuesf::Ftp::Response
FileUnavailable enum valuesf::Ftp::Response
getMessage() const sf::Ftp::Response
getStatus() const sf::Ftp::Response
HelpMessage enum valuesf::Ftp::Response
InsufficientStorageSpace enum valuesf::Ftp::Response
InvalidFile enum valuesf::Ftp::Response
InvalidResponse enum valuesf::Ftp::Response
isOk() const sf::Ftp::Response
LocalError enum valuesf::Ftp::Response
LoggedIn enum valuesf::Ftp::Response
NeedAccountToLogIn enum valuesf::Ftp::Response
NeedAccountToStore enum valuesf::Ftp::Response
NeedInformation enum valuesf::Ftp::Response
NeedPassword enum valuesf::Ftp::Response
NotEnoughMemory enum valuesf::Ftp::Response
NotLoggedIn enum valuesf::Ftp::Response
Ok enum valuesf::Ftp::Response
OpeningDataConnection enum valuesf::Ftp::Response
PageTypeUnknown enum valuesf::Ftp::Response
ParameterNotImplemented enum valuesf::Ftp::Response
ParametersUnknown enum valuesf::Ftp::Response
PointlessCommand enum valuesf::Ftp::Response
Response(Status code=InvalidResponse, const std::string &message="")sf::Ftp::Responseexplicit
RestartMarkerReply enum valuesf::Ftp::Response
ServiceReady enum valuesf::Ftp::Response
ServiceReadySoon enum valuesf::Ftp::Response
ServiceUnavailable enum valuesf::Ftp::Response
Status enum namesf::Ftp::Response
SystemStatus enum valuesf::Ftp::Response
SystemType enum valuesf::Ftp::Response
TransferAborted enum valuesf::Ftp::Response
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1Response.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1Response.htm new file mode 100644 index 0000000..48e45d2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1Response.htm @@ -0,0 +1,436 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Ftp::Response Class Reference
+
+
+ +

Define a FTP response. + More...

+ +

#include <Ftp.hpp>

+
+Inheritance diagram for sf::Ftp::Response:
+
+
+ + +sf::Ftp::DirectoryResponse +sf::Ftp::ListingResponse + +
+ + + + + +

+Public Types

enum  Status {
+  RestartMarkerReply = 110, +
+  ServiceReadySoon = 120, +
+  DataConnectionAlreadyOpened = 125, +
+  OpeningDataConnection = 150, +
+  Ok = 200, +
+  PointlessCommand = 202, +
+  SystemStatus = 211, +
+  DirectoryStatus = 212, +
+  FileStatus = 213, +
+  HelpMessage = 214, +
+  SystemType = 215, +
+  ServiceReady = 220, +
+  ClosingConnection = 221, +
+  DataConnectionOpened = 225, +
+  ClosingDataConnection = 226, +
+  EnteringPassiveMode = 227, +
+  LoggedIn = 230, +
+  FileActionOk = 250, +
+  DirectoryOk = 257, +
+  NeedPassword = 331, +
+  NeedAccountToLogIn = 332, +
+  NeedInformation = 350, +
+  ServiceUnavailable = 421, +
+  DataConnectionUnavailable = 425, +
+  TransferAborted = 426, +
+  FileActionAborted = 450, +
+  LocalError = 451, +
+  InsufficientStorageSpace = 452, +
+  CommandUnknown = 500, +
+  ParametersUnknown = 501, +
+  CommandNotImplemented = 502, +
+  BadCommandSequence = 503, +
+  ParameterNotImplemented = 504, +
+  NotLoggedIn = 530, +
+  NeedAccountToStore = 532, +
+  FileUnavailable = 550, +
+  PageTypeUnknown = 551, +
+  NotEnoughMemory = 552, +
+  FilenameNotAllowed = 553, +
+  InvalidResponse = 1000, +
+  ConnectionFailed = 1001, +
+  ConnectionClosed = 1002, +
+  InvalidFile = 1003 +
+ }
 Status codes possibly returned by a FTP response. More...
 
+ + + + + + + + + + + + + +

+Public Member Functions

 Response (Status code=InvalidResponse, const std::string &message="")
 Default constructor. More...
 
bool isOk () const
 Check if the status code means a success. More...
 
Status getStatus () const
 Get the status code of the response. More...
 
const std::string & getMessage () const
 Get the full message contained in the response. More...
 
+

Detailed Description

+

Define a FTP response.

+ +

Definition at line 66 of file Ftp.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Ftp::Response::Status
+
+ +

Status codes possibly returned by a FTP response.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enumerator
RestartMarkerReply  +

Restart marker reply.

+
ServiceReadySoon  +

Service ready in N minutes.

+
DataConnectionAlreadyOpened  +

Data connection already opened, transfer starting.

+
OpeningDataConnection  +

File status ok, about to open data connection.

+
Ok  +

Command ok.

+
PointlessCommand  +

Command not implemented.

+
SystemStatus  +

System status, or system help reply.

+
DirectoryStatus  +

Directory status.

+
FileStatus  +

File status.

+
HelpMessage  +

Help message.

+
SystemType  +

NAME system type, where NAME is an official system name from the list in the Assigned Numbers document.

+
ServiceReady  +

Service ready for new user.

+
ClosingConnection  +

Service closing control connection.

+
DataConnectionOpened  +

Data connection open, no transfer in progress.

+
ClosingDataConnection  +

Closing data connection, requested file action successful.

+
EnteringPassiveMode  +

Entering passive mode.

+
LoggedIn  +

User logged in, proceed. Logged out if appropriate.

+
FileActionOk  +

Requested file action ok.

+
DirectoryOk  +

PATHNAME created.

+
NeedPassword  +

User name ok, need password.

+
NeedAccountToLogIn  +

Need account for login.

+
NeedInformation  +

Requested file action pending further information.

+
ServiceUnavailable  +

Service not available, closing control connection.

+
DataConnectionUnavailable  +

Can't open data connection.

+
TransferAborted  +

Connection closed, transfer aborted.

+
FileActionAborted  +

Requested file action not taken.

+
LocalError  +

Requested action aborted, local error in processing.

+
InsufficientStorageSpace  +

Requested action not taken; insufficient storage space in system, file unavailable.

+
CommandUnknown  +

Syntax error, command unrecognized.

+
ParametersUnknown  +

Syntax error in parameters or arguments.

+
CommandNotImplemented  +

Command not implemented.

+
BadCommandSequence  +

Bad sequence of commands.

+
ParameterNotImplemented  +

Command not implemented for that parameter.

+
NotLoggedIn  +

Not logged in.

+
NeedAccountToStore  +

Need account for storing files.

+
FileUnavailable  +

Requested action not taken, file unavailable.

+
PageTypeUnknown  +

Requested action aborted, page type unknown.

+
NotEnoughMemory  +

Requested file action aborted, exceeded storage allocation.

+
FilenameNotAllowed  +

Requested action not taken, file name not allowed.

+
InvalidResponse  +

Response is not a valid FTP one.

+
ConnectionFailed  +

Connection with server failed.

+
ConnectionClosed  +

Connection with server closed.

+
InvalidFile  +

Invalid file to upload / download.

+
+ +

Definition at line 74 of file Ftp.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sf::Ftp::Response::Response (Status code = InvalidResponse,
const std::string & message = "" 
)
+
+explicit
+
+ +

Default constructor.

+

This constructor is used by the FTP client to build the response.

+
Parameters
+ + + +
codeResponse status code
messageResponse message
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
const std::string& sf::Ftp::Response::getMessage () const
+
+ +

Get the full message contained in the response.

+
Returns
The response message
+ +
+
+ +
+
+ + + + + + + +
Status sf::Ftp::Response::getStatus () const
+
+ +

Get the status code of the response.

+
Returns
Status code
+ +
+
+ +
+
+ + + + + + + +
bool sf::Ftp::Response::isOk () const
+
+ +

Check if the status code means a success.

+

This function is defined for convenience, it is equivalent to testing if the status code is < 400.

+
Returns
True if the status is a success, false if it is a failure
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1Response.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Ftp_1_1Response.png new file mode 100644 index 0000000000000000000000000000000000000000..d56a74ef58442c614498b407ced3a28995a3f677 GIT binary patch literal 970 zcmeAS@N?(olHy`uVBq!ia0y~yVDtjA12~w0q{rDabwElYz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opf_`$VSF;!#3}u?}K#S3*U@C*!oxrCt z-pda~`Tgl81#k^>x~*qbGKqN|HGsWp1lIUF&k+w9Q7Ze?4WGes+JuF3CNv@WV#kzIK;H>7e^~s5f$zZb z9bOFFzwX5{NdSGQQ!%4tI>Y?OT8upf6B*QiQo=E+4V>$Q4zQpZ0t$*h%TDck|GS%^ zAZ^{|Mm*~97-P_H(juVq(wXDn1a4O;m6v;#XsN#3v%|~N=wPVVB+hj~lYoIfDaC2! zrq|DAKi_}+|D;RVIdNq@cPDL0n5W`-{6^?b`9i_S)D!BA>sI!hKFjFkwVt=vy6HZ5 zsefwn5o^Udfdtp5uUn6W8}B{se){oxo{E~y=l5k^+MqlsG){PO?1x?RkMaF2O!}m| z?d=L1k&i!qthBGam(Hjc%J=%{{CRsG8)jenmYHFu8o&5W3{ThTFnJ@k4eLHd9C`{z9{9&AFwbHo^O&6(;}5T>s#$p!&(kC)wGo>)9iG3p`f^-ab3&%8_4Bwxya2 z$4ttS>8{BAa`67&+^N#V{tGuvTlqX>r|DOj-J2$@j1STD{NKAh#Oo3;NvNJ=3D@)l orU_`=@K052DM%6mlm8g+-*EmcG-uBTV8&zcboFyt=akR{0B1+X$N&HU literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource-members.htm new file mode 100644 index 0000000..35884bd --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource-members.htm @@ -0,0 +1,58 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::GlResource Member List
+
+
+ +

This is the complete list of members for sf::GlResource, including all inherited members.

+ + + + +
ensureGlContext()sf::GlResourceprotectedstatic
GlResource()sf::GlResourceprotected
~GlResource()sf::GlResourceprotected
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource.htm new file mode 100644 index 0000000..a02516f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource.htm @@ -0,0 +1,175 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Base class for classes that require an OpenGL context. + More...

+ +

#include <GlResource.hpp>

+
+Inheritance diagram for sf::GlResource:
+
+
+ + +sf::Context +sf::Shader +sf::Texture +sf::Window +sf::RenderWindow + +
+ + + + + + + + +

+Protected Member Functions

 GlResource ()
 Default constructor. More...
 
 ~GlResource ()
 Destructor. More...
 
+ + + + +

+Static Protected Member Functions

static void ensureGlContext ()
 Make sure that a valid OpenGL context exists in the current thread. More...
 
+

Detailed Description

+

Base class for classes that require an OpenGL context.

+

This class is for internal use only, it must be the base of every class that requires a valid OpenGL context in order to work.

+ +

Definition at line 40 of file GlResource.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
sf::GlResource::GlResource ()
+
+protected
+
+ +

Default constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
sf::GlResource::~GlResource ()
+
+protected
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
static void sf::GlResource::ensureGlContext ()
+
+staticprotected
+
+ +

Make sure that a valid OpenGL context exists in the current thread.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1GlResource.png new file mode 100644 index 0000000000000000000000000000000000000000..6b62eeec4dfa54b6ca47ba579e25c8f65eb772d3 GIT binary patch literal 1483 zcmeAS@N?(olHy`uVBq!ia0y~yV0;8*cW^KRNgjO(NgyQ=;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z#8T0;uuoF`1bDGs@VoS4iCjIrhl(L z=`Ce<#$9TX;P$Uu3OOwJR@F@SBVMN(d%ZNYktHjz`ed+Sh^nabKuB_+wOXH;7;wM-TBXFAN-fb@p&RpyLFfN;^2#7)rAWSR#*Hh)oOd6 zzCCcg$a=1_u)Ux5hS~TWu33__;?%iG)8AGuuK4`+dMFQfkYUKve{p+WTyg*QXw!;f z{kHiB|GL>)?(NYLy>IqBF{{wna&Fr;C!p(>ew(yBX@!?o+cM9i7fe=4%u+-3&aQQ@ zS21z^DX~*%3n!!9!`}H)+eRfScHD`rieNNmAY-}Qfy?Y zQ;s}3!GUT2#5GA4$Bwge%F9n}SXGm3nv&t6&^Y~MP*WF3_40{JSwv52wXygqdvj_{ z3gzLP<2FqwL}j&vkVUVK>I#oALzM!lNUs2(F&+<0HceTew7&h_?|tjN+CXH7ozfzu z)J=kdqCexEpIf=R?3o=RBlxi{sLkGYm!+`5M$-i1G} z)OY-JdXai=_xi7$UF+Wme`M2N_49MxtOD!1x?jX6?G^qlR{ZN#(Z4_5ZM*d++e=l6 zR`%@mDvbO8^-D*GD7*9fCpO_9=lq=W>F)FgD;|Bk_%u|qnq$+vVlUD4^R2h7w|r)? z^vsu@3$ssrUfHeDulcMw)K02u_UA`ge73yv7FOKWnf~(Klj>QIzAj$Y-oN|FFaF94 z2l}+{WnXzMvb!TfSa9R%#G|i!KYpu^uPrf@7ZltrlX2y^2>;ukHb-~&NA2-({ps^i zS?S#;pT+kA_jna9{C@D=7oWxJ)>M4`y?%AY?eoe?*JQ%>i2v?(+3qSYxbZ>7i%_BB z?R_u09w&UScy;uiTit}8KZIOd-V~PT*KIlX`P>JE2i(;k7hlNFxbj_Ox+dR3|GX>h zBI|?e1b#)FmQwEL&3xCLe8ljL>HqcdtJ0;v&N#31Ed4I~>C&Z=l}jtspVkM;2o@Uoo4o4iFvc69>Y~7?o)3#^7gun6|BO3Yd;hzs=A^g4 zlyUOEoRrXynSUBtqJa7H^q-%T`xYh!8E!dqw7{yZ449BDG%=ETkfDh$&U`?UoG)81+Kbv*Jo`axJiG(LNq#vRX(xof0f{VtlvzJBp)t$VY#*Kh)}d1`=-l-BxF z6EjN`b1na$+Y`cb|HPV#n=9J)?zoX=F8{bXK;-k@{>tTkM+2sA3S9r~(ZZ`@rPfzp zy|EWP+@BT_lcn+PQDVyKyvSd#_wD;75#JQTv-ReiqtQoCSH+mWvhKS6`ItMffH<`* zP<&In-`*Fuk3Oh9YW+FLu!g&MabHJ;J*K~q3Xy&9f3Nz(nj%tkdaI@v53uBA@O1Ta JS?83{1OWb4$m#$9 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Glyph-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Glyph-members.htm new file mode 100644 index 0000000..94d4719 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Glyph-members.htm @@ -0,0 +1,59 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Glyph Member List
+
+
+ +

This is the complete list of members for sf::Glyph, including all inherited members.

+ + + + + +
advancesf::Glyph
boundssf::Glyph
Glyph()sf::Glyphinline
textureRectsf::Glyph
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Glyph.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Glyph.htm new file mode 100644 index 0000000..fcdab58 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Glyph.htm @@ -0,0 +1,172 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Structure describing a glyph. + More...

+ +

#include <Glyph.hpp>

+ + + + + +

+Public Member Functions

 Glyph ()
 Default constructor. More...
 
+ + + + + + + + + + +

+Public Attributes

int advance
 Offset to move horizontically to the next character. More...
 
IntRect bounds
 Bounding rectangle of the glyph, in coordinates relative to the baseline. More...
 
IntRect textureRect
 Texture coordinates of the glyph inside the font's texture. More...
 
+

Detailed Description

+

Structure describing a glyph.

+

A glyph is the visual representation of a character.

+

The sf::Glyph structure provides the information needed to handle the glyph:

+
    +
  • its coordinates in the font's texture
  • +
  • its bounding rectangle
  • +
  • the offset to apply to get the starting position of the next glyph
  • +
+
See Also
sf::Font
+ +

Definition at line 41 of file Glyph.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
sf::Glyph::Glyph ()
+
+inline
+
+ +

Default constructor.

+ +

Definition at line 49 of file Glyph.hpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
int sf::Glyph::advance
+
+ +

Offset to move horizontically to the next character.

+ +

Definition at line 54 of file Glyph.hpp.

+ +
+
+ +
+
+ + + + +
IntRect sf::Glyph::bounds
+
+ +

Bounding rectangle of the glyph, in coordinates relative to the baseline.

+ +

Definition at line 55 of file Glyph.hpp.

+ +
+
+ +
+
+ + + + +
IntRect sf::Glyph::textureRect
+
+ +

Texture coordinates of the glyph inside the font's texture.

+ +

Definition at line 56 of file Glyph.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http-members.htm new file mode 100644 index 0000000..7293824 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http-members.htm @@ -0,0 +1,60 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Http Member List
+
+
+ +

This is the complete list of members for sf::Http, including all inherited members.

+ + + + + + +
Http()sf::Http
Http(const std::string &host, unsigned short port=0)sf::Http
NonCopyable()sf::NonCopyableinlineprivate
sendRequest(const Request &request, Time timeout=Time::Zero)sf::Http
setHost(const std::string &host, unsigned short port=0)sf::Http
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http.htm new file mode 100644 index 0000000..19c40f2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http.htm @@ -0,0 +1,275 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Http Class Reference
+
+
+ +

A HTTP client. + More...

+ +

#include <Http.hpp>

+
+Inheritance diagram for sf::Http:
+
+
+ + +sf::NonCopyable + +
+ + + + + + + + +

+Classes

class  Request
 Define a HTTP request. More...
 
class  Response
 Define a HTTP response. More...
 
+ + + + + + + + + + + + + +

+Public Member Functions

 Http ()
 Default constructor. More...
 
 Http (const std::string &host, unsigned short port=0)
 Construct the HTTP client with the target host. More...
 
void setHost (const std::string &host, unsigned short port=0)
 Set the target host. More...
 
Response sendRequest (const Request &request, Time timeout=Time::Zero)
 Send a HTTP request and return the server's response. More...
 
+

Detailed Description

+

A HTTP client.

+

sf::Http is a very simple HTTP client that allows you to communicate with a web server.

+

You can retrieve web pages, send data to an interactive resource, download a remote file, etc.

+

The HTTP client is split into 3 classes:

+ +

sf::Http::Request builds the request that will be sent to the server. A request is made of:

+
    +
  • a method (what you want to do)
  • +
  • a target URI (usually the name of the web page or file)
  • +
  • one or more header fields (options that you can pass to the server)
  • +
  • an optional body (for POST requests)
  • +
+

sf::Http::Response parse the response from the web server and provides getters to read them. The response contains:

+
    +
  • a status code
  • +
  • header fields (that may be answers to the ones that you requested)
  • +
  • a body, which contains the contents of the requested resource
  • +
+

sf::Http provides a simple function, SendRequest, to send a sf::Http::Request and return the corresponding sf::Http::Response from the server.

+

Usage example:

+
// Create a new HTTP client
+
sf::Http http;
+
+
// We'll work on http://www.sfml-dev.org
+
http.setHost("http://www.sfml-dev.org");
+
+
// Prepare a request to get the 'features.php' page
+
sf::Http::Request request("features.php");
+
+
// Send the request
+
sf::Http::Response response = http.sendRequest(request);
+
+
// Check the status code and display the result
+ +
if (status == sf::Http::Response::Ok)
+
{
+
std::cout << response.getBody() << std::endl;
+
}
+
else
+
{
+
std::cout << "Error " << status << std::endl;
+
}
+
+

Definition at line 46 of file Http.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Http::Http ()
+
+ +

Default constructor.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
sf::Http::Http (const std::string & host,
unsigned short port = 0 
)
+
+ +

Construct the HTTP client with the target host.

+

This is equivalent to calling setHost(host, port). The port has a default value of 0, which means that the HTTP client will use the right port according to the protocol used (80 for HTTP, 443 for HTTPS). You should leave it like this unless you really need a port other than the standard one, or use an unknown protocol.

+
Parameters
+ + + +
hostWeb server to connect to
portPort to use for connection
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Response sf::Http::sendRequest (const Requestrequest,
Time timeout = Time::Zero 
)
+
+ +

Send a HTTP request and return the server's response.

+

You must have a valid host before sending a request (see setHost). Any missing mandatory header field in the request will be added with an appropriate value. Warning: this function waits for the server's response and may not return instantly; use a thread if you don't want to block your application, or use a timeout to limit the time to wait. A value of Time::Zero means that the client will use the system defaut timeout (which is usually pretty long).

+
Parameters
+ + + +
requestRequest to send
timeoutMaximum time to wait
+
+
+
Returns
Server's response
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Http::setHost (const std::string & host,
unsigned short port = 0 
)
+
+ +

Set the target host.

+

This function just stores the host address and port, it doesn't actually connect to it until you send a request. The port has a default value of 0, which means that the HTTP client will use the right port according to the protocol used (80 for HTTP, 443 for HTTPS). You should leave it like this unless you really need a port other than the standard one, or use an unknown protocol.

+
Parameters
+ + + +
hostWeb server to connect to
portPort to use for connection
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http.png new file mode 100644 index 0000000000000000000000000000000000000000..6f251bf903c1077b22f6358c20cb381ca2106064 GIT binary patch literal 489 zcmVvTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004aNkl^Tkp9sEh&!=q@g1xR>-SV9ZuAnfs^gh;pM}lFG8K@SAli zdu*MbrT6NRG^B2wsvb(rvY)C1HEovcr>FSq^qwRgP?b$d+SFO3kD#+ipF!haLy`{b zOGzPw;30rt>jB^*H`3$bg>oZJASaX`3BXI=7tx3b;6G@@1aN$85clNgHbS9~({dJ_a%dV?a&R*LQvF%RmJ%EmOZZJpyM>R+Q fN99T~GxN|7D7h7_*Fj<<00000NkvXXu0mjfNzL5L literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Request-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Request-members.htm new file mode 100644 index 0000000..b486974 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Request-members.htm @@ -0,0 +1,66 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Http::Request Member List
+
+
+ +

This is the complete list of members for sf::Http::Request, including all inherited members.

+ + + + + + + + + + + + +
Get enum valuesf::Http::Request
Head enum valuesf::Http::Request
Http (defined in sf::Http::Request)sf::Http::Requestfriend
Method enum namesf::Http::Request
Post enum valuesf::Http::Request
Request(const std::string &uri="/", Method method=Get, const std::string &body="")sf::Http::Request
setBody(const std::string &body)sf::Http::Request
setField(const std::string &field, const std::string &value)sf::Http::Request
setHttpVersion(unsigned int major, unsigned int minor)sf::Http::Request
setMethod(Method method)sf::Http::Request
setUri(const std::string &uri)sf::Http::Request
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Request.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Request.htm new file mode 100644 index 0000000..904478f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Request.htm @@ -0,0 +1,330 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Http::Request Class Reference
+
+
+ +

Define a HTTP request. + More...

+ +

#include <Http.hpp>

+ + + + + +

+Public Types

enum  Method {
+  Get, +
+  Post, +
+  Head +
+ }
 Enumerate the available HTTP methods for a request. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Request (const std::string &uri="/", Method method=Get, const std::string &body="")
 Default constructor. More...
 
void setField (const std::string &field, const std::string &value)
 Set the value of a field. More...
 
void setMethod (Method method)
 Set the request method. More...
 
void setUri (const std::string &uri)
 Set the requested URI. More...
 
void setHttpVersion (unsigned int major, unsigned int minor)
 Set the HTTP version for the request. More...
 
void setBody (const std::string &body)
 Set the body of the request. More...
 
+ + + +

+Friends

+class Http
 
+

Detailed Description

+

Define a HTTP request.

+ +

Definition at line 54 of file Http.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Http::Request::Method
+
+ +

Enumerate the available HTTP methods for a request.

+ + + + +
Enumerator
Get  +

Request in get mode, standard method to retrieve a page.

+
Post  +

Request in post mode, usually to send data to a page.

+
Head  +

Request a page's header only.

+
+ +

Definition at line 62 of file Http.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
sf::Http::Request::Request (const std::string & uri = "/",
Method method = Get,
const std::string & body = "" 
)
+
+ +

Default constructor.

+

This constructor creates a GET request, with the root URI ("/") and an empty body.

+
Parameters
+ + + + +
uriTarget URI
methodMethod to use for the request
bodyContent of the request's body
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void sf::Http::Request::setBody (const std::string & body)
+
+ +

Set the body of the request.

+

The body of a request is optional and only makes sense for POST requests. It is ignored for all other methods. The body is empty by default.

+
Parameters
+ + +
bodyContent of the body
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Http::Request::setField (const std::string & field,
const std::string & value 
)
+
+ +

Set the value of a field.

+

The field is created if it doesn't exist. The name of the field is case insensitive. By default, a request doesn't contain any field (but the mandatory fields are added later by the HTTP client when sending the request).

+
Parameters
+ + + +
fieldName of the field to set
valueValue of the field
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Http::Request::setHttpVersion (unsigned int major,
unsigned int minor 
)
+
+ +

Set the HTTP version for the request.

+

The HTTP version is 1.0 by default.

+
Parameters
+ + + +
majorMajor HTTP version number
minorMinor HTTP version number
+
+
+ +
+
+ +
+
+ + + + + + + + +
void sf::Http::Request::setMethod (Method method)
+
+ +

Set the request method.

+

See the Method enumeration for a complete list of all the availale methods. The method is Http::Request::Get by default.

+
Parameters
+ + +
methodMethod to use for the request
+
+
+ +
+
+ +
+
+ + + + + + + + +
void sf::Http::Request::setUri (const std::string & uri)
+
+ +

Set the requested URI.

+

The URI is the resource (usually a web page or a file) that you want to get or post. The URI is "/" (the root page) by default.

+
Parameters
+ + +
uriURI to request, relative to the host
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Response-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Response-members.htm new file mode 100644 index 0000000..d744fa4 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Response-members.htm @@ -0,0 +1,86 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Http::Response Member List
+
+ + + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Response.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Response.htm new file mode 100644 index 0000000..4411dfe --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Http_1_1Response.htm @@ -0,0 +1,366 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Http::Response Class Reference
+
+
+ +

Define a HTTP response. + More...

+ +

#include <Http.hpp>

+ + + + + +

+Public Types

enum  Status {
+  Ok = 200, +
+  Created = 201, +
+  Accepted = 202, +
+  NoContent = 204, +
+  ResetContent = 205, +
+  PartialContent = 206, +
+  MultipleChoices = 300, +
+  MovedPermanently = 301, +
+  MovedTemporarily = 302, +
+  NotModified = 304, +
+  BadRequest = 400, +
+  Unauthorized = 401, +
+  Forbidden = 403, +
+  NotFound = 404, +
+  RangeNotSatisfiable = 407, +
+  InternalServerError = 500, +
+  NotImplemented = 501, +
+  BadGateway = 502, +
+  ServiceNotAvailable = 503, +
+  GatewayTimeout = 504, +
+  VersionNotSupported = 505, +
+  InvalidResponse = 1000, +
+  ConnectionFailed = 1001 +
+ }
 Enumerate all the valid status codes for a response. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Response ()
 Default constructor. More...
 
const std::string & getField (const std::string &field) const
 Get the value of a field. More...
 
Status getStatus () const
 Get the response status code. More...
 
unsigned int getMajorHttpVersion () const
 Get the major HTTP version number of the response. More...
 
unsigned int getMinorHttpVersion () const
 Get the minor HTTP version number of the response. More...
 
const std::string & getBody () const
 Get the body of the response. More...
 
+ + + +

+Friends

+class Http
 
+

Detailed Description

+

Define a HTTP response.

+ +

Definition at line 191 of file Http.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Http::Response::Status
+
+ +

Enumerate all the valid status codes for a response.

+ + + + + + + + + + + + + + + + + + + + + + + + +
Enumerator
Ok  +

Most common code returned when operation was successful.

+
Created  +

The resource has successfully been created.

+
Accepted  +

The request has been accepted, but will be processed later by the server.

+
NoContent  +

The server didn't send any data in return.

+
ResetContent  +

The server informs the client that it should clear the view (form) that caused the request to be sent.

+
PartialContent  +

The server has sent a part of the resource, as a response to a partial GET request.

+
MultipleChoices  +

The requested page can be accessed from several locations.

+
MovedPermanently  +

The requested page has permanently moved to a new location.

+
MovedTemporarily  +

The requested page has temporarily moved to a new location.

+
NotModified  +

For conditionnal requests, means the requested page hasn't changed and doesn't need to be refreshed.

+
BadRequest  +

The server couldn't understand the request (syntax error)

+
Unauthorized  +

The requested page needs an authentification to be accessed.

+
Forbidden  +

The requested page cannot be accessed at all, even with authentification.

+
NotFound  +

The requested page doesn't exist.

+
RangeNotSatisfiable  +

The server can't satisfy the partial GET request (with a "Range" header field)

+
InternalServerError  +

The server encountered an unexpected error.

+
NotImplemented  +

The server doesn't implement a requested feature.

+
BadGateway  +

The gateway server has received an error from the source server.

+
ServiceNotAvailable  +

The server is temporarily unavailable (overloaded, in maintenance, ...)

+
GatewayTimeout  +

The gateway server couldn't receive a response from the source server.

+
VersionNotSupported  +

The server doesn't support the requested HTTP version.

+
InvalidResponse  +

Response is not a valid HTTP one.

+
ConnectionFailed  +

Connection with server failed.

+
+ +

Definition at line 199 of file Http.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Http::Response::Response ()
+
+ +

Default constructor.

+

Constructs an empty response.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
const std::string& sf::Http::Response::getBody () const
+
+ +

Get the body of the response.

+

The body of a response may contain:

+
    +
  • the requested page (for GET requests)
  • +
  • a response from the server (for POST requests)
  • +
  • nothing (for HEAD requests)
  • +
  • an error message (in case of an error)
  • +
+
Returns
The response body
+ +
+
+ +
+
+ + + + + + + + +
const std::string& sf::Http::Response::getField (const std::string & field) const
+
+ +

Get the value of a field.

+

If the field field is not found in the response header, the empty string is returned. This function uses case-insensitive comparisons.

+
Parameters
+ + +
fieldName of the field to get
+
+
+
Returns
Value of the field, or empty string if not found
+ +
+
+ +
+
+ + + + + + + +
unsigned int sf::Http::Response::getMajorHttpVersion () const
+
+ +

Get the major HTTP version number of the response.

+
Returns
Major HTTP version number
+
See Also
getMinorHttpVersion
+ +
+
+ +
+
+ + + + + + + +
unsigned int sf::Http::Response::getMinorHttpVersion () const
+
+ +

Get the minor HTTP version number of the response.

+
Returns
Minor HTTP version number
+
See Also
getMajorHttpVersion
+ +
+
+ +
+
+ + + + + + + +
Status sf::Http::Response::getStatus () const
+
+ +

Get the response status code.

+

The status code should be the first thing to be checked after receiving a response, it defines whether it is a success, a failure or anything else (see the Status enumeration).

+
Returns
Status code of the response
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Image-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Image-members.htm new file mode 100644 index 0000000..a2f39b9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Image-members.htm @@ -0,0 +1,70 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Image Member List
+
+
+ +

This is the complete list of members for sf::Image, including all inherited members.

+ + + + + + + + + + + + + + + + +
copy(const Image &source, unsigned int destX, unsigned int destY, const IntRect &sourceRect=IntRect(0, 0, 0, 0), bool applyAlpha=false)sf::Image
create(unsigned int width, unsigned int height, const Color &color=Color(0, 0, 0))sf::Image
create(unsigned int width, unsigned int height, const Uint8 *pixels)sf::Image
createMaskFromColor(const Color &color, Uint8 alpha=0)sf::Image
flipHorizontally()sf::Image
flipVertically()sf::Image
getPixel(unsigned int x, unsigned int y) const sf::Image
getPixelsPtr() const sf::Image
getSize() const sf::Image
Image()sf::Image
loadFromFile(const std::string &filename)sf::Image
loadFromMemory(const void *data, std::size_t size)sf::Image
loadFromStream(InputStream &stream)sf::Image
saveToFile(const std::string &filename) const sf::Image
setPixel(unsigned int x, unsigned int y, const Color &color)sf::Image
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Image.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Image.htm new file mode 100644 index 0000000..858a697 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Image.htm @@ -0,0 +1,613 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Image Class Reference
+
+
+ +

Class for loading, manipulating and saving images. + More...

+ +

#include <Image.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Image ()
 Default constructor. More...
 
void create (unsigned int width, unsigned int height, const Color &color=Color(0, 0, 0))
 Create the image and fill it with a unique color. More...
 
void create (unsigned int width, unsigned int height, const Uint8 *pixels)
 Create the image from an array of pixels. More...
 
bool loadFromFile (const std::string &filename)
 Load the image from a file on disk. More...
 
bool loadFromMemory (const void *data, std::size_t size)
 Load the image from a file in memory. More...
 
bool loadFromStream (InputStream &stream)
 Load the image from a custom stream. More...
 
bool saveToFile (const std::string &filename) const
 Save the image to a file on disk. More...
 
Vector2u getSize () const
 Return the size (width and height) of the image. More...
 
void createMaskFromColor (const Color &color, Uint8 alpha=0)
 Create a transparency mask from a specified color-key. More...
 
void copy (const Image &source, unsigned int destX, unsigned int destY, const IntRect &sourceRect=IntRect(0, 0, 0, 0), bool applyAlpha=false)
 Copy pixels from another image onto this one. More...
 
void setPixel (unsigned int x, unsigned int y, const Color &color)
 Change the color of a pixel. More...
 
Color getPixel (unsigned int x, unsigned int y) const
 Get the color of a pixel. More...
 
const Uint8 * getPixelsPtr () const
 Get a read-only pointer to the array of pixels. More...
 
void flipHorizontally ()
 Flip the image horizontally (left <-> right) More...
 
void flipVertically ()
 Flip the image vertically (top <-> bottom) More...
 
+

Detailed Description

+

Class for loading, manipulating and saving images.

+

sf::Image is an abstraction to manipulate images as bidimensional arrays of pixels.

+

The class provides functions to load, read, write and save pixels, as well as many other useful functions.

+

sf::Image can handle a unique internal representation of pixels, which is RGBA 32 bits. This means that a pixel must be composed of 8 bits red, green, blue and alpha channels – just like a sf::Color. All the functions that return an array of pixels follow this rule, and all parameters that you pass to sf::Image functions (such as loadFromPixels) must use this representation as well.

+

A sf::Image can be copied, but it is a heavy resource and if possible you should always use [const] references to pass or return them to avoid useless copies.

+

Usage example:

+
// Load an image file from a file
+
sf::Image background;
+
if (!background.loadFromFile("background.jpg"))
+
return -1;
+
+
// Create a 20x20 image filled with black color
+
sf::Image image;
+
image.create(20, 20, sf::Color::Black);
+
+
// Copy image1 on image2 at position (10, 10)
+
image.copy(background, 10, 10);
+
+
// Make the top-left pixel transparent
+
sf::Color color = image.getPixel(0, 0);
+
color.a = 0;
+
image.setPixel(0, 0, color);
+
+
// Save the image to a file
+
if (!image.saveToFile("result.png"))
+
return -1;
+
See Also
sf::Texture
+ +

Definition at line 46 of file Image.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Image::Image ()
+
+ +

Default constructor.

+

Creates an empty image.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Image::copy (const Imagesource,
unsigned int destX,
unsigned int destY,
const IntRectsourceRect = IntRect(0, 0, 0, 0),
bool applyAlpha = false 
)
+
+ +

Copy pixels from another image onto this one.

+

This function does a slow pixel copy and should not be used intensively. It can be used to prepare a complex static image from several others, but if you need this kind of feature in real-time you'd better use sf::RenderTexture.

+

If sourceRect is empty, the whole image is copied. If applyAlpha is set to true, the transparency of source pixels is applied. If it is false, the pixels are copied unchanged with their alpha value.

+
Parameters
+ + + + + + +
sourceSource image to copy
destXX coordinate of the destination position
destYY coordinate of the destination position
sourceRectSub-rectangle of the source image to copy
applyAlphaShould the copy take in account the source transparency?
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Image::create (unsigned int width,
unsigned int height,
const Colorcolor = Color(0, 0, 0) 
)
+
+ +

Create the image and fill it with a unique color.

+
Parameters
+ + + + +
widthWidth of the image
heightHeight of the image
colorFill color
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Image::create (unsigned int width,
unsigned int height,
const Uint8 * pixels 
)
+
+ +

Create the image from an array of pixels.

+

The pixel array is assumed to contain 32-bits RGBA pixels, and have the given width and height. If not, this is an undefined behaviour. If pixels is null, an empty image is created.

+
Parameters
+ + + + +
widthWidth of the image
heightHeight of the image
pixelsArray of pixels to copy to the image
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Image::createMaskFromColor (const Colorcolor,
Uint8 alpha = 0 
)
+
+ +

Create a transparency mask from a specified color-key.

+

This function sets the alpha value of every pixel matching the given color to alpha (0 by default), so that they become transparent.

+
Parameters
+ + + +
colorColor to make transparent
alphaAlpha value to assign to transparent pixels
+
+
+ +
+
+ +
+
+ + + + + + + +
void sf::Image::flipHorizontally ()
+
+ +

Flip the image horizontally (left <-> right)

+ +
+
+ +
+
+ + + + + + + +
void sf::Image::flipVertically ()
+
+ +

Flip the image vertically (top <-> bottom)

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Color sf::Image::getPixel (unsigned int x,
unsigned int y 
) const
+
+ +

Get the color of a pixel.

+

This function doesn't check the validity of the pixel coordinates, using out-of-range values will result in an undefined behaviour.

+
Parameters
+ + + +
xX coordinate of pixel to get
yY coordinate of pixel to get
+
+
+
Returns
Color of the pixel at coordinates (x, y)
+
See Also
setPixel
+ +
+
+ +
+
+ + + + + + + +
const Uint8* sf::Image::getPixelsPtr () const
+
+ +

Get a read-only pointer to the array of pixels.

+

The returned value points to an array of RGBA pixels made of 8 bits integers components. The size of the array is width * height * 4 (getSize().x * getSize().y * 4). Warning: the returned pointer may become invalid if you modify the image, so you should never store it for too long. If the image is empty, a null pointer is returned.

+
Returns
Read-only pointer to the array of pixels
+ +
+
+ +
+
+ + + + + + + +
Vector2u sf::Image::getSize () const
+
+ +

Return the size (width and height) of the image.

+
Returns
Size of the image, in pixels
+ +
+
+ +
+
+ + + + + + + + +
bool sf::Image::loadFromFile (const std::string & filename)
+
+ +

Load the image from a file on disk.

+

The supported image formats are bmp, png, tga, jpg, gif, psd, hdr and pic. Some format options are not supported, like progressive jpeg. If this function fails, the image is left unchanged.

+
Parameters
+ + +
filenamePath of the image file to load
+
+
+
Returns
True if loading was successful
+
See Also
loadFromMemory, loadFromStream, saveToFile
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Image::loadFromMemory (const void * data,
std::size_t size 
)
+
+ +

Load the image from a file in memory.

+

The supported image formats are bmp, png, tga, jpg, gif, psd, hdr and pic. Some format options are not supported, like progressive jpeg. If this function fails, the image is left unchanged.

+
Parameters
+ + + +
dataPointer to the file data in memory
sizeSize of the data to load, in bytes
+
+
+
Returns
True if loading was successful
+
See Also
loadFromFile, loadFromStream
+ +
+
+ +
+
+ + + + + + + + +
bool sf::Image::loadFromStream (InputStreamstream)
+
+ +

Load the image from a custom stream.

+

The supported image formats are bmp, png, tga, jpg, gif, psd, hdr and pic. Some format options are not supported, like progressive jpeg. If this function fails, the image is left unchanged.

+
Parameters
+ + +
streamSource stream to read from
+
+
+
Returns
True if loading was successful
+
See Also
loadFromFile, loadFromMemory
+ +
+
+ +
+
+ + + + + + + + +
bool sf::Image::saveToFile (const std::string & filename) const
+
+ +

Save the image to a file on disk.

+

The format of the image is automatically deduced from the extension. The supported image formats are bmp, png, tga and jpg. The destination file is overwritten if it already exists. This function fails if the image is empty.

+
Parameters
+ + +
filenamePath of the file to save
+
+
+
Returns
True if saving was successful
+
See Also
create, loadFromFile, loadFromMemory
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Image::setPixel (unsigned int x,
unsigned int y,
const Colorcolor 
)
+
+ +

Change the color of a pixel.

+

This function doesn't check the validity of the pixel coordinates, using out-of-range values will result in an undefined behaviour.

+
Parameters
+ + + + +
xX coordinate of pixel to change
yY coordinate of pixel to change
colorNew color of the pixel
+
+
+
See Also
getPixel
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1InputStream-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1InputStream-members.htm new file mode 100644 index 0000000..7cb7f26 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1InputStream-members.htm @@ -0,0 +1,60 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::InputStream Member List
+
+
+ +

This is the complete list of members for sf::InputStream, including all inherited members.

+ + + + + + +
getSize()=0sf::InputStreampure virtual
read(void *data, Int64 size)=0sf::InputStreampure virtual
seek(Int64 position)=0sf::InputStreampure virtual
tell()=0sf::InputStreampure virtual
~InputStream()sf::InputStreaminlinevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1InputStream.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1InputStream.htm new file mode 100644 index 0000000..d563fce --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1InputStream.htm @@ -0,0 +1,283 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::InputStream Class Referenceabstract
+
+
+ +

Abstract class for custom file input streams. + More...

+ +

#include <InputStream.hpp>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~InputStream ()
 Virtual destructor. More...
 
virtual Int64 read (void *data, Int64 size)=0
 Read data from the stream. More...
 
virtual Int64 seek (Int64 position)=0
 Change the current reading position. More...
 
virtual Int64 tell ()=0
 Get the current reading position in the stream. More...
 
virtual Int64 getSize ()=0
 Return the size of the stream. More...
 
+

Detailed Description

+

Abstract class for custom file input streams.

+

This class allows users to define their own file input sources from which SFML can load resources.

+

SFML resource classes like sf::Texture and sf::SoundBuffer provide loadFromFile and loadFromMemory functions, which read data from conventional sources. However, if you have data coming from a different source (over a network, embedded, encrypted, compressed, etc) you can derive your own class from sf::InputStream and load SFML resources with their loadFromStream function.

+

Usage example:

+
// custom stream class that reads from inside a zip file
+
class ZipStream : public sf::InputStream
+
{
+
public :
+
+
ZipStream(std::string archive);
+
+
bool open(std::string filename);
+
+
Int64 read(void* data, Int64 size);
+
+
Int64 seek(Int64 position);
+
+
Int64 tell();
+
+
Int64 getSize();
+
+
private :
+
+
...
+
};
+
+
// now you can load textures...
+
sf::Texture texture;
+
ZipStream stream("resources.zip");
+
stream.open("images/img.png");
+
texture.loadFromStream(stream);
+
+
// musics...
+
sf::Music music;
+
ZipStream stream("resources.zip");
+
stream.open("musics/msc.ogg");
+
music.openFromStream(stream);
+
+
// etc.
+
+

Definition at line 40 of file InputStream.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::InputStream::~InputStream ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 48 of file InputStream.hpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual Int64 sf::InputStream::getSize ()
+
+pure virtual
+
+ +

Return the size of the stream.

+
Returns
The total number of bytes available in the stream, or -1 on error
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Int64 sf::InputStream::read (void * data,
Int64 size 
)
+
+pure virtual
+
+ +

Read data from the stream.

+

After reading, the stream's reading position must be advanced by the amount of bytes read.

+
Parameters
+ + + +
dataBuffer where to copy the read data
sizeDesired number of bytes to read
+
+
+
Returns
The number of bytes actually read, or -1 on error
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Int64 sf::InputStream::seek (Int64 position)
+
+pure virtual
+
+ +

Change the current reading position.

+
Parameters
+ + +
positionThe position to seek to, from the beginning
+
+
+
Returns
The position actually sought to, or -1 on error
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Int64 sf::InputStream::tell ()
+
+pure virtual
+
+ +

Get the current reading position in the stream.

+
Returns
The current position, or -1 on error.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1IpAddress-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1IpAddress-members.htm new file mode 100644 index 0000000..5e81581 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1IpAddress-members.htm @@ -0,0 +1,67 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::IpAddress Member List
+
+
+ +

This is the complete list of members for sf::IpAddress, including all inherited members.

+ + + + + + + + + + + + + +
Broadcastsf::IpAddressstatic
getLocalAddress()sf::IpAddressstatic
getPublicAddress(Time timeout=Time::Zero)sf::IpAddressstatic
IpAddress()sf::IpAddress
IpAddress(const std::string &address)sf::IpAddress
IpAddress(const char *address)sf::IpAddress
IpAddress(Uint8 byte0, Uint8 byte1, Uint8 byte2, Uint8 byte3)sf::IpAddress
IpAddress(Uint32 address)sf::IpAddressexplicit
LocalHostsf::IpAddressstatic
Nonesf::IpAddressstatic
toInteger() const sf::IpAddress
toString() const sf::IpAddress
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1IpAddress.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1IpAddress.htm new file mode 100644 index 0000000..d3547f2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1IpAddress.htm @@ -0,0 +1,459 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Encapsulate an IPv4 network address. + More...

+ +

#include <IpAddress.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 IpAddress ()
 Default constructor. More...
 
 IpAddress (const std::string &address)
 Construct the address from a string. More...
 
 IpAddress (const char *address)
 Construct the address from a string. More...
 
 IpAddress (Uint8 byte0, Uint8 byte1, Uint8 byte2, Uint8 byte3)
 Construct the address from 4 bytes. More...
 
 IpAddress (Uint32 address)
 Construct the address from a 32-bits integer. More...
 
std::string toString () const
 Get a string representation of the address. More...
 
Uint32 toInteger () const
 Get an integer representation of the address. More...
 
+ + + + + + + +

+Static Public Member Functions

static IpAddress getLocalAddress ()
 Get the computer's local address. More...
 
static IpAddress getPublicAddress (Time timeout=Time::Zero)
 Get the computer's public address. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const IpAddress None
 Value representing an empty/invalid address. More...
 
static const IpAddress LocalHost
 The "localhost" address (for connecting a computer to itself locally) More...
 
static const IpAddress Broadcast
 The "broadcast" address (for sending UDP messages to everyone on a local network) More...
 
+

Detailed Description

+

Encapsulate an IPv4 network address.

+

sf::IpAddress is a utility class for manipulating network addresses.

+

It provides a set a implicit constructors and conversion functions to easily build or transform an IP address from/to various representations.

+

Usage example:

+
sf::IpAddress a0; // an invalid address
+
sf::IpAddress a1 = sf::IpAddress::None; // an invalid address (same as a0)
+
sf::IpAddress a2("127.0.0.1"); // the local host address
+
sf::IpAddress a3 = sf::IpAddress::Broadcast; // the broadcast address
+
sf::IpAddress a4(192, 168, 1, 56); // a local address
+
sf::IpAddress a5("my_computer"); // a local address created from a network name
+
sf::IpAddress a6("89.54.1.169"); // a distant address
+
sf::IpAddress a7("www.google.com"); // a distant address created from a network name
+
sf::IpAddress a8 = sf::IpAddress::getLocalAddress(); // my address on the local network
+
sf::IpAddress a9 = sf::IpAddress::getPublicAddress(); // my address on the internet
+

Note that sf::IpAddress currently doesn't support IPv6 nor other types of network addresses.

+ +

Definition at line 44 of file IpAddress.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::IpAddress::IpAddress ()
+
+ +

Default constructor.

+

This constructor creates an empty (invalid) address

+ +
+
+ +
+
+ + + + + + + + +
sf::IpAddress::IpAddress (const std::string & address)
+
+ +

Construct the address from a string.

+

Here address can be either a decimal address (ex: "192.168.1.56") or a network name (ex: "localhost").

+
Parameters
+ + +
addressIP address or network name
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::IpAddress::IpAddress (const char * address)
+
+ +

Construct the address from a string.

+

Here address can be either a decimal address (ex: "192.168.1.56") or a network name (ex: "localhost"). This is equivalent to the constructor taking a std::string parameter, it is defined for convenience so that the implicit conversions from literal strings to IpAddress work.

+
Parameters
+ + +
addressIP address or network name
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sf::IpAddress::IpAddress (Uint8 byte0,
Uint8 byte1,
Uint8 byte2,
Uint8 byte3 
)
+
+ +

Construct the address from 4 bytes.

+

Calling IpAddress(a, b, c, d) is equivalent to calling IpAddress("a.b.c.d"), but safer as it doesn't have to parse a string to get the address components.

+
Parameters
+ + + + + +
byte0First byte of the address
byte1Second byte of the address
byte2Third byte of the address
byte3Fourth byte of the address
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
sf::IpAddress::IpAddress (Uint32 address)
+
+explicit
+
+ +

Construct the address from a 32-bits integer.

+

This constructor uses the internal representation of the address directly. It should be used for optimization purposes, and only if you got that representation from IpAddress::ToInteger().

+
Parameters
+ + +
address4 bytes of the address packed into a 32-bits integer
+
+
+
See Also
toInteger
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
static IpAddress sf::IpAddress::getLocalAddress ()
+
+static
+
+ +

Get the computer's local address.

+

The local address is the address of the computer from the LAN point of view, i.e. something like 192.168.1.56. It is meaningful only for communications over the local network. Unlike getPublicAddress, this function is fast and may be used safely anywhere.

+
Returns
Local IP address of the computer
+
See Also
getPublicAddress
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static IpAddress sf::IpAddress::getPublicAddress (Time timeout = Time::Zero)
+
+static
+
+ +

Get the computer's public address.

+

The public address is the address of the computer from the internet point of view, i.e. something like 89.54.1.169. It is necessary for communications over the world wide web. The only way to get a public address is to ask it to a distant website; as a consequence, this function depends on both your network connection and the server, and may be very slow. You should use it as few as possible. Because this function depends on the network connection and on a distant server, you may use a time limit if you don't want your program to be possibly stuck waiting in case there is a problem; this limit is deactivated by default.

+
Parameters
+ + +
timeoutMaximum time to wait
+
+
+
Returns
Public IP address of the computer
+
See Also
getLocalAddress
+ +
+
+ +
+
+ + + + + + + +
Uint32 sf::IpAddress::toInteger () const
+
+ +

Get an integer representation of the address.

+

The returned number is the internal representation of the address, and should be used for optimization purposes only (like sending the address through a socket). The integer produced by this function can then be converted back to a sf::IpAddress with the proper constructor.

+
Returns
32-bits unsigned integer representation of the address
+
See Also
toString
+ +
+
+ +
+
+ + + + + + + +
std::string sf::IpAddress::toString () const
+
+ +

Get a string representation of the address.

+

The returned string is the decimal representation of the IP address (like "192.168.1.56"), even if it was constructed from a host name.

+
Returns
String representation of the address
+
See Also
toInteger
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const IpAddress sf::IpAddress::Broadcast
+
+static
+
+ +

The "broadcast" address (for sending UDP messages to everyone on a local network)

+ +

Definition at line 186 of file IpAddress.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const IpAddress sf::IpAddress::LocalHost
+
+static
+
+ +

The "localhost" address (for connecting a computer to itself locally)

+ +

Definition at line 185 of file IpAddress.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const IpAddress sf::IpAddress::None
+
+static
+
+ +

Value representing an empty/invalid address.

+ +

Definition at line 184 of file IpAddress.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Joystick-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Joystick-members.htm new file mode 100644 index 0000000..1670946 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Joystick-members.htm @@ -0,0 +1,73 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Joystick Member List
+
+
+ +

This is the complete list of members for sf::Joystick, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
Axis enum namesf::Joystick
AxisCount enum valuesf::Joystick
ButtonCount enum valuesf::Joystick
Count enum valuesf::Joystick
getAxisPosition(unsigned int joystick, Axis axis)sf::Joystickstatic
getButtonCount(unsigned int joystick)sf::Joystickstatic
hasAxis(unsigned int joystick, Axis axis)sf::Joystickstatic
isButtonPressed(unsigned int joystick, unsigned int button)sf::Joystickstatic
isConnected(unsigned int joystick)sf::Joystickstatic
PovX enum valuesf::Joystick
PovY enum valuesf::Joystick
R enum valuesf::Joystick
U enum valuesf::Joystick
update()sf::Joystickstatic
V enum valuesf::Joystick
X enum valuesf::Joystick
Y enum valuesf::Joystick
Z enum valuesf::Joystick
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Joystick.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Joystick.htm new file mode 100644 index 0000000..b9f0314 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Joystick.htm @@ -0,0 +1,448 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Give access to the real-time state of the joysticks. + More...

+ +

#include <Joystick.hpp>

+ + + + + + + + +

+Public Types

enum  {
+  Count = 8, +
+  ButtonCount = 32, +
+  AxisCount = 8 +
+ }
 Constants related to joysticks capabilities. More...
 
enum  Axis {
+  X, +
+  Y, +
+  Z, +
+  R, +
+  U, +
+  V, +
+  PovX, +
+  PovY +
+ }
 Axes supported by SFML joysticks. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static bool isConnected (unsigned int joystick)
 Check if a joystick is connected. More...
 
static unsigned int getButtonCount (unsigned int joystick)
 Return the number of buttons supported by a joystick. More...
 
static bool hasAxis (unsigned int joystick, Axis axis)
 Check if a joystick supports a given axis. More...
 
static bool isButtonPressed (unsigned int joystick, unsigned int button)
 Check if a joystick button is pressed. More...
 
static float getAxisPosition (unsigned int joystick, Axis axis)
 Get the current position of a joystick axis. More...
 
static void update ()
 Update the states of all joysticks. More...
 
+

Detailed Description

+

Give access to the real-time state of the joysticks.

+

sf::Joystick provides an interface to the state of the joysticks.

+

It only contains static functions, so it's not meant to be instanciated. Instead, each joystick is identified by an index that is passed to the functions of this class.

+

This class allows users to query the state of joysticks at any time and directly, without having to deal with a window and its events. Compared to the JoystickMoved, JoystickButtonPressed and JoystickButtonReleased events, sf::Joystick can retrieve the state of axes and buttons of joysticks at any time (you don't need to store and update a boolean on your side in order to know if a button is pressed or released), and you always get the real state of joysticks, even if they are moved, pressed or released when your window is out of focus and no event is triggered.

+

SFML supports:

+ +

Unlike the keyboard or mouse, the state of joysticks is sometimes not directly available (depending on the OS), therefore an update() function must be called in order to update the current state of joysticks. When you have a window with event handling, this is done automatically, you don't need to call anything. But if you have no window, or if you want to check joysticks state before creating one, you must call sf::Joystick::update explicitely.

+

Usage example:

+
// Is joystick #0 connected?
+
bool connected = sf::Joystick::isConnected(0);
+
+
// How many buttons does joystick #0 support?
+
unsigned int buttons = sf::Joystick::getButtonCount(0);
+
+
// Does joystick #0 define a X axis?
+ +
+
// Is button #2 pressed on joystick #0?
+
bool pressed = sf::Joystick::isButtonPressed(0, 2);
+
+
// What's the current position of the Y axis on joystick #0?
+ +
See Also
sf::Keyboard, sf::Mouse
+ +

Definition at line 40 of file Joystick.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
anonymous enum
+
+ +

Constants related to joysticks capabilities.

+ + + + +
Enumerator
Count  +

Maximum number of supported joysticks.

+
ButtonCount  +

Maximum number of supported buttons.

+
AxisCount  +

Maximum number of supported axes.

+
+ +

Definition at line 48 of file Joystick.hpp.

+ +
+
+ +
+
+ + + + +
enum sf::Joystick::Axis
+
+ +

Axes supported by SFML joysticks.

+ + + + + + + + + +
Enumerator
X  +

The X axis.

+
Y  +

The Y axis.

+
Z  +

The Z axis.

+
R  +

The R axis.

+
U  +

The U axis.

+
V  +

The V axis.

+
PovX  +

The X axis of the point-of-view hat.

+
PovY  +

The Y axis of the point-of-view hat.

+
+ +

Definition at line 59 of file Joystick.hpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static float sf::Joystick::getAxisPosition (unsigned int joystick,
Axis axis 
)
+
+static
+
+ +

Get the current position of a joystick axis.

+

If the joystick is not connected, this function returns 0.

+
Parameters
+ + + +
joystickIndex of the joystick
axisAxis to check
+
+
+
Returns
Current position of the axis, in range [-100 .. 100]
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static unsigned int sf::Joystick::getButtonCount (unsigned int joystick)
+
+static
+
+ +

Return the number of buttons supported by a joystick.

+

If the joystick is not connected, this function returns 0.

+
Parameters
+ + +
joystickIndex of the joystick
+
+
+
Returns
Number of buttons supported by the joystick
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static bool sf::Joystick::hasAxis (unsigned int joystick,
Axis axis 
)
+
+static
+
+ +

Check if a joystick supports a given axis.

+

If the joystick is not connected, this function returns false.

+
Parameters
+ + + +
joystickIndex of the joystick
axisAxis to check
+
+
+
Returns
True if the joystick supports the axis, false otherwise
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static bool sf::Joystick::isButtonPressed (unsigned int joystick,
unsigned int button 
)
+
+static
+
+ +

Check if a joystick button is pressed.

+

If the joystick is not connected, this function returns false.

+
Parameters
+ + + +
joystickIndex of the joystick
buttonButton to check
+
+
+
Returns
True if the button is pressed, false otherwise
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static bool sf::Joystick::isConnected (unsigned int joystick)
+
+static
+
+ +

Check if a joystick is connected.

+
Parameters
+ + +
joystickIndex of the joystick to check
+
+
+
Returns
True if the joystick is connected, false otherwise
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static void sf::Joystick::update ()
+
+static
+
+ +

Update the states of all joysticks.

+

This function is used internally by SFML, so you normally don't have to call it explicitely. However, you may need to call it if you have no window yet (or no window at all): in this case the joysticks states are not updated automatically.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Keyboard-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Keyboard-members.htm new file mode 100644 index 0000000..7359069 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Keyboard-members.htm @@ -0,0 +1,160 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Keyboard Member List
+
+
+ +

This is the complete list of members for sf::Keyboard, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
A enum valuesf::Keyboard
Add enum valuesf::Keyboard
B enum valuesf::Keyboard
BackSlash enum valuesf::Keyboard
BackSpace enum valuesf::Keyboard
C enum valuesf::Keyboard
Comma enum valuesf::Keyboard
D enum valuesf::Keyboard
Dash enum valuesf::Keyboard
Delete enum valuesf::Keyboard
Divide enum valuesf::Keyboard
Down enum valuesf::Keyboard
E enum valuesf::Keyboard
End enum valuesf::Keyboard
Equal enum valuesf::Keyboard
Escape enum valuesf::Keyboard
F enum valuesf::Keyboard
F1 enum valuesf::Keyboard
F10 enum valuesf::Keyboard
F11 enum valuesf::Keyboard
F12 enum valuesf::Keyboard
F13 enum valuesf::Keyboard
F14 enum valuesf::Keyboard
F15 enum valuesf::Keyboard
F2 enum valuesf::Keyboard
F3 enum valuesf::Keyboard
F4 enum valuesf::Keyboard
F5 enum valuesf::Keyboard
F6 enum valuesf::Keyboard
F7 enum valuesf::Keyboard
F8 enum valuesf::Keyboard
F9 enum valuesf::Keyboard
G enum valuesf::Keyboard
H enum valuesf::Keyboard
Home enum valuesf::Keyboard
I enum valuesf::Keyboard
Insert enum valuesf::Keyboard
isKeyPressed(Key key)sf::Keyboardstatic
J enum valuesf::Keyboard
K enum valuesf::Keyboard
Key enum namesf::Keyboard
KeyCount enum valuesf::Keyboard
L enum valuesf::Keyboard
LAlt enum valuesf::Keyboard
LBracket enum valuesf::Keyboard
LControl enum valuesf::Keyboard
Left enum valuesf::Keyboard
LShift enum valuesf::Keyboard
LSystem enum valuesf::Keyboard
M enum valuesf::Keyboard
Menu enum valuesf::Keyboard
Multiply enum valuesf::Keyboard
N enum valuesf::Keyboard
Num0 enum valuesf::Keyboard
Num1 enum valuesf::Keyboard
Num2 enum valuesf::Keyboard
Num3 enum valuesf::Keyboard
Num4 enum valuesf::Keyboard
Num5 enum valuesf::Keyboard
Num6 enum valuesf::Keyboard
Num7 enum valuesf::Keyboard
Num8 enum valuesf::Keyboard
Num9 enum valuesf::Keyboard
Numpad0 enum valuesf::Keyboard
Numpad1 enum valuesf::Keyboard
Numpad2 enum valuesf::Keyboard
Numpad3 enum valuesf::Keyboard
Numpad4 enum valuesf::Keyboard
Numpad5 enum valuesf::Keyboard
Numpad6 enum valuesf::Keyboard
Numpad7 enum valuesf::Keyboard
Numpad8 enum valuesf::Keyboard
Numpad9 enum valuesf::Keyboard
O enum valuesf::Keyboard
P enum valuesf::Keyboard
PageDown enum valuesf::Keyboard
PageUp enum valuesf::Keyboard
Pause enum valuesf::Keyboard
Period enum valuesf::Keyboard
Q enum valuesf::Keyboard
Quote enum valuesf::Keyboard
R enum valuesf::Keyboard
RAlt enum valuesf::Keyboard
RBracket enum valuesf::Keyboard
RControl enum valuesf::Keyboard
Return enum valuesf::Keyboard
Right enum valuesf::Keyboard
RShift enum valuesf::Keyboard
RSystem enum valuesf::Keyboard
S enum valuesf::Keyboard
SemiColon enum valuesf::Keyboard
Slash enum valuesf::Keyboard
Space enum valuesf::Keyboard
Subtract enum valuesf::Keyboard
T enum valuesf::Keyboard
Tab enum valuesf::Keyboard
Tilde enum valuesf::Keyboard
U enum valuesf::Keyboard
Unknown enum valuesf::Keyboard
Up enum valuesf::Keyboard
V enum valuesf::Keyboard
W enum valuesf::Keyboard
X enum valuesf::Keyboard
Y enum valuesf::Keyboard
Z enum valuesf::Keyboard
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Keyboard.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Keyboard.htm new file mode 100644 index 0000000..e1afd2b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Keyboard.htm @@ -0,0 +1,667 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Give access to the real-time state of the keyboard. + More...

+ +

#include <Keyboard.hpp>

+ + + + + +

+Public Types

enum  Key {
+  Unknown = -1, +
+  A = 0, +
+  B, +
+  C, +
+  D, +
+  E, +
+  F, +
+  G, +
+  H, +
+  I, +
+  J, +
+  K, +
+  L, +
+  M, +
+  N, +
+  O, +
+  P, +
+  Q, +
+  R, +
+  S, +
+  T, +
+  U, +
+  V, +
+  W, +
+  X, +
+  Y, +
+  Z, +
+  Num0, +
+  Num1, +
+  Num2, +
+  Num3, +
+  Num4, +
+  Num5, +
+  Num6, +
+  Num7, +
+  Num8, +
+  Num9, +
+  Escape, +
+  LControl, +
+  LShift, +
+  LAlt, +
+  LSystem, +
+  RControl, +
+  RShift, +
+  RAlt, +
+  RSystem, +
+  Menu, +
+  LBracket, +
+  RBracket, +
+  SemiColon, +
+  Comma, +
+  Period, +
+  Quote, +
+  Slash, +
+  BackSlash, +
+  Tilde, +
+  Equal, +
+  Dash, +
+  Space, +
+  Return, +
+  BackSpace, +
+  Tab, +
+  PageUp, +
+  PageDown, +
+  End, +
+  Home, +
+  Insert, +
+  Delete, +
+  Add, +
+  Subtract, +
+  Multiply, +
+  Divide, +
+  Left, +
+  Right, +
+  Up, +
+  Down, +
+  Numpad0, +
+  Numpad1, +
+  Numpad2, +
+  Numpad3, +
+  Numpad4, +
+  Numpad5, +
+  Numpad6, +
+  Numpad7, +
+  Numpad8, +
+  Numpad9, +
+  F1, +
+  F2, +
+  F3, +
+  F4, +
+  F5, +
+  F6, +
+  F7, +
+  F8, +
+  F9, +
+  F10, +
+  F11, +
+  F12, +
+  F13, +
+  F14, +
+  F15, +
+  Pause, +
+  KeyCount +
+ }
 Key codes. More...
 
+ + + + +

+Static Public Member Functions

static bool isKeyPressed (Key key)
 Check if a key is pressed. More...
 
+

Detailed Description

+

Give access to the real-time state of the keyboard.

+

sf::Keyboard provides an interface to the state of the keyboard.

+

It only contains static functions (a single keyboard is assumed), so it's not meant to be instanciated.

+

This class allows users to query the keyboard state at any time and directly, without having to deal with a window and its events. Compared to the KeyPressed and KeyReleased events, sf::Keyboard can retrieve the state of a key at any time (you don't need to store and update a boolean on your side in order to know if a key is pressed or released), and you always get the real state of the keyboard, even if keys are pressed or released when your window is out of focus and no event is triggered.

+

Usage example:

+
+
{
+
// move left...
+
}
+ +
{
+
// move right...
+
}
+ +
{
+
// quit...
+
}
+
See Also
sf::Joystick, sf::Mouse
+ +

Definition at line 40 of file Keyboard.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Keyboard::Key
+
+ +

Key codes.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enumerator
Unknown  +

Unhandled key.

+
A  +

The A key.

+
B  +

The B key.

+
C  +

The C key.

+
D  +

The D key.

+
E  +

The E key.

+
F  +

The F key.

+
G  +

The G key.

+
H  +

The H key.

+
I  +

The I key.

+
J  +

The J key.

+
K  +

The K key.

+
L  +

The L key.

+
M  +

The M key.

+
N  +

The N key.

+
O  +

The O key.

+
P  +

The P key.

+
Q  +

The Q key.

+
R  +

The R key.

+
S  +

The S key.

+
T  +

The T key.

+
U  +

The U key.

+
V  +

The V key.

+
W  +

The W key.

+
X  +

The X key.

+
Y  +

The Y key.

+
Z  +

The Z key.

+
Num0  +

The 0 key.

+
Num1  +

The 1 key.

+
Num2  +

The 2 key.

+
Num3  +

The 3 key.

+
Num4  +

The 4 key.

+
Num5  +

The 5 key.

+
Num6  +

The 6 key.

+
Num7  +

The 7 key.

+
Num8  +

The 8 key.

+
Num9  +

The 9 key.

+
Escape  +

The Escape key.

+
LControl  +

The left Control key.

+
LShift  +

The left Shift key.

+
LAlt  +

The left Alt key.

+
LSystem  +

The left OS specific key: window (Windows and Linux), apple (MacOS X), ...

+
RControl  +

The right Control key.

+
RShift  +

The right Shift key.

+
RAlt  +

The right Alt key.

+
RSystem  +

The right OS specific key: window (Windows and Linux), apple (MacOS X), ...

+
Menu  +

The Menu key.

+
LBracket  +

The [ key.

+
RBracket  +

The ] key.

+
SemiColon  +

The ; key.

+
Comma  +

The , key.

+
Period  +

The . key.

+
Quote  +

The ' key.

+
Slash  +

The / key.

+
BackSlash  +

The \ key.

+
Tilde  +

The ~ key.

+
Equal  +

The = key.

+
Dash  +

The - key.

+
Space  +

The Space key.

+
Return  +

The Return key.

+
BackSpace  +

The Backspace key.

+
Tab  +

The Tabulation key.

+
PageUp  +

The Page up key.

+
PageDown  +

The Page down key.

+
End  +

The End key.

+
Home  +

The Home key.

+
Insert  +

The Insert key.

+
Delete  +

The Delete key.

+
Add  +

The + key.

+
Subtract  +

The - key.

+
Multiply  +

The * key.

+
Divide  +

The / key.

+
Left  +

Left arrow.

+
Right  +

Right arrow.

+
Up  +

Up arrow.

+
Down  +

Down arrow.

+
Numpad0  +

The numpad 0 key.

+
Numpad1  +

The numpad 1 key.

+
Numpad2  +

The numpad 2 key.

+
Numpad3  +

The numpad 3 key.

+
Numpad4  +

The numpad 4 key.

+
Numpad5  +

The numpad 5 key.

+
Numpad6  +

The numpad 6 key.

+
Numpad7  +

The numpad 7 key.

+
Numpad8  +

The numpad 8 key.

+
Numpad9  +

The numpad 9 key.

+
F1  +

The F1 key.

+
F2  +

The F2 key.

+
F3  +

The F3 key.

+
F4  +

The F4 key.

+
F5  +

The F5 key.

+
F6  +

The F6 key.

+
F7  +

The F7 key.

+
F8  +

The F8 key.

+
F9  +

The F9 key.

+
F10  +

The F10 key.

+
F11  +

The F11 key.

+
F12  +

The F12 key.

+
F13  +

The F13 key.

+
F14  +

The F14 key.

+
F15  +

The F15 key.

+
Pause  +

The Pause key.

+
KeyCount  +

Keep last – the total number of keyboard keys.

+
+ +

Definition at line 48 of file Keyboard.hpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
static bool sf::Keyboard::isKeyPressed (Key key)
+
+static
+
+ +

Check if a key is pressed.

+
Parameters
+ + +
keyKey to check
+
+
+
Returns
True if the key is pressed, false otherwise
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Listener-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Listener-members.htm new file mode 100644 index 0000000..1988c73 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Listener-members.htm @@ -0,0 +1,63 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Listener Member List
+
+
+ +

This is the complete list of members for sf::Listener, including all inherited members.

+ + + + + + + + + +
getDirection()sf::Listenerstatic
getGlobalVolume()sf::Listenerstatic
getPosition()sf::Listenerstatic
setDirection(float x, float y, float z)sf::Listenerstatic
setDirection(const Vector3f &direction)sf::Listenerstatic
setGlobalVolume(float volume)sf::Listenerstatic
setPosition(float x, float y, float z)sf::Listenerstatic
setPosition(const Vector3f &position)sf::Listenerstatic
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Listener.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Listener.htm new file mode 100644 index 0000000..6339c4d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Listener.htm @@ -0,0 +1,396 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Listener Class Reference
+
+
+ +

The audio listener is the point in the scene from where all the sounds are heard. + More...

+ +

#include <Listener.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static void setGlobalVolume (float volume)
 Change the global volume of all the sounds and musics. More...
 
static float getGlobalVolume ()
 Get the current value of the global volume. More...
 
static void setPosition (float x, float y, float z)
 Set the position of the listener in the scene. More...
 
static void setPosition (const Vector3f &position)
 Set the position of the listener in the scene. More...
 
static Vector3f getPosition ()
 Get the current position of the listener in the scene. More...
 
static void setDirection (float x, float y, float z)
 Set the orientation of the listener in the scene. More...
 
static void setDirection (const Vector3f &direction)
 Set the orientation of the listener in the scene. More...
 
static Vector3f getDirection ()
 Get the current orientation of the listener in the scene. More...
 
+

Detailed Description

+

The audio listener is the point in the scene from where all the sounds are heard.

+

The audio listener defines the global properties of the audio environment, it defines where and how sounds and musics are heard.

+

If sf::View is the eyes of the user, then sf::Listener is his ears (by the way, they are often linked together – same position, orientation, etc.).

+

sf::Listener is a simple interface, which allows to setup the listener in the 3D audio environment (position and direction), and to adjust the global volume.

+

Because the listener is unique in the scene, sf::Listener only contains static functions and doesn't have to be instanciated.

+

Usage example:

+
// Move the listener to the position (1, 0, -5)
+ +
+
// Make it face the right axis (1, 0, 0)
+ +
+
// Reduce the global volume
+ +
+

Definition at line 42 of file Listener.hpp.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
static Vector3f sf::Listener::getDirection ()
+
+static
+
+ +

Get the current orientation of the listener in the scene.

+
Returns
Listener's orientation
+
See Also
setDirection
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static float sf::Listener::getGlobalVolume ()
+
+static
+
+ +

Get the current value of the global volume.

+
Returns
Current global volume, in the range [0, 100]
+
See Also
setGlobalVolume
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static Vector3f sf::Listener::getPosition ()
+
+static
+
+ +

Get the current position of the listener in the scene.

+
Returns
Listener's position
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static void sf::Listener::setDirection (float x,
float y,
float z 
)
+
+static
+
+ +

Set the orientation of the listener in the scene.

+

The orientation defines the 3D axes of the listener (left, up, front) in the scene. The orientation vector doesn't have to be normalized. The default listener's orientation is (0, 0, -1).

+
Parameters
+ + + + +
xX coordinate of the listener's orientation
yY coordinate of the listener's orientation
zZ coordinate of the listener's orientation
+
+
+
See Also
getDirection, setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void sf::Listener::setDirection (const Vector3fdirection)
+
+static
+
+ +

Set the orientation of the listener in the scene.

+

The orientation defines the 3D axes of the listener (left, up, front) in the scene. The orientation vector doesn't have to be normalized. The default listener's orientation is (0, 0, -1).

+
Parameters
+ + +
directionNew listener's orientation
+
+
+
See Also
getDirection, setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void sf::Listener::setGlobalVolume (float volume)
+
+static
+
+ +

Change the global volume of all the sounds and musics.

+

The volume is a number between 0 and 100; it is combined with the individual volume of each sound / music. The default value for the volume is 100 (maximum).

+
Parameters
+ + +
volumeNew global volume, in the range [0, 100]
+
+
+
See Also
getGlobalVolume
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static void sf::Listener::setPosition (float x,
float y,
float z 
)
+
+static
+
+ +

Set the position of the listener in the scene.

+

The default listener's position is (0, 0, 0).

+
Parameters
+ + + + +
xX coordinate of the listener's position
yY coordinate of the listener's position
zZ coordinate of the listener's position
+
+
+
See Also
getPosition, setDirection
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void sf::Listener::setPosition (const Vector3fposition)
+
+static
+
+ +

Set the position of the listener in the scene.

+

The default listener's position is (0, 0, 0).

+
Parameters
+ + +
positionNew listener's position
+
+
+
See Also
getPosition, setDirection
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock-members.htm new file mode 100644 index 0000000..0527346 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock-members.htm @@ -0,0 +1,58 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Lock Member List
+
+
+ +

This is the complete list of members for sf::Lock, including all inherited members.

+ + + + +
Lock(Mutex &mutex)sf::Lockexplicit
NonCopyable()sf::NonCopyableinlineprivate
~Lock()sf::Lock
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock.htm new file mode 100644 index 0000000..15558a9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock.htm @@ -0,0 +1,169 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Lock Class Reference
+
+
+ +

Automatic wrapper for locking and unlocking mutexes. + More...

+ +

#include <Lock.hpp>

+
+Inheritance diagram for sf::Lock:
+
+
+ + +sf::NonCopyable + +
+ + + + + + + + +

+Public Member Functions

 Lock (Mutex &mutex)
 Construct the lock with a target mutex. More...
 
 ~Lock ()
 Destructor. More...
 
+

Detailed Description

+

Automatic wrapper for locking and unlocking mutexes.

+

sf::Lock is a RAII wrapper for sf::Mutex.

+

By unlocking it in its destructor, it ensures that the mutex will always be released when the current scope (most likely a function) ends. This is even more important when an exception or an early return statement can interrupt the execution flow of the function.

+

For maximum robustness, sf::Lock should always be used to lock/unlock a mutex.

+

Usage example:

+
sf::Mutex mutex;
+
+
void function()
+
{
+
sf::Lock lock(mutex); // mutex is now locked
+
+
functionThatMayThrowAnException(); // mutex is unlocked if this function throws
+
+
if (someCondition)
+
return; // mutex is unlocked
+
+
} // mutex is unlocked
+

Because the mutex is not explicitely unlocked in the code, it may remain locked longer than needed. If the region of the code that needs to be protected by the mutex is not the entire function, a good practice is to create a smaller, inner scope so that the lock is limited to this part of the code.

+
sf::Mutex mutex;
+
+
void function()
+
{
+
{
+
sf::Lock lock(mutex);
+
codeThatRequiresProtection();
+
+
} // mutex is unlocked here
+
+
codeThatDoesntCareAboutTheMutex();
+
}
+

Having a mutex locked longer than required is a bad practice which can lead to bad performances. Don't forget that when a mutex is locked, other threads may be waiting doing nothing until it is released.

+
See Also
sf::Mutex
+ +

Definition at line 43 of file Lock.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
sf::Lock::Lock (Mutexmutex)
+
+explicit
+
+ +

Construct the lock with a target mutex.

+

The mutex passed to sf::Lock is automatically locked.

+
Parameters
+ + +
mutexMutex to lock
+
+
+ +
+
+ +
+
+ + + + + + + +
sf::Lock::~Lock ()
+
+ +

Destructor.

+

The destructor of sf::Lock automatically unlocks its mutex.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Lock.png new file mode 100644 index 0000000000000000000000000000000000000000..5878b109d1658b86136d217a0f69ac5e511b3610 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^nLr%C!3-pIHCN{XDTx4|5ZC|z{{xvX-h3_XKQsZz z0^Do+>3kP61Pb8m|+R^V|h=llCVU+yTk zx%RcICoN(l{4Yvu^7MGCt=RHFsY%5$V}i=db^l~f=IlPPPj%_#WzLiQw%F<4)e5TG z(UP6K&(PZ|z1^h!+_dbAhFVg~f1lm(JZu(!ZSaw~CdJ<*Kl)rR^x*s5 + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Mouse Member List
+
+
+ +

This is the complete list of members for sf::Mouse, including all inherited members.

+ + + + + + + + + + + + + +
Button enum namesf::Mouse
ButtonCount enum valuesf::Mouse
getPosition()sf::Mousestatic
getPosition(const Window &relativeTo)sf::Mousestatic
isButtonPressed(Button button)sf::Mousestatic
Left enum valuesf::Mouse
Middle enum valuesf::Mouse
Right enum valuesf::Mouse
setPosition(const Vector2i &position)sf::Mousestatic
setPosition(const Vector2i &position, const Window &relativeTo)sf::Mousestatic
XButton1 enum valuesf::Mouse
XButton2 enum valuesf::Mouse
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mouse.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mouse.htm new file mode 100644 index 0000000..af21749 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mouse.htm @@ -0,0 +1,331 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Give access to the real-time state of the mouse. + More...

+ +

#include <Mouse.hpp>

+ + + + + +

+Public Types

enum  Button {
+  Left, +
+  Right, +
+  Middle, +
+  XButton1, +
+  XButton2, +
+  ButtonCount +
+ }
 Mouse buttons. More...
 
+ + + + + + + + + + + + + + + + +

+Static Public Member Functions

static bool isButtonPressed (Button button)
 Check if a mouse button is pressed. More...
 
static Vector2i getPosition ()
 Get the current position of the mouse in desktop coordinates. More...
 
static Vector2i getPosition (const Window &relativeTo)
 Get the current position of the mouse in window coordinates. More...
 
static void setPosition (const Vector2i &position)
 Set the current position of the mouse in desktop coordinates. More...
 
static void setPosition (const Vector2i &position, const Window &relativeTo)
 Set the current position of the mouse in window coordinates. More...
 
+

Detailed Description

+

Give access to the real-time state of the mouse.

+

sf::Mouse provides an interface to the state of the mouse.

+

It only contains static functions (a single mouse is assumed), so it's not meant to be instanciated.

+

This class allows users to query the mouse state at any time and directly, without having to deal with a window and its events. Compared to the MouseMoved, MouseButtonPressed and MouseButtonReleased events, sf::Mouse can retrieve the state of the cursor and the buttons at any time (you don't need to store and update a boolean on your side in order to know if a button is pressed or released), and you always get the real state of the mouse, even if it is moved, pressed or released when your window is out of focus and no event is triggered.

+

The setPosition and getPosition functions can be used to change or retrieve the current position of the mouse pointer. There are two versions: one that operates in global coordinates (relative to the desktop) and one that operates in window coordinates (relative to a specific window).

+

Usage example:

+
+
{
+
// left click...
+
}
+
+
// get global mouse position
+ +
+
// set mouse position relative to a window
+ +
See Also
sf::Joystick, sf::Keyboard
+ +

Definition at line 43 of file Mouse.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Mouse::Button
+
+ +

Mouse buttons.

+ + + + + + + +
Enumerator
Left  +

The left mouse button.

+
Right  +

The right mouse button.

+
Middle  +

The middle (wheel) mouse button.

+
XButton1  +

The first extra mouse button.

+
XButton2  +

The second extra mouse button.

+
ButtonCount  +

Keep last – the total number of mouse buttons.

+
+ +

Definition at line 51 of file Mouse.hpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
static Vector2i sf::Mouse::getPosition ()
+
+static
+
+ +

Get the current position of the mouse in desktop coordinates.

+

This function returns the global position of the mouse cursor on the desktop.

+
Returns
Current position of the mouse
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static Vector2i sf::Mouse::getPosition (const WindowrelativeTo)
+
+static
+
+ +

Get the current position of the mouse in window coordinates.

+

This function returns the current position of the mouse cursor, relative to the given window.

+
Parameters
+ + +
relativeToReference window
+
+
+
Returns
Current position of the mouse
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static bool sf::Mouse::isButtonPressed (Button button)
+
+static
+
+ +

Check if a mouse button is pressed.

+
Parameters
+ + +
buttonButton to check
+
+
+
Returns
True if the button is pressed, false otherwise
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void sf::Mouse::setPosition (const Vector2iposition)
+
+static
+
+ +

Set the current position of the mouse in desktop coordinates.

+

This function sets the global position of the mouse cursor on the desktop.

+
Parameters
+ + +
positionNew position of the mouse
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static void sf::Mouse::setPosition (const Vector2iposition,
const WindowrelativeTo 
)
+
+static
+
+ +

Set the current position of the mouse in window coordinates.

+

This function sets the current position of the mouse cursor, relative to the given window.

+
Parameters
+ + + +
positionNew position of the mouse
relativeToReference window
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music-members.htm new file mode 100644 index 0000000..ce28d10 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music-members.htm @@ -0,0 +1,97 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Music Member List
+
+
+ +

This is the complete list of members for sf::Music, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getAttenuation() const sf::SoundSource
getChannelCount() const sf::SoundStream
getDuration() const sf::Music
getLoop() const sf::SoundStream
getMinDistance() const sf::SoundSource
getPitch() const sf::SoundSource
getPlayingOffset() const sf::SoundStream
getPosition() const sf::SoundSource
getSampleRate() const sf::SoundStream
getStatus() const sf::SoundStream
getVolume() const sf::SoundSource
sf::SoundStream::initialize(unsigned int channelCount, unsigned int sampleRate)sf::SoundStreamprotected
isRelativeToListener() const sf::SoundSource
m_sourcesf::SoundSourceprotected
Music()sf::Music
onGetData(Chunk &data)sf::Musicprotectedvirtual
onSeek(Time timeOffset)sf::Musicprotectedvirtual
openFromFile(const std::string &filename)sf::Music
openFromMemory(const void *data, std::size_t sizeInBytes)sf::Music
openFromStream(InputStream &stream)sf::Music
pause()sf::SoundStream
Paused enum valuesf::SoundSource
play()sf::SoundStream
Playing enum valuesf::SoundSource
setAttenuation(float attenuation)sf::SoundSource
setLoop(bool loop)sf::SoundStream
setMinDistance(float distance)sf::SoundSource
setPitch(float pitch)sf::SoundSource
setPlayingOffset(Time timeOffset)sf::SoundStream
setPosition(float x, float y, float z)sf::SoundSource
setPosition(const Vector3f &position)sf::SoundSource
setRelativeToListener(bool relative)sf::SoundSource
setVolume(float volume)sf::SoundSource
SoundSource(const SoundSource &copy)sf::SoundSource
SoundSource()sf::SoundSourceprotected
SoundStream()sf::SoundStreamprotected
Status enum namesf::SoundSource
stop()sf::SoundStream
Stopped enum valuesf::SoundSource
~Music()sf::Music
~SoundSource()sf::SoundSourcevirtual
~SoundStream()sf::SoundStreamvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music.htm new file mode 100644 index 0000000..341b1f1 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music.htm @@ -0,0 +1,1248 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Streamed music played from an audio file. + More...

+ +

#include <Music.hpp>

+
+Inheritance diagram for sf::Music:
+
+
+ + +sf::SoundStream +sf::SoundSource + +
+ + + + + +

+Public Types

enum  Status {
+  Stopped, +
+  Paused, +
+  Playing +
+ }
 Enumeration of the sound source states. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Music ()
 Default constructor. More...
 
 ~Music ()
 Destructor. More...
 
bool openFromFile (const std::string &filename)
 Open a music from an audio file. More...
 
bool openFromMemory (const void *data, std::size_t sizeInBytes)
 Open a music from an audio file in memory. More...
 
bool openFromStream (InputStream &stream)
 Open a music from an audio file in a custom stream. More...
 
Time getDuration () const
 Get the total duration of the music. More...
 
void play ()
 Start or resume playing the audio stream. More...
 
void pause ()
 Pause the audio stream. More...
 
void stop ()
 Stop playing the audio stream. More...
 
unsigned int getChannelCount () const
 Return the number of channels of the stream. More...
 
unsigned int getSampleRate () const
 Get the stream sample rate of the stream. More...
 
Status getStatus () const
 Get the current status of the stream (stopped, paused, playing) More...
 
void setPlayingOffset (Time timeOffset)
 Change the current playing position of the stream. More...
 
Time getPlayingOffset () const
 Get the current playing position of the stream. More...
 
void setLoop (bool loop)
 Set whether or not the stream should loop after reaching the end. More...
 
bool getLoop () const
 Tell whether or not the stream is in loop mode. More...
 
void setPitch (float pitch)
 Set the pitch of the sound. More...
 
void setVolume (float volume)
 Set the volume of the sound. More...
 
void setPosition (float x, float y, float z)
 Set the 3D position of the sound in the audio scene. More...
 
void setPosition (const Vector3f &position)
 Set the 3D position of the sound in the audio scene. More...
 
void setRelativeToListener (bool relative)
 Make the sound's position relative to the listener or absolute. More...
 
void setMinDistance (float distance)
 Set the minimum distance of the sound. More...
 
void setAttenuation (float attenuation)
 Set the attenuation factor of the sound. More...
 
float getPitch () const
 Get the pitch of the sound. More...
 
float getVolume () const
 Get the volume of the sound. More...
 
Vector3f getPosition () const
 Get the 3D position of the sound in the audio scene. More...
 
bool isRelativeToListener () const
 Tell whether the sound's position is relative to the listener or is absolute. More...
 
float getMinDistance () const
 Get the minimum distance of the sound. More...
 
float getAttenuation () const
 Get the attenuation factor of the sound. More...
 
+ + + + + + + + + + +

+Protected Member Functions

virtual bool onGetData (Chunk &data)
 Request a new chunk of audio samples from the stream source. More...
 
virtual void onSeek (Time timeOffset)
 Change the current playing position in the stream source. More...
 
void initialize (unsigned int channelCount, unsigned int sampleRate)
 Define the audio stream parameters. More...
 
+ + + + +

+Protected Attributes

unsigned int m_source
 OpenAL source identifier. More...
 
+

Detailed Description

+

Streamed music played from an audio file.

+

Musics are sounds that are streamed rather than completely loaded in memory.

+

This is especially useful for compressed musics that usually take hundreds of MB when they are uncompressed: by streaming it instead of loading it entirely, you avoid saturating the memory and have almost no loading delay.

+

Apart from that, a sf::Music has almost the same features as the sf::SoundBuffer / sf::Sound pair: you can play/pause/stop it, request its parameters (channels, sample rate), change the way it is played (pitch, volume, 3D position, ...), etc.

+

As a sound stream, a music is played in its own thread in order not to block the rest of the program. This means that you can leave the music alone after calling play(), it will manage itself very well.

+

Usage example:

+
// Declare a new music
+
sf::Music music;
+
+
// Open it from an audio file
+
if (!music.openFromFile("music.ogg"))
+
{
+
// error...
+
}
+
+
// Change some parameters
+
music.setPosition(0, 1, 10); // change its 3D position
+
music.setPitch(2); // increase the pitch
+
music.setVolume(50); // reduce the volume
+
music.setLoop(true); // make it loop
+
+
// Play it
+
music.play();
+
See Also
sf::Sound, sf::SoundStream
+ +

Definition at line 52 of file Music.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum sf::SoundSource::Status
+
+inherited
+
+ +

Enumeration of the sound source states.

+ + + + +
Enumerator
Stopped  +

Sound is not playing.

+
Paused  +

Sound is paused.

+
Playing  +

Sound is playing.

+
+ +

Definition at line 49 of file SoundSource.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Music::Music ()
+
+ +

Default constructor.

+ +
+
+ +
+
+ + + + + + + +
sf::Music::~Music ()
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getAttenuation () const
+
+inherited
+
+ +

Get the attenuation factor of the sound.

+
Returns
Attenuation factor of the sound
+
See Also
setAttenuation, getMinDistance
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned int sf::SoundStream::getChannelCount () const
+
+inherited
+
+ +

Return the number of channels of the stream.

+

1 channel means a mono sound, 2 means stereo, etc.

+
Returns
Number of channels
+ +
+
+ +
+
+ + + + + + + +
Time sf::Music::getDuration () const
+
+ +

Get the total duration of the music.

+
Returns
Music duration
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::SoundStream::getLoop () const
+
+inherited
+
+ +

Tell whether or not the stream is in loop mode.

+
Returns
True if the stream is looping, false otherwise
+
See Also
setLoop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getMinDistance () const
+
+inherited
+
+ +

Get the minimum distance of the sound.

+
Returns
Minimum distance of the sound
+
See Also
setMinDistance, getAttenuation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getPitch () const
+
+inherited
+
+ +

Get the pitch of the sound.

+
Returns
Pitch of the sound
+
See Also
setPitch
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Time sf::SoundStream::getPlayingOffset () const
+
+inherited
+
+ +

Get the current playing position of the stream.

+
Returns
Current playing position, from the beginning of the stream
+
See Also
setPlayingOffset
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Vector3f sf::SoundSource::getPosition () const
+
+inherited
+
+ +

Get the 3D position of the sound in the audio scene.

+
Returns
Position of the sound
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned int sf::SoundStream::getSampleRate () const
+
+inherited
+
+ +

Get the stream sample rate of the stream.

+

The sample rate is the number of audio samples played per second. The higher, the better the quality.

+
Returns
Sample rate, in number of samples per second
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Status sf::SoundStream::getStatus () const
+
+inherited
+
+ +

Get the current status of the stream (stopped, paused, playing)

+
Returns
Current status
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getVolume () const
+
+inherited
+
+ +

Get the volume of the sound.

+
Returns
Volume of the sound, in the range [0, 100]
+
See Also
setVolume
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::SoundStream::initialize (unsigned int channelCount,
unsigned int sampleRate 
)
+
+protectedinherited
+
+ +

Define the audio stream parameters.

+

This function must be called by derived classes as soon as they know the audio settings of the stream to play. Any attempt to manipulate the stream (play(), ...) before calling this function will fail. It can be called multiple times if the settings of the audio stream change, but only when the stream is stopped.

+
Parameters
+ + + +
channelCountNumber of channels of the stream
sampleRateSample rate, in samples per second
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::SoundSource::isRelativeToListener () const
+
+inherited
+
+ +

Tell whether the sound's position is relative to the listener or is absolute.

+
Returns
True if the position is relative, false if it's absolute
+
See Also
setRelativeToListener
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool sf::Music::onGetData (Chunkdata)
+
+protectedvirtual
+
+ +

Request a new chunk of audio samples from the stream source.

+

This function fills the chunk from the next samples to read from the audio file.

+
Parameters
+ + +
dataChunk of data to fill
+
+
+
Returns
True to continue playback, false to stop
+ +

Implements sf::SoundStream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void sf::Music::onSeek (Time timeOffset)
+
+protectedvirtual
+
+ +

Change the current playing position in the stream source.

+
Parameters
+ + +
timeOffsetNew playing position, from the beginning of the music
+
+
+ +

Implements sf::SoundStream.

+ +
+
+ +
+
+ + + + + + + + +
bool sf::Music::openFromFile (const std::string & filename)
+
+ +

Open a music from an audio file.

+

This function doesn't start playing the music (call play() to do so). Here is a complete list of all the supported audio formats: ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64.

+
Parameters
+ + +
filenamePath of the music file to open
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
openFromMemory, openFromStream
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Music::openFromMemory (const void * data,
std::size_t sizeInBytes 
)
+
+ +

Open a music from an audio file in memory.

+

This function doesn't start playing the music (call play() to do so). Here is a complete list of all the supported audio formats: ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. Since the music is not loaded completely but rather streamed continuously, the data must remain available as long as the music is playing (ie. you can't deallocate it right after calling this function).

+
Parameters
+ + + +
dataPointer to the file data in memory
sizeInBytesSize of the data to load, in bytes
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
openFromFile, openFromStream
+ +
+
+ +
+
+ + + + + + + + +
bool sf::Music::openFromStream (InputStreamstream)
+
+ +

Open a music from an audio file in a custom stream.

+

This function doesn't start playing the music (call play() to do so). Here is a complete list of all the supported audio formats: ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. Since the music is not loaded completely but rather streamed continuously, the stream must remain alive as long as the music is playing (ie. you can't destroy it right after calling this function).

+
Parameters
+ + +
streamSource stream to read from
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
openFromFile, openFromMemory
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::SoundStream::pause ()
+
+inherited
+
+ +

Pause the audio stream.

+

This function pauses the stream if it was playing, otherwise (stream already paused or stopped) it has no effect.

+
See Also
play, stop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::SoundStream::play ()
+
+inherited
+
+ +

Start or resume playing the audio stream.

+

This function starts the stream if it was stopped, resumes it if it was paused, and restarts it from beginning if it was it already playing. This function uses its own thread so that it doesn't block the rest of the program while the stream is played.

+
See Also
pause, stop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setAttenuation (float attenuation)
+
+inherited
+
+ +

Set the attenuation factor of the sound.

+

The attenuation is a multiplicative factor which makes the sound more or less loud according to its distance from the listener. An attenuation of 0 will produce a non-attenuated sound, i.e. its volume will always be the same whether it is heard from near or from far. On the other hand, an attenuation value such as 100 will make the sound fade out very quickly as it gets further from the listener. The default value of the attenuation is 1.

+
Parameters
+ + +
attenuationNew attenuation factor of the sound
+
+
+
See Also
getAttenuation, setMinDistance
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundStream::setLoop (bool loop)
+
+inherited
+
+ +

Set whether or not the stream should loop after reaching the end.

+

If set, the stream will restart from beginning after reaching the end and so on, until it is stopped or setLoop(false) is called. The default looping state for streams is false.

+
Parameters
+ + +
loopTrue to play in loop, false to play once
+
+
+
See Also
getLoop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setMinDistance (float distance)
+
+inherited
+
+ +

Set the minimum distance of the sound.

+

The "minimum distance" of a sound is the maximum distance at which it is heard at its maximum volume. Further than the minimum distance, it will start to fade out according to its attenuation factor. A value of 0 ("inside the head +of the listener") is an invalid value and is forbidden. The default value of the minimum distance is 1.

+
Parameters
+ + +
distanceNew minimum distance of the sound
+
+
+
See Also
getMinDistance, setAttenuation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setPitch (float pitch)
+
+inherited
+
+ +

Set the pitch of the sound.

+

The pitch represents the perceived fundamental frequency of a sound; thus you can make a sound more acute or grave by changing its pitch. A side effect of changing the pitch is to modify the playing speed of the sound as well. The default value for the pitch is 1.

+
Parameters
+ + +
pitchNew pitch to apply to the sound
+
+
+
See Also
getPitch
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundStream::setPlayingOffset (Time timeOffset)
+
+inherited
+
+ +

Change the current playing position of the stream.

+

The playing position can be changed when the stream is either paused or playing.

+
Parameters
+ + +
timeOffsetNew playing position, from the beginning of the stream
+
+
+
See Also
getPlayingOffset
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::SoundSource::setPosition (float x,
float y,
float z 
)
+
+inherited
+
+ +

Set the 3D position of the sound in the audio scene.

+

Only sounds with one channel (mono sounds) can be spatialized. The default position of a sound is (0, 0, 0).

+
Parameters
+ + + + +
xX coordinate of the position of the sound in the scene
yY coordinate of the position of the sound in the scene
zZ coordinate of the position of the sound in the scene
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setPosition (const Vector3fposition)
+
+inherited
+
+ +

Set the 3D position of the sound in the audio scene.

+

Only sounds with one channel (mono sounds) can be spatialized. The default position of a sound is (0, 0, 0).

+
Parameters
+ + +
positionPosition of the sound in the scene
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setRelativeToListener (bool relative)
+
+inherited
+
+ +

Make the sound's position relative to the listener or absolute.

+

Making a sound relative to the listener will ensure that it will always be played the same way regardless the position of the listener. This can be useful for non-spatialized sounds, sounds that are produced by the listener, or sounds attached to it. The default value is false (position is absolute).

+
Parameters
+ + +
relativeTrue to set the position relative, false to set it absolute
+
+
+
See Also
isRelativeToListener
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setVolume (float volume)
+
+inherited
+
+ +

Set the volume of the sound.

+

The volume is a value between 0 (mute) and 100 (full volume). The default value for the volume is 100.

+
Parameters
+ + +
volumeVolume of the sound
+
+
+
See Also
getVolume
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::SoundStream::stop ()
+
+inherited
+
+ +

Stop playing the audio stream.

+

This function stops the stream if it was playing or paused, and does nothing if it was already stopped. It also resets the playing position (unlike pause()).

+
See Also
play, pause
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
unsigned int sf::SoundSource::m_source
+
+protectedinherited
+
+ +

OpenAL source identifier.

+ +

Definition at line 263 of file SoundSource.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Music.png new file mode 100644 index 0000000000000000000000000000000000000000..36d7a6c55c406b618c577e7a05142fed5b9a1f6d GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^nLymZ!3-oXyO`<&DTx4|5ZC|z{{xvX-h3_XKQsZz z0^-?UrMAz-y2C zP2cCR80e}qo;l^ou(?R+z#1S|8^#U#bwuK^kf3U2;~W*w&A(iOI8?PZs%*7V(?5Tq z+*vDI?xMy~yXiLalYo9oz5(+S_rr%4?3dnTZlA5Oq}W9LOz9To>t#hDm9wrs&y(Ad z9u&Rqm%-fd$A*WwwEWjs9i|%*6w|KakbLSb$isWKDG_26@D4+ zy~_9TtEYV%dQ*12-Btg){?wICDmQmuoxDVTGRSLwla@s4svebi%*9x)uGyRzM^~aWv(=PmBd+}Oz<+`~36y^r$y@7kXrWoda z-RG4xsl;Pj6~p$b@AJG&&$6;^I3ND*WJy@;rs7x9)%*{3KT&CjwB$?xMu=j|2B-fF Y(`IWMwA8451g1O&Pgg&ebxsLQ03h5+Pyhe` literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex-members.htm new file mode 100644 index 0000000..0cd11c0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex-members.htm @@ -0,0 +1,60 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Mutex Member List
+
+
+ +

This is the complete list of members for sf::Mutex, including all inherited members.

+ + + + + + +
lock()sf::Mutex
Mutex()sf::Mutex
NonCopyable()sf::NonCopyableinlineprivate
unlock()sf::Mutex
~Mutex()sf::Mutex
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex.htm new file mode 100644 index 0000000..522ae5f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex.htm @@ -0,0 +1,189 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Mutex Class Reference
+
+
+ +

Blocks concurrent access to shared resources from multiple threads. + More...

+ +

#include <Mutex.hpp>

+
+Inheritance diagram for sf::Mutex:
+
+
+ + +sf::NonCopyable + +
+ + + + + + + + + + + + + + +

+Public Member Functions

 Mutex ()
 Default constructor. More...
 
 ~Mutex ()
 Destructor. More...
 
void lock ()
 Lock the mutex. More...
 
void unlock ()
 Unlock the mutex. More...
 
+

Detailed Description

+

Blocks concurrent access to shared resources from multiple threads.

+

Mutex stands for "MUTual EXclusion".

+

A mutex is a synchronization object, used when multiple threads are involved.

+

When you want to protect a part of the code from being accessed simultaneously by multiple threads, you typically use a mutex. When a thread is locked by a mutex, any other thread trying to lock it will be blocked until the mutex is released by the thread that locked it. This way, you can allow only one thread at a time to access a critical region of your code.

+

Usage example:

+
Database database; // this is a critical resource that needs some protection
+
sf::Mutex mutex;
+
+
void thread1()
+
{
+
mutex.lock(); // this call will block the thread if the mutex is already locked by thread2
+
database.write(...);
+
mutex.unlock(); // if thread2 was waiting, it will now be unblocked
+
}
+
+
void thread2()
+
{
+
mutex.lock(); // this call will block the thread if the mutex is already locked by thread1
+
database.write(...);
+
mutex.unlock(); // if thread1 was waiting, it will now be unblocked
+
}
+

Be very careful with mutexes. A bad usage can lead to bad problems, like deadlocks (two threads are waiting for each other and the application is globally stuck).

+

To make the usage of mutexes more robust, particularly in environments where exceptions can be thrown, you should use the helper class sf::Lock to lock/unlock mutexes.

+

SFML mutexes are recursive, which means that you can lock a mutex multiple times in the same thread without creating a deadlock. In this case, the first call to lock() behaves as usual, and the following ones have no effect. However, you must call unlock() exactly as many times as you called lock(). If you don't, the mutex won't be released.

+
See Also
sf::Lock
+ +

Definition at line 47 of file Mutex.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Mutex::Mutex ()
+
+ +

Default constructor.

+ +
+
+ +
+
+ + + + + + + +
sf::Mutex::~Mutex ()
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void sf::Mutex::lock ()
+
+ +

Lock the mutex.

+

If the mutex is already locked in another thread, this call will block the execution until the mutex is released.

+
See Also
unlock
+ +
+
+ +
+
+ + + + + + + +
void sf::Mutex::unlock ()
+
+ +

Unlock the mutex.

+
See Also
lock
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Mutex.png new file mode 100644 index 0000000000000000000000000000000000000000..6759c64b06430daad72869ad3383e3bac4eaca77 GIT binary patch literal 511 zcmeAS@N?(olHy`uVBq!ia0vp^nLr%C!3-pIHCN{XDTx4|5ZC|z{{xvX-h3_XKQsZz z0^K2I0NkP61PbKh=jQV?)8Z@>3{=K7=q z4PDPl3-{{wOlEnU^K9|2?(g@?1>+`JWlT_cx$0lvlbAU($~`N0yqvV8?cVRDk*=p^ zckkYMer~E~rObr1>(6%RNwBpZeOVmiv2p6@+1qX=E1jM5#YLi0F7Kv-?2edwn@rm` zFZpyL`-j@f9Z%V%mxLB2v7MhZjj1hX=FvO$+mzQV=J(vTM*C0R+?@WkpM|T}>v+0m zU0eBL;gKzWLsV8|ZBDVTdh!Z#}Q)t~L6qmG5i$8Ee*v zJBXJm?~U6VaMwe4h43nQ&IQx==`Ru#K2U$5gY&^pDMLn^cxAPQ=h;VCKGgKic=U8m zacm3oiv^BMJ65$%T(+s_Dv! zEk9kse9G0D`NkE+m8(wKoqQ&;;9BRKsbBjgoVn~x_p63_-c-w#U<$E{UOvZHx+n49 zCgq}Ut0w70Pb_nO&v<7k$Sx3Gr}BKx>xJ?w1VxXE8$0|0#ukI8tDnm{r-UW|QoHD5 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable-members.htm new file mode 100644 index 0000000..c3bd5a0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable-members.htm @@ -0,0 +1,56 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::NonCopyable Member List
+
+
+ +

This is the complete list of members for sf::NonCopyable, including all inherited members.

+ + +
NonCopyable()sf::NonCopyableinlineprotected
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable.htm new file mode 100644 index 0000000..2a3d75f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable.htm @@ -0,0 +1,131 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::NonCopyable Class Reference
+
+
+ +

Utility class that makes any derived class non-copyable. + More...

+ +

#include <NonCopyable.hpp>

+
+Inheritance diagram for sf::NonCopyable:
+
+
+ + +sf::Context +sf::Ftp +sf::Http +sf::Lock +sf::Mutex +sf::RenderTarget +sf::Shader +sf::Socket +sf::Thread +sf::ThreadLocal +sf::Window + +
+ + + + + +

+Protected Member Functions

 NonCopyable ()
 Default constructor. More...
 
+

Detailed Description

+

Utility class that makes any derived class non-copyable.

+

This class makes its instances non-copyable, by explicitely disabling its copy constructor and its assignment operator.

+

To create a non-copyable class, simply inherit from sf::NonCopyable.

+

The type of inheritance (public or private) doesn't matter, the copy constructor and assignment operator are declared private in sf::NonCopyable so they will end up being inaccessible in both cases. Thus you can use a shorter syntax for inheriting from it (see below).

+

Usage example:

+
class MyNonCopyableClass : sf::NonCopyable
+
{
+
...
+
};
+

Deciding whether the instances of a class can be copied or not is a very important design choice. You are strongly encouraged to think about it before writing a class, and to use sf::NonCopyable when necessary to prevent many potential future errors when using it. This is also a very important indication to users of your class.

+ +

Definition at line 41 of file NonCopyable.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
sf::NonCopyable::NonCopyable ()
+
+inlineprotected
+
+ +

Default constructor.

+

Because this class has a copy constructor, the compiler will not automatically generate the default constructor. That's why we must define it explicitely.

+ +

Definition at line 53 of file NonCopyable.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1NonCopyable.png new file mode 100644 index 0000000000000000000000000000000000000000..85b9dd9fe83de4bb1c0e7088c1a3dda8f166d7dc GIT binary patch literal 3225 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 YCwuIK#juSB{2u{;jyQ+MN6uXTH*iAsg8%>k literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Packet-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Packet-members.htm new file mode 100644 index 0000000..4de6d0b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Packet-members.htm @@ -0,0 +1,95 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Packet Member List
+
+
+ +

This is the complete list of members for sf::Packet, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
append(const void *data, std::size_t sizeInBytes)sf::Packet
clear()sf::Packet
endOfPacket() const sf::Packet
getData() const sf::Packet
getDataSize() const sf::Packet
onReceive(const void *data, std::size_t size)sf::Packetprotectedvirtual
onSend(std::size_t &size)sf::Packetprotectedvirtual
operator BoolType() const sf::Packet
operator<<(bool data)sf::Packet
operator<<(Int8 data) (defined in sf::Packet)sf::Packet
operator<<(Uint8 data) (defined in sf::Packet)sf::Packet
operator<<(Int16 data) (defined in sf::Packet)sf::Packet
operator<<(Uint16 data) (defined in sf::Packet)sf::Packet
operator<<(Int32 data) (defined in sf::Packet)sf::Packet
operator<<(Uint32 data) (defined in sf::Packet)sf::Packet
operator<<(float data) (defined in sf::Packet)sf::Packet
operator<<(double data) (defined in sf::Packet)sf::Packet
operator<<(const char *data) (defined in sf::Packet)sf::Packet
operator<<(const std::string &data) (defined in sf::Packet)sf::Packet
operator<<(const wchar_t *data) (defined in sf::Packet)sf::Packet
operator<<(const std::wstring &data) (defined in sf::Packet)sf::Packet
operator<<(const String &data) (defined in sf::Packet)sf::Packet
operator>>(bool &data)sf::Packet
operator>>(Int8 &data) (defined in sf::Packet)sf::Packet
operator>>(Uint8 &data) (defined in sf::Packet)sf::Packet
operator>>(Int16 &data) (defined in sf::Packet)sf::Packet
operator>>(Uint16 &data) (defined in sf::Packet)sf::Packet
operator>>(Int32 &data) (defined in sf::Packet)sf::Packet
operator>>(Uint32 &data) (defined in sf::Packet)sf::Packet
operator>>(float &data) (defined in sf::Packet)sf::Packet
operator>>(double &data) (defined in sf::Packet)sf::Packet
operator>>(char *data) (defined in sf::Packet)sf::Packet
operator>>(std::string &data) (defined in sf::Packet)sf::Packet
operator>>(wchar_t *data) (defined in sf::Packet)sf::Packet
operator>>(std::wstring &data) (defined in sf::Packet)sf::Packet
operator>>(String &data) (defined in sf::Packet)sf::Packet
Packet()sf::Packet
TcpSocket (defined in sf::Packet)sf::Packetfriend
UdpSocket (defined in sf::Packet)sf::Packetfriend
~Packet()sf::Packetvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Packet.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Packet.htm new file mode 100644 index 0000000..0b39b55 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Packet.htm @@ -0,0 +1,597 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Utility class to build blocks of data to transfer over the network. + More...

+ +

#include <Packet.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Packet ()
 Default constructor. More...
 
virtual ~Packet ()
 Virtual destructor. More...
 
void append (const void *data, std::size_t sizeInBytes)
 Append data to the end of the packet. More...
 
void clear ()
 Clear the packet. More...
 
const void * getData () const
 Get a pointer to the data contained in the packet. More...
 
std::size_t getDataSize () const
 Get the size of the data contained in the packet. More...
 
bool endOfPacket () const
 Tell if the reading position has reached the end of the packet. More...
 
 operator BoolType () const
 Test the validity of the packet, for reading. More...
 
Packetoperator>> (bool &data)
 Overloads of operator >> to read data from the packet. More...
 
+Packetoperator>> (Int8 &data)
 
+Packetoperator>> (Uint8 &data)
 
+Packetoperator>> (Int16 &data)
 
+Packetoperator>> (Uint16 &data)
 
+Packetoperator>> (Int32 &data)
 
+Packetoperator>> (Uint32 &data)
 
+Packetoperator>> (float &data)
 
+Packetoperator>> (double &data)
 
+Packetoperator>> (char *data)
 
+Packetoperator>> (std::string &data)
 
+Packetoperator>> (wchar_t *data)
 
+Packetoperator>> (std::wstring &data)
 
+Packetoperator>> (String &data)
 
Packetoperator<< (bool data)
 Overloads of operator << to write data into the packet. More...
 
+Packetoperator<< (Int8 data)
 
+Packetoperator<< (Uint8 data)
 
+Packetoperator<< (Int16 data)
 
+Packetoperator<< (Uint16 data)
 
+Packetoperator<< (Int32 data)
 
+Packetoperator<< (Uint32 data)
 
+Packetoperator<< (float data)
 
+Packetoperator<< (double data)
 
+Packetoperator<< (const char *data)
 
+Packetoperator<< (const std::string &data)
 
+Packetoperator<< (const wchar_t *data)
 
+Packetoperator<< (const std::wstring &data)
 
+Packetoperator<< (const String &data)
 
+ + + + + + + +

+Protected Member Functions

virtual const void * onSend (std::size_t &size)
 Called before the packet is sent over the network. More...
 
virtual void onReceive (const void *data, std::size_t size)
 Called after the packet is received over the network. More...
 
+ + + + + +

+Friends

+class TcpSocket
 
+class UdpSocket
 
+

Detailed Description

+

Utility class to build blocks of data to transfer over the network.

+

Packets provide a safe and easy way to serialize data, in order to send it over the network using sockets (sf::TcpSocket, sf::UdpSocket).

+

Packets solve 2 fundamental problems that arise when transfering data over the network:

+
    +
  • data is interpreted correctly according to the endianness
  • +
  • the bounds of the packet are preserved (one send == one receive)
  • +
+

The sf::Packet class provides both input and output modes. It is designed to follow the behaviour of standard C++ streams, using operators >> and << to extract and insert data.

+

It is recommended to use only fixed-size types (like sf::Int32, etc.), to avoid possible differences between the sender and the receiver. Indeed, the native C++ types may have different sizes on two platforms and your data may be corrupted if that happens.

+

Usage example:

+
sf::Uint32 x = 24;
+
std::string s = "hello";
+
double d = 5.89;
+
+
// Group the variables to send into a packet
+
sf::Packet packet;
+
packet << x << s << d;
+
+
// Send it over the network (socket is a valid sf::TcpSocket)
+
socket.send(packet);
+
+
-----------------------------------------------------------------
+
+
// Receive the packet at the other end
+
sf::Packet packet;
+
socket.receive(packet);
+
+
// Extract the variables contained in the packet
+
sf::Uint32 x;
+
std::string s;
+
double d;
+
if (packet >> x >> s >> d)
+
{
+
// Data extracted successfully...
+
}
+

Packets have built-in operator >> and << overloads for standard types:

+
    +
  • bool
  • +
  • fixed-size integer types (sf::Int8/16/32, sf::Uint8/16/32)
  • +
  • floating point numbers (float, double)
  • +
  • string types (char*, wchar_t*, std::string, std::wstring, sf::String)
  • +
+

Like standard streams, it is also possible to define your own overloads of operators >> and << in order to handle your custom types.

+
struct MyStruct
+
{
+
float number;
+
sf::Int8 integer;
+
std::string str;
+
};
+
+
sf::Packet& operator <<(sf::Packet& packet, const MyStruct& m)
+
{
+
return packet << m.number << m.integer << m.str;
+
}
+
+
sf::Packet& operator >>(sf::Packet& packet, MyStruct& m)
+
{
+
return packet >> m.number >> m.integer >> m.str;
+
}
+

Packets also provide an extra feature that allows to apply custom transformations to the data before it is sent, and after it is received. This is typically used to handle automatic compression or encryption of the data. This is achieved by inheriting from sf::Packet, and overriding the onSend and onReceive functions.

+

Here is an example:

+
class ZipPacket : public sf::Packet
+
{
+
virtual const void* onSend(std::size_t& size)
+
{
+
const void* srcData = getData();
+
std::size_t srcSize = getDataSize();
+
+
return MySuperZipFunction(srcData, srcSize, &size);
+
}
+
+
virtual void onReceive(const void* data, std::size_t size)
+
{
+
std::size_t dstSize;
+
const void* dstData = MySuperUnzipFunction(data, size, &dstSize);
+
+
append(dstData, dstSize);
+
}
+
};
+
+
// Use like regular packets:
+
ZipPacket packet;
+
packet << x << s << d;
+
...
+
See Also
sf::TcpSocket, sf::UdpSocket
+ +

Definition at line 47 of file Packet.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Packet::Packet ()
+
+ +

Default constructor.

+

Creates an empty packet.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::Packet::~Packet ()
+
+virtual
+
+ +

Virtual destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Packet::append (const void * data,
std::size_t sizeInBytes 
)
+
+ +

Append data to the end of the packet.

+
Parameters
+ + + +
dataPointer to the sequence of bytes to append
sizeInBytesNumber of bytes to append
+
+
+
See Also
clear
+ +
+
+ +
+
+ + + + + + + +
void sf::Packet::clear ()
+
+ +

Clear the packet.

+

After calling Clear, the packet is empty.

+
See Also
append
+ +
+
+ +
+
+ + + + + + + +
bool sf::Packet::endOfPacket () const
+
+ +

Tell if the reading position has reached the end of the packet.

+

This function is useful to know if there is some data left to be read, without actually reading it.

+
Returns
True if all data was read, false otherwise
+
See Also
operator bool
+ +
+
+ +
+
+ + + + + + + +
const void* sf::Packet::getData () const
+
+ +

Get a pointer to the data contained in the packet.

+

Warning: the returned pointer may become invalid after you append data to the packet, therefore it should never be stored. The return pointer is NULL if the packet is empty.

+
Returns
Pointer to the data
+
See Also
getDataSize
+ +
+
+ +
+
+ + + + + + + +
std::size_t sf::Packet::getDataSize () const
+
+ +

Get the size of the data contained in the packet.

+

This function returns the number of bytes pointed to by what getData returns.

+
Returns
Data size, in bytes
+
See Also
getData
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sf::Packet::onReceive (const void * data,
std::size_t size 
)
+
+protectedvirtual
+
+ +

Called after the packet is received over the network.

+

This function can be defined by derived classes to transform the data after it is received; this can be used for uncompression, decryption, etc. The function receives a pointer to the received data, and must fill the packet with the transformed bytes. The default implementation fills the packet directly without transforming the data.

+
Parameters
+ + + +
dataPointer to the received bytes
sizeNumber of bytes
+
+
+
See Also
onSend
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual const void* sf::Packet::onSend (std::size_t & size)
+
+protectedvirtual
+
+ +

Called before the packet is sent over the network.

+

This function can be defined by derived classes to transform the data before it is sent; this can be used for compression, encryption, etc. The function must return a pointer to the modified data, as well as the number of bytes pointed. The default implementation provides the packet's data without transforming it.

+
Parameters
+ + +
sizeVariable to fill with the size of data to send
+
+
+
Returns
Pointer to the array of bytes to send
+
See Also
onReceive
+ +
+
+ +
+
+ + + + + + + +
sf::Packet::operator BoolType () const
+
+ +

Test the validity of the packet, for reading.

+

This operator allows to test the packet as a boolean variable, to check if a reading operation was successful.

+

A packet will be in an invalid state if it has no more data to read.

+

This behaviour is the same as standard C++ streams.

+

Usage example:

+
float x;
+
packet >> x;
+
if (packet)
+
{
+
// ok, x was extracted successfully
+
}
+
+
// -- or --
+
+
float x;
+
if (packet >> x)
+
{
+
// ok, x was extracted successfully
+
}
+

Don't focus on the return type, it's equivalent to bool but it disallows unwanted implicit conversions to integer or pointer types.

+
Returns
True if last data extraction from packet was successful
+
See Also
endOfPacket
+ +
+
+ +
+
+ + + + + + + + +
Packet& sf::Packet::operator<< (bool data)
+
+ +

Overloads of operator << to write data into the packet.

+ +
+
+ +
+
+ + + + + + + + +
Packet& sf::Packet::operator>> (bool & data)
+
+ +

Overloads of operator >> to read data from the packet.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Rect-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Rect-members.htm new file mode 100644 index 0000000..4cde9a6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Rect-members.htm @@ -0,0 +1,73 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Rect< T > Member List
+
+
+ +

This is the complete list of members for sf::Rect< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
contains(T x, T y) const sf::Rect< T >
contains(const Vector2< T > &point) const sf::Rect< T >
heightsf::Rect< T >
intersects(const Rect< T > &rectangle) const sf::Rect< T >
intersects(const Rect< T > &rectangle, Rect< T > &intersection) const sf::Rect< T >
leftsf::Rect< T >
operator!=(const Rect< T > &left, const Rect< T > &right)sf::Rect< T >related
operator==(const Rect< T > &left, const Rect< T > &right)sf::Rect< T >related
Rect()sf::Rect< T >
Rect(T rectLeft, T rectTop, T rectWidth, T rectHeight)sf::Rect< T >
Rect(const Vector2< T > &position, const Vector2< T > &size)sf::Rect< T >
Rect(const Rect< U > &rectangle)sf::Rect< T >explicit
Rect() (defined in sf::Rect< T >)sf::Rect< T >
Rect(T rectLeft, T rectTop, T rectWidth, T rectHeight) (defined in sf::Rect< T >)sf::Rect< T >
Rect(const Vector2< T > &position, const Vector2< T > &size) (defined in sf::Rect< T >)sf::Rect< T >
Rect(const Rect< U > &rectangle) (defined in sf::Rect< T >)sf::Rect< T >
topsf::Rect< T >
widthsf::Rect< T >
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Rect.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Rect.htm new file mode 100644 index 0000000..2e67e2e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Rect.htm @@ -0,0 +1,626 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Utility class for manipulating 2D axis aligned rectangles. + More...

+ +

#include <Rect.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Rect ()
 Default constructor. More...
 
 Rect (T rectLeft, T rectTop, T rectWidth, T rectHeight)
 Construct the rectangle from its coordinates. More...
 
 Rect (const Vector2< T > &position, const Vector2< T > &size)
 Construct the rectangle from position and size. More...
 
template<typename U >
 Rect (const Rect< U > &rectangle)
 Construct the rectangle from another type of rectangle. More...
 
bool contains (T x, T y) const
 Check if a point is inside the rectangle's area. More...
 
bool contains (const Vector2< T > &point) const
 Check if a point is inside the rectangle's area. More...
 
bool intersects (const Rect< T > &rectangle) const
 Check the intersection between two rectangles. More...
 
bool intersects (const Rect< T > &rectangle, Rect< T > &intersection) const
 Check the intersection between two rectangles. More...
 
+template<typename T >
 Rect (T rectLeft, T rectTop, T rectWidth, T rectHeight)
 
+template<typename T >
 Rect (const Vector2< T > &position, const Vector2< T > &size)
 
+template<typename U >
 Rect (const Rect< U > &rectangle)
 
+ + + + + + + + + + + + + +

+Public Attributes

left
 Left coordinate of the rectangle. More...
 
top
 Top coordinate of the rectangle. More...
 
width
 Width of the rectangle. More...
 
height
 Height of the rectangle. More...
 
+ + + + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
template<typename T >
bool operator== (const Rect< T > &left, const Rect< T > &right)
 Overload of binary operator ==. More...
 
template<typename T >
bool operator!= (const Rect< T > &left, const Rect< T > &right)
 Overload of binary operator !=. More...
 
+

Detailed Description

+

template<typename T>
+class sf::Rect< T >

+ +

Utility class for manipulating 2D axis aligned rectangles.

+

A rectangle is defined by its top-left corner and its size.

+

It is a very simple class defined for convenience, so its member variables (left, top, width and height) are public and can be accessed directly, just like the vector classes (Vector2 and Vector3).

+

To keep things simple, sf::Rect doesn't define functions to emulate the properties that are not directly members (such as right, bottom, center, etc.), it rather only provides intersection functions.

+

sf::Rect uses the usual rules for its boundaries:

+
    +
  • The left and top edges are included in the rectangle's area
  • +
  • The right (left + width) and bottom (top + height) edges are excluded from the rectangle's area
  • +
+

This means that sf::IntRect(0, 0, 1, 1) and sf::IntRect(1, 1, 1, 1) don't intersect.

+

sf::Rect is a template and may be used with any numeric type, but for simplicity the instanciations used by SFML are typedefed:

+
    +
  • sf::Rect<int> is sf::IntRect
  • +
  • sf::Rect<float> is sf::FloatRect
  • +
+

So that you don't have to care about the template syntax.

+

Usage example:

+
// Define a rectangle, located at (0, 0) with a size of 20x5
+
sf::IntRect r1(0, 0, 20, 5);
+
+
// Define another rectangle, located at (4, 2) with a size of 18x10
+
sf::Vector2i position(4, 2);
+
sf::Vector2i size(18, 10);
+
sf::IntRect r2(position, size);
+
+
// Test intersections with the point (3, 1)
+
bool b1 = r1.contains(3, 1); // true
+
bool b2 = r2.contains(3, 1); // false
+
+
// Test the intersection between r1 and r2
+
sf::IntRect result;
+
bool b3 = r1.intersects(r2, result); // true
+
// result == (4, 2, 16, 3)
+
+

Definition at line 42 of file Rect.hpp.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + + + +
sf::Rect< T >::Rect ()
+
+ +

Default constructor.

+

Creates an empty rectangle (it is equivalent to calling Rect(0, 0, 0, 0)).

+ +
+
+ +
+
+
+template<typename T>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sf::Rect< T >::Rect (rectLeft,
rectTop,
rectWidth,
rectHeight 
)
+
+ +

Construct the rectangle from its coordinates.

+

Be careful, the last two parameters are the width and height, not the right and bottom coordinates!

+
Parameters
+ + + + + +
rectLeftLeft coordinate of the rectangle
rectTopTop coordinate of the rectangle
rectWidthWidth of the rectangle
rectHeightHeight of the rectangle
+
+
+ +
+
+ +
+
+
+template<typename T>
+ + + + + + + + + + + + + + + + + + +
sf::Rect< T >::Rect (const Vector2< T > & position,
const Vector2< T > & size 
)
+
+ +

Construct the rectangle from position and size.

+

Be careful, the last parameter is the size, not the bottom-right corner!

+
Parameters
+ + + +
positionPosition of the top-left corner of the rectangle
sizeSize of the rectangle
+
+
+ +
+
+ +
+
+
+template<typename T>
+
+template<typename U >
+ + + + + +
+ + + + + + + + +
sf::Rect< T >::Rect (const Rect< U > & rectangle)
+
+explicit
+
+ +

Construct the rectangle from another type of rectangle.

+

This constructor doesn't replace the copy constructor, it's called only when U != T. A call to this constructor will fail to compile if U is not convertible to T.

+
Parameters
+ + +
rectangleRectangle to convert
+
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + + + + + + + + + + + + + + +
bool sf::Rect< T >::contains (x,
y 
) const
+
+ +

Check if a point is inside the rectangle's area.

+
Parameters
+ + + +
xX coordinate of the point to test
yY coordinate of the point to test
+
+
+
Returns
True if the point is inside, false otherwise
+
See Also
intersects
+ +
+
+ +
+
+
+template<typename T>
+ + + + + + + + +
bool sf::Rect< T >::contains (const Vector2< T > & point) const
+
+ +

Check if a point is inside the rectangle's area.

+
Parameters
+ + +
pointPoint to test
+
+
+
Returns
True if the point is inside, false otherwise
+
See Also
intersects
+ +
+
+ +
+
+
+template<typename T>
+ + + + + + + + +
bool sf::Rect< T >::intersects (const Rect< T > & rectangle) const
+
+ +

Check the intersection between two rectangles.

+
Parameters
+ + +
rectangleRectangle to test
+
+
+
Returns
True if rectangles overlap, false otherwise
+
See Also
contains
+ +
+
+ +
+
+
+template<typename T>
+ + + + + + + + + + + + + + + + + + +
bool sf::Rect< T >::intersects (const Rect< T > & rectangle,
Rect< T > & intersection 
) const
+
+ +

Check the intersection between two rectangles.

+

This overload returns the overlapped rectangle in the intersection parameter.

+
Parameters
+ + + +
rectangleRectangle to test
intersectionRectangle to be filled with the intersection
+
+
+
Returns
True if rectangles overlap, false otherwise
+
See Also
contains
+ +
+
+

Friends And Related Function Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator!= (const Rect< T > & left,
const Rect< T > & right 
)
+
+related
+
+ +

Overload of binary operator !=.

+

This operator compares strict difference between two rectangles.

+
Parameters
+ + + +
leftLeft operand (a rectangle)
rightRight operand (a rectangle)
+
+
+
Returns
True if left is not equal to right
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator== (const Rect< T > & left,
const Rect< T > & right 
)
+
+related
+
+ +

Overload of binary operator ==.

+

This operator compares strict equality between two rectangles.

+
Parameters
+ + + +
leftLeft operand (a rectangle)
rightRight operand (a rectangle)
+
+
+
Returns
True if left is equal to right
+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename T>
+ + + + +
T sf::Rect< T >::height
+
+ +

Height of the rectangle.

+ +

Definition at line 154 of file Rect.hpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + +
T sf::Rect< T >::left
+
+ +

Left coordinate of the rectangle.

+ +

Definition at line 151 of file Rect.hpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + +
T sf::Rect< T >::top
+
+ +

Top coordinate of the rectangle.

+ +

Definition at line 152 of file Rect.hpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + +
T sf::Rect< T >::width
+
+ +

Width of the rectangle.

+ +

Definition at line 153 of file Rect.hpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape-members.htm new file mode 100644 index 0000000..f1a473c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape-members.htm @@ -0,0 +1,96 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::RectangleShape Member List
+
+
+ +

This is the complete list of members for sf::RectangleShape, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getFillColor() const sf::Shape
getGlobalBounds() const sf::Shape
getInverseTransform() const sf::Transformable
getLocalBounds() const sf::Shape
getOrigin() const sf::Transformable
getOutlineColor() const sf::Shape
getOutlineThickness() const sf::Shape
getPoint(unsigned int index) const sf::RectangleShapevirtual
getPointCount() const sf::RectangleShapevirtual
getPosition() const sf::Transformable
getRotation() const sf::Transformable
getScale() const sf::Transformable
getSize() const sf::RectangleShape
getTexture() const sf::Shape
getTextureRect() const sf::Shape
getTransform() const sf::Transformable
move(float offsetX, float offsetY)sf::Transformable
move(const Vector2f &offset)sf::Transformable
RectangleShape(const Vector2f &size=Vector2f(0, 0))sf::RectangleShapeexplicit
rotate(float angle)sf::Transformable
scale(float factorX, float factorY)sf::Transformable
scale(const Vector2f &factor)sf::Transformable
setFillColor(const Color &color)sf::Shape
setOrigin(float x, float y)sf::Transformable
setOrigin(const Vector2f &origin)sf::Transformable
setOutlineColor(const Color &color)sf::Shape
setOutlineThickness(float thickness)sf::Shape
setPosition(float x, float y)sf::Transformable
setPosition(const Vector2f &position)sf::Transformable
setRotation(float angle)sf::Transformable
setScale(float factorX, float factorY)sf::Transformable
setScale(const Vector2f &factors)sf::Transformable
setSize(const Vector2f &size)sf::RectangleShape
setTexture(const Texture *texture, bool resetRect=false)sf::Shape
setTextureRect(const IntRect &rect)sf::Shape
Shape()sf::Shapeprotected
Transformable()sf::Transformable
update()sf::Shapeprotected
~Drawable()sf::Drawableinlinevirtual
~Shape()sf::Shapevirtual
~Transformable()sf::Transformablevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape.htm new file mode 100644 index 0000000..29ef091 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape.htm @@ -0,0 +1,1376 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Specialized shape representing a rectangle. + More...

+ +

#include <RectangleShape.hpp>

+
+Inheritance diagram for sf::RectangleShape:
+
+
+ + +sf::Shape +sf::Drawable +sf::Transformable + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RectangleShape (const Vector2f &size=Vector2f(0, 0))
 Default constructor. More...
 
void setSize (const Vector2f &size)
 Set the size of the rectangle. More...
 
const Vector2fgetSize () const
 Get the size of the rectangle. More...
 
virtual unsigned int getPointCount () const
 Get the number of points defining the shape. More...
 
virtual Vector2f getPoint (unsigned int index) const
 Get a point of the shape. More...
 
void setTexture (const Texture *texture, bool resetRect=false)
 Change the source texture of the shape. More...
 
void setTextureRect (const IntRect &rect)
 Set the sub-rectangle of the texture that the shape will display. More...
 
void setFillColor (const Color &color)
 Set the fill color of the shape. More...
 
void setOutlineColor (const Color &color)
 Set the outline color of the shape. More...
 
void setOutlineThickness (float thickness)
 Set the thickness of the shape's outline. More...
 
const TexturegetTexture () const
 Get the source texture of the shape. More...
 
const IntRectgetTextureRect () const
 Get the sub-rectangle of the texture displayed by the shape. More...
 
const ColorgetFillColor () const
 Get the fill color of the shape. More...
 
const ColorgetOutlineColor () const
 Get the outline color of the shape. More...
 
float getOutlineThickness () const
 Get the outline thickness of the shape. More...
 
FloatRect getLocalBounds () const
 Get the local bounding rectangle of the entity. More...
 
FloatRect getGlobalBounds () const
 Get the global bounding rectangle of the entity. More...
 
void setPosition (float x, float y)
 set the position of the object More...
 
void setPosition (const Vector2f &position)
 set the position of the object More...
 
void setRotation (float angle)
 set the orientation of the object More...
 
void setScale (float factorX, float factorY)
 set the scale factors of the object More...
 
void setScale (const Vector2f &factors)
 set the scale factors of the object More...
 
void setOrigin (float x, float y)
 set the local origin of the object More...
 
void setOrigin (const Vector2f &origin)
 set the local origin of the object More...
 
const Vector2fgetPosition () const
 get the position of the object More...
 
float getRotation () const
 get the orientation of the object More...
 
const Vector2fgetScale () const
 get the current scale of the object More...
 
const Vector2fgetOrigin () const
 get the local origin of the object More...
 
void move (float offsetX, float offsetY)
 Move the object by a given offset. More...
 
void move (const Vector2f &offset)
 Move the object by a given offset. More...
 
void rotate (float angle)
 Rotate the object. More...
 
void scale (float factorX, float factorY)
 Scale the object. More...
 
void scale (const Vector2f &factor)
 Scale the object. More...
 
const TransformgetTransform () const
 get the combined transform of the object More...
 
const TransformgetInverseTransform () const
 get the inverse of the combined transform of the object More...
 
+ + + + +

+Protected Member Functions

void update ()
 Recompute the internal geometry of the shape. More...
 
+

Detailed Description

+

Specialized shape representing a rectangle.

+

This class inherits all the functions of sf::Transformable (position, rotation, scale, bounds, ...) as well as the functions of sf::Shape (outline, color, texture, ...).

+

Usage example:

+
+
rectangle.setSize(sf::Vector2f(100, 50));
+ +
rectangle.setOutlineThickness(5);
+
rectangle.setPosition(10, 20);
+
...
+
window.draw(rectangle);
+
See Also
sf::Shape, sf::CircleShape, sf::ConvexShape
+ +

Definition at line 41 of file RectangleShape.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
sf::RectangleShape::RectangleShape (const Vector2fsize = Vector2f(0, 0))
+
+explicit
+
+ +

Default constructor.

+
Parameters
+ + +
sizeSize of the rectangle
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
const Color& sf::Shape::getFillColor () const
+
+inherited
+
+ +

Get the fill color of the shape.

+
Returns
Fill color of the shape
+
See Also
setFillColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
FloatRect sf::Shape::getGlobalBounds () const
+
+inherited
+
+ +

Get the global bounding rectangle of the entity.

+

The returned rectangle is in global coordinates, which means that it takes in account the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the sprite in the global 2D world's coordinate system.

+
Returns
Global bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getInverseTransform () const
+
+inherited
+
+ +

get the inverse of the combined transform of the object

+
Returns
Inverse of the combined transformations applied to the object
+
See Also
getTransform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
FloatRect sf::Shape::getLocalBounds () const
+
+inherited
+
+ +

Get the local bounding rectangle of the entity.

+

The returned rectangle is in local coordinates, which means that it ignores the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the entity in the entity's coordinate system.

+
Returns
Local bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getOrigin () const
+
+inherited
+
+ +

get the local origin of the object

+
Returns
Current origin
+
See Also
setOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Color& sf::Shape::getOutlineColor () const
+
+inherited
+
+ +

Get the outline color of the shape.

+
Returns
Outline color of the shape
+
See Also
setOutlineColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::Shape::getOutlineThickness () const
+
+inherited
+
+ +

Get the outline thickness of the shape.

+
Returns
Outline thickness of the shape
+
See Also
setOutlineThickness
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Vector2f sf::RectangleShape::getPoint (unsigned int index) const
+
+virtual
+
+ +

Get a point of the shape.

+

The result is undefined if index is out of the valid range.

+
Parameters
+ + +
indexIndex of the point to get, in range [0 .. getPointCount() - 1]
+
+
+
Returns
Index-th point of the shape
+ +

Implements sf::Shape.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int sf::RectangleShape::getPointCount () const
+
+virtual
+
+ +

Get the number of points defining the shape.

+
Returns
Number of points of the shape
+ +

Implements sf::Shape.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getPosition () const
+
+inherited
+
+ +

get the position of the object

+
Returns
Current position
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::Transformable::getRotation () const
+
+inherited
+
+ +

get the orientation of the object

+

The rotation is always in the range [0, 360].

+
Returns
Current rotation, in degrees
+
See Also
setRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getScale () const
+
+inherited
+
+ +

get the current scale of the object

+
Returns
Current scale factors
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + +
const Vector2f& sf::RectangleShape::getSize () const
+
+ +

Get the size of the rectangle.

+
Returns
Size of the rectangle
+
See Also
setSize
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Texture* sf::Shape::getTexture () const
+
+inherited
+
+ +

Get the source texture of the shape.

+

If the shape has no source texture, a NULL pointer is returned. The returned pointer is const, which means that you can't modify the texture when you retrieve it with this function.

+
Returns
Pointer to the shape's texture
+
See Also
setTexture
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const IntRect& sf::Shape::getTextureRect () const
+
+inherited
+
+ +

Get the sub-rectangle of the texture displayed by the shape.

+
Returns
Texture rectangle of the shape
+
See Also
setTextureRect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getTransform () const
+
+inherited
+
+ +

get the combined transform of the object

+
Returns
Transform combining the position/rotation/scale/origin of the object
+
See Also
getInverseTransform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::move (float offsetX,
float offsetY 
)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f pos = object.getPosition();
+
object.setPosition(pos.x + offsetX, pos.y + offsetY);
+
Parameters
+ + + +
offsetXX offset
offsetYY offset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::move (const Vector2foffset)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
object.setPosition(object.getPosition() + offset);
+
Parameters
+ + +
offsetOffset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::rotate (float angle)
+
+inherited
+
+ +

Rotate the object.

+

This function adds to the current rotation of the object, unlike setRotation which overwrites it. Thus, it is equivalent to the following code:

+
object.setRotation(object.getRotation() + angle);
+
Parameters
+ + +
angleAngle of rotation, in degrees
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::scale (float factorX,
float factorY 
)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factorX, scale.y * factorY);
+
Parameters
+ + + +
factorXHorizontal scale factor
factorYVertical scale factor
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::scale (const Vector2ffactor)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factor.x, scale.y * factor.y);
+
Parameters
+ + +
factorScale factors
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setFillColor (const Colorcolor)
+
+inherited
+
+ +

Set the fill color of the shape.

+

This color is modulated (multiplied) with the shape's texture if any. It can be used to colorize the shape, or change its global opacity. You can use sf::Color::Transparent to make the inside of the shape transparent, and have the outline alone. By default, the shape's fill color is opaque white.

+
Parameters
+ + +
colorNew color of the shape
+
+
+
See Also
getFillColor, setOutlineColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setOrigin (float x,
float y 
)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new origin
yY coordinate of the new origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setOrigin (const Vector2forigin)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + +
originNew origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setOutlineColor (const Colorcolor)
+
+inherited
+
+ +

Set the outline color of the shape.

+

By default, the shape's outline color is opaque white.

+
Parameters
+ + +
colorNew outline color of the shape
+
+
+
See Also
getOutlineColor, setFillColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setOutlineThickness (float thickness)
+
+inherited
+
+ +

Set the thickness of the shape's outline.

+

Note that negative values are allowed (so that the outline expands towards the center of the shape), and using zero disables the outline. By default, the outline thickness is 0.

+
Parameters
+ + +
thicknessNew outline thickness
+
+
+
See Also
getOutlineThickness
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setPosition (float x,
float y 
)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new position
yY coordinate of the new position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setPosition (const Vector2fposition)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + +
positionNew position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setRotation (float angle)
+
+inherited
+
+ +

set the orientation of the object

+

This function completely overwrites the previous rotation. See the rotate function to add an angle based on the previous rotation instead. The default rotation of a transformable object is 0.

+
Parameters
+ + +
angleNew rotation, in degrees
+
+
+
See Also
rotate, getRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setScale (float factorX,
float factorY 
)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + + +
factorXNew horizontal scale factor
factorYNew vertical scale factor
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setScale (const Vector2ffactors)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + +
factorsNew scale factors
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + + + + +
void sf::RectangleShape::setSize (const Vector2fsize)
+
+ +

Set the size of the rectangle.

+
Parameters
+ + +
sizeNew size of the rectangle
+
+
+
See Also
getSize
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Shape::setTexture (const Texturetexture,
bool resetRect = false 
)
+
+inherited
+
+ +

Change the source texture of the shape.

+

The texture argument refers to a texture that must exist as long as the shape uses it. Indeed, the shape doesn't store its own copy of the texture, but rather keeps a pointer to the one that you passed to this function. If the source texture is destroyed and the shape tries to use it, the behaviour is undefined. texture can be NULL to disable texturing. If resetRect is true, the TextureRect property of the shape is automatically adjusted to the size of the new texture. If it is false, the texture rect is left unchanged.

+
Parameters
+ + + +
textureNew texture
resetRectShould the texture rect be reset to the size of the new texture?
+
+
+
See Also
getTexture, setTextureRect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Shape::setTextureRect (const IntRectrect)
+
+inherited
+
+ +

Set the sub-rectangle of the texture that the shape will display.

+

The texture rect is useful when you don't want to display the whole texture, but rather a part of it. By default, the texture rect covers the entire texture.

+
Parameters
+ + +
rectRectangle defining the region of the texture to display
+
+
+
See Also
getTextureRect, setTexture
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Shape::update ()
+
+protectedinherited
+
+ +

Recompute the internal geometry of the shape.

+

This function must be called by the derived class everytime the shape's points change (ie. the result of either getPointCount or getPoint is different).

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RectangleShape.png new file mode 100644 index 0000000000000000000000000000000000000000..59630c6f9ce886064f8366d08fa37b4b49699816 GIT binary patch literal 1060 zcmeAS@N?(olHy`uVBq!ia0vp^zks-dgBeKvyuo%9NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~Z}xO?45?szJNNap)e1ar=JMG;|Mk~I z<;Qq!ygV~G%QL-fb;l%L#eb^DByf&iNKPGn4x#L$=U&h4T1(G>&0sM*f zJ8D%{9>4W)LwtO#bh_Lo>lcnLa|`;eUXJ~IapL9qE1s9{U!vyedoOhV`3$q?rw{(M zzO(s07!DX*pvAk(EZ_vN_5qkIj-=2HAfbWXD@V*L{k9S1gy}vS>GrliE*X88uhcaq^ zioY)Xmva7W`GHA2b9>&a{xSZV)S@$a_N(@XGE;V%H1ogu?Yx=y+70$yDIEPTKOo`hwDii#V{hP;!qLgM_f^%bFP313cl=mlzk8G8o5&^DD}pJ^p*A z%HIjzE7dRleDTe+=~r#<^j1AJ#WkH9o;uX2dD`kN+Nbkj)}znomCVn3>g9qq_G0F)n@2ZFey>clPORYCzI)|M zz7@WDnPOMf@jjw<_j|8b-?yF;s|t_5{cQf1(%oCO<}Z4hwfuGJ`x4m$(@fh`|C#>C zz1lTx)#w>M3DudALe za|pIw-R&y$WN+~N^IFBOg{w}5rtkbLd+DY|=-b~X_SP-95b=(E_wl^>d#-oO&e9YS zt*hrflUlnv%eD3V{nyd2|9symD)+!QuHsPg^w+DWZxvi{(tK6ACeMeS^&#vP?BVPN pz#uty=Vc0XTq8knUSJYD@<);T3K0RUc!6{!FK literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderStates-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderStates-members.htm new file mode 100644 index 0000000..bec98f0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderStates-members.htm @@ -0,0 +1,66 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::RenderStates Member List
+
+
+ +

This is the complete list of members for sf::RenderStates, including all inherited members.

+ + + + + + + + + + + + +
blendModesf::RenderStates
Defaultsf::RenderStatesstatic
RenderStates()sf::RenderStates
RenderStates(BlendMode theBlendMode)sf::RenderStates
RenderStates(const Transform &theTransform)sf::RenderStates
RenderStates(const Texture *theTexture)sf::RenderStates
RenderStates(const Shader *theShader)sf::RenderStates
RenderStates(BlendMode theBlendMode, const Transform &theTransform, const Texture *theTexture, const Shader *theShader)sf::RenderStates
shadersf::RenderStates
texturesf::RenderStates
transformsf::RenderStates
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderStates.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderStates.htm new file mode 100644 index 0000000..1423b31 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderStates.htm @@ -0,0 +1,386 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Define the states used for drawing to a RenderTarget. + More...

+ +

#include <RenderStates.hpp>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RenderStates ()
 Default constructor. More...
 
 RenderStates (BlendMode theBlendMode)
 Construct a default set of render states with a custom blend mode. More...
 
 RenderStates (const Transform &theTransform)
 Construct a default set of render states with a custom transform. More...
 
 RenderStates (const Texture *theTexture)
 Construct a default set of render states with a custom texture. More...
 
 RenderStates (const Shader *theShader)
 Construct a default set of render states with a custom shader. More...
 
 RenderStates (BlendMode theBlendMode, const Transform &theTransform, const Texture *theTexture, const Shader *theShader)
 Construct a set of render states with all its attributes. More...
 
+ + + + + + + + + + + + + +

+Public Attributes

BlendMode blendMode
 Blending mode. More...
 
Transform transform
 Transform. More...
 
const Texturetexture
 Texture. More...
 
const Shadershader
 Shader. More...
 
+ + + + +

+Static Public Attributes

static const RenderStates Default
 Special instance holding the default render states. More...
 
+

Detailed Description

+

Define the states used for drawing to a RenderTarget.

+

There are four global states that can be applied to the drawn objects:

+
    +
  • the blend mode: how pixels of the object are blended with the background
  • +
  • the transform: how the object is positioned/rotated/scaled
  • +
  • the texture: what image is mapped to the object
  • +
  • the shader: what custom effect is applied to the object
  • +
+

High-level objects such as sprites or text force some of these states when they are drawn. For example, a sprite will set its own texture, so that you don't have to care about it when drawing the sprite.

+

The transform is a special case: sprites, texts and shapes (and it's a good idea to do it with your own drawable classes too) combine their transform with the one that is passed in the RenderStates structure. So that you can use a "global" transform on top of each object's transform.

+

Most objects, especially high-level drawables, can be drawn directly without defining render states explicitely – the default set of states is ok in most cases.

+
window.Draw(sprite);
+

If you want to use a single specific render state, for example a shader, you can pass it directly to the Draw function: sf::RenderStates has an implicit one-argument constructor for each state.

+
window.draw(sprite, shader);
+

When you're inside the Draw function of a drawable object (inherited from sf::Drawable), you can either pass the render states unmodified, or change some of them. For example, a transformable object will combine the current transform with its own transform. A sprite will set its texture. Etc.

+
See Also
sf::RenderTarget, sf::Drawable
+ +

Definition at line 45 of file RenderStates.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::RenderStates::RenderStates ()
+
+ +

Default constructor.

+

Constructing a default set of render states is equivalent to using sf::RenderStates::Default. The default set defines:

+
    +
  • the BlendAlpha blend mode
  • +
  • the identity transform
  • +
  • a null texture
  • +
  • a null shader
  • +
+ +
+
+ +
+
+ + + + + + + + +
sf::RenderStates::RenderStates (BlendMode theBlendMode)
+
+ +

Construct a default set of render states with a custom blend mode.

+
Parameters
+ + +
theBlendModeBlend mode to use
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::RenderStates::RenderStates (const TransformtheTransform)
+
+ +

Construct a default set of render states with a custom transform.

+
Parameters
+ + +
theTransformTransform to use
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::RenderStates::RenderStates (const TexturetheTexture)
+
+ +

Construct a default set of render states with a custom texture.

+
Parameters
+ + +
theTextureTexture to use
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::RenderStates::RenderStates (const ShadertheShader)
+
+ +

Construct a default set of render states with a custom shader.

+
Parameters
+ + +
theShaderShader to use
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sf::RenderStates::RenderStates (BlendMode theBlendMode,
const TransformtheTransform,
const TexturetheTexture,
const ShadertheShader 
)
+
+ +

Construct a set of render states with all its attributes.

+
Parameters
+ + + + + +
theBlendModeBlend mode to use
theTransformTransform to use
theTextureTexture to use
theShaderShader to use
+
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
BlendMode sf::RenderStates::blendMode
+
+ +

Blending mode.

+ +

Definition at line 115 of file RenderStates.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const RenderStates sf::RenderStates::Default
+
+static
+
+ +

Special instance holding the default render states.

+ +

Definition at line 110 of file RenderStates.hpp.

+ +
+
+ +
+
+ + + + +
const Shader* sf::RenderStates::shader
+
+ +

Shader.

+ +

Definition at line 118 of file RenderStates.hpp.

+ +
+
+ +
+
+ + + + +
const Texture* sf::RenderStates::texture
+
+ +

Texture.

+ +

Definition at line 117 of file RenderStates.hpp.

+ +
+
+ +
+
+ + + + +
Transform sf::RenderStates::transform
+
+ +

Transform.

+ +

Definition at line 116 of file RenderStates.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget-members.htm new file mode 100644 index 0000000..1e5de97 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget-members.htm @@ -0,0 +1,74 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::RenderTarget Member List
+
+
+ +

This is the complete list of members for sf::RenderTarget, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
clear(const Color &color=Color(0, 0, 0, 255))sf::RenderTarget
draw(const Drawable &drawable, const RenderStates &states=RenderStates::Default)sf::RenderTarget
draw(const Vertex *vertices, unsigned int vertexCount, PrimitiveType type, const RenderStates &states=RenderStates::Default)sf::RenderTarget
getDefaultView() const sf::RenderTarget
getSize() const =0sf::RenderTargetpure virtual
getView() const sf::RenderTarget
getViewport(const View &view) const sf::RenderTarget
initialize()sf::RenderTargetprotected
mapCoordsToPixel(const Vector2f &point) const sf::RenderTarget
mapCoordsToPixel(const Vector2f &point, const View &view) const sf::RenderTarget
mapPixelToCoords(const Vector2i &point) const sf::RenderTarget
mapPixelToCoords(const Vector2i &point, const View &view) const sf::RenderTarget
NonCopyable()sf::NonCopyableinlineprivate
popGLStates()sf::RenderTarget
pushGLStates()sf::RenderTarget
RenderTarget()sf::RenderTargetprotected
resetGLStates()sf::RenderTarget
setView(const View &view)sf::RenderTarget
~RenderTarget()sf::RenderTargetvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget.htm new file mode 100644 index 0000000..483780a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget.htm @@ -0,0 +1,665 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::RenderTarget Class Referenceabstract
+
+
+ +

Base class for all render targets (window, texture, ...) + More...

+ +

#include <RenderTarget.hpp>

+
+Inheritance diagram for sf::RenderTarget:
+
+
+ + +sf::NonCopyable +sf::RenderTexture +sf::RenderWindow + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~RenderTarget ()
 Destructor. More...
 
void clear (const Color &color=Color(0, 0, 0, 255))
 Clear the entire target with a single color. More...
 
void setView (const View &view)
 Change the current active view. More...
 
const ViewgetView () const
 Get the view currently in use in the render target. More...
 
const ViewgetDefaultView () const
 Get the default view of the render target. More...
 
IntRect getViewport (const View &view) const
 Get the viewport of a view, applied to this render target. More...
 
Vector2f mapPixelToCoords (const Vector2i &point) const
 Convert a point from target coordinates to world coordinates, using the current view. More...
 
Vector2f mapPixelToCoords (const Vector2i &point, const View &view) const
 Convert a point from target coordinates to world coordinates. More...
 
Vector2i mapCoordsToPixel (const Vector2f &point) const
 Convert a point from world coordinates to target coordinates, using the current view. More...
 
Vector2i mapCoordsToPixel (const Vector2f &point, const View &view) const
 Convert a point from world coordinates to target coordinates. More...
 
void draw (const Drawable &drawable, const RenderStates &states=RenderStates::Default)
 Draw a drawable object to the render-target. More...
 
void draw (const Vertex *vertices, unsigned int vertexCount, PrimitiveType type, const RenderStates &states=RenderStates::Default)
 Draw primitives defined by an array of vertices. More...
 
virtual Vector2u getSize () const =0
 Return the size of the rendering region of the target. More...
 
void pushGLStates ()
 Save the current OpenGL render states and matrices. More...
 
void popGLStates ()
 Restore the previously saved OpenGL render states and matrices. More...
 
void resetGLStates ()
 Reset the internal OpenGL states so that the target is ready for drawing. More...
 
+ + + + + + + +

+Protected Member Functions

 RenderTarget ()
 Default constructor. More...
 
void initialize ()
 Performs the common initialization step after creation. More...
 
+

Detailed Description

+

Base class for all render targets (window, texture, ...)

+

sf::RenderTarget defines the common behaviour of all the 2D render targets usable in the graphics module.

+

It makes it possible to draw 2D entities like sprites, shapes, text without using any OpenGL command directly.

+

A sf::RenderTarget is also able to use views (sf::View), which are a kind of 2D cameras. With views you can globally scroll, rotate or zoom everything that is drawn, without having to transform every single entity. See the documentation of sf::View for more details and sample pieces of code about this class.

+

On top of that, render targets are still able to render direct OpenGL stuff. It is even possible to mix together OpenGL calls and regular SFML drawing commands. When doing so, make sure that OpenGL states are not messed up by calling the pushGLStates/popGLStates functions.

+
See Also
sf::RenderWindow, sf::RenderTexture, sf::View
+ +

Definition at line 51 of file RenderTarget.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::RenderTarget::~RenderTarget ()
+
+virtual
+
+ +

Destructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
sf::RenderTarget::RenderTarget ()
+
+protected
+
+ +

Default constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void sf::RenderTarget::clear (const Colorcolor = Color(0, 0, 0, 255))
+
+ +

Clear the entire target with a single color.

+

This function is usually called once every frame, to clear the previous contents of the target.

+
Parameters
+ + +
colorFill color to use to clear the render target
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::RenderTarget::draw (const Drawabledrawable,
const RenderStatesstates = RenderStates::Default 
)
+
+ +

Draw a drawable object to the render-target.

+
Parameters
+ + + +
drawableObject to draw
statesRender states to use for drawing
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sf::RenderTarget::draw (const Vertexvertices,
unsigned int vertexCount,
PrimitiveType type,
const RenderStatesstates = RenderStates::Default 
)
+
+ +

Draw primitives defined by an array of vertices.

+
Parameters
+ + + + + +
verticesPointer to the vertices
vertexCountNumber of vertices in the array
typeType of primitives to draw
statesRender states to use for drawing
+
+
+ +
+
+ +
+
+ + + + + + + +
const View& sf::RenderTarget::getDefaultView () const
+
+ +

Get the default view of the render target.

+

The default view has the initial size of the render target, and never changes after the target has been created.

+
Returns
The default view of the render target
+
See Also
setView, getView
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Vector2u sf::RenderTarget::getSize () const
+
+pure virtual
+
+ +

Return the size of the rendering region of the target.

+
Returns
Size in pixels
+ +

Implemented in sf::RenderTexture, and sf::RenderWindow.

+ +
+
+ +
+
+ + + + + + + +
const View& sf::RenderTarget::getView () const
+
+ +

Get the view currently in use in the render target.

+
Returns
The view object that is currently used
+
See Also
setView, getDefaultView
+ +
+
+ +
+
+ + + + + + + + +
IntRect sf::RenderTarget::getViewport (const Viewview) const
+
+ +

Get the viewport of a view, applied to this render target.

+

The viewport is defined in the view as a ratio, this function simply applies this ratio to the current dimensions of the render target to calculate the pixels rectangle that the viewport actually covers in the target.

+
Parameters
+ + +
viewThe view for which we want to compute the viewport
+
+
+
Returns
Viewport rectangle, expressed in pixels
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::RenderTarget::initialize ()
+
+protected
+
+ +

Performs the common initialization step after creation.

+

The derived classes must call this function after the target is created and ready for drawing.

+ +
+
+ +
+
+ + + + + + + + +
Vector2i sf::RenderTarget::mapCoordsToPixel (const Vector2fpoint) const
+
+ +

Convert a point from world coordinates to target coordinates, using the current view.

+

This function is an overload of the mapCoordsToPixel function that implicitely uses the current view. It is equivalent to:

+
target.mapCoordsToPixel(point, target.getView());
+
Parameters
+ + +
pointPoint to convert
+
+
+
Returns
The converted point, in target coordinates (pixels)
+
See Also
mapPixelToCoords
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Vector2i sf::RenderTarget::mapCoordsToPixel (const Vector2fpoint,
const Viewview 
) const
+
+ +

Convert a point from world coordinates to target coordinates.

+

This function finds the pixel of the render-target that matches the given 2D point. In other words, it goes through the same process as the graphics card, to compute the final position of a rendered point.

+

Initially, both coordinate systems (world units and target pixels) match perfectly. But if you define a custom view or resize your render-target, this assertion is not true anymore, ie. a point located at (150, 75) in your 2D world may map to the pixel (10, 50) of your render-target – if the view is translated by (140, 25).

+

This version uses a custom view for calculations, see the other overload of the function if you want to use the current view of the render-target.

+
Parameters
+ + + +
pointPoint to convert
viewThe view to use for converting the point
+
+
+
Returns
The converted point, in target coordinates (pixels)
+
See Also
mapPixelToCoords
+ +
+
+ +
+
+ + + + + + + + +
Vector2f sf::RenderTarget::mapPixelToCoords (const Vector2ipoint) const
+
+ +

Convert a point from target coordinates to world coordinates, using the current view.

+

This function is an overload of the mapPixelToCoords function that implicitely uses the current view. It is equivalent to:

+
target.mapPixelToCoords(point, target.getView());
+
Parameters
+ + +
pointPixel to convert
+
+
+
Returns
The converted point, in "world" coordinates
+
See Also
mapCoordsToPixel
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Vector2f sf::RenderTarget::mapPixelToCoords (const Vector2ipoint,
const Viewview 
) const
+
+ +

Convert a point from target coordinates to world coordinates.

+

This function finds the 2D position that matches the given pixel of the render-target. In other words, it does the inverse of what the graphics card does, to find the initial position of a rendered pixel.

+

Initially, both coordinate systems (world units and target pixels) match perfectly. But if you define a custom view or resize your render-target, this assertion is not true anymore, ie. a point located at (10, 50) in your render-target may map to the point (150, 75) in your 2D world – if the view is translated by (140, 25).

+

For render-windows, this function is typically used to find which point (or object) is located below the mouse cursor.

+

This version uses a custom view for calculations, see the other overload of the function if you want to use the current view of the render-target.

+
Parameters
+ + + +
pointPixel to convert
viewThe view to use for converting the point
+
+
+
Returns
The converted point, in "world" units
+
See Also
mapCoordsToPixel
+ +
+
+ +
+
+ + + + + + + +
void sf::RenderTarget::popGLStates ()
+
+ +

Restore the previously saved OpenGL render states and matrices.

+

See the description of pushGLStates to get a detailed description of these functions.

+
See Also
pushGLStates
+ +
+
+ +
+
+ + + + + + + +
void sf::RenderTarget::pushGLStates ()
+
+ +

Save the current OpenGL render states and matrices.

+

This function can be used when you mix SFML drawing and direct OpenGL rendering. Combined with PopGLStates, it ensures that:

+
    +
  • SFML's internal states are not messed up by your OpenGL code
  • +
  • your OpenGL states are not modified by a call to a SFML function
  • +
+

More specifically, it must be used around code that calls Draw functions. Example:

+
// OpenGL code here...
+
window.pushGLStates();
+
window.draw(...);
+
window.draw(...);
+
window.popGLStates();
+
// OpenGL code here...
+

Note that this function is quite expensive: it saves all the possible OpenGL states and matrices, even the ones you don't care about. Therefore it should be used wisely. It is provided for convenience, but the best results will be achieved if you handle OpenGL states yourself (because you know which states have really changed, and need to be saved and restored). Take a look at the ResetGLStates function if you do so.

+
See Also
popGLStates
+ +
+
+ +
+
+ + + + + + + +
void sf::RenderTarget::resetGLStates ()
+
+ +

Reset the internal OpenGL states so that the target is ready for drawing.

+

This function can be used when you mix SFML drawing and direct OpenGL rendering, if you choose not to use pushGLStates/popGLStates. It makes sure that all OpenGL states needed by SFML are set, so that subsequent draw() calls will work as expected.

+

Example:

+
// OpenGL code here...
+
glPushAttrib(...);
+
window.resetGLStates();
+
window.draw(...);
+
window.draw(...);
+
glPopAttrib(...);
+
// OpenGL code here...
+
+
+
+ +
+
+ + + + + + + + +
void sf::RenderTarget::setView (const Viewview)
+
+ +

Change the current active view.

+

The view is like a 2D camera, it controls which part of the 2D scene is visible, and how it is viewed in the render-target. The new view will affect everything that is drawn, until another view is set. The render target keeps its own copy of the view object, so it is not necessary to keep the original one alive after calling this function. To restore the original view of the target, you can pass the result of getDefaultView() to this function.

+
Parameters
+ + +
viewNew view to use
+
+
+
See Also
getView, getDefaultView
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTarget.png new file mode 100644 index 0000000000000000000000000000000000000000..3f29acb2b6509713d367b6d0292d841e3c1963b8 GIT binary patch literal 1080 zcmV-81jqY{P)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d000BWNklMvBG(HGdFL8v&cSF<3rD{bUlBhgjlvbyp@~p&zWTN!qxtpve`$v@!Yaim#(e+ zuI%$L&uwdh`8Ye#fU+)sDQk~-wF759vv%s%jk-?b{CF0!XFs#qRE^qp!e*UX4BnW3 z|84$v?rAJZ2gur5l3p^1>|3sb$iC0`Rdw0E#?WJS^E`-+=U_`vK03+g+1sD;pEWn6(WdTOSD+@3pURi(<@yY^> zh*uV1M7**9BjS|>7!j{5z=(WhWv6MHx&rVidN1y>06lP7fJV41Ko9E0o_X~5 zF>C&IF4+{AuQng<#Z3SeXOw+Z$CN0_K4a5T^ZR=WKBDnkY{+KWvY$ov@mPypyt0uP zU9J|Jd|%c*%d$>b*`+-BSxgd}ALUIpd}`TemGX{TTCu3ovo%e6Y~xZk-Fm(Ol|7hk z(dxuOk5UVL|hhNL|hhNL|hi&q}*<|+ou5N$_I<%vH;C+S%CJqEI>0{7N9*Y3(yRg z1!#}U0yM*A0ovoT0L}PH*$_fF!Yzalj_}E)gCupt%1Tm4Tvn2r;j)s{o@>iaQ@ptU zNK!=}o%71f?Hgaq{`Jc9uM5R9Nm5NIo6_d1&AX~#opnI=z{*Bel6n0u``AshrE$q; zY+82y{+@!5X#DOuwB)Q=Yl`{a4cVhB=at>c%eN!Ru6Nig8;Q~EOHviGJBt*%{k81z zmGe6{@?Oa1&9s~xb1140d(*~KXp%B^We=|WEbps4vwc+?7bjcHOrvy#*pmzAVu yxU3|#$7Lm{87?bH?YWw42qE;u$c7L?PyPU+G)BG*P&1qW0000 + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::RenderTexture Member List
+
+
+ +

This is the complete list of members for sf::RenderTexture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
clear(const Color &color=Color(0, 0, 0, 255))sf::RenderTarget
create(unsigned int width, unsigned int height, bool depthBuffer=false)sf::RenderTexture
display()sf::RenderTexture
draw(const Drawable &drawable, const RenderStates &states=RenderStates::Default)sf::RenderTarget
draw(const Vertex *vertices, unsigned int vertexCount, PrimitiveType type, const RenderStates &states=RenderStates::Default)sf::RenderTarget
getDefaultView() const sf::RenderTarget
getSize() const sf::RenderTexturevirtual
getTexture() const sf::RenderTexture
getView() const sf::RenderTarget
getViewport(const View &view) const sf::RenderTarget
initialize()sf::RenderTargetprotected
isRepeated() const sf::RenderTexture
isSmooth() const sf::RenderTexture
mapCoordsToPixel(const Vector2f &point) const sf::RenderTarget
mapCoordsToPixel(const Vector2f &point, const View &view) const sf::RenderTarget
mapPixelToCoords(const Vector2i &point) const sf::RenderTarget
mapPixelToCoords(const Vector2i &point, const View &view) const sf::RenderTarget
popGLStates()sf::RenderTarget
pushGLStates()sf::RenderTarget
RenderTarget()sf::RenderTargetprotected
RenderTexture()sf::RenderTexture
resetGLStates()sf::RenderTarget
setActive(bool active=true)sf::RenderTexture
setRepeated(bool repeated)sf::RenderTexture
setSmooth(bool smooth)sf::RenderTexture
setView(const View &view)sf::RenderTarget
~RenderTarget()sf::RenderTargetvirtual
~RenderTexture()sf::RenderTexturevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTexture.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTexture.htm new file mode 100644 index 0000000..ac65bb3 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTexture.htm @@ -0,0 +1,1033 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Target for off-screen 2D rendering into a texture. + More...

+ +

#include <RenderTexture.hpp>

+
+Inheritance diagram for sf::RenderTexture:
+
+
+ + +sf::RenderTarget +sf::NonCopyable + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RenderTexture ()
 Default constructor. More...
 
virtual ~RenderTexture ()
 Destructor. More...
 
bool create (unsigned int width, unsigned int height, bool depthBuffer=false)
 Create the render-texture. More...
 
void setSmooth (bool smooth)
 Enable or disable texture smoothing. More...
 
bool isSmooth () const
 Tell whether the smooth filtering is enabled or not. More...
 
void setRepeated (bool repeated)
 Enable or disable texture repeating. More...
 
bool isRepeated () const
 Tell whether the texture is repeated or not. More...
 
bool setActive (bool active=true)
 Activate of deactivate the render-texture for rendering. More...
 
void display ()
 Update the contents of the target texture. More...
 
virtual Vector2u getSize () const
 Return the size of the rendering region of the texture. More...
 
const TexturegetTexture () const
 Get a read-only reference to the target texture. More...
 
void clear (const Color &color=Color(0, 0, 0, 255))
 Clear the entire target with a single color. More...
 
void setView (const View &view)
 Change the current active view. More...
 
const ViewgetView () const
 Get the view currently in use in the render target. More...
 
const ViewgetDefaultView () const
 Get the default view of the render target. More...
 
IntRect getViewport (const View &view) const
 Get the viewport of a view, applied to this render target. More...
 
Vector2f mapPixelToCoords (const Vector2i &point) const
 Convert a point from target coordinates to world coordinates, using the current view. More...
 
Vector2f mapPixelToCoords (const Vector2i &point, const View &view) const
 Convert a point from target coordinates to world coordinates. More...
 
Vector2i mapCoordsToPixel (const Vector2f &point) const
 Convert a point from world coordinates to target coordinates, using the current view. More...
 
Vector2i mapCoordsToPixel (const Vector2f &point, const View &view) const
 Convert a point from world coordinates to target coordinates. More...
 
void draw (const Drawable &drawable, const RenderStates &states=RenderStates::Default)
 Draw a drawable object to the render-target. More...
 
void draw (const Vertex *vertices, unsigned int vertexCount, PrimitiveType type, const RenderStates &states=RenderStates::Default)
 Draw primitives defined by an array of vertices. More...
 
void pushGLStates ()
 Save the current OpenGL render states and matrices. More...
 
void popGLStates ()
 Restore the previously saved OpenGL render states and matrices. More...
 
void resetGLStates ()
 Reset the internal OpenGL states so that the target is ready for drawing. More...
 
+ + + + +

+Protected Member Functions

void initialize ()
 Performs the common initialization step after creation. More...
 
+

Detailed Description

+

Target for off-screen 2D rendering into a texture.

+

sf::RenderTexture is the little brother of sf::RenderWindow.

+

It implements the same 2D drawing and OpenGL-related functions (see their base class sf::RenderTarget for more details), the difference is that the result is stored in an off-screen texture rather than being show in a window.

+

Rendering to a texture can be useful in a variety of situations:

+
    +
  • precomputing a complex static texture (like a level's background from multiple tiles)
  • +
  • applying post-effects to the whole scene with shaders
  • +
  • creating a sprite from a 3D object rendered with OpenGL
  • +
  • etc.
  • +
+

Usage example:

+
// Create a new render-window
+
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
+
+
// Create a new render-texture
+ +
if (!texture.create(500, 500))
+
return -1;
+
+
// The main loop
+
while (window.isOpen())
+
{
+
// Event processing
+
// ...
+
+
// Clear the whole texture with red color
+ +
+
// Draw stuff to the texture
+
texture.draw(sprite); // sprite is a sf::Sprite
+
texture.draw(shape); // shape is a sf::Shape
+
texture.draw(text); // text is a sf::Text
+
+
// We're done drawing to the texture
+
texture.display();
+
+
// Now we start rendering to the window, clear it first
+
window.clear();
+
+
// Draw the texture
+
sf::Sprite sprite(texture.getTexture());
+
window.draw(sprite);
+
+
// End the current frame and display its contents on screen
+
window.display();
+
}
+

Like sf::RenderWindow, sf::RenderTexture is still able to render direct OpenGL stuff. It is even possible to mix together OpenGL calls and regular SFML drawing commands. If you need a depth buffer for 3D rendering, don't forget to request it when calling RenderTexture::create.

+
See Also
sf::RenderTarget, sf::RenderWindow, sf::View, sf::Texture
+ +

Definition at line 47 of file RenderTexture.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::RenderTexture::RenderTexture ()
+
+ +

Default constructor.

+

Constructs an empty, invalid render-texture. You must call create to have a valid render-texture.

+
See Also
create
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::RenderTexture::~RenderTexture ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void sf::RenderTarget::clear (const Colorcolor = Color(0, 0, 0, 255))
+
+inherited
+
+ +

Clear the entire target with a single color.

+

This function is usually called once every frame, to clear the previous contents of the target.

+
Parameters
+ + +
colorFill color to use to clear the render target
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool sf::RenderTexture::create (unsigned int width,
unsigned int height,
bool depthBuffer = false 
)
+
+ +

Create the render-texture.

+

Before calling this function, the render-texture is in an invalid state, thus it is mandatory to call it before doing anything with the render-texture. The last parameter, depthBuffer, is useful if you want to use the render-texture for 3D OpenGL rendering that requires a depth-buffer. Otherwise it is unnecessary, and you should leave this parameter to false (which is its default value).

+
Parameters
+ + + + +
widthWidth of the render-texture
heightHeight of the render-texture
depthBufferDo you want this render-texture to have a depth buffer?
+
+
+
Returns
True if creation has been successful
+ +
+
+ +
+
+ + + + + + + +
void sf::RenderTexture::display ()
+
+ +

Update the contents of the target texture.

+

This function updates the target texture with what has been drawn so far. Like for windows, calling this function is mandatory at the end of rendering. Not calling it may leave the texture in an undefined state.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::RenderTarget::draw (const Drawabledrawable,
const RenderStatesstates = RenderStates::Default 
)
+
+inherited
+
+ +

Draw a drawable object to the render-target.

+
Parameters
+ + + +
drawableObject to draw
statesRender states to use for drawing
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sf::RenderTarget::draw (const Vertexvertices,
unsigned int vertexCount,
PrimitiveType type,
const RenderStatesstates = RenderStates::Default 
)
+
+inherited
+
+ +

Draw primitives defined by an array of vertices.

+
Parameters
+ + + + + +
verticesPointer to the vertices
vertexCountNumber of vertices in the array
typeType of primitives to draw
statesRender states to use for drawing
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const View& sf::RenderTarget::getDefaultView () const
+
+inherited
+
+ +

Get the default view of the render target.

+

The default view has the initial size of the render target, and never changes after the target has been created.

+
Returns
The default view of the render target
+
See Also
setView, getView
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Vector2u sf::RenderTexture::getSize () const
+
+virtual
+
+ +

Return the size of the rendering region of the texture.

+

The returned value is the size that you passed to the create function.

+
Returns
Size in pixels
+ +

Implements sf::RenderTarget.

+ +
+
+ +
+
+ + + + + + + +
const Texture& sf::RenderTexture::getTexture () const
+
+ +

Get a read-only reference to the target texture.

+

After drawing to the render-texture and calling Display, you can retrieve the updated texture using this function, and draw it using a sprite (for example). The internal sf::Texture of a render-texture is always the same instance, so that it is possible to call this function once and keep a reference to the texture even after it is modified.

+
Returns
Const reference to the texture
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const View& sf::RenderTarget::getView () const
+
+inherited
+
+ +

Get the view currently in use in the render target.

+
Returns
The view object that is currently used
+
See Also
setView, getDefaultView
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
IntRect sf::RenderTarget::getViewport (const Viewview) const
+
+inherited
+
+ +

Get the viewport of a view, applied to this render target.

+

The viewport is defined in the view as a ratio, this function simply applies this ratio to the current dimensions of the render target to calculate the pixels rectangle that the viewport actually covers in the target.

+
Parameters
+ + +
viewThe view for which we want to compute the viewport
+
+
+
Returns
Viewport rectangle, expressed in pixels
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::RenderTarget::initialize ()
+
+protectedinherited
+
+ +

Performs the common initialization step after creation.

+

The derived classes must call this function after the target is created and ready for drawing.

+ +
+
+ +
+
+ + + + + + + +
bool sf::RenderTexture::isRepeated () const
+
+ +

Tell whether the texture is repeated or not.

+
Returns
True if texture is repeated
+
See Also
setRepeated
+ +
+
+ +
+
+ + + + + + + +
bool sf::RenderTexture::isSmooth () const
+
+ +

Tell whether the smooth filtering is enabled or not.

+
Returns
True if texture smoothing is enabled
+
See Also
setSmooth
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Vector2i sf::RenderTarget::mapCoordsToPixel (const Vector2fpoint) const
+
+inherited
+
+ +

Convert a point from world coordinates to target coordinates, using the current view.

+

This function is an overload of the mapCoordsToPixel function that implicitely uses the current view. It is equivalent to:

+
target.mapCoordsToPixel(point, target.getView());
+
Parameters
+ + +
pointPoint to convert
+
+
+
Returns
The converted point, in target coordinates (pixels)
+
See Also
mapPixelToCoords
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2i sf::RenderTarget::mapCoordsToPixel (const Vector2fpoint,
const Viewview 
) const
+
+inherited
+
+ +

Convert a point from world coordinates to target coordinates.

+

This function finds the pixel of the render-target that matches the given 2D point. In other words, it goes through the same process as the graphics card, to compute the final position of a rendered point.

+

Initially, both coordinate systems (world units and target pixels) match perfectly. But if you define a custom view or resize your render-target, this assertion is not true anymore, ie. a point located at (150, 75) in your 2D world may map to the pixel (10, 50) of your render-target – if the view is translated by (140, 25).

+

This version uses a custom view for calculations, see the other overload of the function if you want to use the current view of the render-target.

+
Parameters
+ + + +
pointPoint to convert
viewThe view to use for converting the point
+
+
+
Returns
The converted point, in target coordinates (pixels)
+
See Also
mapPixelToCoords
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Vector2f sf::RenderTarget::mapPixelToCoords (const Vector2ipoint) const
+
+inherited
+
+ +

Convert a point from target coordinates to world coordinates, using the current view.

+

This function is an overload of the mapPixelToCoords function that implicitely uses the current view. It is equivalent to:

+
target.mapPixelToCoords(point, target.getView());
+
Parameters
+ + +
pointPixel to convert
+
+
+
Returns
The converted point, in "world" coordinates
+
See Also
mapCoordsToPixel
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2f sf::RenderTarget::mapPixelToCoords (const Vector2ipoint,
const Viewview 
) const
+
+inherited
+
+ +

Convert a point from target coordinates to world coordinates.

+

This function finds the 2D position that matches the given pixel of the render-target. In other words, it does the inverse of what the graphics card does, to find the initial position of a rendered pixel.

+

Initially, both coordinate systems (world units and target pixels) match perfectly. But if you define a custom view or resize your render-target, this assertion is not true anymore, ie. a point located at (10, 50) in your render-target may map to the point (150, 75) in your 2D world – if the view is translated by (140, 25).

+

For render-windows, this function is typically used to find which point (or object) is located below the mouse cursor.

+

This version uses a custom view for calculations, see the other overload of the function if you want to use the current view of the render-target.

+
Parameters
+ + + +
pointPixel to convert
viewThe view to use for converting the point
+
+
+
Returns
The converted point, in "world" units
+
See Also
mapCoordsToPixel
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::RenderTarget::popGLStates ()
+
+inherited
+
+ +

Restore the previously saved OpenGL render states and matrices.

+

See the description of pushGLStates to get a detailed description of these functions.

+
See Also
pushGLStates
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::RenderTarget::pushGLStates ()
+
+inherited
+
+ +

Save the current OpenGL render states and matrices.

+

This function can be used when you mix SFML drawing and direct OpenGL rendering. Combined with PopGLStates, it ensures that:

+
    +
  • SFML's internal states are not messed up by your OpenGL code
  • +
  • your OpenGL states are not modified by a call to a SFML function
  • +
+

More specifically, it must be used around code that calls Draw functions. Example:

+
// OpenGL code here...
+
window.pushGLStates();
+
window.draw(...);
+
window.draw(...);
+
window.popGLStates();
+
// OpenGL code here...
+

Note that this function is quite expensive: it saves all the possible OpenGL states and matrices, even the ones you don't care about. Therefore it should be used wisely. It is provided for convenience, but the best results will be achieved if you handle OpenGL states yourself (because you know which states have really changed, and need to be saved and restored). Take a look at the ResetGLStates function if you do so.

+
See Also
popGLStates
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::RenderTarget::resetGLStates ()
+
+inherited
+
+ +

Reset the internal OpenGL states so that the target is ready for drawing.

+

This function can be used when you mix SFML drawing and direct OpenGL rendering, if you choose not to use pushGLStates/popGLStates. It makes sure that all OpenGL states needed by SFML are set, so that subsequent draw() calls will work as expected.

+

Example:

+
// OpenGL code here...
+
glPushAttrib(...);
+
window.resetGLStates();
+
window.draw(...);
+
window.draw(...);
+
glPopAttrib(...);
+
// OpenGL code here...
+
+
+
+ +
+
+ + + + + + + + +
bool sf::RenderTexture::setActive (bool active = true)
+
+ +

Activate of deactivate the render-texture for rendering.

+

This function makes the render-texture's context current for future OpenGL rendering operations (so you shouldn't care about it if you're not doing direct OpenGL stuff). Only one context can be current in a thread, so if you want to draw OpenGL geometry to another render target (like a RenderWindow) don't forget to activate it again.

+
Parameters
+ + +
activeTrue to activate, false to deactivate
+
+
+
Returns
True if operation was successful, false otherwise
+ +
+
+ +
+
+ + + + + + + + +
void sf::RenderTexture::setRepeated (bool repeated)
+
+ +

Enable or disable texture repeating.

+

This function is similar to Texture::setRepeated. This parameter is disabled by default.

+
Parameters
+ + +
repeatedTrue to enable repeating, false to disable it
+
+
+
See Also
isRepeated
+ +
+
+ +
+
+ + + + + + + + +
void sf::RenderTexture::setSmooth (bool smooth)
+
+ +

Enable or disable texture smoothing.

+

This function is similar to Texture::setSmooth. This parameter is disabled by default.

+
Parameters
+ + +
smoothTrue to enable smoothing, false to disable it
+
+
+
See Also
isSmooth
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::RenderTarget::setView (const Viewview)
+
+inherited
+
+ +

Change the current active view.

+

The view is like a 2D camera, it controls which part of the 2D scene is visible, and how it is viewed in the render-target. The new view will affect everything that is drawn, until another view is set. The render target keeps its own copy of the view object, so it is not necessary to keep the original one alive after calling this function. To restore the original view of the target, you can pass the result of getDefaultView() to this function.

+
Parameters
+ + +
viewNew view to use
+
+
+
See Also
getView, getDefaultView
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTexture.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..6ac1289279224434963a4efdd2621a9acf2b7f38 GIT binary patch literal 814 zcmV+}1JV46P)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0008LNklT?amiwN#(f3djL%6VRzrP8@K1vkn{BBuCFVG^&wU~AATD`m**~J;Y(gquCu0hc}HXS`Wd5}u4-QFc7MsU?QVj2 z(LXzfZN<*{^sTCRH~Q!1ER*fbxsp|*nEkh>{qN;`O41kP>MKdlG>~@(H;{J=xBeeV z(m?$JUW_r$6TnyW0WeXMc^@Bhfs=U~ZYpp#4`8l-c6KX2fOpo)58!>Z@&kBZt^5Gq zS1Uh&_tnY|praULoG79sP1E8@(m4GGyb$uu_K~DU-n#o;c-HGT+X{_^{>;t;u?sJuUC?CIRxDwPb6$OB?#o&aj;I7?jngmS#Ter}0enTD024Kt_xU*& zIGMNMrUGa4e*Anc9>72?9>6#)9>6#)9>6#)9>6#)9>6#)9>6#)9zaJSgfLMAfN5Gh zfN}b6-ZnsHYyle83p$?HIaIvzu-|ppHOAKK4(}182{iK#+vayzjs?jvJ)DW2tIn@k zT4?vpyu&$p<(0*ft>?A})`tec9NDD=<#@iHsVill_F@;g5Gt1*FFTrgrplQRbG9WI zQ^ZSNnJ7CiXBA!0CVh{sic+_wliNlATApw0vwD^(N}f0B>E|WSXKs(1PjfEwnP$Ck sI`auIL5l}4PKyUHPT#-_A%uDQ0|j3#Z31>}RsaA107*qoM6N<$g72J){r~^~ literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow-members.htm new file mode 100644 index 0000000..b4d0ec2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow-members.htm @@ -0,0 +1,106 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::RenderWindow Member List
+
+
+ +

This is the complete list of members for sf::RenderWindow, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
capture() const sf::RenderWindow
clear(const Color &color=Color(0, 0, 0, 255))sf::RenderTarget
close()sf::Window
create(VideoMode mode, const String &title, Uint32 style=Style::Default, const ContextSettings &settings=ContextSettings())sf::Window
create(WindowHandle handle, const ContextSettings &settings=ContextSettings())sf::Window
display()sf::Window
draw(const Drawable &drawable, const RenderStates &states=RenderStates::Default)sf::RenderTarget
draw(const Vertex *vertices, unsigned int vertexCount, PrimitiveType type, const RenderStates &states=RenderStates::Default)sf::RenderTarget
getDefaultView() const sf::RenderTarget
getPosition() const sf::Window
getSettings() const sf::Window
getSize() const sf::RenderWindowvirtual
getSystemHandle() const sf::Window
getView() const sf::RenderTarget
getViewport(const View &view) const sf::RenderTarget
initialize()sf::RenderTargetprotected
isOpen() const sf::Window
mapCoordsToPixel(const Vector2f &point) const sf::RenderTarget
mapCoordsToPixel(const Vector2f &point, const View &view) const sf::RenderTarget
mapPixelToCoords(const Vector2i &point) const sf::RenderTarget
mapPixelToCoords(const Vector2i &point, const View &view) const sf::RenderTarget
NonCopyable()sf::NonCopyableinlineprotected
onCreate()sf::RenderWindowprotectedvirtual
onResize()sf::RenderWindowprotectedvirtual
pollEvent(Event &event)sf::Window
popGLStates()sf::RenderTarget
pushGLStates()sf::RenderTarget
RenderTarget()sf::RenderTargetprotected
RenderWindow()sf::RenderWindow
RenderWindow(VideoMode mode, const String &title, Uint32 style=Style::Default, const ContextSettings &settings=ContextSettings())sf::RenderWindow
RenderWindow(WindowHandle handle, const ContextSettings &settings=ContextSettings())sf::RenderWindowexplicit
resetGLStates()sf::RenderTarget
setActive(bool active=true) const sf::Window
setFramerateLimit(unsigned int limit)sf::Window
setIcon(unsigned int width, unsigned int height, const Uint8 *pixels)sf::Window
setJoystickThreshold(float threshold)sf::Window
setKeyRepeatEnabled(bool enabled)sf::Window
setMouseCursorVisible(bool visible)sf::Window
setPosition(const Vector2i &position)sf::Window
setSize(const Vector2u size)sf::Window
setTitle(const String &title)sf::Window
setVerticalSyncEnabled(bool enabled)sf::Window
setView(const View &view)sf::RenderTarget
setVisible(bool visible)sf::Window
waitEvent(Event &event)sf::Window
Window()sf::Window
Window(VideoMode mode, const String &title, Uint32 style=Style::Default, const ContextSettings &settings=ContextSettings())sf::Window
Window(WindowHandle handle, const ContextSettings &settings=ContextSettings())sf::Windowexplicit
~RenderTarget()sf::RenderTargetvirtual
~RenderWindow()sf::RenderWindowvirtual
~Window()sf::Windowvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow.htm new file mode 100644 index 0000000..0feaf83 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow.htm @@ -0,0 +1,1819 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Window that can serve as a target for 2D drawing. + More...

+ +

#include <RenderWindow.hpp>

+
+Inheritance diagram for sf::RenderWindow:
+
+
+ + +sf::Window +sf::RenderTarget +sf::GlResource +sf::NonCopyable +sf::NonCopyable + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RenderWindow ()
 Default constructor. More...
 
 RenderWindow (VideoMode mode, const String &title, Uint32 style=Style::Default, const ContextSettings &settings=ContextSettings())
 Construct a new window. More...
 
 RenderWindow (WindowHandle handle, const ContextSettings &settings=ContextSettings())
 Construct the window from an existing control. More...
 
virtual ~RenderWindow ()
 Destructor. More...
 
virtual Vector2u getSize () const
 Get the size of the rendering region of the window. More...
 
Image capture () const
 Copy the current contents of the window to an image. More...
 
void create (VideoMode mode, const String &title, Uint32 style=Style::Default, const ContextSettings &settings=ContextSettings())
 Create (or recreate) the window. More...
 
void create (WindowHandle handle, const ContextSettings &settings=ContextSettings())
 Create (or recreate) the window from an existing control. More...
 
void close ()
 Close the window and destroy all the attached resources. More...
 
bool isOpen () const
 Tell whether or not the window is open. More...
 
const ContextSettingsgetSettings () const
 Get the settings of the OpenGL context of the window. More...
 
bool pollEvent (Event &event)
 Pop the event on top of the event queue, if any, and return it. More...
 
bool waitEvent (Event &event)
 Wait for an event and return it. More...
 
Vector2i getPosition () const
 Get the position of the window. More...
 
void setPosition (const Vector2i &position)
 Change the position of the window on screen. More...
 
void setSize (const Vector2u size)
 Change the size of the rendering region of the window. More...
 
void setTitle (const String &title)
 Change the title of the window. More...
 
void setIcon (unsigned int width, unsigned int height, const Uint8 *pixels)
 Change the window's icon. More...
 
void setVisible (bool visible)
 Show or hide the window. More...
 
void setVerticalSyncEnabled (bool enabled)
 Enable or disable vertical synchronization. More...
 
void setMouseCursorVisible (bool visible)
 Show or hide the mouse cursor. More...
 
void setKeyRepeatEnabled (bool enabled)
 Enable or disable automatic key-repeat. More...
 
void setFramerateLimit (unsigned int limit)
 Limit the framerate to a maximum fixed frequency. More...
 
void setJoystickThreshold (float threshold)
 Change the joystick threshold. More...
 
bool setActive (bool active=true) const
 Activate or deactivate the window as the current target for OpenGL rendering. More...
 
void display ()
 Display on screen what has been rendered to the window so far. More...
 
WindowHandle getSystemHandle () const
 Get the OS-specific handle of the window. More...
 
void clear (const Color &color=Color(0, 0, 0, 255))
 Clear the entire target with a single color. More...
 
void setView (const View &view)
 Change the current active view. More...
 
const ViewgetView () const
 Get the view currently in use in the render target. More...
 
const ViewgetDefaultView () const
 Get the default view of the render target. More...
 
IntRect getViewport (const View &view) const
 Get the viewport of a view, applied to this render target. More...
 
Vector2f mapPixelToCoords (const Vector2i &point) const
 Convert a point from target coordinates to world coordinates, using the current view. More...
 
Vector2f mapPixelToCoords (const Vector2i &point, const View &view) const
 Convert a point from target coordinates to world coordinates. More...
 
Vector2i mapCoordsToPixel (const Vector2f &point) const
 Convert a point from world coordinates to target coordinates, using the current view. More...
 
Vector2i mapCoordsToPixel (const Vector2f &point, const View &view) const
 Convert a point from world coordinates to target coordinates. More...
 
void draw (const Drawable &drawable, const RenderStates &states=RenderStates::Default)
 Draw a drawable object to the render-target. More...
 
void draw (const Vertex *vertices, unsigned int vertexCount, PrimitiveType type, const RenderStates &states=RenderStates::Default)
 Draw primitives defined by an array of vertices. More...
 
void pushGLStates ()
 Save the current OpenGL render states and matrices. More...
 
void popGLStates ()
 Restore the previously saved OpenGL render states and matrices. More...
 
void resetGLStates ()
 Reset the internal OpenGL states so that the target is ready for drawing. More...
 
+ + + + + + + + + + +

+Protected Member Functions

virtual void onCreate ()
 Function called after the window has been created. More...
 
virtual void onResize ()
 Function called after the window has been resized. More...
 
void initialize ()
 Performs the common initialization step after creation. More...
 
+

Detailed Description

+

Window that can serve as a target for 2D drawing.

+

sf::RenderWindow is the main class of the Graphics module.

+

It defines an OS window that can be painted using the other classes of the graphics module.

+

sf::RenderWindow is derived from sf::Window, thus it inherits all its features: events, window management, OpenGL rendering, etc. See the documentation of sf::Window for a more complete description of all these features, as well as code examples.

+

On top of that, sf::RenderWindow adds more features related to 2D drawing with the graphics module (see its base class sf::RenderTarget for more details). Here is a typical rendering and event loop with a sf::RenderWindow:

+
// Declare and create a new render-window
+
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
+
+
// Limit the framerate to 60 frames per second (this step is optional)
+
window.setFramerateLimit(60);
+
+
// The main loop - ends as soon as the window is closed
+
while (window.isOpen())
+
{
+
// Event processing
+
sf::Event event;
+
while (window.pollEvent(event))
+
{
+
// Request for closing the window
+
if (event.type == sf::Event::Closed)
+
window.close();
+
}
+
+
// Clear the whole window before rendering a new frame
+
window.clear();
+
+
// Draw some graphical entities
+
window.draw(sprite);
+
window.draw(circle);
+
window.draw(text);
+
+
// End the current frame and display its contents on screen
+
window.display();
+
}
+

Like sf::Window, sf::RenderWindow is still able to render direct OpenGL stuff. It is even possible to mix together OpenGL calls and regular SFML drawing commands.

+
// Create the render window
+
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML OpenGL");
+
+
// Create a sprite and a text to display
+
sf::Sprite sprite;
+
sf::Text text;
+
...
+
+
// Perform OpenGL initializations
+
glMatrixMode(GL_PROJECTION);
+
...
+
+
// Start the rendering loop
+
while (window.isOpen())
+
{
+
// Process events
+
...
+
+
// Draw a background sprite
+
window.pushGLStates();
+
window.draw(sprite);
+
window.popGLStates();
+
+
// Draw a 3D object using OpenGL
+
glBegin(GL_QUADS);
+
glVertex3f(...);
+
...
+
glEnd();
+
+
// Draw text on top of the 3D object
+
window.pushGLStates();
+
window.draw(text);
+
window.popGLStates();
+
+
// Finally, display the rendered frame on screen
+
window.display();
+
}
+
See Also
sf::Window, sf::RenderTarget, sf::RenderTexture, sf::View
+ +

Definition at line 44 of file RenderWindow.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::RenderWindow::RenderWindow ()
+
+ +

Default constructor.

+

This constructor doesn't actually create the window, use the other constructors or call "create" to do so.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sf::RenderWindow::RenderWindow (VideoMode mode,
const Stringtitle,
Uint32 style = Style::Default,
const ContextSettingssettings = ContextSettings() 
)
+
+ +

Construct a new window.

+

This constructor creates the window with the size and pixel depth defined in mode. An optional style can be passed to customize the look and behaviour of the window (borders, title bar, resizable, closable, ...).

+

The fourth parameter is an optional structure specifying advanced OpenGL context settings such as antialiasing, depth-buffer bits, etc. You shouldn't care about these parameters for a regular usage of the graphics module.

+
Parameters
+ + + + + +
modeVideo mode to use (defines the width, height and depth of the rendering area of the window)
titleTitle of the window
styleWindow style
settingsAdditional settings for the underlying OpenGL context
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sf::RenderWindow::RenderWindow (WindowHandle handle,
const ContextSettingssettings = ContextSettings() 
)
+
+explicit
+
+ +

Construct the window from an existing control.

+

Use this constructor if you want to create an SFML rendering area into an already existing control.

+

The fourth parameter is an optional structure specifying advanced OpenGL context settings such as antialiasing, depth-buffer bits, etc. You shouldn't care about these parameters for a regular usage of the graphics module.

+
Parameters
+ + + +
handlePlatform-specific handle of the control
settingsAdditional settings for the underlying OpenGL context
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::RenderWindow::~RenderWindow ()
+
+virtual
+
+ +

Destructor.

+

Closes the window and free all the resources attached to it.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
Image sf::RenderWindow::capture () const
+
+ +

Copy the current contents of the window to an image.

+

This is a slow operation, whose main purpose is to make screenshots of the application. If you want to update an image with the contents of the window and then use it for drawing, you should rather use a sf::Texture and its update(Window&) function. You can also draw things directly to a texture with the sf::RenderTexture class.

+
Returns
Image containing the captured contents
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::RenderTarget::clear (const Colorcolor = Color(0, 0, 0, 255))
+
+inherited
+
+ +

Clear the entire target with a single color.

+

This function is usually called once every frame, to clear the previous contents of the target.

+
Parameters
+ + +
colorFill color to use to clear the render target
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Window::close ()
+
+inherited
+
+ +

Close the window and destroy all the attached resources.

+

After calling this function, the sf::Window instance remains valid and you can call create() to recreate the window. All other functions such as pollEvent() or display() will still work (i.e. you don't have to test isOpen() every time), and will have no effect on closed windows.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Window::create (VideoMode mode,
const Stringtitle,
Uint32 style = Style::Default,
const ContextSettingssettings = ContextSettings() 
)
+
+inherited
+
+ +

Create (or recreate) the window.

+

If the window was already created, it closes it first. If style contains Style::Fullscreen, then mode must be a valid video mode.

+
Parameters
+ + + + + +
modeVideo mode to use (defines the width, height and depth of the rendering area of the window)
titleTitle of the window
styleWindow style
settingsAdditional settings for the underlying OpenGL context
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Window::create (WindowHandle handle,
const ContextSettingssettings = ContextSettings() 
)
+
+inherited
+
+ +

Create (or recreate) the window from an existing control.

+

Use this function if you want to create an OpenGL rendering area into an already existing control. If the window was already created, it closes it first.

+
Parameters
+ + + +
handlePlatform-specific handle of the control
settingsAdditional settings for the underlying OpenGL context
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Window::display ()
+
+inherited
+
+ +

Display on screen what has been rendered to the window so far.

+

This function is typically called after all OpenGL rendering has been done for the current frame, in order to show it on screen.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::RenderTarget::draw (const Drawabledrawable,
const RenderStatesstates = RenderStates::Default 
)
+
+inherited
+
+ +

Draw a drawable object to the render-target.

+
Parameters
+ + + +
drawableObject to draw
statesRender states to use for drawing
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sf::RenderTarget::draw (const Vertexvertices,
unsigned int vertexCount,
PrimitiveType type,
const RenderStatesstates = RenderStates::Default 
)
+
+inherited
+
+ +

Draw primitives defined by an array of vertices.

+
Parameters
+ + + + + +
verticesPointer to the vertices
vertexCountNumber of vertices in the array
typeType of primitives to draw
statesRender states to use for drawing
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const View& sf::RenderTarget::getDefaultView () const
+
+inherited
+
+ +

Get the default view of the render target.

+

The default view has the initial size of the render target, and never changes after the target has been created.

+
Returns
The default view of the render target
+
See Also
setView, getView
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Vector2i sf::Window::getPosition () const
+
+inherited
+
+ +

Get the position of the window.

+
Returns
Position of the window, in pixels
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const ContextSettings& sf::Window::getSettings () const
+
+inherited
+
+ +

Get the settings of the OpenGL context of the window.

+

Note that these settings may be different from what was passed to the constructor or the create() function, if one or more settings were not supported. In this case, SFML chose the closest match.

+
Returns
Structure containing the OpenGL context settings
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Vector2u sf::RenderWindow::getSize () const
+
+virtual
+
+ +

Get the size of the rendering region of the window.

+

The size doesn't include the titlebar and borders of the window.

+
Returns
Size in pixels
+ +

Implements sf::RenderTarget.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
WindowHandle sf::Window::getSystemHandle () const
+
+inherited
+
+ +

Get the OS-specific handle of the window.

+

The type of the returned handle is sf::WindowHandle, which is a typedef to the handle type defined by the OS. You shouldn't need to use this function, unless you have very specific stuff to implement that SFML doesn't support, or implement a temporary workaround until a bug is fixed.

+
Returns
System handle of the window
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const View& sf::RenderTarget::getView () const
+
+inherited
+
+ +

Get the view currently in use in the render target.

+
Returns
The view object that is currently used
+
See Also
setView, getDefaultView
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
IntRect sf::RenderTarget::getViewport (const Viewview) const
+
+inherited
+
+ +

Get the viewport of a view, applied to this render target.

+

The viewport is defined in the view as a ratio, this function simply applies this ratio to the current dimensions of the render target to calculate the pixels rectangle that the viewport actually covers in the target.

+
Parameters
+ + +
viewThe view for which we want to compute the viewport
+
+
+
Returns
Viewport rectangle, expressed in pixels
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::RenderTarget::initialize ()
+
+protectedinherited
+
+ +

Performs the common initialization step after creation.

+

The derived classes must call this function after the target is created and ready for drawing.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::Window::isOpen () const
+
+inherited
+
+ +

Tell whether or not the window is open.

+

This function returns whether or not the window exists. Note that a hidden window (setVisible(false)) is open (therefore this function would return true).

+
Returns
True if the window is open, false if it has been closed
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Vector2i sf::RenderTarget::mapCoordsToPixel (const Vector2fpoint) const
+
+inherited
+
+ +

Convert a point from world coordinates to target coordinates, using the current view.

+

This function is an overload of the mapCoordsToPixel function that implicitely uses the current view. It is equivalent to:

+
target.mapCoordsToPixel(point, target.getView());
+
Parameters
+ + +
pointPoint to convert
+
+
+
Returns
The converted point, in target coordinates (pixels)
+
See Also
mapPixelToCoords
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2i sf::RenderTarget::mapCoordsToPixel (const Vector2fpoint,
const Viewview 
) const
+
+inherited
+
+ +

Convert a point from world coordinates to target coordinates.

+

This function finds the pixel of the render-target that matches the given 2D point. In other words, it goes through the same process as the graphics card, to compute the final position of a rendered point.

+

Initially, both coordinate systems (world units and target pixels) match perfectly. But if you define a custom view or resize your render-target, this assertion is not true anymore, ie. a point located at (150, 75) in your 2D world may map to the pixel (10, 50) of your render-target – if the view is translated by (140, 25).

+

This version uses a custom view for calculations, see the other overload of the function if you want to use the current view of the render-target.

+
Parameters
+ + + +
pointPoint to convert
viewThe view to use for converting the point
+
+
+
Returns
The converted point, in target coordinates (pixels)
+
See Also
mapPixelToCoords
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Vector2f sf::RenderTarget::mapPixelToCoords (const Vector2ipoint) const
+
+inherited
+
+ +

Convert a point from target coordinates to world coordinates, using the current view.

+

This function is an overload of the mapPixelToCoords function that implicitely uses the current view. It is equivalent to:

+
target.mapPixelToCoords(point, target.getView());
+
Parameters
+ + +
pointPixel to convert
+
+
+
Returns
The converted point, in "world" coordinates
+
See Also
mapCoordsToPixel
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2f sf::RenderTarget::mapPixelToCoords (const Vector2ipoint,
const Viewview 
) const
+
+inherited
+
+ +

Convert a point from target coordinates to world coordinates.

+

This function finds the 2D position that matches the given pixel of the render-target. In other words, it does the inverse of what the graphics card does, to find the initial position of a rendered pixel.

+

Initially, both coordinate systems (world units and target pixels) match perfectly. But if you define a custom view or resize your render-target, this assertion is not true anymore, ie. a point located at (10, 50) in your render-target may map to the point (150, 75) in your 2D world – if the view is translated by (140, 25).

+

For render-windows, this function is typically used to find which point (or object) is located below the mouse cursor.

+

This version uses a custom view for calculations, see the other overload of the function if you want to use the current view of the render-target.

+
Parameters
+ + + +
pointPixel to convert
viewThe view to use for converting the point
+
+
+
Returns
The converted point, in "world" units
+
See Also
mapCoordsToPixel
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void sf::RenderWindow::onCreate ()
+
+protectedvirtual
+
+ +

Function called after the window has been created.

+

This function is called so that derived classes can perform their own specific initialization as soon as the window is created.

+ +

Reimplemented from sf::Window.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void sf::RenderWindow::onResize ()
+
+protectedvirtual
+
+ +

Function called after the window has been resized.

+

This function is called so that derived classes can perform custom actions when the size of the window changes.

+ +

Reimplemented from sf::Window.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool sf::Window::pollEvent (Eventevent)
+
+inherited
+
+ +

Pop the event on top of the event queue, if any, and return it.

+

This function is not blocking: if there's no pending event then it will return false and leave event unmodified. Note that more than one event may be present in the event queue, thus you should always call this function in a loop to make sure that you process every pending event.

+
sf::Event event;
+
while (window.pollEvent(event))
+
{
+
// process event...
+
}
+
Parameters
+ + +
eventEvent to be returned
+
+
+
Returns
True if an event was returned, or false if the event queue was empty
+
See Also
waitEvent
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::RenderTarget::popGLStates ()
+
+inherited
+
+ +

Restore the previously saved OpenGL render states and matrices.

+

See the description of pushGLStates to get a detailed description of these functions.

+
See Also
pushGLStates
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::RenderTarget::pushGLStates ()
+
+inherited
+
+ +

Save the current OpenGL render states and matrices.

+

This function can be used when you mix SFML drawing and direct OpenGL rendering. Combined with PopGLStates, it ensures that:

+
    +
  • SFML's internal states are not messed up by your OpenGL code
  • +
  • your OpenGL states are not modified by a call to a SFML function
  • +
+

More specifically, it must be used around code that calls Draw functions. Example:

+
// OpenGL code here...
+
window.pushGLStates();
+
window.draw(...);
+
window.draw(...);
+
window.popGLStates();
+
// OpenGL code here...
+

Note that this function is quite expensive: it saves all the possible OpenGL states and matrices, even the ones you don't care about. Therefore it should be used wisely. It is provided for convenience, but the best results will be achieved if you handle OpenGL states yourself (because you know which states have really changed, and need to be saved and restored). Take a look at the ResetGLStates function if you do so.

+
See Also
popGLStates
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::RenderTarget::resetGLStates ()
+
+inherited
+
+ +

Reset the internal OpenGL states so that the target is ready for drawing.

+

This function can be used when you mix SFML drawing and direct OpenGL rendering, if you choose not to use pushGLStates/popGLStates. It makes sure that all OpenGL states needed by SFML are set, so that subsequent draw() calls will work as expected.

+

Example:

+
// OpenGL code here...
+
glPushAttrib(...);
+
window.resetGLStates();
+
window.draw(...);
+
window.draw(...);
+
glPopAttrib(...);
+
// OpenGL code here...
+
+
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool sf::Window::setActive (bool active = true) const
+
+inherited
+
+ +

Activate or deactivate the window as the current target for OpenGL rendering.

+

A window is active only on the current thread, if you want to make it active on another thread you have to deactivate it on the previous thread first if it was active. Only one window can be active on a thread at a time, thus the window previously active (if any) automatically gets deactivated.

+
Parameters
+ + +
activeTrue to activate, false to deactivate
+
+
+
Returns
True if operation was successful, false otherwise
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Window::setFramerateLimit (unsigned int limit)
+
+inherited
+
+ +

Limit the framerate to a maximum fixed frequency.

+

If a limit is set, the window will use a small delay after each call to display() to ensure that the current frame lasted long enough to match the framerate limit. SFML will try to match the given limit as much as it can, but since it internally uses sf::sleep, whose precision depends on the underlying OS, the results may be a little unprecise as well (for example, you can get 65 FPS when requesting 60).

+
Parameters
+ + +
limitFramerate limit, in frames per seconds (use 0 to disable limit)
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Window::setIcon (unsigned int width,
unsigned int height,
const Uint8 * pixels 
)
+
+inherited
+
+ +

Change the window's icon.

+

pixels must be an array of width x height pixels in 32-bits RGBA format.

+

The OS default icon is used by default.

+
Parameters
+ + + + +
widthIcon's width, in pixels
heightIcon's height, in pixels
pixelsPointer to the array of pixels in memory
+
+
+
See Also
setTitle
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Window::setJoystickThreshold (float threshold)
+
+inherited
+
+ +

Change the joystick threshold.

+

The joystick threshold is the value below which no JoystickMoved event will be generated.

+

The threshold value is 0.1 by default.

+
Parameters
+ + +
thresholdNew threshold, in the range [0, 100]
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Window::setKeyRepeatEnabled (bool enabled)
+
+inherited
+
+ +

Enable or disable automatic key-repeat.

+

If key repeat is enabled, you will receive repeated KeyPressed events while keeping a key pressed. If it is disabled, you will only get a single event when the key is pressed.

+

Key repeat is enabled by default.

+
Parameters
+ + +
enabledTrue to enable, false to disable
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Window::setMouseCursorVisible (bool visible)
+
+inherited
+
+ +

Show or hide the mouse cursor.

+

The mouse cursor is visible by default.

+
Parameters
+ + +
visibleTrue to show the mouse cursor, false to hide it
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Window::setPosition (const Vector2iposition)
+
+inherited
+
+ +

Change the position of the window on screen.

+

This function only works for top-level windows (i.e. it will be ignored for windows created from the handle of a child window/control).

+
Parameters
+ + +
positionNew position, in pixels
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Window::setSize (const Vector2u size)
+
+inherited
+
+ +

Change the size of the rendering region of the window.

+
Parameters
+ + +
sizeNew size, in pixels
+
+
+
See Also
getSize
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Window::setTitle (const Stringtitle)
+
+inherited
+
+ +

Change the title of the window.

+
Parameters
+ + +
titleNew title
+
+
+
See Also
setIcon
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Window::setVerticalSyncEnabled (bool enabled)
+
+inherited
+
+ +

Enable or disable vertical synchronization.

+

Activating vertical synchronization will limit the number of frames displayed to the refresh rate of the monitor. This can avoid some visual artifacts, and limit the framerate to a good value (but not constant across different computers).

+

Vertical synchronization is disabled by default.

+
Parameters
+ + +
enabledTrue to enable v-sync, false to deactivate it
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::RenderTarget::setView (const Viewview)
+
+inherited
+
+ +

Change the current active view.

+

The view is like a 2D camera, it controls which part of the 2D scene is visible, and how it is viewed in the render-target. The new view will affect everything that is drawn, until another view is set. The render target keeps its own copy of the view object, so it is not necessary to keep the original one alive after calling this function. To restore the original view of the target, you can pass the result of getDefaultView() to this function.

+
Parameters
+ + +
viewNew view to use
+
+
+
See Also
getView, getDefaultView
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Window::setVisible (bool visible)
+
+inherited
+
+ +

Show or hide the window.

+

The window is shown by default.

+
Parameters
+ + +
visibleTrue to show the window, false to hide it
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool sf::Window::waitEvent (Eventevent)
+
+inherited
+
+ +

Wait for an event and return it.

+

This function is blocking: if there's no pending event then it will wait until an event is received. After this function returns (and no error occured), the event object is always valid and filled properly. This function is typically used when you have a thread that is dedicated to events handling: you want to make this thread sleep as long as no new event is received.

+
sf::Event event;
+
if (window.waitEvent(event))
+
{
+
// process event...
+
}
+
Parameters
+ + +
eventEvent to be returned
+
+
+
Returns
False if any error occured
+
See Also
pollEvent
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1RenderWindow.png new file mode 100644 index 0000000000000000000000000000000000000000..80a23b7609b8128f3852c0fb91e24a0d004d8882 GIT binary patch literal 1416 zcma)63rv$&82xLdc36cBBibrOEdm>H4iE%didvL{0t0*?l@ggCDuO~El!wI`5Rp_0 z4j)kE;e*F0Afr$VG|r8wfnTXS(iTNoDcE95k=9aa_p@bYGh4Eo-0z+*_vGI1p6}!q zgoo~0W{tK60ALw8h!g<;utW%-N5Y|qf=emTvMPLcRG`ITf#8ICmd1H-2||BNu~=+X zAjd)}GCd+R5`ahxW8iU=I{;YOlS$j6n6RmeDOQWGZJ@nhw#X9Vzc)9_mYK}4t2?Qx zvn{^bfGX*(DeVtGKy|(4S?aOFnT!tdi6*0et*xAj=2kT)k}ve|oLn6;zpr7^31N|^ zn104_R%wsZq;gFtz0)**&rX$#8rKNQD$qhrN4t*Byj*VMG$~lKr;Q@Zxx35#{bi;0 zsqDPr!3Zv##p|Y;L4|+GnU`O(D;}M!YBXHebRnV(>mA<4#yF=Qn;1-Mlvm|pzyX2r z+b&B&P(+Tw`F_#Cm+@W4f1I05)krtyM($wXhw23ld!F4Wyq-cB;(%j3+1-(h){+so ziQ79Jrt$031u3398J6FLnfyWdqVJSe+g5KXd9*3J&Y{6>>z4FHteZwSEi&rcc}}&5 z86Hwnc2>)guqnNWXv^v*?k^fEHp|ud-6~Kq{(|~*GV#PllgzvZ&FW5B!68M0PZES5 zsG+BQ2fVpD6V)cgXX^9@J`YSdL*;iXQky1ktP)DRajq9f^7nIdf@e2}^sl>7A87)r=aOJ9wD6TZEAQv2wH&k{7)ouR5ChdO>fcEG^izsOHKEDE=094)GpF1(e!v zDyLREmh<_N1k;~T!%pngS8tbjuwhIa|0IdUt`dd{KsF`xD_$oF-Jd270UciPH&R9YLA;Q|!e{P7!7Tf{wwgtN` zvl=zvAZN_rL;3^$D)yr}9uUGLr!Ph4>Fl}hkh#3Hs-ZGm@=;w^H!dmv_5GuuPt>dE zh-ov1ry`li^PaO`^Y|f$8W@K_35EF5lJcFP(6Dd)aGLY8@+fbKY~osyPgL(67yVYS z5FC&9IS97AD!~g1Ht}rS4+(e2a*uS>)#p8*5e+KD^L!1pL>I#qF3xB){UWDv+>_5l zEw|BUQFZoO`NnIid+LPaG-aU6+)kB`CHxp_C7+;A+d(yq?|wsXdel0BF)|c;4IyKu zJRG6yX4g7$Sapnx-i;g=A&6SR4ZU-%`q^vM0wE z#l_A=!w_`1>LY;}YARxev6-(dmdx!xI%}I^#G?omluk?AEM#ysVm(Nty;=kB6`0Ozy zd%lmRr(`ZP=|THa~u))I;?>E_6>4rM52-Mrmx0FN>7;E~^hbrSCdwLcv ccD!f-#57thcFZae`ZfV_U?{0^d)(RI0Ta&1Qvd(} literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader-members.htm new file mode 100644 index 0000000..ee343cc --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader-members.htm @@ -0,0 +1,83 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Shader Member List
+
+
+ +

This is the complete list of members for sf::Shader, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bind(const Shader *shader)sf::Shaderstatic
CurrentTexture (defined in sf::Shader)sf::Shaderstatic
ensureGlContext()sf::GlResourceprivatestatic
Fragment enum valuesf::Shader
GlResource()sf::GlResourceprivate
isAvailable()sf::Shaderstatic
loadFromFile(const std::string &filename, Type type)sf::Shader
loadFromFile(const std::string &vertexShaderFilename, const std::string &fragmentShaderFilename)sf::Shader
loadFromMemory(const std::string &shader, Type type)sf::Shader
loadFromMemory(const std::string &vertexShader, const std::string &fragmentShader)sf::Shader
loadFromStream(InputStream &stream, Type type)sf::Shader
loadFromStream(InputStream &vertexShaderStream, InputStream &fragmentShaderStream)sf::Shader
NonCopyable()sf::NonCopyableinlineprivate
setParameter(const std::string &name, float x)sf::Shader
setParameter(const std::string &name, float x, float y)sf::Shader
setParameter(const std::string &name, float x, float y, float z)sf::Shader
setParameter(const std::string &name, float x, float y, float z, float w)sf::Shader
setParameter(const std::string &name, const Vector2f &vector)sf::Shader
setParameter(const std::string &name, const Vector3f &vector)sf::Shader
setParameter(const std::string &name, const Color &color)sf::Shader
setParameter(const std::string &name, const sf::Transform &transform)sf::Shader
setParameter(const std::string &name, const Texture &texture)sf::Shader
setParameter(const std::string &name, CurrentTextureType)sf::Shader
Shader()sf::Shader
Type enum namesf::Shader
Vertex enum valuesf::Shader
~GlResource()sf::GlResourceprivate
~Shader()sf::Shader
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader.htm new file mode 100644 index 0000000..6676a1e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader.htm @@ -0,0 +1,1017 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Shader class (vertex and fragment) + More...

+ +

#include <Shader.hpp>

+
+Inheritance diagram for sf::Shader:
+
+
+ + +sf::GlResource +sf::NonCopyable + +
+ + + + + +

+Classes

struct  CurrentTextureType
 Special type/value that can be passed to setParameter, and that represents the texture of the object being drawn. More...
 
+ + + + +

+Public Types

enum  Type {
+  Vertex, +
+  Fragment +
+ }
 Types of shaders. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Shader ()
 Default constructor. More...
 
 ~Shader ()
 Destructor. More...
 
bool loadFromFile (const std::string &filename, Type type)
 Load either the vertex or fragment shader from a file. More...
 
bool loadFromFile (const std::string &vertexShaderFilename, const std::string &fragmentShaderFilename)
 Load both the vertex and fragment shaders from files. More...
 
bool loadFromMemory (const std::string &shader, Type type)
 Load either the vertex or fragment shader from a source code in memory. More...
 
bool loadFromMemory (const std::string &vertexShader, const std::string &fragmentShader)
 Load both the vertex and fragment shaders from source codes in memory. More...
 
bool loadFromStream (InputStream &stream, Type type)
 Load either the vertex or fragment shader from a custom stream. More...
 
bool loadFromStream (InputStream &vertexShaderStream, InputStream &fragmentShaderStream)
 Load both the vertex and fragment shaders from custom streams. More...
 
void setParameter (const std::string &name, float x)
 Change a float parameter of the shader. More...
 
void setParameter (const std::string &name, float x, float y)
 Change a 2-components vector parameter of the shader. More...
 
void setParameter (const std::string &name, float x, float y, float z)
 Change a 3-components vector parameter of the shader. More...
 
void setParameter (const std::string &name, float x, float y, float z, float w)
 Change a 4-components vector parameter of the shader. More...
 
void setParameter (const std::string &name, const Vector2f &vector)
 Change a 2-components vector parameter of the shader. More...
 
void setParameter (const std::string &name, const Vector3f &vector)
 Change a 3-components vector parameter of the shader. More...
 
void setParameter (const std::string &name, const Color &color)
 Change a color parameter of the shader. More...
 
void setParameter (const std::string &name, const sf::Transform &transform)
 Change a matrix parameter of the shader. More...
 
void setParameter (const std::string &name, const Texture &texture)
 Change a texture parameter of the shader. More...
 
void setParameter (const std::string &name, CurrentTextureType)
 Change a texture parameter of the shader. More...
 
+ + + + + + + +

+Static Public Member Functions

static void bind (const Shader *shader)
 Bind a shader for rendering. More...
 
static bool isAvailable ()
 Tell whether or not the system supports shaders. More...
 
+ + + +

+Static Public Attributes

+static CurrentTextureType CurrentTexture
 
+ + + + +

+Static Private Member Functions

static void ensureGlContext ()
 Make sure that a valid OpenGL context exists in the current thread. More...
 
+

Detailed Description

+

Shader class (vertex and fragment)

+

Shaders are programs written using a specific language, executed directly by the graphics card and allowing to apply real-time operations to the rendered entities.

+

There are two kinds of shaders:

+
    +
  • Vertex shaders, that process vertices
  • +
  • Fragment (pixel) shaders, that process pixels
  • +
+

A sf::Shader can be composed of either a vertex shader alone, a fragment shader alone, or both combined (see the variants of the load functions).

+

Shaders are written in GLSL, which is a C-like language dedicated to OpenGL shaders. You'll probably need to learn its basics before writing your own shaders for SFML.

+

Like any C/C++ program, a shader has its own variables that you can set from your C++ application. sf::Shader handles 5 different types of variables:

+
    +
  • floats
  • +
  • vectors (2, 3 or 4 components)
  • +
  • colors
  • +
  • textures
  • +
  • transforms (matrices)
  • +
+

The value of the variables can be changed at any time with the various overloads of the setParameter function:

+
shader.setParameter("offset", 2.f);
+
shader.setParameter("point", 0.5f, 0.8f, 0.3f);
+
shader.setParameter("color", sf::Color(128, 50, 255));
+
shader.setParameter("matrix", transform); // transform is a sf::Transform
+
shader.setParameter("overlay", texture); // texture is a sf::Texture
+
shader.setParameter("texture", sf::Shader::CurrentTexture);
+

The special Shader::CurrentTexture argument maps the given texture variable to the current texture of the object being drawn (which cannot be known in advance).

+

To apply a shader to a drawable, you must pass it as an additional parameter to the Draw function:

+
window.draw(sprite, &shader);
+

... which is in fact just a shortcut for this:

+
+
states.shader = &shader;
+
window.draw(sprite, states);
+

In the code above we pass a pointer to the shader, because it may be null (which means "no shader").

+

Shaders can be used on any drawable, but some combinations are not interesting. For example, using a vertex shader on a sf::Sprite is limited because there are only 4 vertices, the sprite would have to be subdivided in order to apply wave effects. Another bad example is a fragment shader with sf::Text: the texture of the text is not the actual text that you see on screen, it is a big texture containing all the characters of the font in an arbitrary order; thus, texture lookups on pixels other than the current one may not give you the expected result.

+

Shaders can also be used to apply global post-effects to the current contents of the target (like the old sf::PostFx class in SFML 1). This can be done in two different ways:

+
    +
  • draw everything to a sf::RenderTexture, then draw it to the main target using the shader
  • +
  • draw everything directly to the main target, then use sf::Texture::update(Window&) to copy its contents to a texture and draw it to the main target using the shader
  • +
+

The first technique is more optimized because it doesn't involve retrieving the target's pixels to system memory, but the second one doesn't impact the rendering process and can be easily inserted anywhere without impacting all the code.

+

Like sf::Texture that can be used as a raw OpenGL texture, sf::Shader can also be used directly as a raw shader for custom OpenGL geometry.

+
+
... render OpenGL geometry ...
+
sf::Shader::bind(NULL);
+
+

Definition at line 51 of file Shader.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Shader::Type
+
+ +

Types of shaders.

+ + + +
Enumerator
Vertex  +

Vertex shader.

+
Fragment  +

Fragment (pixel) shader.

+
+ +

Definition at line 59 of file Shader.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Shader::Shader ()
+
+ +

Default constructor.

+

This constructor creates an invalid shader.

+ +
+
+ +
+
+ + + + + + + +
sf::Shader::~Shader ()
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
static void sf::Shader::bind (const Shadershader)
+
+static
+
+ +

Bind a shader for rendering.

+

This function is not part of the graphics API, it mustn't be used when drawing SFML entities. It must be used only if you mix sf::Shader with OpenGL code.

+
sf::Shader s1, s2;
+
...
+
sf::Shader::bind(&s1);
+
// draw OpenGL stuff that use s1...
+ +
// draw OpenGL stuff that use s2...
+ +
// draw OpenGL stuff that use no shader...
+
Parameters
+ + +
shaderShader to bind, can be null to use no shader
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static bool sf::Shader::isAvailable ()
+
+static
+
+ +

Tell whether or not the system supports shaders.

+

This function should always be called before using the shader features. If it returns false, then any attempt to use sf::Shader will fail.

+
Returns
True if shaders are supported, false otherwise
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Shader::loadFromFile (const std::string & filename,
Type type 
)
+
+ +

Load either the vertex or fragment shader from a file.

+

This function loads a single shader, either vertex or fragment, identified by the second argument. The source must be a text file containing a valid shader in GLSL language. GLSL is a C-like language dedicated to OpenGL shaders; you'll probably need to read a good documentation for it before writing your own shaders.

+
Parameters
+ + + +
filenamePath of the vertex or fragment shader file to load
typeType of shader (vertex or fragment)
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromMemory, loadFromStream
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Shader::loadFromFile (const std::string & vertexShaderFilename,
const std::string & fragmentShaderFilename 
)
+
+ +

Load both the vertex and fragment shaders from files.

+

This function loads both the vertex and the fragment shaders. If one of them fails to load, the shader is left empty (the valid shader is unloaded). The sources must be text files containing valid shaders in GLSL language. GLSL is a C-like language dedicated to OpenGL shaders; you'll probably need to read a good documentation for it before writing your own shaders.

+
Parameters
+ + + +
vertexShaderFilenamePath of the vertex shader file to load
fragmentShaderFilenamePath of the fragment shader file to load
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromMemory, loadFromStream
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Shader::loadFromMemory (const std::string & shader,
Type type 
)
+
+ +

Load either the vertex or fragment shader from a source code in memory.

+

This function loads a single shader, either vertex or fragment, identified by the second argument. The source code must be a valid shader in GLSL language. GLSL is a C-like language dedicated to OpenGL shaders; you'll probably need to read a good documentation for it before writing your own shaders.

+
Parameters
+ + + +
shaderString containing the source code of the shader
typeType of shader (vertex or fragment)
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromFile, loadFromStream
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Shader::loadFromMemory (const std::string & vertexShader,
const std::string & fragmentShader 
)
+
+ +

Load both the vertex and fragment shaders from source codes in memory.

+

This function loads both the vertex and the fragment shaders. If one of them fails to load, the shader is left empty (the valid shader is unloaded). The sources must be valid shaders in GLSL language. GLSL is a C-like language dedicated to OpenGL shaders; you'll probably need to read a good documentation for it before writing your own shaders.

+
Parameters
+ + + +
vertexShaderString containing the source code of the vertex shader
fragmentShaderString containing the source code of the fragment shader
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromFile, loadFromStream
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Shader::loadFromStream (InputStreamstream,
Type type 
)
+
+ +

Load either the vertex or fragment shader from a custom stream.

+

This function loads a single shader, either vertex or fragment, identified by the second argument. The source code must be a valid shader in GLSL language. GLSL is a C-like language dedicated to OpenGL shaders; you'll probably need to read a good documentation for it before writing your own shaders.

+
Parameters
+ + + +
streamSource stream to read from
typeType of shader (vertex or fragment)
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromFile, loadFromMemory
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Shader::loadFromStream (InputStreamvertexShaderStream,
InputStreamfragmentShaderStream 
)
+
+ +

Load both the vertex and fragment shaders from custom streams.

+

This function loads both the vertex and the fragment shaders. If one of them fails to load, the shader is left empty (the valid shader is unloaded). The source codes must be valid shaders in GLSL language. GLSL is a C-like language dedicated to OpenGL shaders; you'll probably need to read a good documentation for it before writing your own shaders.

+
Parameters
+ + + +
vertexShaderStreamSource stream to read the vertex shader from
fragmentShaderStreamSource stream to read the fragment shader from
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromFile, loadFromMemory
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
float x 
)
+
+ +

Change a float parameter of the shader.

+

name is the name of the variable to change in the shader. The corresponding parameter in the shader must be a float (float GLSL type).

+

Example:

+
uniform float myparam; // this is the variable in the shader
+
shader.setParameter("myparam", 5.2f);
+
Parameters
+ + + +
nameName of the parameter in the shader
xValue to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
float x,
float y 
)
+
+ +

Change a 2-components vector parameter of the shader.

+

name is the name of the variable to change in the shader. The corresponding parameter in the shader must be a 2x1 vector (vec2 GLSL type).

+

Example:

+
uniform vec2 myparam; // this is the variable in the shader
+
shader.setParameter("myparam", 5.2f, 6.0f);
+
Parameters
+ + + + +
nameName of the parameter in the shader
xFirst component of the value to assign
ySecond component of the value to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
float x,
float y,
float z 
)
+
+ +

Change a 3-components vector parameter of the shader.

+

name is the name of the variable to change in the shader. The corresponding parameter in the shader must be a 3x1 vector (vec3 GLSL type).

+

Example:

+
uniform vec3 myparam; // this is the variable in the shader
+
shader.setParameter("myparam", 5.2f, 6.0f, -8.1f);
+
Parameters
+ + + + + +
nameName of the parameter in the shader
xFirst component of the value to assign
ySecond component of the value to assign
zThird component of the value to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
float x,
float y,
float z,
float w 
)
+
+ +

Change a 4-components vector parameter of the shader.

+

name is the name of the variable to change in the shader. The corresponding parameter in the shader must be a 4x1 vector (vec4 GLSL type).

+

Example:

+
uniform vec4 myparam; // this is the variable in the shader
+
shader.setParameter("myparam", 5.2f, 6.0f, -8.1f, 0.4f);
+
Parameters
+ + + + + + +
nameName of the parameter in the shader
xFirst component of the value to assign
ySecond component of the value to assign
zThird component of the value to assign
wFourth component of the value to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
const Vector2fvector 
)
+
+ +

Change a 2-components vector parameter of the shader.

+

name is the name of the variable to change in the shader. The corresponding parameter in the shader must be a 2x1 vector (vec2 GLSL type).

+

Example:

+
uniform vec2 myparam; // this is the variable in the shader
+
shader.setParameter("myparam", sf::Vector2f(5.2f, 6.0f));
+
Parameters
+ + + +
nameName of the parameter in the shader
vectorVector to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
const Vector3fvector 
)
+
+ +

Change a 3-components vector parameter of the shader.

+

name is the name of the variable to change in the shader. The corresponding parameter in the shader must be a 3x1 vector (vec3 GLSL type).

+

Example:

+
uniform vec3 myparam; // this is the variable in the shader
+
shader.setParameter("myparam", sf::Vector3f(5.2f, 6.0f, -8.1f));
+
Parameters
+ + + +
nameName of the parameter in the shader
vectorVector to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
const Colorcolor 
)
+
+ +

Change a color parameter of the shader.

+

name is the name of the variable to change in the shader. The corresponding parameter in the shader must be a 4x1 vector (vec4 GLSL type).

+

It is important to note that the components of the color are normalized before being passed to the shader. Therefore, they are converted from range [0 .. 255] to range [0 .. 1]. For example, a sf::Color(255, 125, 0, 255) will be transformed to a vec4(1.0, 0.5, 0.0, 1.0) in the shader.

+

Example:

+
uniform vec4 color; // this is the variable in the shader
+
shader.setParameter("color", sf::Color(255, 128, 0, 255));
+
Parameters
+ + + +
nameName of the parameter in the shader
colorColor to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
const sf::Transformtransform 
)
+
+ +

Change a matrix parameter of the shader.

+

name is the name of the variable to change in the shader. The corresponding parameter in the shader must be a 4x4 matrix (mat4 GLSL type).

+

Example:

+
uniform mat4 matrix; // this is the variable in the shader
+
sf::Transform transform;
+
transform.translate(5, 10);
+
shader.setParameter("matrix", transform);
+
Parameters
+ + + +
nameName of the parameter in the shader
transformTransform to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
const Texturetexture 
)
+
+ +

Change a texture parameter of the shader.

+

name is the name of the variable to change in the shader. The corresponding parameter in the shader must be a 2D texture (sampler2D GLSL type).

+

Example:

+
uniform sampler2D the_texture; // this is the variable in the shader
+
sf::Texture texture;
+
...
+
shader.setParameter("the_texture", texture);
+

It is important to note that texture must remain alive as long as the shader uses it, no copy is made internally.

+

To use the texture of the object being draw, which cannot be known in advance, you can pass the special value sf::Shader::CurrentTexture:

+
shader.setParameter("the_texture", sf::Shader::CurrentTexture).
+
Parameters
+ + + +
nameName of the texture in the shader
textureTexture to assign
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Shader::setParameter (const std::string & name,
CurrentTextureType  
)
+
+ +

Change a texture parameter of the shader.

+

This overload maps a shader texture variable to the texture of the object being drawn, which cannot be known in advance. The second argument must be sf::Shader::CurrentTexture. The corresponding parameter in the shader must be a 2D texture (sampler2D GLSL type).

+

Example:

+
uniform sampler2D current; // this is the variable in the shader
+
shader.setParameter("current", sf::Shader::CurrentTexture);
+
Parameters
+ + +
nameName of the texture in the shader
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shader.png new file mode 100644 index 0000000000000000000000000000000000000000..52135c6f542c71076203eba2dca243b9cb8478e1 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^cYrv6gBeJ=etRtdq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0sy$sCLn;{G&V9XYl>rai^7z{S>2^(1 z;{*fB#Gj_Dx8)L%UY2<%e$V%P+&cC5s_(PzQ7KiJI(Z4-j5#WQdro>@s{B)5bWXMX z^U29CHR7f(NnUeGck{k|(uQR&e2;(T>h65f_p`vLyM59Z-t3~6PTQQ{bnbD_n`Ixl z>`MZt;IaGj6*o5i_+7MBx+ru@>O6zjMn5MV{8RM#o<*{rc=42!)e}y;J@%Zjeb*Pq zb$!$Ro1K}aTUxiXG+$`Pq|?)1?G^Amt2+5w(NDIU)3g_x&fh&{b=Z0@kKlE;*uQeQ zpFFf>iuUdUr?%-#|I~4(`uB73gm*O}65}Lk5`HH@lXO`iHJIih#D7u}ee9H5ZosZw7x?@jNUfR6Vd%pL(t;Z8! zAhI*GS2BEA8h^t2w5{CTx4&BVY`$Y0kiWZ5F<+OxAUW@^7Q+tRX_gIw8_zKIbfoen zxV)RY^Eh)Ab3x{sA_li3M(hSkDAGE`49ZC}nI$GB8aga%WM+%AEyUC;Z>T&rtQbGJ4wK$Vro?_^Laf6n(3lt8sRH?^320 zXZvQ|o^U#gZ^6mX?N2WSY??LuTwGS + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Shape Member List
+
+
+ +

This is the complete list of members for sf::Shape, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getFillColor() const sf::Shape
getGlobalBounds() const sf::Shape
getInverseTransform() const sf::Transformable
getLocalBounds() const sf::Shape
getOrigin() const sf::Transformable
getOutlineColor() const sf::Shape
getOutlineThickness() const sf::Shape
getPoint(unsigned int index) const =0sf::Shapepure virtual
getPointCount() const =0sf::Shapepure virtual
getPosition() const sf::Transformable
getRotation() const sf::Transformable
getScale() const sf::Transformable
getTexture() const sf::Shape
getTextureRect() const sf::Shape
getTransform() const sf::Transformable
move(float offsetX, float offsetY)sf::Transformable
move(const Vector2f &offset)sf::Transformable
rotate(float angle)sf::Transformable
scale(float factorX, float factorY)sf::Transformable
scale(const Vector2f &factor)sf::Transformable
setFillColor(const Color &color)sf::Shape
setOrigin(float x, float y)sf::Transformable
setOrigin(const Vector2f &origin)sf::Transformable
setOutlineColor(const Color &color)sf::Shape
setOutlineThickness(float thickness)sf::Shape
setPosition(float x, float y)sf::Transformable
setPosition(const Vector2f &position)sf::Transformable
setRotation(float angle)sf::Transformable
setScale(float factorX, float factorY)sf::Transformable
setScale(const Vector2f &factors)sf::Transformable
setTexture(const Texture *texture, bool resetRect=false)sf::Shape
setTextureRect(const IntRect &rect)sf::Shape
Shape()sf::Shapeprotected
Transformable()sf::Transformable
update()sf::Shapeprotected
~Drawable()sf::Drawableinlinevirtual
~Shape()sf::Shapevirtual
~Transformable()sf::Transformablevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shape.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shape.htm new file mode 100644 index 0000000..a2344c0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shape.htm @@ -0,0 +1,1267 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Base class for textured shapes with outline. + More...

+ +

#include <Shape.hpp>

+
+Inheritance diagram for sf::Shape:
+
+
+ + +sf::Drawable +sf::Transformable +sf::CircleShape +sf::ConvexShape +sf::RectangleShape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~Shape ()
 Virtual destructor. More...
 
void setTexture (const Texture *texture, bool resetRect=false)
 Change the source texture of the shape. More...
 
void setTextureRect (const IntRect &rect)
 Set the sub-rectangle of the texture that the shape will display. More...
 
void setFillColor (const Color &color)
 Set the fill color of the shape. More...
 
void setOutlineColor (const Color &color)
 Set the outline color of the shape. More...
 
void setOutlineThickness (float thickness)
 Set the thickness of the shape's outline. More...
 
const TexturegetTexture () const
 Get the source texture of the shape. More...
 
const IntRectgetTextureRect () const
 Get the sub-rectangle of the texture displayed by the shape. More...
 
const ColorgetFillColor () const
 Get the fill color of the shape. More...
 
const ColorgetOutlineColor () const
 Get the outline color of the shape. More...
 
float getOutlineThickness () const
 Get the outline thickness of the shape. More...
 
virtual unsigned int getPointCount () const =0
 Get the total number of points of the shape. More...
 
virtual Vector2f getPoint (unsigned int index) const =0
 Get a point of the shape. More...
 
FloatRect getLocalBounds () const
 Get the local bounding rectangle of the entity. More...
 
FloatRect getGlobalBounds () const
 Get the global bounding rectangle of the entity. More...
 
void setPosition (float x, float y)
 set the position of the object More...
 
void setPosition (const Vector2f &position)
 set the position of the object More...
 
void setRotation (float angle)
 set the orientation of the object More...
 
void setScale (float factorX, float factorY)
 set the scale factors of the object More...
 
void setScale (const Vector2f &factors)
 set the scale factors of the object More...
 
void setOrigin (float x, float y)
 set the local origin of the object More...
 
void setOrigin (const Vector2f &origin)
 set the local origin of the object More...
 
const Vector2fgetPosition () const
 get the position of the object More...
 
float getRotation () const
 get the orientation of the object More...
 
const Vector2fgetScale () const
 get the current scale of the object More...
 
const Vector2fgetOrigin () const
 get the local origin of the object More...
 
void move (float offsetX, float offsetY)
 Move the object by a given offset. More...
 
void move (const Vector2f &offset)
 Move the object by a given offset. More...
 
void rotate (float angle)
 Rotate the object. More...
 
void scale (float factorX, float factorY)
 Scale the object. More...
 
void scale (const Vector2f &factor)
 Scale the object. More...
 
const TransformgetTransform () const
 get the combined transform of the object More...
 
const TransformgetInverseTransform () const
 get the inverse of the combined transform of the object More...
 
+ + + + + + + +

+Protected Member Functions

 Shape ()
 Default constructor. More...
 
void update ()
 Recompute the internal geometry of the shape. More...
 
+

Detailed Description

+

Base class for textured shapes with outline.

+

sf::Shape is a drawable class that allows to define and display a custom convex shape on a render target.

+

It's only an abstract base, it needs to be specialized for concrete types of shapes (circle, rectangle, convex polygon, star, ...).

+

In addition to the attributes provided by the specialized shape classes, a shape always has the following attributes:

+
    +
  • a texture
  • +
  • a texture rectangle
  • +
  • a fill color
  • +
  • an outline color
  • +
  • an outline thickness
  • +
+

Each feature is optional, and can be disabled easily:

+
    +
  • the texture can be null
  • +
  • the fill/outline colors can be sf::Color::Transparent
  • +
  • the outline thickness can be zero
  • +
+

You can write your own derived shape class, there are only two virtual functions to override:

+
    +
  • getPointCount must return the number of points of the shape
  • +
  • getPoint must return the points of the shape
  • +
+
See Also
sf::RectangleShape, sf::CircleShape, sf::ConvexShape, sf::Transformable
+ +

Definition at line 44 of file Shape.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::Shape::~Shape ()
+
+virtual
+
+ +

Virtual destructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
sf::Shape::Shape ()
+
+protected
+
+ +

Default constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
const Color& sf::Shape::getFillColor () const
+
+ +

Get the fill color of the shape.

+
Returns
Fill color of the shape
+
See Also
setFillColor
+ +
+
+ +
+
+ + + + + + + +
FloatRect sf::Shape::getGlobalBounds () const
+
+ +

Get the global bounding rectangle of the entity.

+

The returned rectangle is in global coordinates, which means that it takes in account the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the sprite in the global 2D world's coordinate system.

+
Returns
Global bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getInverseTransform () const
+
+inherited
+
+ +

get the inverse of the combined transform of the object

+
Returns
Inverse of the combined transformations applied to the object
+
See Also
getTransform
+ +
+
+ +
+
+ + + + + + + +
FloatRect sf::Shape::getLocalBounds () const
+
+ +

Get the local bounding rectangle of the entity.

+

The returned rectangle is in local coordinates, which means that it ignores the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the entity in the entity's coordinate system.

+
Returns
Local bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getOrigin () const
+
+inherited
+
+ +

get the local origin of the object

+
Returns
Current origin
+
See Also
setOrigin
+ +
+
+ +
+
+ + + + + + + +
const Color& sf::Shape::getOutlineColor () const
+
+ +

Get the outline color of the shape.

+
Returns
Outline color of the shape
+
See Also
setOutlineColor
+ +
+
+ +
+
+ + + + + + + +
float sf::Shape::getOutlineThickness () const
+
+ +

Get the outline thickness of the shape.

+
Returns
Outline thickness of the shape
+
See Also
setOutlineThickness
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Vector2f sf::Shape::getPoint (unsigned int index) const
+
+pure virtual
+
+ +

Get a point of the shape.

+

The result is undefined if index is out of the valid range.

+
Parameters
+ + +
indexIndex of the point to get, in range [0 .. getPointCount() - 1]
+
+
+
Returns
Index-th point of the shape
+
See Also
getPointCount
+ +

Implemented in sf::ConvexShape, sf::CircleShape, and sf::RectangleShape.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int sf::Shape::getPointCount () const
+
+pure virtual
+
+ +

Get the total number of points of the shape.

+
Returns
Number of points of the shape
+
See Also
getPoint
+ +

Implemented in sf::CircleShape, sf::RectangleShape, and sf::ConvexShape.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getPosition () const
+
+inherited
+
+ +

get the position of the object

+
Returns
Current position
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::Transformable::getRotation () const
+
+inherited
+
+ +

get the orientation of the object

+

The rotation is always in the range [0, 360].

+
Returns
Current rotation, in degrees
+
See Also
setRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getScale () const
+
+inherited
+
+ +

get the current scale of the object

+
Returns
Current scale factors
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + +
const Texture* sf::Shape::getTexture () const
+
+ +

Get the source texture of the shape.

+

If the shape has no source texture, a NULL pointer is returned. The returned pointer is const, which means that you can't modify the texture when you retrieve it with this function.

+
Returns
Pointer to the shape's texture
+
See Also
setTexture
+ +
+
+ +
+
+ + + + + + + +
const IntRect& sf::Shape::getTextureRect () const
+
+ +

Get the sub-rectangle of the texture displayed by the shape.

+
Returns
Texture rectangle of the shape
+
See Also
setTextureRect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getTransform () const
+
+inherited
+
+ +

get the combined transform of the object

+
Returns
Transform combining the position/rotation/scale/origin of the object
+
See Also
getInverseTransform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::move (float offsetX,
float offsetY 
)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f pos = object.getPosition();
+
object.setPosition(pos.x + offsetX, pos.y + offsetY);
+
Parameters
+ + + +
offsetXX offset
offsetYY offset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::move (const Vector2foffset)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
object.setPosition(object.getPosition() + offset);
+
Parameters
+ + +
offsetOffset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::rotate (float angle)
+
+inherited
+
+ +

Rotate the object.

+

This function adds to the current rotation of the object, unlike setRotation which overwrites it. Thus, it is equivalent to the following code:

+
object.setRotation(object.getRotation() + angle);
+
Parameters
+ + +
angleAngle of rotation, in degrees
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::scale (float factorX,
float factorY 
)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factorX, scale.y * factorY);
+
Parameters
+ + + +
factorXHorizontal scale factor
factorYVertical scale factor
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::scale (const Vector2ffactor)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factor.x, scale.y * factor.y);
+
Parameters
+ + +
factorScale factors
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + + +
void sf::Shape::setFillColor (const Colorcolor)
+
+ +

Set the fill color of the shape.

+

This color is modulated (multiplied) with the shape's texture if any. It can be used to colorize the shape, or change its global opacity. You can use sf::Color::Transparent to make the inside of the shape transparent, and have the outline alone. By default, the shape's fill color is opaque white.

+
Parameters
+ + +
colorNew color of the shape
+
+
+
See Also
getFillColor, setOutlineColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setOrigin (float x,
float y 
)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new origin
yY coordinate of the new origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setOrigin (const Vector2forigin)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + +
originNew origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + + + + +
void sf::Shape::setOutlineColor (const Colorcolor)
+
+ +

Set the outline color of the shape.

+

By default, the shape's outline color is opaque white.

+
Parameters
+ + +
colorNew outline color of the shape
+
+
+
See Also
getOutlineColor, setFillColor
+ +
+
+ +
+
+ + + + + + + + +
void sf::Shape::setOutlineThickness (float thickness)
+
+ +

Set the thickness of the shape's outline.

+

Note that negative values are allowed (so that the outline expands towards the center of the shape), and using zero disables the outline. By default, the outline thickness is 0.

+
Parameters
+ + +
thicknessNew outline thickness
+
+
+
See Also
getOutlineThickness
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setPosition (float x,
float y 
)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new position
yY coordinate of the new position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setPosition (const Vector2fposition)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + +
positionNew position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setRotation (float angle)
+
+inherited
+
+ +

set the orientation of the object

+

This function completely overwrites the previous rotation. See the rotate function to add an angle based on the previous rotation instead. The default rotation of a transformable object is 0.

+
Parameters
+ + +
angleNew rotation, in degrees
+
+
+
See Also
rotate, getRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setScale (float factorX,
float factorY 
)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + + +
factorXNew horizontal scale factor
factorYNew vertical scale factor
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setScale (const Vector2ffactors)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + +
factorsNew scale factors
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Shape::setTexture (const Texturetexture,
bool resetRect = false 
)
+
+ +

Change the source texture of the shape.

+

The texture argument refers to a texture that must exist as long as the shape uses it. Indeed, the shape doesn't store its own copy of the texture, but rather keeps a pointer to the one that you passed to this function. If the source texture is destroyed and the shape tries to use it, the behaviour is undefined. texture can be NULL to disable texturing. If resetRect is true, the TextureRect property of the shape is automatically adjusted to the size of the new texture. If it is false, the texture rect is left unchanged.

+
Parameters
+ + + +
textureNew texture
resetRectShould the texture rect be reset to the size of the new texture?
+
+
+
See Also
getTexture, setTextureRect
+ +
+
+ +
+
+ + + + + + + + +
void sf::Shape::setTextureRect (const IntRectrect)
+
+ +

Set the sub-rectangle of the texture that the shape will display.

+

The texture rect is useful when you don't want to display the whole texture, but rather a part of it. By default, the texture rect covers the entire texture.

+
Parameters
+ + +
rectRectangle defining the region of the texture to display
+
+
+
See Also
getTextureRect, setTexture
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Shape::update ()
+
+protected
+
+ +

Recompute the internal geometry of the shape.

+

This function must be called by the derived class everytime the shape's points change (ie. the result of either getPointCount or getPoint is different).

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shape.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Shape.png new file mode 100644 index 0000000000000000000000000000000000000000..83c20e77afaba5c2390de4178f3467b35e326b97 GIT binary patch literal 1486 zcmaJ>3pA8z82*P98{+JqTymR@wl!`WXF_7saP$*t2Fayyr!kqW+(vHEx>c%ajL6Uh zX_aA8iOk3)GMUqj$x7}<8W|(2Uq7?IcF(EKcJ@2xd%pKM?|a_cdEYPB)5Aq|?S{1g z0H}hyoCpAbN=D=yC3ys&yI;a1kCx|dFK3xdhKN(*g}5`VXA$YsZE0yy$bDsiP^DOc z2N6JwR!?uYmn8rw1cFXGyb@6}tQmSWT3ulPUob1{vfg|3QcmNeIL_@zp$Ck9{G?T) zIc!gGHO`=R1LzY*;Np3HVfn|pWCWWKR8(r0qB3lBlY~8+&)`7v7OV|L$du(-ouI6- z@2WZ{pq}N8+n4C=U(SJH;k9vBLcx%U%(j|Cvo76^YZ8ehVfQy^`8(+MEc)F#vS$S| z`9qxEPtmrw)9z>wxSyeQ{uCiGRsc2vA(q$v>m*;r-wk|#I;t8pyr_{<^ znhzHVg!~~UD@47cOCxyp5u3@f93^8ICGH|k1}g;`^SE%@l#LGsqh7Fl`uoq5oVun# z@0H+fB;JVmtti7ZeIK7F6K_{KSxjxHE{nNhPK^wV?~ATu38>ehqAcj@d9RUBtZY|m z#iVdt)>lk26^D#)^BlKS%_Y5*O#W^G#;xNE$Zb7_H@XETPb$Ur&!HubAt=jUMlc}= zVp@O+p%7C|J!eAxyI=^|;p^b2j!-98V`quGHUMu+O7|SK0+b#|Q6W>5vp9SC^cQ zHZ?#iAtQO^ZKJsyATPlu0rJ1$kP`4i0}hT#h|t#7JR|QE1OdUm_MiIyx$OVYG~d*r z#pNae#V!(RJ2Q0xEF(VHp+*EiSR8&|x?mpm}cTwNZuK>9n8jwRx( zu>9D+TLf3aHGGfklM@dUt*QReXz-Y>N{UVZeO&{yBWBIfhRC!5!C#HMnov^e>wWeS zlaWgwF2G~M^!m{djbqxB>`lgYNblUsF*4{+PQrnbSUh|Fq#0>$Y(y)u@gfQAJ~Mg0 zTEW83Y;;d%^9AQknSSDM2C=r{>9Ym51*{$x3Uwh`K+3vJBwW&9pgy;>@Q_isOXzEC z26ZQc*TCr5nn@N92GNAo=*>U&pW_8O_kSQ+=auF`zWn`!)OyY3RLQh3ppqT7w}5vb znwITWrf4xi+1L~=Du*d6BfVnNZuc#lU!9Wmag?$$3wFz2oF3Rcff zC#KF{_c7eNj<`%Or$5XZP~p;fHJX~7s)*XtDdg@#tdz2GrkDg?3CN;l5BxgY3nxkL z-3_-k-TG>Ne?58SczZWPmYW~nUu1_NlepLSxJC62)37l6&Z1j*F+jK zO4hi^A(~fE80$4|Qi*Kq&TtpHLuZVJLC+=IzUH5qveY#TjTlgY zDI-}{^?8GshJ9S4nIjjI!9S#`+P>Tgw`a|taL{)JjjLeDb!C+jTv6?j619;B>1%Zq S8G6X)3xLiZPBlA&GX4gz>&m(S literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket-members.htm new file mode 100644 index 0000000..8616685 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket-members.htm @@ -0,0 +1,74 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Socket Member List
+
+
+ +

This is the complete list of members for sf::Socket, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
AnyPort enum valuesf::Socket
close()sf::Socketprotected
create()sf::Socketprotected
create(SocketHandle handle)sf::Socketprotected
Disconnected enum valuesf::Socket
Done enum valuesf::Socket
Error enum valuesf::Socket
getHandle() const sf::Socketprotected
isBlocking() const sf::Socket
NonCopyable()sf::NonCopyableinlineprivate
NotReady enum valuesf::Socket
setBlocking(bool blocking)sf::Socket
Socket(Type type)sf::Socketprotected
SocketSelector (defined in sf::Socket)sf::Socketfriend
Status enum namesf::Socket
Tcp enum valuesf::Socketprotected
Type enum namesf::Socketprotected
Udp enum valuesf::Socketprotected
~Socket()sf::Socketvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket.htm new file mode 100644 index 0000000..20dae8d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket.htm @@ -0,0 +1,457 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Base class for all the socket types. + More...

+ +

#include <Socket.hpp>

+
+Inheritance diagram for sf::Socket:
+
+
+ + +sf::NonCopyable +sf::TcpListener +sf::TcpSocket +sf::UdpSocket + +
+ + + + + + + + +

+Public Types

enum  Status {
+  Done, +
+  NotReady, +
+  Disconnected, +
+  Error +
+ }
 Status codes that may be returned by socket functions. More...
 
enum  { AnyPort = 0 + }
 Some special values used by sockets. More...
 
+ + + + + + + + + + +

+Public Member Functions

virtual ~Socket ()
 Destructor. More...
 
void setBlocking (bool blocking)
 Set the blocking state of the socket. More...
 
bool isBlocking () const
 Tell whether the socket is in blocking or non-blocking mode. More...
 
+ + + + +

+Protected Types

enum  Type {
+  Tcp, +
+  Udp +
+ }
 Types of protocols that the socket can use. More...
 
+ + + + + + + + + + + + + + + + +

+Protected Member Functions

 Socket (Type type)
 Default constructor. More...
 
SocketHandle getHandle () const
 Return the internal handle of the socket. More...
 
void create ()
 Create the internal representation of the socket. More...
 
void create (SocketHandle handle)
 Create the internal representation of the socket from a socket handle. More...
 
void close ()
 Close the socket gracefully. More...
 
+ + + +

+Friends

+class SocketSelector
 
+

Detailed Description

+

Base class for all the socket types.

+

This class mainly defines internal stuff to be used by derived classes.

+

The only public features that it defines, and which is therefore common to all the socket classes, is the blocking state. All sockets can be set as blocking or non-blocking.

+

In blocking mode, socket functions will hang until the operation completes, which means that the entire program (well, in fact the current thread if you use multiple ones) will be stuck waiting for your socket operation to complete.

+

In non-blocking mode, all the socket functions will return immediately. If the socket is not ready to complete the requested operation, the function simply returns the proper status code (Socket::NotReady).

+

The default mode, which is blocking, is the one that is generally used, in combination with threads or selectors. The non-blocking mode is rather used in real-time applications that run an endless loop that can poll the socket often enough, and cannot afford blocking this loop.

+
See Also
sf::TcpListener, sf::TcpSocket, sf::UdpSocket
+ +

Definition at line 45 of file Socket.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
anonymous enum
+
+ +

Some special values used by sockets.

+ + +
Enumerator
AnyPort  +

Special value that tells the system to pick any available port.

+
+ +

Definition at line 65 of file Socket.hpp.

+ +
+
+ +
+
+ + + + +
enum sf::Socket::Status
+
+ +

Status codes that may be returned by socket functions.

+ + + + + +
Enumerator
Done  +

The socket has sent / received the data.

+
NotReady  +

The socket is not ready to send / receive data yet.

+
Disconnected  +

The TCP socket has been disconnected.

+
Error  +

An unexpected error happened.

+
+ +

Definition at line 53 of file Socket.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
enum sf::Socket::Type
+
+protected
+
+ +

Types of protocols that the socket can use.

+ + + +
Enumerator
Tcp  +

TCP protocol.

+
Udp  +

UDP protocol.

+
+ +

Definition at line 113 of file Socket.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::Socket::~Socket ()
+
+virtual
+
+ +

Destructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
sf::Socket::Socket (Type type)
+
+protected
+
+ +

Default constructor.

+

This constructor can only be accessed by derived classes.

+
Parameters
+ + +
typeType of the socket (TCP or UDP)
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void sf::Socket::close ()
+
+protected
+
+ +

Close the socket gracefully.

+

This function can only be accessed by derived classes.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Socket::create ()
+
+protected
+
+ +

Create the internal representation of the socket.

+

This function can only be accessed by derived classes.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Socket::create (SocketHandle handle)
+
+protected
+
+ +

Create the internal representation of the socket from a socket handle.

+

This function can only be accessed by derived classes.

+
Parameters
+ + +
handleOS-specific handle of the socket to wrap
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SocketHandle sf::Socket::getHandle () const
+
+protected
+
+ +

Return the internal handle of the socket.

+

The returned handle may be invalid if the socket was not created yet (or already destroyed). This function can only be accessed by derived classes.

+
Returns
The internal (OS-specific) handle of the socket
+ +
+
+ +
+
+ + + + + + + +
bool sf::Socket::isBlocking () const
+
+ +

Tell whether the socket is in blocking or non-blocking mode.

+
Returns
True if the socket is blocking, false otherwise
+
See Also
setBlocking
+ +
+
+ +
+
+ + + + + + + + +
void sf::Socket::setBlocking (bool blocking)
+
+ +

Set the blocking state of the socket.

+

In blocking mode, calls will not return until they have completed their task. For example, a call to Receive in blocking mode won't return until some data was actually received. In non-blocking mode, calls will always return immediately, using the return code to signal whether there was data available or not. By default, all sockets are blocking.

+
Parameters
+ + +
blockingTrue to set the socket as blocking, false for non-blocking
+
+
+
See Also
isBlocking
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Socket.png new file mode 100644 index 0000000000000000000000000000000000000000..4143c15ecb1dba4c0d01adf4b5e69abe7271c784 GIT binary patch literal 1245 zcmeAS@N?(olHy`uVBq!ia0y~yVDtyFJ2;quWI*T43LqsB;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z>?$X;uuoF_;&8aNs9~wT=~s||NU2A z-^?b|A#qc0Nt^ZQNEMe`GP^FXXKrkEO29|Hb7`<(_}fzPn2Q>@?fmS}$F- z=Rdo@{#gC=_wOfdXNu{0t|Ww0$*?OZ?JeH ztibo1rQ@(2&*)l6{zC&S-=8pT?L7UE8{`tjPJ$}ol z>vrANkzr+KwTt(B{4?P=gVc@ZIqUCvXP2Lk*?N9oRs6m6#%14rz6kxcbMHB?K))lc z=U3jl+h6tl{B*nJn(My%zp8!r&^3Af@81>w3m^WgyJGbg$qA?~+R<}9QKC(m!GJ+K zkAY2r1r#i0n*$m&fUfS@?Z?f^ambEQX`?TyH&D$02CBusE$45)E!)k&(Egz{<>zHZ z+%|$#BL@kbn*mIb^NYMSm-_GYIHBUn9-!wpiSL27;@jX!i#GUsb{)1;)#Upj6DQse0y!%%_IeB^K!;fpl5|_Wc+VZF6ck1&;b{y9Bw*7W>Cq8lJ zJLx_1fA-G#vGVtJ9c9~PV)0r`w)M_0H`|B_Z+g4$=+~CB{o2!~+>iWub=`#19hPx? z-{lp>?V?-5)1Dl9t`zh(_)<;I?;3eC{rr#GTAwGKO1_-Fd6T&I4dJ5D_kZn{zdZjh zF#hZBH(a+X%0EAP_Cx+kb^rPE&Su&RFQ|eQu9@%z2R`K@l z=T(c}-L(IHy*m9y*qW+?BJ5K%iwd9`pp}xZC zv)^_eT_cqczxVvzUq7!b+W(&GriPto)`lAKNmtI7?e)II{jL44mj^IZrGQve{kx{; z@0)uqJZ~Kjce=G)#T8T + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::SocketSelector Member List
+
+
+ +

This is the complete list of members for sf::SocketSelector, including all inherited members.

+ + + + + + + + + + +
add(Socket &socket)sf::SocketSelector
clear()sf::SocketSelector
isReady(Socket &socket) const sf::SocketSelector
operator=(const SocketSelector &right)sf::SocketSelector
remove(Socket &socket)sf::SocketSelector
SocketSelector()sf::SocketSelector
SocketSelector(const SocketSelector &copy)sf::SocketSelector
wait(Time timeout=Time::Zero)sf::SocketSelector
~SocketSelector()sf::SocketSelector
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SocketSelector.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SocketSelector.htm new file mode 100644 index 0000000..95b5797 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SocketSelector.htm @@ -0,0 +1,383 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::SocketSelector Class Reference
+
+
+ +

Multiplexer that allows to read from multiple sockets. + More...

+ +

#include <SocketSelector.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SocketSelector ()
 Default constructor. More...
 
 SocketSelector (const SocketSelector &copy)
 Copy constructor. More...
 
 ~SocketSelector ()
 Destructor. More...
 
void add (Socket &socket)
 Add a new socket to the selector. More...
 
void remove (Socket &socket)
 Remove a socket from the selector. More...
 
void clear ()
 Remove all the sockets stored in the selector. More...
 
bool wait (Time timeout=Time::Zero)
 Wait until one or more sockets are ready to receive. More...
 
bool isReady (Socket &socket) const
 Test a socket to know if it is ready to receive data. More...
 
SocketSelectoroperator= (const SocketSelector &right)
 Overload of assignment operator. More...
 
+

Detailed Description

+

Multiplexer that allows to read from multiple sockets.

+

Socket selectors provide a way to wait until some data is available on a set of sockets, instead of just one.

+

This is convenient when you have multiple sockets that may possibly receive data, but you don't know which one will be ready first. In particular, it avoids to use a thread for each socket; with selectors, a single thread can handle all the sockets.

+

All types of sockets can be used in a selector:

+ +

A selector doesn't store its own copies of the sockets (socket classes are not copyable anyway), it simply keeps a reference to the original sockets that you pass to the "add" function. Therefore, you can't use the selector as a socket container, you must store them oustide and make sure that they are alive as long as they are used in the selector.

+

Using a selector is simple:

+
    +
  • populate the selector with all the sockets that you want to observe
  • +
  • make it wait until there is data available on any of the sockets
  • +
  • test each socket to find out which ones are ready
  • +
+

Usage example:

+
// Create a socket to listen to new connections
+
sf::TcpListener listener;
+
listener.listen(55001);
+
+
// Create a list to store the future clients
+
std::list<sf::TcpSocket*> clients;
+
+
// Create a selector
+ +
+
// Add the listener to the selector
+
selector.add(listener);
+
+
// Endless loop that waits for new connections
+
while (running)
+
{
+
// Make the selector wait for data on any socket
+
if (selector.wait())
+
{
+
// Test the listener
+
if (selector.isReady(listener))
+
{
+
// The listener is ready: there is a pending connection
+ +
if (listener.accept(*client) == sf::Socket::Done)
+
{
+
// Add the new client to the clients list
+
clients.push_back(client);
+
+
// Add the new client to the selector so that we will
+
// be notified when he sends something
+
selector.add(*client);
+
}
+
else
+
{
+
// Error, we won't get a new connection, delete the socket
+
delete client;
+
}
+
}
+
else
+
{
+
// The listener socket is not ready, test all other sockets (the clients)
+
for (std::list<sf::TcpSocket*>::iterator it = clients.begin(); it != clients.end(); ++it)
+
{
+
sf::TcpSocket& client = **it;
+
if (selector.isReady(client))
+
{
+
// The client has sent some data, we can receive it
+
sf::Packet packet;
+
if (client.receive(packet) == sf::Socket::Done)
+
{
+
...
+
}
+
}
+
}
+
}
+
}
+
}
+
See Also
sf::Socket
+ +

Definition at line 43 of file SocketSelector.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::SocketSelector::SocketSelector ()
+
+ +

Default constructor.

+ +
+
+ +
+
+ + + + + + + + +
sf::SocketSelector::SocketSelector (const SocketSelectorcopy)
+
+ +

Copy constructor.

+
Parameters
+ + +
copyInstance to copy
+
+
+ +
+
+ +
+
+ + + + + + + +
sf::SocketSelector::~SocketSelector ()
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void sf::SocketSelector::add (Socketsocket)
+
+ +

Add a new socket to the selector.

+

This function keeps a weak reference to the socket, so you have to make sure that the socket is not destroyed while it is stored in the selector. This function does nothing if the socket is not valid.

+
Parameters
+ + +
socketReference to the socket to add
+
+
+
See Also
remove, clear
+ +
+
+ +
+
+ + + + + + + +
void sf::SocketSelector::clear ()
+
+ +

Remove all the sockets stored in the selector.

+

This function doesn't destroy any instance, it simply removes all the references that the selector has to external sockets.

+
See Also
add, remove
+ +
+
+ +
+
+ + + + + + + + +
bool sf::SocketSelector::isReady (Socketsocket) const
+
+ +

Test a socket to know if it is ready to receive data.

+

This function must be used after a call to Wait, to know which sockets are ready to receive data. If a socket is ready, a call to receive will never block because we know that there is data available to read. Note that if this function returns true for a TcpListener, this means that it is ready to accept a new connection.

+
Parameters
+ + +
socketSocket to test
+
+
+
Returns
True if the socket is ready to read, false otherwise
+
See Also
isReady
+ +
+
+ +
+
+ + + + + + + + +
SocketSelector& sf::SocketSelector::operator= (const SocketSelectorright)
+
+ +

Overload of assignment operator.

+
Parameters
+ + +
rightInstance to assign
+
+
+
Returns
Reference to self
+ +
+
+ +
+
+ + + + + + + + +
void sf::SocketSelector::remove (Socketsocket)
+
+ +

Remove a socket from the selector.

+

This function doesn't destroy the socket, it simply removes the reference that the selector has to it.

+
Parameters
+ + +
socketReference to the socket to remove
+
+
+
See Also
add, clear
+ +
+
+ +
+
+ + + + + + + + +
bool sf::SocketSelector::wait (Time timeout = Time::Zero)
+
+ +

Wait until one or more sockets are ready to receive.

+

This function returns as soon as at least one socket has some data available to be received. To know which sockets are ready, use the isReady function. If you use a timeout and no socket is ready before the timeout is over, the function returns false.

+
Parameters
+ + +
timeoutMaximum time to wait, (use Time::Zero for infinity)
+
+
+
Returns
True if there are sockets ready, false otherwise
+
See Also
isReady
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound-members.htm new file mode 100644 index 0000000..89720cc --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound-members.htm @@ -0,0 +1,92 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Sound Member List
+
+
+ +

This is the complete list of members for sf::Sound, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getAttenuation() const sf::SoundSource
getBuffer() const sf::Sound
getLoop() const sf::Sound
getMinDistance() const sf::SoundSource
getPitch() const sf::SoundSource
getPlayingOffset() const sf::Sound
getPosition() const sf::SoundSource
getStatus() const sf::Sound
getVolume() const sf::SoundSource
isRelativeToListener() const sf::SoundSource
m_sourcesf::SoundSourceprotected
operator=(const Sound &right)sf::Sound
pause()sf::Sound
Paused enum valuesf::SoundSource
play()sf::Sound
Playing enum valuesf::SoundSource
resetBuffer()sf::Sound
setAttenuation(float attenuation)sf::SoundSource
setBuffer(const SoundBuffer &buffer)sf::Sound
setLoop(bool loop)sf::Sound
setMinDistance(float distance)sf::SoundSource
setPitch(float pitch)sf::SoundSource
setPlayingOffset(Time timeOffset)sf::Sound
setPosition(float x, float y, float z)sf::SoundSource
setPosition(const Vector3f &position)sf::SoundSource
setRelativeToListener(bool relative)sf::SoundSource
setVolume(float volume)sf::SoundSource
Sound()sf::Sound
Sound(const SoundBuffer &buffer)sf::Soundexplicit
Sound(const Sound &copy)sf::Sound
SoundSource(const SoundSource &copy)sf::SoundSource
SoundSource()sf::SoundSourceprotected
Status enum namesf::SoundSource
stop()sf::Sound
Stopped enum valuesf::SoundSource
~Sound()sf::Sound
~SoundSource()sf::SoundSourcevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound.htm new file mode 100644 index 0000000..9db2235 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound.htm @@ -0,0 +1,1029 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Regular sound that can be played in the audio environment. + More...

+ +

#include <Sound.hpp>

+
+Inheritance diagram for sf::Sound:
+
+
+ + +sf::SoundSource + +
+ + + + + +

+Public Types

enum  Status {
+  Stopped, +
+  Paused, +
+  Playing +
+ }
 Enumeration of the sound source states. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Sound ()
 Default constructor. More...
 
 Sound (const SoundBuffer &buffer)
 Construct the sound with a buffer. More...
 
 Sound (const Sound &copy)
 Copy constructor. More...
 
 ~Sound ()
 Destructor. More...
 
void play ()
 Start or resume playing the sound. More...
 
void pause ()
 Pause the sound. More...
 
void stop ()
 stop playing the sound More...
 
void setBuffer (const SoundBuffer &buffer)
 Set the source buffer containing the audio data to play. More...
 
void setLoop (bool loop)
 Set whether or not the sound should loop after reaching the end. More...
 
void setPlayingOffset (Time timeOffset)
 Change the current playing position of the sound. More...
 
const SoundBuffergetBuffer () const
 Get the audio buffer attached to the sound. More...
 
bool getLoop () const
 Tell whether or not the sound is in loop mode. More...
 
Time getPlayingOffset () const
 Get the current playing position of the sound. More...
 
Status getStatus () const
 Get the current status of the sound (stopped, paused, playing) More...
 
Soundoperator= (const Sound &right)
 Overload of assignment operator. More...
 
void resetBuffer ()
 Reset the internal buffer of the sound. More...
 
void setPitch (float pitch)
 Set the pitch of the sound. More...
 
void setVolume (float volume)
 Set the volume of the sound. More...
 
void setPosition (float x, float y, float z)
 Set the 3D position of the sound in the audio scene. More...
 
void setPosition (const Vector3f &position)
 Set the 3D position of the sound in the audio scene. More...
 
void setRelativeToListener (bool relative)
 Make the sound's position relative to the listener or absolute. More...
 
void setMinDistance (float distance)
 Set the minimum distance of the sound. More...
 
void setAttenuation (float attenuation)
 Set the attenuation factor of the sound. More...
 
float getPitch () const
 Get the pitch of the sound. More...
 
float getVolume () const
 Get the volume of the sound. More...
 
Vector3f getPosition () const
 Get the 3D position of the sound in the audio scene. More...
 
bool isRelativeToListener () const
 Tell whether the sound's position is relative to the listener or is absolute. More...
 
float getMinDistance () const
 Get the minimum distance of the sound. More...
 
float getAttenuation () const
 Get the attenuation factor of the sound. More...
 
+ + + + +

+Protected Attributes

unsigned int m_source
 OpenAL source identifier. More...
 
+

Detailed Description

+

Regular sound that can be played in the audio environment.

+

sf::Sound is the class to use to play sounds.

+

It provides:

+
    +
  • Control (play, pause, stop)
  • +
  • Ability to modify output parameters in real-time (pitch, volume, ...)
  • +
  • 3D spatial features (position, attenuation, ...).
  • +
+

sf::Sound is perfect for playing short sounds that can fit in memory and require no latency, like foot steps or gun shots. For longer sounds, like background musics or long speeches, rather see sf::Music (which is based on streaming).

+

In order to work, a sound must be given a buffer of audio data to play. Audio data (samples) is stored in sf::SoundBuffer, and attached to a sound with the setBuffer() function. The buffer object attached to a sound must remain alive as long as the sound uses it. Note that multiple sounds can use the same sound buffer at the same time.

+

Usage example:

+
+
buffer.loadFromFile("sound.wav");
+
+
sf::Sound sound;
+
sound.setBuffer(buffer);
+
sound.play();
+
See Also
sf::SoundBuffer, sf::Music
+ +

Definition at line 45 of file Sound.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum sf::SoundSource::Status
+
+inherited
+
+ +

Enumeration of the sound source states.

+ + + + +
Enumerator
Stopped  +

Sound is not playing.

+
Paused  +

Sound is paused.

+
Playing  +

Sound is playing.

+
+ +

Definition at line 49 of file SoundSource.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Sound::Sound ()
+
+ +

Default constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
sf::Sound::Sound (const SoundBufferbuffer)
+
+explicit
+
+ +

Construct the sound with a buffer.

+
Parameters
+ + +
bufferSound buffer containing the audio data to play with the sound
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::Sound::Sound (const Soundcopy)
+
+ +

Copy constructor.

+
Parameters
+ + +
copyInstance to copy
+
+
+ +
+
+ +
+
+ + + + + + + +
sf::Sound::~Sound ()
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getAttenuation () const
+
+inherited
+
+ +

Get the attenuation factor of the sound.

+
Returns
Attenuation factor of the sound
+
See Also
setAttenuation, getMinDistance
+ +
+
+ +
+
+ + + + + + + +
const SoundBuffer* sf::Sound::getBuffer () const
+
+ +

Get the audio buffer attached to the sound.

+
Returns
Sound buffer attached to the sound (can be NULL)
+ +
+
+ +
+
+ + + + + + + +
bool sf::Sound::getLoop () const
+
+ +

Tell whether or not the sound is in loop mode.

+
Returns
True if the sound is looping, false otherwise
+
See Also
setLoop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getMinDistance () const
+
+inherited
+
+ +

Get the minimum distance of the sound.

+
Returns
Minimum distance of the sound
+
See Also
setMinDistance, getAttenuation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getPitch () const
+
+inherited
+
+ +

Get the pitch of the sound.

+
Returns
Pitch of the sound
+
See Also
setPitch
+ +
+
+ +
+
+ + + + + + + +
Time sf::Sound::getPlayingOffset () const
+
+ +

Get the current playing position of the sound.

+
Returns
Current playing position, from the beginning of the sound
+
See Also
setPlayingOffset
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Vector3f sf::SoundSource::getPosition () const
+
+inherited
+
+ +

Get the 3D position of the sound in the audio scene.

+
Returns
Position of the sound
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + + + +
Status sf::Sound::getStatus () const
+
+ +

Get the current status of the sound (stopped, paused, playing)

+
Returns
Current status of the sound
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getVolume () const
+
+inherited
+
+ +

Get the volume of the sound.

+
Returns
Volume of the sound, in the range [0, 100]
+
See Also
setVolume
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::SoundSource::isRelativeToListener () const
+
+inherited
+
+ +

Tell whether the sound's position is relative to the listener or is absolute.

+
Returns
True if the position is relative, false if it's absolute
+
See Also
setRelativeToListener
+ +
+
+ +
+
+ + + + + + + + +
Sound& sf::Sound::operator= (const Soundright)
+
+ +

Overload of assignment operator.

+
Parameters
+ + +
rightInstance to assign
+
+
+
Returns
Reference to self
+ +
+
+ +
+
+ + + + + + + +
void sf::Sound::pause ()
+
+ +

Pause the sound.

+

This function pauses the sound if it was playing, otherwise (sound already paused or stopped) it has no effect.

+
See Also
play, stop
+ +
+
+ +
+
+ + + + + + + +
void sf::Sound::play ()
+
+ +

Start or resume playing the sound.

+

This function starts the stream if it was stopped, resumes it if it was paused, and restarts it from beginning if it was it already playing. This function uses its own thread so that it doesn't block the rest of the program while the sound is played.

+
See Also
pause, stop
+ +
+
+ +
+
+ + + + + + + +
void sf::Sound::resetBuffer ()
+
+ +

Reset the internal buffer of the sound.

+

This function is for internal use only, you don't have to use it. It is called by the sf::SoundBuffer that this sound uses, when it is destroyed in order to prevent the sound from using a dead buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setAttenuation (float attenuation)
+
+inherited
+
+ +

Set the attenuation factor of the sound.

+

The attenuation is a multiplicative factor which makes the sound more or less loud according to its distance from the listener. An attenuation of 0 will produce a non-attenuated sound, i.e. its volume will always be the same whether it is heard from near or from far. On the other hand, an attenuation value such as 100 will make the sound fade out very quickly as it gets further from the listener. The default value of the attenuation is 1.

+
Parameters
+ + +
attenuationNew attenuation factor of the sound
+
+
+
See Also
getAttenuation, setMinDistance
+ +
+
+ +
+
+ + + + + + + + +
void sf::Sound::setBuffer (const SoundBufferbuffer)
+
+ +

Set the source buffer containing the audio data to play.

+

It is important to note that the sound buffer is not copied, thus the sf::SoundBuffer instance must remain alive as long as it is attached to the sound.

+
Parameters
+ + +
bufferSound buffer to attach to the sound
+
+
+
See Also
getBuffer
+ +
+
+ +
+
+ + + + + + + + +
void sf::Sound::setLoop (bool loop)
+
+ +

Set whether or not the sound should loop after reaching the end.

+

If set, the sound will restart from beginning after reaching the end and so on, until it is stopped or setLoop(false) is called. The default looping state for sound is false.

+
Parameters
+ + +
loopTrue to play in loop, false to play once
+
+
+
See Also
getLoop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setMinDistance (float distance)
+
+inherited
+
+ +

Set the minimum distance of the sound.

+

The "minimum distance" of a sound is the maximum distance at which it is heard at its maximum volume. Further than the minimum distance, it will start to fade out according to its attenuation factor. A value of 0 ("inside the head +of the listener") is an invalid value and is forbidden. The default value of the minimum distance is 1.

+
Parameters
+ + +
distanceNew minimum distance of the sound
+
+
+
See Also
getMinDistance, setAttenuation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setPitch (float pitch)
+
+inherited
+
+ +

Set the pitch of the sound.

+

The pitch represents the perceived fundamental frequency of a sound; thus you can make a sound more acute or grave by changing its pitch. A side effect of changing the pitch is to modify the playing speed of the sound as well. The default value for the pitch is 1.

+
Parameters
+ + +
pitchNew pitch to apply to the sound
+
+
+
See Also
getPitch
+ +
+
+ +
+
+ + + + + + + + +
void sf::Sound::setPlayingOffset (Time timeOffset)
+
+ +

Change the current playing position of the sound.

+

The playing position can be changed when the sound is either paused or playing.

+
Parameters
+ + +
timeOffsetNew playing position, from the beginning of the sound
+
+
+
See Also
getPlayingOffset
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::SoundSource::setPosition (float x,
float y,
float z 
)
+
+inherited
+
+ +

Set the 3D position of the sound in the audio scene.

+

Only sounds with one channel (mono sounds) can be spatialized. The default position of a sound is (0, 0, 0).

+
Parameters
+ + + + +
xX coordinate of the position of the sound in the scene
yY coordinate of the position of the sound in the scene
zZ coordinate of the position of the sound in the scene
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setPosition (const Vector3fposition)
+
+inherited
+
+ +

Set the 3D position of the sound in the audio scene.

+

Only sounds with one channel (mono sounds) can be spatialized. The default position of a sound is (0, 0, 0).

+
Parameters
+ + +
positionPosition of the sound in the scene
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setRelativeToListener (bool relative)
+
+inherited
+
+ +

Make the sound's position relative to the listener or absolute.

+

Making a sound relative to the listener will ensure that it will always be played the same way regardless the position of the listener. This can be useful for non-spatialized sounds, sounds that are produced by the listener, or sounds attached to it. The default value is false (position is absolute).

+
Parameters
+ + +
relativeTrue to set the position relative, false to set it absolute
+
+
+
See Also
isRelativeToListener
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setVolume (float volume)
+
+inherited
+
+ +

Set the volume of the sound.

+

The volume is a value between 0 (mute) and 100 (full volume). The default value for the volume is 100.

+
Parameters
+ + +
volumeVolume of the sound
+
+
+
See Also
getVolume
+ +
+
+ +
+
+ + + + + + + +
void sf::Sound::stop ()
+
+ +

stop playing the sound

+

This function stops the sound if it was playing or paused, and does nothing if it was already stopped. It also resets the playing position (unlike pause()).

+
See Also
play, pause
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
unsigned int sf::SoundSource::m_source
+
+protectedinherited
+
+ +

OpenAL source identifier.

+ +

Definition at line 263 of file SoundSource.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sound.png new file mode 100644 index 0000000000000000000000000000000000000000..f15f952e962d0f4d4abb4dba4a7863584a54de2a GIT binary patch literal 487 zcmeAS@N?(olHy`uVBq!ia0vp^nLr%C!3-pIHCN{XDTx4|5ZC|z{{xvX-h3_XKQsZz z0^GEW!BkP61PbKmAQ8}PXL%dC9=|3tHy z3frU&Gq2573*W2S((V7};{PXeHg}&;QsU#9)X@>T-`#8F+FMaBPgZ<=I5piV>%DFG zW`on4z5VBJndc`P_am;>{cmsc0`D(2nw!_@w9yYMzKNuHRA&%^GlB(wiYStDyUD9 ze;I!+ZUVy@E}@1{N2U#09t>fuoCj7ZFamWktZv#;8{~D;RfT~aB)H!->X_SE%>y2r z+wUuw9xgWRXS;BH&X%+VmoDs_di!d?qjHyrp4lU)6G%12fUX;y07pvJEp>H+QdNcb6GpNl^y}UG4`D+<9 Xmx)EDJrXMi#tMU{tDnm{r-UW|atYfn literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBuffer-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBuffer-members.htm new file mode 100644 index 0000000..029e570 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBuffer-members.htm @@ -0,0 +1,70 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::SoundBuffer Member List
+
+
+ +

This is the complete list of members for sf::SoundBuffer, including all inherited members.

+ + + + + + + + + + + + + + + + +
getChannelCount() const sf::SoundBuffer
getDuration() const sf::SoundBuffer
getSampleCount() const sf::SoundBuffer
getSampleRate() const sf::SoundBuffer
getSamples() const sf::SoundBuffer
loadFromFile(const std::string &filename)sf::SoundBuffer
loadFromMemory(const void *data, std::size_t sizeInBytes)sf::SoundBuffer
loadFromSamples(const Int16 *samples, std::size_t sampleCount, unsigned int channelCount, unsigned int sampleRate)sf::SoundBuffer
loadFromStream(InputStream &stream)sf::SoundBuffer
operator=(const SoundBuffer &right)sf::SoundBuffer
saveToFile(const std::string &filename) const sf::SoundBuffer
Sound (defined in sf::SoundBuffer)sf::SoundBufferfriend
SoundBuffer()sf::SoundBuffer
SoundBuffer(const SoundBuffer &copy)sf::SoundBuffer
~SoundBuffer()sf::SoundBuffer
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBuffer.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBuffer.htm new file mode 100644 index 0000000..f7f7eee --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBuffer.htm @@ -0,0 +1,505 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::SoundBuffer Class Reference
+
+
+ +

Storage for audio samples defining a sound. + More...

+ +

#include <SoundBuffer.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SoundBuffer ()
 Default constructor. More...
 
 SoundBuffer (const SoundBuffer &copy)
 Copy constructor. More...
 
 ~SoundBuffer ()
 Destructor. More...
 
bool loadFromFile (const std::string &filename)
 Load the sound buffer from a file. More...
 
bool loadFromMemory (const void *data, std::size_t sizeInBytes)
 Load the sound buffer from a file in memory. More...
 
bool loadFromStream (InputStream &stream)
 Load the sound buffer from a custom stream. More...
 
bool loadFromSamples (const Int16 *samples, std::size_t sampleCount, unsigned int channelCount, unsigned int sampleRate)
 Load the sound buffer from an array of audio samples. More...
 
bool saveToFile (const std::string &filename) const
 Save the sound buffer to an audio file. More...
 
const Int16 * getSamples () const
 Get the array of audio samples stored in the buffer. More...
 
std::size_t getSampleCount () const
 Get the number of samples stored in the buffer. More...
 
unsigned int getSampleRate () const
 Get the sample rate of the sound. More...
 
unsigned int getChannelCount () const
 Get the number of channels used by the sound. More...
 
Time getDuration () const
 Get the total duration of the sound. More...
 
SoundBufferoperator= (const SoundBuffer &right)
 Overload of assignment operator. More...
 
+ + + +

+Friends

+class Sound
 
+

Detailed Description

+

Storage for audio samples defining a sound.

+

A sound buffer holds the data of a sound, which is an array of audio samples.

+

A sample is a 16 bits signed integer that defines the amplitude of the sound at a given time. The sound is then restituted by playing these samples at a high rate (for example, 44100 samples per second is the standard rate used for playing CDs). In short, audio samples are like texture pixels, and a sf::SoundBuffer is similar to a sf::Texture.

+

A sound buffer can be loaded from a file (see loadFromFile() for the complete list of supported formats), from memory, from a custom stream (see sf::InputStream) or directly from an array of samples. It can also be saved back to a file.

+

Sound buffers alone are not very useful: they hold the audio data but cannot be played. To do so, you need to use the sf::Sound class, which provides functions to play/pause/stop the sound as well as changing the way it is outputted (volume, pitch, 3D position, ...). This separation allows more flexibility and better performances: indeed a sf::SoundBuffer is a heavy resource, and any operation on it is slow (often too slow for real-time applications). On the other side, a sf::Sound is a lightweight object, which can use the audio data of a sound buffer and change the way it is played without actually modifying that data. Note that it is also possible to bind several sf::Sound instances to the same sf::SoundBuffer.

+

It is important to note that the sf::Sound instance doesn't copy the buffer that it uses, it only keeps a reference to it. Thus, a sf::SoundBuffer must not be destructed while it is used by a sf::Sound (i.e. never write a function that uses a local sf::SoundBuffer instance for loading a sound).

+

Usage example:

+
// Declare a new sound buffer
+ +
+
// Load it from a file
+
if (!buffer.loadFromFile("sound.wav"))
+
{
+
// error...
+
}
+
+
// Create a sound source and bind it to the buffer
+
sf::Sound sound1;
+
sound1.setBuffer(buffer);
+
+
// Play the sound
+
sound1.play();
+
+
// Create another sound source bound to the same buffer
+
sf::Sound sound2;
+
sound2.setBuffer(buffer);
+
+
// Play it with a higher pitch -- the first sound remains unchanged
+
sound2.setPitch(2);
+
sound2.play();
+
See Also
sf::Sound, sf::SoundBufferRecorder
+ +

Definition at line 52 of file SoundBuffer.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::SoundBuffer::SoundBuffer ()
+
+ +

Default constructor.

+ +
+
+ +
+
+ + + + + + + + +
sf::SoundBuffer::SoundBuffer (const SoundBuffercopy)
+
+ +

Copy constructor.

+
Parameters
+ + +
copyInstance to copy
+
+
+ +
+
+ +
+
+ + + + + + + +
sf::SoundBuffer::~SoundBuffer ()
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
unsigned int sf::SoundBuffer::getChannelCount () const
+
+ +

Get the number of channels used by the sound.

+

If the sound is mono then the number of channels will be 1, 2 for stereo, etc.

+
Returns
Number of channels
+
See Also
getSampleRate, getDuration
+ +
+
+ +
+
+ + + + + + + +
Time sf::SoundBuffer::getDuration () const
+
+ +

Get the total duration of the sound.

+
Returns
Sound duration
+
See Also
getSampleRate, getChannelCount
+ +
+
+ +
+
+ + + + + + + +
std::size_t sf::SoundBuffer::getSampleCount () const
+
+ +

Get the number of samples stored in the buffer.

+

The array of samples can be accessed with the getSamples() function.

+
Returns
Number of samples
+
See Also
getSamples
+ +
+
+ +
+
+ + + + + + + +
unsigned int sf::SoundBuffer::getSampleRate () const
+
+ +

Get the sample rate of the sound.

+

The sample rate is the number of samples played per second. The higher, the better the quality (for example, 44100 samples/s is CD quality).

+
Returns
Sample rate (number of samples per second)
+
See Also
getChannelCount, getDuration
+ +
+
+ +
+
+ + + + + + + +
const Int16* sf::SoundBuffer::getSamples () const
+
+ +

Get the array of audio samples stored in the buffer.

+

The format of the returned samples is 16 bits signed integer (sf::Int16). The total number of samples in this array is given by the getSampleCount() function.

+
Returns
Read-only pointer to the array of sound samples
+
See Also
getSampleCount
+ +
+
+ +
+
+ + + + + + + + +
bool sf::SoundBuffer::loadFromFile (const std::string & filename)
+
+ +

Load the sound buffer from a file.

+

Here is a complete list of all the supported audio formats: ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64.

+
Parameters
+ + +
filenamePath of the sound file to load
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromMemory, loadFromStream, loadFromSamples, saveToFile
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::SoundBuffer::loadFromMemory (const void * data,
std::size_t sizeInBytes 
)
+
+ +

Load the sound buffer from a file in memory.

+

Here is a complete list of all the supported audio formats: ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64.

+
Parameters
+ + + +
dataPointer to the file data in memory
sizeInBytesSize of the data to load, in bytes
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromFile, loadFromStream, loadFromSamples
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool sf::SoundBuffer::loadFromSamples (const Int16 * samples,
std::size_t sampleCount,
unsigned int channelCount,
unsigned int sampleRate 
)
+
+ +

Load the sound buffer from an array of audio samples.

+

The assumed format of the audio samples is 16 bits signed integer (sf::Int16).

+
Parameters
+ + + + + +
samplesPointer to the array of samples in memory
sampleCountNumber of samples in the array
channelCountNumber of channels (1 = mono, 2 = stereo, ...)
sampleRateSample rate (number of samples to play per second)
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromFile, loadFromMemory, saveToFile
+ +
+
+ +
+
+ + + + + + + + +
bool sf::SoundBuffer::loadFromStream (InputStreamstream)
+
+ +

Load the sound buffer from a custom stream.

+

Here is a complete list of all the supported audio formats: ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64.

+
Parameters
+ + +
streamSource stream to read from
+
+
+
Returns
True if loading succeeded, false if it failed
+
See Also
loadFromFile, loadFromMemory, loadFromSamples
+ +
+
+ +
+
+ + + + + + + + +
SoundBuffer& sf::SoundBuffer::operator= (const SoundBufferright)
+
+ +

Overload of assignment operator.

+
Parameters
+ + +
rightInstance to assign
+
+
+
Returns
Reference to self
+ +
+
+ +
+
+ + + + + + + + +
bool sf::SoundBuffer::saveToFile (const std::string & filename) const
+
+ +

Save the sound buffer to an audio file.

+

Here is a complete list of all the supported audio formats: ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64.

+
Parameters
+ + +
filenamePath of the sound file to write
+
+
+
Returns
True if saving succeeded, false if it failed
+
See Also
loadFromFile, loadFromMemory, loadFromSamples
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder-members.htm new file mode 100644 index 0000000..1d17e81 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder-members.htm @@ -0,0 +1,65 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::SoundBufferRecorder Member List
+
+
+ +

This is the complete list of members for sf::SoundBufferRecorder, including all inherited members.

+ + + + + + + + + + + +
getBuffer() const sf::SoundBufferRecorder
getSampleRate() const sf::SoundRecorder
isAvailable()sf::SoundRecorderstatic
onProcessSamples(const Int16 *samples, std::size_t sampleCount)sf::SoundBufferRecorderprotectedvirtual
onStart()sf::SoundBufferRecorderprotectedvirtual
onStop()sf::SoundBufferRecorderprotectedvirtual
SoundRecorder()sf::SoundRecorderprotected
start(unsigned int sampleRate=44100)sf::SoundRecorder
stop()sf::SoundRecorder
~SoundRecorder()sf::SoundRecordervirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder.htm new file mode 100644 index 0000000..054fea5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder.htm @@ -0,0 +1,366 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Specialized SoundRecorder which stores the captured audio data into a sound buffer. + More...

+ +

#include <SoundBufferRecorder.hpp>

+
+Inheritance diagram for sf::SoundBufferRecorder:
+
+
+ + +sf::SoundRecorder + +
+ + + + + + + + + + + + + + +

+Public Member Functions

const SoundBuffergetBuffer () const
 Get the sound buffer containing the captured audio data. More...
 
void start (unsigned int sampleRate=44100)
 Start the capture. More...
 
void stop ()
 Stop the capture. More...
 
unsigned int getSampleRate () const
 Get the sample rate. More...
 
+ + + + +

+Static Public Member Functions

static bool isAvailable ()
 Check if the system supports audio capture. More...
 
+ + + + + + + + + + +

+Protected Member Functions

virtual bool onStart ()
 Start capturing audio data. More...
 
virtual bool onProcessSamples (const Int16 *samples, std::size_t sampleCount)
 Process a new chunk of recorded samples. More...
 
virtual void onStop ()
 Stop capturing audio data. More...
 
+

Detailed Description

+

Specialized SoundRecorder which stores the captured audio data into a sound buffer.

+

sf::SoundBufferRecorder allows to access a recorded sound through a sf::SoundBuffer, so that it can be played, saved to a file, etc.

+

It has the same simple interface as its base class (start(), stop()) and adds a function to retrieve the recorded sound buffer (getBuffer()).

+

As usual, don't forget to call the isAvailable() function before using this class (see sf::SoundRecorder for more details about this).

+

Usage example:

+
+
{
+
// Record some audio data
+ +
recorder.start();
+
...
+
recorder.stop();
+
+
// Get the buffer containing the captured audio data
+
const sf::SoundBuffer& buffer = recorder.getBuffer();
+
+
// Save it to a file (for example...)
+
buffer.saveToFile("my_record.ogg");
+
}
+
See Also
sf::SoundRecorder
+ +

Definition at line 44 of file SoundBufferRecorder.hpp.

+

Member Function Documentation

+ +
+
+ + + + + + + +
const SoundBuffer& sf::SoundBufferRecorder::getBuffer () const
+
+ +

Get the sound buffer containing the captured audio data.

+

The sound buffer is valid only after the capture has ended. This function provides a read-only access to the internal sound buffer, but it can be copied if you need to make any modification to it.

+
Returns
Read-only access to the sound buffer
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
unsigned int sf::SoundRecorder::getSampleRate () const
+
+inherited
+
+ +

Get the sample rate.

+

The sample rate defines the number of audio samples captured per second. The higher, the better the quality (for example, 44100 samples/sec is CD quality).

+
Returns
Sample rate, in samples per second
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static bool sf::SoundRecorder::isAvailable ()
+
+staticinherited
+
+ +

Check if the system supports audio capture.

+

This function should always be called before using the audio capture features. If it returns false, then any attempt to use sf::SoundRecorder or one of its derived classes will fail.

+
Returns
True if audio capture is supported, false otherwise
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool sf::SoundBufferRecorder::onProcessSamples (const Int16 * samples,
std::size_t sampleCount 
)
+
+protectedvirtual
+
+ +

Process a new chunk of recorded samples.

+
Parameters
+ + + +
samplesPointer to the new chunk of recorded samples
sampleCountNumber of samples pointed by samples
+
+
+
Returns
True to continue the capture, or false to stop it
+ +

Implements sf::SoundRecorder.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool sf::SoundBufferRecorder::onStart ()
+
+protectedvirtual
+
+ +

Start capturing audio data.

+
Returns
True to start the capture, or false to abort it
+ +

Reimplemented from sf::SoundRecorder.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void sf::SoundBufferRecorder::onStop ()
+
+protectedvirtual
+
+ +

Stop capturing audio data.

+ +

Reimplemented from sf::SoundRecorder.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundRecorder::start (unsigned int sampleRate = 44100)
+
+inherited
+
+ +

Start the capture.

+

The sampleRate parameter defines the number of audio samples captured per second. The higher, the better the quality (for example, 44100 samples/sec is CD quality). This function uses its own thread so that it doesn't block the rest of the program while the capture runs. Please note that only one capture can happen at the same time.

+
Parameters
+ + +
sampleRateDesired capture rate, in number of samples per second
+
+
+
See Also
stop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::SoundRecorder::stop ()
+
+inherited
+
+ +

Stop the capture.

+
See Also
start
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundBufferRecorder.png new file mode 100644 index 0000000000000000000000000000000000000000..d5253a4bb4988f1464e8bcbc4929059a4a95ace0 GIT binary patch literal 652 zcmeAS@N?(olHy`uVBq!ia0vp^Gk`dNgBeI(TJCcSNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~Nqf3DhEy=VoqKoFY6TuQ@%hHJ|K07b z$@47C*!+E8!m}qyp+{Jz3B1ugy-COTkdo);iAj@06pyNC9$Fls8U8xUds2Gs55Aqf zmdvUz=c#YZp0Kvm{8{vy)s^+y-|EUYGn75;yX~9WA5p*d#>D4(zZaP?I-lNn!_I&1 z{=8LhE#Ks>KD}zX)azX;E1!p*(XZYeGGEWVcV?XD(&P8Mg3ccf`*mjF#Q531AKcFD zX;k@oN9@1pHqC$PhTB6Xd7Za><9}qGlyv9Jq@U}K&D!**dF`5`@B3zHztQ(g<;?*a zsr-MEil$SSXHbjCB^gHl2%`zlXki5=}MN4 ziAfBCK|BghU5qXsh7BB=Yyyf$8I+btIJAf`cT7M?{;)sdrJ3rc!2k>mu#P72X#Zx* zwG7JF+JC>yoE$repYg>{frm%d%?1X?ljueMA0_(_+jPHOU#&Z%@_F_p)0+8Nr>)cP z%IDpmXZwT0%6)t7+tm2)Y7b`Y?0Wn7`p?(%Zp=G;Z`&@N(*{Re=QO6>ayzp=6C5~< zy+?d{X9_I%a^rTL_TM!A-dj?yuPvOovDQ3E?WFkssTr%jsVDt2*y85!a-(N6D0IAD zWUtW_KJMFVI`#LKsat>CwJZwF-k<#T@au+|=Z`)Jx%On4_Wwx?O-SAh+Zg0Eb3%Pt Xq{4iI8$4@(Nr%DH)z4*}Q$iB}GJ7ot literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder-members.htm new file mode 100644 index 0000000..3597247 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder-members.htm @@ -0,0 +1,64 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::SoundRecorder Member List
+
+
+ +

This is the complete list of members for sf::SoundRecorder, including all inherited members.

+ + + + + + + + + + +
getSampleRate() const sf::SoundRecorder
isAvailable()sf::SoundRecorderstatic
onProcessSamples(const Int16 *samples, std::size_t sampleCount)=0sf::SoundRecorderprotectedpure virtual
onStart()sf::SoundRecorderprotectedvirtual
onStop()sf::SoundRecorderprotectedvirtual
SoundRecorder()sf::SoundRecorderprotected
start(unsigned int sampleRate=44100)sf::SoundRecorder
stop()sf::SoundRecorder
~SoundRecorder()sf::SoundRecordervirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder.htm new file mode 100644 index 0000000..f350c83 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder.htm @@ -0,0 +1,412 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Abstract base class for capturing sound data. + More...

+ +

#include <SoundRecorder.hpp>

+
+Inheritance diagram for sf::SoundRecorder:
+
+
+ + +sf::SoundBufferRecorder + +
+ + + + + + + + + + + + + + +

+Public Member Functions

virtual ~SoundRecorder ()
 destructor More...
 
void start (unsigned int sampleRate=44100)
 Start the capture. More...
 
void stop ()
 Stop the capture. More...
 
unsigned int getSampleRate () const
 Get the sample rate. More...
 
+ + + + +

+Static Public Member Functions

static bool isAvailable ()
 Check if the system supports audio capture. More...
 
+ + + + + + + + + + + + + +

+Protected Member Functions

 SoundRecorder ()
 Default constructor. More...
 
virtual bool onStart ()
 Start capturing audio data. More...
 
virtual bool onProcessSamples (const Int16 *samples, std::size_t sampleCount)=0
 Process a new chunk of recorded samples. More...
 
virtual void onStop ()
 Stop capturing audio data. More...
 
+

Detailed Description

+

Abstract base class for capturing sound data.

+

sf::SoundBuffer provides a simple interface to access the audio recording capabilities of the computer (the microphone).

+

As an abstract base class, it only cares about capturing sound samples, the task of making something useful with them is left to the derived class. Note that SFML provides a built-in specialization for saving the captured data to a sound buffer (see sf::SoundBufferRecorder).

+

A derived class has only one virtual function to override:

+
    +
  • onProcessSamples provides the new chunks of audio samples while the capture happens
  • +
+

Moreover, two additionnal virtual functions can be overriden as well if necessary:

+
    +
  • onStart is called before the capture happens, to perform custom initializations
  • +
  • onStop is called after the capture ends, to perform custom cleanup
  • +
+

The audio capture feature may not be supported or activated on every platform, thus it is recommended to check its availability with the isAvailable() function. If it returns false, then any attempt to use an audio recorder will fail.

+

It is important to note that the audio capture happens in a separate thread, so that it doesn't block the rest of the program. In particular, the onProcessSamples and onStop virtual functions (but not onStart) will be called from this separate thread. It is important to keep this in mind, because you may have to take care of synchronization issues if you share data between threads.

+

Usage example:

+
class CustomRecorder : public sf::SoundRecorder
+
{
+
virtual bool onStart() // optional
+
{
+
// Initialize whatever has to be done before the capture starts
+
...
+
+
// Return true to start playing
+
return true;
+
}
+
+
virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount)
+
{
+
// Do something with the new chunk of samples (store them, send them, ...)
+
...
+
+
// Return true to continue playing
+
return true;
+
}
+
+
virtual void onStop() // optional
+
{
+
// Clean up whatever has to be done after the capture ends
+
...
+
}
+
}
+
+
// Usage
+
if (CustomRecorder::isAvailable())
+
{
+
CustomRecorder recorder;
+
recorder.start();
+
...
+
recorder.stop();
+
}
+
See Also
sf::SoundBufferRecorder
+ +

Definition at line 42 of file SoundRecorder.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::SoundRecorder::~SoundRecorder ()
+
+virtual
+
+ +

destructor

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
sf::SoundRecorder::SoundRecorder ()
+
+protected
+
+ +

Default constructor.

+

This constructor is only meant to be called by derived classes.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
unsigned int sf::SoundRecorder::getSampleRate () const
+
+ +

Get the sample rate.

+

The sample rate defines the number of audio samples captured per second. The higher, the better the quality (for example, 44100 samples/sec is CD quality).

+
Returns
Sample rate, in samples per second
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static bool sf::SoundRecorder::isAvailable ()
+
+static
+
+ +

Check if the system supports audio capture.

+

This function should always be called before using the audio capture features. If it returns false, then any attempt to use sf::SoundRecorder or one of its derived classes will fail.

+
Returns
True if audio capture is supported, false otherwise
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool sf::SoundRecorder::onProcessSamples (const Int16 * samples,
std::size_t sampleCount 
)
+
+protectedpure virtual
+
+ +

Process a new chunk of recorded samples.

+

This virtual function is called every time a new chunk of recorded data is available. The derived class can then do whatever it wants with it (storing it, playing it, sending it over the network, etc.).

+
Parameters
+ + + +
samplesPointer to the new chunk of recorded samples
sampleCountNumber of samples pointed by samples
+
+
+
Returns
True to continue the capture, or false to stop it
+ +

Implemented in sf::SoundBufferRecorder.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool sf::SoundRecorder::onStart ()
+
+protectedvirtual
+
+ +

Start capturing audio data.

+

This virtual function may be overriden by a derived class if something has to be done every time a new capture starts. If not, this function can be ignored; the default implementation does nothing.

+
Returns
True to start the capture, or false to abort it
+ +

Reimplemented in sf::SoundBufferRecorder.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void sf::SoundRecorder::onStop ()
+
+protectedvirtual
+
+ +

Stop capturing audio data.

+

This virtual function may be overriden by a derived class if something has to be done every time the capture ends. If not, this function can be ignored; the default implementation does nothing.

+ +

Reimplemented in sf::SoundBufferRecorder.

+ +
+
+ +
+
+ + + + + + + + +
void sf::SoundRecorder::start (unsigned int sampleRate = 44100)
+
+ +

Start the capture.

+

The sampleRate parameter defines the number of audio samples captured per second. The higher, the better the quality (for example, 44100 samples/sec is CD quality). This function uses its own thread so that it doesn't block the rest of the program while the capture runs. Please note that only one capture can happen at the same time.

+
Parameters
+ + +
sampleRateDesired capture rate, in number of samples per second
+
+
+
See Also
stop
+ +
+
+ +
+
+ + + + + + + +
void sf::SoundRecorder::stop ()
+
+ +

Stop the capture.

+
See Also
start
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundRecorder.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b89f64f9bbe90952d88bacb5c115905970c459 GIT binary patch literal 657 zcmeAS@N?(olHy`uVBq!ia0vp^Gk`dNgBeI(TJCcSNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~DR{a#hEy=VoqKW95(OUC+0Ix0{8wM! z$EDa~b#pHJYO~VS>p2{63Cs!i(tO$(z%b9fi_yiyuz_QH(&>*GYwxjr&}qJ1$h70p z>X18~UoV!w)~XQwoprZfH2VHsl>=#c`)gO{2;MGV-ud?PomB5v0tLJNTs^VzO5shV z-1B+)(U;ehWo}%@o$xH^%<@{FtIJQvB`*`#F#aZ%@GMRH?~9ca&!3I{;B;mWcqP-RGaqm47kq76rk2+AbhniBsZZ?DH@oi3nugzqpL0sgqJ+`siNBCT ziwJYagd_&RARdK7N?~4_{45XB_b|*m5qvamefuoi(43D|%Wftg{S?A<1mq)4HUY(> z3`$ERkTp6%y$hB6BcHVO+Ar-mAfdcs(ifW`pGitfW~jJ+NLuBNje`MQ1(*pi`&G+h$ zKS_R6aPyNL%NuR;jc + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::SoundSource Member List
+
+
+ +

This is the complete list of members for sf::SoundSource, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
getAttenuation() const sf::SoundSource
getMinDistance() const sf::SoundSource
getPitch() const sf::SoundSource
getPosition() const sf::SoundSource
getStatus() const sf::SoundSourceprotected
getVolume() const sf::SoundSource
isRelativeToListener() const sf::SoundSource
m_sourcesf::SoundSourceprotected
Paused enum valuesf::SoundSource
Playing enum valuesf::SoundSource
setAttenuation(float attenuation)sf::SoundSource
setMinDistance(float distance)sf::SoundSource
setPitch(float pitch)sf::SoundSource
setPosition(float x, float y, float z)sf::SoundSource
setPosition(const Vector3f &position)sf::SoundSource
setRelativeToListener(bool relative)sf::SoundSource
setVolume(float volume)sf::SoundSource
SoundSource(const SoundSource &copy)sf::SoundSource
SoundSource()sf::SoundSourceprotected
Status enum namesf::SoundSource
Stopped enum valuesf::SoundSource
~SoundSource()sf::SoundSourcevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundSource.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundSource.htm new file mode 100644 index 0000000..00f06bf --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundSource.htm @@ -0,0 +1,632 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Base class defining a sound's properties. + More...

+ +

#include <SoundSource.hpp>

+
+Inheritance diagram for sf::SoundSource:
+
+
+ + +sf::Sound +sf::SoundStream +sf::Music + +
+ + + + + +

+Public Types

enum  Status {
+  Stopped, +
+  Paused, +
+  Playing +
+ }
 Enumeration of the sound source states. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SoundSource (const SoundSource &copy)
 Copy constructor. More...
 
virtual ~SoundSource ()
 Destructor. More...
 
void setPitch (float pitch)
 Set the pitch of the sound. More...
 
void setVolume (float volume)
 Set the volume of the sound. More...
 
void setPosition (float x, float y, float z)
 Set the 3D position of the sound in the audio scene. More...
 
void setPosition (const Vector3f &position)
 Set the 3D position of the sound in the audio scene. More...
 
void setRelativeToListener (bool relative)
 Make the sound's position relative to the listener or absolute. More...
 
void setMinDistance (float distance)
 Set the minimum distance of the sound. More...
 
void setAttenuation (float attenuation)
 Set the attenuation factor of the sound. More...
 
float getPitch () const
 Get the pitch of the sound. More...
 
float getVolume () const
 Get the volume of the sound. More...
 
Vector3f getPosition () const
 Get the 3D position of the sound in the audio scene. More...
 
bool isRelativeToListener () const
 Tell whether the sound's position is relative to the listener or is absolute. More...
 
float getMinDistance () const
 Get the minimum distance of the sound. More...
 
float getAttenuation () const
 Get the attenuation factor of the sound. More...
 
+ + + + + + + +

+Protected Member Functions

 SoundSource ()
 Default constructor. More...
 
Status getStatus () const
 Get the current status of the sound (stopped, paused, playing) More...
 
+ + + + +

+Protected Attributes

unsigned int m_source
 OpenAL source identifier. More...
 
+

Detailed Description

+

Base class defining a sound's properties.

+

sf::SoundSource is not meant to be used directly, it only serves as a common base for all audio objects that can live in the audio environment.

+

It defines several properties for the sound: pitch, volume, position, attenuation, etc. All of them can be changed at any time with no impact on performances.

+
See Also
sf::Sound, sf::SoundStream
+ +

Definition at line 41 of file SoundSource.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::SoundSource::Status
+
+ +

Enumeration of the sound source states.

+ + + + +
Enumerator
Stopped  +

Sound is not playing.

+
Paused  +

Sound is paused.

+
Playing  +

Sound is playing.

+
+ +

Definition at line 49 of file SoundSource.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
sf::SoundSource::SoundSource (const SoundSourcecopy)
+
+ +

Copy constructor.

+
Parameters
+ + +
copyInstance to copy
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::SoundSource::~SoundSource ()
+
+virtual
+
+ +

Destructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
sf::SoundSource::SoundSource ()
+
+protected
+
+ +

Default constructor.

+

This constructor is meant ot be called by derived classes only.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
float sf::SoundSource::getAttenuation () const
+
+ +

Get the attenuation factor of the sound.

+
Returns
Attenuation factor of the sound
+
See Also
setAttenuation, getMinDistance
+ +
+
+ +
+
+ + + + + + + +
float sf::SoundSource::getMinDistance () const
+
+ +

Get the minimum distance of the sound.

+
Returns
Minimum distance of the sound
+
See Also
setMinDistance, getAttenuation
+ +
+
+ +
+
+ + + + + + + +
float sf::SoundSource::getPitch () const
+
+ +

Get the pitch of the sound.

+
Returns
Pitch of the sound
+
See Also
setPitch
+ +
+
+ +
+
+ + + + + + + +
Vector3f sf::SoundSource::getPosition () const
+
+ +

Get the 3D position of the sound in the audio scene.

+
Returns
Position of the sound
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Status sf::SoundSource::getStatus () const
+
+protected
+
+ +

Get the current status of the sound (stopped, paused, playing)

+
Returns
Current status of the sound
+ +
+
+ +
+
+ + + + + + + +
float sf::SoundSource::getVolume () const
+
+ +

Get the volume of the sound.

+
Returns
Volume of the sound, in the range [0, 100]
+
See Also
setVolume
+ +
+
+ +
+
+ + + + + + + +
bool sf::SoundSource::isRelativeToListener () const
+
+ +

Tell whether the sound's position is relative to the listener or is absolute.

+
Returns
True if the position is relative, false if it's absolute
+
See Also
setRelativeToListener
+ +
+
+ +
+
+ + + + + + + + +
void sf::SoundSource::setAttenuation (float attenuation)
+
+ +

Set the attenuation factor of the sound.

+

The attenuation is a multiplicative factor which makes the sound more or less loud according to its distance from the listener. An attenuation of 0 will produce a non-attenuated sound, i.e. its volume will always be the same whether it is heard from near or from far. On the other hand, an attenuation value such as 100 will make the sound fade out very quickly as it gets further from the listener. The default value of the attenuation is 1.

+
Parameters
+ + +
attenuationNew attenuation factor of the sound
+
+
+
See Also
getAttenuation, setMinDistance
+ +
+
+ +
+
+ + + + + + + + +
void sf::SoundSource::setMinDistance (float distance)
+
+ +

Set the minimum distance of the sound.

+

The "minimum distance" of a sound is the maximum distance at which it is heard at its maximum volume. Further than the minimum distance, it will start to fade out according to its attenuation factor. A value of 0 ("inside the head +of the listener") is an invalid value and is forbidden. The default value of the minimum distance is 1.

+
Parameters
+ + +
distanceNew minimum distance of the sound
+
+
+
See Also
getMinDistance, setAttenuation
+ +
+
+ +
+
+ + + + + + + + +
void sf::SoundSource::setPitch (float pitch)
+
+ +

Set the pitch of the sound.

+

The pitch represents the perceived fundamental frequency of a sound; thus you can make a sound more acute or grave by changing its pitch. A side effect of changing the pitch is to modify the playing speed of the sound as well. The default value for the pitch is 1.

+
Parameters
+ + +
pitchNew pitch to apply to the sound
+
+
+
See Also
getPitch
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::SoundSource::setPosition (float x,
float y,
float z 
)
+
+ +

Set the 3D position of the sound in the audio scene.

+

Only sounds with one channel (mono sounds) can be spatialized. The default position of a sound is (0, 0, 0).

+
Parameters
+ + + + +
xX coordinate of the position of the sound in the scene
yY coordinate of the position of the sound in the scene
zZ coordinate of the position of the sound in the scene
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + + + + +
void sf::SoundSource::setPosition (const Vector3fposition)
+
+ +

Set the 3D position of the sound in the audio scene.

+

Only sounds with one channel (mono sounds) can be spatialized. The default position of a sound is (0, 0, 0).

+
Parameters
+ + +
positionPosition of the sound in the scene
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + + + + +
void sf::SoundSource::setRelativeToListener (bool relative)
+
+ +

Make the sound's position relative to the listener or absolute.

+

Making a sound relative to the listener will ensure that it will always be played the same way regardless the position of the listener. This can be useful for non-spatialized sounds, sounds that are produced by the listener, or sounds attached to it. The default value is false (position is absolute).

+
Parameters
+ + +
relativeTrue to set the position relative, false to set it absolute
+
+
+
See Also
isRelativeToListener
+ +
+
+ +
+
+ + + + + + + + +
void sf::SoundSource::setVolume (float volume)
+
+ +

Set the volume of the sound.

+

The volume is a value between 0 (mute) and 100 (full volume). The default value for the volume is 100.

+
Parameters
+ + +
volumeVolume of the sound
+
+
+
See Also
getVolume
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
unsigned int sf::SoundSource::m_source
+
+protected
+
+ +

OpenAL source identifier.

+ +

Definition at line 263 of file SoundSource.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundSource.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundSource.png new file mode 100644 index 0000000000000000000000000000000000000000..0adefcd1266110ee976903b33a4da07ba99c364e GIT binary patch literal 928 zcmeAS@N?(olHy`uVBq!ia0vp^cYwHqgBeKfo?QwOkO=SzasB`QKalz2&DYZYLlb~3 zFg|eL0Bh$Rc_5dgB*-tA0jLNBuAT}pVqjp__jGX#sbG9N_wA+C3OsDn)s64{SDhba z@349s*ZMAXbU+~;k)2vw%*vIa_gtOer9FW!#T_D zWq3l4?r|Q+my2INwJR#wl*%1{+OT-B^ogUHb@Nv9?p(TjWuT6wxcHPWBE3hGyz?y6 zQg^>Ae0J^0GWX0Kzk57c^QTWscAR--cZB@!SsSG;Ti;(9#q>v0k3B$WI`fGmPZ_*` zE}XeT#=+BxB_AvD}<*ruMkAw9TS#i&f3gq z(aLRh;3>nVLd%9Cpb=(3Q~7|V9(&4g>R}PXO`wov44=a6tS4vAe7iJb=G&)TioTQl z6sAsIB3xkUdFt3xm6bC8_r`E+6umvkB>nZ%U3d2V`#t0Aj{8rOfPoaYzWvF!ul7ft zoZgx}MJH|7p~F_&!o@%Sx}#mb;J@87*^9Ok_sSlw{Jtzk+@jA=E#TLZ`44YQTH-49 zgzxM8V`u8_>N>*T{5MgPHPbtEKGSmk$6G7dpYVO3e`niQ z)oU|ti#9KwE%!{Ri2c|6qbj?XEvR^FS)ASMzxm&fnZNh`SKXO;;oTM){+g&+lYU*5 ze}6c0=i>i{yzCc$Oji7Jean<3Mr;0edS9CVplH&R-qW5zmN9;lfWhLab^P+vGiS~z zOf)vOW^RzmV3>Dm^3z$*4wm^(tKMmQ{oTc)I9UbH`L( zvc&K$P|;KO1V>`s1n$I)Gy9G+c>X%%`}EP3>eGQ?lj@$<6|Hsa(Cdu3T_r4i`_%Ty zuT_4%+`oREZS{;h-j|HZr_5gVbW+T%2}?xZ&73B@^J31tX`-jjKHIA>ec4i#wMCDO z#V?y!<~Vw-KXoo9h + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::SoundStream Member List
+
+
+ +

This is the complete list of members for sf::SoundStream, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getAttenuation() const sf::SoundSource
getChannelCount() const sf::SoundStream
getLoop() const sf::SoundStream
getMinDistance() const sf::SoundSource
getPitch() const sf::SoundSource
getPlayingOffset() const sf::SoundStream
getPosition() const sf::SoundSource
getSampleRate() const sf::SoundStream
getStatus() const sf::SoundStream
getVolume() const sf::SoundSource
initialize(unsigned int channelCount, unsigned int sampleRate)sf::SoundStreamprotected
isRelativeToListener() const sf::SoundSource
m_sourcesf::SoundSourceprotected
onGetData(Chunk &data)=0sf::SoundStreamprotectedpure virtual
onSeek(Time timeOffset)=0sf::SoundStreamprotectedpure virtual
pause()sf::SoundStream
Paused enum valuesf::SoundSource
play()sf::SoundStream
Playing enum valuesf::SoundSource
setAttenuation(float attenuation)sf::SoundSource
setLoop(bool loop)sf::SoundStream
setMinDistance(float distance)sf::SoundSource
setPitch(float pitch)sf::SoundSource
setPlayingOffset(Time timeOffset)sf::SoundStream
setPosition(float x, float y, float z)sf::SoundSource
setPosition(const Vector3f &position)sf::SoundSource
setRelativeToListener(bool relative)sf::SoundSource
setVolume(float volume)sf::SoundSource
SoundSource(const SoundSource &copy)sf::SoundSource
SoundSource()sf::SoundSourceprotected
SoundStream()sf::SoundStreamprotected
Status enum namesf::SoundSource
stop()sf::SoundStream
Stopped enum valuesf::SoundSource
~SoundSource()sf::SoundSourcevirtual
~SoundStream()sf::SoundStreamvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundStream.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundStream.htm new file mode 100644 index 0000000..ac0acb5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundStream.htm @@ -0,0 +1,1098 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Abstract base class for streamed audio sources. + More...

+ +

#include <SoundStream.hpp>

+
+Inheritance diagram for sf::SoundStream:
+
+
+ + +sf::SoundSource +sf::Music + +
+ + + + + +

+Classes

struct  Chunk
 Structure defining a chunk of audio data to stream. More...
 
+ + + + +

+Public Types

enum  Status {
+  Stopped, +
+  Paused, +
+  Playing +
+ }
 Enumeration of the sound source states. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~SoundStream ()
 Destructor. More...
 
void play ()
 Start or resume playing the audio stream. More...
 
void pause ()
 Pause the audio stream. More...
 
void stop ()
 Stop playing the audio stream. More...
 
unsigned int getChannelCount () const
 Return the number of channels of the stream. More...
 
unsigned int getSampleRate () const
 Get the stream sample rate of the stream. More...
 
Status getStatus () const
 Get the current status of the stream (stopped, paused, playing) More...
 
void setPlayingOffset (Time timeOffset)
 Change the current playing position of the stream. More...
 
Time getPlayingOffset () const
 Get the current playing position of the stream. More...
 
void setLoop (bool loop)
 Set whether or not the stream should loop after reaching the end. More...
 
bool getLoop () const
 Tell whether or not the stream is in loop mode. More...
 
void setPitch (float pitch)
 Set the pitch of the sound. More...
 
void setVolume (float volume)
 Set the volume of the sound. More...
 
void setPosition (float x, float y, float z)
 Set the 3D position of the sound in the audio scene. More...
 
void setPosition (const Vector3f &position)
 Set the 3D position of the sound in the audio scene. More...
 
void setRelativeToListener (bool relative)
 Make the sound's position relative to the listener or absolute. More...
 
void setMinDistance (float distance)
 Set the minimum distance of the sound. More...
 
void setAttenuation (float attenuation)
 Set the attenuation factor of the sound. More...
 
float getPitch () const
 Get the pitch of the sound. More...
 
float getVolume () const
 Get the volume of the sound. More...
 
Vector3f getPosition () const
 Get the 3D position of the sound in the audio scene. More...
 
bool isRelativeToListener () const
 Tell whether the sound's position is relative to the listener or is absolute. More...
 
float getMinDistance () const
 Get the minimum distance of the sound. More...
 
float getAttenuation () const
 Get the attenuation factor of the sound. More...
 
+ + + + + + + + + + + + + +

+Protected Member Functions

 SoundStream ()
 Default constructor. More...
 
void initialize (unsigned int channelCount, unsigned int sampleRate)
 Define the audio stream parameters. More...
 
virtual bool onGetData (Chunk &data)=0
 Request a new chunk of audio samples from the stream source. More...
 
virtual void onSeek (Time timeOffset)=0
 Change the current playing position in the stream source. More...
 
+ + + + +

+Protected Attributes

unsigned int m_source
 OpenAL source identifier. More...
 
+

Detailed Description

+

Abstract base class for streamed audio sources.

+

Unlike audio buffers (see sf::SoundBuffer), audio streams are never completely loaded in memory.

+

Instead, the audio data is acquired continuously while the stream is playing. This behaviour allows to play a sound with no loading delay, and keeps the memory consumption very low.

+

Sound sources that need to be streamed are usually big files (compressed audio musics that would eat hundreds of MB in memory) or files that would take a lot of time to be received (sounds played over the network).

+

sf::SoundStream is a base class that doesn't care about the stream source, which is left to the derived class. SFML provides a built-in specialization for big files (see sf::Music). No network stream source is provided, but you can write your own by combining this class with the network module.

+

A derived class has to override two virtual functions:

+
    +
  • onGetData fills a new chunk of audio data to be played
  • +
  • onSeek changes the current playing position in the source
  • +
+

It is important to note that each SoundStream is played in its own separate thread, so that the streaming loop doesn't block the rest of the program. In particular, the OnGetData and OnSeek virtual functions may sometimes be called from this separate thread. It is important to keep this in mind, because you may have to take care of synchronization issues if you share data between threads.

+

Usage example:

+
class CustomStream : public sf::SoundStream
+
{
+
public :
+
+
bool open(const std::string& location)
+
{
+
// Open the source and get audio settings
+
...
+
unsigned int channelCount = ...;
+
unsigned int sampleRate = ...;
+
+
// Initialize the stream -- important!
+
initialize(channelCount, sampleRate);
+
}
+
+
private :
+
+
virtual bool onGetData(Chunk& data)
+
{
+
// Fill the chunk with audio data from the stream source
+
data.samples = ...;
+
data.sampleCount = ...;
+
+
// Return true to continue playing
+
return true;
+
}
+
+
virtual void onSeek(Uint32 timeOffset)
+
{
+
// Change the current position in the stream source
+
...
+
}
+
}
+
+
// Usage
+
CustomStream stream;
+
stream.open("path/to/stream");
+
stream.play();
+
See Also
sf::Music
+ +

Definition at line 44 of file SoundStream.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum sf::SoundSource::Status
+
+inherited
+
+ +

Enumeration of the sound source states.

+ + + + +
Enumerator
Stopped  +

Sound is not playing.

+
Paused  +

Sound is paused.

+
Playing  +

Sound is playing.

+
+ +

Definition at line 49 of file SoundSource.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::SoundStream::~SoundStream ()
+
+virtual
+
+ +

Destructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
sf::SoundStream::SoundStream ()
+
+protected
+
+ +

Default constructor.

+

This constructor is only meant to be called by derived classes.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getAttenuation () const
+
+inherited
+
+ +

Get the attenuation factor of the sound.

+
Returns
Attenuation factor of the sound
+
See Also
setAttenuation, getMinDistance
+ +
+
+ +
+
+ + + + + + + +
unsigned int sf::SoundStream::getChannelCount () const
+
+ +

Return the number of channels of the stream.

+

1 channel means a mono sound, 2 means stereo, etc.

+
Returns
Number of channels
+ +
+
+ +
+
+ + + + + + + +
bool sf::SoundStream::getLoop () const
+
+ +

Tell whether or not the stream is in loop mode.

+
Returns
True if the stream is looping, false otherwise
+
See Also
setLoop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getMinDistance () const
+
+inherited
+
+ +

Get the minimum distance of the sound.

+
Returns
Minimum distance of the sound
+
See Also
setMinDistance, getAttenuation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getPitch () const
+
+inherited
+
+ +

Get the pitch of the sound.

+
Returns
Pitch of the sound
+
See Also
setPitch
+ +
+
+ +
+
+ + + + + + + +
Time sf::SoundStream::getPlayingOffset () const
+
+ +

Get the current playing position of the stream.

+
Returns
Current playing position, from the beginning of the stream
+
See Also
setPlayingOffset
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Vector3f sf::SoundSource::getPosition () const
+
+inherited
+
+ +

Get the 3D position of the sound in the audio scene.

+
Returns
Position of the sound
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + + + +
unsigned int sf::SoundStream::getSampleRate () const
+
+ +

Get the stream sample rate of the stream.

+

The sample rate is the number of audio samples played per second. The higher, the better the quality.

+
Returns
Sample rate, in number of samples per second
+ +
+
+ +
+
+ + + + + + + +
Status sf::SoundStream::getStatus () const
+
+ +

Get the current status of the stream (stopped, paused, playing)

+
Returns
Current status
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::SoundSource::getVolume () const
+
+inherited
+
+ +

Get the volume of the sound.

+
Returns
Volume of the sound, in the range [0, 100]
+
See Also
setVolume
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::SoundStream::initialize (unsigned int channelCount,
unsigned int sampleRate 
)
+
+protected
+
+ +

Define the audio stream parameters.

+

This function must be called by derived classes as soon as they know the audio settings of the stream to play. Any attempt to manipulate the stream (play(), ...) before calling this function will fail. It can be called multiple times if the settings of the audio stream change, but only when the stream is stopped.

+
Parameters
+ + + +
channelCountNumber of channels of the stream
sampleRateSample rate, in samples per second
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::SoundSource::isRelativeToListener () const
+
+inherited
+
+ +

Tell whether the sound's position is relative to the listener or is absolute.

+
Returns
True if the position is relative, false if it's absolute
+
See Also
setRelativeToListener
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool sf::SoundStream::onGetData (Chunkdata)
+
+protectedpure virtual
+
+ +

Request a new chunk of audio samples from the stream source.

+

This function must be overriden by derived classes to provide the audio samples to play. It is called continuously by the streaming loop, in a separate thread. The source can choose to stop the streaming loop at any time, by returning false to the caller.

+
Parameters
+ + +
dataChunk of data to fill
+
+
+
Returns
True to continue playback, false to stop
+ +

Implemented in sf::Music.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void sf::SoundStream::onSeek (Time timeOffset)
+
+protectedpure virtual
+
+ +

Change the current playing position in the stream source.

+

This function must be overriden by derived classes to allow random seeking into the stream source.

+
Parameters
+ + +
timeOffsetNew playing position, relative to the beginning of the stream
+
+
+ +

Implemented in sf::Music.

+ +
+
+ +
+
+ + + + + + + +
void sf::SoundStream::pause ()
+
+ +

Pause the audio stream.

+

This function pauses the stream if it was playing, otherwise (stream already paused or stopped) it has no effect.

+
See Also
play, stop
+ +
+
+ +
+
+ + + + + + + +
void sf::SoundStream::play ()
+
+ +

Start or resume playing the audio stream.

+

This function starts the stream if it was stopped, resumes it if it was paused, and restarts it from beginning if it was it already playing. This function uses its own thread so that it doesn't block the rest of the program while the stream is played.

+
See Also
pause, stop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setAttenuation (float attenuation)
+
+inherited
+
+ +

Set the attenuation factor of the sound.

+

The attenuation is a multiplicative factor which makes the sound more or less loud according to its distance from the listener. An attenuation of 0 will produce a non-attenuated sound, i.e. its volume will always be the same whether it is heard from near or from far. On the other hand, an attenuation value such as 100 will make the sound fade out very quickly as it gets further from the listener. The default value of the attenuation is 1.

+
Parameters
+ + +
attenuationNew attenuation factor of the sound
+
+
+
See Also
getAttenuation, setMinDistance
+ +
+
+ +
+
+ + + + + + + + +
void sf::SoundStream::setLoop (bool loop)
+
+ +

Set whether or not the stream should loop after reaching the end.

+

If set, the stream will restart from beginning after reaching the end and so on, until it is stopped or setLoop(false) is called. The default looping state for streams is false.

+
Parameters
+ + +
loopTrue to play in loop, false to play once
+
+
+
See Also
getLoop
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setMinDistance (float distance)
+
+inherited
+
+ +

Set the minimum distance of the sound.

+

The "minimum distance" of a sound is the maximum distance at which it is heard at its maximum volume. Further than the minimum distance, it will start to fade out according to its attenuation factor. A value of 0 ("inside the head +of the listener") is an invalid value and is forbidden. The default value of the minimum distance is 1.

+
Parameters
+ + +
distanceNew minimum distance of the sound
+
+
+
See Also
getMinDistance, setAttenuation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setPitch (float pitch)
+
+inherited
+
+ +

Set the pitch of the sound.

+

The pitch represents the perceived fundamental frequency of a sound; thus you can make a sound more acute or grave by changing its pitch. A side effect of changing the pitch is to modify the playing speed of the sound as well. The default value for the pitch is 1.

+
Parameters
+ + +
pitchNew pitch to apply to the sound
+
+
+
See Also
getPitch
+ +
+
+ +
+
+ + + + + + + + +
void sf::SoundStream::setPlayingOffset (Time timeOffset)
+
+ +

Change the current playing position of the stream.

+

The playing position can be changed when the stream is either paused or playing.

+
Parameters
+ + +
timeOffsetNew playing position, from the beginning of the stream
+
+
+
See Also
getPlayingOffset
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::SoundSource::setPosition (float x,
float y,
float z 
)
+
+inherited
+
+ +

Set the 3D position of the sound in the audio scene.

+

Only sounds with one channel (mono sounds) can be spatialized. The default position of a sound is (0, 0, 0).

+
Parameters
+ + + + +
xX coordinate of the position of the sound in the scene
yY coordinate of the position of the sound in the scene
zZ coordinate of the position of the sound in the scene
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setPosition (const Vector3fposition)
+
+inherited
+
+ +

Set the 3D position of the sound in the audio scene.

+

Only sounds with one channel (mono sounds) can be spatialized. The default position of a sound is (0, 0, 0).

+
Parameters
+ + +
positionPosition of the sound in the scene
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setRelativeToListener (bool relative)
+
+inherited
+
+ +

Make the sound's position relative to the listener or absolute.

+

Making a sound relative to the listener will ensure that it will always be played the same way regardless the position of the listener. This can be useful for non-spatialized sounds, sounds that are produced by the listener, or sounds attached to it. The default value is false (position is absolute).

+
Parameters
+ + +
relativeTrue to set the position relative, false to set it absolute
+
+
+
See Also
isRelativeToListener
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::SoundSource::setVolume (float volume)
+
+inherited
+
+ +

Set the volume of the sound.

+

The volume is a value between 0 (mute) and 100 (full volume). The default value for the volume is 100.

+
Parameters
+ + +
volumeVolume of the sound
+
+
+
See Also
getVolume
+ +
+
+ +
+
+ + + + + + + +
void sf::SoundStream::stop ()
+
+ +

Stop playing the audio stream.

+

This function stops the stream if it was playing or paused, and does nothing if it was already stopped. It also resets the playing position (unlike pause()).

+
See Also
play, pause
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
unsigned int sf::SoundSource::m_source
+
+protectedinherited
+
+ +

OpenAL source identifier.

+ +

Definition at line 263 of file SoundSource.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundStream.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1SoundStream.png new file mode 100644 index 0000000000000000000000000000000000000000..6e10d2559d94400f26b0110860efbc9e56ecaca1 GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0vp^nLymZ!3-oXyO`<&DTx4|5ZC|z{{xvX-h3_XKQsZz z0^&*$mx+LGyM zwcjN!o9C`J_TEzMZGB^%a?;y8HRhzGcR2?g8SzBZG);idJ+1<-uEn{cC`m}ucb&2fV>*L;a ztg80fKDWJ2vRLoIrtc~*-3uqH^gdGaluBKtc}yam;e#Rf0g+`hr=?EInw2T)8+6wA z@5y_`!UqiUm?Vz+GA!P~nIK}$*z-uOA@B~1LD%d{{v3)vjSL2iK*3Ml%eK1v1T)2K z+-sA3FETe<%m4Qay`#VMj@D${3QOOX_iw%`JbRsNYPR2S>(f={mv@>Prpec6c84jcSiovZ=_<%;9m%ZV!ADZ4hhIL$llhhsn zL+Po#aq9%Ov$pIWmzdwr@R}Dq^X#NAdi=|D(=|GKGo{~7Ik@-#y^<80;=~XPQnyQ(7>s9U5D=IH%On{S8q1Ct+vr>mdKI;Vst0HZQZ5&!@I literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite-members.htm new file mode 100644 index 0000000..7d04758 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite-members.htm @@ -0,0 +1,87 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Sprite Member List
+
+
+ +

This is the complete list of members for sf::Sprite, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getColor() const sf::Sprite
getGlobalBounds() const sf::Sprite
getInverseTransform() const sf::Transformable
getLocalBounds() const sf::Sprite
getOrigin() const sf::Transformable
getPosition() const sf::Transformable
getRotation() const sf::Transformable
getScale() const sf::Transformable
getTexture() const sf::Sprite
getTextureRect() const sf::Sprite
getTransform() const sf::Transformable
move(float offsetX, float offsetY)sf::Transformable
move(const Vector2f &offset)sf::Transformable
rotate(float angle)sf::Transformable
scale(float factorX, float factorY)sf::Transformable
scale(const Vector2f &factor)sf::Transformable
setColor(const Color &color)sf::Sprite
setOrigin(float x, float y)sf::Transformable
setOrigin(const Vector2f &origin)sf::Transformable
setPosition(float x, float y)sf::Transformable
setPosition(const Vector2f &position)sf::Transformable
setRotation(float angle)sf::Transformable
setScale(float factorX, float factorY)sf::Transformable
setScale(const Vector2f &factors)sf::Transformable
setTexture(const Texture &texture, bool resetRect=false)sf::Sprite
setTextureRect(const IntRect &rectangle)sf::Sprite
Sprite()sf::Sprite
Sprite(const Texture &texture)sf::Spriteexplicit
Sprite(const Texture &texture, const IntRect &rectangle)sf::Sprite
Transformable()sf::Transformable
~Drawable()sf::Drawableinlinevirtual
~Transformable()sf::Transformablevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite.htm new file mode 100644 index 0000000..a6414ac --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite.htm @@ -0,0 +1,1095 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Sprite Class Reference
+
+
+ +

Drawable representation of a texture, with its own transformations, color, etc. + More...

+ +

#include <Sprite.hpp>

+
+Inheritance diagram for sf::Sprite:
+
+
+ + +sf::Drawable +sf::Transformable + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Sprite ()
 Default constructor. More...
 
 Sprite (const Texture &texture)
 Construct the sprite from a source texture. More...
 
 Sprite (const Texture &texture, const IntRect &rectangle)
 Construct the sprite from a sub-rectangle of a source texture. More...
 
void setTexture (const Texture &texture, bool resetRect=false)
 Change the source texture of the sprite. More...
 
void setTextureRect (const IntRect &rectangle)
 Set the sub-rectangle of the texture that the sprite will display. More...
 
void setColor (const Color &color)
 Set the global color of the sprite. More...
 
const TexturegetTexture () const
 Get the source texture of the sprite. More...
 
const IntRectgetTextureRect () const
 Get the sub-rectangle of the texture displayed by the sprite. More...
 
const ColorgetColor () const
 Get the global color of the sprite. More...
 
FloatRect getLocalBounds () const
 Get the local bounding rectangle of the entity. More...
 
FloatRect getGlobalBounds () const
 Get the global bounding rectangle of the entity. More...
 
void setPosition (float x, float y)
 set the position of the object More...
 
void setPosition (const Vector2f &position)
 set the position of the object More...
 
void setRotation (float angle)
 set the orientation of the object More...
 
void setScale (float factorX, float factorY)
 set the scale factors of the object More...
 
void setScale (const Vector2f &factors)
 set the scale factors of the object More...
 
void setOrigin (float x, float y)
 set the local origin of the object More...
 
void setOrigin (const Vector2f &origin)
 set the local origin of the object More...
 
const Vector2fgetPosition () const
 get the position of the object More...
 
float getRotation () const
 get the orientation of the object More...
 
const Vector2fgetScale () const
 get the current scale of the object More...
 
const Vector2fgetOrigin () const
 get the local origin of the object More...
 
void move (float offsetX, float offsetY)
 Move the object by a given offset. More...
 
void move (const Vector2f &offset)
 Move the object by a given offset. More...
 
void rotate (float angle)
 Rotate the object. More...
 
void scale (float factorX, float factorY)
 Scale the object. More...
 
void scale (const Vector2f &factor)
 Scale the object. More...
 
const TransformgetTransform () const
 get the combined transform of the object More...
 
const TransformgetInverseTransform () const
 get the inverse of the combined transform of the object More...
 
+

Detailed Description

+

Drawable representation of a texture, with its own transformations, color, etc.

+

sf::Sprite is a drawable class that allows to easily display a texture (or a part of it) on a render target.

+

It inherits all the functions from sf::Transformable: position, rotation, scale, origin. It also adds sprite-specific properties such as the texture to use, the part of it to display, and some convenience functions to change the overall color of the sprite, or to get its bounding rectangle.

+

sf::Sprite works in combination with the sf::Texture class, which loads and provides the pixel data of a given texture.

+

The separation of sf::Sprite and sf::Texture allows more flexibility and better performances: indeed a sf::Texture is a heavy resource, and any operation on it is slow (often too slow for real-time applications). On the other side, a sf::Sprite is a lightweight object which can use the pixel data of a sf::Texture and draw it with its own transformation/color/blending attributes.

+

It is important to note that the sf::Sprite instance doesn't copy the texture that it uses, it only keeps a reference to it. Thus, a sf::Texture must not be destroyed while it is used by a sf::Sprite (i.e. never write a function that uses a local sf::Texture instance for creating a sprite).

+

Usage example:

+
// Declare and load a texture
+
sf::Texture texture;
+
texture.loadFromFile("texture.png");
+
+
// Create a sprite
+
sf::Sprite sprite;
+
sprite.setTexture(texture);
+
sprite.setTextureRect(sf::IntRect(10, 10, 50, 30));
+
sprite.setColor(sf::Color(255, 255, 255, 200));
+
sprite.setPosition(100, 25);
+
+
// Draw it
+
window.draw(sprite);
+
See Also
sf::Texture, sf::Transformable
+ +

Definition at line 47 of file Sprite.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Sprite::Sprite ()
+
+ +

Default constructor.

+

Creates an empty sprite with no source texture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
sf::Sprite::Sprite (const Texturetexture)
+
+explicit
+
+ +

Construct the sprite from a source texture.

+
Parameters
+ + +
textureSource texture
+
+
+
See Also
setTexture
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
sf::Sprite::Sprite (const Texturetexture,
const IntRectrectangle 
)
+
+ +

Construct the sprite from a sub-rectangle of a source texture.

+
Parameters
+ + + +
textureSource texture
rectangleSub-rectangle of the texture to assign to the sprite
+
+
+
See Also
setTexture, setTextureRect
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
const Color& sf::Sprite::getColor () const
+
+ +

Get the global color of the sprite.

+
Returns
Global color of the sprite
+
See Also
setColor
+ +
+
+ +
+
+ + + + + + + +
FloatRect sf::Sprite::getGlobalBounds () const
+
+ +

Get the global bounding rectangle of the entity.

+

The returned rectangle is in global coordinates, which means that it takes in account the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the sprite in the global 2D world's coordinate system.

+
Returns
Global bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getInverseTransform () const
+
+inherited
+
+ +

get the inverse of the combined transform of the object

+
Returns
Inverse of the combined transformations applied to the object
+
See Also
getTransform
+ +
+
+ +
+
+ + + + + + + +
FloatRect sf::Sprite::getLocalBounds () const
+
+ +

Get the local bounding rectangle of the entity.

+

The returned rectangle is in local coordinates, which means that it ignores the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the entity in the entity's coordinate system.

+
Returns
Local bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getOrigin () const
+
+inherited
+
+ +

get the local origin of the object

+
Returns
Current origin
+
See Also
setOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getPosition () const
+
+inherited
+
+ +

get the position of the object

+
Returns
Current position
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::Transformable::getRotation () const
+
+inherited
+
+ +

get the orientation of the object

+

The rotation is always in the range [0, 360].

+
Returns
Current rotation, in degrees
+
See Also
setRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getScale () const
+
+inherited
+
+ +

get the current scale of the object

+
Returns
Current scale factors
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + +
const Texture* sf::Sprite::getTexture () const
+
+ +

Get the source texture of the sprite.

+

If the sprite has no source texture, a NULL pointer is returned. The returned pointer is const, which means that you can't modify the texture when you retrieve it with this function.

+
Returns
Pointer to the sprite's texture
+
See Also
setTexture
+ +
+
+ +
+
+ + + + + + + +
const IntRect& sf::Sprite::getTextureRect () const
+
+ +

Get the sub-rectangle of the texture displayed by the sprite.

+
Returns
Texture rectangle of the sprite
+
See Also
setTextureRect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getTransform () const
+
+inherited
+
+ +

get the combined transform of the object

+
Returns
Transform combining the position/rotation/scale/origin of the object
+
See Also
getInverseTransform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::move (float offsetX,
float offsetY 
)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f pos = object.getPosition();
+
object.setPosition(pos.x + offsetX, pos.y + offsetY);
+
Parameters
+ + + +
offsetXX offset
offsetYY offset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::move (const Vector2foffset)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
object.setPosition(object.getPosition() + offset);
+
Parameters
+ + +
offsetOffset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::rotate (float angle)
+
+inherited
+
+ +

Rotate the object.

+

This function adds to the current rotation of the object, unlike setRotation which overwrites it. Thus, it is equivalent to the following code:

+
object.setRotation(object.getRotation() + angle);
+
Parameters
+ + +
angleAngle of rotation, in degrees
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::scale (float factorX,
float factorY 
)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factorX, scale.y * factorY);
+
Parameters
+ + + +
factorXHorizontal scale factor
factorYVertical scale factor
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::scale (const Vector2ffactor)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factor.x, scale.y * factor.y);
+
Parameters
+ + +
factorScale factors
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + + +
void sf::Sprite::setColor (const Colorcolor)
+
+ +

Set the global color of the sprite.

+

This color is modulated (multiplied) with the sprite's texture. It can be used to colorize the sprite, or change its global opacity. By default, the sprite's color is opaque white.

+
Parameters
+ + +
colorNew color of the sprite
+
+
+
See Also
getColor
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setOrigin (float x,
float y 
)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new origin
yY coordinate of the new origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setOrigin (const Vector2forigin)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + +
originNew origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setPosition (float x,
float y 
)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new position
yY coordinate of the new position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setPosition (const Vector2fposition)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + +
positionNew position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setRotation (float angle)
+
+inherited
+
+ +

set the orientation of the object

+

This function completely overwrites the previous rotation. See the rotate function to add an angle based on the previous rotation instead. The default rotation of a transformable object is 0.

+
Parameters
+ + +
angleNew rotation, in degrees
+
+
+
See Also
rotate, getRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setScale (float factorX,
float factorY 
)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + + +
factorXNew horizontal scale factor
factorYNew vertical scale factor
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setScale (const Vector2ffactors)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + +
factorsNew scale factors
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Sprite::setTexture (const Texturetexture,
bool resetRect = false 
)
+
+ +

Change the source texture of the sprite.

+

The texture argument refers to a texture that must exist as long as the sprite uses it. Indeed, the sprite doesn't store its own copy of the texture, but rather keeps a pointer to the one that you passed to this function. If the source texture is destroyed and the sprite tries to use it, the behaviour is undefined. If resetRect is true, the TextureRect property of the sprite is automatically adjusted to the size of the new texture. If it is false, the texture rect is left unchanged.

+
Parameters
+ + + +
textureNew texture
resetRectShould the texture rect be reset to the size of the new texture?
+
+
+
See Also
getTexture, setTextureRect
+ +
+
+ +
+
+ + + + + + + + +
void sf::Sprite::setTextureRect (const IntRectrectangle)
+
+ +

Set the sub-rectangle of the texture that the sprite will display.

+

The texture rect is useful when you don't want to display the whole texture, but rather a part of it. By default, the texture rect covers the entire texture.

+
Parameters
+ + +
rectangleRectangle defining the region of the texture to display
+
+
+
See Also
getTextureRect, setTexture
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..c4407dabfd1239e3561a6de662796cee0d71aea4 GIT binary patch literal 734 zcmV<40wMj0P)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0007QNkl4t3oEZ zosW{6YB5oga`uvCrY%=;)=B9*5`LWD_26|AP04+^W_!=pid%d|vRbZrp5j91Jl@1X zxwa)kZ%Eck>o*ityc7q zmTOs2txY_7Cd=;XBsKWsGxlWo2yK7Od ztxX*LPfF6cwEib0sUs#SNvC3xlGF#2l%!KJNlEI%uSk0D{U{Pi@4X)dzza+O;~AUw z7bK_YEtX@`{(|H!**h%9ru_*?>#hL3FiC(@F-d?vm?Xfdm?S_SOcLN!enWDars)j; zd;?#zQGi!5Nq{S0k^oo0Bmu5~NdjB}lLWW|CJAr_OcLO;aL&150K9{diA@rq7bXdC zA|?sYi{}!@##m{Rx9?A`0`Lx=N*sfh(SFXCOV0N#xq0ir-EZ#gxQz2CfC`@~8A@>u zS`T5uVik`u2B5_UOO`>4X2Ew$Mx}kHDI_Z`2}s``+<3C)xi+5qodh`G^PkB=G8er{ zxo(~2erD~i(fMn;D?p8xrkNx_FH92PL`)K(7bXdCA|?sY3+J302EeQQ155iaUNWR) Q4gdfE07*qoM6N<$f+L+zr2qf` literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1String-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1String-members.htm new file mode 100644 index 0000000..45f53d6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1String-members.htm @@ -0,0 +1,97 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::String Member List
+
+
+ +

This is the complete list of members for sf::String, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
begin()sf::String
begin() const sf::String
clear()sf::String
ConstIterator typedefsf::String
end()sf::String
end() const sf::String
erase(std::size_t position, std::size_t count=1)sf::String
find(const String &str, std::size_t start=0) const sf::String
getData() const sf::String
getSize() const sf::String
insert(std::size_t position, const String &str)sf::String
InvalidPossf::Stringstatic
isEmpty() const sf::String
Iterator typedefsf::String
operator std::string() const sf::String
operator std::wstring() const sf::String
operator!=(const String &left, const String &right)sf::Stringrelated
operator+(const String &left, const String &right)sf::Stringrelated
operator+=(const String &right)sf::String
operator< (defined in sf::String)sf::Stringfriend
operator<(const String &left, const String &right)sf::Stringrelated
operator<=(const String &left, const String &right)sf::Stringrelated
operator=(const String &right)sf::String
operator== (defined in sf::String)sf::Stringfriend
operator==(const String &left, const String &right)sf::Stringrelated
operator>(const String &left, const String &right)sf::Stringrelated
operator>=(const String &left, const String &right)sf::Stringrelated
operator[](std::size_t index) const sf::String
operator[](std::size_t index)sf::String
String()sf::String
String(char ansiChar, const std::locale &locale=std::locale())sf::String
String(wchar_t wideChar)sf::String
String(Uint32 utf32Char)sf::String
String(const char *ansiString, const std::locale &locale=std::locale())sf::String
String(const std::string &ansiString, const std::locale &locale=std::locale())sf::String
String(const wchar_t *wideString)sf::String
String(const std::wstring &wideString)sf::String
String(const Uint32 *utf32String)sf::String
String(const std::basic_string< Uint32 > &utf32String)sf::String
String(const String &copy)sf::String
toAnsiString(const std::locale &locale=std::locale()) const sf::String
toWideString() const sf::String
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1String.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1String.htm new file mode 100644 index 0000000..03bc651 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1String.htm @@ -0,0 +1,1351 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Utility string class that automatically handles conversions between types and encodings. + More...

+ +

#include <String.hpp>

+ + + + + + + + +

+Public Types

typedef std::basic_string
+< Uint32 >::iterator 
Iterator
 Iterator type. More...
 
typedef std::basic_string
+< Uint32 >::const_iterator 
ConstIterator
 Constant iterator type. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 String ()
 Default constructor. More...
 
 String (char ansiChar, const std::locale &locale=std::locale())
 Construct from a single ANSI character and a locale. More...
 
 String (wchar_t wideChar)
 Construct from single wide character. More...
 
 String (Uint32 utf32Char)
 Construct from single UTF-32 character. More...
 
 String (const char *ansiString, const std::locale &locale=std::locale())
 Construct from a null-terminated C-style ANSI string and a locale. More...
 
 String (const std::string &ansiString, const std::locale &locale=std::locale())
 Construct from an ANSI string and a locale. More...
 
 String (const wchar_t *wideString)
 Construct from null-terminated C-style wide string. More...
 
 String (const std::wstring &wideString)
 Construct from a wide string. More...
 
 String (const Uint32 *utf32String)
 Construct from a null-terminated C-style UTF-32 string. More...
 
 String (const std::basic_string< Uint32 > &utf32String)
 Construct from an UTF-32 string. More...
 
 String (const String &copy)
 Copy constructor. More...
 
 operator std::string () const
 Implicit cast operator to std::string (ANSI string) More...
 
 operator std::wstring () const
 Implicit cast operator to std::wstring (wide string) More...
 
std::string toAnsiString (const std::locale &locale=std::locale()) const
 Convert the unicode string to an ANSI string. More...
 
std::wstring toWideString () const
 Convert the unicode string to a wide string. More...
 
Stringoperator= (const String &right)
 Overload of assignment operator. More...
 
Stringoperator+= (const String &right)
 Overload of += operator to append an UTF-32 string. More...
 
Uint32 operator[] (std::size_t index) const
 Overload of [] operator to access a character by its position. More...
 
Uint32 & operator[] (std::size_t index)
 Overload of [] operator to access a character by its position. More...
 
void clear ()
 Clear the string. More...
 
std::size_t getSize () const
 Get the size of the string. More...
 
bool isEmpty () const
 Check whether the string is empty or not. More...
 
void erase (std::size_t position, std::size_t count=1)
 Erase one or more characters from the string. More...
 
void insert (std::size_t position, const String &str)
 Insert one or more characters into the string. More...
 
std::size_t find (const String &str, std::size_t start=0) const
 Find a sequence of one or more characters in the string. More...
 
const Uint32 * getData () const
 Get a pointer to the C-style array of characters. More...
 
Iterator begin ()
 Return an iterator to the beginning of the string. More...
 
ConstIterator begin () const
 Return an iterator to the beginning of the string. More...
 
Iterator end ()
 Return an iterator to the beginning of the string. More...
 
ConstIterator end () const
 Return an iterator to the beginning of the string. More...
 
+ + + + +

+Static Public Attributes

static const std::size_t InvalidPos
 Represents an invalid position in the string. More...
 
+ + + + + +

+Friends

+bool operator== (const String &left, const String &right)
 
+bool operator< (const String &left, const String &right)
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
bool operator== (const String &left, const String &right)
 Overload of == operator to compare two UTF-32 strings. More...
 
bool operator!= (const String &left, const String &right)
 Overload of != operator to compare two UTF-32 strings. More...
 
bool operator< (const String &left, const String &right)
 Overload of < operator to compare two UTF-32 strings. More...
 
bool operator> (const String &left, const String &right)
 Overload of > operator to compare two UTF-32 strings. More...
 
bool operator<= (const String &left, const String &right)
 Overload of <= operator to compare two UTF-32 strings. More...
 
bool operator>= (const String &left, const String &right)
 Overload of >= operator to compare two UTF-32 strings. More...
 
String operator+ (const String &left, const String &right)
 Overload of binary + operator to concatenate two strings. More...
 
+

Detailed Description

+

Utility string class that automatically handles conversions between types and encodings.

+

sf::String is a utility string class defined mainly for convenience.

+

It is a Unicode string (implemented using UTF-32), thus it can store any character in the world (european, chinese, arabic, hebrew, etc.).

+

It automatically handles conversions from/to ANSI and wide strings, so that you can work with standard string classes and still be compatible with functions taking a sf::String.

+
+
+
std::string s1 = s; // automatically converted to ANSI string
+
std::wstring s2 = s; // automatically converted to wide string
+
s = "hello"; // automatically converted from ANSI string
+
s = L"hello"; // automatically converted from wide string
+
s += 'a'; // automatically converted from ANSI string
+
s += L'a'; // automatically converted from wide string
+

Conversions involving ANSI strings use the default user locale. However it is possible to use a custom locale if necessary:

+
std::locale locale;
+ +
...
+
std::string s1 = s.toAnsiString(locale);
+
s = sf::String("hello", locale);
+

sf::String defines the most important functions of the standard std::string class: removing, random access, iterating, appending, comparing, etc. However it is a simple class provided for convenience, and you may have to consider using a more optimized class if your program requires complex string handling. The automatic conversion functions will then take care of converting your string to sf::String whenever SFML requires it.

+

Please note that SFML also defines a low-level, generic interface for Unicode handling, see the sf::Utf classes.

+ +

Definition at line 43 of file String.hpp.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef std::basic_string<Uint32>::const_iterator sf::String::ConstIterator
+
+ +

Constant iterator type.

+ +

Definition at line 51 of file String.hpp.

+ +
+
+ +
+
+ + + + +
typedef std::basic_string<Uint32>::iterator sf::String::Iterator
+
+ +

Iterator type.

+ +

Definition at line 50 of file String.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::String::String ()
+
+ +

Default constructor.

+

This constructor creates an empty string.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
sf::String::String (char ansiChar,
const std::locale & locale = std::locale() 
)
+
+ +

Construct from a single ANSI character and a locale.

+

The source character is converted to UTF-32 according to the given locale.

+
Parameters
+ + + +
ansiCharANSI character to convert
localeLocale to use for conversion
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::String::String (wchar_t wideChar)
+
+ +

Construct from single wide character.

+
Parameters
+ + +
wideCharWide character to convert
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::String::String (Uint32 utf32Char)
+
+ +

Construct from single UTF-32 character.

+
Parameters
+ + +
utf32CharUTF-32 character to convert
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
sf::String::String (const char * ansiString,
const std::locale & locale = std::locale() 
)
+
+ +

Construct from a null-terminated C-style ANSI string and a locale.

+

The source string is converted to UTF-32 according to the given locale.

+
Parameters
+ + + +
ansiStringANSI string to convert
localeLocale to use for conversion
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
sf::String::String (const std::string & ansiString,
const std::locale & locale = std::locale() 
)
+
+ +

Construct from an ANSI string and a locale.

+

The source string is converted to UTF-32 according to the given locale.

+
Parameters
+ + + +
ansiStringANSI string to convert
localeLocale to use for conversion
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::String::String (const wchar_t * wideString)
+
+ +

Construct from null-terminated C-style wide string.

+
Parameters
+ + +
wideStringWide string to convert
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::String::String (const std::wstring & wideString)
+
+ +

Construct from a wide string.

+
Parameters
+ + +
wideStringWide string to convert
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::String::String (const Uint32 * utf32String)
+
+ +

Construct from a null-terminated C-style UTF-32 string.

+
Parameters
+ + +
utf32StringUTF-32 string to assign
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::String::String (const std::basic_string< Uint32 > & utf32String)
+
+ +

Construct from an UTF-32 string.

+
Parameters
+ + +
utf32StringUTF-32 string to assign
+
+
+ +
+
+ +
+
+ + + + + + + + +
sf::String::String (const Stringcopy)
+
+ +

Copy constructor.

+
Parameters
+ + +
copyInstance to copy
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
Iterator sf::String::begin ()
+
+ +

Return an iterator to the beginning of the string.

+
Returns
Read-write iterator to the beginning of the string characters
+
See Also
end
+ +
+
+ +
+
+ + + + + + + +
ConstIterator sf::String::begin () const
+
+ +

Return an iterator to the beginning of the string.

+
Returns
Read-only iterator to the beginning of the string characters
+
See Also
end
+ +
+
+ +
+
+ + + + + + + +
void sf::String::clear ()
+
+ +

Clear the string.

+

This function removes all the characters from the string.

+
See Also
isEmpty, erase
+ +
+
+ +
+
+ + + + + + + +
Iterator sf::String::end ()
+
+ +

Return an iterator to the beginning of the string.

+

The end iterator refers to 1 position past the last character; thus it represents an invalid character and should never be accessed.

+
Returns
Read-write iterator to the end of the string characters
+
See Also
begin
+ +
+
+ +
+
+ + + + + + + +
ConstIterator sf::String::end () const
+
+ +

Return an iterator to the beginning of the string.

+

The end iterator refers to 1 position past the last character; thus it represents an invalid character and should never be accessed.

+
Returns
Read-only iterator to the end of the string characters
+
See Also
begin
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::String::erase (std::size_t position,
std::size_t count = 1 
)
+
+ +

Erase one or more characters from the string.

+

This function removes a sequence of count characters starting from position.

+
Parameters
+ + + +
positionPosition of the first character to erase
countNumber of characters to erase
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
std::size_t sf::String::find (const Stringstr,
std::size_t start = 0 
) const
+
+ +

Find a sequence of one or more characters in the string.

+

This function searches for the characters of str into the string, starting from start.

+
Parameters
+ + + +
strCharacters to find
startWhere to begin searching
+
+
+
Returns
Position of str in the string, or String::InvalidPos if not found
+ +
+
+ +
+
+ + + + + + + +
const Uint32* sf::String::getData () const
+
+ +

Get a pointer to the C-style array of characters.

+

This functions provides a read-only access to a null-terminated C-style representation of the string. The returned pointer is temporary and is meant only for immediate use, thus it is not recommended to store it.

+
Returns
Read-only pointer to the array of characters
+ +
+
+ +
+
+ + + + + + + +
std::size_t sf::String::getSize () const
+
+ +

Get the size of the string.

+
Returns
Number of characters in the string
+
See Also
isEmpty
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::String::insert (std::size_t position,
const Stringstr 
)
+
+ +

Insert one or more characters into the string.

+

This function inserts the characters of str into the string, starting from position.

+
Parameters
+ + + +
positionPosition of insertion
strCharacters to insert
+
+
+ +
+
+ +
+
+ + + + + + + +
bool sf::String::isEmpty () const
+
+ +

Check whether the string is empty or not.

+
Returns
True if the string is empty (i.e. contains no character)
+
See Also
clear, getSize
+ +
+
+ +
+
+ + + + + + + +
sf::String::operator std::string () const
+
+ +

Implicit cast operator to std::string (ANSI string)

+

The current global locale is used for conversion. If you want to explicitely specify a locale, see toAnsiString. Characters that do not fit in the target encoding are discarded from the returned string. This operator is defined for convenience, and is equivalent to calling toAnsiString().

+
Returns
Converted ANSI string
+
See Also
toAnsiString, operator std::wstring
+ +
+
+ +
+
+ + + + + + + +
sf::String::operator std::wstring () const
+
+ +

Implicit cast operator to std::wstring (wide string)

+

Characters that do not fit in the target encoding are discarded from the returned string. This operator is defined for convenience, and is equivalent to calling toWideString().

+
Returns
Converted wide string
+
See Also
toWideString, operator std::string
+ +
+
+ +
+
+ + + + + + + + +
String& sf::String::operator+= (const Stringright)
+
+ +

Overload of += operator to append an UTF-32 string.

+
Parameters
+ + +
rightString to append
+
+
+
Returns
Reference to self
+ +
+
+ +
+
+ + + + + + + + +
String& sf::String::operator= (const Stringright)
+
+ +

Overload of assignment operator.

+
Parameters
+ + +
rightInstance to assign
+
+
+
Returns
Reference to self
+ +
+
+ +
+
+ + + + + + + + +
Uint32 sf::String::operator[] (std::size_t index) const
+
+ +

Overload of [] operator to access a character by its position.

+

This function provides read-only access to characters. Note: this function doesn't throw if index is out of range.

+
Parameters
+ + +
indexIndex of the character to get
+
+
+
Returns
Character at position index
+ +
+
+ +
+
+ + + + + + + + +
Uint32& sf::String::operator[] (std::size_t index)
+
+ +

Overload of [] operator to access a character by its position.

+

This function provides read and write access to characters. Note: this function doesn't throw if index is out of range.

+
Parameters
+ + +
indexIndex of the character to get
+
+
+
Returns
Reference to the character at position index
+ +
+
+ +
+
+ + + + + + + + +
std::string sf::String::toAnsiString (const std::locale & locale = std::locale()) const
+
+ +

Convert the unicode string to an ANSI string.

+

The UTF-32 string is converted to an ANSI string in the encoding defined by locale. Characters that do not fit in the target encoding are discarded from the returned string.

+
Parameters
+ + +
localeLocale to use for conversion
+
+
+
Returns
Converted ANSI string
+
See Also
toWideString, operator std::string
+ +
+
+ +
+
+ + + + + + + +
std::wstring sf::String::toWideString () const
+
+ +

Convert the unicode string to a wide string.

+

Characters that do not fit in the target encoding are discarded from the returned string.

+
Returns
Converted wide string
+
See Also
toAnsiString, operator std::wstring
+ +
+
+

Friends And Related Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator!= (const Stringleft,
const Stringright 
)
+
+related
+
+ +

Overload of != operator to compare two UTF-32 strings.

+
Parameters
+ + + +
leftLeft operand (a string)
rightRight operand (a string)
+
+
+
Returns
True if both strings are different
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
String operator+ (const Stringleft,
const Stringright 
)
+
+related
+
+ +

Overload of binary + operator to concatenate two strings.

+
Parameters
+ + + +
leftLeft operand (a string)
rightRight operand (a string)
+
+
+
Returns
Concatenated string
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator< (const Stringleft,
const Stringright 
)
+
+related
+
+ +

Overload of < operator to compare two UTF-32 strings.

+
Parameters
+ + + +
leftLeft operand (a string)
rightRight operand (a string)
+
+
+
Returns
True if left is alphabetically lesser than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator<= (const Stringleft,
const Stringright 
)
+
+related
+
+ +

Overload of <= operator to compare two UTF-32 strings.

+
Parameters
+ + + +
leftLeft operand (a string)
rightRight operand (a string)
+
+
+
Returns
True if left is alphabetically lesser or equal than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator== (const Stringleft,
const Stringright 
)
+
+related
+
+ +

Overload of == operator to compare two UTF-32 strings.

+
Parameters
+ + + +
leftLeft operand (a string)
rightRight operand (a string)
+
+
+
Returns
True if both strings are equal
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator> (const Stringleft,
const Stringright 
)
+
+related
+
+ +

Overload of > operator to compare two UTF-32 strings.

+
Parameters
+ + + +
leftLeft operand (a string)
rightRight operand (a string)
+
+
+
Returns
True if left is alphabetically greater than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator>= (const Stringleft,
const Stringright 
)
+
+related
+
+ +

Overload of >= operator to compare two UTF-32 strings.

+
Parameters
+ + + +
leftLeft operand (a string)
rightRight operand (a string)
+
+
+
Returns
True if left is alphabetically greater or equal than right
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const std::size_t sf::String::InvalidPos
+
+static
+
+ +

Represents an invalid position in the string.

+ +

Definition at line 56 of file String.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener-members.htm new file mode 100644 index 0000000..3ea9473 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener-members.htm @@ -0,0 +1,76 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::TcpListener Member List
+
+
+ +

This is the complete list of members for sf::TcpListener, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
accept(TcpSocket &socket)sf::TcpListener
AnyPort enum valuesf::Socket
close()sf::TcpListener
create()sf::Socketprotected
create(SocketHandle handle)sf::Socketprotected
Disconnected enum valuesf::Socket
Done enum valuesf::Socket
Error enum valuesf::Socket
getHandle() const sf::Socketprotected
getLocalPort() const sf::TcpListener
isBlocking() const sf::Socket
listen(unsigned short port)sf::TcpListener
NotReady enum valuesf::Socket
setBlocking(bool blocking)sf::Socket
Socket(Type type)sf::Socketprotected
Status enum namesf::Socket
Tcp enum valuesf::Socketprotected
TcpListener()sf::TcpListener
Type enum namesf::Socketprotected
Udp enum valuesf::Socketprotected
~Socket()sf::Socketvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener.htm new file mode 100644 index 0000000..450ec69 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener.htm @@ -0,0 +1,529 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Socket that listens to new TCP connections. + More...

+ +

#include <TcpListener.hpp>

+
+Inheritance diagram for sf::TcpListener:
+
+
+ + +sf::Socket +sf::NonCopyable + +
+ + + + + + + + +

+Public Types

enum  Status {
+  Done, +
+  NotReady, +
+  Disconnected, +
+  Error +
+ }
 Status codes that may be returned by socket functions. More...
 
enum  { AnyPort = 0 + }
 Some special values used by sockets. More...
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TcpListener ()
 Default constructor. More...
 
unsigned short getLocalPort () const
 Get the port to which the socket is bound locally. More...
 
Status listen (unsigned short port)
 Start listening for connections. More...
 
void close ()
 Stop listening and close the socket. More...
 
Status accept (TcpSocket &socket)
 Accept a new connection. More...
 
void setBlocking (bool blocking)
 Set the blocking state of the socket. More...
 
bool isBlocking () const
 Tell whether the socket is in blocking or non-blocking mode. More...
 
+ + + + +

+Protected Types

enum  Type {
+  Tcp, +
+  Udp +
+ }
 Types of protocols that the socket can use. More...
 
+ + + + + + + + + + +

+Protected Member Functions

SocketHandle getHandle () const
 Return the internal handle of the socket. More...
 
void create ()
 Create the internal representation of the socket. More...
 
void create (SocketHandle handle)
 Create the internal representation of the socket from a socket handle. More...
 
+

Detailed Description

+

Socket that listens to new TCP connections.

+

A listener socket is a special type of socket that listens to a given port and waits for connections on that port.

+

This is all it can do.

+

When a new connection is received, you must call accept and the listener returns a new instance of sf::TcpSocket that is properly initialized and can be used to communicate with the new client.

+

Listener sockets are specific to the TCP protocol, UDP sockets are connectionless and can therefore communicate directly. As a consequence, a listener socket will always return the new connections as sf::TcpSocket instances.

+

A listener is automatically closed on destruction, like all other types of socket. However if you want to stop listening before the socket is destroyed, you can call its close() function.

+

Usage example:

+
// Create a listener socket and make it wait for new
+
// connections on port 55001
+
sf::TcpListener listener;
+
listener.listen(55001);
+
+
// Endless loop that waits for new connections
+
while (running)
+
{
+
sf::TcpSocket client;
+
if (listener.accept(client) == sf::Socket::Done)
+
{
+
// A new client just connected!
+
std::cout << "New connection received from " << client.getRemoteAddress() << std::endl;
+
doSomethingWith(client);
+
}
+
}
+
See Also
sf::TcpSocket, sf::Socket
+ +

Definition at line 43 of file TcpListener.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
anonymous enum
+
+inherited
+
+ +

Some special values used by sockets.

+ + +
Enumerator
AnyPort  +

Special value that tells the system to pick any available port.

+
+ +

Definition at line 65 of file Socket.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
enum sf::Socket::Status
+
+inherited
+
+ +

Status codes that may be returned by socket functions.

+ + + + + +
Enumerator
Done  +

The socket has sent / received the data.

+
NotReady  +

The socket is not ready to send / receive data yet.

+
Disconnected  +

The TCP socket has been disconnected.

+
Error  +

An unexpected error happened.

+
+ +

Definition at line 53 of file Socket.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
enum sf::Socket::Type
+
+protectedinherited
+
+ +

Types of protocols that the socket can use.

+ + + +
Enumerator
Tcp  +

TCP protocol.

+
Udp  +

UDP protocol.

+
+ +

Definition at line 113 of file Socket.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::TcpListener::TcpListener ()
+
+ +

Default constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
Status sf::TcpListener::accept (TcpSocketsocket)
+
+ +

Accept a new connection.

+

If the socket is in blocking mode, this function will not return until a connection is actually received.

+
Parameters
+ + +
socketSocket that will hold the new connection
+
+
+
Returns
Status code
+
See Also
listen
+ +
+
+ +
+
+ + + + + + + +
void sf::TcpListener::close ()
+
+ +

Stop listening and close the socket.

+

This function gracefully stops the listener. If the socket is not listening, this function has no effect.

+
See Also
listen
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Socket::create ()
+
+protectedinherited
+
+ +

Create the internal representation of the socket.

+

This function can only be accessed by derived classes.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Socket::create (SocketHandle handle)
+
+protectedinherited
+
+ +

Create the internal representation of the socket from a socket handle.

+

This function can only be accessed by derived classes.

+
Parameters
+ + +
handleOS-specific handle of the socket to wrap
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SocketHandle sf::Socket::getHandle () const
+
+protectedinherited
+
+ +

Return the internal handle of the socket.

+

The returned handle may be invalid if the socket was not created yet (or already destroyed). This function can only be accessed by derived classes.

+
Returns
The internal (OS-specific) handle of the socket
+ +
+
+ +
+
+ + + + + + + +
unsigned short sf::TcpListener::getLocalPort () const
+
+ +

Get the port to which the socket is bound locally.

+

If the socket is not listening to a port, this function returns 0.

+
Returns
Port to which the socket is bound
+
See Also
listen
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::Socket::isBlocking () const
+
+inherited
+
+ +

Tell whether the socket is in blocking or non-blocking mode.

+
Returns
True if the socket is blocking, false otherwise
+
See Also
setBlocking
+ +
+
+ +
+
+ + + + + + + + +
Status sf::TcpListener::listen (unsigned short port)
+
+ +

Start listening for connections.

+

This functions makes the socket listen to the specified port, waiting for new connections. If the socket was previously listening to another port, it will be stopped first and bound to the new port.

+
Parameters
+ + +
portPort to listen for new connections
+
+
+
Returns
Status code
+
See Also
accept, close
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Socket::setBlocking (bool blocking)
+
+inherited
+
+ +

Set the blocking state of the socket.

+

In blocking mode, calls will not return until they have completed their task. For example, a call to Receive in blocking mode won't return until some data was actually received. In non-blocking mode, calls will always return immediately, using the return code to signal whether there was data available or not. By default, all sockets are blocking.

+
Parameters
+ + +
blockingTrue to set the socket as blocking, false for non-blocking
+
+
+
See Also
isBlocking
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpListener.png new file mode 100644 index 0000000000000000000000000000000000000000..3ae34e9a41272af450ed3638226647bbc26e8d3b GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^nLymZ!3-oXyO`<&DTx4|5ZC|z{{xvX-h3_XKQsZz z0^*En!fxkv;L_i53iVCyLK%5I?t=d-%pjJ zi!Hog_1hfc_l&(BXQRk_Qd6>K%9hv%vvfD#cy&CirSyx+$+*`I`z!so9Xs}C%B|Py zQ{1igE??KCb@^KG^aZgqLw~1ktMkk9pCt2YlcuNnSFKC27gl?Gcl;dhJn7D_fS_}h z?i>#?YZ+TKdcJ%WZRJwdU7!#m!>QmkU;JVZ=L7wWV=N#3%`#-%vp>y;;r)6^;RC<3 zkA=)b_Ga|NpsdAadAH5gC;9C5&(dGN_~3PKkLesf5@y@3#paxPqVde#V|M?!Xw_T2 zuNSQGywvz^Lff03xb+|Zc3kvIVrKW4x4UD^Z0q*t+su+u=-QV`qdq=Z)b*-vSxT4Tz2TA^vBKd olmE|Ud2k)*E>SNp&7~ZFnT3nA?Q2rRK}nLq)78&qol`;+007cay#N3J literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket-members.htm new file mode 100644 index 0000000..ad855e4 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket-members.htm @@ -0,0 +1,83 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::TcpSocket Member List
+
+
+ +

This is the complete list of members for sf::TcpSocket, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AnyPort enum valuesf::Socket
close()sf::Socketprotected
connect(const IpAddress &remoteAddress, unsigned short remotePort, Time timeout=Time::Zero)sf::TcpSocket
create()sf::Socketprotected
create(SocketHandle handle)sf::Socketprotected
disconnect()sf::TcpSocket
Disconnected enum valuesf::Socket
Done enum valuesf::Socket
Error enum valuesf::Socket
getHandle() const sf::Socketprotected
getLocalPort() const sf::TcpSocket
getRemoteAddress() const sf::TcpSocket
getRemotePort() const sf::TcpSocket
isBlocking() const sf::Socket
NotReady enum valuesf::Socket
receive(void *data, std::size_t size, std::size_t &received)sf::TcpSocket
receive(Packet &packet)sf::TcpSocket
send(const void *data, std::size_t size)sf::TcpSocket
send(Packet &packet)sf::TcpSocket
setBlocking(bool blocking)sf::Socket
Socket(Type type)sf::Socketprotected
Status enum namesf::Socket
Tcp enum valuesf::Socketprotected
TcpListener (defined in sf::TcpSocket)sf::TcpSocketfriend
TcpSocket()sf::TcpSocket
Type enum namesf::Socketprotected
Udp enum valuesf::Socketprotected
~Socket()sf::Socketvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket.htm new file mode 100644 index 0000000..d42be95 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket.htm @@ -0,0 +1,771 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Specialized socket using the TCP protocol. + More...

+ +

#include <TcpSocket.hpp>

+
+Inheritance diagram for sf::TcpSocket:
+
+
+ + +sf::Socket +sf::NonCopyable + +
+ + + + + + + + +

+Public Types

enum  Status {
+  Done, +
+  NotReady, +
+  Disconnected, +
+  Error +
+ }
 Status codes that may be returned by socket functions. More...
 
enum  { AnyPort = 0 + }
 Some special values used by sockets. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TcpSocket ()
 Default constructor. More...
 
unsigned short getLocalPort () const
 Get the port to which the socket is bound locally. More...
 
IpAddress getRemoteAddress () const
 Get the address of the connected peer. More...
 
unsigned short getRemotePort () const
 Get the port of the connected peer to which the socket is connected. More...
 
Status connect (const IpAddress &remoteAddress, unsigned short remotePort, Time timeout=Time::Zero)
 Connect the socket to a remote peer. More...
 
void disconnect ()
 Disconnect the socket from its remote peer. More...
 
Status send (const void *data, std::size_t size)
 Send raw data to the remote peer. More...
 
Status receive (void *data, std::size_t size, std::size_t &received)
 Receive raw data from the remote peer. More...
 
Status send (Packet &packet)
 Send a formatted packet of data to the remote peer. More...
 
Status receive (Packet &packet)
 Receive a formatted packet of data from the remote peer. More...
 
void setBlocking (bool blocking)
 Set the blocking state of the socket. More...
 
bool isBlocking () const
 Tell whether the socket is in blocking or non-blocking mode. More...
 
+ + + + +

+Protected Types

enum  Type {
+  Tcp, +
+  Udp +
+ }
 Types of protocols that the socket can use. More...
 
+ + + + + + + + + + + + + +

+Protected Member Functions

SocketHandle getHandle () const
 Return the internal handle of the socket. More...
 
void create ()
 Create the internal representation of the socket. More...
 
void create (SocketHandle handle)
 Create the internal representation of the socket from a socket handle. More...
 
void close ()
 Close the socket gracefully. More...
 
+ + + +

+Friends

+class TcpListener
 
+

Detailed Description

+

Specialized socket using the TCP protocol.

+

TCP is a connected protocol, which means that a TCP socket can only communicate with the host it is connected to.

+

It can't send or receive anything if it is not connected.

+

The TCP protocol is reliable but adds a slight overhead. It ensures that your data will always be received in order and without errors (no data corrupted, lost or duplicated).

+

When a socket is connected to a remote host, you can retrieve informations about this host with the getRemoteAddress and getRemotePort functions. You can also get the local port to which the socket is bound (which is automatically chosen when the socket is connected), with the getLocalPort function.

+

Sending and receiving data can use either the low-level or the high-level functions. The low-level functions process a raw sequence of bytes, and cannot ensure that one call to Send will exactly match one call to Receive at the other end of the socket.

+

The high-level interface uses packets (see sf::Packet), which are easier to use and provide more safety regarding the data that is exchanged. You can look at the sf::Packet class to get more details about how they work.

+

The socket is automatically disconnected when it is destroyed, but if you want to explicitely close the connection while the socket instance is still alive, you can call disconnect.

+

Usage example:

+
// ----- The client -----
+
+
// Create a socket and connect it to 192.168.1.50 on port 55001
+ +
socket.connect("192.168.1.50", 55001);
+
+
// Send a message to the connected host
+
std::string message = "Hi, I am a client";
+
socket.send(message.c_str(), message.size() + 1);
+
+
// Receive an answer from the server
+
char buffer[1024];
+
std::size_t received = 0;
+
socket.receive(buffer, sizeof(buffer), received);
+
std::cout << "The server said: " << buffer << std::endl;
+
+
// ----- The server -----
+
+
// Create a listener to wait for incoming connections on port 55001
+
sf::TcpListener listener;
+
listener.listen(55001);
+
+
// Wait for a connection
+ +
listener.accept(socket);
+
std::cout << "New client connected: " << socket.getRemoteAddress() << std::endl;
+
+
// Receive a message from the client
+
char buffer[1024];
+
std::size_t received = 0;
+
socket.receive(buffer, sizeof(buffer), received);
+
std::cout << "The client said: " << buffer << std::endl;
+
+
// Send an answer
+
std::string message = "Welcome, client";
+
socket.send(message.c_str(), message.size() + 1);
+
See Also
sf::Socket, sf::UdpSocket, sf::Packet
+ +

Definition at line 46 of file TcpSocket.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
anonymous enum
+
+inherited
+
+ +

Some special values used by sockets.

+ + +
Enumerator
AnyPort  +

Special value that tells the system to pick any available port.

+
+ +

Definition at line 65 of file Socket.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
enum sf::Socket::Status
+
+inherited
+
+ +

Status codes that may be returned by socket functions.

+ + + + + +
Enumerator
Done  +

The socket has sent / received the data.

+
NotReady  +

The socket is not ready to send / receive data yet.

+
Disconnected  +

The TCP socket has been disconnected.

+
Error  +

An unexpected error happened.

+
+ +

Definition at line 53 of file Socket.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
enum sf::Socket::Type
+
+protectedinherited
+
+ +

Types of protocols that the socket can use.

+ + + +
Enumerator
Tcp  +

TCP protocol.

+
Udp  +

UDP protocol.

+
+ +

Definition at line 113 of file Socket.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::TcpSocket::TcpSocket ()
+
+ +

Default constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void sf::Socket::close ()
+
+protectedinherited
+
+ +

Close the socket gracefully.

+

This function can only be accessed by derived classes.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Status sf::TcpSocket::connect (const IpAddressremoteAddress,
unsigned short remotePort,
Time timeout = Time::Zero 
)
+
+ +

Connect the socket to a remote peer.

+

In blocking mode, this function may take a while, especially if the remote peer is not reachable. The last parameter allows you to stop trying to connect after a given timeout. If the socket was previously connected, it is first disconnected.

+
Parameters
+ + + + +
remoteAddressAddress of the remote peer
remotePortPort of the remote peer
timeoutOptional maximum time to wait
+
+
+
Returns
Status code
+
See Also
disconnect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Socket::create ()
+
+protectedinherited
+
+ +

Create the internal representation of the socket.

+

This function can only be accessed by derived classes.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Socket::create (SocketHandle handle)
+
+protectedinherited
+
+ +

Create the internal representation of the socket from a socket handle.

+

This function can only be accessed by derived classes.

+
Parameters
+ + +
handleOS-specific handle of the socket to wrap
+
+
+ +
+
+ +
+
+ + + + + + + +
void sf::TcpSocket::disconnect ()
+
+ +

Disconnect the socket from its remote peer.

+

This function gracefully closes the connection. If the socket is not connected, this function has no effect.

+
See Also
connect
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SocketHandle sf::Socket::getHandle () const
+
+protectedinherited
+
+ +

Return the internal handle of the socket.

+

The returned handle may be invalid if the socket was not created yet (or already destroyed). This function can only be accessed by derived classes.

+
Returns
The internal (OS-specific) handle of the socket
+ +
+
+ +
+
+ + + + + + + +
unsigned short sf::TcpSocket::getLocalPort () const
+
+ +

Get the port to which the socket is bound locally.

+

If the socket is not connected, this function returns 0.

+
Returns
Port to which the socket is bound
+
See Also
connect, getRemotePort
+ +
+
+ +
+
+ + + + + + + +
IpAddress sf::TcpSocket::getRemoteAddress () const
+
+ +

Get the address of the connected peer.

+

It the socket is not connected, this function returns sf::IpAddress::None.

+
Returns
Address of the remote peer
+
See Also
getRemotePort
+ +
+
+ +
+
+ + + + + + + +
unsigned short sf::TcpSocket::getRemotePort () const
+
+ +

Get the port of the connected peer to which the socket is connected.

+

If the socket is not connected, this function returns 0.

+
Returns
Remote port to which the socket is connected
+
See Also
getRemoteAddress
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::Socket::isBlocking () const
+
+inherited
+
+ +

Tell whether the socket is in blocking or non-blocking mode.

+
Returns
True if the socket is blocking, false otherwise
+
See Also
setBlocking
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Status sf::TcpSocket::receive (void * data,
std::size_t size,
std::size_t & received 
)
+
+ +

Receive raw data from the remote peer.

+

In blocking mode, this function will wait until some bytes are actually received. This function will fail if the socket is not connected.

+
Parameters
+ + + + +
dataPointer to the array to fill with the received bytes
sizeMaximum number of bytes that can be received
receivedThis variable is filled with the actual number of bytes received
+
+
+
Returns
Status code
+
See Also
send
+ +
+
+ +
+
+ + + + + + + + +
Status sf::TcpSocket::receive (Packetpacket)
+
+ +

Receive a formatted packet of data from the remote peer.

+

In blocking mode, this function will wait until the whole packet has been received. This function will fail if the socket is not connected.

+
Parameters
+ + +
packetPacket to fill with the received data
+
+
+
Returns
Status code
+
See Also
send
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Status sf::TcpSocket::send (const void * data,
std::size_t size 
)
+
+ +

Send raw data to the remote peer.

+

This function will fail if the socket is not connected.

+
Parameters
+ + + +
dataPointer to the sequence of bytes to send
sizeNumber of bytes to send
+
+
+
Returns
Status code
+
See Also
receive
+ +
+
+ +
+
+ + + + + + + + +
Status sf::TcpSocket::send (Packetpacket)
+
+ +

Send a formatted packet of data to the remote peer.

+

This function will fail if the socket is not connected.

+
Parameters
+ + +
packetPacket to send
+
+
+
Returns
Status code
+
See Also
receive
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Socket::setBlocking (bool blocking)
+
+inherited
+
+ +

Set the blocking state of the socket.

+

In blocking mode, calls will not return until they have completed their task. For example, a call to Receive in blocking mode won't return until some data was actually received. In non-blocking mode, calls will always return immediately, using the return code to signal whether there was data available or not. By default, all sockets are blocking.

+
Parameters
+ + +
blockingTrue to set the socket as blocking, false for non-blocking
+
+
+
See Also
isBlocking
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1TcpSocket.png new file mode 100644 index 0000000000000000000000000000000000000000..ed81a9a8cb6a6595a5dc39af72ae86e46d1ab0ab GIT binary patch literal 722 zcmV;@0xkWCP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0007ENklJl3wV!-iB>Rb#YDC=RBB}RId}#BemIXNP$Uda(T`ZrM7l@H@0Rhqz9+G zk*+#Uw;E73+)nSsn$1~KyX79fOKNWQ#TTTmIk|)HlGX!E-7=HaKh_a8(T5~^tR4RF zoUF(C{$%g9N3tQkJg3G(g=ziNG-zY962Cm9e=oczNds!SDM^R=7U>l9Ez&t?{;wfP z!}?KDj4^r$;A7nYT;xW&-Mmn4qy^-J@*@Fw>Gvv{H39q&nl%AjU$Z8F>uc5oaDC01 z0IsiDQ~tylql<`=3f3;V@xseu-6UvYD zlir&ofMHD%z^En(U{sR?Fsexc7}X>JjB1hqMm0(K6G8|sA^tPCKNsFwnim z5v}*i-_zE6>u!u^hJPc*e^Dk0U{sR?Fe+D42qAdr58tdSG%Va8a{vGU07*qoM6N<$ Eg6IQNTmS$7 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text-members.htm new file mode 100644 index 0000000..075ff29 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text-members.htm @@ -0,0 +1,96 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Text Member List
+
+
+ +

This is the complete list of members for sf::Text, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bold enum valuesf::Text
findCharacterPos(std::size_t index) const sf::Text
getCharacterSize() const sf::Text
getColor() const sf::Text
getFont() const sf::Text
getGlobalBounds() const sf::Text
getInverseTransform() const sf::Transformable
getLocalBounds() const sf::Text
getOrigin() const sf::Transformable
getPosition() const sf::Transformable
getRotation() const sf::Transformable
getScale() const sf::Transformable
getString() const sf::Text
getStyle() const sf::Text
getTransform() const sf::Transformable
Italic enum valuesf::Text
move(float offsetX, float offsetY)sf::Transformable
move(const Vector2f &offset)sf::Transformable
Regular enum valuesf::Text
rotate(float angle)sf::Transformable
scale(float factorX, float factorY)sf::Transformable
scale(const Vector2f &factor)sf::Transformable
setCharacterSize(unsigned int size)sf::Text
setColor(const Color &color)sf::Text
setFont(const Font &font)sf::Text
setOrigin(float x, float y)sf::Transformable
setOrigin(const Vector2f &origin)sf::Transformable
setPosition(float x, float y)sf::Transformable
setPosition(const Vector2f &position)sf::Transformable
setRotation(float angle)sf::Transformable
setScale(float factorX, float factorY)sf::Transformable
setScale(const Vector2f &factors)sf::Transformable
setString(const String &string)sf::Text
setStyle(Uint32 style)sf::Text
Style enum namesf::Text
Text()sf::Text
Text(const String &string, const Font &font, unsigned int characterSize=30)sf::Text
Transformable()sf::Transformable
Underlined enum valuesf::Text
~Drawable()sf::Drawableinlinevirtual
~Transformable()sf::Transformablevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text.htm new file mode 100644 index 0000000..483c1d6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text.htm @@ -0,0 +1,1240 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Graphical text that can be drawn to a render target. + More...

+ +

#include <Text.hpp>

+
+Inheritance diagram for sf::Text:
+
+
+ + +sf::Drawable +sf::Transformable + +
+ + + + + +

+Public Types

enum  Style {
+  Regular = 0, +
+  Bold = 1 << 0, +
+  Italic = 1 << 1, +
+  Underlined = 1 << 2 +
+ }
 Enumeration of the string drawing styles. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Text ()
 Default constructor. More...
 
 Text (const String &string, const Font &font, unsigned int characterSize=30)
 Construct the text from a string, font and size. More...
 
void setString (const String &string)
 Set the text's string. More...
 
void setFont (const Font &font)
 Set the text's font. More...
 
void setCharacterSize (unsigned int size)
 Set the character size. More...
 
void setStyle (Uint32 style)
 Set the text's style. More...
 
void setColor (const Color &color)
 Set the global color of the text. More...
 
const StringgetString () const
 Get the text's string. More...
 
const FontgetFont () const
 Get the text's font. More...
 
unsigned int getCharacterSize () const
 Get the character size. More...
 
Uint32 getStyle () const
 Get the text's style. More...
 
const ColorgetColor () const
 Get the global color of the text. More...
 
Vector2f findCharacterPos (std::size_t index) const
 Return the position of the index-th character. More...
 
FloatRect getLocalBounds () const
 Get the local bounding rectangle of the entity. More...
 
FloatRect getGlobalBounds () const
 Get the global bounding rectangle of the entity. More...
 
void setPosition (float x, float y)
 set the position of the object More...
 
void setPosition (const Vector2f &position)
 set the position of the object More...
 
void setRotation (float angle)
 set the orientation of the object More...
 
void setScale (float factorX, float factorY)
 set the scale factors of the object More...
 
void setScale (const Vector2f &factors)
 set the scale factors of the object More...
 
void setOrigin (float x, float y)
 set the local origin of the object More...
 
void setOrigin (const Vector2f &origin)
 set the local origin of the object More...
 
const Vector2fgetPosition () const
 get the position of the object More...
 
float getRotation () const
 get the orientation of the object More...
 
const Vector2fgetScale () const
 get the current scale of the object More...
 
const Vector2fgetOrigin () const
 get the local origin of the object More...
 
void move (float offsetX, float offsetY)
 Move the object by a given offset. More...
 
void move (const Vector2f &offset)
 Move the object by a given offset. More...
 
void rotate (float angle)
 Rotate the object. More...
 
void scale (float factorX, float factorY)
 Scale the object. More...
 
void scale (const Vector2f &factor)
 Scale the object. More...
 
const TransformgetTransform () const
 get the combined transform of the object More...
 
const TransformgetInverseTransform () const
 get the inverse of the combined transform of the object More...
 
+

Detailed Description

+

Graphical text that can be drawn to a render target.

+

sf::Text is a drawable class that allows to easily display some text with custom style and color on a render target.

+

It inherits all the functions from sf::Transformable: position, rotation, scale, origin. It also adds text-specific properties such as the font to use, the character size, the font style (bold, italic, underlined), the global color and the text to display of course. It also provides convenience functions to calculate the graphical size of the text, or to get the global position of a given character.

+

sf::Text works in combination with the sf::Font class, which loads and provides the glyphs (visual characters) of a given font.

+

The separation of sf::Font and sf::Text allows more flexibility and better performances: indeed a sf::Font is a heavy resource, and any operation on it is slow (often too slow for real-time applications). On the other side, a sf::Text is a lightweight object which can combine the glyphs data and metrics of a sf::Font to display any text on a render target.

+

It is important to note that the sf::Text instance doesn't copy the font that it uses, it only keeps a reference to it. Thus, a sf::Font must not be destructed while it is used by a sf::Text (i.e. never write a function that uses a local sf::Font instance for creating a text).

+

Usage example:

+
// Declare and load a font
+
sf::Font font;
+
font.loadFromFile("arial.ttf");
+
+
// Create a text
+
sf::Text text("hello", font);
+ + + +
+
// Draw it
+
window.draw(text);
+
See Also
sf::Font, sf::Transformable
+ +

Definition at line 48 of file Text.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Text::Style
+
+ +

Enumeration of the string drawing styles.

+ + + + + +
Enumerator
Regular  +

Regular characters, no style.

+
Bold  +

Bold characters.

+
Italic  +

Italic characters.

+
Underlined  +

Underlined characters.

+
+ +

Definition at line 56 of file Text.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Text::Text ()
+
+ +

Default constructor.

+

Creates an empty text.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
sf::Text::Text (const Stringstring,
const Fontfont,
unsigned int characterSize = 30 
)
+
+ +

Construct the text from a string, font and size.

+
Parameters
+ + + + +
stringText assigned to the string
fontFont used to draw the string
characterSizeBase size of characters, in pixels
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
Vector2f sf::Text::findCharacterPos (std::size_t index) const
+
+ +

Return the position of the index-th character.

+

This function computes the visual position of a character from its index in the string. The returned position is in global coordinates (translation, rotation, scale and origin are applied). If index is out of range, the position of the end of the string is returned.

+
Parameters
+ + +
indexIndex of the character
+
+
+
Returns
Position of the character
+ +
+
+ +
+
+ + + + + + + +
unsigned int sf::Text::getCharacterSize () const
+
+ +

Get the character size.

+
Returns
Size of the characters, in pixels
+
See Also
setCharacterSize
+ +
+
+ +
+
+ + + + + + + +
const Color& sf::Text::getColor () const
+
+ +

Get the global color of the text.

+
Returns
Global color of the text
+
See Also
setColor
+ +
+
+ +
+
+ + + + + + + +
const Font* sf::Text::getFont () const
+
+ +

Get the text's font.

+

If the text has no font attached, a NULL pointer is returned. The returned reference is const, which means that you cannot modify the font when you get it from this function.

+
Returns
Pointer to the text's font
+
See Also
setFont
+ +
+
+ +
+
+ + + + + + + +
FloatRect sf::Text::getGlobalBounds () const
+
+ +

Get the global bounding rectangle of the entity.

+

The returned rectangle is in global coordinates, which means that it takes in account the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the sprite in the global 2D world's coordinate system.

+
Returns
Global bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getInverseTransform () const
+
+inherited
+
+ +

get the inverse of the combined transform of the object

+
Returns
Inverse of the combined transformations applied to the object
+
See Also
getTransform
+ +
+
+ +
+
+ + + + + + + +
FloatRect sf::Text::getLocalBounds () const
+
+ +

Get the local bounding rectangle of the entity.

+

The returned rectangle is in local coordinates, which means that it ignores the transformations (translation, rotation, scale, ...) that are applied to the entity. In other words, this function returns the bounds of the entity in the entity's coordinate system.

+
Returns
Local bounding rectangle of the entity
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getOrigin () const
+
+inherited
+
+ +

get the local origin of the object

+
Returns
Current origin
+
See Also
setOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getPosition () const
+
+inherited
+
+ +

get the position of the object

+
Returns
Current position
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
float sf::Transformable::getRotation () const
+
+inherited
+
+ +

get the orientation of the object

+

The rotation is always in the range [0, 360].

+
Returns
Current rotation, in degrees
+
See Also
setRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Vector2f& sf::Transformable::getScale () const
+
+inherited
+
+ +

get the current scale of the object

+
Returns
Current scale factors
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + +
const String& sf::Text::getString () const
+
+ +

Get the text's string.

+

The returned string is a sf::String, which can automatically be converted to standard string types. So, the following lines of code are all valid:

+
sf::String s1 = text.getString();
+
std::string s2 = text.getString();
+
std::wstring s3 = text.getString();
+
Returns
Text's string
+
See Also
setString
+ +
+
+ +
+
+ + + + + + + +
Uint32 sf::Text::getStyle () const
+
+ +

Get the text's style.

+
Returns
Text's style
+
See Also
setStyle
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const Transform& sf::Transformable::getTransform () const
+
+inherited
+
+ +

get the combined transform of the object

+
Returns
Transform combining the position/rotation/scale/origin of the object
+
See Also
getInverseTransform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::move (float offsetX,
float offsetY 
)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f pos = object.getPosition();
+
object.setPosition(pos.x + offsetX, pos.y + offsetY);
+
Parameters
+ + + +
offsetXX offset
offsetYY offset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::move (const Vector2foffset)
+
+inherited
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
object.setPosition(object.getPosition() + offset);
+
Parameters
+ + +
offsetOffset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::rotate (float angle)
+
+inherited
+
+ +

Rotate the object.

+

This function adds to the current rotation of the object, unlike setRotation which overwrites it. Thus, it is equivalent to the following code:

+
object.setRotation(object.getRotation() + angle);
+
Parameters
+ + +
angleAngle of rotation, in degrees
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::scale (float factorX,
float factorY 
)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factorX, scale.y * factorY);
+
Parameters
+ + + +
factorXHorizontal scale factor
factorYVertical scale factor
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::scale (const Vector2ffactor)
+
+inherited
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factor.x, scale.y * factor.y);
+
Parameters
+ + +
factorScale factors
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + + +
void sf::Text::setCharacterSize (unsigned int size)
+
+ +

Set the character size.

+

The default size is 30.

+
Parameters
+ + +
sizeNew character size, in pixels
+
+
+
See Also
getCharacterSize
+ +
+
+ +
+
+ + + + + + + + +
void sf::Text::setColor (const Colorcolor)
+
+ +

Set the global color of the text.

+

By default, the text's color is opaque white.

+
Parameters
+ + +
colorNew color of the text
+
+
+
See Also
getColor
+ +
+
+ +
+
+ + + + + + + + +
void sf::Text::setFont (const Fontfont)
+
+ +

Set the text's font.

+

The font argument refers to a font that must exist as long as the text uses it. Indeed, the text doesn't store its own copy of the font, but rather keeps a pointer to the one that you passed to this function. If the font is destroyed and the text tries to use it, the behaviour is undefined.

+
Parameters
+ + +
fontNew font
+
+
+
See Also
getFont
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setOrigin (float x,
float y 
)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new origin
yY coordinate of the new origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setOrigin (const Vector2forigin)
+
+inherited
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + +
originNew origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setPosition (float x,
float y 
)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new position
yY coordinate of the new position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setPosition (const Vector2fposition)
+
+inherited
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + +
positionNew position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setRotation (float angle)
+
+inherited
+
+ +

set the orientation of the object

+

This function completely overwrites the previous rotation. See the rotate function to add an angle based on the previous rotation instead. The default rotation of a transformable object is 0.

+
Parameters
+ + +
angleNew rotation, in degrees
+
+
+
See Also
rotate, getRotation
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setScale (float factorX,
float factorY 
)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + + +
factorXNew horizontal scale factor
factorYNew vertical scale factor
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Transformable::setScale (const Vector2ffactors)
+
+inherited
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + +
factorsNew scale factors
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + + + + +
void sf::Text::setString (const Stringstring)
+
+ +

Set the text's string.

+

The string argument is a sf::String, which can automatically be constructed from standard string types. So, the following calls are all valid:

+
text.setString("hello");
+
text.setString(L"hello");
+
text.setString(std::string("hello"));
+
text.setString(std::wstring(L"hello"));
+

A text's string is empty by default.

+
Parameters
+ + +
stringNew string
+
+
+
See Also
getString
+ +
+
+ +
+
+ + + + + + + + +
void sf::Text::setStyle (Uint32 style)
+
+ +

Set the text's style.

+

You can pass a combination of one or more styles, for example sf::Text::Bold | sf::Text::Italic. The default style is sf::Text::Regular.

+
Parameters
+ + +
styleNew style
+
+
+
See Also
getStyle
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Text.png new file mode 100644 index 0000000000000000000000000000000000000000..582905f3f8afb8f01075488dd664cb1f77b9d662 GIT binary patch literal 710 zcmV;%0y+JOP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d00072NklfUBw?jFxf=NY9^IV5k+QNhw&Bfz3&F=$9wO)ftRFC#FCQK z36qqhQ!zk}a#?)}bQtPE9>pY%B)6H<=#k|clJPZ9Nk~$W zzetYvE4rg$F#fvncRCaPO@x`hr`BVY`(2RCB5kqqb)%W{{Bcg0Hy1%IiLzw4a8XDk z*W;Vys+wIWNhy2DJklB~I_jkOyAe)~-}2-oiK^tjT$9|BwYC&rkt~*L8YjEaDUXvl zDA&4V=nc_Yas7s(D%WeJTx*iax=|e#B@dFQHlFSN>?GHPqAgLVZb`~0HlFN)U99ac zt^M;b=Rz1 zYe^ivCnf1zYVS!&YKTcn(y5rFB(=dLCFxX5Qj*&6Et1}Q--}4nd+&Pz@B#xsfBJ^~ z2FYRgh-Kff-yr!L>=TxK!+wRNbyt8^m?Xfdm?S_OOcLN!OcJ0CCJAsV-yt~+!|(wB zuE1py1$Y&c1h@kx32+BY65tM)B)}aoNq{?Gk^pzWBmw>x&N~@utN;K2 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture-members.htm new file mode 100644 index 0000000..7f188ef --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture-members.htm @@ -0,0 +1,86 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Texture Member List
+
+
+ +

This is the complete list of members for sf::Texture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bind(const Texture *texture, CoordinateType coordinateType=Normalized)sf::Texturestatic
CoordinateType enum namesf::Texture
copyToImage() const sf::Texture
create(unsigned int width, unsigned int height)sf::Texture
ensureGlContext()sf::GlResourceprivatestatic
getMaximumSize()sf::Texturestatic
getSize() const sf::Texture
GlResource()sf::GlResourceprivate
isRepeated() const sf::Texture
isSmooth() const sf::Texture
loadFromFile(const std::string &filename, const IntRect &area=IntRect())sf::Texture
loadFromImage(const Image &image, const IntRect &area=IntRect())sf::Texture
loadFromMemory(const void *data, std::size_t size, const IntRect &area=IntRect())sf::Texture
loadFromStream(sf::InputStream &stream, const IntRect &area=IntRect())sf::Texture
Normalized enum valuesf::Texture
operator=(const Texture &right)sf::Texture
Pixels enum valuesf::Texture
RenderTarget (defined in sf::Texture)sf::Texturefriend
RenderTexture (defined in sf::Texture)sf::Texturefriend
setRepeated(bool repeated)sf::Texture
setSmooth(bool smooth)sf::Texture
Texture()sf::Texture
Texture(const Texture &copy)sf::Texture
update(const Uint8 *pixels)sf::Texture
update(const Uint8 *pixels, unsigned int width, unsigned int height, unsigned int x, unsigned int y)sf::Texture
update(const Image &image)sf::Texture
update(const Image &image, unsigned int x, unsigned int y)sf::Texture
update(const Window &window)sf::Texture
update(const Window &window, unsigned int x, unsigned int y)sf::Texture
~GlResource()sf::GlResourceprivate
~Texture()sf::Texture
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture.htm new file mode 100644 index 0000000..8ff84b9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture.htm @@ -0,0 +1,996 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Image living on the graphics card that can be used for drawing. + More...

+ +

#include <Texture.hpp>

+
+Inheritance diagram for sf::Texture:
+
+
+ + +sf::GlResource + +
+ + + + + +

+Public Types

enum  CoordinateType {
+  Normalized, +
+  Pixels +
+ }
 Types of texture coordinates that can be used for rendering. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Texture ()
 Default constructor. More...
 
 Texture (const Texture &copy)
 Copy constructor. More...
 
 ~Texture ()
 Destructor. More...
 
bool create (unsigned int width, unsigned int height)
 Create the texture. More...
 
bool loadFromFile (const std::string &filename, const IntRect &area=IntRect())
 Load the texture from a file on disk. More...
 
bool loadFromMemory (const void *data, std::size_t size, const IntRect &area=IntRect())
 Load the texture from a file in memory. More...
 
bool loadFromStream (sf::InputStream &stream, const IntRect &area=IntRect())
 Load the texture from a custom stream. More...
 
bool loadFromImage (const Image &image, const IntRect &area=IntRect())
 Load the texture from an image. More...
 
Vector2u getSize () const
 Return the size of the texture. More...
 
Image copyToImage () const
 Copy the texture pixels to an image. More...
 
void update (const Uint8 *pixels)
 Update the whole texture from an array of pixels. More...
 
void update (const Uint8 *pixels, unsigned int width, unsigned int height, unsigned int x, unsigned int y)
 Update a part of the texture from an array of pixels. More...
 
void update (const Image &image)
 Update the texture from an image. More...
 
void update (const Image &image, unsigned int x, unsigned int y)
 Update a part of the texture from an image. More...
 
void update (const Window &window)
 Update the texture from the contents of a window. More...
 
void update (const Window &window, unsigned int x, unsigned int y)
 Update a part of the texture from the contents of a window. More...
 
void setSmooth (bool smooth)
 Enable or disable the smooth filter. More...
 
bool isSmooth () const
 Tell whether the smooth filter is enabled or not. More...
 
void setRepeated (bool repeated)
 Enable or disable repeating. More...
 
bool isRepeated () const
 Tell whether the texture is repeated or not. More...
 
Textureoperator= (const Texture &right)
 Overload of assignment operator. More...
 
+ + + + + + + +

+Static Public Member Functions

static void bind (const Texture *texture, CoordinateType coordinateType=Normalized)
 Bind a texture for rendering. More...
 
static unsigned int getMaximumSize ()
 Get the maximum texture size allowed. More...
 
+ + + + +

+Static Private Member Functions

static void ensureGlContext ()
 Make sure that a valid OpenGL context exists in the current thread. More...
 
+ + + + + +

+Friends

+class RenderTexture
 
+class RenderTarget
 
+

Detailed Description

+

Image living on the graphics card that can be used for drawing.

+

sf::Texture stores pixels that can be drawn, with a sprite for example.

+

A texture lives in the graphics card memory, therefore it is very fast to draw a texture to a render target, or copy a render target to a texture (the graphics card can access both directly).

+

Being stored in the graphics card memory has some drawbacks. A texture cannot be manipulated as freely as a sf::Image, you need to prepare the pixels first and then upload them to the texture in a single operation (see Texture::update).

+

sf::Texture makes it easy to convert from/to sf::Image, but keep in mind that these calls require transfers between the graphics card and the central memory, therefore they are slow operations.

+

A texture can be loaded from an image, but also directly from a file/memory/stream. The necessary shortcuts are defined so that you don't need an image first for the most common cases. However, if you want to perform some modifications on the pixels before creating the final texture, you can load your file to a sf::Image, do whatever you need with the pixels, and then call Texture::loadFromImage.

+

Since they live in the graphics card memory, the pixels of a texture cannot be accessed without a slow copy first. And they cannot be accessed individually. Therefore, if you need to read the texture's pixels (like for pixel-perfect collisions), it is recommended to store the collision information separately, for example in an array of booleans.

+

Like sf::Image, sf::Texture can handle a unique internal representation of pixels, which is RGBA 32 bits. This means that a pixel must be composed of 8 bits red, green, blue and alpha channels – just like a sf::Color.

+

Usage example:

+
// This example shows the most common use of sf::Texture:
+
// drawing a sprite
+
+
// Load a texture from a file
+
sf::Texture texture;
+
if (!texture.loadFromFile("texture.png"))
+
return -1;
+
+
// Assign it to a sprite
+
sf::Sprite sprite;
+
sprite.setTexture(texture);
+
+
// Draw the textured sprite
+
window.draw(sprite);
+
// This example shows another common use of sf::Texture:
+
// streaming real-time data, like video frames
+
+
// Create an empty texture
+
sf::Texture texture;
+
if (!texture.create(640, 480))
+
return -1;
+
+
// Create a sprite that will display the texture
+
sf::Sprite sprite(texture);
+
+
while (...) // the main loop
+
{
+
...
+
+
// update the texture
+
sf::Uint8* pixels = ...; // get a fresh chunk of pixels (the next frame of a movie, for example)
+
texture.update(pixels);
+
+
// draw it
+
window.draw(sprite);
+
+
...
+
}
+

Like sf::Shader that can be used as a raw OpenGL shader, sf::Texture can also be used directly as a raw texture for custom OpenGL geometry.

+
+
... render OpenGL geometry ...
+
sf::Texture::bind(NULL);
+
See Also
sf::Sprite, sf::Image, sf::RenderTexture
+ +

Definition at line 47 of file Texture.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sf::Texture::CoordinateType
+
+ +

Types of texture coordinates that can be used for rendering.

+ + + +
Enumerator
Normalized  +

Texture coordinates in range [0 .. 1].

+
Pixels  +

Texture coordinates in range [0 .. size].

+
+ +

Definition at line 55 of file Texture.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Texture::Texture ()
+
+ +

Default constructor.

+

Creates an empty texture.

+ +
+
+ +
+
+ + + + + + + + +
sf::Texture::Texture (const Texturecopy)
+
+ +

Copy constructor.

+
Parameters
+ + +
copyinstance to copy
+
+
+ +
+
+ +
+
+ + + + + + + +
sf::Texture::~Texture ()
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static void sf::Texture::bind (const Texturetexture,
CoordinateType coordinateType = Normalized 
)
+
+static
+
+ +

Bind a texture for rendering.

+

This function is not part of the graphics API, it mustn't be used when drawing SFML entities. It must be used only if you mix sf::Texture with OpenGL code.

+
sf::Texture t1, t2;
+
...
+
sf::Texture::bind(&t1);
+
// draw OpenGL stuff that use t1...
+ +
// draw OpenGL stuff that use t2...
+ +
// draw OpenGL stuff that use no texture...
+

The coordinateType argument controls how texture coordinates will be interpreted. If Normalized (the default), they must be in range [0 .. 1], which is the default way of handling texture coordinates with OpenGL. If Pixels, they must be given in pixels (range [0 .. size]). This mode is used internally by the graphics classes of SFML, it makes the definition of texture coordinates more intuitive for the high-level API, users don't need to compute normalized values.

+
Parameters
+ + + +
texturePointer to the texture to bind, can be null to use no texture
coordinateTypeType of texture coordinates to use
+
+
+ +
+
+ +
+
+ + + + + + + +
Image sf::Texture::copyToImage () const
+
+ +

Copy the texture pixels to an image.

+

This function performs a slow operation that downloads the texture's pixels from the graphics card and copies them to a new image, potentially applying transformations to pixels if necessary (texture may be padded or flipped).

+
Returns
Image containing the texture's pixels
+
See Also
loadFromImage
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Texture::create (unsigned int width,
unsigned int height 
)
+
+ +

Create the texture.

+

If this function fails, the texture is left unchanged.

+
Parameters
+ + + +
widthWidth of the texture
heightHeight of the texture
+
+
+
Returns
True if creation was successful
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static unsigned int sf::Texture::getMaximumSize ()
+
+static
+
+ +

Get the maximum texture size allowed.

+

This maximum size is defined by the graphics driver. You can expect a value of 512 pixels for low-end graphics card, and up to 8192 pixels or more for newer hardware.

+
Returns
Maximum size allowed for textures, in pixels
+ +
+
+ +
+
+ + + + + + + +
Vector2u sf::Texture::getSize () const
+
+ +

Return the size of the texture.

+
Returns
Size in pixels
+ +
+
+ +
+
+ + + + + + + +
bool sf::Texture::isRepeated () const
+
+ +

Tell whether the texture is repeated or not.

+
Returns
True if repeat mode is enabled, false if it is disabled
+
See Also
setRepeated
+ +
+
+ +
+
+ + + + + + + +
bool sf::Texture::isSmooth () const
+
+ +

Tell whether the smooth filter is enabled or not.

+
Returns
True if smoothing is enabled, false if it is disabled
+
See Also
setSmooth
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Texture::loadFromFile (const std::string & filename,
const IntRectarea = IntRect() 
)
+
+ +

Load the texture from a file on disk.

+

This function is a shortcut for the following code:

+
sf::Image image;
+
image.loadFromFile(filename);
+
texture.loadFromImage(image, area);
+

The area argument can be used to load only a sub-rectangle of the whole image. If you want the entire image then leave the default value (which is an empty IntRect). If the area rectangle crosses the bounds of the image, it is adjusted to fit the image size.

+

The maximum size for a texture depends on the graphics driver and can be retrieved with the getMaximumSize function.

+

If this function fails, the texture is left unchanged.

+
Parameters
+ + + +
filenamePath of the image file to load
areaArea of the image to load
+
+
+
Returns
True if loading was successful
+
See Also
loadFromMemory, loadFromStream, loadFromImage
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Texture::loadFromImage (const Imageimage,
const IntRectarea = IntRect() 
)
+
+ +

Load the texture from an image.

+

The area argument can be used to load only a sub-rectangle of the whole image. If you want the entire image then leave the default value (which is an empty IntRect). If the area rectangle crosses the bounds of the image, it is adjusted to fit the image size.

+

The maximum size for a texture depends on the graphics driver and can be retrieved with the getMaximumSize function.

+

If this function fails, the texture is left unchanged.

+
Parameters
+ + + +
imageImage to load into the texture
areaArea of the image to load
+
+
+
Returns
True if loading was successful
+
See Also
loadFromFile, loadFromMemory
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool sf::Texture::loadFromMemory (const void * data,
std::size_t size,
const IntRectarea = IntRect() 
)
+
+ +

Load the texture from a file in memory.

+

This function is a shortcut for the following code:

+
sf::Image image;
+
image.loadFromMemory(data, size);
+
texture.loadFromImage(image, area);
+

The area argument can be used to load only a sub-rectangle of the whole image. If you want the entire image then leave the default value (which is an empty IntRect). If the area rectangle crosses the bounds of the image, it is adjusted to fit the image size.

+

The maximum size for a texture depends on the graphics driver and can be retrieved with the getMaximumSize function.

+

If this function fails, the texture is left unchanged.

+
Parameters
+ + + + +
dataPointer to the file data in memory
sizeSize of the data to load, in bytes
areaArea of the image to load
+
+
+
Returns
True if loading was successful
+
See Also
loadFromFile, loadFromStream, loadFromImage
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool sf::Texture::loadFromStream (sf::InputStreamstream,
const IntRectarea = IntRect() 
)
+
+ +

Load the texture from a custom stream.

+

This function is a shortcut for the following code:

+
sf::Image image;
+
image.loadFromStream(stream);
+
texture.loadFromImage(image, area);
+

The area argument can be used to load only a sub-rectangle of the whole image. If you want the entire image then leave the default value (which is an empty IntRect). If the area rectangle crosses the bounds of the image, it is adjusted to fit the image size.

+

The maximum size for a texture depends on the graphics driver and can be retrieved with the getMaximumSize function.

+

If this function fails, the texture is left unchanged.

+
Parameters
+ + + +
streamSource stream to read from
areaArea of the image to load
+
+
+
Returns
True if loading was successful
+
See Also
loadFromFile, loadFromMemory, loadFromImage
+ +
+
+ +
+
+ + + + + + + + +
Texture& sf::Texture::operator= (const Textureright)
+
+ +

Overload of assignment operator.

+
Parameters
+ + +
rightInstance to assign
+
+
+
Returns
Reference to self
+ +
+
+ +
+
+ + + + + + + + +
void sf::Texture::setRepeated (bool repeated)
+
+ +

Enable or disable repeating.

+

Repeating is involved when using texture coordinates outside the texture rectangle [0, 0, width, height]. In this case, if repeat mode is enabled, the whole texture will be repeated as many times as needed to reach the coordinate (for example, if the X texture coordinate is 3 * width, the texture will be repeated 3 times). If repeat mode is disabled, the "extra space" will instead be filled with border pixels. Warning: on very old graphics cards, white pixels may appear when the texture is repeated. With such cards, repeat mode can be used reliably only if the texture has power-of-two dimensions (such as 256x128). Repeating is disabled by default.

+
Parameters
+ + +
repeatedTrue to repeat the texture, false to disable repeating
+
+
+
See Also
isRepeated
+ +
+
+ +
+
+ + + + + + + + +
void sf::Texture::setSmooth (bool smooth)
+
+ +

Enable or disable the smooth filter.

+

When the filter is activated, the texture appears smoother so that pixels are less noticeable. However if you want the texture to look exactly the same as its source file, you should leave it disabled. The smooth filter is disabled by default.

+
Parameters
+ + +
smoothTrue to enable smoothing, false to disable it
+
+
+
See Also
isSmooth
+ +
+
+ +
+
+ + + + + + + + +
void sf::Texture::update (const Uint8 * pixels)
+
+ +

Update the whole texture from an array of pixels.

+

The pixel array is assumed to have the same size as the area rectangle, and to contain 32-bits RGBA pixels.

+

No additional check is performed on the size of the pixel array, passing invalid arguments will lead to an undefined behaviour.

+

This function does nothing if pixels is null or if the texture was not previously created.

+
Parameters
+ + +
pixelsArray of pixels to copy to the texture
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Texture::update (const Uint8 * pixels,
unsigned int width,
unsigned int height,
unsigned int x,
unsigned int y 
)
+
+ +

Update a part of the texture from an array of pixels.

+

The size of the pixel array must match the width and height arguments, and it must contain 32-bits RGBA pixels.

+

No additional check is performed on the size of the pixel array or the bounds of the area to update, passing invalid arguments will lead to an undefined behaviour.

+

This function does nothing if pixels is null or if the texture was not previously created.

+
Parameters
+ + + + + + +
pixelsArray of pixels to copy to the texture
widthWidth of the pixel region contained in pixels
heightHeight of the pixel region contained in pixels
xX offset in the texture where to copy the source pixels
yY offset in the texture where to copy the source pixels
+
+
+ +
+
+ +
+
+ + + + + + + + +
void sf::Texture::update (const Imageimage)
+
+ +

Update the texture from an image.

+

Although the source image can be smaller than the texture, this function is usually used for updating the whole texture. The other overload, which has (x, y) additional arguments, is more convenient for updating a sub-area of the texture.

+

No additional check is performed on the size of the image, passing an image bigger than the texture will lead to an undefined behaviour.

+

This function does nothing if the texture was not previously created.

+
Parameters
+ + +
imageImage to copy to the texture
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Texture::update (const Imageimage,
unsigned int x,
unsigned int y 
)
+
+ +

Update a part of the texture from an image.

+

No additional check is performed on the size of the image, passing an invalid combination of image size and offset will lead to an undefined behaviour.

+

This function does nothing if the texture was not previously created.

+
Parameters
+ + + + +
imageImage to copy to the texture
xX offset in the texture where to copy the source image
yY offset in the texture where to copy the source image
+
+
+ +
+
+ +
+
+ + + + + + + + +
void sf::Texture::update (const Windowwindow)
+
+ +

Update the texture from the contents of a window.

+

Although the source window can be smaller than the texture, this function is usually used for updating the whole texture. The other overload, which has (x, y) additional arguments, is more convenient for updating a sub-area of the texture.

+

No additional check is performed on the size of the window, passing a window bigger than the texture will lead to an undefined behaviour.

+

This function does nothing if either the texture or the window was not previously created.

+
Parameters
+ + +
windowWindow to copy to the texture
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Texture::update (const Windowwindow,
unsigned int x,
unsigned int y 
)
+
+ +

Update a part of the texture from the contents of a window.

+

No additional check is performed on the size of the window, passing an invalid combination of window size and offset will lead to an undefined behaviour.

+

This function does nothing if either the texture or the window was not previously created.

+
Parameters
+ + + + +
windowWindow to copy to the texture
xX offset in the texture where to copy the source window
yY offset in the texture where to copy the source window
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Texture.png new file mode 100644 index 0000000000000000000000000000000000000000..91a912f4d87dd105c6ca4007a1c30b754838f4ad GIT binary patch literal 475 zcmV<10VMv3P)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004MNkl!5JVq^_doOcVW2^AG&8+svm}&h`8>;_4?v7D`iUq>UK)5w>gbp8A((P~ znYC19UXre=!5he0F6>fD(mfUY;?J10MaHM~*E9WGQaN8R8DD%F#|^$(EidWIyQv0W zC6LXU?9K5#zMMY7Z+~3l8>8hj&9_>7=>&VVHj*8Fw|efrpM90imF$}hY*6BegN=i6SZ + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Thread Member List
+
+
+ +

This is the complete list of members for sf::Thread, including all inherited members.

+ + + + + + + + + + + + +
launch()sf::Thread
NonCopyable()sf::NonCopyableinlineprivate
terminate()sf::Thread
Thread(F function)sf::Thread
Thread(F function, A argument)sf::Thread
Thread(void(C::*function)(), C *object)sf::Thread
Thread(F functor) (defined in sf::Thread)sf::Thread
Thread(F function, A argument) (defined in sf::Thread)sf::Thread
Thread(void(C::*function)(), C *object) (defined in sf::Thread)sf::Thread
wait()sf::Thread
~Thread()sf::Thread
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Thread.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Thread.htm new file mode 100644 index 0000000..525f47f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Thread.htm @@ -0,0 +1,371 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Thread Class Reference
+
+
+ +

Utility class to manipulate threads. + More...

+ +

#include <Thread.hpp>

+
+Inheritance diagram for sf::Thread:
+
+
+ + +sf::NonCopyable + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<typename F >
 Thread (F function)
 Construct the thread from a functor with no argument. More...
 
template<typename F , typename A >
 Thread (F function, A argument)
 Construct the thread from a functor with an argument. More...
 
template<typename C >
 Thread (void(C::*function)(), C *object)
 Construct the thread from a member function and an object. More...
 
 ~Thread ()
 Destructor. More...
 
void launch ()
 Run the thread. More...
 
void wait ()
 Wait until the thread finishes. More...
 
void terminate ()
 Terminate the thread. More...
 
+template<typename F >
 Thread (F functor)
 
+template<typename F , typename A >
 Thread (F function, A argument)
 
+template<typename C >
 Thread (void(C::*function)(), C *object)
 
+

Detailed Description

+

Utility class to manipulate threads.

+

Threads provide a way to run multiple parts of the code in parallel.

+

When you launch a new thread, the execution is split and both the new thread and the caller run in parallel.

+

To use a sf::Thread, you construct it directly with the function to execute as the entry point of the thread. sf::Thread has multiple template constructors, which means that you can use several types of entry points:

+
    +
  • non-member functions with no argument
  • +
  • non-member functions with one argument of any type
  • +
  • functors with no argument (this one is particularly useful for compatibility with boost/std::bind)
  • +
  • functors with one argument of any type
  • +
  • member functions from any class with no argument
  • +
+

The function argument, if any, is copied in the sf::Thread instance, as well as the functor (if the corresponding constructor is used). Class instances, however, are passed by pointer so you must make sure that the object won't be destroyed while the thread is still using it.

+

The thread ends when its function is terminated. If the owner sf::Thread instance is destroyed before the thread is finished, the destructor will wait (see wait())

+

Usage examples:

+
// example 1: non member function with one argument
+
+
void threadFunc(int argument)
+
{
+
...
+
}
+
+
sf::Thread thread(&threadFunc, 5);
+
thread.launch(); // start the thread (internally calls threadFunc(5))
+
// example 2: member function
+
+
class Task
+
{
+
public :
+
void run()
+
{
+
...
+
}
+
};
+
+
Task task;
+
sf::Thread thread(&Task::run, &task);
+
thread.launch(); // start the thread (internally calls task.run())
+
// example 3: functor
+
+
struct Task
+
{
+
void operator()()
+
{
+
...
+
}
+
};
+
+
sf::Thread thread(Task());
+
thread.launch(); // start the thread (internally calls operator() on the Task instance)
+

Creating parallel threads of execution can be dangerous: all threads inside the same process share the same memory space, which means that you may end up accessing the same variable from multiple threads at the same time. To prevent this kind of situations, you can use mutexes (see sf::Mutex).

+
See Also
sf::Mutex
+ +

Definition at line 48 of file Thread.hpp.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename F >
+ + + + + + + + +
sf::Thread::Thread (function)
+
+ +

Construct the thread from a functor with no argument.

+

This constructor works for function objects, as well as free function.

+

Use this constructor for this kind of function:

+
void function();
+
+
// --- or ----
+
+
struct Functor
+
{
+
void operator()();
+
};
+

Note: this does not run the thread, use Launch().

+
Parameters
+ + +
functionFunctor or free function to use as the entry point of the thread
+
+
+ +
+
+ +
+
+
+template<typename F , typename A >
+ + + + + + + + + + + + + + + + + + +
sf::Thread::Thread (function,
argument 
)
+
+ +

Construct the thread from a functor with an argument.

+

This constructor works for function objects, as well as free function. It is a template, which means that the argument can have any type (int, std::string, void*, Toto, ...).

+

Use this constructor for this kind of function:

+
void function(int arg);
+
+
// --- or ----
+
+
struct Functor
+
{
+
void operator()(std::string arg);
+
};
+

Note: this does not run the thread, use Launch().

+
Parameters
+ + + +
functionFunctor or free function to use as the entry point of the thread
argumentargument to forward to the function
+
+
+ +
+
+ +
+
+
+template<typename C >
+ + + + + + + + + + + + + + + + + + +
sf::Thread::Thread (void(C::*)() function,
C * object 
)
+
+ +

Construct the thread from a member function and an object.

+

This constructor is template, which means that you can use it with any class. Use this constructor for this kind of function:

+
class MyClass
+
{
+
public :
+
+
void function();
+
};
+

Note: this does not run the thread, use Launch().

+
Parameters
+ + + +
functionEntry point of the thread
objectPointer to the object to use
+
+
+ +
+
+ +
+
+ + + + + + + +
sf::Thread::~Thread ()
+
+ +

Destructor.

+

This destructor calls Wait(), so that the internal thread cannot survive after its sf::Thread instance is destroyed.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void sf::Thread::launch ()
+
+ +

Run the thread.

+

This function starts the entry point passed to the thread's constructor, and returns immediately. After this function returns, the thread's function is running in parallel to the calling code.

+ +
+
+ +
+
+ + + + + + + +
void sf::Thread::terminate ()
+
+ +

Terminate the thread.

+

This function immediately stops the thread, without waiting for its function to finish. Terminating a thread with this function is not safe, and can lead to local variables not being destroyed on some operating systems. You should rather try to make the thread function terminate by itself.

+ +
+
+ +
+
+ + + + + + + +
void sf::Thread::wait ()
+
+ +

Wait until the thread finishes.

+

This function will block the execution until the thread's function ends. Warning: if the thread function never ends, the calling thread will block forever. If this function is called from its owner thread, it returns without doing anything.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Thread.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Thread.png new file mode 100644 index 0000000000000000000000000000000000000000..598a56137f314a99325b9729c1071934433ba59f GIT binary patch literal 501 zcmVvTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004mNkl>eg9{kqC(Ir8|^aJL+d9PVlD~k>0e@u(M3c_a?l`2Qm_7w6v8$! zcS+?6(?^mnw651~J5pI(!X0Ctm?f2~L7GFG?S|x-l#J8!X2`kK=BK_TVkXU;{6@OU zJPpMmZ@4x;^EI2ZqFG2=sij5P*qJyI@P;KP0+hYZP57Fkfd&X zC@IDmJp}M$Jpf$fMtVHFP;R6N2G8#Dn{0EJk0Pe4m6Ttm7ass%&Mos|t z*T`x6gb;#@2mlTmB!FJsi8M8h?a_w+`D&A7m(%<=NOLxG7JJfSN^h>qdFUg}ftKj& zu--Ofy|{Y!lFq8PR|N!kqE_`9q|_tJ_zJ0%?JB1-?Ix9TYE|#mb1K!VJHqB;dT-&p r@OuJyiv|gxSAzu5D_2qoA$aHu(FhgGjoy~F00000NkvXXu0mjfc&O#R literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal-members.htm new file mode 100644 index 0000000..b94997f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal-members.htm @@ -0,0 +1,60 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::ThreadLocal Member List
+
+
+ +

This is the complete list of members for sf::ThreadLocal, including all inherited members.

+ + + + + + +
getValue() const sf::ThreadLocal
NonCopyable()sf::NonCopyableinlineprivate
setValue(void *value)sf::ThreadLocal
ThreadLocal(void *value=NULL)sf::ThreadLocal
~ThreadLocal()sf::ThreadLocal
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal.htm new file mode 100644 index 0000000..d9fa7e2 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal.htm @@ -0,0 +1,180 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::ThreadLocal Class Reference
+
+
+ +

Defines variables with thread-local storage. + More...

+ +

#include <ThreadLocal.hpp>

+
+Inheritance diagram for sf::ThreadLocal:
+
+
+ + +sf::NonCopyable +sf::ThreadLocalPtr< T > + +
+ + + + + + + + + + + + + + +

+Public Member Functions

 ThreadLocal (void *value=NULL)
 Default constructor. More...
 
 ~ThreadLocal ()
 Destructor. More...
 
void setValue (void *value)
 Set the thread-specific value of the variable. More...
 
void * getValue () const
 Retrieve the thread-specific value of the variable. More...
 
+

Detailed Description

+

Defines variables with thread-local storage.

+

This class manipulates void* parameters and thus is not appropriate for strongly-typed variables.

+

You should rather use the sf::ThreadLocalPtr template class.

+ +

Definition at line 47 of file ThreadLocal.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
sf::ThreadLocal::ThreadLocal (void * value = NULL)
+
+ +

Default constructor.

+
Parameters
+ + +
valueOptional value to initalize the variable
+
+
+ +
+
+ +
+
+ + + + + + + +
sf::ThreadLocal::~ThreadLocal ()
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void* sf::ThreadLocal::getValue () const
+
+ +

Retrieve the thread-specific value of the variable.

+
Returns
Value of the variable for the current thread
+ +
+
+ +
+
+ + + + + + + + +
void sf::ThreadLocal::setValue (void * value)
+
+ +

Set the thread-specific value of the variable.

+
Parameters
+ + +
valueValue of the variable for the current thread
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocal.png new file mode 100644 index 0000000000000000000000000000000000000000..02924d20b2fe006f6b45a825fb51ced4b28d4f07 GIT binary patch literal 878 zcmeAS@N?(olHy`uVBq!ia0vp^lYqE`gBeI#zi@H{QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;dDDWo|AM~C#gj4YMyfG+RA@kR_jb^RbD#1 z-XmJZ|1u)==J!3XW+!?c|0;6nOn~HsQ(dm91-tIEm2JQEFmX-dOVvv}Tl8bsEsme1 zoUna?tlZIU`HG%vb(UOfF@7qrGP93;zJt}%RPTGSOO~GSTC~dXu|dSs*!Mqtm+boD zH)qlpH}mY3c9GAol8nIll1ui`2~TKD_mK`R-4(kB)d=V$TxN^t^vL zU#ZsZ%WMyMp}*_@m#Mzw7xkEwa#B6$oaJtz1IAU1KPK5Pxqe!9vi*|I6Vj8NRT#>- z`WbXuy&0w*Qf2UdDAcgDfb&4m4weMX7^V#(dW;cV(@~|L$9QR~#w#&a1StR|RT#X@ zCoW44koSMQF!P(%fg2y?f@Fh#{TIpnmi}$2dsN%0$FINKyW;Wp&YeF3nUS@zFAP>R zT+6+i)13W5gXO{8JcYg9G3zgGOYfMktjoE}O^bE^7Pd=*Ods6LPwkFQd2z|WU46-M zp>p<@`q?i%VxsSDb-r2{)i5o1N9t#hPbc0B9hk2ALSS|Qc-%}!KCSyAx?H*fIY_6nM-P+65!SAo0UwiFM_msN+g5E7Q_w=?j zLj7*Aq$soY{;RF4?_FFw@t*3s>zUuhR-TNC_5N+$_c~>Frf|AK?& + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::ThreadLocalPtr< T > Member List
+
+
+ +

This is the complete list of members for sf::ThreadLocalPtr< T >, including all inherited members.

+ + + + + + + + + + + +
getValue() const sf::ThreadLocalprivate
operator T *() const sf::ThreadLocalPtr< T >
operator*() const sf::ThreadLocalPtr< T >
operator->() const sf::ThreadLocalPtr< T >
operator=(T *value)sf::ThreadLocalPtr< T >
operator=(const ThreadLocalPtr< T > &right)sf::ThreadLocalPtr< T >
setValue(void *value)sf::ThreadLocalprivate
ThreadLocal(void *value=NULL)sf::ThreadLocalprivate
ThreadLocalPtr(T *value=NULL)sf::ThreadLocalPtr< T >
~ThreadLocal()sf::ThreadLocalprivate
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocalPtr.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocalPtr.htm new file mode 100644 index 0000000..52cdcb5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocalPtr.htm @@ -0,0 +1,299 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::ThreadLocalPtr< T > Class Template Reference
+
+
+ +

Pointer to a thread-local variable. + More...

+ +

#include <ThreadLocalPtr.hpp>

+
+Inheritance diagram for sf::ThreadLocalPtr< T >:
+
+
+ + +sf::ThreadLocal + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ThreadLocalPtr (T *value=NULL)
 Default constructor. More...
 
T & operator* () const
 Overload of unary operator *. More...
 
T * operator-> () const
 Overload of operator -> More...
 
 operator T * () const
 Cast operator to implicitely convert the pointer to its raw pointer type (T*) More...
 
ThreadLocalPtr< T > & operator= (T *value)
 Assignment operator for a raw pointer parameter. More...
 
ThreadLocalPtr< T > & operator= (const ThreadLocalPtr< T > &right)
 Assignment operator for a ThreadLocalPtr parameter. More...
 
+ + + + + + + +

+Private Member Functions

void setValue (void *value)
 Set the thread-specific value of the variable. More...
 
void * getValue () const
 Retrieve the thread-specific value of the variable. More...
 
+

Detailed Description

+

template<typename T>
+class sf::ThreadLocalPtr< T >

+ +

Pointer to a thread-local variable.

+

sf::ThreadLocalPtr is a type-safe wrapper for storing pointers to thread-local variables.

+

A thread-local variable holds a different value for each different thread, unlike normal variable that are shared.

+

Its usage is completely transparent, so that it is similar to manipulating the raw pointer directly (like any smart pointer).

+

Usage example:

+
MyClass object1;
+
MyClass object2;
+ +
+
void thread1()
+
{
+
objectPtr = &object1; // doesn't impact thread2
+
...
+
}
+
+
void thread2()
+
{
+
objectPtr = &object2; // doesn't impact thread1
+
...
+
}
+
+
int main()
+
{
+
// Create and launch the two threads
+
sf::Thread t1(&thread1);
+
sf::Thread t2(&thread2);
+
t1.launch();
+
t2.launch();
+
+
return 0;
+
}
+

ThreadLocalPtr is designed for internal use; however you can use it if you feel like it fits well your implementation.

+ +

Definition at line 41 of file ThreadLocalPtr.hpp.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T >
+ + + + + + + + +
sf::ThreadLocalPtr< T >::ThreadLocalPtr (T * value = NULL)
+
+ +

Default constructor.

+
Parameters
+ + +
valueOptional value to initalize the variable
+
+
+ +

Definition at line 30 of file ThreadLocalPtr.inl.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T >
+ + + + + + + +
sf::ThreadLocalPtr< T >::operator T * () const
+
+ +

Cast operator to implicitely convert the pointer to its raw pointer type (T*)

+
Returns
Pointer to the actual object
+ +

Definition at line 54 of file ThreadLocalPtr.inl.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + +
T & sf::ThreadLocalPtr< T >::operator* () const
+
+ +

Overload of unary operator *.

+

Like raw pointers, applying the * operator returns a reference to the pointed object.

+
Returns
Reference to the pointed object
+ +

Definition at line 38 of file ThreadLocalPtr.inl.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + +
T * sf::ThreadLocalPtr< T >::operator-> () const
+
+ +

Overload of operator ->

+

Like raw pointers, applying the -> operator returns the pointed object.

+
Returns
Pointed object
+ +

Definition at line 46 of file ThreadLocalPtr.inl.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + +
ThreadLocalPtr< T > & sf::ThreadLocalPtr< T >::operator= (T * value)
+
+ +

Assignment operator for a raw pointer parameter.

+
Parameters
+ + +
valuePointer to assign
+
+
+
Returns
Reference to self
+ +

Definition at line 62 of file ThreadLocalPtr.inl.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + +
ThreadLocalPtr< T > & sf::ThreadLocalPtr< T >::operator= (const ThreadLocalPtr< T > & right)
+
+ +

Assignment operator for a ThreadLocalPtr parameter.

+
Parameters
+ + +
rightThreadLocalPtr to assign
+
+
+
Returns
Reference to self
+ +

Definition at line 71 of file ThreadLocalPtr.inl.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocalPtr.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1ThreadLocalPtr.png new file mode 100644 index 0000000000000000000000000000000000000000..1796db78d3a8670a5d4e419c99ba84320482b416 GIT binary patch literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^lYlsYgBeI3ZM_4cBm#UwT>t<74`jZ0^R=}9&;%e0 zj1L?*z}k679?0b=3GxeO04f53tEWPY7#J9zc)B=-R4~4sdvV)h1s+%PDlZ60<1)_bhBU#)K&6nU!d>Ra20C3X3{@=8-*ZM~2fz_#^bTkb}+{vef?Ui=f* zNnOt_c_aC#c*&&&)k|zXs9Jfrcd5j_I9O5c+NQ@_UE=gB>hU~2vhTm~eh+APvtdqNOu3@__tQTG8D=;&0{u6E!G;y+UCW6 + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Time Member List
+
+
+ +

This is the complete list of members for sf::Time, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
asMicroseconds() const sf::Time
asMilliseconds() const sf::Time
asSeconds() const sf::Time
microseconds (defined in sf::Time)sf::Timefriend
microseconds(Int64 amount)sf::Timerelated
milliseconds (defined in sf::Time)sf::Timefriend
milliseconds(Int32 amount)sf::Timerelated
operator!=(Time left, Time right)sf::Timerelated
operator*(Time left, float right)sf::Timerelated
operator*(Time left, Int64 right)sf::Timerelated
operator*(float left, Time right)sf::Timerelated
operator*(Int64 left, Time right)sf::Timerelated
operator*=(Time &left, float right)sf::Timerelated
operator*=(Time &left, Int64 right)sf::Timerelated
operator+(Time left, Time right)sf::Timerelated
operator+=(Time &left, Time right)sf::Timerelated
operator-(Time right)sf::Timerelated
operator-(Time left, Time right)sf::Timerelated
operator-=(Time &left, Time right)sf::Timerelated
operator/(Time left, float right)sf::Timerelated
operator/(Time left, Int64 right)sf::Timerelated
operator/=(Time &left, float right)sf::Timerelated
operator/=(Time &left, Int64 right)sf::Timerelated
operator<(Time left, Time right)sf::Timerelated
operator<=(Time left, Time right)sf::Timerelated
operator==(Time left, Time right)sf::Timerelated
operator>(Time left, Time right)sf::Timerelated
operator>=(Time left, Time right)sf::Timerelated
seconds (defined in sf::Time)sf::Timefriend
seconds(float amount)sf::Timerelated
Time()sf::Time
Zerosf::Timestatic
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Time.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Time.htm new file mode 100644 index 0000000..9b6faa8 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Time.htm @@ -0,0 +1,1320 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Represents a time value. + More...

+ +

#include <Time.hpp>

+ + + + + + + + + + + + + + +

+Public Member Functions

 Time ()
 Default constructor. More...
 
float asSeconds () const
 Return the time value as a number of seconds. More...
 
Int32 asMilliseconds () const
 Return the time value as a number of milliseconds. More...
 
Int64 asMicroseconds () const
 Return the time value as a number of microseconds. More...
 
+ + + + +

+Static Public Attributes

static const Time Zero
 Predefined "zero" time value. More...
 
+ + + + + + + +

+Friends

+Time seconds (float)
 
+Time milliseconds (Int32)
 
+Time microseconds (Int64)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
Time seconds (float amount)
 Construct a time value from a number of seconds. More...
 
Time milliseconds (Int32 amount)
 Construct a time value from a number of milliseconds. More...
 
Time microseconds (Int64 amount)
 Construct a time value from a number of microseconds. More...
 
bool operator== (Time left, Time right)
 Overload of == operator to compare two time values. More...
 
bool operator!= (Time left, Time right)
 Overload of != operator to compare two time values. More...
 
bool operator< (Time left, Time right)
 Overload of < operator to compare two time values. More...
 
bool operator> (Time left, Time right)
 Overload of > operator to compare two time values. More...
 
bool operator<= (Time left, Time right)
 Overload of <= operator to compare two time values. More...
 
bool operator>= (Time left, Time right)
 Overload of >= operator to compare two time values. More...
 
Time operator- (Time right)
 Overload of unary - operator to negate a time value. More...
 
Time operator+ (Time left, Time right)
 Overload of binary + operator to add two time values. More...
 
Timeoperator+= (Time &left, Time right)
 Overload of binary += operator to add/assign two time values. More...
 
Time operator- (Time left, Time right)
 Overload of binary - operator to subtract two time values. More...
 
Timeoperator-= (Time &left, Time right)
 Overload of binary -= operator to subtract/assign two time values. More...
 
Time operator* (Time left, float right)
 Overload of binary * operator to scale a time value. More...
 
Time operator* (Time left, Int64 right)
 Overload of binary * operator to scale a time value. More...
 
Time operator* (float left, Time right)
 Overload of binary * operator to scale a time value. More...
 
Time operator* (Int64 left, Time right)
 Overload of binary * operator to scale a time value. More...
 
Timeoperator*= (Time &left, float right)
 Overload of binary *= operator to scale/assign a time value. More...
 
Timeoperator*= (Time &left, Int64 right)
 Overload of binary *= operator to scale/assign a time value. More...
 
Time operator/ (Time left, float right)
 Overload of binary / operator to scale a time value. More...
 
Time operator/ (Time left, Int64 right)
 Overload of binary / operator to scale a time value. More...
 
Timeoperator/= (Time &left, float right)
 Overload of binary /= operator to scale/assign a time value. More...
 
Timeoperator/= (Time &left, Int64 right)
 Overload of binary /= operator to scale/assign a time value. More...
 
+

Detailed Description

+

Represents a time value.

+

sf::Time encapsulates a time value in a flexible way.

+

It allows to define a time value either as a number of seconds, milliseconds or microseconds. It also works the other way round: you can read a time value as either a number of seconds, milliseconds or microseconds.

+

By using such a flexible interface, the API doesn't impose any fixed type or resolution for time values, and let the user choose its own favorite representation.

+

Time values support the usual mathematical operations: you can add or subtract two times, multiply or divide a time by a number, compare two times, etc.

+

Since they represent a time span and not an absolute time value, times can also be negative.

+

Usage example:

+
sf::Time t1 = sf::seconds(0.1f);
+
Int32 milli = t1.asMilliseconds(); // 100
+
+
sf::Time t2 = sf::milliseconds(30);
+
Int64 micro = t2.asMicroseconds(); // 30000
+
+
sf::Time t3 = sf::microseconds(-800000);
+
float sec = t3.asSeconds(); // -0.8
+
void update(sf::Time elapsed)
+
{
+
position += speed * elapsed.asSeconds();
+
}
+
+
update(sf::milliseconds(100));
+
See Also
sf::Clock
+ +

Definition at line 40 of file Time.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Time::Time ()
+
+ +

Default constructor.

+

Sets the time value to zero.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
Int64 sf::Time::asMicroseconds () const
+
+ +

Return the time value as a number of microseconds.

+
Returns
Time in microseconds
+
See Also
asSeconds, asMilliseconds
+ +
+
+ +
+
+ + + + + + + +
Int32 sf::Time::asMilliseconds () const
+
+ +

Return the time value as a number of milliseconds.

+
Returns
Time in milliseconds
+
See Also
asSeconds, asMicroseconds
+ +
+
+ +
+
+ + + + + + + +
float sf::Time::asSeconds () const
+
+ +

Return the time value as a number of seconds.

+
Returns
Time in seconds
+
See Also
asMilliseconds, asMicroseconds
+ +
+
+

Friends And Related Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
Time microseconds (Int64 amount)
+
+related
+
+ +

Construct a time value from a number of microseconds.

+
Parameters
+ + +
amountNumber of microseconds
+
+
+
Returns
Time value constructed from the amount of microseconds
+
See Also
seconds, milliseconds
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Time milliseconds (Int32 amount)
+
+related
+
+ +

Construct a time value from a number of milliseconds.

+
Parameters
+ + +
amountNumber of milliseconds
+
+
+
Returns
Time value constructed from the amount of milliseconds
+
See Also
seconds, microseconds
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator!= (Time left,
Time right 
)
+
+related
+
+ +

Overload of != operator to compare two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
True if both time values are different
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time operator* (Time left,
float right 
)
+
+related
+
+ +

Overload of binary * operator to scale a time value.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a number)
+
+
+
Returns
left multiplied by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time operator* (Time left,
Int64 right 
)
+
+related
+
+ +

Overload of binary * operator to scale a time value.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a number)
+
+
+
Returns
left multiplied by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time operator* (float left,
Time right 
)
+
+related
+
+ +

Overload of binary * operator to scale a time value.

+
Parameters
+ + + +
leftLeft operand (a number)
rightRight operand (a time)
+
+
+
Returns
left multiplied by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time operator* (Int64 left,
Time right 
)
+
+related
+
+ +

Overload of binary * operator to scale a time value.

+
Parameters
+ + + +
leftLeft operand (a number)
rightRight operand (a time)
+
+
+
Returns
left multiplied by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time & operator*= (Timeleft,
float right 
)
+
+related
+
+ +

Overload of binary *= operator to scale/assign a time value.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a number)
+
+
+
Returns
left multiplied by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time & operator*= (Timeleft,
Int64 right 
)
+
+related
+
+ +

Overload of binary *= operator to scale/assign a time value.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a number)
+
+
+
Returns
left multiplied by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time operator+ (Time left,
Time right 
)
+
+related
+
+ +

Overload of binary + operator to add two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
Sum of the two times values
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time & operator+= (Timeleft,
Time right 
)
+
+related
+
+ +

Overload of binary += operator to add/assign two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
Sum of the two times values
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Time operator- (Time right)
+
+related
+
+ +

Overload of unary - operator to negate a time value.

+
Parameters
+ + +
rightRight operand (a time)
+
+
+
Returns
Opposite of the time value
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time operator- (Time left,
Time right 
)
+
+related
+
+ +

Overload of binary - operator to subtract two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
Difference of the two times values
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time & operator-= (Timeleft,
Time right 
)
+
+related
+
+ +

Overload of binary -= operator to subtract/assign two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
Difference of the two times values
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time operator/ (Time left,
float right 
)
+
+related
+
+ +

Overload of binary / operator to scale a time value.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a number)
+
+
+
Returns
left divided by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time operator/ (Time left,
Int64 right 
)
+
+related
+
+ +

Overload of binary / operator to scale a time value.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a number)
+
+
+
Returns
left divided by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time & operator/= (Timeleft,
float right 
)
+
+related
+
+ +

Overload of binary /= operator to scale/assign a time value.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a number)
+
+
+
Returns
left divided by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Time & operator/= (Timeleft,
Int64 right 
)
+
+related
+
+ +

Overload of binary /= operator to scale/assign a time value.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a number)
+
+
+
Returns
left divided by right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator< (Time left,
Time right 
)
+
+related
+
+ +

Overload of < operator to compare two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
True if left is lesser than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator<= (Time left,
Time right 
)
+
+related
+
+ +

Overload of <= operator to compare two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
True if left is lesser or equal than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator== (Time left,
Time right 
)
+
+related
+
+ +

Overload of == operator to compare two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
True if both time values are equal
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator> (Time left,
Time right 
)
+
+related
+
+ +

Overload of > operator to compare two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
True if left is greater than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator>= (Time left,
Time right 
)
+
+related
+
+ +

Overload of >= operator to compare two time values.

+
Parameters
+ + + +
leftLeft operand (a time)
rightRight operand (a time)
+
+
+
Returns
True if left is greater or equal than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Time seconds (float amount)
+
+related
+
+ +

Construct a time value from a number of seconds.

+
Parameters
+ + +
amountNumber of seconds
+
+
+
Returns
Time value constructed from the amount of seconds
+
See Also
milliseconds, microseconds
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Time sf::Time::Zero
+
+static
+
+ +

Predefined "zero" time value.

+ +

Definition at line 85 of file Time.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transform-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transform-members.htm new file mode 100644 index 0000000..11b83f6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transform-members.htm @@ -0,0 +1,76 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Transform Member List
+
+
+ +

This is the complete list of members for sf::Transform, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
combine(const Transform &transform)sf::Transform
getInverse() const sf::Transform
getMatrix() const sf::Transform
Identitysf::Transformstatic
operator*(const Transform &left, const Transform &right)sf::Transformrelated
operator*(const Transform &left, const Vector2f &right)sf::Transformrelated
operator*=(Transform &left, const Transform &right)sf::Transformrelated
rotate(float angle)sf::Transform
rotate(float angle, float centerX, float centerY)sf::Transform
rotate(float angle, const Vector2f &center)sf::Transform
scale(float scaleX, float scaleY)sf::Transform
scale(float scaleX, float scaleY, float centerX, float centerY)sf::Transform
scale(const Vector2f &factors)sf::Transform
scale(const Vector2f &factors, const Vector2f &center)sf::Transform
Transform()sf::Transform
Transform(float a00, float a01, float a02, float a10, float a11, float a12, float a20, float a21, float a22)sf::Transform
transformPoint(float x, float y) const sf::Transform
transformPoint(const Vector2f &point) const sf::Transform
transformRect(const FloatRect &rectangle) const sf::Transform
translate(float x, float y)sf::Transform
translate(const Vector2f &offset)sf::Transform
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transform.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transform.htm new file mode 100644 index 0000000..ec309aa --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transform.htm @@ -0,0 +1,934 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Define a 3x3 transform matrix. + More...

+ +

#include <Transform.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Transform ()
 Default constructor. More...
 
 Transform (float a00, float a01, float a02, float a10, float a11, float a12, float a20, float a21, float a22)
 Construct a transform from a 3x3 matrix. More...
 
const float * getMatrix () const
 Return the transform as a 4x4 matrix. More...
 
Transform getInverse () const
 Return the inverse of the transform. More...
 
Vector2f transformPoint (float x, float y) const
 Transform a 2D point. More...
 
Vector2f transformPoint (const Vector2f &point) const
 Transform a 2D point. More...
 
FloatRect transformRect (const FloatRect &rectangle) const
 Transform a rectangle. More...
 
Transformcombine (const Transform &transform)
 Combine the current transform with another one. More...
 
Transformtranslate (float x, float y)
 Combine the current transform with a translation. More...
 
Transformtranslate (const Vector2f &offset)
 Combine the current transform with a translation. More...
 
Transformrotate (float angle)
 Combine the current transform with a rotation. More...
 
Transformrotate (float angle, float centerX, float centerY)
 Combine the current transform with a rotation. More...
 
Transformrotate (float angle, const Vector2f &center)
 Combine the current transform with a rotation. More...
 
Transformscale (float scaleX, float scaleY)
 Combine the current transform with a scaling. More...
 
Transformscale (float scaleX, float scaleY, float centerX, float centerY)
 Combine the current transform with a scaling. More...
 
Transformscale (const Vector2f &factors)
 Combine the current transform with a scaling. More...
 
Transformscale (const Vector2f &factors, const Vector2f &center)
 Combine the current transform with a scaling. More...
 
+ + + + +

+Static Public Attributes

static const Transform Identity
 The identity transform (does nothing) More...
 
+ + + + + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
Transform operator* (const Transform &left, const Transform &right)
 Overload of binary operator * to combine two transforms. More...
 
Transformoperator*= (Transform &left, const Transform &right)
 Overload of binary operator *= to combine two transforms. More...
 
Vector2f operator* (const Transform &left, const Vector2f &right)
 Overload of binary operator * to transform a point. More...
 
+

Detailed Description

+

Define a 3x3 transform matrix.

+

A sf::Transform specifies how to translate, rotate, scale, shear, project, whatever things.

+

In mathematical terms, it defines how to transform a coordinate system into another.

+

For example, if you apply a rotation transform to a sprite, the result will be a rotated sprite. And anything that is transformed by this rotation transform will be rotated the same way, according to its initial position.

+

Transforms are typically used for drawing. But they can also be used for any computation that requires to transform points between the local and global coordinate systems of an entity (like collision detection).

+

Example:

+
// define a translation transform
+
sf::Transform translation;
+
translation.translate(20, 50);
+
+
// define a rotation transform
+
sf::Transform rotation;
+
rotation.rotate(45);
+
+
// combine them
+
sf::Transform transform = translation * rotation;
+
+
// use the result to transform stuff...
+
sf::Vector2f point = transform.transformPoint(10, 20);
+
sf::FloatRect rect = transform.transformRect(sf::FloatRect(0, 0, 10, 100));
+
See Also
sf::Transformable, sf::RenderStates
+ +

Definition at line 42 of file Transform.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Transform::Transform ()
+
+ +

Default constructor.

+

Creates an identity transform (a transform that does nothing).

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sf::Transform::Transform (float a00,
float a01,
float a02,
float a10,
float a11,
float a12,
float a20,
float a21,
float a22 
)
+
+ +

Construct a transform from a 3x3 matrix.

+
Parameters
+ + + + + + + + + + +
a00Element (0, 0) of the matrix
a01Element (0, 1) of the matrix
a02Element (0, 2) of the matrix
a10Element (1, 0) of the matrix
a11Element (1, 1) of the matrix
a12Element (1, 2) of the matrix
a20Element (2, 0) of the matrix
a21Element (2, 1) of the matrix
a22Element (2, 2) of the matrix
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
Transform& sf::Transform::combine (const Transformtransform)
+
+ +

Combine the current transform with another one.

+

The result is a transform that is equivalent to applying *this followed by transform. Mathematically, it is equivalent to a matrix multiplication.

+
Parameters
+ + +
transformTransform to combine with this transform
+
+
+
Returns
Reference to *this
+ +
+
+ +
+
+ + + + + + + +
Transform sf::Transform::getInverse () const
+
+ +

Return the inverse of the transform.

+

If the inverse cannot be computed, an identity transform is returned.

+
Returns
A new transform which is the inverse of self
+ +
+
+ +
+
+ + + + + + + +
const float* sf::Transform::getMatrix () const
+
+ +

Return the transform as a 4x4 matrix.

+

This function returns a pointer to an array of 16 floats containing the transform elements as a 4x4 matrix, which is directly compatible with OpenGL functions.

+
sf::Transform transform = ...;
+
glLoadMatrixf(transform.getMatrix());
+
Returns
Pointer to a 4x4 matrix
+ +
+
+ +
+
+ + + + + + + + +
Transform& sf::Transform::rotate (float angle)
+
+ +

Combine the current transform with a rotation.

+

This function returns a reference to *this, so that calls can be chained.

+
sf::Transform transform;
+
transform.rotate(90).translate(50, 20);
+
Parameters
+ + +
angleRotation angle, in degrees
+
+
+
Returns
Reference to *this
+
See Also
translate, scale
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Transform& sf::Transform::rotate (float angle,
float centerX,
float centerY 
)
+
+ +

Combine the current transform with a rotation.

+

The center of rotation is provided for convenience as a second argument, so that you can build rotations around arbitrary points more easily (and efficiently) than the usual translate(-center).rotate(angle).translate(center).

+

This function returns a reference to *this, so that calls can be chained.

+
sf::Transform transform;
+
transform.rotate(90, 8, 3).translate(50, 20);
+
Parameters
+ + + + +
angleRotation angle, in degrees
centerXX coordinate of the center of rotation
centerYY coordinate of the center of rotation
+
+
+
Returns
Reference to *this
+
See Also
translate, scale
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Transform& sf::Transform::rotate (float angle,
const Vector2fcenter 
)
+
+ +

Combine the current transform with a rotation.

+

The center of rotation is provided for convenience as a second argument, so that you can build rotations around arbitrary points more easily (and efficiently) than the usual translate(-center).rotate(angle).translate(center).

+

This function returns a reference to *this, so that calls can be chained.

+
sf::Transform transform;
+
transform.rotate(90, sf::Vector2f(8, 3)).translate(sf::Vector2f(50, 20));
+
Parameters
+ + + +
angleRotation angle, in degrees
centerCenter of rotation
+
+
+
Returns
Reference to *this
+
See Also
translate, scale
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Transform& sf::Transform::scale (float scaleX,
float scaleY 
)
+
+ +

Combine the current transform with a scaling.

+

This function returns a reference to *this, so that calls can be chained.

+
sf::Transform transform;
+
transform.scale(2, 1).rotate(45);
+
Parameters
+ + + +
scaleXScaling factor on the X axis
scaleYScaling factor on the Y axis
+
+
+
Returns
Reference to *this
+
See Also
translate, rotate
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Transform& sf::Transform::scale (float scaleX,
float scaleY,
float centerX,
float centerY 
)
+
+ +

Combine the current transform with a scaling.

+

The center of scaling is provided for convenience as a second argument, so that you can build scaling around arbitrary points more easily (and efficiently) than the usual translate(-center).scale(factors).translate(center).

+

This function returns a reference to *this, so that calls can be chained.

+
sf::Transform transform;
+
transform.scale(2, 1, 8, 3).rotate(45);
+
Parameters
+ + + + + +
scaleXScaling factor on X axis
scaleYScaling factor on Y axis
centerXX coordinate of the center of scaling
centerYY coordinate of the center of scaling
+
+
+
Returns
Reference to *this
+
See Also
translate, rotate
+ +
+
+ +
+
+ + + + + + + + +
Transform& sf::Transform::scale (const Vector2ffactors)
+
+ +

Combine the current transform with a scaling.

+

This function returns a reference to *this, so that calls can be chained.

+
sf::Transform transform;
+
transform.scale(sf::Vector2f(2, 1)).rotate(45);
+
Parameters
+ + +
factorsScaling factors
+
+
+
Returns
Reference to *this
+
See Also
translate, rotate
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Transform& sf::Transform::scale (const Vector2ffactors,
const Vector2fcenter 
)
+
+ +

Combine the current transform with a scaling.

+

The center of scaling is provided for convenience as a second argument, so that you can build scaling around arbitrary points more easily (and efficiently) than the usual translate(-center).scale(factors).translate(center).

+

This function returns a reference to *this, so that calls can be chained.

+
sf::Transform transform;
+
transform.scale(sf::Vector2f(2, 1), sf::Vector2f(8, 3)).rotate(45);
+
Parameters
+ + + +
factorsScaling factors
centerCenter of scaling
+
+
+
Returns
Reference to *this
+
See Also
translate, rotate
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Vector2f sf::Transform::transformPoint (float x,
float y 
) const
+
+ +

Transform a 2D point.

+
Parameters
+ + + +
xX coordinate of the point to transform
yY coordinate of the point to transform
+
+
+
Returns
Transformed point
+ +
+
+ +
+
+ + + + + + + + +
Vector2f sf::Transform::transformPoint (const Vector2fpoint) const
+
+ +

Transform a 2D point.

+
Parameters
+ + +
pointPoint to transform
+
+
+
Returns
Transformed point
+ +
+
+ +
+
+ + + + + + + + +
FloatRect sf::Transform::transformRect (const FloatRectrectangle) const
+
+ +

Transform a rectangle.

+

Since SFML doesn't provide support for oriented rectangles, the result of this function is always an axis-aligned rectangle. Which means that if the transform contains a rotation, the bounding rectangle of the transformed rectangle is returned.

+
Parameters
+ + +
rectangleRectangle to transform
+
+
+
Returns
Transformed rectangle
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Transform& sf::Transform::translate (float x,
float y 
)
+
+ +

Combine the current transform with a translation.

+

This function returns a reference to *this, so that calls can be chained.

+
sf::Transform transform;
+
transform.translate(100, 200).rotate(45);
+
Parameters
+ + + +
xOffset to apply on X axis
yOffset to apply on Y axis
+
+
+
Returns
Reference to *this
+
See Also
rotate, scale
+ +
+
+ +
+
+ + + + + + + + +
Transform& sf::Transform::translate (const Vector2foffset)
+
+ +

Combine the current transform with a translation.

+

This function returns a reference to *this, so that calls can be chained.

+
sf::Transform transform;
+
transform.translate(sf::Vector2f(100, 200)).rotate(45);
+
Parameters
+ + +
offsetTranslation offset to apply
+
+
+
Returns
Reference to *this
+
See Also
rotate, scale
+ +
+
+

Friends And Related Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Transform operator* (const Transformleft,
const Transformright 
)
+
+related
+
+ +

Overload of binary operator * to combine two transforms.

+

This call is equivalent to calling Transform(left).combine(right).

+
Parameters
+ + + +
leftLeft operand (the first transform)
rightRight operand (the second transform)
+
+
+
Returns
New combined transform
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2f operator* (const Transformleft,
const Vector2fright 
)
+
+related
+
+ +

Overload of binary operator * to transform a point.

+

This call is equivalent to calling left.transformPoint(right).

+
Parameters
+ + + +
leftLeft operand (the transform)
rightRight operand (the point to transform)
+
+
+
Returns
New transformed point
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Transform & operator*= (Transformleft,
const Transformright 
)
+
+related
+
+ +

Overload of binary operator *= to combine two transforms.

+

This call is equivalent to calling left.combine(right).

+
Parameters
+ + + +
leftLeft operand (the first transform)
rightRight operand (the second transform)
+
+
+
Returns
The combined transform
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Transform sf::Transform::Identity
+
+static
+
+ +

The identity transform (does nothing)

+ +

Definition at line 354 of file Transform.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable-members.htm new file mode 100644 index 0000000..7456797 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable-members.htm @@ -0,0 +1,75 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Transformable Member List
+
+
+ +

This is the complete list of members for sf::Transformable, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
getInverseTransform() const sf::Transformable
getOrigin() const sf::Transformable
getPosition() const sf::Transformable
getRotation() const sf::Transformable
getScale() const sf::Transformable
getTransform() const sf::Transformable
move(float offsetX, float offsetY)sf::Transformable
move(const Vector2f &offset)sf::Transformable
rotate(float angle)sf::Transformable
scale(float factorX, float factorY)sf::Transformable
scale(const Vector2f &factor)sf::Transformable
setOrigin(float x, float y)sf::Transformable
setOrigin(const Vector2f &origin)sf::Transformable
setPosition(float x, float y)sf::Transformable
setPosition(const Vector2f &position)sf::Transformable
setRotation(float angle)sf::Transformable
setScale(float factorX, float factorY)sf::Transformable
setScale(const Vector2f &factors)sf::Transformable
Transformable()sf::Transformable
~Transformable()sf::Transformablevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable.htm new file mode 100644 index 0000000..f5f16cc --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable.htm @@ -0,0 +1,715 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Transformable Class Reference
+
+
+ +

Decomposed transform defined by a position, a rotation and a scale. + More...

+ +

#include <Transformable.hpp>

+
+Inheritance diagram for sf::Transformable:
+
+
+ + +sf::Shape +sf::Sprite +sf::Text +sf::CircleShape +sf::ConvexShape +sf::RectangleShape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Transformable ()
 Default constructor. More...
 
virtual ~Transformable ()
 Virtual destructor. More...
 
void setPosition (float x, float y)
 set the position of the object More...
 
void setPosition (const Vector2f &position)
 set the position of the object More...
 
void setRotation (float angle)
 set the orientation of the object More...
 
void setScale (float factorX, float factorY)
 set the scale factors of the object More...
 
void setScale (const Vector2f &factors)
 set the scale factors of the object More...
 
void setOrigin (float x, float y)
 set the local origin of the object More...
 
void setOrigin (const Vector2f &origin)
 set the local origin of the object More...
 
const Vector2fgetPosition () const
 get the position of the object More...
 
float getRotation () const
 get the orientation of the object More...
 
const Vector2fgetScale () const
 get the current scale of the object More...
 
const Vector2fgetOrigin () const
 get the local origin of the object More...
 
void move (float offsetX, float offsetY)
 Move the object by a given offset. More...
 
void move (const Vector2f &offset)
 Move the object by a given offset. More...
 
void rotate (float angle)
 Rotate the object. More...
 
void scale (float factorX, float factorY)
 Scale the object. More...
 
void scale (const Vector2f &factor)
 Scale the object. More...
 
const TransformgetTransform () const
 get the combined transform of the object More...
 
const TransformgetInverseTransform () const
 get the inverse of the combined transform of the object More...
 
+

Detailed Description

+

Decomposed transform defined by a position, a rotation and a scale.

+

This class is provided for convenience, on top of sf::Transform.

+

sf::Transform, as a low-level class, offers a great level of flexibility but it is not always convenient to manage. Indeed, one can easily combine any kind of operation, such as a translation followed by a rotation followed by a scaling, but once the result transform is built, there's no way to go backward and, let's say, change only the rotation without modifying the translation and scaling. The entire transform must be recomputed, which means that you need to retrieve the initial translation and scale factors as well, and combine them the same way you did before updating the rotation. This is a tedious operation, and it requires to store all the individual components of the final transform.

+

That's exactly what sf::Transformable was written for: it hides these variables and the composed transform behind an easy to use interface. You can set or get any of the individual components without worrying about the others. It also provides the composed transform (as a sf::Transform), and keeps it up-to-date.

+

In addition to the position, rotation and scale, sf::Transformable provides an "origin" component, which represents the local origin of the three other components. Let's take an example with a 10x10 pixels sprite. By default, the sprite is positioned/rotated/scaled relatively to its top-left corner, because it is the local point (0, 0). But if we change the origin to be (5, 5), the sprite will be positioned/rotated/scaled around its center instead. And if we set the origin to (10, 10), it will be transformed around its bottom-right corner.

+

To keep the sf::Transformable class simple, there's only one origin for all the components. You cannot position the sprite relatively to its top-left corner while rotating it around its center, for example. To do such things, use sf::Transform directly.

+

sf::Transformable can be used as a base class. It is often combined with sf::Drawable – that's what SFML's sprites, texts and shapes do.

+
class MyEntity : public sf::Transformable, public sf::Drawable
+
{
+
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
+
{
+
states.transform *= getTransform();
+
target.draw(..., states);
+
}
+
};
+
+
MyEntity entity;
+
entity.setPosition(10, 20);
+
entity.setRotation(45);
+
window.draw(entity);
+

It can also be used as a member, if you don't want to use its API directly (because you don't need all its functions, or you have different naming conventions for example).

+
class MyEntity
+
{
+
public :
+
void SetPosition(const MyVector& v)
+
{
+
myTransform.setPosition(v.x(), v.y());
+
}
+
+
void Draw(sf::RenderTarget& target) const
+
{
+
target.draw(..., myTransform.getTransform());
+
}
+
+
private :
+
sf::Transformable myTransform;
+
};
+
See Also
sf::Transform
+ +

Definition at line 41 of file Transformable.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Transformable::Transformable ()
+
+ +

Default constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::Transformable::~Transformable ()
+
+virtual
+
+ +

Virtual destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
const Transform& sf::Transformable::getInverseTransform () const
+
+ +

get the inverse of the combined transform of the object

+
Returns
Inverse of the combined transformations applied to the object
+
See Also
getTransform
+ +
+
+ +
+
+ + + + + + + +
const Vector2f& sf::Transformable::getOrigin () const
+
+ +

get the local origin of the object

+
Returns
Current origin
+
See Also
setOrigin
+ +
+
+ +
+
+ + + + + + + +
const Vector2f& sf::Transformable::getPosition () const
+
+ +

get the position of the object

+
Returns
Current position
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + + + +
float sf::Transformable::getRotation () const
+
+ +

get the orientation of the object

+

The rotation is always in the range [0, 360].

+
Returns
Current rotation, in degrees
+
See Also
setRotation
+ +
+
+ +
+
+ + + + + + + +
const Vector2f& sf::Transformable::getScale () const
+
+ +

get the current scale of the object

+
Returns
Current scale factors
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + +
const Transform& sf::Transformable::getTransform () const
+
+ +

get the combined transform of the object

+
Returns
Transform combining the position/rotation/scale/origin of the object
+
See Also
getInverseTransform
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::move (float offsetX,
float offsetY 
)
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f pos = object.getPosition();
+
object.setPosition(pos.x + offsetX, pos.y + offsetY);
+
Parameters
+ + + +
offsetXX offset
offsetYY offset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + + + + +
void sf::Transformable::move (const Vector2foffset)
+
+ +

Move the object by a given offset.

+

This function adds to the current position of the object, unlike setPosition which overwrites it. Thus, it is equivalent to the following code:

+
object.setPosition(object.getPosition() + offset);
+
Parameters
+ + +
offsetOffset
+
+
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + + + + +
void sf::Transformable::rotate (float angle)
+
+ +

Rotate the object.

+

This function adds to the current rotation of the object, unlike setRotation which overwrites it. Thus, it is equivalent to the following code:

+
object.setRotation(object.getRotation() + angle);
+
Parameters
+ + +
angleAngle of rotation, in degrees
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::scale (float factorX,
float factorY 
)
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factorX, scale.y * factorY);
+
Parameters
+ + + +
factorXHorizontal scale factor
factorYVertical scale factor
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + + +
void sf::Transformable::scale (const Vector2ffactor)
+
+ +

Scale the object.

+

This function multiplies the current scale of the object, unlike setScale which overwrites it. Thus, it is equivalent to the following code:

+
sf::Vector2f scale = object.getScale();
+
object.setScale(scale.x * factor.x, scale.y * factor.y);
+
Parameters
+ + +
factorScale factors
+
+
+
See Also
setScale
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setOrigin (float x,
float y 
)
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new origin
yY coordinate of the new origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + + + + +
void sf::Transformable::setOrigin (const Vector2forigin)
+
+ +

set the local origin of the object

+

The origin of an object defines the center point for all transformations (position, scale, rotation). The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0).

+
Parameters
+ + +
originNew origin
+
+
+
See Also
getOrigin
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setPosition (float x,
float y 
)
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + + +
xX coordinate of the new position
yY coordinate of the new position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + + + + +
void sf::Transformable::setPosition (const Vector2fposition)
+
+ +

set the position of the object

+

This function completely overwrites the previous position. See the move function to apply an offset based on the previous position instead. The default position of a transformable object is (0, 0).

+
Parameters
+ + +
positionNew position
+
+
+
See Also
move, getPosition
+ +
+
+ +
+
+ + + + + + + + +
void sf::Transformable::setRotation (float angle)
+
+ +

set the orientation of the object

+

This function completely overwrites the previous rotation. See the rotate function to add an angle based on the previous rotation instead. The default rotation of a transformable object is 0.

+
Parameters
+ + +
angleNew rotation, in degrees
+
+
+
See Also
rotate, getRotation
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Transformable::setScale (float factorX,
float factorY 
)
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + + +
factorXNew horizontal scale factor
factorYNew vertical scale factor
+
+
+
See Also
scale, getScale
+ +
+
+ +
+
+ + + + + + + + +
void sf::Transformable::setScale (const Vector2ffactors)
+
+ +

set the scale factors of the object

+

This function completely overwrites the previous scale. See the scale function to add a factor based on the previous scale instead. The default scale of a transformable object is (1, 1).

+
Parameters
+ + +
factorsNew scale factors
+
+
+
See Also
scale, getScale
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Transformable.png new file mode 100644 index 0000000000000000000000000000000000000000..6865caa03bc82626135ca4887bd2613ebce5a432 GIT binary patch literal 1671 zcmah~X;2eM7@d&Fp&~4(p}c}tf&wav3MhmG)@zi@EQ+q;fx3#yr6589Nr8((P%t2r zgi|A^fG!?f0>iSh5fITJAVdy<5M$)pWC%HCW=DVRpVh8<{a#nS`s(X?Usosjc3FK#yhEA%gLTx8ZgHj^) zJkZ+(0i7KiJh1$1h2*EFg{3$xmMbhGcs$ORF zD<#AA`agqB3HnC?_XCxhFD>BBW1pi-c=N_pNwwO8 z45rH*6NUKsoBZ18jwb#6fAlgQUq6Zfk+*AA6q(%@gogBM3F98s>QryHejVFuUmF%x z_fD6eAYD9KH-I<6Of!%hToq~v51Rf5cLTGn^Z?@Ivv5GaV0$U0U|-E^lwgC~&q##z z2=QGKO!Q5W5Pi8g{{W=75&nL3Ai@j^UkMmCHdV%P*5v?}hGe{z#!x+u<)Ik4f#F|9 zKz!&_8O3t$_f7o;LE`DXH5EZ(a#;LE0@JXJ8k_fYhNp}Qz6n^8@S-%?ll>6vOkl2B zTMzFRE%)4zPj4@t;Dz7lPKJ`xkV|XcF4hR|QF;hB;4FKjiKxgXTn6cW=TZk9oUP#vy0)ihBoa+t_xErPw)bY_*!KG`WE8LAXT@u2X7l zUd2|hR~kK~TCuu64%{+ALrSbimk!!FVjDD!Cn~!YBdHD2Y1Cao@xnqClvZbDO|_bl z)#uoEp-v?kg;LgeWV;wkqcMIPJ7%_~x~MN?HWl0vip0FSmsF>Pq zM3rqT#go!2kCSH!+Rv8^9fYW{X7b87Jf|i+Oi;7Bi*1esi7N^4S*HXzwOUi3j>bESFIO;NU^r@JN08$no!5dxDis6paA+^H5$ zsbW$DBk!YB7p;zX-oPkXtWxv&(*B&)b#MSL-7UC;-PdYH9RB^>njYr^53&Wy_aSxS zbTXr8OtUNbHhK~QL!1T_gXK<(NB(ZZ1ZW|XTU-cjp~H8_A+atMHmQp<%b4eUE8vdW zZq(~HP${jJz=T8>eHCFLvx#>FYmkqO!26H1AXZwv*w$ZN?qYzsdHzKW#oW% z&dHbjV>JTUeL$>jP4|xEqe_!TU6?~te?PmRe6kl}U4QO~1zPtko6)(do;7lWl~U-$ zQ-RVc809v1fa%wwKezmRgq|PpNG% + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::UdpSocket Member List
+
+
+ +

This is the complete list of members for sf::UdpSocket, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
AnyPort enum valuesf::Socket
bind(unsigned short port)sf::UdpSocket
close()sf::Socketprotected
create()sf::Socketprotected
create(SocketHandle handle)sf::Socketprotected
Disconnected enum valuesf::Socket
Done enum valuesf::Socket
Error enum valuesf::Socket
getHandle() const sf::Socketprotected
getLocalPort() const sf::UdpSocket
isBlocking() const sf::Socket
MaxDatagramSize enum valuesf::UdpSocket
NotReady enum valuesf::Socket
receive(void *data, std::size_t size, std::size_t &received, IpAddress &remoteAddress, unsigned short &remotePort)sf::UdpSocket
receive(Packet &packet, IpAddress &remoteAddress, unsigned short &remotePort)sf::UdpSocket
send(const void *data, std::size_t size, const IpAddress &remoteAddress, unsigned short remotePort)sf::UdpSocket
send(Packet &packet, const IpAddress &remoteAddress, unsigned short remotePort)sf::UdpSocket
setBlocking(bool blocking)sf::Socket
Socket(Type type)sf::Socketprotected
Status enum namesf::Socket
Tcp enum valuesf::Socketprotected
Type enum namesf::Socketprotected
Udp enum valuesf::Socketprotected
UdpSocket()sf::UdpSocket
unbind()sf::UdpSocket
~Socket()sf::Socketvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1UdpSocket.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1UdpSocket.htm new file mode 100644 index 0000000..08d46cf --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1UdpSocket.htm @@ -0,0 +1,785 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Specialized socket using the UDP protocol. + More...

+ +

#include <UdpSocket.hpp>

+
+Inheritance diagram for sf::UdpSocket:
+
+
+ + +sf::Socket +sf::NonCopyable + +
+ + + + + + + + + + +

+Public Types

enum  { MaxDatagramSize = 65507 + }
 
enum  Status {
+  Done, +
+  NotReady, +
+  Disconnected, +
+  Error +
+ }
 Status codes that may be returned by socket functions. More...
 
enum  { AnyPort = 0 + }
 Some special values used by sockets. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 UdpSocket ()
 Default constructor. More...
 
unsigned short getLocalPort () const
 Get the port to which the socket is bound locally. More...
 
Status bind (unsigned short port)
 Bind the socket to a specific port. More...
 
void unbind ()
 Unbind the socket from the local port to which it is bound. More...
 
Status send (const void *data, std::size_t size, const IpAddress &remoteAddress, unsigned short remotePort)
 Send raw data to a remote peer. More...
 
Status receive (void *data, std::size_t size, std::size_t &received, IpAddress &remoteAddress, unsigned short &remotePort)
 Receive raw data from a remote peer. More...
 
Status send (Packet &packet, const IpAddress &remoteAddress, unsigned short remotePort)
 Send a formatted packet of data to a remote peer. More...
 
Status receive (Packet &packet, IpAddress &remoteAddress, unsigned short &remotePort)
 Receive a formatted packet of data from a remote peer. More...
 
void setBlocking (bool blocking)
 Set the blocking state of the socket. More...
 
bool isBlocking () const
 Tell whether the socket is in blocking or non-blocking mode. More...
 
+ + + + +

+Protected Types

enum  Type {
+  Tcp, +
+  Udp +
+ }
 Types of protocols that the socket can use. More...
 
+ + + + + + + + + + + + + +

+Protected Member Functions

SocketHandle getHandle () const
 Return the internal handle of the socket. More...
 
void create ()
 Create the internal representation of the socket. More...
 
void create (SocketHandle handle)
 Create the internal representation of the socket from a socket handle. More...
 
void close ()
 Close the socket gracefully. More...
 
+

Detailed Description

+

Specialized socket using the UDP protocol.

+

A UDP socket is a connectionless socket.

+

Instead of connecting once to a remote host, like TCP sockets, it can send to and receive from any host at any time.

+

It is a datagram protocol: bounded blocks of data (datagrams) are transfered over the network rather than a continuous stream of data (TCP). Therefore, one call to send will always match one call to receive (if the datagram is not lost), with the same data that was sent.

+

The UDP protocol is lightweight but unreliable. Unreliable means that datagrams may be duplicated, be lost or arrive reordered. However, if a datagram arrives, its data is guaranteed to be valid.

+

UDP is generally used for real-time communication (audio or video streaming, real-time games, etc.) where speed is crucial and lost data doesn't matter much.

+

Sending and receiving data can use either the low-level or the high-level functions. The low-level functions process a raw sequence of bytes, whereas the high-level interface uses packets (see sf::Packet), which are easier to use and provide more safety regarding the data that is exchanged. You can look at the sf::Packet class to get more details about how they work.

+

It is important to note that UdpSocket is unable to send datagrams bigger than MaxDatagramSize. In this case, it returns an error and doesn't send anything. This applies to both raw data and packets. Indeed, even packets are unable to split and recompose data, due to the unreliability of the protocol (dropped, mixed or duplicated datagrams may lead to a big mess when trying to recompose a packet).

+

If the socket is bound to a port, it is automatically unbound from it when the socket is destroyed. However, you can unbind the socket explicitely with the Unbind function if necessary, to stop receiving messages or make the port available for other sockets.

+

Usage example:

+
// ----- The client -----
+
+
// Create a socket and bind it to the port 55001
+ +
socket.bind(55001);
+
+
// Send a message to 192.168.1.50 on port 55002
+
std::string message = "Hi, I am " + sf::IpAddress::getLocalAddress().toString();
+
socket.send(message.c_str(), message.size() + 1, "192.168.1.50", 55002);
+
+
// Receive an answer (most likely from 192.168.1.50, but could be anyone else)
+
char buffer[1024];
+
std::size_t received = 0;
+ +
unsigned short port;
+
socket.receive(buffer, sizeof(buffer), received, sender, port);
+
std::cout << sender.ToString() << " said: " << buffer << std::endl;
+
+
// ----- The server -----
+
+
// Create a socket and bind it to the port 55002
+ +
socket.bind(55002);
+
+
// Receive a message from anyone
+
char buffer[1024];
+
std::size_t received = 0;
+ +
unsigned short port;
+
socket.receive(buffer, sizeof(buffer), received, sender, port);
+
std::cout << sender.ToString() << " said: " << buffer << std::endl;
+
+
// Send an answer
+
std::string message = "Welcome " + sender.toString();
+
socket.send(message.c_str(), message.size() + 1, sender, port);
+
See Also
sf::Socket, sf::TcpSocket, sf::Packet
+ +

Definition at line 45 of file UdpSocket.hpp.

+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
anonymous enum
+
+inherited
+
+ +

Some special values used by sockets.

+ + +
Enumerator
AnyPort  +

Special value that tells the system to pick any available port.

+
+ +

Definition at line 65 of file Socket.hpp.

+ +
+
+ +
+
+ + + + +
anonymous enum
+
+ + +
Enumerator
MaxDatagramSize  +

The maximum number of bytes that can be sent in a single UDP datagram.

+
+ +

Definition at line 52 of file UdpSocket.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
enum sf::Socket::Status
+
+inherited
+
+ +

Status codes that may be returned by socket functions.

+ + + + + +
Enumerator
Done  +

The socket has sent / received the data.

+
NotReady  +

The socket is not ready to send / receive data yet.

+
Disconnected  +

The TCP socket has been disconnected.

+
Error  +

An unexpected error happened.

+
+ +

Definition at line 53 of file Socket.hpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
enum sf::Socket::Type
+
+protectedinherited
+
+ +

Types of protocols that the socket can use.

+ + + +
Enumerator
Tcp  +

TCP protocol.

+
Udp  +

UDP protocol.

+
+ +

Definition at line 113 of file Socket.hpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::UdpSocket::UdpSocket ()
+
+ +

Default constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
Status sf::UdpSocket::bind (unsigned short port)
+
+ +

Bind the socket to a specific port.

+

Binding the socket to a port is necessary for being able to receive data on that port. You can use the special value Socket::AnyPort to tell the system to automatically pick an available port, and then call getLocalPort to retrieve the chosen port.

+
Parameters
+ + +
portPort to bind the socket to
+
+
+
Returns
Status code
+
See Also
unbind, getLocalPort
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Socket::close ()
+
+protectedinherited
+
+ +

Close the socket gracefully.

+

This function can only be accessed by derived classes.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sf::Socket::create ()
+
+protectedinherited
+
+ +

Create the internal representation of the socket.

+

This function can only be accessed by derived classes.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Socket::create (SocketHandle handle)
+
+protectedinherited
+
+ +

Create the internal representation of the socket from a socket handle.

+

This function can only be accessed by derived classes.

+
Parameters
+ + +
handleOS-specific handle of the socket to wrap
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SocketHandle sf::Socket::getHandle () const
+
+protectedinherited
+
+ +

Return the internal handle of the socket.

+

The returned handle may be invalid if the socket was not created yet (or already destroyed). This function can only be accessed by derived classes.

+
Returns
The internal (OS-specific) handle of the socket
+ +
+
+ +
+
+ + + + + + + +
unsigned short sf::UdpSocket::getLocalPort () const
+
+ +

Get the port to which the socket is bound locally.

+

If the socket is not bound to a port, this function returns 0.

+
Returns
Port to which the socket is bound
+
See Also
bind
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sf::Socket::isBlocking () const
+
+inherited
+
+ +

Tell whether the socket is in blocking or non-blocking mode.

+
Returns
True if the socket is blocking, false otherwise
+
See Also
setBlocking
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Status sf::UdpSocket::receive (void * data,
std::size_t size,
std::size_t & received,
IpAddressremoteAddress,
unsigned short & remotePort 
)
+
+ +

Receive raw data from a remote peer.

+

In blocking mode, this function will wait until some bytes are actually received. Be careful to use a buffer which is large enough for the data that you intend to receive, if it is too small then an error will be returned and all the data will be lost.

+
Parameters
+ + + + + + +
dataPointer to the array to fill with the received bytes
sizeMaximum number of bytes that can be received
receivedThis variable is filled with the actual number of bytes received
remoteAddressAddress of the peer that sent the data
remotePortPort of the peer that sent the data
+
+
+
Returns
Status code
+
See Also
send
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Status sf::UdpSocket::receive (Packetpacket,
IpAddressremoteAddress,
unsigned short & remotePort 
)
+
+ +

Receive a formatted packet of data from a remote peer.

+

In blocking mode, this function will wait until the whole packet has been received.

+
Parameters
+ + + + +
packetPacket to fill with the received data
remoteAddressAddress of the peer that sent the data
remotePortPort of the peer that sent the data
+
+
+
Returns
Status code
+
See Also
send
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Status sf::UdpSocket::send (const void * data,
std::size_t size,
const IpAddressremoteAddress,
unsigned short remotePort 
)
+
+ +

Send raw data to a remote peer.

+

Make sure that size is not greater than UdpSocket::MaxDatagramSize, otherwise this function will fail and no data will be sent.

+
Parameters
+ + + + + +
dataPointer to the sequence of bytes to send
sizeNumber of bytes to send
remoteAddressAddress of the receiver
remotePortPort of the receiver to send the data to
+
+
+
Returns
Status code
+
See Also
receive
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Status sf::UdpSocket::send (Packetpacket,
const IpAddressremoteAddress,
unsigned short remotePort 
)
+
+ +

Send a formatted packet of data to a remote peer.

+

Make sure that the packet size is not greater than UdpSocket::MaxDatagramSize, otherwise this function will fail and no data will be sent.

+
Parameters
+ + + + +
packetPacket to send
remoteAddressAddress of the receiver
remotePortPort of the receiver to send the data to
+
+
+
Returns
Status code
+
See Also
receive
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sf::Socket::setBlocking (bool blocking)
+
+inherited
+
+ +

Set the blocking state of the socket.

+

In blocking mode, calls will not return until they have completed their task. For example, a call to Receive in blocking mode won't return until some data was actually received. In non-blocking mode, calls will always return immediately, using the return code to signal whether there was data available or not. By default, all sockets are blocking.

+
Parameters
+ + +
blockingTrue to set the socket as blocking, false for non-blocking
+
+
+
See Also
isBlocking
+ +
+
+ +
+
+ + + + + + + +
void sf::UdpSocket::unbind ()
+
+ +

Unbind the socket from the local port to which it is bound.

+

The port that the socket was previously using is immediately available after this function is called. If the socket is not bound to a port, this function has no effect.

+
See Also
bind
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1UdpSocket.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1UdpSocket.png new file mode 100644 index 0000000000000000000000000000000000000000..1d089ed5a7de2e8401055c36491c83b826ee8fed GIT binary patch literal 723 zcmV;^0xbQBP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0007FNklJ^rcBt6kK-!9vc>g1ZP&v_D-RIdxtBemIXNDGrva2e-7sjUqkuB{mh>A@*) zq^mxsTU}5#+=h?Vn$1~KyX78!NNR5N#V4e$Ik|(clGX!E-7>-IAL|I4=uMJ6)((Gq zPS#_6f3o-5BiWIjo>SwY!nA&B8nm-nS-*_ZzbD?4qyaVEl%!LAigXG36zLi?|JRVD zVf`p6#uz;W@V0IME^;H?ZeA!i(gJcq`H=v;^m`S}ngIR>&6)tdU$Z8F@7Jse;QKXe z0{DK-n(`;c7+pk^BnM5BB#r8;NFmgx`dp_^2a?QnO{y=ar!Ln=NRJ9k8Md~1d#uTW zqnckKtvQ-(g=iVk^LB;yq}46sj%Z%ao8OU2_r@Jj&*_v@ zmVByv)nCSR)q81v9gKNTl0K(NlB7{hk|d4Fl@w!)9s+n+1SmCZ(4*)$ZE- zIhl!Fkq-OR=FF@%>sH^3q+NH;N&9Fet!{b65zVq=(m}K&>y3JKP94dd(<#5BztX+x zq^&8&dnVd?Z{3mc% + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Utf< N > Class Template Reference
+
+
+ +

Utility class providing generic functions for UTF conversions. + More...

+ +

#include <Utf.hpp>

+

Detailed Description

+

template<unsigned int N>
+class sf::Utf< N >

+ +

Utility class providing generic functions for UTF conversions.

+

sf::Utf is a low-level, generic interface for counting, iterating, encoding and decoding Unicode characters and strings. It is able to handle ANSI, wide, latin-1, UTF-8, UTF-16 and UTF-32 encodings.

+

sf::Utf<X> functions are all static, these classes are not meant to be instanciated. All the functions are template, so that you can use any character / string type for a given encoding.

+

It has 3 specializations:

+ + +

Definition at line 41 of file Utf.hpp.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0116_01_4-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0116_01_4-members.htm new file mode 100644 index 0000000..1553b78 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0116_01_4-members.htm @@ -0,0 +1,68 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Utf< 16 > Member List
+
+
+ +

This is the complete list of members for sf::Utf< 16 >, including all inherited members.

+ + + + + + + + + + + + + + +
count(In begin, In end)sf::Utf< 16 >static
decode(In begin, In end, Uint32 &output, Uint32 replacement=0)sf::Utf< 16 >static
encode(Uint32 input, Out output, Uint16 replacement=0)sf::Utf< 16 >static
fromAnsi(In begin, In end, Out output, const std::locale &locale=std::locale())sf::Utf< 16 >static
fromLatin1(In begin, In end, Out output)sf::Utf< 16 >static
fromWide(In begin, In end, Out output)sf::Utf< 16 >static
next(In begin, In end)sf::Utf< 16 >static
toAnsi(In begin, In end, Out output, char replacement=0, const std::locale &locale=std::locale())sf::Utf< 16 >static
toLatin1(In begin, In end, Out output, char replacement=0)sf::Utf< 16 >static
toUtf16(In begin, In end, Out output)sf::Utf< 16 >static
toUtf32(In begin, In end, Out output)sf::Utf< 16 >static
toUtf8(In begin, In end, Out output)sf::Utf< 16 >static
toWide(In begin, In end, Out output, wchar_t replacement=0)sf::Utf< 16 >static
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0116_01_4.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0116_01_4.htm new file mode 100644 index 0000000..a0dbf4f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0116_01_4.htm @@ -0,0 +1,851 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Utf< 16 > Class Template Reference
+
+
+ +

Specialization of the Utf template for UTF-16. + More...

+ +

#include <Utf.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

template<typename In >
static In decode (In begin, In end, Uint32 &output, Uint32 replacement=0)
 Decode a single UTF-16 character. More...
 
template<typename Out >
static Out encode (Uint32 input, Out output, Uint16 replacement=0)
 Encode a single UTF-16 character. More...
 
template<typename In >
static In next (In begin, In end)
 Advance to the next UTF-16 character. More...
 
template<typename In >
static std::size_t count (In begin, In end)
 Count the number of characters of a UTF-16 sequence. More...
 
template<typename In , typename Out >
static Out fromAnsi (In begin, In end, Out output, const std::locale &locale=std::locale())
 Convert an ANSI characters range to UTF-16. More...
 
template<typename In , typename Out >
static Out fromWide (In begin, In end, Out output)
 Convert a wide characters range to UTF-16. More...
 
template<typename In , typename Out >
static Out fromLatin1 (In begin, In end, Out output)
 Convert a latin-1 (ISO-5589-1) characters range to UTF-16. More...
 
template<typename In , typename Out >
static Out toAnsi (In begin, In end, Out output, char replacement=0, const std::locale &locale=std::locale())
 Convert an UTF-16 characters range to ANSI characters. More...
 
template<typename In , typename Out >
static Out toWide (In begin, In end, Out output, wchar_t replacement=0)
 Convert an UTF-16 characters range to wide characters. More...
 
template<typename In , typename Out >
static Out toLatin1 (In begin, In end, Out output, char replacement=0)
 Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters. More...
 
template<typename In , typename Out >
static Out toUtf8 (In begin, In end, Out output)
 Convert a UTF-16 characters range to UTF-8. More...
 
template<typename In , typename Out >
static Out toUtf16 (In begin, In end, Out output)
 Convert a UTF-16 characters range to UTF-16. More...
 
template<typename In , typename Out >
static Out toUtf32 (In begin, In end, Out output)
 Convert a UTF-16 characters range to UTF-32. More...
 
+

Detailed Description

+

template<>
+class sf::Utf< 16 >

+ +

Specialization of the Utf template for UTF-16.

+ +

Definition at line 255 of file Utf.hpp.

+

Member Function Documentation

+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static std::size_t sf::Utf< 16 >::count (In begin,
In end 
)
+
+static
+
+ +

Count the number of characters of a UTF-16 sequence.

+

This function is necessary for multi-elements encodings, as a single character may use more than 1 storage element, thus the total size can be different from (begin - end).

+
Parameters
+ + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
+
+
+
Returns
Iterator pointing to one past the last read element of the input sequence
+ +
+
+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static In sf::Utf< 16 >::decode (In begin,
In end,
Uint32 & output,
Uint32 replacement = 0 
)
+
+static
+
+ +

Decode a single UTF-16 character.

+

Decoding a character means finding its unique 32-bits code (called the codepoint) in the Unicode standard.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputCodepoint of the decoded UTF-16 character
replacementReplacement character to use in case the UTF-8 sequence is invalid
+
+
+
Returns
Iterator pointing to one past the last read element of the input sequence
+ +
+
+ +
+
+
+template<typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::encode (Uint32 input,
Out output,
Uint16 replacement = 0 
)
+
+static
+
+ +

Encode a single UTF-16 character.

+

Encoding a character means converting a unique 32-bits code (called the codepoint) in the target encoding, UTF-16.

+
Parameters
+ + + + +
inputCodepoint to encode as UTF-16
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to UTF-16 (use 0 to skip them)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::fromAnsi (In begin,
In end,
Out output,
const std::locale & locale = std::locale() 
)
+
+static
+
+ +

Convert an ANSI characters range to UTF-16.

+

The current global locale will be used by default, unless you pass a custom one in the locale parameter.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
localeLocale to use for conversion
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::fromLatin1 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a latin-1 (ISO-5589-1) characters range to UTF-16.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::fromWide (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a wide characters range to UTF-16.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static In sf::Utf< 16 >::next (In begin,
In end 
)
+
+static
+
+ +

Advance to the next UTF-16 character.

+

This function is necessary for multi-elements encodings, as a single character may use more than 1 storage element.

+
Parameters
+ + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
+
+
+
Returns
Iterator pointing to one past the last read element of the input sequence
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::toAnsi (In begin,
In end,
Out output,
char replacement = 0,
const std::locale & locale = std::locale() 
)
+
+static
+
+ +

Convert an UTF-16 characters range to ANSI characters.

+

The current global locale will be used by default, unless you pass a custom one in the locale parameter.

+
Parameters
+ + + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to ANSI (use 0 to skip them)
localeLocale to use for conversion
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::toLatin1 (In begin,
In end,
Out output,
char replacement = 0 
)
+
+static
+
+ +

Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to wide (use 0 to skip them)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::toUtf16 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a UTF-16 characters range to UTF-16.

+

This functions does nothing more than a direct copy; it is defined only to provide the same interface as other specializations of the sf::Utf<> template, and allow generic code to be written on top of it.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::toUtf32 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a UTF-16 characters range to UTF-32.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::toUtf8 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a UTF-16 characters range to UTF-8.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 16 >::toWide (In begin,
In end,
Out output,
wchar_t replacement = 0 
)
+
+static
+
+ +

Convert an UTF-16 characters range to wide characters.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to wide (use 0 to skip them)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0132_01_4-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0132_01_4-members.htm new file mode 100644 index 0000000..1413d14 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0132_01_4-members.htm @@ -0,0 +1,72 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Utf< 32 > Member List
+
+
+ +

This is the complete list of members for sf::Utf< 32 >, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
count(In begin, In end)sf::Utf< 32 >static
decode(In begin, In end, Uint32 &output, Uint32 replacement=0)sf::Utf< 32 >static
decodeAnsi(In input, const std::locale &locale=std::locale())sf::Utf< 32 >static
decodeWide(In input)sf::Utf< 32 >static
encode(Uint32 input, Out output, Uint32 replacement=0)sf::Utf< 32 >static
encodeAnsi(Uint32 codepoint, Out output, char replacement=0, const std::locale &locale=std::locale())sf::Utf< 32 >static
encodeWide(Uint32 codepoint, Out output, wchar_t replacement=0)sf::Utf< 32 >static
fromAnsi(In begin, In end, Out output, const std::locale &locale=std::locale())sf::Utf< 32 >static
fromLatin1(In begin, In end, Out output)sf::Utf< 32 >static
fromWide(In begin, In end, Out output)sf::Utf< 32 >static
next(In begin, In end)sf::Utf< 32 >static
toAnsi(In begin, In end, Out output, char replacement=0, const std::locale &locale=std::locale())sf::Utf< 32 >static
toLatin1(In begin, In end, Out output, char replacement=0)sf::Utf< 32 >static
toUtf16(In begin, In end, Out output)sf::Utf< 32 >static
toUtf32(In begin, In end, Out output)sf::Utf< 32 >static
toUtf8(In begin, In end, Out output)sf::Utf< 32 >static
toWide(In begin, In end, Out output, wchar_t replacement=0)sf::Utf< 32 >static
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0132_01_4.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0132_01_4.htm new file mode 100644 index 0000000..3194c50 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_0132_01_4.htm @@ -0,0 +1,1065 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Utf< 32 > Class Template Reference
+
+
+ +

Specialization of the Utf template for UTF-32. + More...

+ +

#include <Utf.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

template<typename In >
static In decode (In begin, In end, Uint32 &output, Uint32 replacement=0)
 Decode a single UTF-32 character. More...
 
template<typename Out >
static Out encode (Uint32 input, Out output, Uint32 replacement=0)
 Encode a single UTF-32 character. More...
 
template<typename In >
static In next (In begin, In end)
 Advance to the next UTF-32 character. More...
 
template<typename In >
static std::size_t count (In begin, In end)
 Count the number of characters of a UTF-32 sequence. More...
 
template<typename In , typename Out >
static Out fromAnsi (In begin, In end, Out output, const std::locale &locale=std::locale())
 Convert an ANSI characters range to UTF-32. More...
 
template<typename In , typename Out >
static Out fromWide (In begin, In end, Out output)
 Convert a wide characters range to UTF-32. More...
 
template<typename In , typename Out >
static Out fromLatin1 (In begin, In end, Out output)
 Convert a latin-1 (ISO-5589-1) characters range to UTF-32. More...
 
template<typename In , typename Out >
static Out toAnsi (In begin, In end, Out output, char replacement=0, const std::locale &locale=std::locale())
 Convert an UTF-32 characters range to ANSI characters. More...
 
template<typename In , typename Out >
static Out toWide (In begin, In end, Out output, wchar_t replacement=0)
 Convert an UTF-32 characters range to wide characters. More...
 
template<typename In , typename Out >
static Out toLatin1 (In begin, In end, Out output, char replacement=0)
 Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters. More...
 
template<typename In , typename Out >
static Out toUtf8 (In begin, In end, Out output)
 Convert a UTF-32 characters range to UTF-8. More...
 
template<typename In , typename Out >
static Out toUtf16 (In begin, In end, Out output)
 Convert a UTF-32 characters range to UTF-16. More...
 
template<typename In , typename Out >
static Out toUtf32 (In begin, In end, Out output)
 Convert a UTF-32 characters range to UTF-32. More...
 
template<typename In >
static Uint32 decodeAnsi (In input, const std::locale &locale=std::locale())
 Decode a single ANSI character to UTF-32. More...
 
template<typename In >
static Uint32 decodeWide (In input)
 Decode a single wide character to UTF-32. More...
 
template<typename Out >
static Out encodeAnsi (Uint32 codepoint, Out output, char replacement=0, const std::locale &locale=std::locale())
 Encode a single UTF-32 character to ANSI. More...
 
template<typename Out >
static Out encodeWide (Uint32 codepoint, Out output, wchar_t replacement=0)
 Encode a single UTF-32 character to wide. More...
 
+

Detailed Description

+

template<>
+class sf::Utf< 32 >

+ +

Specialization of the Utf template for UTF-32.

+ +

Definition at line 462 of file Utf.hpp.

+

Member Function Documentation

+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static std::size_t sf::Utf< 32 >::count (In begin,
In end 
)
+
+static
+
+ +

Count the number of characters of a UTF-32 sequence.

+

This function is trivial for UTF-32, which can store every character in a single storage element.

+
Parameters
+ + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
+
+
+
Returns
Iterator pointing to one past the last read element of the input sequence
+ +
+
+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static In sf::Utf< 32 >::decode (In begin,
In end,
Uint32 & output,
Uint32 replacement = 0 
)
+
+static
+
+ +

Decode a single UTF-32 character.

+

Decoding a character means finding its unique 32-bits code (called the codepoint) in the Unicode standard. For UTF-32, the character value is the same as the codepoint.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputCodepoint of the decoded UTF-32 character
replacementReplacement character to use in case the UTF-8 sequence is invalid
+
+
+
Returns
Iterator pointing to one past the last read element of the input sequence
+ +
+
+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static Uint32 sf::Utf< 32 >::decodeAnsi (In input,
const std::locale & locale = std::locale() 
)
+
+static
+
+ +

Decode a single ANSI character to UTF-32.

+

This function does not exist in other specializations of sf::Utf<>, it is defined for convenience (it is used by several other conversion functions).

+
Parameters
+ + + +
inputInput ANSI character
localeLocale to use for conversion
+
+
+
Returns
Converted character
+ +
+
+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + +
static Uint32 sf::Utf< 32 >::decodeWide (In input)
+
+static
+
+ +

Decode a single wide character to UTF-32.

+

This function does not exist in other specializations of sf::Utf<>, it is defined for convenience (it is used by several other conversion functions).

+
Parameters
+ + +
inputInput wide character
+
+
+
Returns
Converted character
+ +
+
+ +
+
+
+template<typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::encode (Uint32 input,
Out output,
Uint32 replacement = 0 
)
+
+static
+
+ +

Encode a single UTF-32 character.

+

Encoding a character means converting a unique 32-bits code (called the codepoint) in the target encoding, UTF-32. For UTF-32, the codepoint is the same as the character value.

+
Parameters
+ + + + +
inputCodepoint to encode as UTF-32
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to UTF-32 (use 0 to skip them)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::encodeAnsi (Uint32 codepoint,
Out output,
char replacement = 0,
const std::locale & locale = std::locale() 
)
+
+static
+
+ +

Encode a single UTF-32 character to ANSI.

+

This function does not exist in other specializations of sf::Utf<>, it is defined for convenience (it is used by several other conversion functions).

+
Parameters
+ + + + + +
codepointIterator pointing to the beginning of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement if the input character is not convertible to ANSI (use 0 to skip it)
localeLocale to use for conversion
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::encodeWide (Uint32 codepoint,
Out output,
wchar_t replacement = 0 
)
+
+static
+
+ +

Encode a single UTF-32 character to wide.

+

This function does not exist in other specializations of sf::Utf<>, it is defined for convenience (it is used by several other conversion functions).

+
Parameters
+ + + + +
codepointIterator pointing to the beginning of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement if the input character is not convertible to wide (use 0 to skip it)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::fromAnsi (In begin,
In end,
Out output,
const std::locale & locale = std::locale() 
)
+
+static
+
+ +

Convert an ANSI characters range to UTF-32.

+

The current global locale will be used by default, unless you pass a custom one in the locale parameter.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
localeLocale to use for conversion
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::fromLatin1 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a latin-1 (ISO-5589-1) characters range to UTF-32.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::fromWide (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a wide characters range to UTF-32.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static In sf::Utf< 32 >::next (In begin,
In end 
)
+
+static
+
+ +

Advance to the next UTF-32 character.

+

This function is trivial for UTF-32, which can store every character in a single storage element.

+
Parameters
+ + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
+
+
+
Returns
Iterator pointing to one past the last read element of the input sequence
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::toAnsi (In begin,
In end,
Out output,
char replacement = 0,
const std::locale & locale = std::locale() 
)
+
+static
+
+ +

Convert an UTF-32 characters range to ANSI characters.

+

The current global locale will be used by default, unless you pass a custom one in the locale parameter.

+
Parameters
+ + + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to ANSI (use 0 to skip them)
localeLocale to use for conversion
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::toLatin1 (In begin,
In end,
Out output,
char replacement = 0 
)
+
+static
+
+ +

Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to wide (use 0 to skip them)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::toUtf16 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a UTF-32 characters range to UTF-16.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::toUtf32 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a UTF-32 characters range to UTF-32.

+

This functions does nothing more than a direct copy; it is defined only to provide the same interface as other specializations of the sf::Utf<> template, and allow generic code to be written on top of it.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::toUtf8 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a UTF-32 characters range to UTF-8.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 32 >::toWide (In begin,
In end,
Out output,
wchar_t replacement = 0 
)
+
+static
+
+ +

Convert an UTF-32 characters range to wide characters.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to wide (use 0 to skip them)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_018_01_4-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_018_01_4-members.htm new file mode 100644 index 0000000..59f467e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_018_01_4-members.htm @@ -0,0 +1,68 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Utf< 8 > Member List
+
+
+ +

This is the complete list of members for sf::Utf< 8 >, including all inherited members.

+ + + + + + + + + + + + + + +
count(In begin, In end)sf::Utf< 8 >static
decode(In begin, In end, Uint32 &output, Uint32 replacement=0)sf::Utf< 8 >static
encode(Uint32 input, Out output, Uint8 replacement=0)sf::Utf< 8 >static
fromAnsi(In begin, In end, Out output, const std::locale &locale=std::locale())sf::Utf< 8 >static
fromLatin1(In begin, In end, Out output)sf::Utf< 8 >static
fromWide(In begin, In end, Out output)sf::Utf< 8 >static
next(In begin, In end)sf::Utf< 8 >static
toAnsi(In begin, In end, Out output, char replacement=0, const std::locale &locale=std::locale())sf::Utf< 8 >static
toLatin1(In begin, In end, Out output, char replacement=0)sf::Utf< 8 >static
toUtf16(In begin, In end, Out output)sf::Utf< 8 >static
toUtf32(In begin, In end, Out output)sf::Utf< 8 >static
toUtf8(In begin, In end, Out output)sf::Utf< 8 >static
toWide(In begin, In end, Out output, wchar_t replacement=0)sf::Utf< 8 >static
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_018_01_4.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_018_01_4.htm new file mode 100644 index 0000000..435dd7b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Utf_3_018_01_4.htm @@ -0,0 +1,851 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Utf< 8 > Class Template Reference
+
+
+ +

Specialization of the Utf template for UTF-8. + More...

+ +

#include <Utf.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

template<typename In >
static In decode (In begin, In end, Uint32 &output, Uint32 replacement=0)
 Decode a single UTF-8 character. More...
 
template<typename Out >
static Out encode (Uint32 input, Out output, Uint8 replacement=0)
 Encode a single UTF-8 character. More...
 
template<typename In >
static In next (In begin, In end)
 Advance to the next UTF-8 character. More...
 
template<typename In >
static std::size_t count (In begin, In end)
 Count the number of characters of a UTF-8 sequence. More...
 
template<typename In , typename Out >
static Out fromAnsi (In begin, In end, Out output, const std::locale &locale=std::locale())
 Convert an ANSI characters range to UTF-8. More...
 
template<typename In , typename Out >
static Out fromWide (In begin, In end, Out output)
 Convert a wide characters range to UTF-8. More...
 
template<typename In , typename Out >
static Out fromLatin1 (In begin, In end, Out output)
 Convert a latin-1 (ISO-5589-1) characters range to UTF-8. More...
 
template<typename In , typename Out >
static Out toAnsi (In begin, In end, Out output, char replacement=0, const std::locale &locale=std::locale())
 Convert an UTF-8 characters range to ANSI characters. More...
 
template<typename In , typename Out >
static Out toWide (In begin, In end, Out output, wchar_t replacement=0)
 Convert an UTF-8 characters range to wide characters. More...
 
template<typename In , typename Out >
static Out toLatin1 (In begin, In end, Out output, char replacement=0)
 Convert an UTF-8 characters range to latin-1 (ISO-5589-1) characters. More...
 
template<typename In , typename Out >
static Out toUtf8 (In begin, In end, Out output)
 Convert a UTF-8 characters range to UTF-8. More...
 
template<typename In , typename Out >
static Out toUtf16 (In begin, In end, Out output)
 Convert a UTF-8 characters range to UTF-16. More...
 
template<typename In , typename Out >
static Out toUtf32 (In begin, In end, Out output)
 Convert a UTF-8 characters range to UTF-32. More...
 
+

Detailed Description

+

template<>
+class sf::Utf< 8 >

+ +

Specialization of the Utf template for UTF-8.

+ +

Definition at line 48 of file Utf.hpp.

+

Member Function Documentation

+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static std::size_t sf::Utf< 8 >::count (In begin,
In end 
)
+
+static
+
+ +

Count the number of characters of a UTF-8 sequence.

+

This function is necessary for multi-elements encodings, as a single character may use more than 1 storage element, thus the total size can be different from (begin - end).

+
Parameters
+ + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
+
+
+
Returns
Iterator pointing to one past the last read element of the input sequence
+ +
+
+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static In sf::Utf< 8 >::decode (In begin,
In end,
Uint32 & output,
Uint32 replacement = 0 
)
+
+static
+
+ +

Decode a single UTF-8 character.

+

Decoding a character means finding its unique 32-bits code (called the codepoint) in the Unicode standard.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputCodepoint of the decoded UTF-8 character
replacementReplacement character to use in case the UTF-8 sequence is invalid
+
+
+
Returns
Iterator pointing to one past the last read element of the input sequence
+ +
+
+ +
+
+
+template<typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::encode (Uint32 input,
Out output,
Uint8 replacement = 0 
)
+
+static
+
+ +

Encode a single UTF-8 character.

+

Encoding a character means converting a unique 32-bits code (called the codepoint) in the target encoding, UTF-8.

+
Parameters
+ + + + +
inputCodepoint to encode as UTF-8
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to UTF-8 (use 0 to skip them)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::fromAnsi (In begin,
In end,
Out output,
const std::locale & locale = std::locale() 
)
+
+static
+
+ +

Convert an ANSI characters range to UTF-8.

+

The current global locale will be used by default, unless you pass a custom one in the locale parameter.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
localeLocale to use for conversion
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::fromLatin1 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a latin-1 (ISO-5589-1) characters range to UTF-8.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::fromWide (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a wide characters range to UTF-8.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static In sf::Utf< 8 >::next (In begin,
In end 
)
+
+static
+
+ +

Advance to the next UTF-8 character.

+

This function is necessary for multi-elements encodings, as a single character may use more than 1 storage element.

+
Parameters
+ + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
+
+
+
Returns
Iterator pointing to one past the last read element of the input sequence
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::toAnsi (In begin,
In end,
Out output,
char replacement = 0,
const std::locale & locale = std::locale() 
)
+
+static
+
+ +

Convert an UTF-8 characters range to ANSI characters.

+

The current global locale will be used by default, unless you pass a custom one in the locale parameter.

+
Parameters
+ + + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to ANSI (use 0 to skip them)
localeLocale to use for conversion
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::toLatin1 (In begin,
In end,
Out output,
char replacement = 0 
)
+
+static
+
+ +

Convert an UTF-8 characters range to latin-1 (ISO-5589-1) characters.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to wide (use 0 to skip them)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::toUtf16 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a UTF-8 characters range to UTF-16.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::toUtf32 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a UTF-8 characters range to UTF-32.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::toUtf8 (In begin,
In end,
Out output 
)
+
+static
+
+ +

Convert a UTF-8 characters range to UTF-8.

+

This functions does nothing more than a direct copy; it is defined only to provide the same interface as other specializations of the sf::Utf<> template, and allow generic code to be written on top of it.

+
Parameters
+ + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+ +
+
+
+template<typename In , typename Out >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static Out sf::Utf< 8 >::toWide (In begin,
In end,
Out output,
wchar_t replacement = 0 
)
+
+static
+
+ +

Convert an UTF-8 characters range to wide characters.

+
Parameters
+ + + + + +
beginIterator pointing to the beginning of the input sequence
endIterator pointing to the end of the input sequence
outputIterator pointing to the beginning of the output sequence
replacementReplacement for characters not convertible to wide (use 0 to skip them)
+
+
+
Returns
Iterator to the end of the output sequence which has been written
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector2-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector2-members.htm new file mode 100644 index 0000000..56812da --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector2-members.htm @@ -0,0 +1,75 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Vector2< T > Member List
+
+
+ +

This is the complete list of members for sf::Vector2< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
operator!=(const Vector2< T > &left, const Vector2< T > &right)sf::Vector2< T >related
operator*(const Vector2< T > &left, T right)sf::Vector2< T >related
operator*(T left, const Vector2< T > &right)sf::Vector2< T >related
operator*=(Vector2< T > &left, T right)sf::Vector2< T >related
operator+(const Vector2< T > &left, const Vector2< T > &right)sf::Vector2< T >related
operator+=(Vector2< T > &left, const Vector2< T > &right)sf::Vector2< T >related
operator-(const Vector2< T > &right)sf::Vector2< T >related
operator-(const Vector2< T > &left, const Vector2< T > &right)sf::Vector2< T >related
operator-=(Vector2< T > &left, const Vector2< T > &right)sf::Vector2< T >related
operator/(const Vector2< T > &left, T right)sf::Vector2< T >related
operator/=(Vector2< T > &left, T right)sf::Vector2< T >related
operator==(const Vector2< T > &left, const Vector2< T > &right)sf::Vector2< T >related
Vector2()sf::Vector2< T >
Vector2(T X, T Y)sf::Vector2< T >
Vector2(const Vector2< U > &vector)sf::Vector2< T >explicit
Vector2() (defined in sf::Vector2< T >)sf::Vector2< T >inline
Vector2(T X, T Y) (defined in sf::Vector2< T >)sf::Vector2< T >inline
Vector2(const Vector2< U > &vector) (defined in sf::Vector2< T >)sf::Vector2< T >inline
xsf::Vector2< T >
ysf::Vector2< T >
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector2.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector2.htm new file mode 100644 index 0000000..8196d43 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector2.htm @@ -0,0 +1,858 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Vector2< T > Class Template Reference
+
+
+ +

Utility template class for manipulating 2-dimensional vectors. + More...

+ +

#include <Vector2.hpp>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Vector2 ()
 Default constructor. More...
 
 Vector2 (T X, T Y)
 Construct the vector from its coordinates. More...
 
template<typename U >
 Vector2 (const Vector2< U > &vector)
 Construct the vector from another type of vector. More...
 
+template<typename T >
 Vector2 (T X, T Y)
 
+template<typename U >
 Vector2 (const Vector2< U > &vector)
 
+ + + + + + + +

+Public Attributes

x
 X coordinate of the vector. More...
 
y
 Y coordinate of the vector. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
template<typename T >
Vector2< T > operator- (const Vector2< T > &right)
 Overload of unary operator -. More...
 
template<typename T >
Vector2< T > & operator+= (Vector2< T > &left, const Vector2< T > &right)
 Overload of binary operator +=. More...
 
template<typename T >
Vector2< T > & operator-= (Vector2< T > &left, const Vector2< T > &right)
 Overload of binary operator -=. More...
 
template<typename T >
Vector2< T > operator+ (const Vector2< T > &left, const Vector2< T > &right)
 Overload of binary operator +. More...
 
template<typename T >
Vector2< T > operator- (const Vector2< T > &left, const Vector2< T > &right)
 Overload of binary operator -. More...
 
template<typename T >
Vector2< T > operator* (const Vector2< T > &left, T right)
 Overload of binary operator *. More...
 
template<typename T >
Vector2< T > operator* (T left, const Vector2< T > &right)
 Overload of binary operator *. More...
 
template<typename T >
Vector2< T > & operator*= (Vector2< T > &left, T right)
 Overload of binary operator *=. More...
 
template<typename T >
Vector2< T > operator/ (const Vector2< T > &left, T right)
 Overload of binary operator /. More...
 
template<typename T >
Vector2< T > & operator/= (Vector2< T > &left, T right)
 Overload of binary operator /=. More...
 
template<typename T >
bool operator== (const Vector2< T > &left, const Vector2< T > &right)
 Overload of binary operator ==. More...
 
template<typename T >
bool operator!= (const Vector2< T > &left, const Vector2< T > &right)
 Overload of binary operator !=. More...
 
+

Detailed Description

+

template<typename T>
+class sf::Vector2< T >

+ +

Utility template class for manipulating 2-dimensional vectors.

+

sf::Vector2 is a simple class that defines a mathematical vector with two coordinates (x and y).

+

It can be used to represent anything that has two dimensions: a size, a point, a velocity, etc.

+

The template parameter T is the type of the coordinates. It can be any type that supports arithmetic operations (+, -, /, *) and comparisons (==, !=), for example int or float.

+

You generally don't have to care about the templated form (sf::Vector2<T>), the most common specializations have special typedefs:

+
    +
  • sf::Vector2<float> is sf::Vector2f
  • +
  • sf::Vector2<int> is sf::Vector2i
  • +
  • sf::Vector2<unsigned int> is sf::Vector2u
  • +
+

The sf::Vector2 class has a small and simple interface, its x and y members can be accessed directly (there's no accessor like setX(), getX()) and it contains no mathematical function like dot product, cross product, length, etc.

+

Usage example:

+
sf::Vector2f v1(16.5f, 24.f);
+
v1.x = 18.2f;
+
float y = v1.y;
+
+
sf::Vector2f v2 = v1 * 5.f;
+ +
v3 = v1 + v2;
+
+
bool different = (v2 != v3);
+

Note: for 3-dimensional vectors, see sf::Vector3.

+ +

Definition at line 37 of file Vector2.hpp.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + + + +
sf::Vector2< T >::Vector2 ()
+
+ +

Default constructor.

+

Creates a Vector2(0, 0).

+ +
+
+ +
+
+
+template<typename T>
+ + + + + + + + + + + + + + + + + + +
sf::Vector2< T >::Vector2 (X,
Y 
)
+
+ +

Construct the vector from its coordinates.

+
Parameters
+ + + +
XX coordinate
YY coordinate
+
+
+ +
+
+ +
+
+
+template<typename T>
+
+template<typename U >
+ + + + + +
+ + + + + + + + +
sf::Vector2< T >::Vector2 (const Vector2< U > & vector)
+
+explicit
+
+ +

Construct the vector from another type of vector.

+

This constructor doesn't replace the copy constructor, it's called only when U != T. A call to this constructor will fail to compile if U is not convertible to T.

+
Parameters
+ + +
vectorVector to convert
+
+
+ +
+
+

Friends And Related Function Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator!= (const Vector2< T > & left,
const Vector2< T > & right 
)
+
+related
+
+ +

Overload of binary operator !=.

+

This operator compares strict difference between two vectors.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
True if left is not equal to right
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2< T > operator* (const Vector2< T > & left,
right 
)
+
+related
+
+ +

Overload of binary operator *.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a scalar value)
+
+
+
Returns
Memberwise multiplication by right
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2< T > operator* (left,
const Vector2< T > & right 
)
+
+related
+
+ +

Overload of binary operator *.

+
Parameters
+ + + +
leftLeft operand (a scalar value)
rightRight operand (a vector)
+
+
+
Returns
Memberwise multiplication by left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2< T > & operator*= (Vector2< T > & left,
right 
)
+
+related
+
+ +

Overload of binary operator *=.

+

This operator performs a memberwise multiplication by right, and assigns the result to left.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a scalar value)
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2< T > operator+ (const Vector2< T > & left,
const Vector2< T > & right 
)
+
+related
+
+ +

Overload of binary operator +.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
Memberwise addition of both vectors
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2< T > & operator+= (Vector2< T > & left,
const Vector2< T > & right 
)
+
+related
+
+ +

Overload of binary operator +=.

+

This operator performs a memberwise addition of both vectors, and assigns the result to left.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Vector2< T > operator- (const Vector2< T > & right)
+
+related
+
+ +

Overload of unary operator -.

+
Parameters
+ + +
rightVector to negate
+
+
+
Returns
Memberwise opposite of the vector
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2< T > operator- (const Vector2< T > & left,
const Vector2< T > & right 
)
+
+related
+
+ +

Overload of binary operator -.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
Memberwise subtraction of both vectors
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2< T > & operator-= (Vector2< T > & left,
const Vector2< T > & right 
)
+
+related
+
+ +

Overload of binary operator -=.

+

This operator performs a memberwise subtraction of both vectors, and assigns the result to left.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2< T > operator/ (const Vector2< T > & left,
right 
)
+
+related
+
+ +

Overload of binary operator /.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a scalar value)
+
+
+
Returns
Memberwise division by right
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector2< T > & operator/= (Vector2< T > & left,
right 
)
+
+related
+
+ +

Overload of binary operator /=.

+

This operator performs a memberwise division by right, and assigns the result to left.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a scalar value)
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator== (const Vector2< T > & left,
const Vector2< T > & right 
)
+
+related
+
+ +

Overload of binary operator ==.

+

This operator compares strict equality between two vectors.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
True if left is equal to right
+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename T>
+ + + + +
T sf::Vector2< T >::x
+
+ +

X coordinate of the vector.

+ +

Definition at line 75 of file Vector2.hpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + +
T sf::Vector2< T >::y
+
+ +

Y coordinate of the vector.

+ +

Definition at line 76 of file Vector2.hpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector3-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector3-members.htm new file mode 100644 index 0000000..4bd8a6f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector3-members.htm @@ -0,0 +1,76 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Vector3< T > Member List
+
+
+ +

This is the complete list of members for sf::Vector3< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
operator!=(const Vector3< T > &left, const Vector3< T > &right)sf::Vector3< T >related
operator*(const Vector3< T > &left, T right)sf::Vector3< T >related
operator*(T left, const Vector3< T > &right)sf::Vector3< T >related
operator*=(Vector3< T > &left, T right)sf::Vector3< T >related
operator+(const Vector3< T > &left, const Vector3< T > &right)sf::Vector3< T >related
operator+=(Vector3< T > &left, const Vector3< T > &right)sf::Vector3< T >related
operator-(const Vector3< T > &left)sf::Vector3< T >related
operator-(const Vector3< T > &left, const Vector3< T > &right)sf::Vector3< T >related
operator-=(Vector3< T > &left, const Vector3< T > &right)sf::Vector3< T >related
operator/(const Vector3< T > &left, T right)sf::Vector3< T >related
operator/=(Vector3< T > &left, T right)sf::Vector3< T >related
operator==(const Vector3< T > &left, const Vector3< T > &right)sf::Vector3< T >related
Vector3()sf::Vector3< T >
Vector3(T X, T Y, T Z)sf::Vector3< T >
Vector3(const Vector3< U > &vector)sf::Vector3< T >explicit
Vector3() (defined in sf::Vector3< T >)sf::Vector3< T >inline
Vector3(T X, T Y, T Z) (defined in sf::Vector3< T >)sf::Vector3< T >inline
Vector3(const Vector3< U > &vector) (defined in sf::Vector3< T >)sf::Vector3< T >inline
xsf::Vector3< T >
ysf::Vector3< T >
zsf::Vector3< T >
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector3.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector3.htm new file mode 100644 index 0000000..394f397 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vector3.htm @@ -0,0 +1,886 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Vector3< T > Class Template Reference
+
+
+ +

Utility template class for manipulating 3-dimensional vectors. + More...

+ +

#include <Vector3.hpp>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Vector3 ()
 Default constructor. More...
 
 Vector3 (T X, T Y, T Z)
 Construct the vector from its coordinates. More...
 
template<typename U >
 Vector3 (const Vector3< U > &vector)
 Construct the vector from another type of vector. More...
 
+template<typename T >
 Vector3 (T X, T Y, T Z)
 
+template<typename U >
 Vector3 (const Vector3< U > &vector)
 
+ + + + + + + + + + +

+Public Attributes

x
 X coordinate of the vector. More...
 
y
 Y coordinate of the vector. More...
 
z
 Z coordinate of the vector. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
template<typename T >
Vector3< T > operator- (const Vector3< T > &left)
 Overload of unary operator -. More...
 
template<typename T >
Vector3< T > & operator+= (Vector3< T > &left, const Vector3< T > &right)
 Overload of binary operator +=. More...
 
template<typename T >
Vector3< T > & operator-= (Vector3< T > &left, const Vector3< T > &right)
 Overload of binary operator -=. More...
 
template<typename T >
Vector3< T > operator+ (const Vector3< T > &left, const Vector3< T > &right)
 Overload of binary operator +. More...
 
template<typename T >
Vector3< T > operator- (const Vector3< T > &left, const Vector3< T > &right)
 Overload of binary operator -. More...
 
template<typename T >
Vector3< T > operator* (const Vector3< T > &left, T right)
 Overload of binary operator *. More...
 
template<typename T >
Vector3< T > operator* (T left, const Vector3< T > &right)
 Overload of binary operator *. More...
 
template<typename T >
Vector3< T > & operator*= (Vector3< T > &left, T right)
 Overload of binary operator *=. More...
 
template<typename T >
Vector3< T > operator/ (const Vector3< T > &left, T right)
 Overload of binary operator /. More...
 
template<typename T >
Vector3< T > & operator/= (Vector3< T > &left, T right)
 Overload of binary operator /=. More...
 
template<typename T >
bool operator== (const Vector3< T > &left, const Vector3< T > &right)
 Overload of binary operator ==. More...
 
template<typename T >
bool operator!= (const Vector3< T > &left, const Vector3< T > &right)
 Overload of binary operator !=. More...
 
+

Detailed Description

+

template<typename T>
+class sf::Vector3< T >

+ +

Utility template class for manipulating 3-dimensional vectors.

+

sf::Vector3 is a simple class that defines a mathematical vector with three coordinates (x, y and z).

+

It can be used to represent anything that has three dimensions: a size, a point, a velocity, etc.

+

The template parameter T is the type of the coordinates. It can be any type that supports arithmetic operations (+, -, /, *) and comparisons (==, !=), for example int or float.

+

You generally don't have to care about the templated form (sf::Vector3<T>), the most common specializations have special typedefs:

+
    +
  • sf::Vector3<float> is sf::Vector3f
  • +
  • sf::Vector3<int> is sf::Vector3i
  • +
+

The sf::Vector3 class has a small and simple interface, its x and y members can be accessed directly (there's no accessor like setX(), getX()) and it contains no mathematical function like dot product, cross product, length, etc.

+

Usage example:

+
sf::Vector3f v1(16.5f, 24.f, -8.2f);
+
v1.x = 18.2f;
+
float y = v1.y;
+
float z = v1.z;
+
+
sf::Vector3f v2 = v1 * 5.f;
+ +
v3 = v1 + v2;
+
+
bool different = (v2 != v3);
+

Note: for 2-dimensional vectors, see sf::Vector2.

+ +

Definition at line 37 of file Vector3.hpp.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + + + +
sf::Vector3< T >::Vector3 ()
+
+ +

Default constructor.

+

Creates a Vector3(0, 0, 0).

+ +
+
+ +
+
+
+template<typename T>
+ + + + + + + + + + + + + + + + + + + + + + + + +
sf::Vector3< T >::Vector3 (X,
Y,
Z 
)
+
+ +

Construct the vector from its coordinates.

+
Parameters
+ + + + +
XX coordinate
YY coordinate
ZZ coordinate
+
+
+ +
+
+ +
+
+
+template<typename T>
+
+template<typename U >
+ + + + + +
+ + + + + + + + +
sf::Vector3< T >::Vector3 (const Vector3< U > & vector)
+
+explicit
+
+ +

Construct the vector from another type of vector.

+

This constructor doesn't replace the copy constructor, it's called only when U != T. A call to this constructor will fail to compile if U is not convertible to T.

+
Parameters
+ + +
vectorVector to convert
+
+
+ +
+
+

Friends And Related Function Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator!= (const Vector3< T > & left,
const Vector3< T > & right 
)
+
+related
+
+ +

Overload of binary operator !=.

+

This operator compares strict difference between two vectors.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
True if left is not equal to right
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector3< T > operator* (const Vector3< T > & left,
right 
)
+
+related
+
+ +

Overload of binary operator *.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a scalar value)
+
+
+
Returns
Memberwise multiplication by right
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector3< T > operator* (left,
const Vector3< T > & right 
)
+
+related
+
+ +

Overload of binary operator *.

+
Parameters
+ + + +
leftLeft operand (a scalar value)
rightRight operand (a vector)
+
+
+
Returns
Memberwise multiplication by left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector3< T > & operator*= (Vector3< T > & left,
right 
)
+
+related
+
+ +

Overload of binary operator *=.

+

This operator performs a memberwise multiplication by right, and assigns the result to left.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a scalar value)
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector3< T > operator+ (const Vector3< T > & left,
const Vector3< T > & right 
)
+
+related
+
+ +

Overload of binary operator +.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
Memberwise addition of both vectors
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector3< T > & operator+= (Vector3< T > & left,
const Vector3< T > & right 
)
+
+related
+
+ +

Overload of binary operator +=.

+

This operator performs a memberwise addition of both vectors, and assigns the result to left.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Vector3< T > operator- (const Vector3< T > & left)
+
+related
+
+ +

Overload of unary operator -.

+
Parameters
+ + +
leftVector to negate
+
+
+
Returns
Memberwise opposite of the vector
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector3< T > operator- (const Vector3< T > & left,
const Vector3< T > & right 
)
+
+related
+
+ +

Overload of binary operator -.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
Memberwise subtraction of both vectors
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector3< T > & operator-= (Vector3< T > & left,
const Vector3< T > & right 
)
+
+related
+
+ +

Overload of binary operator -=.

+

This operator performs a memberwise subtraction of both vectors, and assigns the result to left.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector3< T > operator/ (const Vector3< T > & left,
right 
)
+
+related
+
+ +

Overload of binary operator /.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a scalar value)
+
+
+
Returns
Memberwise division by right
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Vector3< T > & operator/= (Vector3< T > & left,
right 
)
+
+related
+
+ +

Overload of binary operator /=.

+

This operator performs a memberwise division by right, and assigns the result to left.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a scalar value)
+
+
+
Returns
Reference to left
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator== (const Vector3< T > & left,
const Vector3< T > & right 
)
+
+related
+
+ +

Overload of binary operator ==.

+

This operator compares strict equality between two vectors.

+
Parameters
+ + + +
leftLeft operand (a vector)
rightRight operand (a vector)
+
+
+
Returns
True if left is equal to right
+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename T>
+ + + + +
T sf::Vector3< T >::x
+
+ +

X coordinate of the vector.

+ +

Definition at line 76 of file Vector3.hpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + +
T sf::Vector3< T >::y
+
+ +

Y coordinate of the vector.

+ +

Definition at line 77 of file Vector3.hpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + +
T sf::Vector3< T >::z
+
+ +

Z coordinate of the vector.

+ +

Definition at line 78 of file Vector3.hpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vertex-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vertex-members.htm new file mode 100644 index 0000000..edfc3f9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vertex-members.htm @@ -0,0 +1,63 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Vertex Member List
+
+
+ +

This is the complete list of members for sf::Vertex, including all inherited members.

+ + + + + + + + + +
colorsf::Vertex
positionsf::Vertex
texCoordssf::Vertex
Vertex()sf::Vertex
Vertex(const Vector2f &thePosition)sf::Vertex
Vertex(const Vector2f &thePosition, const Color &theColor)sf::Vertex
Vertex(const Vector2f &thePosition, const Vector2f &theTexCoords)sf::Vertex
Vertex(const Vector2f &thePosition, const Color &theColor, const Vector2f &theTexCoords)sf::Vertex
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vertex.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vertex.htm new file mode 100644 index 0000000..c3abeaf --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Vertex.htm @@ -0,0 +1,323 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Define a point with color and texture coordinates. + More...

+ +

#include <Vertex.hpp>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 Vertex ()
 Default constructor. More...
 
 Vertex (const Vector2f &thePosition)
 Construct the vertex from its position. More...
 
 Vertex (const Vector2f &thePosition, const Color &theColor)
 Construct the vertex from its position and color. More...
 
 Vertex (const Vector2f &thePosition, const Vector2f &theTexCoords)
 Construct the vertex from its position and texture coordinates. More...
 
 Vertex (const Vector2f &thePosition, const Color &theColor, const Vector2f &theTexCoords)
 Construct the vertex from its position, color and texture coordinates. More...
 
+ + + + + + + + + + +

+Public Attributes

Vector2f position
 2D position of the vertex More...
 
Color color
 Color of the vertex. More...
 
Vector2f texCoords
 Coordinates of the texture's pixel to map to the vertex. More...
 
+

Detailed Description

+

Define a point with color and texture coordinates.

+

A vertex is an improved point.

+

It has a position and other extra attributes that will be used for drawing: in SFML, vertices also have a color and a pair of texture coordinates.

+

The vertex is the building block of drawing. Everything which is visible on screen is made of vertices. They are grouped as 2D primitives (triangles, quads, ...), and these primitives are grouped to create even more complex 2D entities such as sprites, texts, etc.

+

If you use the graphical entities of SFML (sprite, text, shape) you won't have to deal with vertices directly. But if you want to define your own 2D entities, such as tiled maps or particle systems, using vertices will allow you to get maximum performances.

+

Example:

+
// define a 100x100 square, red, with a 10x10 texture mapped on it
+
sf::Vertex vertices[] =
+
{
+ + + + +
};
+
+
// draw it
+
window.draw(vertices, 4, sf::Quads);
+

Note: although texture coordinates are supposed to be an integer amount of pixels, their type is float because of some buggy graphics drivers that are not able to process integer coordinates correctly.

+
See Also
sf::VertexArray
+ +

Definition at line 42 of file Vertex.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Vertex::Vertex ()
+
+ +

Default constructor.

+ +
+
+ +
+
+ + + + + + + + +
sf::Vertex::Vertex (const Vector2fthePosition)
+
+ +

Construct the vertex from its position.

+

The vertex color is white and texture coordinates are (0, 0).

+
Parameters
+ + +
thePositionVertex position
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
sf::Vertex::Vertex (const Vector2fthePosition,
const ColortheColor 
)
+
+ +

Construct the vertex from its position and color.

+

The texture coordinates are (0, 0).

+
Parameters
+ + + +
thePositionVertex position
theColorVertex color
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
sf::Vertex::Vertex (const Vector2fthePosition,
const Vector2ftheTexCoords 
)
+
+ +

Construct the vertex from its position and texture coordinates.

+

The vertex color is white.

+
Parameters
+ + + +
thePositionVertex position
theTexCoordsVertex texture coordinates
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
sf::Vertex::Vertex (const Vector2fthePosition,
const ColortheColor,
const Vector2ftheTexCoords 
)
+
+ +

Construct the vertex from its position, color and texture coordinates.

+
Parameters
+ + + + +
thePositionVertex position
theColorVertex color
theTexCoordsVertex texture coordinates
+
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
Color sf::Vertex::color
+
+ +

Color of the vertex.

+ +

Definition at line 98 of file Vertex.hpp.

+ +
+
+ +
+
+ + + + +
Vector2f sf::Vertex::position
+
+ +

2D position of the vertex

+ +

Definition at line 97 of file Vertex.hpp.

+ +
+
+ +
+
+ + + + +
Vector2f sf::Vertex::texCoords
+
+ +

Coordinates of the texture's pixel to map to the vertex.

+ +

Definition at line 99 of file Vertex.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray-members.htm new file mode 100644 index 0000000..8df2c47 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray-members.htm @@ -0,0 +1,67 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::VertexArray Member List
+
+
+ +

This is the complete list of members for sf::VertexArray, including all inherited members.

+ + + + + + + + + + + + + +
append(const Vertex &vertex)sf::VertexArray
clear()sf::VertexArray
getBounds() const sf::VertexArray
getPrimitiveType() const sf::VertexArray
getVertexCount() const sf::VertexArray
operator[](unsigned int index)sf::VertexArray
operator[](unsigned int index) const sf::VertexArray
resize(unsigned int vertexCount)sf::VertexArray
setPrimitiveType(PrimitiveType type)sf::VertexArray
VertexArray()sf::VertexArray
VertexArray(PrimitiveType type, unsigned int vertexCount=0)sf::VertexArrayexplicit
~Drawable()sf::Drawableinlinevirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray.htm new file mode 100644 index 0000000..3d90ca6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray.htm @@ -0,0 +1,394 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::VertexArray Class Reference
+
+
+ +

Define a set of one or more 2D primitives. + More...

+ +

#include <VertexArray.hpp>

+
+Inheritance diagram for sf::VertexArray:
+
+
+ + +sf::Drawable + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 VertexArray ()
 Default constructor. More...
 
 VertexArray (PrimitiveType type, unsigned int vertexCount=0)
 Construct the vertex array with a type and an initial number of vertices. More...
 
unsigned int getVertexCount () const
 Return the vertex count. More...
 
Vertexoperator[] (unsigned int index)
 Get a read-write access to a vertex by its index. More...
 
const Vertexoperator[] (unsigned int index) const
 Get a read-only access to a vertex by its index. More...
 
void clear ()
 Clear the vertex array. More...
 
void resize (unsigned int vertexCount)
 Resize the vertex array. More...
 
void append (const Vertex &vertex)
 Add a vertex to the array. More...
 
void setPrimitiveType (PrimitiveType type)
 Set the type of primitives to draw. More...
 
PrimitiveType getPrimitiveType () const
 Get the type of primitives drawn by the vertex array. More...
 
FloatRect getBounds () const
 Compute the bounding rectangle of the vertex array. More...
 
+

Detailed Description

+

Define a set of one or more 2D primitives.

+

sf::VertexArray is a very simple wrapper around a dynamic array of vertices and a primitives type.

+

It inherits sf::Drawable, but unlike other drawables it is not transformable.

+

Example:

+
+
lines[0].position = sf::Vector2f(10, 0);
+
lines[1].position = sf::Vector2f(20, 0);
+
lines[2].position = sf::Vector2f(30, 5);
+
lines[3].position = sf::Vector2f(40, 2);
+
+
window.draw(lines);
+
See Also
sf::Vertex
+ +

Definition at line 45 of file VertexArray.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::VertexArray::VertexArray ()
+
+ +

Default constructor.

+

Creates an empty vertex array.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sf::VertexArray::VertexArray (PrimitiveType type,
unsigned int vertexCount = 0 
)
+
+explicit
+
+ +

Construct the vertex array with a type and an initial number of vertices.

+
Parameters
+ + + +
typeType of primitives
vertexCountInitial number of vertices in the array
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void sf::VertexArray::append (const Vertexvertex)
+
+ +

Add a vertex to the array.

+
Parameters
+ + +
vertexVertex to add
+
+
+ +
+
+ +
+
+ + + + + + + +
void sf::VertexArray::clear ()
+
+ +

Clear the vertex array.

+

This function removes all the vertices from the array. It doesn't deallocate the corresponding memory, so that adding new vertices after clearing doesn't involve reallocating all the memory.

+ +
+
+ +
+
+ + + + + + + +
FloatRect sf::VertexArray::getBounds () const
+
+ +

Compute the bounding rectangle of the vertex array.

+

This function returns the axis-aligned rectangle that contains all the vertices of the array.

+
Returns
Bounding rectangle of the vertex array
+ +
+
+ +
+
+ + + + + + + +
PrimitiveType sf::VertexArray::getPrimitiveType () const
+
+ +

Get the type of primitives drawn by the vertex array.

+
Returns
Primitive type
+ +
+
+ +
+
+ + + + + + + +
unsigned int sf::VertexArray::getVertexCount () const
+
+ +

Return the vertex count.

+
Returns
Number of vertices in the array
+ +
+
+ +
+
+ + + + + + + + +
Vertex& sf::VertexArray::operator[] (unsigned int index)
+
+ +

Get a read-write access to a vertex by its index.

+

This function doesn't check index, it must be in range [0, getVertexCount() - 1]. The behaviour is undefined otherwise.

+
Parameters
+ + +
indexIndex of the vertex to get
+
+
+
Returns
Reference to the index-th vertex
+
See Also
getVertexCount
+ +
+
+ +
+
+ + + + + + + + +
const Vertex& sf::VertexArray::operator[] (unsigned int index) const
+
+ +

Get a read-only access to a vertex by its index.

+

This function doesn't check index, it must be in range [0, getVertexCount() - 1]. The behaviour is undefined otherwise.

+
Parameters
+ + +
indexIndex of the vertex to get
+
+
+
Returns
Const reference to the index-th vertex
+
See Also
getVertexCount
+ +
+
+ +
+
+ + + + + + + + +
void sf::VertexArray::resize (unsigned int vertexCount)
+
+ +

Resize the vertex array.

+

If vertexCount is greater than the current size, the previous vertices are kept and new (default-constructed) vertices are added. If vertexCount is less than the current size, existing vertices are removed from the array.

+
Parameters
+ + +
vertexCountNew size of the array (number of vertices)
+
+
+ +
+
+ +
+
+ + + + + + + + +
void sf::VertexArray::setPrimitiveType (PrimitiveType type)
+
+ +

Set the type of primitives to draw.

+

This function defines how the vertices must be interpreted when it's time to draw them:

+
    +
  • As points
  • +
  • As lines
  • +
  • As triangles
  • +
  • As quads The default primitive type is sf::Points.
  • +
+
Parameters
+ + +
typeType of primitive
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VertexArray.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa8145e08770a16fc0871ef2bfbeaa7a4c903aa GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^NkAOH!3-p?o(z};q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IXg`#oJ8Ln;{G&V8GASb@j2zxT@b`X{Q2 zjM9^iPIS{QE!ow<|Cm`^f4`^Z(v3{y};hUyyf2E$M^-l zo?71V=ZD(dQa$PGR;AzWd~J|j^yE~%+V=gCA9QbZ35D*xuz9<|){A%k7@SHy^*CL0 z>8fAbXK{pHZBTOxHC^ysA;>Fp1;f0TtOj9^1=n9MI974QN#bk;^CNGqEF}h|SsV=w zYD@|XIvF@Jlo*&`-2Ytyf|A-S2}?k7{0h^)+lysoFJheY&i{tOD}@e@9RbeQKCgGp zxtzPWwy5(?)y|cI$0N7hoV56jS;wCIc)puT*?8`+am)VD=h?+mSMfbO*;_t0(4Eo7DP-}TmpQI8SM7God42A4 w;s3jj1;2G3SBUv~zTfh|+I?(_N=6~}HVZ`)RHlkm0;7w;)78&qol`;+0CHI2`~Uy| literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VideoMode-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VideoMode-members.htm new file mode 100644 index 0000000..ecebe6b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VideoMode-members.htm @@ -0,0 +1,69 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::VideoMode Member List
+
+
+ +

This is the complete list of members for sf::VideoMode, including all inherited members.

+ + + + + + + + + + + + + + + +
bitsPerPixelsf::VideoMode
getDesktopMode()sf::VideoModestatic
getFullscreenModes()sf::VideoModestatic
heightsf::VideoMode
isValid() const sf::VideoMode
operator!=(const VideoMode &left, const VideoMode &right)sf::VideoModerelated
operator<(const VideoMode &left, const VideoMode &right)sf::VideoModerelated
operator<=(const VideoMode &left, const VideoMode &right)sf::VideoModerelated
operator==(const VideoMode &left, const VideoMode &right)sf::VideoModerelated
operator>(const VideoMode &left, const VideoMode &right)sf::VideoModerelated
operator>=(const VideoMode &left, const VideoMode &right)sf::VideoModerelated
VideoMode()sf::VideoMode
VideoMode(unsigned int modeWidth, unsigned int modeHeight, unsigned int modeBitsPerPixel=32)sf::VideoMode
widthsf::VideoMode
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VideoMode.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VideoMode.htm new file mode 100644 index 0000000..438e064 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1VideoMode.htm @@ -0,0 +1,596 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

VideoMode defines a video mode (width, height, bpp) + More...

+ +

#include <VideoMode.hpp>

+ + + + + + + + + + + +

+Public Member Functions

 VideoMode ()
 Default constructor. More...
 
 VideoMode (unsigned int modeWidth, unsigned int modeHeight, unsigned int modeBitsPerPixel=32)
 Construct the video mode with its attributes. More...
 
bool isValid () const
 Tell whether or not the video mode is valid. More...
 
+ + + + + + + +

+Static Public Member Functions

static VideoMode getDesktopMode ()
 Get the current desktop video mode. More...
 
static const std::vector
+< VideoMode > & 
getFullscreenModes ()
 Retrieve all the video modes supported in fullscreen mode. More...
 
+ + + + + + + + + + +

+Public Attributes

unsigned int width
 Video mode width, in pixels. More...
 
unsigned int height
 Video mode height, in pixels. More...
 
unsigned int bitsPerPixel
 Video mode pixel depth, in bits per pixels. More...
 
+ + + + + + + + + + + + + + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
bool operator== (const VideoMode &left, const VideoMode &right)
 Overload of == operator to compare two video modes. More...
 
bool operator!= (const VideoMode &left, const VideoMode &right)
 Overload of != operator to compare two video modes. More...
 
bool operator< (const VideoMode &left, const VideoMode &right)
 Overload of < operator to compare video modes. More...
 
bool operator> (const VideoMode &left, const VideoMode &right)
 Overload of > operator to compare video modes. More...
 
bool operator<= (const VideoMode &left, const VideoMode &right)
 Overload of <= operator to compare video modes. More...
 
bool operator>= (const VideoMode &left, const VideoMode &right)
 Overload of >= operator to compare video modes. More...
 
+

Detailed Description

+

VideoMode defines a video mode (width, height, bpp)

+

A video mode is defined by a width and a height (in pixels) and a depth (in bits per pixel).

+

Video modes are used to setup windows (sf::Window) at creation time.

+

The main usage of video modes is for fullscreen mode: indeed you must use one of the valid video modes allowed by the OS (which are defined by what the monitor and the graphics card support), otherwise your window creation will just fail.

+

sf::VideoMode provides a static function for retrieving the list of all the video modes supported by the system: getFullscreenModes().

+

A custom video mode can also be checked directly for fullscreen compatibility with its isValid() function.

+

Additionnally, sf::VideoMode provides a static function to get the mode currently used by the desktop: getDesktopMode(). This allows to build windows with the same size or pixel depth as the current resolution.

+

Usage example:

+
// Display the list of all the video modes available for fullscreen
+
std::vector<sf::VideoMode> modes = sf::VideoMode::getFullscreenModes();
+
for (std::size_t i = 0; i < modes.size(); ++i)
+
{
+
sf::VideoMode mode = modes[i];
+
std::cout << "Mode #" << i << ": "
+
<< mode.width << "x" << mode.height << " - "
+
<< mode.bitsPerPixel << " bpp" << std::endl;
+
}
+
+
// Create a window with the same pixel depth as the desktop
+ +
window.create(sf::VideoMode(1024, 768, desktop.bitsPerPixel), "SFML window");
+
+

Definition at line 41 of file VideoMode.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::VideoMode::VideoMode ()
+
+ +

Default constructor.

+

This constructors initializes all members to 0.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
sf::VideoMode::VideoMode (unsigned int modeWidth,
unsigned int modeHeight,
unsigned int modeBitsPerPixel = 32 
)
+
+ +

Construct the video mode with its attributes.

+
Parameters
+ + + + +
modeWidthWidth in pixels
modeHeightHeight in pixels
modeBitsPerPixelPixel depths in bits per pixel
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
static VideoMode sf::VideoMode::getDesktopMode ()
+
+static
+
+ +

Get the current desktop video mode.

+
Returns
Current desktop video mode
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const std::vector<VideoMode>& sf::VideoMode::getFullscreenModes ()
+
+static
+
+ +

Retrieve all the video modes supported in fullscreen mode.

+

When creating a fullscreen window, the video mode is restricted to be compatible with what the graphics driver and monitor support. This function returns the complete list of all video modes that can be used in fullscreen mode. The returned array is sorted from best to worst, so that the first element will always give the best mode (higher width, height and bits-per-pixel).

+
Returns
Array containing all the supported fullscreen modes
+ +
+
+ +
+
+ + + + + + + +
bool sf::VideoMode::isValid () const
+
+ +

Tell whether or not the video mode is valid.

+

The validity of video modes is only relevant when using fullscreen windows; otherwise any video mode can be used with no restriction.

+
Returns
True if the video mode is valid for fullscreen mode
+ +
+
+

Friends And Related Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator!= (const VideoModeleft,
const VideoModeright 
)
+
+related
+
+ +

Overload of != operator to compare two video modes.

+
Parameters
+ + + +
leftLeft operand (a video mode)
rightRight operand (a video mode)
+
+
+
Returns
True if modes are different
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator< (const VideoModeleft,
const VideoModeright 
)
+
+related
+
+ +

Overload of < operator to compare video modes.

+
Parameters
+ + + +
leftLeft operand (a video mode)
rightRight operand (a video mode)
+
+
+
Returns
True if left is lesser than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator<= (const VideoModeleft,
const VideoModeright 
)
+
+related
+
+ +

Overload of <= operator to compare video modes.

+
Parameters
+ + + +
leftLeft operand (a video mode)
rightRight operand (a video mode)
+
+
+
Returns
True if left is lesser or equal than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator== (const VideoModeleft,
const VideoModeright 
)
+
+related
+
+ +

Overload of == operator to compare two video modes.

+
Parameters
+ + + +
leftLeft operand (a video mode)
rightRight operand (a video mode)
+
+
+
Returns
True if modes are equal
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator> (const VideoModeleft,
const VideoModeright 
)
+
+related
+
+ +

Overload of > operator to compare video modes.

+
Parameters
+ + + +
leftLeft operand (a video mode)
rightRight operand (a video mode)
+
+
+
Returns
True if left is greater than right
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator>= (const VideoModeleft,
const VideoModeright 
)
+
+related
+
+ +

Overload of >= operator to compare video modes.

+
Parameters
+ + + +
leftLeft operand (a video mode)
rightRight operand (a video mode)
+
+
+
Returns
True if left is greater or equal than right
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
unsigned int sf::VideoMode::bitsPerPixel
+
+ +

Video mode pixel depth, in bits per pixels.

+ +

Definition at line 104 of file VideoMode.hpp.

+ +
+
+ +
+
+ + + + +
unsigned int sf::VideoMode::height
+
+ +

Video mode height, in pixels.

+ +

Definition at line 103 of file VideoMode.hpp.

+ +
+
+ +
+
+ + + + +
unsigned int sf::VideoMode::width
+
+ +

Video mode width, in pixels.

+ +

Definition at line 102 of file VideoMode.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1View-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1View-members.htm new file mode 100644 index 0000000..bb4fbeb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1View-members.htm @@ -0,0 +1,75 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::View Member List
+
+
+ +

This is the complete list of members for sf::View, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
getCenter() const sf::View
getInverseTransform() const sf::View
getRotation() const sf::View
getSize() const sf::View
getTransform() const sf::View
getViewport() const sf::View
move(float offsetX, float offsetY)sf::View
move(const Vector2f &offset)sf::View
reset(const FloatRect &rectangle)sf::View
rotate(float angle)sf::View
setCenter(float x, float y)sf::View
setCenter(const Vector2f &center)sf::View
setRotation(float angle)sf::View
setSize(float width, float height)sf::View
setSize(const Vector2f &size)sf::View
setViewport(const FloatRect &viewport)sf::View
View()sf::View
View(const FloatRect &rectangle)sf::Viewexplicit
View(const Vector2f &center, const Vector2f &size)sf::View
zoom(float factor)sf::View
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1View.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1View.htm new file mode 100644 index 0000000..d3b80cb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1View.htm @@ -0,0 +1,681 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::View Class Reference
+
+
+ +

2D camera that defines what region is shown on screen + More...

+ +

#include <View.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 View ()
 Default constructor. More...
 
 View (const FloatRect &rectangle)
 Construct the view from a rectangle. More...
 
 View (const Vector2f &center, const Vector2f &size)
 Construct the view from its center and size. More...
 
void setCenter (float x, float y)
 Set the center of the view. More...
 
void setCenter (const Vector2f &center)
 Set the center of the view. More...
 
void setSize (float width, float height)
 Set the size of the view. More...
 
void setSize (const Vector2f &size)
 Set the size of the view. More...
 
void setRotation (float angle)
 Set the orientation of the view. More...
 
void setViewport (const FloatRect &viewport)
 Set the target viewport. More...
 
void reset (const FloatRect &rectangle)
 Reset the view to the given rectangle. More...
 
const Vector2fgetCenter () const
 Get the center of the view. More...
 
const Vector2fgetSize () const
 Get the size of the view. More...
 
float getRotation () const
 Get the current orientation of the view. More...
 
const FloatRectgetViewport () const
 Get the target viewport rectangle of the view. More...
 
void move (float offsetX, float offsetY)
 Move the view relatively to its current position. More...
 
void move (const Vector2f &offset)
 Move the view relatively to its current position. More...
 
void rotate (float angle)
 Rotate the view relatively to its current orientation. More...
 
void zoom (float factor)
 Resize the view rectangle relatively to its current size. More...
 
const TransformgetTransform () const
 Get the projection transform of the view. More...
 
const TransformgetInverseTransform () const
 Get the inverse projection transform of the view. More...
 
+

Detailed Description

+

2D camera that defines what region is shown on screen

+

sf::View defines a camera in the 2D scene.

+

This is a very powerful concept: you can scroll, rotate or zoom the entire scene without altering the way that your drawable objects are drawn.

+

A view is composed of a source rectangle, which defines what part of the 2D scene is shown, and a target viewport, which defines where the contents of the source rectangle will be displayed on the render target (window or texture).

+

The viewport allows to map the scene to a custom part of the render target, and can be used for split-screen or for displaying a minimap, for example. If the source rectangle has not the same size as the viewport, its contents will be stretched to fit in.

+

To apply a view, you have to assign it to the render target. Then, every objects drawn in this render target will be affected by the view until you use another view.

+

Usage example:

+
+
sf::View view;
+
+
// Initialize the view to a rectangle located at (100, 100) and with a size of 400x200
+
view.reset(sf::FloatRect(100, 100, 400, 200));
+
+
// Rotate it by 45 degrees
+
view.rotate(45);
+
+
// Set its target viewport to be half of the window
+
view.setViewport(sf::FloatRect(0.f, 0.f, 0.5f, 1.f));
+
+
// Apply it
+
window.setView(view);
+
+
// Render stuff
+
window.draw(someSprite);
+
+
// Set the default view back
+
window.setView(window.getDefaultView());
+
+
// Render stuff not affected by the view
+
window.draw(someText);
+
See Also
sf::RenderWindow, sf::RenderTexture
+ +

Definition at line 43 of file View.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::View::View ()
+
+ +

Default constructor.

+

This constructor creates a default view of (0, 0, 1000, 1000)

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
sf::View::View (const FloatRectrectangle)
+
+explicit
+
+ +

Construct the view from a rectangle.

+
Parameters
+ + +
rectangleRectangle defining the zone to display
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
sf::View::View (const Vector2fcenter,
const Vector2fsize 
)
+
+ +

Construct the view from its center and size.

+
Parameters
+ + + +
centerCenter of the zone to display
sizeSize of zone to display
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
const Vector2f& sf::View::getCenter () const
+
+ +

Get the center of the view.

+
Returns
Center of the view
+
See Also
getSize, setCenter
+ +
+
+ +
+
+ + + + + + + +
const Transform& sf::View::getInverseTransform () const
+
+ +

Get the inverse projection transform of the view.

+

This function is meant for internal use only.

+
Returns
Inverse of the projection transform defining the view
+
See Also
getTransform
+ +
+
+ +
+
+ + + + + + + +
float sf::View::getRotation () const
+
+ +

Get the current orientation of the view.

+
Returns
Rotation angle of the view, in degrees
+
See Also
setRotation
+ +
+
+ +
+
+ + + + + + + +
const Vector2f& sf::View::getSize () const
+
+ +

Get the size of the view.

+
Returns
Size of the view
+
See Also
getCenter, setSize
+ +
+
+ +
+
+ + + + + + + +
const Transform& sf::View::getTransform () const
+
+ +

Get the projection transform of the view.

+

This function is meant for internal use only.

+
Returns
Projection transform defining the view
+
See Also
getInverseTransform
+ +
+
+ +
+
+ + + + + + + +
const FloatRect& sf::View::getViewport () const
+
+ +

Get the target viewport rectangle of the view.

+
Returns
Viewport rectangle, expressed as a factor of the target size
+
See Also
setViewport
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::View::move (float offsetX,
float offsetY 
)
+
+ +

Move the view relatively to its current position.

+
Parameters
+ + + +
offsetXX coordinate of the move offset
offsetYY coordinate of the move offset
+
+
+
See Also
setCenter, rotate, zoom
+ +
+
+ +
+
+ + + + + + + + +
void sf::View::move (const Vector2foffset)
+
+ +

Move the view relatively to its current position.

+
Parameters
+ + +
offsetMove offset
+
+
+
See Also
setCenter, rotate, zoom
+ +
+
+ +
+
+ + + + + + + + +
void sf::View::reset (const FloatRectrectangle)
+
+ +

Reset the view to the given rectangle.

+

Note that this function resets the rotation angle to 0.

+
Parameters
+ + +
rectangleRectangle defining the zone to display
+
+
+
See Also
setCenter, setSize, setRotation
+ +
+
+ +
+
+ + + + + + + + +
void sf::View::rotate (float angle)
+
+ +

Rotate the view relatively to its current orientation.

+
Parameters
+ + +
angleAngle to rotate, in degrees
+
+
+
See Also
setRotation, move, zoom
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::View::setCenter (float x,
float y 
)
+
+ +

Set the center of the view.

+
Parameters
+ + + +
xX coordinate of the new center
yY coordinate of the new center
+
+
+
See Also
setSize, getCenter
+ +
+
+ +
+
+ + + + + + + + +
void sf::View::setCenter (const Vector2fcenter)
+
+ +

Set the center of the view.

+
Parameters
+ + +
centerNew center
+
+
+
See Also
setSize, getCenter
+ +
+
+ +
+
+ + + + + + + + +
void sf::View::setRotation (float angle)
+
+ +

Set the orientation of the view.

+

The default rotation of a view is 0 degree.

+
Parameters
+ + +
angleNew angle, in degrees
+
+
+
See Also
getRotation
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::View::setSize (float width,
float height 
)
+
+ +

Set the size of the view.

+
Parameters
+ + + +
widthNew width of the view
heightNew height of the view
+
+
+
See Also
setCenter, getCenter
+ +
+
+ +
+
+ + + + + + + + +
void sf::View::setSize (const Vector2fsize)
+
+ +

Set the size of the view.

+
Parameters
+ + +
sizeNew size
+
+
+
See Also
setCenter, getCenter
+ +
+
+ +
+
+ + + + + + + + +
void sf::View::setViewport (const FloatRectviewport)
+
+ +

Set the target viewport.

+

The viewport is the rectangle into which the contents of the view are displayed, expressed as a factor (between 0 and 1) of the size of the RenderTarget to which the view is applied. For example, a view which takes the left side of the target would be defined with View.setViewport(sf::FloatRect(0, 0, 0.5, 1)). By default, a view has a viewport which covers the entire target.

+
Parameters
+ + +
viewportNew viewport rectangle
+
+
+
See Also
getViewport
+ +
+
+ +
+
+ + + + + + + + +
void sf::View::zoom (float factor)
+
+ +

Resize the view rectangle relatively to its current size.

+

Resizing the view simulates a zoom, as the zone displayed on screen grows or shrinks. factor is a multiplier:

+
    +
  • 1 keeps the size unchanged
  • +
  • > 1 makes the view bigger (objects appear smaller)
  • +
  • < 1 makes the view smaller (objects appear bigger)
  • +
+
Parameters
+ + +
factorZoom factor to apply
+
+
+
See Also
setSize, move, rotate
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window-members.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window-members.htm new file mode 100644 index 0000000..c105692 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window-members.htm @@ -0,0 +1,87 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Window Member List
+
+
+ +

This is the complete list of members for sf::Window, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
close()sf::Window
create(VideoMode mode, const String &title, Uint32 style=Style::Default, const ContextSettings &settings=ContextSettings())sf::Window
create(WindowHandle handle, const ContextSettings &settings=ContextSettings())sf::Window
display()sf::Window
ensureGlContext()sf::GlResourceprivatestatic
getPosition() const sf::Window
getSettings() const sf::Window
getSize() const sf::Window
getSystemHandle() const sf::Window
GlResource()sf::GlResourceprivate
isOpen() const sf::Window
NonCopyable()sf::NonCopyableinlineprivate
onCreate()sf::Windowprotectedvirtual
onResize()sf::Windowprotectedvirtual
pollEvent(Event &event)sf::Window
setActive(bool active=true) const sf::Window
setFramerateLimit(unsigned int limit)sf::Window
setIcon(unsigned int width, unsigned int height, const Uint8 *pixels)sf::Window
setJoystickThreshold(float threshold)sf::Window
setKeyRepeatEnabled(bool enabled)sf::Window
setMouseCursorVisible(bool visible)sf::Window
setPosition(const Vector2i &position)sf::Window
setSize(const Vector2u size)sf::Window
setTitle(const String &title)sf::Window
setVerticalSyncEnabled(bool enabled)sf::Window
setVisible(bool visible)sf::Window
waitEvent(Event &event)sf::Window
Window()sf::Window
Window(VideoMode mode, const String &title, Uint32 style=Style::Default, const ContextSettings &settings=ContextSettings())sf::Window
Window(WindowHandle handle, const ContextSettings &settings=ContextSettings())sf::Windowexplicit
~GlResource()sf::GlResourceprivate
~Window()sf::Windowvirtual
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window.htm b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window.htm new file mode 100644 index 0000000..89f94ca --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window.htm @@ -0,0 +1,989 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + + +
+ +

Window that serves as a target for OpenGL rendering. + More...

+ +

#include <Window.hpp>

+
+Inheritance diagram for sf::Window:
+
+
+ + +sf::GlResource +sf::NonCopyable +sf::RenderWindow + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Window ()
 Default constructor. More...
 
 Window (VideoMode mode, const String &title, Uint32 style=Style::Default, const ContextSettings &settings=ContextSettings())
 Construct a new window. More...
 
 Window (WindowHandle handle, const ContextSettings &settings=ContextSettings())
 Construct the window from an existing control. More...
 
virtual ~Window ()
 Destructor. More...
 
void create (VideoMode mode, const String &title, Uint32 style=Style::Default, const ContextSettings &settings=ContextSettings())
 Create (or recreate) the window. More...
 
void create (WindowHandle handle, const ContextSettings &settings=ContextSettings())
 Create (or recreate) the window from an existing control. More...
 
void close ()
 Close the window and destroy all the attached resources. More...
 
bool isOpen () const
 Tell whether or not the window is open. More...
 
const ContextSettingsgetSettings () const
 Get the settings of the OpenGL context of the window. More...
 
bool pollEvent (Event &event)
 Pop the event on top of the event queue, if any, and return it. More...
 
bool waitEvent (Event &event)
 Wait for an event and return it. More...
 
Vector2i getPosition () const
 Get the position of the window. More...
 
void setPosition (const Vector2i &position)
 Change the position of the window on screen. More...
 
Vector2u getSize () const
 Get the size of the rendering region of the window. More...
 
void setSize (const Vector2u size)
 Change the size of the rendering region of the window. More...
 
void setTitle (const String &title)
 Change the title of the window. More...
 
void setIcon (unsigned int width, unsigned int height, const Uint8 *pixels)
 Change the window's icon. More...
 
void setVisible (bool visible)
 Show or hide the window. More...
 
void setVerticalSyncEnabled (bool enabled)
 Enable or disable vertical synchronization. More...
 
void setMouseCursorVisible (bool visible)
 Show or hide the mouse cursor. More...
 
void setKeyRepeatEnabled (bool enabled)
 Enable or disable automatic key-repeat. More...
 
void setFramerateLimit (unsigned int limit)
 Limit the framerate to a maximum fixed frequency. More...
 
void setJoystickThreshold (float threshold)
 Change the joystick threshold. More...
 
bool setActive (bool active=true) const
 Activate or deactivate the window as the current target for OpenGL rendering. More...
 
void display ()
 Display on screen what has been rendered to the window so far. More...
 
WindowHandle getSystemHandle () const
 Get the OS-specific handle of the window. More...
 
+ + + + + + + +

+Protected Member Functions

virtual void onCreate ()
 Function called after the window has been created. More...
 
virtual void onResize ()
 Function called after the window has been resized. More...
 
+ + + + +

+Static Private Member Functions

static void ensureGlContext ()
 Make sure that a valid OpenGL context exists in the current thread. More...
 
+

Detailed Description

+

Window that serves as a target for OpenGL rendering.

+

sf::Window is the main class of the Window module.

+

It defines an OS window that is able to receive an OpenGL rendering.

+

A sf::Window can create its own new window, or be embedded into an already existing control using the create(handle) function. This can be useful for embedding an OpenGL rendering area into a view which is part of a bigger GUI with existing windows, controls, etc. It can also serve as embedding an OpenGL rendering area into a window created by another (probably richer) GUI library like Qt or wxWidgets.

+

The sf::Window class provides a simple interface for manipulating the window: move, resize, show/hide, control mouse cursor, etc. It also provides event handling through its pollEvent() and waitEvent() functions.

+

Note that OpenGL experts can pass their own parameters (antialiasing level, bits for the depth and stencil buffers, etc.) to the OpenGL context attached to the window, with the sf::ContextSettings structure which is passed as an optional argument when creating the window.

+

Usage example:

+
// Declare and create a new window
+
sf::Window window(sf::VideoMode(800, 600), "SFML window");
+
+
// Limit the framerate to 60 frames per second (this step is optional)
+
window.setFramerateLimit(60);
+
+
// The main loop - ends as soon as the window is closed
+
while (window.isOpen())
+
{
+
// Event processing
+
sf::Event event;
+
while (window.pollEvent(event))
+
{
+
// Request for closing the window
+
if (event.type == sf::Event::Closed)
+
window.close();
+
}
+
+
// Activate the window for OpenGL rendering
+
window.setActive();
+
+
// OpenGL drawing commands go here...
+
+
// End the current frame and display its contents on screen
+
window.display();
+
}
+
+

Definition at line 57 of file Window/Window.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
sf::Window::Window ()
+
+ +

Default constructor.

+

This constructor doesn't actually create the window, use the other constructors or call "create" to do so.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sf::Window::Window (VideoMode mode,
const Stringtitle,
Uint32 style = Style::Default,
const ContextSettingssettings = ContextSettings() 
)
+
+ +

Construct a new window.

+

This constructor creates the window with the size and pixel depth defined in mode. An optional style can be passed to customize the look and behaviour of the window (borders, title bar, resizable, closable, ...). If style contains Style::Fullscreen, then mode must be a valid video mode.

+

The fourth parameter is an optional structure specifying advanced OpenGL context settings such as antialiasing, depth-buffer bits, etc.

+
Parameters
+ + + + + +
modeVideo mode to use (defines the width, height and depth of the rendering area of the window)
titleTitle of the window
styleWindow style
settingsAdditional settings for the underlying OpenGL context
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sf::Window::Window (WindowHandle handle,
const ContextSettingssettings = ContextSettings() 
)
+
+explicit
+
+ +

Construct the window from an existing control.

+

Use this constructor if you want to create an OpenGL rendering area into an already existing control.

+

The second parameter is an optional structure specifying advanced OpenGL context settings such as antialiasing, depth-buffer bits, etc.

+
Parameters
+ + + +
handlePlatform-specific handle of the control
settingsAdditional settings for the underlying OpenGL context
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual sf::Window::~Window ()
+
+virtual
+
+ +

Destructor.

+

Closes the window and free all the resources attached to it.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void sf::Window::close ()
+
+ +

Close the window and destroy all the attached resources.

+

After calling this function, the sf::Window instance remains valid and you can call create() to recreate the window. All other functions such as pollEvent() or display() will still work (i.e. you don't have to test isOpen() every time), and will have no effect on closed windows.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Window::create (VideoMode mode,
const Stringtitle,
Uint32 style = Style::Default,
const ContextSettingssettings = ContextSettings() 
)
+
+ +

Create (or recreate) the window.

+

If the window was already created, it closes it first. If style contains Style::Fullscreen, then mode must be a valid video mode.

+
Parameters
+ + + + + +
modeVideo mode to use (defines the width, height and depth of the rendering area of the window)
titleTitle of the window
styleWindow style
settingsAdditional settings for the underlying OpenGL context
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void sf::Window::create (WindowHandle handle,
const ContextSettingssettings = ContextSettings() 
)
+
+ +

Create (or recreate) the window from an existing control.

+

Use this function if you want to create an OpenGL rendering area into an already existing control. If the window was already created, it closes it first.

+
Parameters
+ + + +
handlePlatform-specific handle of the control
settingsAdditional settings for the underlying OpenGL context
+
+
+ +
+
+ +
+
+ + + + + + + +
void sf::Window::display ()
+
+ +

Display on screen what has been rendered to the window so far.

+

This function is typically called after all OpenGL rendering has been done for the current frame, in order to show it on screen.

+ +
+
+ +
+
+ + + + + + + +
Vector2i sf::Window::getPosition () const
+
+ +

Get the position of the window.

+
Returns
Position of the window, in pixels
+
See Also
setPosition
+ +
+
+ +
+
+ + + + + + + +
const ContextSettings& sf::Window::getSettings () const
+
+ +

Get the settings of the OpenGL context of the window.

+

Note that these settings may be different from what was passed to the constructor or the create() function, if one or more settings were not supported. In this case, SFML chose the closest match.

+
Returns
Structure containing the OpenGL context settings
+ +
+
+ +
+
+ + + + + + + +
Vector2u sf::Window::getSize () const
+
+ +

Get the size of the rendering region of the window.

+

The size doesn't include the titlebar and borders of the window.

+
Returns
Size in pixels
+
See Also
setSize
+ +
+
+ +
+
+ + + + + + + +
WindowHandle sf::Window::getSystemHandle () const
+
+ +

Get the OS-specific handle of the window.

+

The type of the returned handle is sf::WindowHandle, which is a typedef to the handle type defined by the OS. You shouldn't need to use this function, unless you have very specific stuff to implement that SFML doesn't support, or implement a temporary workaround until a bug is fixed.

+
Returns
System handle of the window
+ +
+
+ +
+
+ + + + + + + +
bool sf::Window::isOpen () const
+
+ +

Tell whether or not the window is open.

+

This function returns whether or not the window exists. Note that a hidden window (setVisible(false)) is open (therefore this function would return true).

+
Returns
True if the window is open, false if it has been closed
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void sf::Window::onCreate ()
+
+protectedvirtual
+
+ +

Function called after the window has been created.

+

This function is called so that derived classes can perform their own specific initialization as soon as the window is created.

+ +

Reimplemented in sf::RenderWindow.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void sf::Window::onResize ()
+
+protectedvirtual
+
+ +

Function called after the window has been resized.

+

This function is called so that derived classes can perform custom actions when the size of the window changes.

+ +

Reimplemented in sf::RenderWindow.

+ +
+
+ +
+
+ + + + + + + + +
bool sf::Window::pollEvent (Eventevent)
+
+ +

Pop the event on top of the event queue, if any, and return it.

+

This function is not blocking: if there's no pending event then it will return false and leave event unmodified. Note that more than one event may be present in the event queue, thus you should always call this function in a loop to make sure that you process every pending event.

+
sf::Event event;
+
while (window.pollEvent(event))
+
{
+
// process event...
+
}
+
Parameters
+ + +
eventEvent to be returned
+
+
+
Returns
True if an event was returned, or false if the event queue was empty
+
See Also
waitEvent
+ +
+
+ +
+
+ + + + + + + + +
bool sf::Window::setActive (bool active = true) const
+
+ +

Activate or deactivate the window as the current target for OpenGL rendering.

+

A window is active only on the current thread, if you want to make it active on another thread you have to deactivate it on the previous thread first if it was active. Only one window can be active on a thread at a time, thus the window previously active (if any) automatically gets deactivated.

+
Parameters
+ + +
activeTrue to activate, false to deactivate
+
+
+
Returns
True if operation was successful, false otherwise
+ +
+
+ +
+
+ + + + + + + + +
void sf::Window::setFramerateLimit (unsigned int limit)
+
+ +

Limit the framerate to a maximum fixed frequency.

+

If a limit is set, the window will use a small delay after each call to display() to ensure that the current frame lasted long enough to match the framerate limit. SFML will try to match the given limit as much as it can, but since it internally uses sf::sleep, whose precision depends on the underlying OS, the results may be a little unprecise as well (for example, you can get 65 FPS when requesting 60).

+
Parameters
+ + +
limitFramerate limit, in frames per seconds (use 0 to disable limit)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sf::Window::setIcon (unsigned int width,
unsigned int height,
const Uint8 * pixels 
)
+
+ +

Change the window's icon.

+

pixels must be an array of width x height pixels in 32-bits RGBA format.

+

The OS default icon is used by default.

+
Parameters
+ + + + +
widthIcon's width, in pixels
heightIcon's height, in pixels
pixelsPointer to the array of pixels in memory
+
+
+
See Also
setTitle
+ +
+
+ +
+
+ + + + + + + + +
void sf::Window::setJoystickThreshold (float threshold)
+
+ +

Change the joystick threshold.

+

The joystick threshold is the value below which no JoystickMoved event will be generated.

+

The threshold value is 0.1 by default.

+
Parameters
+ + +
thresholdNew threshold, in the range [0, 100]
+
+
+ +
+
+ +
+
+ + + + + + + + +
void sf::Window::setKeyRepeatEnabled (bool enabled)
+
+ +

Enable or disable automatic key-repeat.

+

If key repeat is enabled, you will receive repeated KeyPressed events while keeping a key pressed. If it is disabled, you will only get a single event when the key is pressed.

+

Key repeat is enabled by default.

+
Parameters
+ + +
enabledTrue to enable, false to disable
+
+
+ +
+
+ +
+
+ + + + + + + + +
void sf::Window::setMouseCursorVisible (bool visible)
+
+ +

Show or hide the mouse cursor.

+

The mouse cursor is visible by default.

+
Parameters
+ + +
visibleTrue to show the mouse cursor, false to hide it
+
+
+ +
+
+ +
+
+ + + + + + + + +
void sf::Window::setPosition (const Vector2iposition)
+
+ +

Change the position of the window on screen.

+

This function only works for top-level windows (i.e. it will be ignored for windows created from the handle of a child window/control).

+
Parameters
+ + +
positionNew position, in pixels
+
+
+
See Also
getPosition
+ +
+
+ +
+
+ + + + + + + + +
void sf::Window::setSize (const Vector2u size)
+
+ +

Change the size of the rendering region of the window.

+
Parameters
+ + +
sizeNew size, in pixels
+
+
+
See Also
getSize
+ +
+
+ +
+
+ + + + + + + + +
void sf::Window::setTitle (const Stringtitle)
+
+ +

Change the title of the window.

+
Parameters
+ + +
titleNew title
+
+
+
See Also
setIcon
+ +
+
+ +
+
+ + + + + + + + +
void sf::Window::setVerticalSyncEnabled (bool enabled)
+
+ +

Enable or disable vertical synchronization.

+

Activating vertical synchronization will limit the number of frames displayed to the refresh rate of the monitor. This can avoid some visual artifacts, and limit the framerate to a good value (but not constant across different computers).

+

Vertical synchronization is disabled by default.

+
Parameters
+ + +
enabledTrue to enable v-sync, false to deactivate it
+
+
+ +
+
+ +
+
+ + + + + + + + +
void sf::Window::setVisible (bool visible)
+
+ +

Show or hide the window.

+

The window is shown by default.

+
Parameters
+ + +
visibleTrue to show the window, false to hide it
+
+
+ +
+
+ +
+
+ + + + + + + + +
bool sf::Window::waitEvent (Eventevent)
+
+ +

Wait for an event and return it.

+

This function is blocking: if there's no pending event then it will wait until an event is received. After this function returns (and no error occured), the event object is always valid and filled properly. This function is typically used when you have a thread that is dedicated to events handling: you want to make this thread sleep as long as no new event is received.

+
sf::Event event;
+
if (window.waitEvent(event))
+
{
+
// process event...
+
}
+
Parameters
+ + +
eventEvent to be returned
+
+
+
Returns
False if any error occured
+
See Also
pollEvent
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window.png b/SFML-2.1-osx-clang-universal/doc/html/classsf_1_1Window.png new file mode 100644 index 0000000000000000000000000000000000000000..75c9ab37d890015916fcc63b3c35ca461995a338 GIT binary patch literal 1018 zcmeAS@N?(olHy`uVBq!ia0vp^Z-BUigBeI(&iI}Mq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0J3U<-Ln;{G&V9RWlY)TT_VZiL{f+-L zTh?{on~2v_d6r%Eb73-LejI=1%q*uLGiI8yPF~V>WYeT80@J51xm*zGX(c~>uKi^Z zQF-(7XP3hCJ=cE@G5hkbdTmc>0^8}&n{Lj_x$-G+j_>wGDtk{G->hhS?JPUzdZSCo4i{V0rSe>1_nKLByvTBUDhSlc4=Sy>TP3$}UY;l-v(aogLZU@_` zy5GEaewtm9Ht+PcO(!Sk&e8v9ph99?ld^|5lC zZBzaHnU?8(Js%iKk9Vw5ncH^S>(b92 zwd}NOlRU1SS)C1_TiF@xp2xh3^t$W2#bp%RpHuaQVw&tDOS@(5ko6X2=x_ED?#YKlNd%u{;xow+KIpO~F*y+p*j(t7< zrue3fsqNRD|IFg%YH#v1`51KU3` z8*nL~{P%|^#d^}4yQMO>7pB-sGk@tk&Ge;%cpM{Xyt({`p>Z{PgMT6@A+lyP0z=nx zhmHex(9KM)*5B@vxHjGTS*BPU^#6Nn%63jWud6@bo%ZV57d~z7V+mH{6aTLHdY^f} zKl*9RY}akq^kVz8Ppm8M^)B>X;k#`9w)>goo;ORR_0!F)`i`c?PSiM1J^igqe42E6 zdfCm6Kpp2l+ot~Tx~Vh&*zFxs4@#_`?6%vz=5*ms1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/dir_0ccda3a7de18f509ca1da5cc9f800e28.htm b/SFML-2.1-osx-clang-universal/doc/html/dir_0ccda3a7de18f509ca1da5cc9f800e28.htm new file mode 100644 index 0000000..61ec7fe --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/dir_0ccda3a7de18f509ca1da5cc9f800e28.htm @@ -0,0 +1,90 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + +
+
+
+
System Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  Clock.hpp [code]
 
file  Err.hpp [code]
 
file  System/Export.hpp [code]
 
file  InputStream.hpp [code]
 
file  Lock.hpp [code]
 
file  Mutex.hpp [code]
 
file  NonCopyable.hpp [code]
 
file  Sleep.hpp [code]
 
file  String.hpp [code]
 
file  Thread.hpp [code]
 
file  Thread.inl [code]
 
file  ThreadLocal.hpp [code]
 
file  ThreadLocalPtr.hpp [code]
 
file  ThreadLocalPtr.inl [code]
 
file  Time.hpp [code]
 
file  Utf.hpp [code]
 
file  Utf.inl [code]
 
file  Vector2.hpp [code]
 
file  Vector2.inl [code]
 
file  Vector3.hpp [code]
 
file  Vector3.inl [code]
 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/dir_23684cb3154a9a6315b13ddae22451ba.htm b/SFML-2.1-osx-clang-universal/doc/html/dir_23684cb3154a9a6315b13ddae22451ba.htm new file mode 100644 index 0000000..b7bd4f1 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/dir_23684cb3154a9a6315b13ddae22451ba.htm @@ -0,0 +1,66 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + +
+
+
+
Audio Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Files

file  Audio/Export.hpp [code]
 
file  Listener.hpp [code]
 
file  Music.hpp [code]
 
file  Sound.hpp [code]
 
file  SoundBuffer.hpp [code]
 
file  SoundBufferRecorder.hpp [code]
 
file  SoundRecorder.hpp [code]
 
file  SoundSource.hpp [code]
 
file  SoundStream.hpp [code]
 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/dir_5b3d798f7f3738805c48f4569d73ec1e.htm b/SFML-2.1-osx-clang-universal/doc/html/dir_5b3d798f7f3738805c48f4569d73ec1e.htm new file mode 100644 index 0000000..5310a78 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/dir_5b3d798f7f3738805c48f4569d73ec1e.htm @@ -0,0 +1,70 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + +
+
+
+
Network Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  Network/Export.hpp [code]
 
file  Ftp.hpp [code]
 
file  Http.hpp [code]
 
file  IpAddress.hpp [code]
 
file  Packet.hpp [code]
 
file  Socket.hpp [code]
 
file  SocketHandle.hpp [code]
 
file  SocketSelector.hpp [code]
 
file  TcpListener.hpp [code]
 
file  TcpSocket.hpp [code]
 
file  UdpSocket.hpp [code]
 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/dir_6c7bee9a69c8d4d5a239feb5f32dab30.htm b/SFML-2.1-osx-clang-universal/doc/html/dir_6c7bee9a69c8d4d5a239feb5f32dab30.htm new file mode 100644 index 0000000..41f3c6c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/dir_6c7bee9a69c8d4d5a239feb5f32dab30.htm @@ -0,0 +1,50 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + +
+
+
+
doc Directory Reference
+
+
+ + + + +

+Files

file  mainpage.hpp [code]
 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/dir_798ce90c6ecad3595159066965e3fff6.htm b/SFML-2.1-osx-clang-universal/doc/html/dir_798ce90c6ecad3595159066965e3fff6.htm new file mode 100644 index 0000000..c847b36 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/dir_798ce90c6ecad3595159066965e3fff6.htm @@ -0,0 +1,72 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + +
+
+
+
Window Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  Context.hpp [code]
 
file  ContextSettings.hpp [code]
 
file  Event.hpp [code]
 
file  Window/Export.hpp [code]
 
file  GlResource.hpp [code]
 
file  Joystick.hpp [code]
 
file  Keyboard.hpp [code]
 
file  Mouse.hpp [code]
 
file  VideoMode.hpp [code]
 
file  Window/Window.hpp [code]
 
file  WindowHandle.hpp [code]
 
file  WindowStyle.hpp [code]
 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/dir_b57c126f18dbb5f6d210188b78112323.htm b/SFML-2.1-osx-clang-universal/doc/html/dir_b57c126f18dbb5f6d210188b78112323.htm new file mode 100644 index 0000000..6d84f52 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/dir_b57c126f18dbb5f6d210188b78112323.htm @@ -0,0 +1,102 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + +
+
+
+
Graphics Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  BlendMode.hpp [code]
 
file  CircleShape.hpp [code]
 
file  Color.hpp [code]
 
file  ConvexShape.hpp [code]
 
file  Drawable.hpp [code]
 
file  Graphics/Export.hpp [code]
 
file  Font.hpp [code]
 
file  Glyph.hpp [code]
 
file  Image.hpp [code]
 
file  PrimitiveType.hpp [code]
 
file  Rect.hpp [code]
 
file  Rect.inl [code]
 
file  RectangleShape.hpp [code]
 
file  RenderStates.hpp [code]
 
file  RenderTarget.hpp [code]
 
file  RenderTexture.hpp [code]
 
file  RenderWindow.hpp [code]
 
file  Shader.hpp [code]
 
file  Shape.hpp [code]
 
file  Sprite.hpp [code]
 
file  Text.hpp [code]
 
file  Texture.hpp [code]
 
file  Transform.hpp [code]
 
file  Transformable.hpp [code]
 
file  Vertex.hpp [code]
 
file  VertexArray.hpp [code]
 
file  View.hpp [code]
 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/dir_c08fb8d44334911c4cd4ccee54f88f02.htm b/SFML-2.1-osx-clang-universal/doc/html/dir_c08fb8d44334911c4cd4ccee54f88f02.htm new file mode 100644 index 0000000..39edfe9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/dir_c08fb8d44334911c4cd4ccee54f88f02.htm @@ -0,0 +1,50 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + +
+
+
+
include Directory Reference
+
+
+ + + + +

+Directories

directory  SFML
 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/dir_e537a36512cc2fc6f08fd874f83e8f5f.htm b/SFML-2.1-osx-clang-universal/doc/html/dir_e537a36512cc2fc6f08fd874f83e8f5f.htm new file mode 100644 index 0000000..ffcfc09 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/dir_e537a36512cc2fc6f08fd874f83e8f5f.htm @@ -0,0 +1,75 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + +
+
+
+
SFML Directory Reference
+
+
+ + + + + + + + + + + + +

+Directories

directory  Audio
 
directory  Graphics
 
directory  Network
 
directory  System
 
directory  Window
 
+ + + + + + + + + + + + + + + +

+Files

file  Audio.hpp [code]
 
file  Config.hpp [code]
 
file  Graphics.hpp [code]
 
file  Network.hpp [code]
 
file  OpenGL.hpp [code]
 
file  System.hpp [code]
 
file  Window.hpp [code]
 
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/doxygen.css b/SFML-2.1-osx-clang-universal/doc/html/doxygen.css new file mode 100644 index 0000000..d89e3a0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/doxygen.css @@ -0,0 +1,1278 @@ +/* The standard CSS for doxygen */ + +/* @group Heading Levels */ + +div.contents .textblock h1 +{ + text-align: left; + font-size: 20pt; + font-weight: normal; + margin-top: 1.5em; + padding: 0 0 0.4em 0; + border-bottom: 1px solid #999; + border-top-width: 0; + border-left-width: 0; + border-right-width: 0; + background-color: transparent; +} + +h1.groupheader { + font-size: 150%; +} + +.title { + font-size: 20pt; + font-weight: normal; + margin: 10px 2px; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex +{ + margin-bottom: 1em; +} + +div.qindex, div.navtab{ + background-color: #eee; + border: 1px solid #999; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +a.el +{ + padding: 1px; + text-decoration: none; + color: #577E25; +} + +a.el:hover +{ + text-decoration: underline; +} + +pre.fragment { + /*border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%;*/ + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-size: 10pt; + padding: 0.5em 1em; + background-color: #f5f5f5; + border: 1px solid #bbb; + .border-radius(5px); +} + +div.fragment { + /*margin: 0 0 0 5px; + padding: 0.5em 1em; + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-size: 10pt; + background-color: #eef7e3; + border-left: 3px solid #8DC841; + border-right: 0; + border-bottom: 0;*/ + + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-size: 10pt; + padding: 0.5em 1em; + background-color: #f5f5f5; + border: 1px solid #bbb; + .border-radius(5px); +} + +div.line { + min-height: 13px; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; +} + +span.lineno { + padding-right: 4px; + text-align: right; + background-color: #E8E8E8; + white-space: pre; +} + +div.ah { + width: 100%; + background-color: #eee; + font-weight: bold; + color: #000; + margin-bottom: 1px; + margin-top: 1px; + border: solid 1px #999; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + width: 950px; + margin: 0 auto; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + display: none; + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + /*box-shadow: 0 0 15px cyan;*/ +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + /*margin-bottom: 10px;*/ + margin-right: 5px; + display: table !important; + width: 100%; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #000; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #eee; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + background-color: #FFFFFF; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #bbb; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding: 5px 5px 5px 0; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + /*border-left: 1px solid rgba(0,0,0,0.05);*/ +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table table +{ + width: 90%; +} + +.memitem table table +{ + width: auto; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + width: 100%; + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath +{ + display: none; +} + +.navpath ul +{ + font-size: 11px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; + padding: 1px; + text-decoration: none; + color: #577E25; +} + +div.summary a:hover +{ + text-decoration: underline; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + width: 950px; + margin: 2em auto; + border-bottom: 1px solid #999; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* tabs.css */ +.tabs, .tabs2, .tabs3 { + width: 100%; + z-index: 101; + font-size: 11pt; + background-color: #EAF5DB; + border-left: 1px solid #999; + border-right: 1px solid #999; + border-bottom: 1px solid #999; + padding: 0; + margin: 0; +} + +.tabs2 { + font-size: 10pt; +} +.tabs3 { + font-size: 9pt; +} + +#navrow1 .tablist, #navrow2 .tablist, #navrow3 .tablist, #navrow4 .tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + list-style: none; +} + +#navrow1 +{ + border-top: 1px solid #999; + margin-top: 2em; +} + +#navrow1 .tablist a, #navrow2 .tablist a, #navrow3 .tablist a, #navrow4 .tablist a { + display: block; + margin: 8px 0; + padding: 0 8px; + border-right: 1px solid #bbb; +} + +.tablist li { + margin-bottom: 0 !important; +} + +.tablist li.current a { + font-weight: bold; +} + + + + + +/* SFML css */ +body +{ + font-family: 'Ubuntu', 'Arial', sans-serif; + line-height: 140%; + margin: 0 0 2em 0; + padding: 0; +} + +#banner-container +{ + width: 100%; + margin-top: 25px; + border-top: 2px solid #999; + border-bottom: 2px solid #999; + background-color: rgb(140, 200, 65); +} + +#banner +{ + width: 950px; + height: 60px; + line-height: 54px; + margin: 0 auto; + text-align: center; +} + +#banner #sfml +{ + display: inline; + vertical-align: top; + margin-left: 15px; + color: #fff; + font-size: 50pt; + text-shadow: rgba(0, 0, 0, 0.5) 1px 1px 5px; +} + +#footer-container +{ + clear: both; + width: 100%; + margin-top: 50px; + border-top: 1px solid #999; +} + +#footer +{ + width: 950px; + margin: 10px auto; + text-align: center; + font-size: 10pt; + color: #555; +} + +#footer a +{ + padding: 1px; + text-decoration: none; + color: rgb(70, 100, 30); +} + +#footer a:hover +{ + text-decoration: underline; +} + +div.contents, #content +{ + width: 950px; + margin: 0 auto; + padding: 0; +} + +div.contents h1 +{ + color: #333; + padding: 0.5em 0; + margin-top: 30px; + margin-bottom: 0; + text-align: center; + font-size: 26pt; + font-weight: normal; +} + +div.contents h2 +{ + font-size: 20pt; + font-weight: normal; + margin-top: 1.5em; + padding-bottom: 0.4em; + border-bottom: 1px solid #999; +} + +div.contents h3 +{ + font-size: 16pt; + font-weight: normal; +} + +div.contents p +{ + color: #333; + text-align: justify; +} + +div.contents a, #content a +{ + padding: 1px; + text-decoration: none; + color: rgb(70, 100, 30); +} + +div.contents a:hover, #content a:hover +{ + text-decoration: underline; +} + +div.contents code +{ + font-size: 11pt; + font-family: Consolas, "Liberation Mono", Courier, monospace; +} + +div.contents pre code +{ + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-size: 10pt; + padding: 0.5em 1em; + background-color: #f5f5f5; + border: 1px solid #bbb; +} + +div.contents ul +{ + list-style-type: square; + list-style-position: outside; + margin: 0 0 0 1.5em; + padding: 0; +} + +div.contents ul li +{ + color: #333; + margin: 0 0 0.3em 0; +} + diff --git a/SFML-2.1-osx-clang-universal/doc/html/doxygen.png b/SFML-2.1-osx-clang-universal/doc/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/dynsections.js b/SFML-2.1-osx-clang-universal/doc/html/dynsections.js new file mode 100644 index 0000000..ed092c7 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + +
+
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
o*Audio.hpp
o*BlendMode.hpp
o*CircleShape.hpp
o*Clock.hpp
o*Color.hpp
o*Config.hpp
o*Context.hpp
o*ContextSettings.hpp
o*ConvexShape.hpp
o*Drawable.hpp
o*Err.hpp
o*Event.hpp
o*Audio/Export.hpp
o*Graphics/Export.hpp
o*Network/Export.hpp
o*System/Export.hpp
o*Window/Export.hpp
o*Font.hpp
o*Ftp.hpp
o*GlResource.hpp
o*Glyph.hpp
o*Graphics.hpp
o*Http.hpp
o*Image.hpp
o*InputStream.hpp
o*IpAddress.hpp
o*Joystick.hpp
o*Keyboard.hpp
o*Listener.hpp
o*Lock.hpp
o*mainpage.hpp
o*Mouse.hpp
o*Music.hpp
o*Mutex.hpp
o*Network.hpp
o*NonCopyable.hpp
o*OpenGL.hpp
o*Packet.hpp
o*PrimitiveType.hpp
o*Rect.hpp
o*Rect.inl
o*RectangleShape.hpp
o*RenderStates.hpp
o*RenderTarget.hpp
o*RenderTexture.hpp
o*RenderWindow.hpp
o*Shader.hpp
o*Shape.hpp
o*Sleep.hpp
o*Socket.hpp
o*SocketHandle.hpp
o*SocketSelector.hpp
o*Sound.hpp
o*SoundBuffer.hpp
o*SoundBufferRecorder.hpp
o*SoundRecorder.hpp
o*SoundSource.hpp
o*SoundStream.hpp
o*Sprite.hpp
o*String.hpp
o*System.hpp
o*TcpListener.hpp
o*TcpSocket.hpp
o*Text.hpp
o*Texture.hpp
o*Thread.hpp
o*Thread.inl
o*ThreadLocal.hpp
o*ThreadLocalPtr.hpp
o*ThreadLocalPtr.inl
o*Time.hpp
o*Transform.hpp
o*Transformable.hpp
o*UdpSocket.hpp
o*Utf.hpp
o*Utf.inl
o*Vector2.hpp
o*Vector2.inl
o*Vector3.hpp
o*Vector3.inl
o*Vertex.hpp
o*VertexArray.hpp
o*VideoMode.hpp
o*View.hpp
o*Window/Window.hpp
o*Window.hpp
o*WindowHandle.hpp
\*WindowStyle.hpp
+
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2blank.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2cl.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2cl.png new file mode 100644 index 0000000000000000000000000000000000000000..132f6577bf7f085344904602815a260d29f55d9b GIT binary patch literal 453 zcmV;$0XqJPP)VBF;ev;toEj8_OB0EQg5eYilIj#JZG_m^33l3^k4mtzx!TVD?g)Y$ zrvwRDSqT!wLIM$dWCIa$vtxE|mzbTzu-y&$FvF6WA2a{Wr1g}`WdPT-0JzEZ0IxAv z-Z+ejZc&H;I5-pb_SUB}04j0^V)3t{`z<7asDl2Tw3w3sP%)0^8$bhEg)IOTBcRXv zFfq~3&gvJ$F-U7mpBW8z1GY~HK&7h4^YI~Orv~wLnC0PP_dAkv;nzX{9Q|8Gv=2ca z@v)c9T;D#h`TZ2X&&$ff2wedmot995de~-s3I)yauahg;7qn*?1n?F$e+PwP37}~; z1NKUk7reVK^7A;$QRW7qAx40HHUZ<|k3U%nz(Ec`#i+q9K!dgcROAlCS?`L= v>#=f?wF5ZND!1uAfQsk;KN^4&*8~0npJiJ%2dj9(00000NkvXXu0mjfWVFf_ literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2doc.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2folderclosed.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2lastnode.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2link.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2link.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2mlastnode.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2mnode.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2mo.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2mo.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfb80f76e65815989a9350ad79d8ce45380e2b1 GIT binary patch literal 403 zcmV;E0c`$>P)${!fXv7NWJ%@%u4(KapRY>T6_x;E zxE7kt!}Tiw8@d9Sd`rTGum>z#Q14vIm`wm1#-byD1muMi02@YNO5LRF0o!Y{`a!Ya z{^&p0Su|s705&2QxmqdexG+-zNKL3f@8gTQSJrKByfo+oNJ^-{|Mn||Q5SDwjQVsS zr1}7o5-QMs>gYIMD>GRw@$lT`z4r-_m{5U#cR{urD_)TOeY)(UD|qZ^&y`IVijqk~ xs(9-kWFr7E^!lgi8GsFK5kOY_{Xbgf0^etEU%fLevs?fG002ovPDHLkV1nB&vX1}& literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2node.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2node.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2ns.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2ns.png new file mode 100644 index 0000000000000000000000000000000000000000..72e3d71c2892d6f00e259facebc88b45f6db2e35 GIT binary patch literal 388 zcmV-~0ek+5P)f+++#cT|!CkD&4pnIkeMEUEM*>`*9>+Juji$!h-mW%M^8s9957{3nvbrz^&=u<~TAUrFROkmt%^F~Ez+-c53Lv%iH3d38!Rv?K zrb&MYAhp;Gf<}wS;9ZZq2@;!uYG;=Z>~GKE^{HD4keu}lnyqhc>kWX^tQn|warJ~h zT+rtMkdz6aHoN%z(o|&wpu@@OpJnF_z{PA)6(FHw02iHslz^(N{4*+K9)QJHR87wT iTyp>aXaF{u2lxRou|^4tux6eB0000^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2pnode.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2splitbar.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/ftv2vertline.png b/SFML-2.1-osx-clang-universal/doc/html/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions.htm b/SFML-2.1-osx-clang-universal/doc/html/functions.htm new file mode 100644 index 0000000..96321cc --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions.htm @@ -0,0 +1,144 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x62.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x62.htm new file mode 100644 index 0000000..ff539f0 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x62.htm @@ -0,0 +1,153 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x63.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x63.htm new file mode 100644 index 0000000..1b7bf9a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x63.htm @@ -0,0 +1,218 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x64.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x64.htm new file mode 100644 index 0000000..249aff1 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x64.htm @@ -0,0 +1,169 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x65.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x65.htm new file mode 100644 index 0000000..ca7b997 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x65.htm @@ -0,0 +1,136 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x66.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x66.htm new file mode 100644 index 0000000..d35b427 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x66.htm @@ -0,0 +1,188 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x67.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x67.htm new file mode 100644 index 0000000..48c5b7a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x67.htm @@ -0,0 +1,390 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x68.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x68.htm new file mode 100644 index 0000000..31cf7c9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x68.htm @@ -0,0 +1,112 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x69.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x69.htm new file mode 100644 index 0000000..a631873 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x69.htm @@ -0,0 +1,179 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x6a.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6a.htm new file mode 100644 index 0000000..9b3212d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6a.htm @@ -0,0 +1,121 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- j -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x6b.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6b.htm new file mode 100644 index 0000000..98e0e07 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6b.htm @@ -0,0 +1,110 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- k -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x6c.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6c.htm new file mode 100644 index 0000000..dda7091 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6c.htm @@ -0,0 +1,172 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x6d.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6d.htm new file mode 100644 index 0000000..4b13a6a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6d.htm @@ -0,0 +1,179 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x6e.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6e.htm new file mode 100644 index 0000000..4bcdca8 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6e.htm @@ -0,0 +1,199 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x6f.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6f.htm new file mode 100644 index 0000000..998712a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x6f.htm @@ -0,0 +1,267 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x70.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x70.htm new file mode 100644 index 0000000..65e18a8 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x70.htm @@ -0,0 +1,164 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x71.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x71.htm new file mode 100644 index 0000000..43d988d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x71.htm @@ -0,0 +1,95 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x72.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x72.htm new file mode 100644 index 0000000..85edc33 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x72.htm @@ -0,0 +1,195 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x73.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x73.htm new file mode 100644 index 0000000..d757212 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x73.htm @@ -0,0 +1,395 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x74.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x74.htm new file mode 100644 index 0000000..4b5ae2a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x74.htm @@ -0,0 +1,225 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x75.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x75.htm new file mode 100644 index 0000000..ef24792 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x75.htm @@ -0,0 +1,129 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x76.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x76.htm new file mode 100644 index 0000000..1a003d5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x76.htm @@ -0,0 +1,116 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x77.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x77.htm new file mode 100644 index 0000000..6edf39e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x77.htm @@ -0,0 +1,110 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x78.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x78.htm new file mode 100644 index 0000000..0384558 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x78.htm @@ -0,0 +1,106 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- x -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x79.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x79.htm new file mode 100644 index 0000000..4a0e31d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x79.htm @@ -0,0 +1,105 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- y -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x7a.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x7a.htm new file mode 100644 index 0000000..442eb80 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x7a.htm @@ -0,0 +1,102 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- z -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_0x7e.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_0x7e.htm new file mode 100644 index 0000000..2e1052c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_0x7e.htm @@ -0,0 +1,170 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_enum.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_enum.htm new file mode 100644 index 0000000..b14e9f9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_enum.htm @@ -0,0 +1,90 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval.htm new file mode 100644 index 0000000..28e9d97 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval.htm @@ -0,0 +1,106 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- a -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x62.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x62.htm new file mode 100644 index 0000000..c36387c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x62.htm @@ -0,0 +1,116 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- b -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x63.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x63.htm new file mode 100644 index 0000000..5d2313b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x63.htm @@ -0,0 +1,123 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- c -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x64.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x64.htm new file mode 100644 index 0000000..7fdca36 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x64.htm @@ -0,0 +1,124 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- d -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x65.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x65.htm new file mode 100644 index 0000000..f382870 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x65.htm @@ -0,0 +1,109 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- e -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x66.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x66.htm new file mode 100644 index 0000000..806244b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x66.htm @@ -0,0 +1,157 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- f -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x67.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x67.htm new file mode 100644 index 0000000..b68570f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x67.htm @@ -0,0 +1,100 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- g -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x68.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x68.htm new file mode 100644 index 0000000..b1dc523 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x68.htm @@ -0,0 +1,100 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- h -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x69.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x69.htm new file mode 100644 index 0000000..920448d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x69.htm @@ -0,0 +1,110 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- i -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6a.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6a.htm new file mode 100644 index 0000000..5fc28e6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6a.htm @@ -0,0 +1,106 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- j -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6b.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6b.htm new file mode 100644 index 0000000..e64d37c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6b.htm @@ -0,0 +1,100 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- k -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6c.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6c.htm new file mode 100644 index 0000000..b2de5aa --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6c.htm @@ -0,0 +1,119 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- l -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6d.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6d.htm new file mode 100644 index 0000000..55f0916 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6d.htm @@ -0,0 +1,130 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- m -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6e.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6e.htm new file mode 100644 index 0000000..6cb8bdd --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6e.htm @@ -0,0 +1,187 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- n -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6f.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6f.htm new file mode 100644 index 0000000..099e197 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x6f.htm @@ -0,0 +1,98 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- o -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x70.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x70.htm new file mode 100644 index 0000000..bd0e861 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x70.htm @@ -0,0 +1,136 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- p -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x71.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x71.htm new file mode 100644 index 0000000..9d8e904 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x71.htm @@ -0,0 +1,94 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- q -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x72.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x72.htm new file mode 100644 index 0000000..1fff682 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x72.htm @@ -0,0 +1,129 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- r -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x73.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x73.htm new file mode 100644 index 0000000..f46fd41 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x73.htm @@ -0,0 +1,124 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- s -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x74.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x74.htm new file mode 100644 index 0000000..b950e41 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x74.htm @@ -0,0 +1,106 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- t -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x75.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x75.htm new file mode 100644 index 0000000..8d7e1a7 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x75.htm @@ -0,0 +1,107 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- u -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x76.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x76.htm new file mode 100644 index 0000000..c1fd9c9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x76.htm @@ -0,0 +1,98 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- v -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x77.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x77.htm new file mode 100644 index 0000000..9654c91 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x77.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- w -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x78.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x78.htm new file mode 100644 index 0000000..13f4910 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x78.htm @@ -0,0 +1,98 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- x -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x79.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x79.htm new file mode 100644 index 0000000..bc5ab83 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x79.htm @@ -0,0 +1,92 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- y -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x7a.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x7a.htm new file mode 100644 index 0000000..fb3c12b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_eval_0x7a.htm @@ -0,0 +1,92 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- z -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func.htm new file mode 100644 index 0000000..9d3418f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func.htm @@ -0,0 +1,104 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- a -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x62.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x62.htm new file mode 100644 index 0000000..70a260a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x62.htm @@ -0,0 +1,93 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- b -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x63.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x63.htm new file mode 100644 index 0000000..15a2c75 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x63.htm @@ -0,0 +1,157 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- c -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x64.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x64.htm new file mode 100644 index 0000000..74bb7ea --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x64.htm @@ -0,0 +1,120 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- d -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x65.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x65.htm new file mode 100644 index 0000000..830e928 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x65.htm @@ -0,0 +1,108 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- e -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x66.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x66.htm new file mode 100644 index 0000000..6cdfe13 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x66.htm @@ -0,0 +1,115 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- f -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x67.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x67.htm new file mode 100644 index 0000000..d515b7f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x67.htm @@ -0,0 +1,369 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- g -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x68.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x68.htm new file mode 100644 index 0000000..ffad477 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x68.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- h -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x69.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x69.htm new file mode 100644 index 0000000..e48c7fe --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x69.htm @@ -0,0 +1,144 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- i -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6b.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6b.htm new file mode 100644 index 0000000..9e918c3 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6b.htm @@ -0,0 +1,88 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- k -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6c.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6c.htm new file mode 100644 index 0000000..6e00712 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6c.htm @@ -0,0 +1,133 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- l -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6d.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6d.htm new file mode 100644 index 0000000..5a68702 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6d.htm @@ -0,0 +1,109 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- m -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6e.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6e.htm new file mode 100644 index 0000000..497283c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6e.htm @@ -0,0 +1,93 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- n -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6f.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6f.htm new file mode 100644 index 0000000..59b7355 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x6f.htm @@ -0,0 +1,251 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- o -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x70.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x70.htm new file mode 100644 index 0000000..fe782cb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x70.htm @@ -0,0 +1,108 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- p -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x72.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x72.htm new file mode 100644 index 0000000..8cf7adb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x72.htm @@ -0,0 +1,145 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- r -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x73.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x73.htm new file mode 100644 index 0000000..27f1cc1 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x73.htm @@ -0,0 +1,326 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- s -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x74.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x74.htm new file mode 100644 index 0000000..9daf08e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x74.htm @@ -0,0 +1,172 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- t -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x75.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x75.htm new file mode 100644 index 0000000..052c59d --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x75.htm @@ -0,0 +1,103 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- u -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x76.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x76.htm new file mode 100644 index 0000000..e9a4cbb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x76.htm @@ -0,0 +1,103 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- v -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x77.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x77.htm new file mode 100644 index 0000000..d857473 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x77.htm @@ -0,0 +1,95 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- w -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x7a.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x7a.htm new file mode 100644 index 0000000..1b76624 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x7a.htm @@ -0,0 +1,88 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- z -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x7e.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x7e.htm new file mode 100644 index 0000000..7419059 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_func_0x7e.htm @@ -0,0 +1,166 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- ~ -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_type.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_type.htm new file mode 100644 index 0000000..b8bfc40 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_type.htm @@ -0,0 +1,62 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/functions_vars.htm b/SFML-2.1-osx-clang-universal/doc/html/functions_vars.htm new file mode 100644 index 0000000..9d34bc9 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/functions_vars.htm @@ -0,0 +1,377 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + + +
+
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- j -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- x -

+ + +

- y -

+ + +

- z -

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/group__audio.htm b/SFML-2.1-osx-clang-universal/doc/html/group__audio.htm new file mode 100644 index 0000000..68c4b58 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/group__audio.htm @@ -0,0 +1,75 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + +
+
+ +
+
Audio module
+
+
+ +

Sounds, streaming (musics or custom sources), recording, spatialization. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  sf::Listener
 The audio listener is the point in the scene from where all the sounds are heard. More...
 
class  sf::Music
 Streamed music played from an audio file. More...
 
class  sf::Sound
 Regular sound that can be played in the audio environment. More...
 
class  sf::SoundBuffer
 Storage for audio samples defining a sound. More...
 
class  sf::SoundBufferRecorder
 Specialized SoundRecorder which stores the captured audio data into a sound buffer. More...
 
class  sf::SoundRecorder
 Abstract base class for capturing sound data. More...
 
class  sf::SoundSource
 Base class defining a sound's properties. More...
 
class  sf::SoundStream
 Abstract base class for streamed audio sources. More...
 
+

Detailed Description

+

Sounds, streaming (musics or custom sources), recording, spatialization.

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/group__graphics.htm b/SFML-2.1-osx-clang-universal/doc/html/group__graphics.htm new file mode 100644 index 0000000..4174a6c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/group__graphics.htm @@ -0,0 +1,225 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + +
+
+ +
+
Graphics module
+
+
+ +

2D graphics module: sprites, text, shapes, ... +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  sf::CircleShape
 Specialized shape representing a circle. More...
 
class  sf::Color
 Utility class for manpulating RGBA colors. More...
 
class  sf::ConvexShape
 Specialized shape representing a convex polygon. More...
 
class  sf::Drawable
 Abstract base class for objects that can be drawn to a render target. More...
 
class  sf::Font
 Class for loading and manipulating character fonts. More...
 
class  sf::Glyph
 Structure describing a glyph. More...
 
class  sf::Image
 Class for loading, manipulating and saving images. More...
 
class  sf::Rect< T >
 Utility class for manipulating 2D axis aligned rectangles. More...
 
class  sf::RectangleShape
 Specialized shape representing a rectangle. More...
 
class  sf::RenderStates
 Define the states used for drawing to a RenderTarget. More...
 
class  sf::RenderTarget
 Base class for all render targets (window, texture, ...) More...
 
class  sf::RenderTexture
 Target for off-screen 2D rendering into a texture. More...
 
class  sf::RenderWindow
 Window that can serve as a target for 2D drawing. More...
 
class  sf::Shader
 Shader class (vertex and fragment) More...
 
class  sf::Shape
 Base class for textured shapes with outline. More...
 
class  sf::Sprite
 Drawable representation of a texture, with its own transformations, color, etc. More...
 
class  sf::Text
 Graphical text that can be drawn to a render target. More...
 
class  sf::Texture
 Image living on the graphics card that can be used for drawing. More...
 
class  sf::Transform
 Define a 3x3 transform matrix. More...
 
class  sf::Transformable
 Decomposed transform defined by a position, a rotation and a scale. More...
 
class  sf::Vertex
 Define a point with color and texture coordinates. More...
 
class  sf::VertexArray
 Define a set of one or more 2D primitives. More...
 
class  sf::View
 2D camera that defines what region is shown on screen More...
 
+ + + + + + + +

+Enumerations

enum  sf::BlendMode {
+  sf::BlendAlpha, +
+  sf::BlendAdd, +
+  sf::BlendMultiply, +
+  sf::BlendNone +
+ }
 Available blending modes for drawing. More...
 
enum  sf::PrimitiveType {
+  sf::Points, +
+  sf::Lines, +
+  sf::LinesStrip, +
+  sf::Triangles, +
+  sf::TrianglesStrip, +
+  sf::TrianglesFan, +
+  sf::Quads +
+ }
 Types of primitives that a sf::VertexArray can render. More...
 
+

Detailed Description

+

2D graphics module: sprites, text, shapes, ...

+

Enumeration Type Documentation

+ +
+
+ + + + +
enum sf::BlendMode
+
+ +

Available blending modes for drawing.

+ + + + + +
Enumerator
BlendAlpha  +

Pixel = Source * Source.a + Dest * (1 - Source.a)

+
BlendAdd  +

Pixel = Source + Dest.

+
BlendMultiply  +

Pixel = Source * Dest.

+
BlendNone  +

Pixel = Source.

+
+ +

Definition at line 35 of file BlendMode.hpp.

+ +
+
+ +
+
+ + + + +
enum sf::PrimitiveType
+
+ +

Types of primitives that a sf::VertexArray can render.

+

Points and lines have no area, therefore their thickness will always be 1 pixel, regarldess the current transform and view.

+ + + + + + + + +
Enumerator
Points  +

List of individual points.

+
Lines  +

List of individual lines.

+
LinesStrip  +

List of connected lines, a point uses the previous point to form a line.

+
Triangles  +

List of individual triangles.

+
TrianglesStrip  +

List of connected triangles, a point uses the two previous points to form a triangle.

+
TrianglesFan  +

List of connected triangles, a point uses the common center and the previous point to form a triangle.

+
Quads  +

List of individual quads.

+
+ +

Definition at line 39 of file PrimitiveType.hpp.

+ +
+
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/group__network.htm b/SFML-2.1-osx-clang-universal/doc/html/group__network.htm new file mode 100644 index 0000000..3493121 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/group__network.htm @@ -0,0 +1,78 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + +
+
+ +
+
Network module
+
+
+ +

Socket-based communication, utilities and higher-level network protocols (HTTP, FTP). +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  sf::Ftp
 A FTP client. More...
 
class  sf::Http
 A HTTP client. More...
 
class  sf::IpAddress
 Encapsulate an IPv4 network address. More...
 
class  sf::Packet
 Utility class to build blocks of data to transfer over the network. More...
 
class  sf::Socket
 Base class for all the socket types. More...
 
class  sf::SocketSelector
 Multiplexer that allows to read from multiple sockets. More...
 
class  sf::TcpListener
 Socket that listens to new TCP connections. More...
 
class  sf::TcpSocket
 Specialized socket using the TCP protocol. More...
 
class  sf::UdpSocket
 Specialized socket using the UDP protocol. More...
 
+

Detailed Description

+

Socket-based communication, utilities and higher-level network protocols (HTTP, FTP).

+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/group__system.htm b/SFML-2.1-osx-clang-universal/doc/html/group__system.htm new file mode 100644 index 0000000..d51c741 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/group__system.htm @@ -0,0 +1,157 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + +
+
+ +
+
System module
+
+
+ +

Base module of SFML, defining various utilities. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  sf::Clock
 Utility class that measures the elapsed time. More...
 
class  sf::InputStream
 Abstract class for custom file input streams. More...
 
class  sf::Lock
 Automatic wrapper for locking and unlocking mutexes. More...
 
class  sf::Mutex
 Blocks concurrent access to shared resources from multiple threads. More...
 
class  sf::NonCopyable
 Utility class that makes any derived class non-copyable. More...
 
class  sf::String
 Utility string class that automatically handles conversions between types and encodings. More...
 
class  sf::Thread
 Utility class to manipulate threads. More...
 
class  sf::ThreadLocal
 Defines variables with thread-local storage. More...
 
class  sf::ThreadLocalPtr< T >
 Pointer to a thread-local variable. More...
 
class  sf::Time
 Represents a time value. More...
 
class  sf::Utf< N >
 Utility class providing generic functions for UTF conversions. More...
 
class  sf::Vector2< T >
 Utility template class for manipulating 2-dimensional vectors. More...
 
class  sf::Vector3< T >
 Utility template class for manipulating 3-dimensional vectors. More...
 
+ + + + + + + +

+Functions

void sf::sleep (Time duration)
 Make the current thread sleep for a given duration. More...
 
std::ostream & sf::err ()
 Standard stream used by SFML to output warnings and errors. More...
 
+

Detailed Description

+

Base module of SFML, defining various utilities.

+

It provides vector classes, unicode strings and conversion functions, threads and mutexes, timing classes.

+

Function Documentation

+ +
+
+ + + + + + + +
sf::err ()
+
+ +

Standard stream used by SFML to output warnings and errors.

+

By default, sf::err() outputs to the same location as std::cerr, (-> the stderr descriptor) which is the console if there's one available.

+

It is a standard std::ostream instance, so it supports all the insertion operations defined by the STL (operator <<, manipulators, etc.).

+

sf::err() can be redirected to write to another output, independantly of std::cerr, by using the rdbuf() function provided by the std::ostream class.

+

Example:

+
// Redirect to a file
+
std::ofstream file("sfml-log.txt");
+
std::streambuf* previous = sf::err().rdbuf(file.rdbuf());
+
+
// Redirect to nothing
+
sf::err().rdbuf(NULL);
+
+
// Restore the original output
+
sf::err().rdbuf(previous);
+
+
+
+ +
+
+ + + + + + + + +
void sf::sleep (Time duration)
+
+ +

Make the current thread sleep for a given duration.

+

sf::sleep is the best way to block a program or one of its threads, as it doesn't consume any CPU power.

+
Parameters
+ + +
durationTime to sleep
+
+
+ +
+
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/group__window.htm b/SFML-2.1-osx-clang-universal/doc/html/group__window.htm new file mode 100644 index 0000000..5c628d7 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/group__window.htm @@ -0,0 +1,135 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + +
+
+ +
+
Window module
+
+
+ +

Provides OpenGL-based windows, and abstractions for events and input handling. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  sf::Context
 Class holding a valid drawing context. More...
 
class  sf::ContextSettings
 Structure defining the settings of the OpenGL context attached to a window. More...
 
class  sf::Event
 Defines a system event and its parameters. More...
 
class  sf::GlResource
 Base class for classes that require an OpenGL context. More...
 
class  sf::Joystick
 Give access to the real-time state of the joysticks. More...
 
class  sf::Keyboard
 Give access to the real-time state of the keyboard. More...
 
class  sf::Mouse
 Give access to the real-time state of the mouse. More...
 
class  sf::VideoMode
 VideoMode defines a video mode (width, height, bpp) More...
 
class  sf::Window
 Window that serves as a target for OpenGL rendering. More...
 
+ + + + +

+Enumerations

enum  {
+  sf::Style::None = 0, +
+  sf::Style::Titlebar = 1 << 0, +
+  sf::Style::Resize = 1 << 1, +
+  sf::Style::Close = 1 << 2, +
+  sf::Style::Fullscreen = 1 << 3, +
+  sf::Style::Default = Titlebar | Resize | Close +
+ }
 Enumeration of the window styles. More...
 
+

Detailed Description

+

Provides OpenGL-based windows, and abstractions for events and input handling.

+

Enumeration Type Documentation

+ +
+
+ + + + +
anonymous enum
+
+ +

Enumeration of the window styles.

+ + + + + + + +
Enumerator
None  +

No border / title bar (this flag and all others are mutually exclusive)

+
Titlebar  +

Title bar + fixed border.

+
Resize  +

Titlebar + resizable border + maximize button.

+
Close  +

Titlebar + close button.

+
Fullscreen  +

Fullscreen mode (this flag and all others are mutually exclusive)

+
Default  +

Default window style.

+
+ +

Definition at line 38 of file WindowStyle.hpp.

+ +
+
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/hierarchy.htm b/SFML-2.1-osx-clang-universal/doc/html/hierarchy.htm new file mode 100644 index 0000000..6cdd432 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/hierarchy.htm @@ -0,0 +1,144 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oCsf::SoundStream::ChunkStructure defining a chunk of audio data to stream
oCsf::ClockUtility class that measures the elapsed time
oCsf::ColorUtility class for manpulating RGBA colors
oCsf::ContextSettingsStructure defining the settings of the OpenGL context attached to a window
oCsf::Shader::CurrentTextureTypeSpecial type/value that can be passed to setParameter, and that represents the texture of the object being drawn
oCsf::DrawableAbstract base class for objects that can be drawn to a render target
|oCsf::ShapeBase class for textured shapes with outline
||oCsf::CircleShapeSpecialized shape representing a circle
||oCsf::ConvexShapeSpecialized shape representing a convex polygon
||\Csf::RectangleShapeSpecialized shape representing a rectangle
|oCsf::SpriteDrawable representation of a texture, with its own transformations, color, etc
|oCsf::TextGraphical text that can be drawn to a render target
|\Csf::VertexArrayDefine a set of one or more 2D primitives
oCsf::EventDefines a system event and its parameters
oCsf::FontClass for loading and manipulating character fonts
oCsf::GlResourceBase class for classes that require an OpenGL context
|oCsf::ContextClass holding a valid drawing context
|oCsf::ShaderShader class (vertex and fragment)
|oCsf::TextureImage living on the graphics card that can be used for drawing
|\Csf::WindowWindow that serves as a target for OpenGL rendering
| \Csf::RenderWindowWindow that can serve as a target for 2D drawing
oCsf::GlyphStructure describing a glyph
oCsf::ImageClass for loading, manipulating and saving images
oCsf::InputStreamAbstract class for custom file input streams
oCsf::IpAddressEncapsulate an IPv4 network address
oCsf::JoystickGive access to the real-time state of the joysticks
oCsf::Event::JoystickButtonEventJoystick buttons events parameters (JoystickButtonPressed, JoystickButtonReleased)
oCsf::Event::JoystickConnectEventJoystick connection events parameters (JoystickConnected, JoystickDisconnected)
oCsf::Event::JoystickMoveEventJoystick axis move event parameters (JoystickMoved)
oCsf::KeyboardGive access to the real-time state of the keyboard
oCsf::Event::KeyEventKeyboard event parameters (KeyPressed, KeyReleased)
oCsf::ListenerThe audio listener is the point in the scene from where all the sounds are heard
oCsf::MouseGive access to the real-time state of the mouse
oCsf::Event::MouseButtonEventMouse buttons events parameters (MouseButtonPressed, MouseButtonReleased)
oCsf::Event::MouseMoveEventMouse move event parameters (MouseMoved)
oCsf::Event::MouseWheelEventMouse wheel events parameters (MouseWheelMoved)
oCsf::NonCopyableUtility class that makes any derived class non-copyable
|oCsf::ContextClass holding a valid drawing context
|oCsf::FtpA FTP client
|oCsf::HttpA HTTP client
|oCsf::LockAutomatic wrapper for locking and unlocking mutexes
|oCsf::MutexBlocks concurrent access to shared resources from multiple threads
|oCsf::RenderTargetBase class for all render targets (window, texture, ...)
||oCsf::RenderTextureTarget for off-screen 2D rendering into a texture
||\Csf::RenderWindowWindow that can serve as a target for 2D drawing
|oCsf::ShaderShader class (vertex and fragment)
|oCsf::SocketBase class for all the socket types
||oCsf::TcpListenerSocket that listens to new TCP connections
||oCsf::TcpSocketSpecialized socket using the TCP protocol
||\Csf::UdpSocketSpecialized socket using the UDP protocol
|oCsf::ThreadUtility class to manipulate threads
|oCsf::ThreadLocalDefines variables with thread-local storage
||\Csf::ThreadLocalPtr< T >Pointer to a thread-local variable
|\Csf::WindowWindow that serves as a target for OpenGL rendering
oCsf::PacketUtility class to build blocks of data to transfer over the network
oCsf::Rect< T >Utility class for manipulating 2D axis aligned rectangles
oCsf::Rect< float >
oCsf::Rect< int >
oCsf::RenderStatesDefine the states used for drawing to a RenderTarget
oCsf::Http::RequestDefine a HTTP request
oCsf::Http::ResponseDefine a HTTP response
oCsf::Ftp::ResponseDefine a FTP response
|oCsf::Ftp::DirectoryResponseSpecialization of FTP response returning a directory
|\Csf::Ftp::ListingResponseSpecialization of FTP response returning a filename lisiting
oCsf::Event::SizeEventSize events parameters (Resized)
oCsf::SocketSelectorMultiplexer that allows to read from multiple sockets
oCsf::SoundBufferStorage for audio samples defining a sound
oCsf::SoundRecorderAbstract base class for capturing sound data
|\Csf::SoundBufferRecorderSpecialized SoundRecorder which stores the captured audio data into a sound buffer
oCsf::SoundSourceBase class defining a sound's properties
|oCsf::SoundRegular sound that can be played in the audio environment
|\Csf::SoundStreamAbstract base class for streamed audio sources
| \Csf::MusicStreamed music played from an audio file
oCsf::StringUtility string class that automatically handles conversions between types and encodings
oCsf::Event::TextEventText event parameters (TextEntered)
oCsf::TimeRepresents a time value
oCsf::TransformDefine a 3x3 transform matrix
oCsf::TransformableDecomposed transform defined by a position, a rotation and a scale
|oCsf::ShapeBase class for textured shapes with outline
|oCsf::SpriteDrawable representation of a texture, with its own transformations, color, etc
|\Csf::TextGraphical text that can be drawn to a render target
oCsf::Utf< N >Utility class providing generic functions for UTF conversions
oCsf::Utf< 16 >Specialization of the Utf template for UTF-16
oCsf::Utf< 32 >Specialization of the Utf template for UTF-32
oCsf::Utf< 8 >Specialization of the Utf template for UTF-8
oCsf::Vector2< T >Utility template class for manipulating 2-dimensional vectors
oCsf::Vector2< float >
oCsf::Vector2< unsigned int >
oCsf::Vector3< T >Utility template class for manipulating 3-dimensional vectors
oCsf::VertexDefine a point with color and texture coordinates
oCsf::VideoModeVideoMode defines a video mode (width, height, bpp)
\Csf::View2D camera that defines what region is shown on screen
+
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/index.htm b/SFML-2.1-osx-clang-universal/doc/html/index.htm new file mode 100644 index 0000000..df8bc2a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/index.htm @@ -0,0 +1,102 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + +
+
+
+
SFML Documentation
+
+
+

+Welcome

+

Welcome to the official SFML documentation. Here you will find a detailed view of all the SFML classes and functions.
+ If you are looking for tutorials, you can visit the official website at www.sfml-dev.org.

+

+Short example

+

Here is a short example, to show you how simple it is to use SFML :

+
#include <SFML/Audio.hpp>
+
#include <SFML/Graphics.hpp>
+
+
int main()
+
{
+
// Create the main window
+
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
+
+
// Load a sprite to display
+
sf::Texture texture;
+
if (!texture.loadFromFile("cute_image.jpg"))
+
return EXIT_FAILURE;
+
sf::Sprite sprite(texture);
+
+
// Create a graphical text to display
+
sf::Font font;
+
if (!font.loadFromFile("arial.ttf"))
+
return EXIT_FAILURE;
+
sf::Text text("Hello SFML", font, 50);
+
+
// Load a music to play
+
sf::Music music;
+
if (!music.openFromFile("nice_music.ogg"))
+
return EXIT_FAILURE;
+
+
// Play the music
+
music.play();
+
+
// Start the game loop
+
while (window.isOpen())
+
{
+
// Process events
+
sf::Event event;
+
while (window.pollEvent(event))
+
{
+
// Close window : exit
+
if (event.type == sf::Event::Closed)
+
window.close();
+
}
+
+
// Clear screen
+
window.clear();
+
+
// Draw the sprite
+
window.draw(sprite);
+
+
// Draw the string
+
window.draw(text);
+
+
// Update the window
+
window.display();
+
}
+
+
return EXIT_SUCCESS;
+
}
+
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/jquery.js b/SFML-2.1-osx-clang-universal/doc/html/jquery.js new file mode 100644 index 0000000..c197801 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/jquery.js @@ -0,0 +1,31 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); diff --git a/SFML-2.1-osx-clang-universal/doc/html/mainpage_8hpp_source.htm b/SFML-2.1-osx-clang-universal/doc/html/mainpage_8hpp_source.htm new file mode 100644 index 0000000..63cb0f4 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/mainpage_8hpp_source.htm @@ -0,0 +1,49 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + + + +
+
+
+
mainpage.hpp
+
+
+
1 
+
+ + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/modules.htm b/SFML-2.1-osx-clang-universal/doc/html/modules.htm new file mode 100644 index 0000000..60a2a1a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/modules.htm @@ -0,0 +1,49 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + +
+ + +
+
+
+
Modules
+
+
+
Here is a list of all modules:
+
+ + + + + +
oAudio moduleSounds, streaming (musics or custom sources), recording, spatialization
oGraphics module2D graphics module: sprites, text, shapes, ..
oNetwork moduleSocket-based communication, utilities and higher-level network protocols (HTTP, FTP)
oSystem moduleBase module of SFML, defining various utilities
\Window moduleProvides OpenGL-based windows, and abstractions for events and input handling
+ + + + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/nav_f.png b/SFML-2.1-osx-clang-universal/doc/html/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/nav_g.png b/SFML-2.1-osx-clang-universal/doc/html/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::ContextSettings Class Reference
+
+
+ +

Structure defining the settings of the OpenGL context attached to a window. + More...

+ +

#include <ContextSettings.hpp>

+ + + + + +

+Public Member Functions

 ContextSettings (unsigned int depth=0, unsigned int stencil=0, unsigned int antialiasing=0, unsigned int major=2, unsigned int minor=0)
 Default constructor. More...
 
+ + + + + + + + + + + + + + + + +

+Public Attributes

unsigned int depthBits
 Bits of the depth buffer. More...
 
unsigned int stencilBits
 Bits of the stencil buffer. More...
 
unsigned int antialiasingLevel
 Level of antialiasing. More...
 
unsigned int majorVersion
 Major number of the context version to create. More...
 
unsigned int minorVersion
 Minor number of the context version to create. More...
 
+

Detailed Description

+

Structure defining the settings of the OpenGL context attached to a window.

+

ContextSettings allows to define several advanced settings of the OpenGL context attached to a window.

+

All these settings have no impact on the regular SFML rendering (graphics module) – except the anti-aliasing level, so you may need to use this structure only if you're using SFML as a windowing system for custom OpenGL rendering.

+

The depthBits and stencilBits members define the number of bits per pixel requested for the (respectively) depth and stencil buffers.

+

antialiasingLevel represents the requested number of multisampling levels for anti-aliasing.

+

majorVersion and minorVersion define the version of the OpenGL context that you want. Only versions greater or equal to 3.0 are relevant; versions lesser than 3.0 are all handled the same way (i.e. you can use any version < 3.0 if you don't want an OpenGL 3 context).

+

Please note that these values are only a hint. No failure will be reported if one or more of these values are not supported by the system; instead, SFML will try to find the closest valid match. You can then retrieve the settings that the window actually used to create its context, with Window::getSettings().

+ +

Definition at line 36 of file ContextSettings.hpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sf::ContextSettings::ContextSettings (unsigned int depth = 0,
unsigned int stencil = 0,
unsigned int antialiasing = 0,
unsigned int major = 2,
unsigned int minor = 0 
)
+
+inlineexplicit
+
+ +

Default constructor.

+
Parameters
+ + + + + + +
depthDepth buffer bits
stencilStencil buffer bits
antialiasingAntialiasing level
majorMajor number of the context version
minorMinor number of the context version
+
+
+ +

Definition at line 48 of file ContextSettings.hpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
unsigned int sf::ContextSettings::antialiasingLevel
+
+ +

Level of antialiasing.

+ +

Definition at line 62 of file ContextSettings.hpp.

+ +
+
+ +
+
+ + + + +
unsigned int sf::ContextSettings::depthBits
+
+ +

Bits of the depth buffer.

+ +

Definition at line 60 of file ContextSettings.hpp.

+ +
+
+ +
+
+ + + + +
unsigned int sf::ContextSettings::majorVersion
+
+ +

Major number of the context version to create.

+ +

Definition at line 63 of file ContextSettings.hpp.

+ +
+
+ +
+
+ + + + +
unsigned int sf::ContextSettings::minorVersion
+
+ +

Minor number of the context version to create.

+ +

Definition at line 64 of file ContextSettings.hpp.

+ +
+
+ +
+
+ + + + +
unsigned int sf::ContextSettings::stencilBits
+
+ +

Bits of the stencil buffer.

+ +

Definition at line 61 of file ContextSettings.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickButtonEvent-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickButtonEvent-members.htm new file mode 100644 index 0000000..c0d1b2b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickButtonEvent-members.htm @@ -0,0 +1,57 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event::JoystickButtonEvent Member List
+
+
+ +

This is the complete list of members for sf::Event::JoystickButtonEvent, including all inherited members.

+ + + +
buttonsf::Event::JoystickButtonEvent
joystickIdsf::Event::JoystickButtonEvent
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickButtonEvent.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickButtonEvent.htm new file mode 100644 index 0000000..b21b11e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickButtonEvent.htm @@ -0,0 +1,110 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event::JoystickButtonEvent Struct Reference
+
+
+ +

Joystick buttons events parameters (JoystickButtonPressed, JoystickButtonReleased) + More...

+ +

#include <Event.hpp>

+ + + + + + + + +

+Public Attributes

unsigned int joystickId
 Index of the joystick (in range [0 .. Joystick::Count - 1]) More...
 
unsigned int button
 Index of the button that has been pressed (in range [0 .. Joystick::ButtonCount - 1]) More...
 
+

Detailed Description

+

Joystick buttons events parameters (JoystickButtonPressed, JoystickButtonReleased)

+ +

Definition at line 138 of file Event.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
unsigned int sf::Event::JoystickButtonEvent::button
+
+ +

Index of the button that has been pressed (in range [0 .. Joystick::ButtonCount - 1])

+ +

Definition at line 141 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
unsigned int sf::Event::JoystickButtonEvent::joystickId
+
+ +

Index of the joystick (in range [0 .. Joystick::Count - 1])

+ +

Definition at line 140 of file Event.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickConnectEvent-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickConnectEvent-members.htm new file mode 100644 index 0000000..9b31d50 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickConnectEvent-members.htm @@ -0,0 +1,56 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event::JoystickConnectEvent Member List
+
+
+ +

This is the complete list of members for sf::Event::JoystickConnectEvent, including all inherited members.

+ + +
joystickIdsf::Event::JoystickConnectEvent
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickConnectEvent.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickConnectEvent.htm new file mode 100644 index 0000000..3e205ec --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickConnectEvent.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event::JoystickConnectEvent Struct Reference
+
+
+ +

Joystick connection events parameters (JoystickConnected, JoystickDisconnected) + More...

+ +

#include <Event.hpp>

+ + + + + +

+Public Attributes

unsigned int joystickId
 Index of the joystick (in range [0 .. Joystick::Count - 1]) More...
 
+

Detailed Description

+

Joystick connection events parameters (JoystickConnected, JoystickDisconnected)

+ +

Definition at line 117 of file Event.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
unsigned int sf::Event::JoystickConnectEvent::joystickId
+
+ +

Index of the joystick (in range [0 .. Joystick::Count - 1])

+ +

Definition at line 119 of file Event.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickMoveEvent-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickMoveEvent-members.htm new file mode 100644 index 0000000..6ab1102 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickMoveEvent-members.htm @@ -0,0 +1,58 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event::JoystickMoveEvent Member List
+
+ + + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickMoveEvent.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickMoveEvent.htm new file mode 100644 index 0000000..09514e1 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1JoystickMoveEvent.htm @@ -0,0 +1,129 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event::JoystickMoveEvent Struct Reference
+
+
+ +

Joystick axis move event parameters (JoystickMoved) + More...

+ +

#include <Event.hpp>

+ + + + + + + + + + + +

+Public Attributes

unsigned int joystickId
 Index of the joystick (in range [0 .. Joystick::Count - 1]) More...
 
Joystick::Axis axis
 Axis on which the joystick moved. More...
 
float position
 New position on the axis (in range [-100 .. 100]) More...
 
+

Detailed Description

+

Joystick axis move event parameters (JoystickMoved)

+ +

Definition at line 126 of file Event.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
Joystick::Axis sf::Event::JoystickMoveEvent::axis
+
+ +

Axis on which the joystick moved.

+ +

Definition at line 129 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
unsigned int sf::Event::JoystickMoveEvent::joystickId
+
+ +

Index of the joystick (in range [0 .. Joystick::Count - 1])

+ +

Definition at line 128 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
float sf::Event::JoystickMoveEvent::position
+
+ +

New position on the axis (in range [-100 .. 100])

+ +

Definition at line 130 of file Event.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1KeyEvent-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1KeyEvent-members.htm new file mode 100644 index 0000000..c2b303c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1KeyEvent-members.htm @@ -0,0 +1,60 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event::KeyEvent Member List
+
+
+ +

This is the complete list of members for sf::Event::KeyEvent, including all inherited members.

+ + + + + + +
altsf::Event::KeyEvent
codesf::Event::KeyEvent
controlsf::Event::KeyEvent
shiftsf::Event::KeyEvent
systemsf::Event::KeyEvent
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1KeyEvent.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1KeyEvent.htm new file mode 100644 index 0000000..57c6692 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1KeyEvent.htm @@ -0,0 +1,167 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event::KeyEvent Struct Reference
+
+
+ +

Keyboard event parameters (KeyPressed, KeyReleased) + More...

+ +

#include <Event.hpp>

+ + + + + + + + + + + + + + + + + +

+Public Attributes

Keyboard::Key code
 Code of the key that has been pressed. More...
 
bool alt
 Is the Alt key pressed? More...
 
bool control
 Is the Control key pressed? More...
 
bool shift
 Is the Shift key pressed? More...
 
bool system
 Is the System key pressed? More...
 
+

Detailed Description

+

Keyboard event parameters (KeyPressed, KeyReleased)

+ +

Definition at line 61 of file Event.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
bool sf::Event::KeyEvent::alt
+
+ +

Is the Alt key pressed?

+ +

Definition at line 64 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
Keyboard::Key sf::Event::KeyEvent::code
+
+ +

Code of the key that has been pressed.

+ +

Definition at line 63 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
bool sf::Event::KeyEvent::control
+
+ +

Is the Control key pressed?

+ +

Definition at line 65 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
bool sf::Event::KeyEvent::shift
+
+ +

Is the Shift key pressed?

+ +

Definition at line 66 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
bool sf::Event::KeyEvent::system
+
+ +

Is the System key pressed?

+ +

Definition at line 67 of file Event.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseButtonEvent-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseButtonEvent-members.htm new file mode 100644 index 0000000..9767703 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseButtonEvent-members.htm @@ -0,0 +1,58 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event::MouseButtonEvent Member List
+
+
+ +

This is the complete list of members for sf::Event::MouseButtonEvent, including all inherited members.

+ + + + +
buttonsf::Event::MouseButtonEvent
xsf::Event::MouseButtonEvent
ysf::Event::MouseButtonEvent
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseButtonEvent.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseButtonEvent.htm new file mode 100644 index 0000000..d19ce5b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseButtonEvent.htm @@ -0,0 +1,129 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event::MouseButtonEvent Struct Reference
+
+
+ +

Mouse buttons events parameters (MouseButtonPressed, MouseButtonReleased) + More...

+ +

#include <Event.hpp>

+ + + + + + + + + + + +

+Public Attributes

Mouse::Button button
 Code of the button that has been pressed. More...
 
int x
 X position of the mouse pointer, relative to the left of the owner window. More...
 
int y
 Y position of the mouse pointer, relative to the top of the owner window. More...
 
+

Detailed Description

+

Mouse buttons events parameters (MouseButtonPressed, MouseButtonReleased)

+ +

Definition at line 94 of file Event.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
Mouse::Button sf::Event::MouseButtonEvent::button
+
+ +

Code of the button that has been pressed.

+ +

Definition at line 96 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
int sf::Event::MouseButtonEvent::x
+
+ +

X position of the mouse pointer, relative to the left of the owner window.

+ +

Definition at line 97 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
int sf::Event::MouseButtonEvent::y
+
+ +

Y position of the mouse pointer, relative to the top of the owner window.

+ +

Definition at line 98 of file Event.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseMoveEvent-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseMoveEvent-members.htm new file mode 100644 index 0000000..fa49cc6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseMoveEvent-members.htm @@ -0,0 +1,57 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event::MouseMoveEvent Member List
+
+
+ +

This is the complete list of members for sf::Event::MouseMoveEvent, including all inherited members.

+ + + +
xsf::Event::MouseMoveEvent
ysf::Event::MouseMoveEvent
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseMoveEvent.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseMoveEvent.htm new file mode 100644 index 0000000..7b66c0a --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseMoveEvent.htm @@ -0,0 +1,110 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event::MouseMoveEvent Struct Reference
+
+
+ +

Mouse move event parameters (MouseMoved) + More...

+ +

#include <Event.hpp>

+ + + + + + + + +

+Public Attributes

int x
 X position of the mouse pointer, relative to the left of the owner window. More...
 
int y
 Y position of the mouse pointer, relative to the top of the owner window. More...
 
+

Detailed Description

+

Mouse move event parameters (MouseMoved)

+ +

Definition at line 83 of file Event.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
int sf::Event::MouseMoveEvent::x
+
+ +

X position of the mouse pointer, relative to the left of the owner window.

+ +

Definition at line 85 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
int sf::Event::MouseMoveEvent::y
+
+ +

Y position of the mouse pointer, relative to the top of the owner window.

+ +

Definition at line 86 of file Event.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseWheelEvent-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseWheelEvent-members.htm new file mode 100644 index 0000000..d682895 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseWheelEvent-members.htm @@ -0,0 +1,58 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event::MouseWheelEvent Member List
+
+
+ +

This is the complete list of members for sf::Event::MouseWheelEvent, including all inherited members.

+ + + + +
deltasf::Event::MouseWheelEvent
xsf::Event::MouseWheelEvent
ysf::Event::MouseWheelEvent
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseWheelEvent.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseWheelEvent.htm new file mode 100644 index 0000000..2e52a4e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1MouseWheelEvent.htm @@ -0,0 +1,129 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event::MouseWheelEvent Struct Reference
+
+
+ +

Mouse wheel events parameters (MouseWheelMoved) + More...

+ +

#include <Event.hpp>

+ + + + + + + + + + + +

+Public Attributes

int delta
 Number of ticks the wheel has moved (positive is up, negative is down) More...
 
int x
 X position of the mouse pointer, relative to the left of the owner window. More...
 
int y
 Y position of the mouse pointer, relative to the top of the owner window. More...
 
+

Detailed Description

+

Mouse wheel events parameters (MouseWheelMoved)

+ +

Definition at line 105 of file Event.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
int sf::Event::MouseWheelEvent::delta
+
+ +

Number of ticks the wheel has moved (positive is up, negative is down)

+ +

Definition at line 107 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
int sf::Event::MouseWheelEvent::x
+
+ +

X position of the mouse pointer, relative to the left of the owner window.

+ +

Definition at line 108 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
int sf::Event::MouseWheelEvent::y
+
+ +

Y position of the mouse pointer, relative to the top of the owner window.

+ +

Definition at line 109 of file Event.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1SizeEvent-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1SizeEvent-members.htm new file mode 100644 index 0000000..43a8938 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1SizeEvent-members.htm @@ -0,0 +1,57 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event::SizeEvent Member List
+
+
+ +

This is the complete list of members for sf::Event::SizeEvent, including all inherited members.

+ + + +
heightsf::Event::SizeEvent
widthsf::Event::SizeEvent
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1SizeEvent.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1SizeEvent.htm new file mode 100644 index 0000000..e0f1fc6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1SizeEvent.htm @@ -0,0 +1,110 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event::SizeEvent Struct Reference
+
+
+ +

Size events parameters (Resized) + More...

+ +

#include <Event.hpp>

+ + + + + + + + +

+Public Attributes

unsigned int width
 New width, in pixels. More...
 
unsigned int height
 New height, in pixels. More...
 
+

Detailed Description

+

Size events parameters (Resized)

+ +

Definition at line 51 of file Event.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
unsigned int sf::Event::SizeEvent::height
+
+ +

New height, in pixels.

+ +

Definition at line 54 of file Event.hpp.

+ +
+
+ +
+
+ + + + +
unsigned int sf::Event::SizeEvent::width
+
+ +

New width, in pixels.

+ +

Definition at line 53 of file Event.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1TextEvent-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1TextEvent-members.htm new file mode 100644 index 0000000..4213a53 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1TextEvent-members.htm @@ -0,0 +1,56 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Event::TextEvent Member List
+
+
+ +

This is the complete list of members for sf::Event::TextEvent, including all inherited members.

+ + +
unicodesf::Event::TextEvent
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1TextEvent.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1TextEvent.htm new file mode 100644 index 0000000..740dbc8 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Event_1_1TextEvent.htm @@ -0,0 +1,91 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::Event::TextEvent Struct Reference
+
+
+ +

Text event parameters (TextEntered) + More...

+ +

#include <Event.hpp>

+ + + + + +

+Public Attributes

Uint32 unicode
 UTF-32 unicode value of the character. More...
 
+

Detailed Description

+

Text event parameters (TextEntered)

+ +

Definition at line 74 of file Event.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
Uint32 sf::Event::TextEvent::unicode
+
+ +

UTF-32 unicode value of the character.

+ +

Definition at line 76 of file Event.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Shader_1_1CurrentTextureType.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Shader_1_1CurrentTextureType.htm new file mode 100644 index 0000000..56b1de6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1Shader_1_1CurrentTextureType.htm @@ -0,0 +1,64 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::Shader::CurrentTextureType Struct Reference
+
+
+ +

Special type/value that can be passed to setParameter, and that represents the texture of the object being drawn. + More...

+ +

#include <Shader.hpp>

+

Detailed Description

+

Special type/value that can be passed to setParameter, and that represents the texture of the object being drawn.

+ +

Definition at line 70 of file Shader.hpp.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1SoundStream_1_1Chunk-members.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1SoundStream_1_1Chunk-members.htm new file mode 100644 index 0000000..d4d5472 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1SoundStream_1_1Chunk-members.htm @@ -0,0 +1,57 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+
+
sf::SoundStream::Chunk Member List
+
+
+ +

This is the complete list of members for sf::SoundStream::Chunk, including all inherited members.

+ + + +
sampleCountsf::SoundStream::Chunk
samplessf::SoundStream::Chunk
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1SoundStream_1_1Chunk.htm b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1SoundStream_1_1Chunk.htm new file mode 100644 index 0000000..4bcac21 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/structsf_1_1SoundStream_1_1Chunk.htm @@ -0,0 +1,110 @@ + + + + SFML - Simple and Fast Multimedia Library + + + + + + + +
+ +
+
sf::SoundStream::Chunk Struct Reference
+
+
+ +

Structure defining a chunk of audio data to stream. + More...

+ +

#include <SoundStream.hpp>

+ + + + + + + + +

+Public Attributes

const Int16 * samples
 Pointer to the audio samples. More...
 
std::size_t sampleCount
 Number of samples pointed by Samples. More...
 
+

Detailed Description

+

Structure defining a chunk of audio data to stream.

+ +

Definition at line 52 of file SoundStream.hpp.

+

Member Data Documentation

+ +
+
+ + + + +
std::size_t sf::SoundStream::Chunk::sampleCount
+
+ +

Number of samples pointed by Samples.

+ +

Definition at line 55 of file SoundStream.hpp.

+ +
+
+ +
+
+ + + + +
const Int16* sf::SoundStream::Chunk::samples
+
+ +

Pointer to the audio samples.

+ +

Definition at line 54 of file SoundStream.hpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/SFML-2.1-osx-clang-universal/doc/html/sync_off.png b/SFML-2.1-osx-clang-universal/doc/html/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/sync_on.png b/SFML-2.1-osx-clang-universal/doc/html/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/tab_a.png b/SFML-2.1-osx-clang-universal/doc/html/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/tab_b.png b/SFML-2.1-osx-clang-universal/doc/html/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/doc/html/tabs.css b/SFML-2.1-osx-clang-universal/doc/html/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/doc/html/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Info.plist b/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Info.plist new file mode 100644 index 0000000..3ba45e1 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + cocoa + CFBundleIconFile + icon.icns + CFBundleIdentifier + org.sfml-dev.cocoa + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + cocoa + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + 10.6 + NSHumanReadableCopyright + Copyright © 2007-2012 Marco Antognini and Laurent Gomila. Shared under zlib/libpng License. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/MacOS/cocoa b/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/MacOS/cocoa new file mode 100755 index 0000000000000000000000000000000000000000..73ddcf244ebc4ddcc49260a25c760a32e8072cf5 GIT binary patch literal 131060 zcmeEv3w&Hf_5a-@r2z^Fk3zu$`IUkNYMZ1_Vgq??NoZQqBrW~5wwul7CRs>!m)%XD zL>JSRge4^+AP8zz)T*cjc~l-XrO;M>h{Yd5Rg|cxTZ&p9LPaG1?{{YI?%lh)X@Sbe z|L=2eGI!3LbLPyMGiM(6v2&k#@8Rv5rez_FM#$E*d_?=(aT?#D3{@DmFS6%sK&ZW-!D@=9cZGsF3^DV(01(&PQxuns=#5|i-8ZpZqg^;UIE>~Dz z9aafM*8G7hHSO4OnijZB({d7QOhk;N%N1JF+3fFdg~DCUX=JSRYg!c)TuYg&eXTHGO1td&uBIIXe$Sm|3CXa_rMJ6UgYHgU;;njYyGPT?V2^Eg zWv&bTsv0MktE#-Q+$4W1V8gc%8~$wgh|A@JKS;L-goA1G)6eOf=6cf?W)hFXwdo+bTvt?FUTLBZ0;U~N7siGi^N{2L{X5*DkW7elYW^ltk>6}bU?^1_ zE?1`>3c1^KS5R+-D60-lgPH~x(3&hVFix0ccsfEVKZROlybBp*es^RU?l2rW6ox|K z_7oXoc4*quFw_{>Gjm-6L4Vlq@pn**R6X`Ru4$8i-*?|gGCa_O^$}{M=%MYDKB4_^ zBpJx-PBf0y9%Ycx1U0xmO#el!^%(<0k2h$Ly%Djn;sfb z25gF9H@pS{(#V+fq_oGR2S&1o@KcPwa_qF~(GD5Bk=;I`3^`zggchlF2}8z2(843i z==8UAb?Aw4Gr7Oq4jF}zar=le;2(OMKbXNDdmv*xWb7GHhPRVFP7U8F?ea2Ya1MTX z1Q{GNI7Yf$wKWUoIjd@nd3`UCti&Mfd4U`=$ZH%EG%Z3h=>bFm#CyOn8-1e}@gRJn z?pXBKpK4kRY4){o2=_dzY3mR#`6X!insz+kIs_iHI|G&}S}{TmLZ&0|0_OTOMCPU4 z=m%4~LcysW-sY(-YdTtx{ulyv`1{YEJ#);z=FGeCx(D2+Tt4SXmI+m0tm8zu&`1-9 z1ARThd;zR2%m>S$xkzLEH0=}whc>lgO(?8)PObGe2i?InQ|EGeT;&g59hzE+QN=w) z%$Gz=U91N~UMvQtmP?Y*y9rX_GEcrYThk^xMvytz-{r&P0Ws+WS58gPAy@PdvwR0N z&(g~D)w-t(3mUj}z#VR%I%SGk?@()J$0tIfTImWYo>DZWaH@&vLzTldiGS5$%8^W> zoQ@AzpSGYo(C+nw4pWlBCd!&_E-U-nNTIzAKZCEyrk_$V1wQ9(miAs^&hzoF=V;m| zM)HyJKwzFXoKC6AsgeeHX?zd8Y((Fyxgvwu@~MI(WG3mVap9LWlCG8RU~_uEgF_3N z(zOY3+^4mZkUHsbKGz!5_3)a2p3V~GQw^$;pR6}bF|sYL2aZ_h;+!S`ijvrUrxLwh-e-`{+dXG*!@9clXGDKT`&+eWmxKd2}Abox3}ChHuq|L)z_x&G z0oww$1#Ao07O*W~Tfnw}Z2{W?wgqep*cPxYU|YbpfNcTW0=5Ng3;cg;fkl0PymE2R zs|7LEz!i1o_BjtmufM)s)B2omMz8+^fvSl){mz4ZITK?!XCS$2!&~7qqu2jgk@}`j z++8&>m-%DA#ZONA4)#1zu)?)`XWltgng;m|EMQKI49lWDH>hmUu3Y4d-GdzK2lF;e z#BVou=S-Z49~sAPq?Fy!o=u4oV(W>6B7Jiv#_CVkv}n)Gq+UBQS70Hj8644`+e~@t znCG>=UD2K|8rU%tVjLa`iH?;NQ5mNVu+ZNtY$r4hdcoD#cU)a09n zcG8mk5pe7lK{?w?UB3@{^z+{#SL4J}`@$3RmFBSfn3GQW+@;F?1&GHpH)7}uDGMki zdY_b^D{?`p*+TXNA^Snnq#a@f!1ujPdp#_32x}iFWNZf}`uPi&;CwQ)7=!x8<;76p zXiuuVy)=YH+N0!+PNAHWqESk*QcF*AWzKyv6qCMXPzGpDEZ{yQU zZrY3UhM$C|M7KW&sPE7Pd%|b-48HpCPoIAJ>9>Es-#S!KGTII{aD*G~6WoMtH z!z%xaBGOppQK0*U<*DCaPnLT0Z!|1pU}%;5NF5#Pp^AO`>ZnS~~m_FG`kdl(xjM6cgy((`Uvd{uJZ zO=;w<1ulBi@9QD3c4F?Re0G9_+;6ZFP(DTF? z;bCYJ)BL8|BYORJ+)@^&Qsj6VvM|4`{~>G~b>>HJdWUp1l>C4N-SnOb^Ce(tz^rCC z&Q0~IlAMuVvF~{)H*hAReE53jzCzlVMvb^cSwBIF7nYIyx=uK_F z^c-^J-7=W>;2^9RpR#6v-19^}mnobMQs;xoMuES=<~g*#nh)NEdTh@xX^_7>KYIP2 z6rFDU5{PWQzZ$sl#^T~hP{iWmrq@Y><5H%Yp&n+HGcPW>_hFfn)4x2%{@jd>g8E=D z7WX*dq*-r1%ZFV*L4i+9Rug5)bR(r3xpim2Qb|5(+yme3B(fXzxuI-a-u6LN{tco&z2zvt(D#P2Gg9eiDEji91BoN4|1632{!c9i zmW8?W=F@t1jPF~J6OHT!POJ&`pf=G>Pvb1t1bYFEv?dUA%znSX4l-|Tya(K3O>jT6 zVeH!ubk8o~s&8PwtW5na(Z8YJMYVDL7QagcPmD%B4xG^M2?&mEqLw|o-hF>67DJab zDt?SAig93n9aI$dHR}`k!aPwn?R89aK@JL?6#aCrFv{s^7fK+)B0G8$P*XpdR4%)aYId))Li>MJVykg)f`46Bh{eUgsSohbdS>+eB6w#W5GdrSek|1w_k z#5~wBOx1fFuyQqhA|Z?i-vlxJdIJq~16B*lf#MCc5x95*^?&+Z*+xR=uLzwpub?Cy zI)4s@rqOvV(A4R^V-aJhxe94xQj%IPQ5*-sk=lMQV0i@9-f#P5i()uG>_0@gmg|M< zUZrux6tSdlLwI<2c(-#17+e>=EF(eN?R*t03m^{?+3y^}AeUpn^8v+XVC*po67C^AjE~KLU)Fpad8)_ZZ`g%BpN3UyG zigVvNI2*I$Ow>v7_ML0OpA9^wsksL2cy;^uycRp>Pt}% zOfJB4Mu9q7Y#iu$R}SV~;M~&h+(IjJ%8bS>wG~^3_U@#lW5Buo*IlO?(mr!Jq@h|l z;E3~cfy^l<_UQzcC7Q0!>p{VlIHvI1nY|N9SVc;GBQJm8dQ7Kp^5^BRZ_BG(;lp1@R zEW1?V72<_;UeC*q+=P-_^L)>=<}KdydfulHmi`09A9MaP$K4)rF&~Xz%s+CNi+M@MpgSJLywzh|%=Z`<^P_<77iG}5X9>-WHu)q{9JsO> zW7t`PIQ9%qa?OGDhUtFal0N5i@gZ>t7RD$LV-)Sm&wKC~_|B;4+?)eh&&JBwa{bGP zD7p^PBsCY*=*rv!+0Vx2_RrsknbmQy&-rxUZo$)c=)mY`*WS5N=hGMO%IkR@a{FGo z;cR+iq`3+Sij?>7{)iqH&5hPf&fEUK@J`Nw!_W40?JXT1&e!_>xoTT~uQq9T__}{+ zC_DI_AF=nBMsNz{^gVOn%IzG+OSvg&uw*+#0meRk!Lvm6Rjd1U^!)D9>wZH1-uZ9r zh#j*XQnV!O>%b-Th}a7@v$J9_6IT+rYB+JQXN^~i!7@-EBUzQgE{ zpG4uj0W=DI>cAhM+M}w1b6G)FyaYFR-f|Anvh!mHvis-%F1qNs=*=erEiOA`2kX=~z;AV0WrOhIO12+d%d95>(C|>K#nHZ}kjKb$4K5%A#&z-XcyDO0w9Le6^R;vKBF6qz;&5QqD#@0f6(0&Yhv%dn)HAx;xz ziu)F@OycTbfY(RM_wRu928Pe$p5epi%@OA^ajp{QYH_X==Q?q26z3)4{3&tf{@BCk zwTN@OICqG1K%B$kyjq;E73YXJuNUWDalTQU2gLanalT!g?-J+D;(WI_ZxQEv#CfYY z-!IPF#Q9Ni9u(&%#CeZ6KP}FC#rZjL-Y3p4it~^-zbwu%aeh^t4~p}f;(SP)-xX)= zUe-59oO8vQJ9A^t;T%cEd7zz${jZ>_w&M~{+do98jnMOi))RV~(ANn)PUz=^wh=lV zO}790gys^uo6x5TeUZ?Y2@MeX6`_rU=>GdTSGP|l6eOe*;=IwmktIXgvtnU)BF8130*~KGNIcDO(67rLgNSx5jv63JA`rw1u&%Sf9E|wpC@#X(Dw=b ziO^37y-4UaLO&;TCI*B3dk7T~+D@p9(EWs#68a9IUP7A*y-4UbLPb~;?7xxF211`D z^a7#Pgf7C0Y`>4tIzlakb`x4k=wlel_tz0>BQ%%LdO~vueU(r#AvA}!e^MMeo6wI) zJ(Um_>idr)^k+gEAqN(u```K(pz(xWB{YlB?*YMQ?mVbv3$bOC&7%xq90EU4A@(%y zM=Xv%;(Rhf3n_0Sj6rB;A{(u~8bKWEfWf7kwh6I=?M!bIhvXQ(vpc(s>4zm&0$g+L zBf}m9CSGBp7AGcxEM=)mtY@Mf3Di=%l?e_#S0NS$U69w91E4sl1fCMg0|XqycRnA9 zXxR%0-^>#a0<7D!Ox%sYy8VI)bRDs^H(_y&#ZnI;I1b{JQn$Ob>@y=E&;qw1;KE1K z&LY5L_)gN-1ELh}q3R`w50Ua!B)Ez9v7|hT#7qP(q_hbjV=bYLW5R{RsfZ^t5kg`y zV!`$kB-koKH2WJ1%>kPu3nzG&JdQ_#l(Fa|jx$x_<7AtF6AdhmDM-8oNU)s%-V~eu z0Tx+?8CGnq`x_{$^&nh;u!o68oN$$)J;TH`I5`muwg-_o6A5wbMFI~GwZ9>D{28Z| za%!^6$yq1Z6+ks_AmUR9g#>u8(O5OMpyL*tEV6*XC53SmRxT(Gwa%^zx>s>$aH=;r zbnwu-UY|Fth4gR@Vz0ZyyH;;0(TG$Djaz{)_Ufz1G~ey@T`9KoF3~#Uu*Pq~%=PNn znO%N6W3juVOV`5wP`G84`kDqZFZPDKD7i#i(9r1Z#AjQAy01kKnq`KGztS6SCqs=d ztOr-RJ4(XtV4EH;3F#fWC+rWFbcOU_4Zd?y64V2_I~*#ZYV|^x5X=(lyL`2Ne?Vwy zz_L79w!5W8^0xYe^ZhN*%IiZ}UhKZEQ=CytfDOt3qL@abswG;B?(XRDd$g6ZUdToL z^p+ZI7_WuB;SOD^pdGv+=QUmKjz)ij_{vL(b{TfV_Gzshes@?}3SV_VskCBcyW7{s z7H|gw9bS*v3cjJ;-__C5s0TZ}KJb-jHATf`g(cI=X2+ok3mUMUxRGJPY;*P!e5=7X z*Gt2Die}1;WktpDgf(v&5K_|#;4TWH|tY~U}QxWl6(9Qf^;YBrOyJW0;03YaqkJE}~VR3Y*WEJE! z=;1Ivr+2_$HO158rY|d+=_xLZqpVe70~lr_T;=ufivalizyz7m zq=3aY%3IN8YTY5_zLg#RP+DiIcKcd7^m?7HQPS=XsjexV9@@qo1?G+?ta_4WQl-l8 zxq80t>nhRUUCKYHK5=jWfw77(=Z671I_iRYNcV-E!65oM1eyGmvIHJhNGr_5kfc~i zi?^j-Z}Z|q4#BzpV7=by59-M6HAHEz_wUPRas%4r=cy#YdG@G>ohf&z%Kglv_ai`CN;jdl~VPxgR(7>^1WPz2) z5KLo&Dm|?zlaE}90_S3K3ANX{yL_H@^c5CmxQhY7?B@1K9?z;^YpV!L5!GG}=q4oc zq~NH_B42wN)-+f$SD<>GdO14d$`t7tY0L=YdfR;IGiIa-^#YuZtTkDbiY2pYf=I5p zoKqS+oOSBl{D28M0y=rpoKc0ztBtdenypGS3=8dA&1`lxE!2hY{m3s%ohvaifhn(5 zE0dVDexI(bSm#>MuoO^fx5OeJX4uXKW9~KvhmzTvmBaz`isq{@hsJw;$!yM4BQPfA zDK4b4A`eCm)TA!xU%f{2NKL$w@=`{{BY6_N_TJ+|wwki|Hf(B_RO-aQEuKdCH;sIKVl|vk%mMHObmvAAj zWlA*l^_3Ot8s^TgO)Tn4*U1%?oD)h{thjW=ItkZw20FS|th=nE(vKC|>Tvfu%rl;= zOV@EhReDW#w*jnMEY@qqbGm%&0D4OSCd5lhYihb7Z5`K?rEwOq8oH#kwY579suj9; z!gJz09V4kt;etEi-;10QZn zV!p&o70XpO+;2`IN5Jh3&Jo`*EHJl{wUA2+@K?GHpMS(CV$D8cMzaF=vYb1BkC$Op zjPE9P2HZhCNn2~F=Dg{u77ljlM^?iTRTOo@$R#T0@?my+pEX?R_qG&Vcu6-zuv!=w zuL1-S|? zJW^3qg#)e_Njdzfu`xcVr5g@f)3I4czKWEwuwtE@JxbTXoxC1=XqBHAO_%_~uvu+Z z1itU~hL33Qh?|L{xf~TTd;LeC0LMPu2{6|vO`9f^1#ju3OF5X)4>29BsG+ywk}Vh} zp|a+JWyLkiiNnp3(q+?Xmv>))=EI!FQMbFMW?k|i&aqxxu(53of8!u6r-Af}CFr!_ z3N>Y*44Eli|4C%YXRQh9AP*2QLNlnX%I_`fdl$wf)iiO?l8gK<1 z);|)b{&4f^3eo#eTV)Bc6!GFfzce+cTDGby5qnYe0T*8OqR8A~Fajhk*^;L9f6L^T zVa$my6c4{buop!iXu)PLitI&^y(m(P7<*A9Zgl)RSNb2(qR6;O>zS>I?;e*20`WVB zoi23?iMOrfEuslprz`&4kZ9hBA(Hotq z7p2?xqDo5A+yaT;*0S$K{kv|4+4rLON{oEQ5WfLt--`+sCmvpPcP~HEdr?>wncrCw zOD4V{#pROm){zIW`E{*E(<*H8`I8sNS7(AC)?q}(S7!p9Scs99Sfn-DD>3^9SmN1j z%6%;Rsi5&#JH<5dCv0i&N5{Tw|G+X^kFo8|yQfGOy6C*4I?|SK%#F<8GPOfcJ`h z>YZI+E4ui0u6T7_fq0|D-xc)eb?$Jxe6L-2ih{tO@HOyp7~*3%8rH;%!E^C0{c+HOZ+ZzplW`Rr5?|eoaAK z%9@FZ%U$CtH_fXXiI;JbUQ76J1&w&gXHq6*fVnXFtpm>m%ZiFTsjnT#Hvp4Ovx;(E z8DHX1twSVdV8Amg9dl*gqawntJj*>^b5Az+R5;~``QcqP&4TGbzP%J(<1o2 z*mH=78X>y{zdOWl+v^Z-#_#0`F@7(HAHR*&nuJzbRuj@hZXKoN z6y|DK`S<}{{&8AX-Ems>;BlIx;CL;2;CRh3bUbJ$XpX=M+Nc8j{BG}wnxhcEd#gJY z;WWrN9lHgL(;TSBLZHOqSX-|-uFZAij~SKIi`vl!47Y!0co=GFTKS2&>$56O$Z>AW zxgI)@#>26;u2$q6edh&0=NtJ8K%0oL4f#J0Cu`#@vmguFvVoCQmiO^zRK1 ze~UbMyHa>q&fN%uKNudqfmXN3ApHr1!h45@|BN^t{bl0s8y@a3(@pi@o+)*pqp1@4 z6}O1H;3c%w?MDJOuif2Zx8ZfS%J} zsPP$L|9E&foQ6)+2R*J_3BPL9 zw5J1__B_H6!Yc@GBD{x?dkubSj4&SIe1t-T5`-#*1qe$Jnh`n>Rw6_YZa}yN;mZhH z5bi^G6k!*_UW8vEyo~TyghL2fL9{c%X$S=f7a~kYxCEgZp&sE=2(1VKgtZ9k5jG** zj_@^vdk`K(7({pq;W-2zdq!*8BdgFJGAYu}BF(Xt2kGa3GclGhU5_+}sE@7Iv?~$5 zs^SyY;HR?)%?QNrQ|ZWBlz}jM9e#R@@C$^A*J@gq3a=pkAc6ieW(T#DN8P;`dQs-J zaFR_bY({(!!ZQeOB24-WeiV%HzS`4p+lZ z?8CNzZ2{W?wgqep*cPxYU|YbpfNcTW0=5PIGb~WH6MJAqH0`FFr9QY-A?}fF2L2EN zk9-xkKZ$E;z`y(kHtIs)LH_juf*jDT#|m5ndJsYgpF!wF_yWS$5bi$5bi>_7vV*OcMxXadY^K?pyGE_ya3nz#D7u6gNTO^a=K-F zu8L=?xK_m;6|Yh8Z7RM`#XnQ=0TpNAdY*E}skm6hY|re7y!OYpNHibttj8+Eya&*O z!21Zds`yUCyif2g1m07441xC*_95`zf&(_^{e{^GyvJ}E0`D_4srVYilz#_e-g9^e zf%3K^=Di2D8PmT)%<})F(ojv@+h#kzf-u-AeQ6YK{2lb6tox*2lW)AbKd~40CYC^k zru>;S9<1{|(>)BPUp1w(ke=~vv@^os)$o}=u1xsYUcl^UXGMTtD*GmVrC>SkQ2|GI>k3UPR`6yQ`hkM;n`A#E zPXus-!bjZLZx1lb8U)NfO`d~*IW7=i*ev@w@nwKHMi5^In0=r4Ccqp&S|KX{nBz&f z4`l)7m_hylz#K=&KM0uP1$|HR$gySv?F5)(67dCqIYtp*2$+WhVK2r7p$l-dH`{`B zm~xlY`7*@RaRp-Pv<@+K_&oBl%&mx7#&*PPBOa5Ulrhg)JPo2ugv8;{_JD_Fu`Rvu z?XV@?Ye_Tj1K*Wn*tW+}pPj@c?oY~;eYP!NTfnw}Z2{W?wgqep*cPxYfa}x=)0<{h zM6$;Oa+(Ut1G!COs{*-!+=b_A4VCrfft<#wKz`FjZ*!?&aePuiL5mM;J z#iIBkxfPPwMIebXoxfKC=CrbwH61N@#j2~>)r`#@v8Qz8IqbSG4#&XhW!Q|;xe~9| zV#_Sg)p$=;?F7vYpS4Ktz<5!MhVV3Oo;Sl2UK7x3Rym8ks7jeVjnWf{U= zz8&818rRA~Ey7LxCHKJDR96`}Nzr|ZW!S-DT$OXN@nR_K_J!q}xMD-gdc9T0OUNG7 zYkk&W_Lu=&H?bLurYHZDzOvW}B^L%~#~Z82Z04#$=SrE8?Vm&`GEqbWB=Jg&!P8h{ z*=(G;G&Wd}k6|IvOx9}_$Yv}qY(`U~ zX|P9l*aepg^2dmvPIDC%o8S7a@d#Xze3MpeepcggI*GhE{;n)B@@RBj)llhbcNP`4 zdV`^`c)=OY_Ro0hv4+wCwuxq1Dw>_+S8&eBY}s0Wn>L^Y%T5vPg4)hh%~#~CpQp69 zsJLoDLy-$F1t<1rgMUKBBD0FXIMElhVAZK{$#NHl86NKcjAjF|+De?&;td5l+-oGc zHcp;BPhZpQcL!UFim_v=zJ@z8V>d&TTIiaFv?!`BWsGPPd$dn)!H#L7IdaER_SLjXledhRw_a_->TG2>?U{IIggkC+$lofsIx=xx z3}vnedfU7iR0(9tSXC_R8IChd=Qegl#r&bb+@QacyP9WoLG%)<3yNNnN?a#I%#*BfS<*8cp^x$*Q`Xkb0wq z*HCsKfuAXNw<{`y7%GU}$z9l7xA?x-8#mI8h?Jit@I)A2GfNw|0_P)o&XV`E$IBN0J@Qw;> zcia+^j9VS2Va!_OTZPHnRj-G-I&~WKexmWxK7JO$~sQ-pDV(y|qAAz(A_sR`b>oI=IVIZgbNEd0lJc$*v6;G-v(TZf5v zqD7xv)X{U%MN^7QJV$B=E8nq@#X)6CIfR+yO$Tglhj9rTRN_kx$!)<#JrUe|R{Jpp z^I7cz1CM95S1Fj!YH^t^`1!2%J_T>av)UIF%xAU#RB!|^Kf_D;d{#S0!F*PGrGoja zcBO&~oAI1e!DWE&S8yF*e*2ShngH{+FG6R)r(`MlfM+Ur0Ptc3^I7d$1@l?$Z3^bI z+6NWPXSL5On9pk8QE(aHQ?jLeKBKQTV7wO)RxqE}e@DT5N8km*=%GVFd@fMIjUm`X z!OsCc0d(>d!gC80TnBiXf&+l(DtJ9U`nN>EuL8aba2|RtM}`{}%xAsdA?%2V-_Sgv z;IdY{m!jZE3qC2U;32@HF?x`{&V%RpgvUg*C1}veghxfh?<~p`&wvhlD)=DyI}{Ip zv-6I?W5~e&i5MmF&^7@--Vp!{5SGNVZ3$Crty;n-684yQx=r}oB+T(l+iHS$ns|O` z!v9^uqO5l%j57v0NPrH|P}BG+Ndvyh1b^NHKWTzrGQneW6L~*rf|r@#O(yu;CU`VQ zVWq=36MTUQzT5!x=#7P%L41qo!??FuX$3zGQ+Q zH1VH@S;NR%Zh{w?V6TLQoSRMfADZA_NO%m(de;Qk00a2~{{<8LvI(BbnM(0oYl5FN z!N@TOr%(N-a>M!+j= zJjyP{sRW@EVFAJw2z3a!^{;gz_z*DMYV8P95&o~*qd@z_GV78QUnug1m!~6em8QNI zm*xv(X|t#gM5d+54MTVzL*76sNz3Iif7U52hxJoWX_+jae@e>}#{I2I_4UcL45n{J zrKR&8j(=5J60YAys->|PU8cP84{)YspyFZ^;j~nB=T0!Bw{c=ymrMc<*GjT2#pgsb ziI6wHFsOnpSS9m6=w1sxxsh^nNNn$v+79vEm{Qs>{t3P`6yuA-X-EyC z52Y(ej1K7ta_rRb3=tRT#w5f+iKsLWjDgMg)LT7>wBB@APLTYRZdUw>zlHpMANHlq zp6)T9g;7=Y!+Vrqq5k9KNiI(D$o+DalW)m6enf>SRZx&GCh|d-c z2BZB_A1Vrt!#@oq+fjQAcr=A|iV6BdsfH_+_=CR>tD5PF--i{I^r-K{3WKl7XM7)4 zP~1V&n*4)2)yt^S5elA;=Lb&<)UJBNbk^DptY)A4!n`E=DDxGvp`C^`!2t-=E z@B}>Hbvpc;Y2Zln3S8;~Mu{<=EGDJoBgG_?dX|`slMfLk4wpair-#N{1u5?h;y#Cc z*cPxYU|YbpfNg>QBn$lPoxi-t$7guR6yZa;vk-dmykbM-zl54+;LK+ZE>~UoWzMC} zdfw2t9C%)G*n@Jmp%9m=(Yb^VKTLYOy@RhO zrRrCOhaePnB8`oMX$49|ihdrxk1uIBTlHJwm-4144yIw|j0aXp9*^l3rd3|AlD9+& zVLC}ai)5Et8tLJ7zA2TWAD^wWzW-oD;$Yf*SY_ik5b}1eVzTP@OFU?zyfQrZ)e1 zt?#BSQomP~5T-{uTrR!cC0?JATvmCJZ%cU*<*-bTie4qAc2 z8U0tK+1!+yugET!ufr8u)7k9ra0SA_jPeYA_J6ZpRCl_P#Rz`vPxOjZ{qm8Y`tdm< z52mg1W=fJc<9qGyk@Q=wJ3v*O(qzp6GAhmF}R(VU;&&hm^;c z4tX#=vb=az1;15ZlajYpP&JL|k>n-TQMEM-<~gfs8db)I^xNHMIOAl%Jozo z0*{MS$Vbd~Q}{kfrlSrM5#RZ+9w!1(fWYoJwJQ{yiWeTI@ni>>ODVkC^)x;#) z;e(d5O1x~5t}>=_B$Fs7@B!=77IX*Ny`IovN;23`ifo_R=JK+!fML5EJ_o-uUQC_> z|MNC8m&}*sFCYIphT~6+@_njy$ zYb1T;%g^Zr$6t)5+$My$e~Z`HPdc3cwFY&a>)rIy4JzcO>dnz>M0;F;CkmIXGCp+RG{Y@`Y@(mq`7S`pqdZbkN&Iw0qKv+Ue_&@-p}N z(1zpQxZg=VFHq?^qty58DE^1#Ao07O*W~Tfnw}Z2{W?wgqep*cPxY zU|YbpfNcTW0=5Ng3)mL0Enr)~wt#H`+XA))Yzx>Huq|L)z_x&G0oww$1#Ao07O*W~ zTfnw}Z2{W?wgqep*cPxYU|YbpfNcTW0=5Ng3)mL0Enr)~wt#H`+XA))Yzx>Huq|L) zz_x&G0oww$1#Ao07Wfabz@qBDKQ>hNygIJBuRB&99W@yrY^&~b9;}Ye_$v0XsqXKN z#i~yyZfEs|Ux!Zy{&U3ly;St`;jzA@1ou_)Q?Q6a?u&Rl1DI{a3^-5s*XaH8EeSe2V<$M|1GoDo3qY0XKjyXy~L7rduwtX zdY+iQtb9eeYx&NazFoAzG}z!k0TKsJ#>r%jGlijGjendfM8v+0IQAY+t$F8E;Twg@ zAIcl)5&6<19%6CP^9rF)`S5e7%7Z|Nreb2DRECtk-LZ$TFB_0|No3K_Wrkamlbe#0 zc_s;T+r0J9h{k=S7kjbAzD0@sk8sz!*nS~>)FyoPu)4oGzq&6fJgH}Jc6DD*wQ#CY zUJ`o-LF}1?Jk`-h3K?w}4u7&b8l6qJZ%_3Fhr%BR*Q?bJ|MY2jRKNZE>K(7-RKNZ6 z>i(RY5w3#-vd8|2QfvDkq5QXc4&m$wkAc`+(tbi(-*C(!wLAz{iH#W$pfUpCV#=kgHpZzM}%Si8b`o7_cDKYv^UOw5gZa~xeChk>5=&{i)EkG*vfE5D8Y@&@|uO89f$q&=}F zu>SaRW||CW{UDkgGlN91e@UUTLyw)7oK<1Hy=h%hJ zvsC8!X`Bar5Z;n2hlBl7L2kt{CGVW|G-r}M|5x_zHOMm{4dAltArE zft9rf?vN-%4A2oAU$)~1;*%E+ZK|aR*cTLQC0(!C@^sH z<-7f7{Yybd{Ygq&zw?WodfYhtT(XwWX~P-&=s({n8J?7WQ8fcG8fo8h?R3!Ok=Y= za*&al&kqqk^7)+Xv9Z`KvbH~z`&Q33B;{njhXj888l8lGwZ9N>>p+rzr^of1cStIj z4gLPHAgj(vJI!@Ds ze$b&St^0faO=8m@?){O6`{jg>f?RPJ9Nb#?`fTaG<UNoPd#be4$rGF9EbXfXD|Xd3V_F7~SX9-BQp zJRExysQLYmanZsxVK%BhzyBLt&DZw*Id-y0KEP!V4f7h9QPYj{FyCwCeH+AtAD!`K zUS~#2r!M2P_iYd{6WlDWJ$Da}y@P37F;3$;ipc)%&Aei~45DvvZkCsf5nM73P|Yn4 zE&>;Asg8DSJ@9c!+zjGY5^-%AXDk%6^|P;F;`=H@MymTSKQ?v;^%IF1-REf9!!Vx~ zy8%ccXhQ%M20wUjCCCb%2O<_Y$P-%&aQ&~lPOR=PU5=U*4#qxxjIhFXm`jT}K!y!! z`~D=ZO=B+!;@bj`MeW#cv#s(1I~;H1{r6J{kLR7br>6f)T=Q1V6lB5^=xuVlMDj(i77W4}aXpngEqg(4-D z`Z5t`#2zqsB(|4Waec<}*BUAG5Vl(Er&!L?M@|6&UcarHigI|$n*Obxjtj8nqaz6^>49v z!N86hL^`$`r}#`Rf%yFcF@A`9O3%qo7Qbmzp7-GNiDhr?a)d|MM8gwv4`f$A``7AW z+InlO3L>3kC?~_1`DBVI!Zqe!M$;na)6l;4z6IP8`3+ZMsH^2Z<%3G8_toS@`{ z;M09OdVY85bw6RY-uW-=h#gb@7$j;*=;wh>Li_>EVkFAki*`*lc^-*95h@UFb=uhG}fMCtQ4{H5#9YQBJlYWjXl!)$Pfo`pJ-2czdd za3%YebE_kaA{GrE$iaYpFHEx(=pRwF;jvesT;88!L;MtVlvgOYwG{6x2NZov>`Bnk za*F#ag8QY|GQ_d1IHg=~@}8ww)sK2jTvOuS;I4<^g(!BPQx=Q+m4)=X@yL%B-OE1Q z_ggIWC5A)ed$Fl33B=fB00&OO&{2M-aLJ;d$No-Nz>0^rH)ZFR`t6MkgF?}dAdcl* z_2c^BdAQ}-Z|%gWRTEtSms^>SE6-;S)b#Aif$bin&iyldh=#|uGZCFp#OS&|z{;0a z@AyL&detJOc_a>0Exl2>+K%508D5z>Zj!m_Xj6%}$ORLtSEuRX599zJHK* zKd&8y44-$EICqG%Pn-kd92DoUIIk4v)#AKXoUaw&1DaIQNS44dQ&G zIByc?0dc-roNp25+r;^HasHw>-zCmp7U#|4{55gDTb#cs&RfL!JK}tgIDcQ9w~F(9 z;(Wh2KPb-I#Q9-yepH;di}Rp3KQ7Ksi1RLS-XqRWiSyIq{0z?Y&9fe>z`)rseBSpE z5401x|4(p)cFth?UnJxu^m9Vj6WT-QTZFa~dV$dWgw8@U?f(v;`GhtT+DPa&Lf;~E zBcYcGeU{KkaNqr_3C$+tBNQamLg*GkO9}mh5a;CflQ016pG)WhLURZ$Bvedj9U+W) zD2>qBgnmruR6?&2I*!osIe;`m*AaT_JwSI8dX>U+V7}kqOXxO2pC%L|6ectWtET-|5xS936QO;C z789C`F?xS3q1A*c2;E9(Hlh0nO(BHl(DqM^LuV3tiqw2Ue;{-Wq4x;A`!7ITNAG_f z5VMM-;G~m2cj@;pyYAAv1KpPbbLkiFxZ{!q`1I}Us-Sxnzx3e*c5vw6p?A^m?mVbv zi()U9xiyWzsR(<~(&C#e*BBH|Y9}E4hLrz7;MWd*&jkI59wd%80YEEl6dK;~FC>^p z9Fk-B&hG3krlS%o0m}M18NPtP#QjXnzzKEL8X!w6MS_$TCTbLAB@+vg!2BVPZzAy% zfY-2mKTa5!E-m}an?az~-$c;9h;R-89>aGYj^6)SDz~1s(s08`9t7Zs+UrCwN1*g~nCMW6 zEc6d;ol1;m;;RT#5Sp1d4OO3jcnlL2NQ^~%4ii@*!HP68u>v9|A^rpt8<8MeB@=fd zF$b|=djSbrL5R)+nF&tsj&V5Q>Q^2U6lF4cqJv9C+Vm2#%`vmhMdG)h2)2pfO|j`8 zV3B3B!9oFlgTmS^2sG+TOn7lR9`Wy(xCy5jhy~jdNE9F;4h~(X1ImW>j(;MNQcg{F zIXN#E>WG8^$jazUhEBd(Wgta zAU=?;2hFm=-cCJur8nH(2%yFn)`KhE9VKCRuuTt_;FDy!C+rWFbcOU_4L+S#64V2_ zI~*#ZO7%h*^97|&^6s=7jW zqfxOEtwnctbof2mN?8l!qE>oKO<3>L!rpL)u6aYwYr5PWjsAvk(Ccd}(ONtF?yxjQ zD9oa0sLFP?uZ>2=m*P9T9(Nd@SZZkZcXhNh>cLL04}3|q59hG%ZS8yfovv!S9noPa=`&q8BSnTGmZ|GtU|^HJsgHsdM}Ej^s*MtWn+yf2ehbR4Y|>_(N&USMBz-bm;Xu?N!q54k>?=ZJS&|mEUvq zeBIZTT!mHMj*hyZ9@2ebXD|qdOR{W>x20Zh!?y+X;9P&OUhnjW^#%U0w^g-ah=!@s zS9(2qqyK8CV9h<(?S*d~UPh*}J-T-#s%I@Xxg6HP>GQzH>-7*i4QJ5?`d%^{DpRE& zj_XRunv0r$_pRLOlJ0KFFRXuo)jDz7x~)Lu%^M1xdN(p>gAp= z3}Tg@k;aU$iMP#{K4V6jP%prt!dlj%R4kd(_hVQ~cKrqqz7^%GbMwP%a3*-B8aPTc zcx}5TK1t}|cMdgq#!%C$t@ZnK4c{un2-ewPjEE@+_OUCPufoVwG7`0I;nn(@D*r0yns|OSB5k(U;K`4VyKVO<2$%hsz0*&!456p{uIUVPbgx)< zSx2QG3xn0+?sb>}JXe>lV{4UO)7@lTY;Lh+m~AA7mpQh@2@lG2)*Zb(~4txMx9 zVrIUiw6(Q64XPEoc*1kyJmhK&x_u$~f9bNKnXSuH5fv2>^%0aI2J=v*+taR>R#bQw zRxF#2Dg6%R(^V}T?9z{{h9jyd>b62v&gH{Y{XT2B((i34 zxbTv0h+wra24O*jk7B~K2}?`cxv)C67NICC*wu_7dXAC@k!A~|Yd%v}Q&FPi5vx48 zz$nAiuJ2Q~(j=25Y2FPlPPIi`qYl5X&0Mp8i(kNB7gCRvVh~FBnWxP0X>*R!1x(@E-^|<7G zlQ02>VYAw-2s*ag8$P1JBW@;+=5kcX?DZdk0v!8r0cx&Mnl?=+3*OR6mvS(pAC@j$ zxT1#MiVL7%n1srj3zp5OSxy}8dX+Alws3j(1!z9Zc^q}SYiiad58@o_%Y#Ap8n&(B zZycoMG>~4g1f4cqp{5L!Av2}xKZz`v+%Cb9B(%HR+nqXvN`LGM>WO(OscAV;$Nevb zQd3b;v9Nnx1Fk2-`bXl_A8uYNmm!{_I<~k~|3QD?ZA=gs8v7uID z=0&QpL~Zm?f{`*WS0%-ancCrR^G^x*+B7V|J6e1n4;SDDMN2`rT?f$SFAyK6*QSQB z)Da8rDdBKy8s1j8C2qFi62M&^2vlKl-^QC83mT9z?r4~>@_IyTz`X&Vx`qd@95OIg zsAa0Quy}e|Vae>WqM30J%Tbfa37~kU6)UE);_2~J3Lh7;vVaL-TbY!}NTtmr`W5qd z651GGN``p(MKhBNTsYmR3bZVnR_vKxs2R8vDa>jVOSsC5>sr4L-{zhmb9#zrt2#py zC?-=Wa!6!x%7zrhTO6p2K&9|&P|RdY@{2nUC^dbC1c%9{DPlzxaFt>^sOApDfsSklXA#$Vqq2 z)e_FWgNz5YcnE9XK`u>m2O0O6Ru+r^JvL$uh363`K{>aW@6$65MvBTGbAS7%}RPp<--*; zVuvs(lX4AlAxG`RODLWTmK9I)q`rls?ztt~W)%gyGQQNK$Vtza5*9M3@9R~bqg3LE z)=E|^#b7J&Qj6JQUc9#B&1f+7BtEzz*>WGQu}lB&c$M+0g4IArsiEJ8rH)dGABk(> zr_Gu+9s$4C)c7+qrukzx{7{UChy6g38TEP-cdl&Im{A};q0QQM!#_#PAA4GfzaY2iwjl)kYo7(XUxS*y5 zu0npq_)#2w?shWdQX4J14(c>zX`>J3XgLQ*Ygt3Nnxg+WjCFu9kcml?U=2nYFTw-HOJnuT22|ZojmFI9QBjJQz;XNV{N_WSe*|EqjLvP z&_v*9iGq9Z16v%mWa3eNV*bXg$`g)p_E0gw!`QL5u2x7Gedn$CEo{CaXEJD%HA%@i zPMI?IrYEIfLtahKs7*OHWlsk$Etva#N$xZF|JTAlujiN>MGi3IU>Q#%G;NjnDuuCt zFyzmb^2zrmLhrqj@27ypk%n(PWE9>f`8r47s{-F@#iwWBqa7xLZ&305QSs%jv(!u3 zfqLEr{>Tqy`O~a&D|>P_p#{jtA2;5v_|UlWFzTa{ zGJ>721z(xs%O8R7ZtzVy0(sm^q~HkTy$QZt#fQEsk2L-=J_nB%)FBjK1-h{`g45F_VXBJlue87atEPmpZin zNS2=qALWsI?#|@;%}=DU!J2T#yPmQOCE2rR5sc-zZ;70oy^8U^7XE5W!{wW7%TjCorurpqv;&v4WReY_AH>!9* z#a~qM-75aRinpowaTPzU;^$R7q~cdp{HBWEQ*o|O>T|M+$E)~!6&I?wM8#DqUZCP7 zDsEPBhl*FKIHKYkRD6qyzpUadD!xy}kE(c=iubDcS1Nv4#eY@tAr)sSyN^-vX(}#I z@r5d$uHs8nT&?2VL1~AGitDiF1ly@;hm5zX7$|X!!o>5;TZItg-{69eyGnmlu`xba=P}|ZsbKUe#%Eai{h@8i{m#rwcpSp% z2t&AoK$*sP#k&+tTm6=IDTvQi@MkD|kFwilg+ET=Z~mOrV^HCLWRX9l@L#gX*P3L$d}SYFzA8}o%M}0J z*jlFTv3UBZS6uv-{cfBUTlzV(uSt%|>(;;*Rqdn*2siXmFqub6=8F#7e9A4z#e zzwUiRrVZA>qcTk$(~S=`mhr*Jmnr7>Kv~DB`WyW&(qt-^3=F2jC};I!DI^nD0%SS7 z#JxzB^NMOO-rc0=66L?gd_$%Ou9mTp@B1p>tZzy@?~XFxPK96cEt$?&`4(I3Fr@Sx zr>-B6HR&+MN26aD{l*wCjQ(r%Z)04TqVzWOH~OJ5PGZjxp{LQGzo*hhzkgDtUr@0z zZW-f|G0qs{vC;p>sd3;u70*%eWhyqt(NmOt&Q`Hu|5+;Cpklv@H>vomDo!#I5*I1? z2HtDoGuHhE{aY5gfw#uSbzb41w3n4`q+`nejdZ3sU-hF*bOT?g{9?)A$mQN{@$)?# zJaGI{)h|aT<7b2ZTSXrgr%1q{|3Zxm<1^45%8yS|bdJ3|jQfP_A3O@gS&j(=3st&E z#YR+S=@-@aCD(i0{mE$~U!4MGTj&=mdHXDQBj3RccthTyhh%w1eFEyb-^g#rwgqep z*cPxYU|YbpfNcTW0=5Ng3)mL0E%1NK0w+yq3gkCkTv1ylO-`QB6u&Y7en|!QtN8IX1o~`FL zQ7_lhmX5lWW)V%&z`j+T0&umhUhTr3(IIRn*5M7Wajh)WA_wCwI&fA>v#Y(@BAeqb zkz6-}K5pQLRKVYSmB)qM<{{d{9ci`5ws@rnvuPhQ%gQi!BiACm79Js`Gt}0A%}TY% zUb8{WBv-3w6o$S!5}<*FhRMR;-&uf!NUjWw2!rcjs01`9IMd#=!;vE4V@MOw003)+w^di%6R z;ntekt7bc$GsRZadd&jq%f*Gw=reFje3>EaLhlUnrzxOLa}^bvf8|i)5x64x!vV4P zXN||{B=X|;PXmaNN2BYihDukvv#7Au8w`cTX4vqI7gf_ZL`9_YN3umixIAZ`V8nr; zZb3t>zfBv^g1wGYM9ZMQGgSi?IqT;s{VhtaTF_ABDoRpv6_qS9D+!Df!-^IhaGV+! zE&Kco55G--mIL+n6zZ%NZz#~=UL)z76ZF~h^fk?Xcd(_X7@M%`YxoTU?C6Vv3tiKY z7Nu=*qzt}|;`}qb`Ti{Gi4N>4g2gdF-(i^G0Op>s0g3osPl*L2@=0gYBWo2Ut7~EO}}^K z%=K!+cxNkHVqZq)86l4w9~o*DY(p8@E`~l=1ifwE4BEsp=Bz4~jeRh|F`b*b78P^j z&ACB;C%>4H(I3%ito|rEO_D!~PQ!X0vJ`?Q5}p{zihGVI+-QMb6P|PBEL4-qNs|j! z(Ub!gzS-atQ+kTG+-~8d;bfgO9RIA@ug6A=DkfXJ}gDif%p%GG}34 zz?YG9r_gfCQIL3Xpexjlt<*hNJ3Tb#)}tU3j$A*lVTOzHwjBj|hW8JSBnvaQ#eKxY zZFV2d+X?sK3K^5oQIKiqw>L?a>I+7%-j|MOtT`x;v|fxhBy}%Y@J>c-Ietpv|juQRK`e& zUlpZamiL1$*T7nDR`Tjw`*W6-#p(05EH2UinU#|>umf*(WGAnkwg1hsuCnjQwl2oM znj=O1PKdfLJ11xB;}9jp|6Sm&2X609hXx9MDV39R@JRvh=6UlToVCb4f&VSf!#HbM z#$}7PBinq1hA+&5X5E?lkJ(9^Z{L}dqxDAc!cr>dO*u)Nw}NvkICHdp;vBgSa86`B z@(zC2@&CFzyVxkID2~rSRSd;8!2}e8tI-5QT=|NiMN+Il3)&)U0IAhNDQ%(H6)T7z z$zuF^&`_e`!32Ye4}=H8gG$0vG10^alo%q3F@^_UOpFj8jFA`r=bm$B?wq;1OD!7X zB&V~#d(ZvYnY%OFJO8_9{aC};b?2s>i_7K9acd#nnhVX%N8_V$Fa9}-%j46=8ji-5 zxa>yQpFcK2axmo;fG){;AFuJAqH&n4Hi^)J+f=@QGH$zG_M~#S41??-CaD3|7siiZ zk7XP&)lI?hXln!?!+r+#=dr&D`#-R6LQ@6oo3U?4pYSrGB`nkrYJ>XGgg665T*rs| zi|&vjDVi$23-H?ay*c$=O?O!L`{|zlJmWuocxYQ`KZ1$vEY__waV0AA>RW=>{&|?49)mW-oywjIDo7`mqL!=9bdIpNc5I_g$u&( z3AYMU@KN&b75-MZB1|z(U3D7;ZP>gE2vBwP?aEZi#mnecky?}W?3 z6#J9fs|e4WD*YYg`rCz7Z#OEedb#7ms=K>DjH>~ySVpzc&%(5FnfQt@tzagefh!34 z(@JLIf-tRUCSEK|E1QW|3)2c`;?2Ue(wTTCcK&W!@xAtG~&AP3Z+Bx0!Jr=j}t2f0`Mij<++0Dbz9Q!~KA_OUy}qH%xQ+ zN%^_VN&XUMl;Uk2b5h?9lYf92@0zzm%s5NDoiu#O@NBxXaZFuTV6EZphCeVoZup|% znRLhW>Mt68$M6xuCk%gM_&39|aA)@0n`gMiaF^ljhW8u(*zhT4Torhm-ssxLr;@ij z4Yx2S=jXWLFAaZh_*dqn{#o?R!#lpq3~ymZDc%kk{@UTGa@gFk$iQyREbbSA{ zh7TJ4!SEgUX!_+JFx+Lh-|$|;N0^i2`>EkC99NR}ch>NE_D?>KzcVNPjrdlH{^F?d zcDv!lhF2Lb86GhFvf+b&fvuywFUVUNK&VO_BG zu*YE=U?tcSFf5aaup}nh1ltV5*Nf1!p_e5*j+A#6e*Iyoe#y!Dam`hodOIeyrSrkZGmh)P?AeWR+Ss1aFqhsUB z4Ulr!OHMHf+*{90KPPqTOFj~HJ=4Ko*VP;4b$vC$UA=eYja;cyXUgnRGTHw4l`MZ^ ztx9R%C0j#PHGrsMvJ;Lp%NWd{Nl3{^pVwy+#3LsHfKyHbKxx@2OljDpN}d0q$y~&z z%FRBzz=;u_^I0xV6`S|)p|5Ck?IP9U*{ysn(BkJ86NA2FesbsDS{;9 z-;ybq<}&&Oljk2I?Vdk=>Z_Ni!kU@|b&Pkv z;C3~tVRj?wkS{b{MFTSb@F%t7EvyFL$d5w9UIm&#%e8`+< zE-)9FkD05?HRd|=CG!tjOB2_N+78i}hxM*l0F}O=bJD zgV|xMnH|G6vNPD3>}+-pJD**^KE^I(m$6T>PqELj&$Cu4w1h4!L-=pZ_VPNNUdhv*!-gs!2_(C6q2^bPtE z-9o>i-_c(fVI@{!HP&DOJ77obgq^V)_QAf`5BuX_9E;;{JWjwVI2#+W3FqJf+!y!5 zrMN#Hh==15cqAT$tMNEohwJfpJPA+7Gw@728$XH{;DvY*UWV7;C-7SQ6n+}7$D8qs z_$B-@eiiS;yYSn1FFu5i;$!$YK8?@g3-}`b1b>0Q#^2x@_*?t~{tf?*Z{t7k9ggD^ zoRU*=oGa(S`EmYS02jhVb1_^j7sn-WnOqi^%^A5ot~b|*>&x}y%DG|O zD6Wzl%~f$VTm#q0HF2%nRBjqKotweU;vV511qu8%FtT>`LsyM0mNO4YaUU6CRnc{QB7mBYHKPY}t{HnOExT|E8tWu%m zm4Z^Iv{Sk&J(QkGA7!vIL>ZxsS0*SEm8nXj(xl8$7AX5F%arBH0m>oDQOZi?Xyq7X zy|O{ssBBSAQBGA(Q%cH*mGhO4C>JSLC|4?1DW6boP;OLiQa-DES-DO5igLU14drg- ze&qq>yUK&g!^%_2Gs?5dkCf+>mz39(pD90AexdwY`GfLDaF2s<29{ zvQhCWy~;)9s_LckRQam{RDr5cRg5Y@m8eQmrKwD+996EWP}NUWs_L&As2Z*sp&G5K zRXwC?P_?NhsHUo>sfcQp>S5J<)gskm)pFGewNag~E>QPZ4^t0Uk5f-jPgl=S&s5J> zFI6v7FIPXVUaMZG-lBe4y-od=dZ&7q`mp)~^@r*+>htOg>TBv7>R;5qs&8pj8okC< zD__-Vp4@tOopq9#jIsOhgM)0AsQXlgV~n(>-u%_I%c%+k!(%-1Z{EYmF4tk$g4 zY|%WUc~-Ma^RDK&<|EBH&3Vlg%~zVQHQ#7{(A?Jiq4`sbv^H7?t)tdc>!mel!?g+8 zOl_7nTiaVZKs!)7Qd^@Ps~xYMqMfRprX|`(wF|Thwac~Zv`=cE(LSqvPWz(vCGE>L z!}zg6tI#G)5GD$fgvr7bVX81qm@do^W(tx(gjvFDVU93Ym?u0e%oiRJ9u*b{3x!3( zV&O4iiLg{yCM*|L2rGqE!fN4hVU6&FuvSoEI(#7llj0W#MDt6XA;R zsc==eCVVD*E_@+e7rqp}622C`5pD?I3f~Dgh3|zQgdc^Ugr9|9gkObQ!f(Rw!foLX z;ZNZ&;cwxN@Q-j;$LLrc(qSE^Q|OdBl}@eG=(IW;9j_B~I-RXfuM>54I(wai&Qa&2 zbJn@&Ty?#4ZaR0Jht5;yr8DTfbv`;@ouAHM7oZE&1?hryA-Ygqm@Zrwp^MZ->7sQp zx>#MDE?$?QOVlOll65J%R9%`bU6-ND)Me?ibw-^@m!r$o<>~Tu1-e3Ak*-)*qU){e zqwA~drz_R<*OlqYbpvz*b%S(+bwhL&x}myZy5YJJx{U6rm{XV#6;)#%3R zYIP6k#_8&G^|}UKqpnFeUe~N^(Y5N@bQ5$Fb(3_HbyIXxb<=dyb&_uO0KbN|y1L7Z zhS4%M49^IRj0<%Cf7f%q=aoqigGGTPJtD zSKp^>U@cszGY_h5sBWAH!<~B=-ZP+fk{X*^2KrUiRkpNLSO}w|B_xd}XevRI3E~Kz zCn?}R1kWY-VS=W7$QWSG-i*&sm>9jYPi4JX!V(9xXE#CQQB_H2`XS@b1TcY2P=y74 z1B@DMIW)J7fLq&IS{v&vlidj8f(Lg@{X-@c5QH%iKvG0|n6iNhmy}Y|r+Ql^iiu`o zm{=x`iDwd+L>QXHBr_>YDwD>fGZ{=Klf`5+M#jYCFu6<~lg|_|g>bf*DFNnNSk)h- zF;ef*r))rrxw){R)!aO$vdUc8YOXJ=HaE1^j;S>_59w3ZyK+)l?G!Ui%yL_KZEKy` z3S?lddE!WY7|gn@wXxY;RasZnR#(|-ZUNr50u*Cob2WrjV{5C%HGl+r*ES3psdwmr zRoK$s3>;{#1o;8TvZ`jYxxqpgD1`-|v9fAhZ9@%EGN?SSuCk`ZN{P&P5CEk?J|3wT zJMJoLom^+`UD+~jq~2ZDz55U&sU${fkkpb^t&!@bMm@4CpTsbdMq>0T->d{i{x?$Z zGIeT9Y)qITHaTi~m|<#MQal_dCQqL}z|>gPSUIe$whm@%q4*qA%JgT-Kq%$R0ATtc zW-v2^sbGf6s@}&usTF43)Yt%w0qK^tjh+A#Xn~33HG_V%Gn)W0$kZ|q zG2`H#Ql?I(te$CL8bL+IgQ6IjF-#ki1IyK9uB#i=PRmHWCrGxg4%SskV+|;ET}kES z#X8;n)ZJ?5@mTV+VJh>P zN0>*M1xKRm^JUab^wk1hbY|2kU@-)-xNJjquqFf1hFU zL6xYUHaFH$KFi|i*K8hRZf-VL=T_I4fgQcg4Q=v;GIJfw*<4)+a+_osYHqG=tgfxf zG1pa222jSf*4D-bSyI$203YS!k$Ss6W&PU6%Ij=GWgQI9u7f4lQq~HqMIHjnu!XL^ zyynJw3)Ws1^zVfEJi+6%yZ21%vKQI3(SkmOU%o_WUBL^ z!W_C00FngH2%syEo4uHxZWZnY}c%M1U908o!vL4Hpqk}QM8>^}1 zfJGn+2YAxAL1ropFRyH_F}K1c`2;Yj<0cSj?*?;yV?%9KNn;g=r+4inP!=i+7%dx3 z$;%F$B_laXZm>cOlCxxQHxpPWc}PxYf!t$2=yB!*bCNm5Yyb`F;6HUs^q5XmijaIH zZ%JQn1mAf^_CjZvv&=`#IglhMNn=}cm05O1E>bVawS&;|(J!2^>L7p-^I!K;#yGDy6n;M%2G*Jbz@HoYS z|7+%(F1odm`I-p^8(P=cY%yrxF*TcDX@1ZAAUR0BQjipW8DuycZLJ#n zAv+foY!>@4tOOabY?ITaOp7QUVIP$>!Loeh0cEo3-pD@Ev8p}Ug_~jZE@BtU61vX{ z^<$T8>0FU=pcS16fofbdT{!U&XhkQ|KlYN?9 z&u(BhvYXh=>=yPJ_F1@JzL!oNv`RiMYl0jDSZ=Cpt*mRTp_f3jKFOkt>snEjSSJ>?xP&cx# zFu~o)dtD~)O~6+S*h;{AwIj05wgcHtip&_rbim!sz9TzCIxw%+Tvu&bM!VTP?A`|n zX+L|Qotg4oTiE>_i^mcf$IxsdnF=g6`ThbM-61gM6uS;W`wm%n_q6bivnQ;}rCMGt zBS#4$0`r=JHcc?jZ)_9THl$DU^|$jjHvv`M3-ky53+ zc1K;ND#d;RDs=_K@+l}*8oL4%>nc;heg@%n4!fHDlKqPPn*D~o0n==^i8O$2YHNiU z3F1!(NWpF8G*?b+>C`=WVf3p5JsI0r2iC8wwHfk1d0DQQ#AHK8GfdKJVD32n8YED91AF9ro@9_8)1uG-9MaK%Rg9#`?+znE{sN z4rvwTLubNm(O)NoHd5bjl~Q616;fOr2rMR{XGe$>NNF{-qhyI!OI01FHc=x(Mml6m zm!e#EpgGTGq_g;P8C7gjG}Q>%bjTSlD8wiC7*?xUW!ACH$d1{F9FQYO+>BhPQH7*y zvn3svmqqR87)Svi>eWLUYNjT1;DDxTNK;A$i}9zapgg&Fzomsv`Dgh{bQx|4|EM%t@olMtJbW}Vzu914f z)aa{jW9uJn8TQ|X(1PGPE!I)cR z^+HKZ%{KjTl#EhPDoR7?CCm$b@oGF3Lmsr~nnBB2lC4M!u;NHhvnqS2@dRUdHKE2U;>qBL2WDovMWN^_-0rN^X|(i76t(q`#->1F9PX@|61+AkfJj!UPd zkEDyzr_vYFH_{K%FVb!44q*{t)r92U!?Un1;w!oES+orK*(*n@;UO4w6`Jww}*k1|z zJ7NDM?B9g_haiR^B!!6stRE{>+ zK{2vLYLh0&Wk+R=U6plS!U zNv^>*Hg7^((6e$<0N1Q%JIM-XD$on)DJVCVN|U4sV7_Y`AoH)R%d2f}=`3GaZ$Rsq zYP210Xn}Im6lucXmNE5mO{MFI3baEWQ7TQ7Cdjr@_J&=Dgrj%lAxde6G-2RGxukmr zm<6mt`_TdPt|Upbr8yV6rG$HEGKk*mNCwdnNXkfi8aPYx=t!-%GAGapbP}DCA_!_C zsDYqn2wFRS5*-&FHY>-b_GFNm4ot6EVg=MsAWaZo@xcJdM z{Oq9oJh}js&yyZ`Am!)^`qWDKeCc7yV=$CUYwMvlQVKN~dnmJwfk2g>t88s+hSMpX zth)}H^c5gk0IITBnnS(#Y+w@2m??V>qHiHzhD;fK4=4=MLODlX)SWp$Guh}@${ekv zCdg%I_Gl>e8Dt%UI2E~R6px6vO!#1d&m&olkoA|rGc zGeE{tSw_pHWs=7kpz;`FhcV`u69n}l$X$vs!)|*MlrtL)0i}(@8=K4xIgM3q^-#6y zz=yTi2Jo$t);tg&7O|Zb-{aD1C<>VB8e7bz6Nk4mRsL#)>VjPX>RRck2SfG31}oGj zrFD`=d0FKIb7{-)7Wi`ysR1|;fUcJ|NpmiCsxJ;{m(cs@ZyaW+X5c6s%^ZfDy1cQm z4!oPR)DFbSv}^Q6X@lf3ydTt+4B!dcnj#`1O8bpyZfl^YEah42L=tfl;M^iT_uz?S z;7sd8o|T@FJjOtmLo?K78<YgB|+!W?2P< z?Df>~nXRncfHwltBhs<^pv2G66$5kGN>SRu)}v*W?3Ip69z*2`^@Vt^8S)G#IwSc@ zm;Jd;u5H7w0Hzbtsrz8E3T=mVa`w_mFwtdW8z)ll0T|jEC=NL85yNi$4q*5|I@==# zyw8f^AYk~gT`kUZn#T9>VQL!F3CffrhL=H~lA)~0TuJxFhQl6OQ^yx8^G@KCfbg7j z;Xfh#s0+gLlE(bllp@MajZKqFs|HlTA1j9M@J+yQRr>tF7=FROS}}YkT?2iy?9@=9lvY-> z$lEq>Y=!$L{tMtWMRr5Snl|)loLHJVqKa1Df&X=NAnJ}; zaJ@J;K>efibC0NTJO7!DoR4)D_R>$1$3Pk@wwedgNU?LJae-VAfcsVY{ej@P2rkkJ z?l=cTq`!LvXJt$pmu_XuU(%n{+`7sOs$;rx8V6fG z^|13$nnJw=EVq2<8ffVjcW@>y2k`wvShh!m9qizWxZ)1_3Cl>Z^-?|n+6GFe41l6n zqm}$pu0ML0u$Zu_Zr+-Cn;Rg%DV!;qJiSJn`gqe3RElCX+SF%RcP zP%(!R6fQ*!$%ClYK(}{GYoJ-7JpiF6`n9(Oj~C+iJRO7qAg){R7PS^TYZ!45aq=MiAw21 z5Ft{31m&8JbA=7H+))R`fDfK0CqrXi1$Z|Sp{F~SHqW?Vs2X(UU?JNKDD!f$p8t2f%31^+`+cjxi{!6eF^K| z<19P#DsDH-vOTXNtRHZ#qOq}lSi1t#W2=z&bC9YLHjuEPJp$$4vv_XqFbByRVS_BI zCWNrTovY?JcY>~(hX|^ZB8JIkfd<5*!4g1&|A0$ zlDlk0FM;SHB#%bD9n?+Rm=>lLnj`9A?M#sa)^hmP2#ph?A%tx<1dP;sLCD>X-BM1g zog(M#{h-Ly+Qk%J<*rd;q6r(@GcoO60*Lv#s~W|0QKNPXXc$!6I+i+S*%g3rEj(zy zdXM_t3o3V=IAMP%tB?UI({u3==Q5DKAw16#5l{|)7ke0SJLUYkb zy|)D+?K-LlwpYpLp_K+oC#`K%)jKdNY!p1joI%*E`(o}iI12kNn8Dy=LL6zqTvFRG z4iJ0%3o$*N1D;e~U!4)N!bRb#=tU7537bpU{2pbm@M!1%VTCuvYqG9`oNoDm!e0@f zfH;Yu0)p}g8d4!I2ig$OB1hDU5C#fgd2&ci&-SitfNT)T8xEamJ3Vjln%1&`A`+;K zrc@TnRF>R_LmhM~5;P%bU5K);+ z+bY2KTaLRBT>(T7qwojGL|6PL&WvVXQdD(8GlZ~%foNlG4alK1bZ9+v3XPde+0z9{ zZ3mKJ{~eO?ie^Pi7bGL}9ASq`9)mzd>*@eccn5PPDJE0mM-jH_!OWSdkh%aIP1s7R z@ieKCH!@mEO^|SQDv^A$TkNHnr+Ap6G84AuKB(H$v}=mRR#eg_gdGF1IyE8&xmj-r z4gO{Rbj)G7Vg&_UOW1J_1k6P!)^-B^jj#{F6lB9>fm|WSrrkiVS8Sl5>tUC;hhl(Y zi=`N#cn%D*fv^p<8bH`at3_12pm>p5#BzcLN)bb;kIgZUscfrj9n#j&Qq^4BWX%y2 z+ZC@;RLz8KeGsah-B7hqA<)J;3$S4=oyS(gwnwp-0-iwFNe=>is2kvkp!(EI$~0EA zbR1cM9#b5rK&KFP+Jk_e=>~KvAfzBYT^dO*D zy8)dEKua1Ynwv*JCxyBB9-!A1Us9m62s@`Ipf|dUaP~bS{88}}6=6Su`ctRo2>V7I zh0T&$D5keHo2}&m#Vy5e6xlq&&VLZHJC+%=Bcl~usv3P78=xOg1c(iN$BelLxDqKb z1^y^u7d`;ElJ**bGPVO>0IQw?hs+i{G7t|3_ky-n>M7{Ogk91DXr)7UCO!6VCMkO< z-6)ev2u9`M$$k3 zhMKE{x+r0vB<%X0pcYw}t)x{^kmFMpWJ57ZF^UaGaCjpffX>A zU`dUD#!Pc_6&wu$d)%?OlmnH6DAtXH-P{9KNK)jwzj6e{3N;AXl5L`F_cS#^pKFy| z>5&6UgEg80X9Ar{KK}}JIs(u3`?>^K$|_|wCE^*vLaF(l%?IwMb|S`Erk-G-;#o?C zo$PD6Ms767>U22Wu5@!e$|mJ_igYVsUwjbKN!^e_9lAY~%&BY{OG8OWWN9*Hojg6? z6|0rg)0HzQzLyF6%7gID?S^j~our;Nj2QZxVUxGYOgAtfefSqvI-<(}E7C`m3nq03H#QA5Io%t!4B%WE1PO* zNHztGn{Ac#OE=}*tlUC@?;`9wJ-Tp6%Hb`=SGjIbvk zjPZ&R_7$xdPZ0JvSTd7btSOx~Oa^TEW(9p+Df`ybg#EB5ojB6IoNrom;*e!Ie*l)Z z2pUTu%msyz!CJo7nmeu4&&ppY(Ps&J{=r25q5QK8(dP*J5rjk*j`XKSy>$9e8HN0% zgK!n2Vk!8GguVO#!d2>SgkPdHV;b@HZ-W?mm}Ozg$5yz4N=M;B(E90p$X40OTM^e( zPBPiBv){fK0ry<#2y|tj6*SQ84&F`WPQhOzY|q7RbE<)vN<%$H6?q}9WR|Ys# zUKZV92dRQ7?CXSug7-b9Sru-Pr7Ft8k}oZ?{K~46s#sMV)yYu=jg}$?Yue*nFq`$@ zo@i7ys2Mr~8fvW1g!G}YQ>C@uu1Z#=Py%ic_PYlWkll@dZ($!oL)D#@8D$xd)cf5J zBOO=X*j*FyRQVL^_k{iNL0J2A!}KmB*Dgc3qRIG8ODv682}p{_-HK z_b|Jioz#;3Cw7ihjiM-S5%#wSp}2>g?K9~KMNj-2r>di9ZWH#82cfx#e-A*@m0{Kr z1TzAyQ$el@k1Vwi_AhD9@GAN+fN3o4zo_oam6?$+ZYGS2rsM8NbHJ-Mw|Af3J9rcf zo(qE$>EOF`uxObQthAo9*qv$X!%^BJzx3S62 zNAAZ`tz_?R)4zZpQ>|7#j^0x}f%bE+qw}h#(6{J1mhd*bShZQTMfHs8S=Do@=T%$r z2GxuB3fBvN$C*^y@t<5EzNC7CTd3N>4diBW1+Zahd8WZpIBb z0Bcp(ai!`j)z{p6+O0j<)%OYys8&TPG884MUlkRKTGj8W+e!zeErj%;$|Ti4 ziW`dSid#yg#)>V9^^nl+Q5;iTP-_*F)I4PW%hk5ZBg*%b=atu$KdT+pPO5OViz*1# zeV*D~?E!0Iq-vbn8*H@k{+g|6)3%t$tvsbp)Q zh4eTBPqHBeJeD>Yty8#4?-8URs9qujjh7@SSWEK=Qo{!J0@&+5Asrydi6EXJTY_u| z(i3D)kh64zAU}vIeuQmAXub-DUB6$YO9TbceF6mKW+!no$`ADx5f;lZO+OMUaUgC>5IInjsYApj_6U zAUJ>$)G&gI2!e9kV{$gPOiqi|5Y!hELOBVB)bvq;%Ai;wmo=K@!T_Z4GYEp)!Fmst zOEk3vRX`{p2PzObfQLUz&>cq0zEt;fv0qq4s@YN zT}PX+)b*Ba!}j)z9QmQ89C#q%Ff{xXwv?HhDw`|eL0D+{ENscCZLvH?3EdeQN}>j+ z^ysPQt-YB;Jw-hg{FvO#L6D9hLGq}RTX^7EP}sd_hTjIJ3jRx*Zo;hG`cJe`h@Avj zZ<8lvWpYPH3A0i4yn33`ftppvmdZVC zZcr-EgMGk%F~Ks?w?Wfz8M>{y3N~6R+itMbV6zjYZPF4jAJlBDk_`$q9$-kebWyYJ zq@eajJ7y!;{i*6xAQMZooxQYEZYc7CxUnxZ)Im;4cWrwl=qyvS0XKlj0`5D({QuQ( z)QuDW;-&?C7cHmgd(fo+;ceX~+sSvxCadN=a1cA*60KVr|*Y-Tk-)I-LEp!kp zRK0=!#Fw~0RE>qa9(vM+#l0cweMEXRo0}xpt)BP-%xt6wT-zI%-H=8#{WW z0-D>OfsjY7ItanfRpmfvCb=QIW7v;}z0{5Lfp+>_C_EJkytW!xsCOL%<4R4dY+fy0 zH()?z8)`Kg_oe+O?zX01C+*bT(|yl)=sW0I6Z*Fulb5h&0Qf5!jM1=6*#v>v^o|e# z_Fy4mfJzkv4KLr1^q;zu-o6>zLHk9yp;vwgw!_1Lpx>A8*$9DOKTShdx}TB@i79d+ z2sY#zT4?XEyg}VF?Je-!ttEK01~LDItRWPAUo*24uk@kZp_Ty!29UJ5YHW|Pox{{@ z#3%4>XiocpGJ|$1cbgb2>Gp}KZfX{5z^7PEsT?I`6J!JwdGeJ0g`&Nc7;alh^Hvy| zBSl!`^ElvDeXoWPF&Dz1o-yC-zzk7wfMyfLEbq$F4Iqfm@(9YOiwE}c{)N|q;yG$f z^!LWos(;kDGh%*Fga;uVgmK-2w)O(}#E9XlO8 zBD?{rY{^)xk@0`RwMFrQ=C^LR8sy!*0f39vIOuj(kGTEp*$ka}2-MeY^A-Ui<3`9tC*`8*p^=4|ecFpiQvbi48h%Sl3eWtHG@^7t` zYoVQ5dyfXf9UbN%TotQ@p27BNCe=VlTOhlEU2CWcx7SV#)>>4LvoXRuQ|`@BACUb> z;g;arVx!tad8nMx#Rq;yTSf``(vnU<3Rw+%tooi-S}4s?b-MA##jr-QMjH3mz5 zdtYDDi3YugPHLek-HL|h`mhXP+kK$rF}WV`ECTa_&U3HRdJEJ9pp%Uj2)f|w9*VX1 zvvm!{pr@@f6dM66$%3urev8TKoS>AkSG&0j#WXLbn+0va7`i*qBf-x@T&;v6!Conx zE?YW|Vxq_0(qHX1xt;`tWCu${2^a()IHnb)e|=QX(KB!jDoXc$N_6{S^BRWd@K zo{^!i9T*9}mGD~uzedP_>5Gnlqwts%JgBIE0s^!&${+cg8dBbWeV~{`Psx{QE$N<5 zMhggTw1)H{y%HVd zECnQ3jc}aRrGNxAq@I4-3rJ8yviv|mV<{lbmdi-+wM;G`K@G|J(;W`2QCSK|hvYI+ z$A2vaBrwK3|8xw4$`b-oTj;(U>QX;)gc_0-9%HG|SCNJ@XpT*DS=kRm+dHloteEt#s zQGNlxkYB_v<{#si@Jsn+{BnK;zmi|YujU`;*YHp9Yx#Bjll)Ws)BJjV1HX~q#Bb)e z@Xzqi^3Ult5{Ac{<{1^On{!9KV{%igl{s#Xo{~dpm|DOMW|B?TR|C#@V|CPVR z|Hl8$-{$|||K$JT|K{)T|L}JOMqmXbV1W}9f>KZkYC$7t1sj1E1VJa*3VJ~l>;!wk zL2wkD1ZTlTa20w9Zi2huA$SU2fWd<0*?Pw*E4gg_xk2o^$wP$5hR7b1j6AxelA zVuV;BPKXy0ghU}pNET9rR3S}B7czuQAxp>>jDktX5psn*AzvsE3WXw}SSS&C3w?yX zLO-EY=r5EB<-!1ApfE@nEDRAUgrUMPVYo0t7%7YrDuvNPl~661g)u^nFjlA)9ume0 zbwa(+AT$b1!g!&XplJk6CkS?RW)dV31R?S)f@TvmhoHFx%_9h2PdcBVM+k!LAlRaS zz-19ZiwS~E9jeGsh+am}a)MS6w2~m$i&{<4;{?H0(h~%&C1@Q%PZ9*xqo)a4PtXQ} zVE=0qL7NHMLeMh=JxkDY1U*mCR)St2=tY8FBIsp;wh{CSLE8y>m7v!Mf*SQ31ieYn z4uaky2+Gc|Blb2yy9s)SpgjcbB?yA${RAC==T!+hNYHx(L3r>!L68C*A?PSU#|S!3 z5L9ta5_F27(*%7$5R{nC5OkKHj|e(P(0PI`5Ok3s*w=%o>0^REA?ON0pAvMHplbwu zM$qR3eL>K5g1#i^D}ufz=o^A=5CoOU?+Cg{(DwxWK+ul_{Y22u1pPwLuLRv9=r@9X zC+Idoe-QL1L4OhSH$is@`iG#q1TzG)1S5hm!SIe)1;I*!RRpUE))1^E*oI)9V1ZyA z!L|hJ2^I;qBiNo`2Z9|5b|ToBU>Aa23GPL(8^P`bdl2kNuouAwg1rg$A=sB-KZ5-U z4j?#?;2?s72@WARl;ALe!wHTcIFjHff};tJAvl)cID+E|P9Qju;3R^R2~Ht6mEbgj z(+SQXIFsNkg0l%W5^N$khu~a-^9ar-xPah7f{O?)Cb)#)-URm{xG%x|2rebKKfz@L zmlHgI;DH1WB6u*tLkO-QcqqZc2p&%G2!clvJc{5-f=3fvMQ}C2W`f5MTto0!f@=wW zh~RMq*AZM#a09`O1UC^pp5SJJTL^9?xQ*Zm1WzP*62X%RoqP zm=HXR;MoMvkw%CpRYYkbN*7Uvh%!Z#C8BH*8AW6gQI3dmMU*F^d=V9hs8B>jA}SV9 ziHLfOsE>&Him0E6N=4LPL}el>7tsI_4HVHJ5e*j65D`^~XsC#WiDGY z=nWCQDWV-BdP_t*MYKyqZ;NQRh~5#=9ue&o(LNFF7tsL`y(^-FB6?3mheY(ghz^VB zh=`7g=$MF(i|B-iPKxN1h)#>>0}*{FqB9~oE257?bWTL)MRY+#7e#bQM3+VMv4}nq z(G?MWDx#|*x+bE}MD)3cz7WxM5q&A5uSE2Q$*j3=m!z~D59T4 z^s|V55z((Ax+S9DMD)9eZj0y-5&bEmzeM!6i0+8!9}(RZF(YDD#7M;O0trsU3K1(s ztP-(W#2OK6MQkHtUc`ckbt1MEv0lU?ylO(k_9Au=v7?BcMC>eL7ZJOPxR;3CMC>kN z4-tEc*h|C)5qpc+N5sA&_7kzchyz3%DB>Uy2a7mF#GxV%6LGkRBSai2;wTYEi#SHa zu_BHWalD8VM4Tw%BoQZzI7P&%B2E)=x`;DGoGIcg5oe3oC}NYGIO%4{d#RRVXp31- z6DofuKsQG>7hVrpXtcbDI;XO=a-(hzeft!=gc;s%YOc<1|KDSLpqsCIWO$*m{f*S{ z8mCH$h4;ITV-zpF)cxH?Xqsm@lL)OqSc zb&0yKx>Q}R9;B{-_vw#OH>+FWo%(asi{MTA8`Q6;-%#&SzYp)v{|Mfne^KM2@z>;P z`f7%29@4DQyrOwWb4qg&-hKazR;3Nl25CdIVcH07lr~x$qm6^N-Y03(;m!BiT9dW} z-g#dSZ@gcw-J*R(yIXrydq(?__Pq9@_OkX9?N#kJ+P}5`*f2K8hO<%HsBN@1yp7IA zZxe5mW|L!Mwi$0T)n>ZQOdH8&mdzZSc{cNH7T7Gb*=+Nk&HFY-Y>wI-w>fEZ+U5h^ zkB{MV_+oxI#A(wZ?s^KMru`7re9Qj>@kRhd44DuM3Z_Zxth9XI zw%Ar-E7;oEy4gn9#@c4t8f|lI^K1v(nr&-rYi-Bb&aho(yVmv@+ZSxN+wQX6Z~Lz8 zd$#Y}9^xpbFeX4$}{vmyxzCqulZ`QZ! zC+H{Xr|4(s7w8x1AJZ?@uhc)Ue^tL9UY~ece^Gx`e_antQnVF4#ZWOx%oGd6fnt?d zCr%Kji;svei?4{Uim!=ph&#lc;@jeG@vQiV_?LJ`{0Clzg6udurJc$y%dXgNpxrpT z$#$#kUbNd`cfjtH-Fdr@?XK8ewfoHOTf1NFZrS~A&)Bo}*q*m{wD++OwNJ9owJ)(B zU_ZjX*1p+(wf!3Vwf5`mpR!+XztMiP{TBP(_Sft`x4&-xrTy3TH|)Q&|K9!whaiUp zha`t=hdhS@ha!g(hdvJd9Qr$yI}CIf>`>t_+M&^5yhDpao5Ku;haHwXtaMoIu-@TK zhqoOLI-GF0N!*Pe>PRF+$4>+E3{Mhje$DbX4b^Oiou9M1%ck*`fb@F!#bP9G#b1HNyaq8nV z$f?$;*=eTJJg3K;);c}ow8!aFr)y51J6(7B%IO=YZ=LndcFqpYj?T``uFh`G9?qW5 ziO%KD1DyvuS2z!I9^pL7d6DxL=bg@{oG&E_K!R3&bh1HweEtu z-re5a$=%i6-QCOG$KBsO$UW3O!adqO&OOmR#Xa3U%iZLj=U(Vu;@;Q2zxx39!R|xd zN4QtISG(7^KjdET-sIlmKEZvm`!x5N?z7zIy3coC;J(;>srw4|)$UKYuXBIN{Z03S z?#JCvx}SFc(EY6YC+?rRUvvM}{f>vy!^6YRBi19wBhRD2qsXJgquQg*W1`1okEtHh zJ?43=_E_Vw*5gT!r#+tc*yXX?V~@u^j{_b@JkEJs@VMmhvBw>cyPm8k_EdPPJT;!Z zJl#FLJbgU}lm%Epzm%+=&%g-yoE72?2E6ppzE8DBLSH0I1uW4R0yd`Xy}{AoY;ZNW89WTW27g1W zA*MU>>f`3) z;gjN%=9A%*@(hHhL7Yk%V&6~4oKr~A(ICBCzL z=lVYE`-txf-&MX(`)=^vx9<_(W4|s_yzdI z`o;St`X&2S_zm+L;Wx@}v|qK~7{5lp`F<)9ulCpa^Zw!fk^a&CvHtP?iT=s{1^$EltNq9LkM)1Ze}VrZ|Hu57 z`Y-oi>A%{4v;VXHTm4`3-|qjK|4#oy{)hdK`XBed>HmZOPyWC7-}3+6|BnDJKp7wg zcm@~(d;3GK>wp`9Hi1H*ZJ-!vALtn99OxMs5EvU6AD9@J99R)J zEO12NsKC*I)q!II>jE1B+X80=&Iz0sI6v_Dz!w5v3fvaBJ@B=_Hv&HhJQH|5@aMo^ z1Ahq#KPWILEGQxpkqNNgFXm46LdT1ub?|YcY{%|B3Kn{7wi!19qbnz7#tj26x=(w zZ*XaFdGMg%A;I;*jlquvuM2)Ucw_M9;3L7ugHHyZ4n7lnF8D(5m%(2L-wM7R{8#Xu z5YG@ph);-LNMJ}vNLWa8NNh-QNM1-`NJ&Vakj9YlAuSN=%COcp+iH5hmHyz9avLkXL@*@f(21K+)%!_y=VqwH%5lbUpjd&wsN5syE-4S~u_D6geaW>+7 z#HEN&BEF9JDdN|N-y*q4x5%)_$jF$;_{hY_VUZ&vDt#7mqxCL zTpjsDoGfGcE-FNvnOU> z%<-6uF<-`f6Z2in_pvsyLaaX4F4iH|Io37SH#Qeo=Vt|uqk0n!gC2*6Luu* zN_Zz>Z^8!&R}*d~{Fv}d!mUKRM2AGDM3=-~i5`hwiCKx}#OB1d#7T)$5?3d#NnDrs zRO0%?O^I6)cO_m*{3`KA;?2Y#lK3QDl9*(l)L}l4c~4 zq}fSxljbKqn)GDS-lXG6r;5|$E~5|a{_lADsBQk2p=rC-X>l;J5gDXl3JQ>LU$OL;P7eagm^%_+~O zY)yGFWoOFnl)WkYQ;w&cOu3lyWy&`x-=%z?YMW}8>X7P`>YD1F>Y3`F8kicFnw^@H znx9&jIwo~&>bTVU)W+22)YjB#sf$zBraqOrA$3#g!PNItkE9+;J(>DJ>Y3C}Q?I4o zO#L(UP8ySj(!A2V)BMr`(t^@L)56n|(sI-KrwvFOoK}%GHEl-P?6kRQ52rnnwlHmR z+M2Y@Y1`9YPur2UGwo8^CuyIiT}%5s?aQ>U(|%27(uH(=x_!E1dQ5s;dSZHVdTM$` zdRBVx^nU4O=>yV7q?7c;=}XgBq_0YUE&Yx3x6*f|?@r&FzCZnR`tKQBhAKmw!Dj?# zgl0r!L}kQe#AhUCwLA>*Zt(;1&+T+R4A<9a5_ zfr!u!?ZqIxz^Uch+G7n{* z&%Bs9)y!YAxGZIsI?E|5Elv;WHe$H*Evqtd7`+870+ ztx+^O7@dqR#$HAbqrvEF3@`>8!;F!}7-PIK$(UkHH)a~MjXB1AW0A49v9GbzSY{k( z9AX@19BCYFG#ken#~B-p^rI89y|BWV~R!Y`kK;X8gkV zmGOr0rtwGPFUH@De;EHZ-ZdeU!lX9Ym~XazD*e=V|l!JR#3EPt3E+bI5bb%goEpGv(#v<>eLR73LM^_0Frvo1Hf=Z+_mR zc?`F8OZxp81CSu>92goc#R!!u;a=>ik9dkL54TUzWcje^vhK{5AP&^AF}9%0HZc zB>!0ciTsoKr}IC||11BW0;T{Ja0SW&O#xq^E3hx{DF`hnDdUdR{f3iX9{g${+zg}n+r3cU*b3S$e?3iAt#3VRp!D=aGFFILty69HX??rzU{Z(|Qm?_4^%3^hKuj1h1nBwH(wBpQSV{uM#eQ{&)_~Mr0 zw&ID!Q;Me-&n%u-yt4SI;!VX{ik~fhzW8ME2gPTKKPo<7e5v@8;;Y4<6@OEFyF^i< zF0m;QN}NjEN<2%vOMFWTN{UN*m-HS4 zC~H(ODj9)B6{D&VY*aTwjP?dMq@j&)Bf{unbT@h$kw%O$$(U`-GZq?4jOE5k&8vvw(;2bX#6tMn(56z!1S>3E@);8;!_02|RQ!~_TX*#AfJDZW_ z05i&rHiw%r=4f++xyjsO#+lp9cyouj(@Zpz&HLs<^Rby?J~f}2FU(iwH>;Rc(kf*I zSY@pWR%I*53btxmp_XNZTMTC7423bR_Vb(}%l(pW9wKiK@tvGAD6>lY2 zyR19bJ?nw>$V#!ESud?O);l|$oyRU}2ieu^5WBWr&u(Zpv76g1?KZYy_pp20eeHhs z0DGW4*p9Zx+OhT)JI>y2$J+_^PCL=wW8b##+V|~;_G3H6erCV0KRJb*qE2zAq~q_D zb^@HTPIAXCPFE+&iE+j`6P+o}G$+y7>+E+9I)|O3&I#wVljK}> z9yl+YkIrZ3oAcB8?WS_eyA|EaZlD|F2D{bV8g5ND)a~l_aC^CZ+(>tT8|6m3!`xBs zOm~sH)Lr4Oa<{sB-D9X2DuMh_04j$nph_qZ1)*vv1l2-yP(9QDH9}2LGZcziqBh7t z7IG0rVF*xr#E?J=`A`QGfjXmZs3+=!`k{enFp5UQ(MU83jX~qk1T+avLDSJpG#kxD z3(#V;46Q_K(0UY$wxBo^k9MNnXdgO&4x?k}1UiMzptI;ax`?izYv=~LiEg80bPqj5 zDd-t`iQb_1=o9*iexTntHBO7u<4ia!&Vh5|e7GPkf{SB+9DvK=iZ~Eg#no|5TnE?3 zjc`*Oid$h1wy=vaCb&K3SmAISfxF=DxEJn=`{O})2p)z<;?Z~39~Nix=R< zco|-SSK&2y9o~Rr@n*agZ^Q980q?@Q@m{cNfwfg zlZK=*X+~O**2Ew-X-nD>AYLMfBH^SX=|sAc9;7#kB>l-i5=ElPa1uktknv;^nM!7m z*<>DBNS2W0WEELUHjr4dnQSH7NIXd(iDVDiM-Grf$a;r~$R0E;N9~ z&BHCA+$EFM;p>6v^i}_+fb7_6wxqBDWj75Xh+(acB4IMAKH%&q=V^DI)aX(W9bAs znNFiK=^Q$rE}~263c8xEqZ{dF8b{-40zKfp>b>E;>*2G&)7@$hP`K>*jM(0{pP88TArR~ z;#qkPo}1_61$hx(ocr?tUXEAffxIfO&TH~IygqNloAOZJihH=lU5+{7?K$U)hw}*D zg?H!w#jLzPAH;|7VSFSX&ByVHdJ1 zMKMuQlon-01yNZ9iE1K5)E4zbL(xPu7cE5_VG2he5hkc$LJFVgC_0O7qNnI1`iX&J zuox;vh*4s!m>?#LX=0|BBj$@mVyRdmR*Q9Fqu4CsM7-E3c8h)Dpg1Cqi&G*=oEMkG zRdGYy63ODecqE>P=i-%kE8dGw;;Z-}e#_J{txPX7$*eMm%q{cDg0hG#F8yVIEGH|< zKv`8*mo;S_Szk7iO=YNTB|XxTuEdha_L55_!)1i*BD>38vajqf2gxCFm>elb%W-m| zoFb>oS#qviAQ#JJa;01&*UMPBMQ)QjwN*XU zP&HA_RZG=InaWW}g(<3-lFFw#s?MsL>iJ*M-cJowgVj(qLXA>m)dV$JO;a<~95r7p zQcKkewOXxH8`WkNr{dL4wOj2|2h|aET%A%$>b$z7uBsdAmP%Il)g$#pJy);PTlGPG zR^QZ5^+)^ZbUK61th4EyI*-n;3+bY|gf6Aa=<>RfuA+l=4P8su)eUrG-AuR8t+kJ566 z-m16j1f8h&>I3?)KBiCVGy0sqsITbj`li04@9Bp+ML*Lo^&9~0ssI2 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/green.png b/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/green.png new file mode 100644 index 0000000000000000000000000000000000000000..fac1b69b5641c6e30ec9402954c755ecad457303 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*BO! z#WBP}FgfK1e~So%8rPSmt$k7l4j4$WEly-O#lt+Gk0CsdNp97e7mh&H44$rjF6*2U FngGW!8ax01 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/icon.icns b/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..cb95460b409b20f6f985501610e5822c3b3ba713 GIT binary patch literal 38947 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�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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/logo.png b/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7b04c41ac16b55f68baf912b725c2ec158811ee9 GIT binary patch literal 30801 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/red.png b/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/red.png new file mode 100644 index 0000000000000000000000000000000000000000..731f36b8530f8db9f3cc27842d814003ff13174f GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*B;^ z#WBP}F!|5<0}L)tnAJXQbt>tTI&i>1ifwTs!zo_o`Fso!xlD3LxDH4Gl{0v{`njxg HN@xNA9B~^$ literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/sansation.ttf b/SFML-2.1-osx-clang-universal/examples/cocoa/cocoa.app/Contents/Resources/sansation.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d85fbc81d91e22c647a3338a37f24a9d684dcf8a GIT binary patch literal 28912 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 Y(-osHj2F<;P%p3rF{>lYhrW~jFV!_TuK)l5 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/ftp/Ftp.cpp b/SFML-2.1-osx-clang-universal/examples/ftp/Ftp.cpp new file mode 100644 index 0000000..7b97860 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/ftp/Ftp.cpp @@ -0,0 +1,206 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +//////////////////////////////////////////////////////////// +/// Print a FTP response into a standard output stream +/// +//////////////////////////////////////////////////////////// +std::ostream& operator <<(std::ostream& stream, const sf::Ftp::Response& response) +{ + return stream << response.getStatus() << response.getMessage(); +} + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \return Application exit code +/// +//////////////////////////////////////////////////////////// +int main() +{ + // Choose the server address + sf::IpAddress address; + do + { + std::cout << "Enter the FTP server address : "; + std::cin >> address; + } + while (address == sf::IpAddress::None); + + // Connect to the server + sf::Ftp server; + sf::Ftp::Response connectResponse = server.connect(address); + std::cout << connectResponse << std::endl; + if (!connectResponse.isOk()) + return EXIT_FAILURE; + + // Ask for user name and password + std::string user, password; + std::cout << "User name : "; + std::cin >> user; + std::cout << "Password : "; + std::cin >> password; + + // Login to the server + sf::Ftp::Response loginResponse = server.login(user, password); + std::cout << loginResponse << std::endl; + if (!loginResponse.isOk()) + return EXIT_FAILURE; + + // Main menu + int choice = 0; + do + { + // Main FTP menu + std::cout << std::endl; + std::cout << "Choose an action:" << std::endl; + std::cout << "1. Print working directory" << std::endl; + std::cout << "2. Print contents of working directory" << std::endl; + std::cout << "3. Change directory" << std::endl; + std::cout << "4. Create directory" << std::endl; + std::cout << "5. Delete directory" << std::endl; + std::cout << "6. Rename file" << std::endl; + std::cout << "7. Remove file" << std::endl; + std::cout << "8. Download file" << std::endl; + std::cout << "9. Upload file" << std::endl; + std::cout << "0. Disconnect" << std::endl; + std::cout << std::endl; + + std::cout << "Your choice: "; + std::cin >> choice; + std::cout << std::endl; + + switch (choice) + { + default : + { + // Wrong choice + std::cout << "Invalid choice!" << std::endl; + std::cin.clear(); + std::cin.ignore(10000, '\n'); + break; + } + + case 1 : + { + // Print the current server directory + sf::Ftp::DirectoryResponse response = server.getWorkingDirectory(); + std::cout << response << std::endl; + std::cout << "Current directory is " << response.getDirectory() << std::endl; + break; + } + + case 2 : + { + // Print the contents of the current server directory + sf::Ftp::ListingResponse response = server.getDirectoryListing(); + std::cout << response << std::endl; + const std::vector& names = response.getListing(); + for (std::vector::const_iterator it = names.begin(); it != names.end(); ++it) + std::cout << *it << std::endl; + break; + } + + case 3 : + { + // Change the current directory + std::string directory; + std::cout << "Choose a directory: "; + std::cin >> directory; + std::cout << server.changeDirectory(directory) << std::endl; + break; + } + + case 4 : + { + // Create a new directory + std::string directory; + std::cout << "Name of the directory to create: "; + std::cin >> directory; + std::cout << server.createDirectory(directory) << std::endl; + break; + } + + case 5 : + { + // Remove an existing directory + std::string directory; + std::cout << "Name of the directory to remove: "; + std::cin >> directory; + std::cout << server.deleteDirectory(directory) << std::endl; + break; + } + + case 6 : + { + // Rename a file + std::string source, destination; + std::cout << "Name of the file to rename: "; + std::cin >> source; + std::cout << "New name: "; + std::cin >> destination; + std::cout << server.renameFile(source, destination) << std::endl; + break; + } + + case 7 : + { + // Remove an existing directory + std::string filename; + std::cout << "Name of the file to remove: "; + std::cin >> filename; + std::cout << server.deleteFile(filename) << std::endl; + break; + } + + case 8 : + { + // Download a file from server + std::string filename, directory; + std::cout << "Filename of the file to download (relative to current directory): "; + std::cin >> filename; + std::cout << "Directory to download the file to: "; + std::cin >> directory; + std::cout << server.download(filename, directory) << std::endl; + break; + } + + case 9 : + { + // Upload a file to server + std::string filename, directory; + std::cout << "Path of the file to upload (absolute or relative to working directory): "; + std::cin >> filename; + std::cout << "Directory to upload the file to (relative to current directory): "; + std::cin >> directory; + std::cout << server.upload(filename, directory) << std::endl; + break; + } + + case 0 : + { + // Disconnect + break; + } + } + + } while (choice != 0); + + // Disconnect from the server + std::cout << "Disconnecting from server..." << std::endl; + std::cout << server.disconnect() << std::endl; + + // Wait until the user presses 'enter' key + std::cout << "Press enter to exit..." << std::endl; + std::cin.ignore(10000, '\n'); + std::cin.ignore(10000, '\n'); + + return EXIT_SUCCESS; +} diff --git a/SFML-2.1-osx-clang-universal/examples/ftp/ftp b/SFML-2.1-osx-clang-universal/examples/ftp/ftp new file mode 100755 index 0000000000000000000000000000000000000000..b490f0a20dc96678af3c4ce30e11215e52c7daa6 GIT binary patch literal 73900 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 Jz;g??{|{e`T4MkJ literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/opengl/OpenGL.cpp b/SFML-2.1-osx-clang-universal/examples/opengl/OpenGL.cpp new file mode 100644 index 0000000..639254b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/opengl/OpenGL.cpp @@ -0,0 +1,194 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \return Application exit code +/// +//////////////////////////////////////////////////////////// +int main() +{ + // Request a 32-bits depth buffer when creating the window + sf::ContextSettings contextSettings; + contextSettings.depthBits = 32; + + // Create the main window + sf::RenderWindow window(sf::VideoMode(800, 600), "SFML graphics with OpenGL", sf::Style::Default, contextSettings); + window.setVerticalSyncEnabled(true); + + // Make it the active window for OpenGL calls + window.setActive(); + + // Create a sprite for the background + sf::Texture backgroundTexture; + if (!backgroundTexture.loadFromFile("resources/background.jpg")) + return EXIT_FAILURE; + sf::Sprite background(backgroundTexture); + + // Create some text to draw on top of our OpenGL object + sf::Font font; + if (!font.loadFromFile("resources/sansation.ttf")) + return EXIT_FAILURE; + sf::Text text("SFML / OpenGL demo", font); + text.setColor(sf::Color(255, 255, 255, 170)); + text.setPosition(250.f, 450.f); + + // Load an OpenGL texture. + // We could directly use a sf::Texture as an OpenGL texture (with its Bind() member function), + // but here we want more control on it (generate mipmaps, ...) so we create a new one from an image + GLuint texture = 0; + { + sf::Image image; + if (!image.loadFromFile("resources/texture.jpg")) + return EXIT_FAILURE; + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, image.getSize().x, image.getSize().y, GL_RGBA, GL_UNSIGNED_BYTE, image.getPixelsPtr()); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + } + + // Enable Z-buffer read and write + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_TRUE); + glClearDepth(1.f); + + // Disable lighting + glDisable(GL_LIGHTING); + + // Configure the viewport (the same size as the window) + glViewport(0, 0, window.getSize().x, window.getSize().y); + + // Setup a perspective projection + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + GLfloat ratio = static_cast(window.getSize().x) / window.getSize().y; + glFrustum(-ratio, ratio, -1.f, 1.f, 1.f, 500.f); + + // Bind the texture + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, texture); + + // Define a 3D cube (6 faces made of 2 triangles composed by 3 vertices) + GLfloat cube[] = + { + // positions // texture coordinates + -20, -20, -20, 0, 0, + -20, 20, -20, 1, 0, + -20, -20, 20, 0, 1, + -20, -20, 20, 0, 1, + -20, 20, -20, 1, 0, + -20, 20, 20, 1, 1, + + 20, -20, -20, 0, 0, + 20, 20, -20, 1, 0, + 20, -20, 20, 0, 1, + 20, -20, 20, 0, 1, + 20, 20, -20, 1, 0, + 20, 20, 20, 1, 1, + + -20, -20, -20, 0, 0, + 20, -20, -20, 1, 0, + -20, -20, 20, 0, 1, + -20, -20, 20, 0, 1, + 20, -20, -20, 1, 0, + 20, -20, 20, 1, 1, + + -20, 20, -20, 0, 0, + 20, 20, -20, 1, 0, + -20, 20, 20, 0, 1, + -20, 20, 20, 0, 1, + 20, 20, -20, 1, 0, + 20, 20, 20, 1, 1, + + -20, -20, -20, 0, 0, + 20, -20, -20, 1, 0, + -20, 20, -20, 0, 1, + -20, 20, -20, 0, 1, + 20, -20, -20, 1, 0, + 20, 20, -20, 1, 1, + + -20, -20, 20, 0, 0, + 20, -20, 20, 1, 0, + -20, 20, 20, 0, 1, + -20, 20, 20, 0, 1, + 20, -20, 20, 1, 0, + 20, 20, 20, 1, 1 + }; + + // Enable position and texture coordinates vertex components + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), cube); + glTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), cube + 3); + + // Disable normal and color vertex components + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + // Create a clock for measuring the time elapsed + sf::Clock clock; + + // Start game loop + while (window.isOpen()) + { + // Process events + sf::Event event; + while (window.pollEvent(event)) + { + // Close window : exit + if (event.type == sf::Event::Closed) + window.close(); + + // Escape key : exit + if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)) + window.close(); + + // Adjust the viewport when the window is resized + if (event.type == sf::Event::Resized) + glViewport(0, 0, event.size.width, event.size.height); + } + + // Draw the background + window.pushGLStates(); + window.draw(background); + window.popGLStates(); + + // Clear the depth buffer + glClear(GL_DEPTH_BUFFER_BIT); + + // We get the position of the mouse cursor, so that we can move the box accordingly + float x = sf::Mouse::getPosition(window).x * 200.f / window.getSize().x - 100.f; + float y = -sf::Mouse::getPosition(window).y * 200.f / window.getSize().y + 100.f; + + // Apply some transformations + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(x, y, -100.f); + glRotatef(clock.getElapsedTime().asSeconds() * 50.f, 1.f, 0.f, 0.f); + glRotatef(clock.getElapsedTime().asSeconds() * 30.f, 0.f, 1.f, 0.f); + glRotatef(clock.getElapsedTime().asSeconds() * 90.f, 0.f, 0.f, 1.f); + + // Draw the cube + glDrawArrays(GL_TRIANGLES, 0, 36); + + // Draw some text on top of our OpenGL object + window.pushGLStates(); + window.draw(text); + window.popGLStates(); + + // Finally, display the rendered frame on screen + window.display(); + } + + // Don't forget to destroy our texture + glDeleteTextures(1, &texture); + + return EXIT_SUCCESS; +} diff --git a/SFML-2.1-osx-clang-universal/examples/opengl/opengl b/SFML-2.1-osx-clang-universal/examples/opengl/opengl new file mode 100755 index 0000000000000000000000000000000000000000..5b6144ffba4f90c97e37acf3b7d49f9aef57b10e GIT binary patch literal 77268 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/opengl/resources/background.jpg b/SFML-2.1-osx-clang-universal/examples/opengl/resources/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20724fa92f2ce1acfb82787a0ec9debdca103f68 GIT binary patch literal 142959 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 NV8xiE)h|##|Jjbt96JC2 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/opengl/resources/sansation.ttf b/SFML-2.1-osx-clang-universal/examples/opengl/resources/sansation.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d85fbc81d91e22c647a3338a37f24a9d684dcf8a GIT binary patch literal 28912 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 Y(-osHj2F<;P%p3rF{>lYhrW~jFV!_TuK)l5 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/opengl/resources/texture.jpg b/SFML-2.1-osx-clang-universal/examples/opengl/resources/texture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6cf7528eb43f27054b98fd5a4a93bb8c47829b1c GIT binary patch literal 20550 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/pong/Pong.cpp b/SFML-2.1-osx-clang-universal/examples/pong/Pong.cpp new file mode 100644 index 0000000..1b9a74f --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/pong/Pong.cpp @@ -0,0 +1,241 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \return Application exit code +/// +//////////////////////////////////////////////////////////// +int main() +{ + std::srand(static_cast(std::time(NULL))); + + // Define some constants + const float pi = 3.14159f; + const int gameWidth = 800; + const int gameHeight = 600; + sf::Vector2f paddleSize(25, 100); + float ballRadius = 10.f; + + // Create the window of the application + sf::RenderWindow window(sf::VideoMode(gameWidth, gameHeight, 32), "SFML Pong"); + window.setVerticalSyncEnabled(true); + + // Load the sounds used in the game + sf::SoundBuffer ballSoundBuffer; + if (!ballSoundBuffer.loadFromFile("resources/ball.wav")) + return EXIT_FAILURE; + sf::Sound ballSound(ballSoundBuffer); + + // Create the left paddle + sf::RectangleShape leftPaddle; + leftPaddle.setSize(paddleSize - sf::Vector2f(3, 3)); + leftPaddle.setOutlineThickness(3); + leftPaddle.setOutlineColor(sf::Color::Black); + leftPaddle.setFillColor(sf::Color(100, 100, 200)); + leftPaddle.setOrigin(paddleSize / 2.f); + + // Create the right paddle + sf::RectangleShape rightPaddle; + rightPaddle.setSize(paddleSize - sf::Vector2f(3, 3)); + rightPaddle.setOutlineThickness(3); + rightPaddle.setOutlineColor(sf::Color::Black); + rightPaddle.setFillColor(sf::Color(200, 100, 100)); + rightPaddle.setOrigin(paddleSize / 2.f); + + // Create the ball + sf::CircleShape ball; + ball.setRadius(ballRadius - 3); + ball.setOutlineThickness(3); + ball.setOutlineColor(sf::Color::Black); + ball.setFillColor(sf::Color::White); + ball.setOrigin(ballRadius / 2, ballRadius / 2); + + // Load the text font + sf::Font font; + if (!font.loadFromFile("resources/sansation.ttf")) + return EXIT_FAILURE; + + // Initialize the pause message + sf::Text pauseMessage; + pauseMessage.setFont(font); + pauseMessage.setCharacterSize(40); + pauseMessage.setPosition(170.f, 150.f); + pauseMessage.setColor(sf::Color::White); + pauseMessage.setString("Welcome to SFML pong!\nPress space to start the game"); + + // Define the paddles properties + sf::Clock AITimer; + const sf::Time AITime = sf::seconds(0.1f); + const float paddleSpeed = 400.f; + float rightPaddleSpeed = 0.f; + const float ballSpeed = 400.f; + float ballAngle = 0.f; // to be changed later + + sf::Clock clock; + bool isPlaying = false; + while (window.isOpen()) + { + // Handle events + sf::Event event; + while (window.pollEvent(event)) + { + // Window closed or escape key pressed: exit + if ((event.type == sf::Event::Closed) || + ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape))) + { + window.close(); + break; + } + + // Space key pressed: play + if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Space)) + { + if (!isPlaying) + { + // (re)start the game + isPlaying = true; + clock.restart(); + + // Reset the position of the paddles and ball + leftPaddle.setPosition(10 + paddleSize.x / 2, gameHeight / 2); + rightPaddle.setPosition(gameWidth - 10 - paddleSize.x / 2, gameHeight / 2); + ball.setPosition(gameWidth / 2, gameHeight / 2); + + // Reset the ball angle + do + { + // Make sure the ball initial angle is not too much vertical + ballAngle = (std::rand() % 360) * 2 * pi / 360; + } + while (std::abs(std::cos(ballAngle)) < 0.7f); + } + } + } + + if (isPlaying) + { + float deltaTime = clock.restart().asSeconds(); + + // Move the player's paddle + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up) && + (leftPaddle.getPosition().y - paddleSize.y / 2 > 5.f)) + { + leftPaddle.move(0.f, -paddleSpeed * deltaTime); + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down) && + (leftPaddle.getPosition().y + paddleSize.y / 2 < gameHeight - 5.f)) + { + leftPaddle.move(0.f, paddleSpeed * deltaTime); + } + + // Move the computer's paddle + if (((rightPaddleSpeed < 0.f) && (rightPaddle.getPosition().y - paddleSize.y / 2 > 5.f)) || + ((rightPaddleSpeed > 0.f) && (rightPaddle.getPosition().y + paddleSize.y / 2 < gameHeight - 5.f))) + { + rightPaddle.move(0.f, rightPaddleSpeed * deltaTime); + } + + // Update the computer's paddle direction according to the ball position + if (AITimer.getElapsedTime() > AITime) + { + AITimer.restart(); + if (ball.getPosition().y + ballRadius > rightPaddle.getPosition().y + paddleSize.y / 2) + rightPaddleSpeed = paddleSpeed; + else if (ball.getPosition().y - ballRadius < rightPaddle.getPosition().y - paddleSize.y / 2) + rightPaddleSpeed = -paddleSpeed; + else + rightPaddleSpeed = 0.f; + } + + // Move the ball + float factor = ballSpeed * deltaTime; + ball.move(std::cos(ballAngle) * factor, std::sin(ballAngle) * factor); + + // Check collisions between the ball and the screen + if (ball.getPosition().x - ballRadius < 0.f) + { + isPlaying = false; + pauseMessage.setString("You lost !\nPress space to restart or\nescape to exit"); + } + if (ball.getPosition().x + ballRadius > gameWidth) + { + isPlaying = false; + pauseMessage.setString("You won !\nPress space to restart or\nescape to exit"); + } + if (ball.getPosition().y - ballRadius < 0.f) + { + ballSound.play(); + ballAngle = -ballAngle; + ball.setPosition(ball.getPosition().x, ballRadius + 0.1f); + } + if (ball.getPosition().y + ballRadius > gameHeight) + { + ballSound.play(); + ballAngle = -ballAngle; + ball.setPosition(ball.getPosition().x, gameHeight - ballRadius - 0.1f); + } + + // Check the collisions between the ball and the paddles + // Left Paddle + if (ball.getPosition().x - ballRadius < leftPaddle.getPosition().x + paddleSize.x / 2 && + ball.getPosition().x - ballRadius > leftPaddle.getPosition().x && + ball.getPosition().y + ballRadius >= leftPaddle.getPosition().y - paddleSize.y / 2 && + ball.getPosition().y - ballRadius <= leftPaddle.getPosition().y + paddleSize.y / 2) + { + if (ball.getPosition().y > leftPaddle.getPosition().y) + ballAngle = pi - ballAngle + (std::rand() % 20) * pi / 180; + else + ballAngle = pi - ballAngle - (std::rand() % 20) * pi / 180; + + ballSound.play(); + ball.setPosition(leftPaddle.getPosition().x + ballRadius + paddleSize.x / 2 + 0.1f, ball.getPosition().y); + } + + // Right Paddle + if (ball.getPosition().x + ballRadius > rightPaddle.getPosition().x - paddleSize.x / 2 && + ball.getPosition().x + ballRadius < rightPaddle.getPosition().x && + ball.getPosition().y + ballRadius >= rightPaddle.getPosition().y - paddleSize.y / 2 && + ball.getPosition().y - ballRadius <= rightPaddle.getPosition().y + paddleSize.y / 2) + { + if (ball.getPosition().y > rightPaddle.getPosition().y) + ballAngle = pi - ballAngle + (std::rand() % 20) * pi / 180; + else + ballAngle = pi - ballAngle - (std::rand() % 20) * pi / 180; + + ballSound.play(); + ball.setPosition(rightPaddle.getPosition().x - ballRadius - paddleSize.x / 2 - 0.1f, ball.getPosition().y); + } + } + + // Clear the window + window.clear(sf::Color(50, 200, 50)); + + if (isPlaying) + { + // Draw the paddles and the ball + window.draw(leftPaddle); + window.draw(rightPaddle); + window.draw(ball); + } + else + { + // Draw the pause message + window.draw(pauseMessage); + } + + // Display things on screen + window.display(); + } + + return EXIT_SUCCESS; +} diff --git a/SFML-2.1-osx-clang-universal/examples/pong/pong b/SFML-2.1-osx-clang-universal/examples/pong/pong new file mode 100755 index 0000000000000000000000000000000000000000..e1f2eda2e3f40eaee1ec3d916769ffdf97afbfd8 GIT binary patch literal 85528 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/pong/resources/ball.wav b/SFML-2.1-osx-clang-universal/examples/pong/resources/ball.wav new file mode 100644 index 0000000000000000000000000000000000000000..8b3cfbadc0de7ce350152aa1ba96b80d5846ff9d GIT binary patch literal 15442 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 V>eI!M>_3~2|J6RzE7tn!e*uus=a>Kh literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/pong/resources/sansation.ttf b/SFML-2.1-osx-clang-universal/examples/pong/resources/sansation.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d85fbc81d91e22c647a3338a37f24a9d684dcf8a GIT binary patch literal 28912 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 Y(-osHj2F<;P%p3rF{>lYhrW~jFV!_TuK)l5 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/shader/Effect.hpp b/SFML-2.1-osx-clang-universal/examples/shader/Effect.hpp new file mode 100644 index 0000000..ce29c47 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/shader/Effect.hpp @@ -0,0 +1,88 @@ +#ifndef EFFECT_HPP +#define EFFECT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +//////////////////////////////////////////////////////////// +// Base class for effects +//////////////////////////////////////////////////////////// +class Effect : public sf::Drawable +{ +public : + + virtual ~Effect() + { + } + + static void setFont(const sf::Font& font) + { + s_font = &font; + } + + const std::string& getName() const + { + return m_name; + } + + void load() + { + m_isLoaded = sf::Shader::isAvailable() && onLoad(); + } + + void update(float time, float x, float y) + { + if (m_isLoaded) + onUpdate(time, x, y); + } + + void draw(sf::RenderTarget& target, sf::RenderStates states) const + { + if (m_isLoaded) + { + onDraw(target, states); + } + else + { + sf::Text error("Shader not\nsupported", getFont()); + error.setPosition(320.f, 200.f); + error.setCharacterSize(36); + target.draw(error, states); + } + } + +protected : + + Effect(const std::string& name) : + m_name(name), + m_isLoaded(false) + { + } + + static const sf::Font& getFont() + { + assert(s_font != NULL); + return *s_font; + } + +private : + + // Virtual functions to be implemented in derived effects + virtual bool onLoad() = 0; + virtual void onUpdate(float time, float x, float y) = 0; + virtual void onDraw(sf::RenderTarget& target, sf::RenderStates states) const = 0; + +private : + + std::string m_name; + bool m_isLoaded; + + static const sf::Font* s_font; +}; + +#endif // EFFECT_HPP diff --git a/SFML-2.1-osx-clang-universal/examples/shader/Shader.cpp b/SFML-2.1-osx-clang-universal/examples/shader/Shader.cpp new file mode 100644 index 0000000..2b0d8a5 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/shader/Shader.cpp @@ -0,0 +1,380 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include "Effect.hpp" +#include +#include +#include + + +const sf::Font* Effect::s_font = NULL; + +//////////////////////////////////////////////////////////// +// "Pixelate" fragment shader +//////////////////////////////////////////////////////////// +class Pixelate : public Effect +{ +public : + + Pixelate() : + Effect("pixelate") + { + } + + bool onLoad() + { + // Load the texture and initialize the sprite + if (!m_texture.loadFromFile("resources/background.jpg")) + return false; + m_sprite.setTexture(m_texture); + + // Load the shader + if (!m_shader.loadFromFile("resources/pixelate.frag", sf::Shader::Fragment)) + return false; + m_shader.setParameter("texture", sf::Shader::CurrentTexture); + + return true; + } + + void onUpdate(float, float x, float y) + { + m_shader.setParameter("pixel_threshold", (x + y) / 30); + } + + void onDraw(sf::RenderTarget& target, sf::RenderStates states) const + { + states.shader = &m_shader; + target.draw(m_sprite, states); + } + +private: + + sf::Texture m_texture; + sf::Sprite m_sprite; + sf::Shader m_shader; +}; + + +//////////////////////////////////////////////////////////// +// "Wave" vertex shader + "blur" fragment shader +//////////////////////////////////////////////////////////// +class WaveBlur : public Effect +{ +public : + + WaveBlur() : + Effect("wave + blur") + { + } + + bool onLoad() + { + // Create the text + m_text.setString("Praesent suscipit augue in velit pulvinar hendrerit varius purus aliquam.\n" + "Mauris mi odio, bibendum quis fringilla a, laoreet vel orci. Proin vitae vulputate tortor.\n" + "Praesent cursus ultrices justo, ut feugiat ante vehicula quis.\n" + "Donec fringilla scelerisque mauris et viverra.\n" + "Maecenas adipiscing ornare scelerisque. Nullam at libero elit.\n" + "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.\n" + "Nullam leo urna, tincidunt id semper eget, ultricies sed mi.\n" + "Morbi mauris massa, commodo id dignissim vel, lobortis et elit.\n" + "Fusce vel libero sed neque scelerisque venenatis.\n" + "Integer mattis tincidunt quam vitae iaculis.\n" + "Vivamus fringilla sem non velit venenatis fermentum.\n" + "Vivamus varius tincidunt nisi id vehicula.\n" + "Integer ullamcorper, enim vitae euismod rutrum, massa nisl semper ipsum,\n" + "vestibulum sodales sem ante in massa.\n" + "Vestibulum in augue non felis convallis viverra.\n" + "Mauris ultricies dolor sed massa convallis sed aliquet augue fringilla.\n" + "Duis erat eros, porta in accumsan in, blandit quis sem.\n" + "In hac habitasse platea dictumst. Etiam fringilla est id odio dapibus sit amet semper dui laoreet.\n"); + m_text.setFont(getFont()); + m_text.setCharacterSize(22); + m_text.setPosition(30, 20); + + // Load the shader + if (!m_shader.loadFromFile("resources/wave.vert", "resources/blur.frag")) + return false; + + return true; + } + + void onUpdate(float time, float x, float y) + { + m_shader.setParameter("wave_phase", time); + m_shader.setParameter("wave_amplitude", x * 40, y * 40); + m_shader.setParameter("blur_radius", (x + y) * 0.008f); + } + + void onDraw(sf::RenderTarget& target, sf::RenderStates states) const + { + states.shader = &m_shader; + target.draw(m_text, states); + } + +private: + + sf::Text m_text; + sf::Shader m_shader; +}; + + +//////////////////////////////////////////////////////////// +// "Storm" vertex shader + "blink" fragment shader +//////////////////////////////////////////////////////////// +class StormBlink : public Effect +{ +public : + + StormBlink() : + Effect("storm + blink") + { + } + + bool onLoad() + { + // Create the points + m_points.setPrimitiveType(sf::Points); + for (int i = 0; i < 40000; ++i) + { + float x = static_cast(std::rand() % 800); + float y = static_cast(std::rand() % 600); + sf::Uint8 r = std::rand() % 255; + sf::Uint8 g = std::rand() % 255; + sf::Uint8 b = std::rand() % 255; + m_points.append(sf::Vertex(sf::Vector2f(x, y), sf::Color(r, g, b))); + } + + // Load the shader + if (!m_shader.loadFromFile("resources/storm.vert", "resources/blink.frag")) + return false; + + return true; + } + + void onUpdate(float time, float x, float y) + { + float radius = 200 + std::cos(time) * 150; + m_shader.setParameter("storm_position", x * 800, y * 600); + m_shader.setParameter("storm_inner_radius", radius / 3); + m_shader.setParameter("storm_total_radius", radius); + m_shader.setParameter("blink_alpha", 0.5f + std::cos(time * 3) * 0.25f); + } + + void onDraw(sf::RenderTarget& target, sf::RenderStates states) const + { + states.shader = &m_shader; + target.draw(m_points, states); + } + +private: + + sf::VertexArray m_points; + sf::Shader m_shader; +}; + + +//////////////////////////////////////////////////////////// +// "Edge" post-effect fragment shader +//////////////////////////////////////////////////////////// +class Edge : public Effect +{ +public : + + Edge() : + Effect("edge post-effect") + { + } + + bool onLoad() + { + // Create the off-screen surface + if (!m_surface.create(800, 600)) + return false; + m_surface.setSmooth(true); + + // Load the textures + if (!m_backgroundTexture.loadFromFile("resources/sfml.png")) + return false; + m_backgroundTexture.setSmooth(true); + if (!m_entityTexture.loadFromFile("resources/devices.png")) + return false; + m_entityTexture.setSmooth(true); + + // Initialize the background sprite + m_backgroundSprite.setTexture(m_backgroundTexture); + m_backgroundSprite.setPosition(135, 100); + + // Load the moving entities + for (int i = 0; i < 6; ++i) + { + sf::Sprite entity(m_entityTexture, sf::IntRect(96 * i, 0, 96, 96)); + m_entities.push_back(entity); + } + + // Load the shader + if (!m_shader.loadFromFile("resources/edge.frag", sf::Shader::Fragment)) + return false; + m_shader.setParameter("texture", sf::Shader::CurrentTexture); + + return true; + } + + void onUpdate(float time, float x, float y) + { + m_shader.setParameter("edge_threshold", 1 - (x + y) / 2); + + // Update the position of the moving entities + for (std::size_t i = 0; i < m_entities.size(); ++i) + { + sf::Vector2f position; + position.x = std::cos(0.25f * (time * i + (m_entities.size() - i))) * 300 + 350; + position.y = std::sin(0.25f * (time * (m_entities.size() - i) + i)) * 200 + 250; + m_entities[i].setPosition(position); + } + + // Render the updated scene to the off-screen surface + m_surface.clear(sf::Color::White); + m_surface.draw(m_backgroundSprite); + for (std::size_t i = 0; i < m_entities.size(); ++i) + m_surface.draw(m_entities[i]); + m_surface.display(); + } + + void onDraw(sf::RenderTarget& target, sf::RenderStates states) const + { + states.shader = &m_shader; + target.draw(sf::Sprite(m_surface.getTexture()), states); + } + +private: + + sf::RenderTexture m_surface; + sf::Texture m_backgroundTexture; + sf::Texture m_entityTexture; + sf::Sprite m_backgroundSprite; + std::vector m_entities; + sf::Shader m_shader; +}; + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \return Application exit code +/// +//////////////////////////////////////////////////////////// +int main() +{ + // Create the main window + sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Shader"); + window.setVerticalSyncEnabled(true); + + // Load the application font and pass it to the Effect class + sf::Font font; + if (!font.loadFromFile("resources/sansation.ttf")) + return EXIT_FAILURE; + Effect::setFont(font); + + // Create the effects + std::vector effects; + effects.push_back(new Pixelate); + effects.push_back(new WaveBlur); + effects.push_back(new StormBlink); + effects.push_back(new Edge); + std::size_t current = 0; + + // Initialize them + for (std::size_t i = 0; i < effects.size(); ++i) + effects[i]->load(); + + // Create the messages background + sf::Texture textBackgroundTexture; + if (!textBackgroundTexture.loadFromFile("resources/text-background.png")) + return EXIT_FAILURE; + sf::Sprite textBackground(textBackgroundTexture); + textBackground.setPosition(0, 520); + textBackground.setColor(sf::Color(255, 255, 255, 200)); + + // Create the description text + sf::Text description("Current effect: " + effects[current]->getName(), font, 20); + description.setPosition(10, 530); + description.setColor(sf::Color(80, 80, 80)); + + // Create the instructions text + sf::Text instructions("Press left and right arrows to change the current shader", font, 20); + instructions.setPosition(280, 555); + instructions.setColor(sf::Color(80, 80, 80)); + + // Start the game loop + sf::Clock clock; + while (window.isOpen()) + { + // Process events + sf::Event event; + while (window.pollEvent(event)) + { + // Close window: exit + if (event.type == sf::Event::Closed) + window.close(); + + if (event.type == sf::Event::KeyPressed) + { + switch (event.key.code) + { + // Escape key: exit + case sf::Keyboard::Escape: + window.close(); + break; + + // Left arrow key: previous shader + case sf::Keyboard::Left: + if (current == 0) + current = effects.size() - 1; + else + current--; + description.setString("Current effect: " + effects[current]->getName()); + break; + + // Right arrow key: next shader + case sf::Keyboard::Right: + if (current == effects.size() - 1) + current = 0; + else + current++; + description.setString("Current effect: " + effects[current]->getName()); + break; + + default: + break; + } + } + } + + // Update the current example + float x = static_cast(sf::Mouse::getPosition(window).x) / window.getSize().x; + float y = static_cast(sf::Mouse::getPosition(window).y) / window.getSize().y; + effects[current]->update(clock.getElapsedTime().asSeconds(), x, y); + + // Clear the window + window.clear(sf::Color(255, 128, 0)); + + // Draw the current example + window.draw(*effects[current]); + + // Draw the text + window.draw(textBackground); + window.draw(instructions); + window.draw(description); + + // Finally, display the rendered frame on screen + window.display(); + } + + // delete the effects + for (std::size_t i = 0; i < effects.size(); ++i) + delete effects[i]; + + return EXIT_SUCCESS; +} diff --git a/SFML-2.1-osx-clang-universal/examples/shader/resources/background.jpg b/SFML-2.1-osx-clang-universal/examples/shader/resources/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f37d7aed05aa81cf2a825cb3ee2e39de607d3556 GIT binary patch literal 53507 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�rJ`ApGhF>M+DHR#wESGV?h8pjHF-?#G!n+*}IV|JcbEMmIH@qp7n_!-~?NxqUzzKJ5PErXg-CxYWw>vkD7~Q zg5&10dz;iBW8XO9uaOB9cB~{`W7IIbFm1|HWg(t2Z;&z#>SqGD%E84^H{oXy^Z2=18 z0$rLjK{>sI=3blOm)I@R%;R`<+FKSIc|L#a-9Eq&c4FD@BHZ))mgVB=pb%N7W1GAe zKzIsxtG9wWd-NtJ0D-9*g@L0#}j`}&YC?j7nujj#mQO$E4{ zgjGW;n{<+(Yuk6U<(YYVYqX8$gw^z&YraVeinTQ24BIk%r7sI*6nVLIYm)IE6r%l=~i zxWai5tC1~(B`9kWxb*nLrSNtTGeo85AK*{z@b@vEP=_dYq)+=)Dqm4eEy3SK8jDHj zL%FBG&mc2wRcEniz<+s1H~P6emdv7`&?Y`F4^NW)Wu|{I$(M_-4vtMfy+V4w+#?0d z#vd8RvGjW#(&uTG@Cugm9|}esA;7O#-Rp!Q=5cqfz+0m|;fU1OJ(r4%(|63)Da=?R z)!5yI#ay)*mL*e-)>1Q~ooZid{is%5F{OYR&UAUmJ*AL~?432(=w<+Ohq)uN)hkj%}XmYE^H8@c#%=lEstzsJhza=Z_lT>cXRbcFu^3X)b}zi{9U&PCEdU)fWxnTuB1fC0%OMPjx+KBQ8H) zMh$&uf|zR<8mJ1GY+x*p{0b~6K)P9mJyTayk1=u#e^bWbII&0~EHgufNkp=Nzk~VWXn7NLRKGWvs^@|=C#cemd*fJMRp;Z=Ex{)u%2-w6Ul)MSf^>c`{ znwv{i=V$8pnUxh`1pcjA4Vxbn*cg0e`5{Ms&MXySB5uqkL6=4gb;mUX)4^12OXIO0 zsy8Mf)sd8hl*SulK*B>`ZHm%(2%x;9`WyX5x{@5DL zAs%mFi0jIN9a%NE`YwR5O9$7}n*h z_M(1)*b-k0G7g18C|@G-^j#iBFYoM?!kSR9(HarZJS%=&FSX&9#q;d9WT9Y3hrxD* zcrOYSQu@myySX`&V<(o&w&8C;o^&2&`w#vwCy=A~YC&`xPi6!bE17t1a%y@rPm8)1 z%;+-urQ4Cqcn1d*w2O4bE%8~mDHBsrp3Fqcht{ynjVzPdm&IfoR}g2s&Wx^?&K8Az z&+J}Pq-)Llp+kd<%zNZo50+mYim1FNS zE&ru?K!IE+J&saTIUu9!+T^lZ)*X|cZY)Zq9TSC`2?Eda?cVEFvBWihb73cbUpK1> zv&K-|Tp$KDzZG4h$G=f#uBM-xU9__oCpW7V3r7vmkYci5-gwOF3gZ6S?r|s%0QWKC z+aAHC2P}(k*SG(0uU?p2=zKi9HQLmMy^c%8ZBVIe&!!vtj&!r=8z+dzss&cCDa^lQ zKK!VLEB65rHOr=1KbFt+MM8n-VklF=xh z)wwIT(Ixyo(?H!$b#R52AzRg17;O00_10u3#&@;bwRP#t-LHYII~uKBLr1e(Sxg+( z_^r03UNm*%R_$nc&&7Q!zhYr8$ph!rSo(r?J%8!Z0jphyJBwZL3e!ECZacl-PevYf z2u6CGGwC?kjCak^h^`xB1_9Rps%p00-X96otnYc0Ifb)nq4A`Qg}?ULk&*C4@T$Xx zpXGA<(|MOS^)#2{Gk|~}N(ZdPlI7m|d%yPvqnH2SBw;)Hv41(jhk`P{ zbh97u2m=pK1;sdgmlBxjt=WtvX@fW|`C0Z$=(%P>C#^D8a1zNac6GV;a#AUVG^8p` zEC~%y=VRyRkzA4#ZEJKk`={I!-i;$A6=Tijfo$s`kvBiE|5ALaOMLIGrh2MO|FBP2 z5`r$(Gnk}5Z-** zy&6h}DdXMA@t5RV5kluVF{Mb1_3q8iG`fJf`bATLQP%l-lii#cpTbU8bYN&PhL~gf z>OdHxMZ5zMan^$W>9Tf=ysso}zesaq97#Y$fy>e3e~lhDA-_+qpQgMIYCNt?EdlzU z6{agz%f}kNv^J8@({2*5zH|*tr^@qjbI>;a&;vHQ9=d+kh&5=0ADSSLAgH+f+NP&> zGu-hx%UENy+!`;E($M5^!eG04yW=d99Kw?UrHw3QS^qP*-8q==HxvhzjAZ8h2N*2# z@mSK>@iatd^2UwFa~IKuN5R;pwX>Kv%+a#eH$82T@>dNMmZ!bg@O_QX ziA?*Z`#M*U$H+9nxLy%wj#ddUZC)xC*PGO@TtX;AvED zp{_COWpo}Ntan7KR`Juj@kw@XglY~vut~=EDa#+C+vok<&mMz#$F{_5K_6Rt*v*DP+e=R zuvg;K8;2P^XEJD$EIRl?xC`9l?bWlO=OyQU*wshtT=;$#+Fp8FHU&AXcMb>7)^iC6z z9BdnVr&@wb-rxU2+(D#8Tf5;|-y2zilZP6t7b{Yh?R=8=n{So-XsxqDX7w{00L5A% z6kXfvv%G6|{?&6Y4WGEAWqO1jN8fJrafBntdJWUH{3N=|dw!stx78Cw!C5BR>uG-H z7u~9zUKhC}9St_l(cdlZl$GrmjnL*33avHlWMYv7;H;jzu9iV@!Fk7FpV#7 zfpgSjhiv)gj)H2(@<9`&ap(f{P7U}E#N1l;2xz2aWd35@532hMgFXas&kMFPD4SI) ze^jF5?7cpMiW*qk95FUF3|ZLGq|D*7HdEQ zutYJdmNbPs8HCown`>6faJmgxLI%Pia6`y2i*UjkK(owbK_uA?AwdCOavJ9hQql`=+J|329pmwt6W!F0+?qqB12B z^4iNeRH3T~S|cHC5E$;GG2Eg^y5Y^pS|cE67_)q3MCM~;S#6YVYJ6lZpeM4*2gihS z*?biX*tJ4Hv;z3@pnP3Z2QfnU_gkSM5<d`6EOoUX}r<+ zK+PG-(4-;6RWwLRV%;^CBrK64u?`}sBF4xmqTd-#B#XihXsvX_#WW|DGK7_htg&uv zgpwpenia_(V26>IDU`7xq>U}0MUpgy9rNWGBxqN*$Nf?z5Kb<+C2hkBHykXj25HW+ z;Jss

w>XNf8}6>N6tc&hn#kx9Wf*Us}a<+JX>;)+>W8y_K#C88WYw?uuntcT|MW zW4haF%X;B4Iw`Wv9aaWWQB_>vs>F5vQE=Auy3rW|TPf=A)g2X0?UhxhtJ^7@6^l${ zQDcguWMp%y^i_UQkyT#TDe0Bj<+AE;W*p!LgcRD~V6kvMo(9 z`K)yH+1B6avAbMzoe!mAvjZKV=K1 z+;eh|bgb2e18=$(T}0*T270ZV{8EU%I+Dv9B z&sPM@dVHCkV~vF7qOMG;#?pGHdOr?o8oYs&)X$KdTnsOB;O~HRk@87c49?u#VS8r` z@HUyE#?cKs8bIjP-_!mc%aiqHdr_Kt#UI*y^TFT4uCc7SkE{Ox0yC3*FM8mw;nPFW z+Z*a*6*3L(Fufm7r))q5v@|D_t=iXKgBQi=blO(l>sNxJj-r)N$Pqa>31D4g{alG#P- zd0g2@)Q~}v#cP|{59;M-she(+7*9ISQ_3II!q=&CtD*$+=PLvL!^#-Sut|Rk`z$Ba zTMq>GLi(Oo#Ds-ZK%o0A^W6$0zx~%ulE-xj6VGM7WIsRAb0Dj@r<^JPMg z_gdx7R<5=Vd#PkKWrScY-DVLd7c{O5fA>Tdpl7qnjqF7hsGQ9Etx=E-0lAh@J)IG* zVukGNw#H(b0FjnL%Nk=NP|`51QJ9v6b2GvUSniw27U)SLTB9)%h^6qMrHAU9Nf&*P z(nD+G3CW0(6Uz^T6tLdu%&^+%NnpBqW_ckru$cC?QQ@sEJEoMC`(^r%zjQGMT|ueydz%WhQu3m7?3(arm~k^?vCq>hqGIbzQE!vcz<^4`i)n zjfxIkL;{mZS}kk+P_kC$_f3u)C5|Mmzh9yjO6*?$07R-v#}I6wbmZRUXjp*VV;OY< zc2GX0&+B9#JFj570OIMp5&^P8`z+?>T4a317X=%nHfwo_=&$UHr{saG$|e|#lbtt( zYHM5vApv>^4tz0t%O3dtt_z{3`29wu)FLifV-F{u>DmoldxK+$*!3#;!@mmUt8-mH zG4M8CqoZ(TB?BAG(B}@pTPUfcfB?n@f#G`HC*kaH=QFdPJzt2Go*DRMN2i993qc*i z^o<`#r=w$e7%+vU3B@Nx>2c}s>D6P6864#<*z$$A7*FViG47DjbhqxT6hiyT_>u2uA5eyb0k%gSe}c^>g7jg3b0A#=zyATtE!2t zfR<~LyzWU^)rvZNx9gR`c_lz!Z}(c~3pXu|Co(J&cG(PHp9@~7vXnr+e>Pe&0o4iW z*=yBMu)kM0vd>o={Sbb!>D6bgYpFyG66d=-~UV!?3(JN&YT=AL?^9 zGhZwL!u--lVRd@aJ~8lyv>W(cc9q2J9R5@LtnZDAvdiREqE)B==ok3LxdsAyEkydo2R68+liBLw+o>=J~hLV!(|^sx~v6 zE=VA){{W)T{JLyrRU8p=v_-v_dz@WzLVRWmL{4rO4giHKhF2tSWu`d+Xo1X8J*bxj z8;8|wjKwqsBL}j9@%y8m%k)sm8rc~NXkR3L5buk^WcF@{e0bSwgoH^7~1Q+P%tqQ5OSOCaT^#>&MdHuyo!P2p2O6{?DR-7cu7wd@t1YF`O$MK1VR zywD9HM!` z5E%rAe+XxrA|xnj3M37XNb7XU9r9b1>Za%0F1J;T(R& zHd`qx{HGMP+}%|c3hP@br6#3gy4ML5c)RL}>tzI$mLvj!eNQ;H$^zm}_gL05cIxOd zTCQVYR6+RNMBA0vZO(2&I!LQ*+h2a_K*D!e$i9fmY8fYR)3(+(Whq1yM>3|ERr}*62`D&1G1N^vkdhTmp~e44bkcC9I*#Dbt&X54Hg34 z$~eYRF}EwxLZYd3V|?~a6E?y+7VU&IOu{x6**!?A52qV>PALZ0N@<0NP3bR$E!h$s z(3=pf6g@g56kCp|{SLuolNg88U|~9>7qLm`g{_40kX(YYOkx^Rv|%)-X5G^IQL=4J z1&39FK?XwGBVq_>MTW?@g_7B5Dlu?~j9CvFC50)LPQzt0c2F>>nrxQKJ9f%9Y`f-B zyx^s_5+Qj*$W+of3oMpd=Ep=HcV#T9ehM;qH%jWI-E%WY*NqD6pMtBk@@}11NrJ1@ z&%N@zp0ZbGYXYH7OvIEMpOrO1xw*m-?#kdva&-~Wcss63?lM$vf155HCNik9QzGQZ zKB^NXlx~*Z>gvc&=?LrhT$zxrmiISY8HKk+MFpAG8NdXR02w6oRW3E-jX#2PN{vFc zc;gYYxvY7yaqJhye-poo&LQH~K8}V~X%u-DiS~QPlDBDeS+#Dlp*eG7!me(Qt9~JW z5S%f<43;<4it6U$@bu@HgXgmO^NBx+zBuEF-AkZT8VDbO=(g^+y7ImbpwcxuIQ2bm zP;1=z53L_P-rE31dfxv4vb@Xjil2uxsbJx~I+}(!o5>wR+FdiTZg1%V=gRaL{yR^D zobR7TtWlP9o+#b_0AwrF_(zKCkK=fPzM-(3xz!FJ6VwZ;&bO=ZzJW~B_`y>t{H3Ph z#Cb`6C2D+6HiF$xP^*0O)lTJ&?vt1}jro1Edu`Qu3-s#d(!oQKWHxPgOlDSm9QBRS(7LYH8iiNDM^Z^0c3&#uFOPih35N1aZ)q z-WY7+&@Sus1AeQ>DRiou{{U0)u**{DqkPh`CKnjvXuF>43;;4t!>VnhaO7H*9Xzb9 zYieCoB7HfD{{Z2~V0}{HEo+-t8{=iWCJ06kn*Qe}Pp#BXB1${H)&BsZ?E0ouhR6d5 zw?SniYU(MA9Zfv2kTc5bkFw^UOqP}|Q)lvHoudx&q~x&3w{X0yvU6RZRK=iK7wb z@s1qBgN~;L{{T#_f8X~%Lj#vV*Isk*v*OhcAJB%}L0uRENL+FX^hUb-FFh!@w-?xL zQ6=|SKXswD%VWlG=#3=(0&sLRn(5LP{)|&mFyx6SoNs z0>EWMN^ostOxFOQr8oL0xB!MnV4-GrWju$v7FQz%!Q?l&Ldfi4Pb-j;l*oZ*dgX@- zcx!oFGM7l~sJ&tebV+BJfsm(UcQ;Z)O5%1TrgWM#vyo<@=1!t+O1l=a8=aA~+H{i< z%F}-#TJ)|Cl51Uu-CT6e6@ruk@Em+C*tAohGT{|0sdQ2Fo)Ma*&AUpyXxtYKI1ZEo zdneFA8~_F|G$PnG%I@IO;>F5V%yY>mO+!fyD?p8ad9rOzMUvPK$&EhYbt5V>zC+>& z#&ki$kP&g&Y>NOUJfk59NJdey3)yIkC@LX-sMuS!E`^9*$kU~ZEjkp71j!h1*4*&?Ak8ztt$zFk;MJ%#i12fh`F0FnF zM^|)^xDl7>=NbIBPt(zs1yO%4EG;N8=c*=?L3oc&ls3d+; z(g>0A+bRdkaf>M5Exw8e%bn8_D4EjQ=XF@)u0GSa8%CD8x?sx>k(bMlV2sx_*fdQ( zTB?VJM;N`z_^abL9@O!UuPo9?^G6vzlvl;Ot-5_X%P+BX-$g^?KgL~8jx}j2Y93iY z*AW~X+Ye>qj?_k_RL9Qa9T<=`<+d&W`0KKhTC1tltE3EwmN=HS<6xUm@TDy~++R>; z0Jqa{Wt#8mz4o&DPAK8gVNpkq{Jx`KsA?(q-+|p7QzWNjDaEPUPa}x2E$M$L-kGLN zt4!KTS2}5BdsxU$If>iAu{}}xR{>R3YAvOvb1Lbh5xz<3P1x2r2OOJZ17Z(Qz2ijF zxNn4ALC*y=Eumm9)g*X{)_ zO1ej$Xuk$E9xH-+ZFZujI>s^3Qc;ibCnQ`qlbhuchXa3@STwIk_sk!4x~{5& zQ1qJL!^x>J(+XfYzE-!GH<#wQW18mP$2MNC!`wxs%p{JQvXj$-H%j|FIM_X`apo7< z&l}?^$EWdrja3tkE~QI5S~3Knn|m&_)(?!5gO$JQM-NX4ejraPg(dd?0Kw(_Df|-f zUZoWkZ1uW@L=!ZJG&EB_QJl27n`0Mg=IOe%d^i69`E@b;Q=*!!L`}nTK4D)pPL3H` z8qyia9nGF%E(=cGE(p8u_ZqT#+PYeJ9>}5~iNPF_TwL3&?wWA_0LB*ZhaJrhvs@`S zda9ezsR9~R<7zb8^G2<5$sPv&&F99~4Jzdc{v=|7CtX=6XjK2r6~eZJ?O z{9pb7>2!^0$AtKWrh;ZU?1E?{bC>{SxuhQ{1ebjWU5CoNZSa?gI4-5o*J-YifZNqz zyHB&e=H3_REoT@|Yjsjbqta?xoi{U}q+=K)ke*@l7J+gI=O8p2n+=I7ldl>LVUoG@ zt*L@iPb{ns<{zfx+RIiyh|_Cg@+Y_Y9DM%(h;`o-)*Op_ui{kC&vNpJkJ)3TzAD#)DPt3+EWOlHei8*ZBvLN_%==7OeoMZ<;eH(KM^ z41~8H7X&Gb7Y-kFwho0pNQ+k`mMUV^oQt6e36cjf<#J+02*s9qYjhc&NDRceFr&RM zvf<1jZG$t(06r^pL(3hyCK5FZBX`2qpQAfM=~w~^W+qcNbQHsM^&t%lCS}kv##2dK zx(a6CtGet2gybbKkz%4b9aHKu zY!!Zt-pTbD$Vrf6x>JsctvSC`qL;BvY48?F5M>F!R8vmKNJ=H05*cWnu2KgZs6ksU zvQrHchxuAEA^l4q3zI5DgGijpqjahlNTYN2S!OmU?nw|+JxceXXE<20Gei(2L-(>< zQ0x?JDO#}yL3CIC+_<~BVStI}y+=;B}8f7e=lJJhvgaO<>DO7QcswZORd zSAHAPq1Gf|ZA4KAw*2mOtaFQQPC73bg^rl=jl8dK;GHPYXw(x)Byt&H61A*&C8LWR6Z)+Q6bpAsGH2D6dgYX*s+U-NY;;H#w4^d|s=^PEi5YtE*PwP0cJGY(u;kPb( zK?j!QqWhfK8xTC}i+(jpS4%A|BaJmgb2Y+v+#Lgezc37Qd5%aRn_Amt5yufbU(=?Z zth#CAj25}qC*^1j9@c0dMdAcq&bw~ncRd$J;x(^62M;La{wnzCX*F@k`BGp108d}i z-^E(oQt^(UYHGBo<`GFd1AQ=W%t2>H+V;lc-rmK)TxF)iH7lxzJpquuX&|PJ({hpd zTg{7jxc6Tv=~}+8%^eLbeM~V+%@?N>u4r>y3tR{XAcr^~1cmLKC#AZdOnfe#fWsMo z_>QrDc5idn=vNc*1R=T^7w$bz;E83PJh-R-03VO)dsBWURl}-G?KWpSPv*2xPEEsc z*xRDD(|khFxPtV$>@5+rfY|{gU%kdc@JK5g6fV1cLP!C?o4435pI_;_m^ithT(`G{ z<6)OJIdLvMK98$QONvXXe*B+SY5MMwM+wquA4@?-2gqTW?tH8#p|0XH&#WSO5b7d-T5)H2TQmZ0~6g9G<1Nzxpp1 z*WiXdLZC$Mc5{-~fr1HKKb=~fd0`zxzelnBEc6+)(#fJ#ef$39Z(GxOxJsg=Ii8Ss zVX-{T4#n-Z300qk+yhU>{7Mz4>-mKjF{eXA;53`ZvSQE2VyqS;RV>4Su1gRr-Q= zQ9$_|TP%0L`CdqUjzR9W{61BS45u!eqriS9z}~e&{j=sxLq((-^XaEPlp)R+2FBO3 zNFPi6Q95rOYWylJ`JwFCCfxru>UfYCA?xA;8t}IM}UNTU!3;QD^2uW}3w8laj0hkmN&D}7Reb6&?PE16X zAQOxrrU>bR3Tyi!u`LVd8{q>xcT8p*gbcw@rYopzlFF9&P3i(yQr*&;2kt1Ho24~P zxhd4+bJwz4P|KuA0wbwz5}Js~B|WH*bh4%-hu9B+6!F-l)3(XgOlfUHGJp#d%7c}* z35>Dsf|ZJa0G9|^auKq(?u3+JrbUYZm#Pw8$k~Pvk_6;YaAVZ$fBle5f0a8Pc3z4< zVTd)Z7E-kT0N_Hg%2vB%AuEml0Ay?rPKyEX zIH!I>WlnynJv+8dDc|8fECHNHWPBwqgr*RYg{CZn2oIblG~(y7TL$4Wr#T79lrw-P zRPD%1>Ba05N@nfd9hNbsAKf^l=#^78)=lXK%9|n{Q5y}@>LPpPSLpH8KBL%KC94c~ zN_I_P#k!?5yM)#QYb?@5jG=NVhX^=b$V+>ybC);nS0vmeNMbO(aOdZBjw&ad ztnwI+%hYavmBs89oaL5iaxu?CO6%Qr_b49qf@9(hF}hn)a#IOix?NS&E?#qXFYcjfWJb7v%Hhn0d(DnilRt5UB#y`Z z(h?fL^({s!IPUj`xahLzAmC=az!STT0W z-^|0&X88>^slE9fqtX5x`5%kh^fc>i{{6r1TV{XaqvRyn!o^gk;JPPj4yXY7PQNn_ z*G=7DjEksc)SDAaiLlLR40&mfv-2++_~wpN!p&B!;| zS(_)#Y+JuYNUGz?8ct^k1h44ErS$&*64?1#$zgnPo!$-Bx#=}}pVuVW$j9=Z5Am<) zVw_`sy8i&9(+yZ)wZ-~?aHEr0A&zJuiz=-?zXf~(SY)``-Bw9l#>DdH9&UgQ*FW;j zI+En|Fx0~&6yohNgT^#dI=W`i3$#^V7t_ZR%h4 z3hk(Bl4>z}E(6mI`9S^2@~L$^G$xmupO9^~>)B}advU1b;iKYTJMgmn%gv?zN=>%C z7L6C;jLP`<&1{{(RMi8Ud!j5 z3r%GJYh!MDki9R4H9CqY%Npz)*>JvIf0}CgT^_&i=9&CvmQDWYK7AJcC-`wU5%86C z)U$@_4t!D5G0$vl4|I)a=6N7Dy~!IYufg6U;y;2P8F*V&*D0Rp;j4Wt^)fh39FfY- zM_J&INERbFDXn)DLqi1>Jzpc+Bi!fn7am-Ew*ZWTpYMH@n}_&^OyYOxT5l2xYP}j7 zmwLsH43*JJ;5ppp@|U_ZXSU}YpkBo>mz{hJ_^{4C;K+2StBl&V zgiSj^yI(v^C7^+DZ*My*^+il@hsy3|83o)VHa7>xHtUm}@U`N}E!_C*@)@xxt`E+C zjobxS@b8RjE2t^m7MD^_rtsUaIlzZAw^L>H-|!*vCQWyQU8B@h11%%HF%!QqHo?92 zBOdAxiQF}%aorZ9OI|NTS{__5THrSe!#)ggZiDcD;yh-GYJ(AYieFLS#_Z#mjjeUn z)y6ulKPt|Cno_}<(?3i_P#>S=Jv%PUosGglq46yr6VS4%neBTX0r^erm;(5}FU-!z zqWQd_lW88!H`v3}^0n&pLVDgn`mOrOTWqkOQ_9hjMhGV1bx! zI;Ikj2pPgL3|}$^U@dgQX5gSE8>%;VhgCq(}xRsAb9Smd_sPwL^aCeB*Sg0g2~kPgE4F-8Gq) zK+PWNs1anW?t+=OOy*(^R$rnh_6tI}n`49=txYD6Jy24yIRZCimI#RCvR288CONZi ztI{Efa5Q7bdnuVNa+fk?J0$WhnwbVMzhygKmq#uUG0A%-#2OEc`9{F|SoKQde%VID zC9Is74GyWFwbMFh*rZTY0c(&EjnyHDW#Jz9$F>1vfys;x*;4-i;<|VSToh7#LV_$b z-`NA!;D>T9&q;uU&YbO)*Z!1+;rzDcLrr*mqtTPw`y0 z^pW*WX#Ov>TKD^=$K&oLeU*&o?T5B zevetC+*~JgX90PRo$)VDkT&wO?yTBx9nec_NZ-0|)r7i|EgpqRZ)_&C?zqaQ>HJeg zEv+cOy0B5}RI-dpJ(Ar%i!2bE*%HE+Q`W-pIb^(T4N15tsT_lt z*e-Te!LAHhQa4HJj_JitLFkiKV4PWT^2F#tiYnc@OIGdEYS)H?b6~5Qj-wnP^EeN3 zxfxPjnpD(#WOBPGIivs^l%l_iDWN2Kpq{~3>v-N46UuMyRxQXzO>P)@ELxo8Q$LZ{ zb+!w_c)MGD9VVj6f&=-F%nweA^Y#QDg+Ld?LRRh={p<)NbP}S(?Ftg*yk~& zxyadd^^H6&Gn4SjP}ah6T^5-&GUr?OO1P$`Nwl&dE-p3)m-j_8Pm$cY%9Z+Gs|jIs z`LMjcJ(%XD==#>Cd38Ez;(TsLmN~_@u~ADii#JR)Dj77|$HMCZ4m#lhs8Y*GJE`g; zd@{D&&3j8oxW30_?9`N!Yop&-*+?k1Cg$mzDH`@T z*x_{p8#|jAYm2RN8ZK5{?euTSn-cGnnhJK32FH8ZT6AtmoH^xX&cmwimx8N52OV8o z+oVxA5AkY24tW0nD?c;7%XRu&C4uysT>k)vhC$0EWkW%o_GbTY|vBWxTmzcBqv zvZC?n)U?r4{{XH$o*yo%S+Z`EX#-I4hO@z%#5_r%&S@%G;3^}x%3M0zvHt$+>wkqm z95i2zR869ic(k4&V7ut0a1EQw4_{^THyO!EPsNYa+fLezBT)YU8d`Q?q&R%wTkbr7 zyvvKU=WwSKO#LdRSgGQ3W~H64A=V%eK_2R3j5TRVaVEd|nN!N~SD3&0KJ)mK1xF5W zj;}1ux2GOOw-?AB>*lCxv|5e?V4-axC*~l{7vzmwZQV|74k<` z$wNS^nV;hjI$U7=LPf$~5p_KorLmSx6o>plBSClFc67h(#YRZyW~n=iv+0k6Ulg^C z7l$EjE1xr|B=lby2Q4Dw{X+HFelBqiu360k*%`qD3&VZ^!9K03>Xni*)Uq*`1Y?@` zx6{rLX?^(-%8+Gzg(^)Dzo zr2hc@(zX1~qyGTB@4A;H68SIwC#xA^8_ys9rMA?={{Z(9{nwK_Qk?$))py-%`Ha{9 z0GjW*wJ8<;rGLVE11h1%`0W1x)QXO#E|W+90I7JRwF&cSUH4p_PI3PLS@-u^Ba%_{ z3;7HF6Ws-54FdDW{{X3V{K}MXQxLcLmxG-~cYoG@-D%a65&r-&{{VHWI*B1qUG_cQ z+RYPptB8O51q=9xO>XtE5B~sV;O?l9?<4-|BP+nmoPMe6S1&@|vHCsIPAJlwy>wr7 z1NgH^zyAPTAMU(In7CxQXtBq+OLX{{Z?`Bk->W@~s#i59B3Z=duCy8!dBjMFs3V zL-YtqIF5za{{WfxRq;;eY{IwrC)^%I9=jo1n9f~xk>8X^eu!Ch8h4Bb{gD3vg)JFk z!%XX0t-rFTt;qW!9J9jxxxUC5%Un+=arz^jOCbF=T)HR!08P-nT>Ok)~>z8Sbwqm-qo{HFb#I&;w;&}QX<)xHg{3rha z>0aRNGB7g>e#!@FkoACj*&o+dSJONqXdW-}IDHTj#79rrd-U2J6oSsDY4>UdZV=Nd z1)WI2<#V{2mV3$no`4GNRo-bz3t}d=vFjM>PG(UFEBF(Ua;Hi0Uuz?u&|B z+x^v1l@o#08BbX->x9LueuCawTH|Z%r4<3Y6=kp~?T;tLv=34&% zn6;a@1sk>IGXdB3RU=U6oVb_?PZa$*zQp=%Og%6N7ZOkW`-4 zT|%6K%7^{Zp##E^usjtM=N_3Two!aU)#+?oJF(?iwC{~NwJo`x=MQz}ZDWF(Fh~V4 zYO}+YHbi@7pZq~qMQ>0QXVbrkzyo>QN4?k1O((LIm+G9pQ&$eA7Uq3fr~d#EG_J68 z*7~a*7sr|j?RndOC46qjTip{Bt_Kby>X^Q7S031EO#5z=;_jbQZ}He~*&Lj)t zx^6JlBDJdI`=&5){;wW?6ymS_b-v&=Ws2<|SshLnezEslI=&YSJTI8w_?4@T=fAo- zFNwOZSpr-6sLQyIS>SyT>Zs4_2w7?({-C@izY}#5GFrBNBiB1})t-MR2mB+Wse(O{ zrlu_X;UU!ZC?RW!c(7hwQO9+%5BZi=y<>@L>Ka3)cinUHYj=LwhV{vGi*FWj3&^$3G^wtU-#HENg4OEXBb-Z#K2?5ampNccSzXBHX4K@$`FsUUs?8xcanF<- z)iM^`l^A25>jP!nl(uWI zBo(s~*(A_$lZ&)@6E&KhB1vhhBK2Z8<#%5xJhc?^xc+7^^&;x$tiaj1nJWW_va8i; zaI*}%eTwvW=NT(%ncKtiJ9wBZ8ht2`J&a?yhUGbB6QY5>m}fJE$18!tLh2?)({fyH zqjlOW01HFL@^>S2K3^UVal@anXoebxfY4YTHu>5=)i$A^WE3?~Rz(vfm4WotE|d!q zd$QND=D6Ro^TQ*WcU-<_y4P`cx)r5OjF;jpvW;#30I`m<@Yhk)s+~0$h|CS#KM@;; z)8<9cd;{ZNF_x~q(8X0Ga>o?UmbNcYIoIU4bM9^$bFj8;gn~-RV1i#w?q@S>>l<8l zJ@Nt{NTt-KW8sdbp|tNj?_hZhb%Dtpa8KQJu}V;dIdE}Yv1(@LvD@tQ{RiM?r=-%p zM@^-)3v<3rT9urqI5(3U6!37x1q5JfJV&F`7XD_%QR}#W{;=SFg?S6A9&9d17z;vk zb~)+$#Z@q{{S!b28E|V zqP_PHsAG(?7Ta!TZS(c@4OQfU%&Ls2b;2qtk``Iwx5<}tmn?0>luY6+JjCN^qxqtF=zDt=K!S<%)g~#~ z%J6J%Hdk0`oz+QEO9r9`s^6Gw;er!zWq20H&~bZRuze<}tfU%UT(%bvq~<#wt@^Cj zI9>Yp4ozPaqDqY@wizJ(PKcW|z#YIpDYfnLrP{uLV1MHzozg|>G?BBKJTH9sNnh~x zeg~?q;tgtM>kX^qgGpr_%!3Ejbh`%pr~Ev0kpBQOoCmT9Tw2yM8M#0Cb?P6* zbvFuWbi6ko0qBrZ(mLj9*uiZ?;ml#Qt>z$n!PXWOuk%v|qp!l*>e@h!uNP>H z0by^t&8p3kJ9El(tEBvma>J&^@i<%d{e6#4_<32QaK4cSn@U|Phs`74Yo=#0-{%(u z4uldc7o};nl+|#FVtZv{wsTFwtm(3{Dfy$50Q|0QKBZ3L_?mHr!>Xaa8+7ziQ#@g z6L&{XdsuxI`6)pBi2ndzh7w|Ps77u>E%Z>oPyqa~mwgkbigufFeOCFY+S}MFd*70+ z2?n7fwx@r%YSFBy$Q18CMC8>lAC;@7)N@??pm|oeUotE}WvX$wr+3w8%~&z`VyqvH ziKC;BTLr`QXuz;wC)pJ>+=*yM>sGXUwB!}0$*7b603zi$I*ShN0{#}xqZ@^-VygcD z`4CPYT;f54m*}IH@$DFj-&Ebz&S}M*Jgyz6Nq@>d%71oCp&^pE8<>liFR87zDTw-} zl4>%>ZenY_lpoDr?3hD-sDHaIzyy`gxA->tuJ2iV$M!}IShpUKA$E0McH*Bt6{Mf> zGA06DQUUo_4-@{TBY&CtX6}T673z~6YLi*0mk4v?1^r%NYid^Q{`{@#U;t-Ymuq1Wq^_` zmfzi~KTs3-TlP%Gp-UjWntU#d)K<77=!(~dT^}Ge76Y=7MBc~&TWp(IcG~m3t{1IT zacn$9(rk%_iLWCFC~7&#!agba04a(omY<-9>CFtr=~YY|jv+MuVlBPW+R57KE*3nI zRv8pwpyf(AM#wix0k~ZH?ID>IfD? zx7h{^cZ?~Te#i*wjkiR$a7Ot+(h9>HCno5b(*$&@Hl^lG!FvMT9aSN|m(RSw$HKB-u*S z*rd3if?}sOL`P0g@jbxqjfvOlmg0zKqTy>{OB_#X-N+$L8_qD7wOMCz2iRdw$3FOK z+)nNk?UA8Ph=&4K+aRs_j<(8gSRRX>c9k|SWso`U=o0Gr2ySqiNh=x-GOPNfUJqnD z7e#mx>JJ6QD0#b$f;OgJXB%Zi$jgr3b*2$Zp+qsl;zn$weH*{7>TwH?y4j_b$Mab| zQY~1nritZ-?*Ue|eK5U*my3BS^Zb@s$@#8rd?osy4}Kzz@sL0`E>Ddz&lc7+znR$t zD!pX^1g~7L;crGFz)1tCRUJn_0i$wuS{7ioi6f?1<6zcf}oKF|o10 z$ekNqZvY2V5t+lbemZ@co7RSpS7bq%B zMk&^Q9NzsC!KT>lh0xP}=^tGS+9D7Ywo`JPT-`l7W_DX{oNh0&53Y;aCTv6^VqpO@ zZkcj=eH6{p4X_g4RKii92-s{9lOBV~3=qR@rz`KQO;nnNnI;~vgtc|P@ zxZQ*g?7g!_d~*iAGC6v3o39}|-_T5eqZ&!sfRH1eKot7e@TJhyd%`G-sRm&ZC2ANb08dbqOEDq#$< z@aEh5uS)oN@m@OiJ={kvHk}cVo;SuMalbb$k05(Tv-xpj)L#qIP5#Ly1JdQIO4r!- z=%Ho4X9A6ankV&1Gz!`cZLM_`L#kmc4->Vg({Mcj>V1`#n@wrQGro(TB_!#YTw39y zmQz66XFZhdf&zavkum8Ik~ySyJgLTy1?(kue5KU8MWA@;sq=HP@9?lYJk~^wDi-6_ z`?+>BXv;%{q>lwv$g~J(<7Po0Ma!UPF8=^Tz-dv837z#=?G`XDX1A4m_%4O5jt~!1 z?4#s_TK3O$*}5b|f6XBK;c|31gREz`^N_7>Xu3k-3{C)CTe&NVDdJ(Z$LyH@03n6= z60`PL{vBu^^9Rvd+(db9sapYMu&WQwpwFk!avmeB_TJZ4bAy&+^vQ{1_1ZnGLu7Vjf?K0 z8UtACFy&p%bQK^M!w?rF0pY45X-DdAdxXvWI_GA@pL99lqs@Rmg14tj1j@fu8 zrGZ*-rTon|9?Q9Sc3a#MJ&lm_aNO>1=5QVgjpSYmq(?1fHSKnfqUYD6b3S8p;bGxf zUDp2q{#RT(gCrlW!1M&6{{VUT3xgd!BU^CSA9Ojcq%O6A{_00?YrrM5J+|J)>LbE) z9j0@>ff9MEh?1gc)>0FUeH4*RMtc%|h-o-dT!TBW*$#MGcAQS)dl0G1GUddyqBSj} zdA-5K5;;f-e+<#mD=p^%efYQua0eK@d0s{v2?lc8Ced{nDu`btv7KCBJ)JcHM4Z z+dZ#izs%brd0@MVbiJP&Hm{rv;Sm(%b^0V?po49!yES$ey7o%Z#iG$iUK;Qm2fDM< zx(VU=j#rsQsF>e->#_0_*s5y_m6wPr132S9N>`^gQSX*@(kyIAPo9|>) zQV?)b*38?YVwU3JE$#}F8bvF?-sq-OJGxmE;2RT^OI!)P(%WdK5vwX4f~OT`$x|h; z-FDfo5*(Q}jpD2B5pdP9!)qigmpiFhKa?BGq1mZpTx`2$q!?_G{v!QW#O2$R8@&>X z8!MXeU`mm-7v09{y2`gka8#d;an02^B2i_IUT@Zljzf={;Z`BkKp8nkN2suYl9ub) z3p8`w45C>m0@ziSSF;~Fowcnd!Rc;PS!a$zgl#`Fj!)H9A=C)RIyxOhk%3qTD+o)P$nI&{x z9O~LU%#6F`&qYtwbV-PC5Q^?BJxq?T_0k~^zdmhKawN})&o)^E6;1gv99|nz2Lw2Limb@*EHTD5IY=C~8dnp>`9mnj0>PVEm0Q*1$zlm9;zp9vN5_V45W5OkdG1UXh zBGgy03v_uqWlGH^OYE!+e0InvsGSIC>2$xS$+dP?*`&$+HeG)ykYdWx(GB+sVH{5F z;GlUJG>WS<$wA9a$7E$TnJb8}y0gPg2_WGgOGyxLINugYmPT4gOF^Pd%n4={l9xi6 z%mhYnZpp0-aj@FqSZQAyV+|a>_qxp`yRea0r_$(Qxd>M7nDbcemb<+8*{{eorx01?x*tPate6|u@#;fwkH=oivYnOFG< zVwZ!-jMZ*++8$8>wWKtF<9{pHsrAYr%utruz=CmaYy)({Eq6;L&zhJq$9Ek5%ZTqEaaMX1I;aQp9&xF3#x%Y6M;(Xz?IQnxgamiEomF=*T)RLh8% z$NvCi$EC*IM=JjSB-<|N`RTA~OdAqAWG-3!&Nh!#f$p|>f7^BROxhm~Qrpv(Cit*j zH%sC9oBsedK5o3C-`fg)S}E;$KkXKieIw^VHl+5F*c?Z43eUu9O&r1-5PC192M=)k zjj(GTZF6yN_gOauXfiVqKzXuDNeBItW22MiIX~?b-FQA`lUS_hyV=TnEk(pKG?4h8 zd+r67&=ubaG-~FT0wC@|!m4W@2dQCe%yogF3yx!C@5*NHa5i~);#cz8&S>{R$;8b! zxpy~`Rg$-ZAfb65i4G(D*FpaP!?4JCUn5BFhB$I`Onk? zxbM1uFAGw%^IThP)Mtlj&&a~t{{WPWqWT$E@e=;Rp~f{Kxs(yug~8(qT;S7@*2$ar zN+)EveS+cqAro7EVAJ0Q>7P$Ee&BZ{;0$qDgpZJnbp=Q`z!qVn?6OW8bZx|pc zIs{t=um#^kD@5yh}6%+Lc zPHYGr)euQnf0R5QCdyXJSkZ?Y^;2}$@RRhHM%2^Id$e2KY0RdPwsF1sDo?Fe0WLT3 zdnit;RT;M{vD+$dn&rg5()^zl6LFo^xj`NLD4QwRW_**(UXK6Oy%ghbI!>UYWNMrVA{-&?1_%79;qKGKI?5SZ&a5Q zE{g+dL%S*2Fe3$5nNZ>1-4h*Awn`19Q2DR8x+VvaWQCQbyY1x@7NeY-A!vn#j%gcZ z6BDdANMqDNBKsp^)EkAJ#fCNnoQGX@*Ezj+ONC=xaBQTGt2>}+71+oUcinUv`yiWE z2VZ1Fb+;R#aZiG%oxJ^&%wvGqsM%J~b7F~QbY;6`3&xp87IpR|bkOVUr;f3f*jW=5 zR1O(vx?9AblE6VDqU<^TY>wxF-7ux)gpP?%Psas|+asD(!l}c;GCFwO+uceurpOLL zQ`5_|Mh42qUvx}bgWGJb#*>B5^4B#cSY_xW84jrHWTIo$&vd9zySnS}a<^cR@yQm4 z(Q7_YQR@JUlB%L9nb58JvNNGUQbm^E=JyyYAF4FBby56mjlSVUCZg_Kl{sZH!&|A{ zro;tbtkj(1M>Y^OI*}mf2{m4zT1}7DIuLD&W3xM44>QlQ>`f3Kn3Ym?q~|;HVM`vQ zZIZM+EE3}k@P>?^x*?UYv}``=mfcF$Q-3oS&C=c}7K^hr2rX-c%#~E~HrEH;QvU#& zH@ORc%$Pv=?5pWWVl5Arp4kBm`JiYxY3!?y)G|Pj{nSsa4z=EW(-ayF4yT$68-|3o zrf7g885t=f(|N!hE!hjj z61FWSbId^^!poi*hFLTyUh&FHiN@Al7)8eel73AK_7CSQs+7p)F|RxFw%0w@+eaBU zvSW=PM)rrC-=CI%w@;0+dt7i!@~j*yTCqz87JW1BW59_!u&hBHV_l zSwRsa?gGqVXM_;bVwJwz6S{pryI~yvr97I9h#WbbjepfV?U)>?dB@|p~bXuqR?2N6P|iUtZzN=v5ALWC@s~Rq(nbylPpG)q2$~56WSr}v$`LPmPL(Aq$-HMf zNNxSdR*E=hC8e~HkOkf8Ox6>g*T30$ohKSZ&^~Z;mX!LFjwz%cJW>0CMZa~1Sw<)- zFZ9#Z!u!KTIk3kp&LkfH0GS{B=TU|-_vv$%=jME5fK>_}F`^uxWMBHpPH4FKkweU1E*(Ww=5^-D{{TfRc*F@VMQkAL zb`S26RPp>157BPklWq30T>dh=t}T#6-p%=cvRldb4MDQsCcjMJOqD*E8Rc~_X+A-^ z)LQK$!9R|3Tlzr(xBb;>lZn3&2yJ7dBcl)dlu(u`pZ=-rsBYxA45faVe+hLYKW%h% zOaxR?8v}lKI|J!;5te9NWQwYp&A&<8{;7R6CXV?DeLGs;5*CFs;nLbY6HZ+P@*461 z^PZ{e9A9hx{{a03`h%M_bj-6Pq_NwYp}GD40M%*Lb?}ArKV4%f83WOOm*tk$k1b#8-`r}0Ax%YVN*_T z9IuYpEpfH}=`*-KSkE;+t?D}XY`~BI0Pib`&KuR5LnYK{Eo=!0Cf~X!>E7-WMBLY7 zEkloWIQiUI_b}ts86UP4ZmZ%|WBH?VoI%em$qEY1D^#QwYw2WnVR3)#tM%Fjts~5a znv*%RZnei8m+?CnzwAM+ag6i5&WWZlcg@lVaXnKBE(G>BwUo7*exd`w()r#u^zMJM zt5*L2FoNOK^F})mR<#*+`}JO7Rj5``IP=q&H@XGfQ6x^cE2Ga<8=QD# zPAv9l_=%B%8rzR`J2=9dl!+V4yjXFAoCU}Z9ag{M$H+)09mz)=(vK)KlRcgMS3@AR zfht(_ItiJ~f4cE6_>}Wsp57O1;>R)K@3Vc=W2tv+Es;I2YC3eb{{RtK``@pV9_;*%U? z^L)LDT7MdWep!B&*&52F$xaBp&!@oQdt0i5`9u;6?x?4ZCTKTx{;EnoJuZEmT+`eX zPdrxztVy37{u$WDS8b$m-9P*TPerk(jn|}copO$L(FfpLzlV2Xv|u4SeFK_*FWC%L$_guJ*|h}z zq)c@sy>1d_$a)nsCU8L0B@UZbcD@wR)tlub6Syf^P~vih*(%5JRuR<{+RKsiD*I=@ zRXlYTIVnvrww4&Gv-z@$i%@e;9d%o6NEyA#o;s}W`=z-_6KQFOQ+^33k*X5hwN+!P zH~iknhE=$Y)cUesNwl;_sKonoH$Bwts)gtCSykCo>>?Rb19GR;@X4^W$1EkL;iX`L z2aDlXBdr|`l0}SF3h?@new+EAzI)&?SblI498ScG!aCVz8u!vnk{{V-yG6QJy;aiLJT4$6OFpL$$n$xqFs7vtHpJv45 z9KQ|PaLC<%bQafuk2Q2R{Xs(b9p3BFDt;Rl{+G0&UGU;Vw=l}Jkh?s;U(=siK=2$` zTk{||E?Iv8EGALPWVjs5)aw2mR2Dg;ID@!IY5o@f04$x)jyJW$-@?}&L{=vW4^#a+ zSh&7Ooytx^>{JugIy@ygJDdA0f5KHAFZBy9_v8v%ikbIRi2?t%CUWvzwmyd(~R4q z=y1NIHehlWv)EhNALB;WT{f^To5OmgujvB296PB2a|OWcP*i=Fy_;=YNgfpO)ibUT zr%2Qz-kHlng0veNXZ?^k#rZFLVc`( zCQ_+vteLqjci5?$s>m&Hv&#jBvLf*ow=g)6+sZ0Eex>A1UJqesoRK|cLxaVU?=eKI^2M;3NR==FcanFCMzspb9Yb*492LAww4F%R9 z0xUycf`zU4k`+j@)y3y6;1Lcw5baBBo43NUXP>bej>Nk0p+h99kORWyQAt5 z2hQNfyZ)d%eG2)8E-;cZZbEe*wM)q~+yq<0_Cp_-4=!2Ju&5fRHR^P8D)J4<}TC3t(Hnj4_(d2HGH;AKjw-dRi zv0hsKC3z$VWA|LMUbBI{&$^P!Id}r1dim8MorBhlzWqWLrjt#a<`8e}yxtxodqy9Q z*G0v}9KV^s{Zkfq(?x8HE-vByE}`G@*x#*|9u?Aw$Ro>2syB)S@Nw>lkBQg^=g(wH zaDBv^3ly9QMNm1Rd%yK1^?V0U4oyRw+UQ1cb6VRnLJyQZPZgOPXFQ*BjXXYL57U0m z-NIqmr>wF5mxR8jhxJNgNFny@S5a%+uDFuGrgZwzoQ9bJ_b3v>FBD$ME^MvINvbfP z@ZIz)UWTMU={;IsD_U+R^JA6C)f&fsljHc=JKBm4d^<;f+%?b_?0IU?gBfM}GGTCJZU# zZgxY#D4C5?widgfT*lqHq8X1U8cc*HiKjfO8FZ#U^rlQIX0@jTEb_q_0_8<&Z4?rD za8l}xB1W5r+;~@?!?oRlib@upmPe+Pe`_ysKs4@Qu?wccJ1dOZQ(jNV577rMgx72c z_F0@JyG3wTy*n<1c~0MQPSX?4)cbs7qz-BN*zY0FiaE5ginPrq;F)P+LtkO53e9nb}OnctFu<7~6t+ zDdT&a)nj7@%4S9iTZuNKrcOrahSc0z$`J^<=tFI=m$a>+4XA3D)Ek3j8)0>@yDV@W z(CxDJle$+l-s&e*mh@1#xxLg9%yV@T7UN+qtL4Z!U9zpRI9%AJGRQ!_e@}xo?N@- z_Ek8mpqOBb*%=Ix^8BtK`>I(PDVC;31C84t9_o0Z1M5yG?g=OCl0~T1+zwEDT}U-rhPc`??-xX}$SOm5TQit`UT((7Z%$r& zn9cg(4mGNPK4?xnt&M!N<|hvLMzSwu(Ik;bcaGUZJ{LHf$8+AxxA71zv5mv%xjOS5 zy~m3w^)2#U0ZFI6*Yv;&2WieC{GcXI)nb0mx$L<9WXt|rge|5OP_XH;5w*UHufVyx zi~9t?YH?pAS!1;-Vr~d0!XM}o17#Djadk9w5?m4oDlNL4Eg)jZnDr>1c7oDU>|#h? zE}td7Kt1fchfAB2<^tXTOigrlx#d$usm5a?1Z9T>&B8?X zuEs_wx)W(12IJOdlAP7HmZ6}QGIqP?BlLm+vG>Q6Yd!$hKA^y0XqMc~2LAvs?heIV z>bS*`>usJ_$0MvhW-`E8UdI+eSx(8hm?R7iYnay(J9SIljquRu#9UtZv z1Xy($Hva(GM;veVm$oSRIsX6xr!ME0Ka9()pUsieO`9D#@?$PpQy!@SmOMbwkOCA_z_e|wIq%o+= z;`al!T^|!W;SE4%FmV?0hj+qyfC(;g`(@DSlu|p>ri@%?4Rd|(b;hAdNvP7bkEV(2 zBEUM<-yj?R0OizJ?bhPlW8nCC-wkTm;x6Dl)DmzFTOVNOeb?BPe-E^|8_nnzyK~D> z&;a`12~9`CiaAL!!B9o8_LfKw)LQ9_1ig_Y`aVoN4Ojg~?xS}HRkr^CJFvc-uJ~f; zF6N707MJDEy~rtLZ^MeV!sl{D5Zjy81scH1w2zz53RY*An;q0H;kx$pa{2@Q0C^_z zz|uee05C+VYHEu~0sqpjdL1?KALaW~{6=(zs?;nSpb#AocM z(rfri-OmiAvt4ik_p&BFA`Kh36>a|j;iR0_L&Na$E;w==?LU7!eb7C;tEowF_L+5IxjT@RJE-m$JV8CI0|3zKSPtIoLhP z^ZpuEu-L_G_fa2)wbwR+{nhQ;?7i}SN~3pEvA=Z_aEW7fC3@G{krG7H*9eH(J1!V5 z6zmt-17(sh0hKFlbsKid>=YIa617ay5Y2LxuJ45t0idRwY`YH5$_71l9IX^g2qAXX zu$+Yr^1BZ=OkRL!IvPk{xJ+sEdU*)DKuc+)**T(?)=yA_?E;+#((uJJmb*f42Lw_| z2gnpu6I#m0K{f_LV!?_300>F>0E6MJB*!cXjX%N~DNbVt=&TeITGrWFwCT1^T3j#q zMkZ3A_#daqYr@~MV+X)3HcWa$?7bp}Ti6u(l1;O4jcBy*mlF3g$s_(9wAl~*pgxGU ze+?RA{{ZPX?7gm$!v#5{Ad%Hu`0X?P0&i!}j{X*O>2{2L0*T+kZ4{d@k7e}rKPl*$ z)3Kk@KFKoptt`KUuc*(FCH@g2cjYe~tWY!m00>j>9MUxVFSenDmdi)k7acT5^aY+@ z3#EN0{!04H_!_79Ox5DQr!hY4N$Wp`P9>)Vur^D0A%2TDPl4a`+xA@@8kOTQH|(;@ z;PF4(Hj7#Q$L3XUz}_jM-%l^M^puLPfHlejMA~faxA|_rQsv=l8NW0wKSZ{(;og^2 zK5Awk{{U5re+4!BGJljYXOEPASxcnVQ<5a7k~@D>NKhDDHwWs!OSMme8Xa&v)RA2G zXjDCW_+8N}d5bBS(t5O6Vaf3txO9^kvcd3t4~weS*#RNB@~t}e4%g_?nCj`Ig#Q4T zD%C`1rV0qt=uG0s8Bq9$>Mo6nv>X(z?k#pg?UJ;QD4bI>?H|Kd2F|iRD(Nw2-BsA~ zI-+B#dkE^Y%Nc4Vwx3s;D-v#vkBH?5AyZG{ntWwf%%B~p>eR%qUbB* zXe1CXQ!&Q!a~85uAZ_w%Md$fU3>bW@zfS{N`)ik`$-xx=6Ri z=!ajTA+ChB);8^RNE+0j^$JF7vW@PCYc7#`kI)0CKI%aDTH-OEDvA91Q-gn^?YhIx zNhJ=}7X|UJh`SdU!X_fn;6ttE_FjD5a!z5Febmk32>|^?ReK@nFv$~-&ing0Tli?{ zftQrZ91cK~41Je|Gl^seJjsnG7rG$cVBiOAB+5Twk!bfVN_ro}w8msCwZ3w{$T$pGQZi zQ%KO+3t14wjDrW+N+i=uNps+HLB21ay7|0(NFd+VkbP9m_?vJCsPXQ1Ok3B0lZo`3 zYc%Mc%^gH7VHpi?`vn~O#Vl?7+~)Xmi*fV;eAs>>Gn(G3zW7*vA^-zhGl&~q+apq! zgiq7#`dXieshlqML|PB#AP|a!T%mWUBW*c%R)b-0W%B9xnD)C8hWTkkNAWbe#nmpq z^-#5PMITIVACmTB;Czu4zTZoe!cpkpr;a(BWU1+9j`DPzjJlrO!$oqvzZ?M z08RJ*0H%3I{g*nA#Ylh=!7QUKaq~U1Sf6kWk#Ol6 z6Ifi|LN*ckpDs_?e6JtHSJKK{B91$j5>e<8 zxu!{C026kZzG3bE0AiQRO~b6HE{(jz^^Ad)^4mTn%*O{A%YZikl2NVru*bsTD}zbR zz(4PV$m>&ew6CQfXV6s#MW>P8tt@jk{{Sg%h2#P$Z)QpQ0J z5;T1jZ`UbrU_m_t_Fg#dBGd>RjCl(NrK;3e#}v2rQEF(dsP!71QX|ZH+8wy%C?EKk z#_nEL+qqO)dL3S%UD3Yf7Y>1{O@iwmC?%G1<|wsGgUpyLcSS}%$Y}RO#uuv)xd@MZ z?51jghWn{QtUM(*M3N=C!0#$9Y+MztfBn+R?3_7B9e;EvbpIHC^orD z*92ArK}~(ikR6cBeiW^KLNwi!!(e#_{nKh$Eo&rEzQr=7mt~?XUqz;Ze2c3c1lwmS zokKO1hJt$$m7xS&XeZk$%coDae#)0YHH&hrntb_c(-4ckpHYUZ6%4o;RLwqo0<6>$ z;k_1w%PmxLepKd`L4$Q%qL70f{@n^QY%q;!tRO{w3uQ44$yV0H#k z(Hw-T2VTj94%rB?gl8&t6eMo@q8Nk_hLyW68dqZ&LRrItf$iNC?5LbKR6r>qW3CH9 zOKWsWO2(GU3tSE|6NfcK;Dx074K}(wSK?Q|tviV5rgTs-&LH50@ejpcgO&UpS1gdi z=hFk0+b#b9vi(7OE~y-M@ZN)q=;UmXG)h6Uti1lW;~|&z;^Ib#Wbn_)xuLNjggA)b z3+aE1U&B>)iB&yS1Sgi{^0l}t=gmV$s?z6lRS>#2gKIc1EhQ{+*)>dKkD+rznx$;6 z?4)aY5oOb2X$U(mj#)ML3Q+cyz=U0I(%1~4+7%MFl=)pWXR?GdknW@a-*h`dqF#3m zi3_&NApK;h1^ces%sr5}5|KaRWw!WOD!qA=_j~oAL5w76a_IE1mrZ z?xGI|ab?gfx*eZjsUlCuk&aTc`GD*~j0Tb{ZSJ;M(|mPXMc>%AH&Ab7v#7D%6;M}9Fl}YYu9V`yA^f>l_AQ@{irZ(nTt2clexItUiur)) z_FHbLD^5Tm7v;;eSj_CX@U$u;1y}z7n;xtq*=gFP$K|pwpu$o`gw;gRf>ysAz<)7S zzvfprApI7NdqCW&^a;5ZVO+p+?2jvLtqyhDA-}q+oj_jTmCH3owBMN*<;&cQiFd7H zWp(^6y%x7FmB+|cMr&(7#=8t8Lye|xF)8GDgt4ru(dye^v?9g{qq!?9IQ=O5<% z)bMLp$1wL(=rl`3syY~?A_h23EX|ktT$Q={c8@o9kiUjNlp4O^i}=G zuhXGxtV^xo%U^+kqYgh(Rek(G*8XP$^-!I0jz9A);^>wY=&lPN;NZUg>N%(&0>$I* zRe9RbX(OD1H@RFLalE$m1^kq8#Jr-o8_7=|KybHWg?^m_obGq>yL7SIu75j7_fbo# zf^W{(4|M3pyaM8e64FG%EY`Sq3Pw}YxuDp$=#oEE0Acn~yHz}wFC`UI;RCiMk*%W^ z1Q&e*Ew=2RW#QzE|KWa@i!?1HpFx% z2)1!++(+eT@E4Z<064bq`<1q9?Ph&Lj`>kfD(IC4CX6DZLq>9mje64(Ckt+UmjT$i z)1FFOKol`8>z_xTKi|B zm9O)ZGhC!=!Xzv$j?K}u(pZG8uDULsKniLAu+hz81=IQ(j0~!sG{9Lrp`UDpsvMSF zs3*O$tdtcNJE~m-+htiOXUJNj8t0NOJ@4w#kGK@|3{) z+jPPQoG_8R@s8*CR&vS;+8qS|Q+O z>bNB{p%}L7W*dQLE(4rDO5dnQ=~IHyzfI$<)&@u~m9aP*wQun)J;JJ98EDnz18b}j zOL2wJou~B>wk99e6t5OqM+RAKk%g~WQT9$kT}}8;HYKK9kyRFi}Rjn2*hW zqU2Xnoy&r~k|m@KD*!14wzQz2JM;crsM$XmTT_L-mA7TFTw#Xgh9_guQ2 z&b~-an-oWBSbzP3(S?WgHvZ~um!N4sB40*U?SHz%>sr?)>9gT)Lf^XJMh9=YE?0oI z#8z1_>O$Wn#1EOlHuRY9*3f$rwqav`Q-11xqLgC1iM=UKIo*EiUWB{zJL*%fNrd6; zA5gHe7*Q5iqBnpq^q^CI_AJeba})Ieu5Pk97!&&fI(5My2SL7A!PZ7sxAY zr6Z~Ol*#Pm>fgHH$rE>bLbVw`1%8wc+9F2fbSTGLsXrY94rT-_cBx5i$vy&`BwE^c z7|J1n-7KSH2p3bawqB&?9TSYM9ggd#94>b!stya}#_qcY_*xCk*Fm>9R0*-3ia~(6 zXt3E~>D5&NbR2KG=xn0CMpt0i*i7}Kcr3)Jt4J)vMncJeJ zcIYXOl!k}I7Drp67D7BJr*aNQ`AKMcIF+n+?FZ<9sGz2l9%z_v+#(+)>Io(Cmg1jb z-3hCBV@;_Co|-d$?FzA~{4vohLFT1k`YWumc|lDk>2FVtUBoMAlj@%XbXkclh&S0) zwJ(5_BL0)e@Cx?|i901VPr*z708Z1(_)6T*pS2HyFNXe{x3=5#BUX~g6?6_SbFBe_8480xt$m!SxALnB7za%rY!&MNMU zqIWu5>=s@B0MHaa{L4C$x%KK=bGNd)Psuiu+@H`EjEx_fG4xP=GI9DZ;>!(V$v2E5 z;FQTskR8}U;4+c@#r!CRUr$IZH7qAE+sIeLDw!jxX7xc*%M{H`B$p;G|8+Csxq zPua+lR8=#BrLg`|KI?~Q_sdZYnhx#?K_oZCqWbZu_U@QjUSY#Kb5?6D!?O}{{ZuUb<>$Wug(v!MbEOhE8|U&4V<|&5;Sb! zok(f{!Tpyb@n5M|UQ0qpQA=yx%R-Jzbx%3!LHwZo78lOZnA`S6Z`n8yx`o8lQEP~peS(kiQ}uzP z=!>5Wuk0iI1i#kry5-t?&+Br2CXw63(0!ITzyAQT!{JrGWGml*kQ}++b=!2uI@h^Q z%#siK4O%nEf9QeqS8v%k@P$m$z&Ql2#+W&_x@a9S7>IqB0o51$fPEEl>>_4F3YbJg zRxo%|0fp+RoTdu)l@}=lql*CwBN7r>18>oG-S#UBY<62{#gw9sg3;Y>zzeQP>-IxH znQp;vWB%(v^;qL&bPbyhvgki2DjsYAusKR8lZRhryPIJ`ADdlt*JB8h1@aXPggG{& zp2Q?9lE>K}OFfS3L{J5`ifyv2T73Bmn?pXz!$DDHsv)LcH0q0im1xsv+d21CO**31 z%Cu><85p{JLtkS1rqpC!%Fm}wU@mR$sM>8sfL4t*ds#IXMb?62Y^wzvn8K(~R9@fc ztaNhT);UH-St+Ej38g%nX5}KKmgjtUP3hmZR2IhYKWw9-a#;(CIwN~379Sh1reVhD zNZoLWVN?k<))R%xO6dUz+;?0P<#zt+Ct*tx+&iUF}@W9~{vR_om~s*@)_RGzWht@x3eY*AM1rLs$FqiY|!Q!DpftT8anotdl_ zHf;DoI!x}cO`X?X5joS94WXN|HVFYE0VIliqoAA0ZqXNGsGQT#eUWjpClAUpl*2kY zDQps)Qw>Un45Nkr0HA%8qeiBX<&FC&A(sf)Ww2SLh7#^0RNC@zIBJeTnA`STyMkzC z{{W=lvSSRnMnxs;vdcxMmktPG%{An$%kbWYU84ip13$uuB)=n^74|7Jd*Kxu?pHT2 z!sxPhjSr5eBI%x0FTzLL7p|1TuvgPFbHKUhGjS<&n zN6(Y|F4UWQMjU{X;m)Yb+MNB@(#?W556BAWQ9|#~7dn51u>SxI+8nj=U8CiijtSKv zz3F5=!ssbDa<(gnQ^+mdrF~@WE}i2skFtUMJ4Gh(H|iEFpM|EsW-;mNWWD`Y(8Y z!J1%qa)MujPyl&c;E?_!TmJy#4QlZ}Cx#jbh`Q(SFoC-E3crKWHsz8Zs7mJeOIFL- z!2K3yq140oVq;dL8|p`xnkY%bmoC#|H?hj}8NL_R#!Y}F1vkU`*pK|Xp9wDpRo*xL z7;7va@f4AzxB9HG>11r<_g2|>HnK7Q04Sj!!?iJB#Qy-Y9g>f6Xtg-LnOSz3D9+Ddc+u34)PCy?Jy88_x4M1&x^|qju1yrZ zio5%h`v|=nw*IsCToG5)pQ?EJIfl(q8hOX)C+M!AF{zcP&dEqnwX{= zu=`na=*iKx`YE~lFONds#nq0v_FEP8J93Y*WB7SDE&Y_ggf18K{{Uo4P5CL;p);$h zHwD>ei6Wb%l(%hhdn4IM*S>WZhF zVJa_E!7f&qAUG`)Q{-peSSTtsRO&hMGORQc?6f3WW!p}u+qZ>j(`qkkl|<90$X1;; zqhWN^9hbc}eSs>~r&MeX)ZYwpE&fYk-W7 zi)AE+z$Y}X%C1pKa5^VcuNYPf9zgWM7vU+VdSeUFv20@-kqvSZCt(o6RR9vwyXc}} zQVqKy1k<)qy-apcxlst5R5Bm3mFgK32pUtrWE7`=2)Rz^IeO(#XbNL{pr$uwl1=! zTVE+$^%g((Q)pYPnre;E6V&gO4D}+%KUBVIo%3YGh}qpl={;Q6QdHFWO6n>ve5b-9 z+XbqVbe^hP-5FOt`AO=fz4E#kqGp_cs^5Z?%>1J&aIw`GWjtPP4j)q~3;VGb#z8LBme4}EOC5Bts8w}fJEryulDS9H}lGf;yMJhHa zZZ|;Cb~TPmkz`DA`AZ{_6&#*WH9=U(kMgEtukL`3Om2u{!dpf3796ApJE5B4l`C9? zB2c>Kx{m%=S3*OqA1jgp=(aGkx||k{3j&GpwDePST(~MAB#k=>pG^&~gdCCC59M%wA}i`o*p^Ku2M@?T$Yk(kgj?hvWZA)RMZfHYXf(@}1V@`Ev02ez zEhE!!*>E%}dw`(c z*gaNfqr)Dehb)qQNCgyQ^nj&pI|Z;8Yhc)<%M4dYH70o5FK;SCViYaHmiS(M8qB)b z-s_dnH$=H1(Co3zzQJYI!TYPC0n|rq*#_)+O(btPDQwIwaX`^W9Lth^tDbMV(Q>*e z^ka>bPkpyrbMLx|?oor$%bt2JIqbQ47g0I;-4a6EB`?nFxTLWNGX2+4$^lwnfFDv# zVxLe?k=<13X4~C7qML4)Pe>~++I>a&O0;R!AD2IMM$@OiEy}d%wHX=0VhtC)HhcmV zt4*H#q!mTeXWJ^-rc5zwqd_i<&Yd>JS|}yGjnyMfn)b@IY0`@~sYG8z!iG!Rx_e0_ z?Uh!bmjkkWM=k8Eg^HR$2I-s+z)5Leds#H6b^H_}*wz;Ui;SQkaxOPvP_`7qbtu}( z78@x6R8i5giQ{!G@S}FfN(XpQJrMLe!mxp5LCcMilAz`nx~d5<8O@UE`r$E~DQ!j- zq#9!CgJiCx?wQo$=~YqRy1EL*RY!cJ)o!)ZYQuDvvD>Sn>{nMMu9DTyY^GI?wZcPO z{ql)Kn}O!4wbJ?O?R@1$S2rmsZ1p24iUm0nPgA~9>WYz&qNuC5OQx#a-Dr$Oxi)oG zI3V~+swTl*Pf@yEQ8~)!Vt|QAj-p%M>1@(usb-eQDIay*!yXQPSs3?SXcZqeZ@R$k z*G@eg*``d#8>v|IFgRVc)+m|;J~?s`uuqVbvQ3dOOVI;CCOm?DlL%(nAcAvoWWpK# zi4sGsc?`c#sy->UNa33(=qB^@N@!({qLcx;HW@8smMM*fZjFXq44`N$9K$AjqT-b( zieD(mrMg=|CN_>jiH+mBSrnUP6%>dlEATL5{HfaH10R$_A9S{ZOf9Zb1BC-zq-(sO zESAeHg~%(sT~TJ2E^pCD0?`O;vJ%x3m{B~v?6@MztblKgK_pw@9_C>}`0l8_1#-jT z1vNd#gyu-@auBk`b#_$N~fF9Kwn~jk#V7iIS?yRB$04rTCq;SgQfpV;`1a94OaJwTrt~qg%fuhbz%dMUK zEpK$0D-AO@TL$9GO9Ib0j*Cd`bT?cD&^^{U#B^EXEErwi8?KtmEOT(YiaIAC*sa}j z%bcv+bY&7`wHOmxerY(Db>Y^_;UCoCfp6u?fh|c-C zsNUtllFNrljH}uMW}f8(-`Q$O5bu)xaE%}i%$8hI#lty*-qAyQ~1*;;hjO~uME(RtG*y}s(#rphoCA4`_@&5E_@ zvwmKPkZ8PV(*9Lx)1|;vjW%0YD^8s~z`p9je`4pS&4JNaXr;i)sL)Mo91kkRMJk0B zdP#9)-kJBZuhGf3`==DI2H7ewS{=ach0(D($z?mrJ{NtEi(#xPR-xE)*-X=AOaef; za@aRqyJbZYKPY(yFoGJro|(zZuSV$D#SH}o2vbLw@>SV7gg%}wyc7RaZmzf`_@pDHSfn_VuRqbDm=ae(AcElux~4AXi0sHLAf z-3uh!i>`(!8K)zurMeut>xapHtB!Tn#*7nwi8+?#MCvncBXIIhRc;5Nuar z$(92|?S53ue^eV>0lJm1x{R*_7-h0H8Sia^P{-L56t>)@v>IdBCcUzcf^R7VGm+&m zf_wy)xf-7wkD;5&HW{zi2^=$8$mnKCXkufyrNTBDe5A0=bZj$rK+s9}9K|lkxa7J| z47avXu}!v8+6-$Pn<8V8ERI{E;*(^ygF_Zb6zp;WDG^b=@3m(NSQpjSTqjbaR4*?D2J0O0jIQ zT?aHfrm{zZhL$_sU6n#gihl`hO+BxLV45rx4MZ1Kn+A&Pu%VwCbx}{c0$8k?m=!|z zwM6`sT#T_$IjF%v#ARsZO6KSNlw@T1Mc5|?%GMV|3$AT+4G|gpECpzVz0#T*nSidZ zb;{T)EaEycJe{oSwqwGXt^JnW8t~^>5z*T#j#Oce>xV|Ht^nK!3O735$hXCWG?9?4 z0?sa?kdg}M+!CRXn;z(h15w}iK}de+xtwlslnjosD3au+&K&EgUi?{O-$}YiYMeCky-EduX&oz@!Eqe~9lEf!;GVH6cINdp-lWQj;k!;iC zy_Kg-lVDXlPLpM4(_fL<6%0k!O_L4EwdvAf0izCF@wrr;GF`f>UY#b#ZwkXMnsmgF ztr~Qaq>-(wNP?0!U62o;sGGJC4*=e@2*~$<| z+@N?)$_h7dGo*_fJAuH#L^Slw8VGZ)9u}`AQ>^5fru?pkXFI zhM?m%N5ehrRelUO&52&B3t zk11>*wv`}1R68GVrE9R386a3jR=Ji0ptv-+aO}G#%T5Z5A#hPh6y-$Wg$dX*!Wu?o z+#?0Z7bjgqA!e4{9DpV4^5fG*|L~o(tc)b2C1uDWgQW1W7D5LP-%APNsr6~S|Eif1<}Hwz-{8aO#w?6+%;@U_(gL0uWKTky0y zt&RMo$qb7;+(x!y!XdHWqU+PR@V zNB;n2!=mnrkwQ6Ow?q{2*c>O-6!++s)WgehWoV%cvE=nY%^A9PEClpHO;3`IeSxtv z*}fDHX(wdXN_0Ev@6i_^-?3ZTdng>z6GziuqJh-pBCrMAz19#>zlS&53txxM$l^eF zK@JJE9thnC%5of;(m`S{oS8$tJ;YgAwAW-ReZ)7k=<1E z`&cVBp6!$vnQqgizbLY^>C#%+!l>!bu?owlzh!7H%Y_8JI;$lFyJzgGG!G)(M`dH6 zlL1+GliEo(%7jIZnm}xtQ@;Tsq^+k zvgwqqLQKSHu{}h4;VP3XB_~jW2MVvK)9;0P)G4>Zt!fm+-wRw73z8^0l{WZQs^|zO z3j3(iZ-rLWX-;su7|hZtlKiBhWPOtw*b525TK(4et42o7dAzNMWkzsTgRj*wA#M5y z4*RZyhusbwyARG&kO2)VplqRQg_l9sJ(Cj_$%DJ}QZ>o|?BR6NlxUo=hLzYV4r6@f zbRBgH<%F^J9u(2PsuViguG;Z+3K&H#tc`|pEtH{;utdi#kTeow>UxZ(5Kob1U4nac zOljvB%1oj;J1h{*{>bQNxWR83nMQ9$mt^k z{>XV5*%Dv^otHRLxu>e+iy~l=_gFu=*;?wB(8S6+TBHrITMg{H1OEVJ^MlYbBGrOC zQVgbZ8M%>HH{P2XLFZAfj{~)%Hph{u{#N)242RE0Ybf zi6VvVg2?J<_Ok2IM8g)=7EN3fgXq|76Y2r7O-$QaJE91!mOr7~XJurdcFMOza4f7e zCu^uN7HS9VdaEv;>j0|s2G+8%P&@(^p`Dhh2jFh3R1)oD_ElO5FK)`iLncCmqR~ku zfVb{b>Nz&*6=I3|bx)|DuvcU(bg~>K^wL|ZuhL0m;+gjVs$~x;-j9jc2}L}cb@ohQ zc16$t(0d()C^s9SnCvOqRSP>l%Yr_uyRLUogiaf%UerT^jm<`i0+E;Kgq54@m`KDl ztVD|yPaX5x(>4Cl#b5Nz<3h`Y{z7=}Dn+FSA7`OK*dW|X06<<=OweYX{g*NzA zjY^XD!rP6R8orxT{y_C{7l$8U8ye%{$ z&4*=n9c2ydS3%v>2Fb&-lB5qqhc4Q3n3+v^Cl11t5QYv?HP34_oIQ5UrD@>#;ACG+KTMi1)vg90YxpV9hCIcgofpUd?i7HpV=yyB5>4+8$GY~Si*GEo%g#_}Lg}yA92^#F~yKDAC-p99^U(oLRxyR!~V(!xpvouX_QVK zvhA)m!hkx~U9_ShKQin&LCuxea)mCr2y2ggDO)F$D0Q=ZDH`Q$py=fx8wC3$EP5r9 zWMwXkPKWgM36(tdwrs0VPhv8d)6``uN{7XkNGI7aifh`+zfV#3Ody`*WoKw=c0Pt} zhxbNBHM%TIg2Im7cB@QFapNT}J2J8>qcpE=$nSXHGk)o>mw4 zQ9a*PbXAXQ15o?N4R?-;~dkNYm1>!{pqlvE34Pj$&QSh0Mua(ZKz zIdRREixm5ox-h=VDJ59366jyBcRKqhWRlAkCMU=@$SkrU9_-m-#J~~7^W9>_iJby+ z;-fpPSgA6oL=~~ z>Gc!#Sg}>ppvwgl?nYIHhE0|%MjPmTMDdUGPiZ8*jn*tyL^-9CY^LX$Zbyj zvxLf>_qJ}aVxqhZV3Ta4qjJTF1+r$k>#M9-tP?J^b&C`z3> z?0}N9bOiD5g^LptAhx0`B~>uq>lQ65fO`{GL4#nDR@3gWV$gwomHO&?gN0qMrr!$| zEl_qX`71hwChD`O((i?f7T7ToMPE^+$-=B^6qY2}V#U$M*^Xj)S;|U*;^AV&v50=i z_V!rUWPhT?iA*KRBy09kHQrV%QZC6vfy=hP7Fe+{07wWOZn_5fSg{v?NduQb{#GnR zM7ShrU5DXf#Y81*l&pRN#fo??f+LdFMZ-BB7A#9;^fITZ*)yl9y|a~z5@d%(@G*vc zvW<#wqQ!|4;B~cq1K)*<5qY2p9_0(2Ws4E6$|EEVijB^=>ak)f7v%rh`9?dH literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/shader/resources/blink.frag b/SFML-2.1-osx-clang-universal/examples/shader/resources/blink.frag new file mode 100644 index 0000000..07c8ddb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/shader/resources/blink.frag @@ -0,0 +1,9 @@ +uniform sampler2D texture; +uniform float blink_alpha; + +void main() +{ + vec4 pixel = gl_Color; + pixel.a = blink_alpha; + gl_FragColor = pixel; +} diff --git a/SFML-2.1-osx-clang-universal/examples/shader/resources/blur.frag b/SFML-2.1-osx-clang-universal/examples/shader/resources/blur.frag new file mode 100644 index 0000000..c40e5b3 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/shader/resources/blur.frag @@ -0,0 +1,20 @@ +uniform sampler2D texture; +uniform float blur_radius; + +void main() +{ + vec2 offx = vec2(blur_radius, 0.0); + vec2 offy = vec2(0.0, blur_radius); + + vec4 pixel = texture2D(texture, gl_TexCoord[0].xy) * 4.0 + + texture2D(texture, gl_TexCoord[0].xy - offx) * 2.0 + + texture2D(texture, gl_TexCoord[0].xy + offx) * 2.0 + + texture2D(texture, gl_TexCoord[0].xy - offy) * 2.0 + + texture2D(texture, gl_TexCoord[0].xy + offy) * 2.0 + + texture2D(texture, gl_TexCoord[0].xy - offx - offy) * 1.0 + + texture2D(texture, gl_TexCoord[0].xy - offx + offy) * 1.0 + + texture2D(texture, gl_TexCoord[0].xy + offx - offy) * 1.0 + + texture2D(texture, gl_TexCoord[0].xy + offx + offy) * 1.0; + + gl_FragColor = gl_Color * (pixel / 16.0); +} diff --git a/SFML-2.1-osx-clang-universal/examples/shader/resources/devices.png b/SFML-2.1-osx-clang-universal/examples/shader/resources/devices.png new file mode 100644 index 0000000000000000000000000000000000000000..6b1cbc85b8f59a269c58f1fc031c19464693b06d GIT binary patch literal 51410 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�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 (edge_threshold * 8.0)) + pixel.rgb = vec3(0.0, 0.0, 0.0); + else + pixel.a = edge_threshold; + gl_FragColor = pixel; +} diff --git a/SFML-2.1-osx-clang-universal/examples/shader/resources/pixelate.frag b/SFML-2.1-osx-clang-universal/examples/shader/resources/pixelate.frag new file mode 100644 index 0000000..3c8eb0e --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/shader/resources/pixelate.frag @@ -0,0 +1,9 @@ +uniform sampler2D texture; +uniform float pixel_threshold; + +void main() +{ + float factor = 1.0 / (pixel_threshold + 0.001); + vec2 pos = floor(gl_TexCoord[0].xy * factor + 0.5) / factor; + gl_FragColor = texture2D(texture, pos) * gl_Color; +} diff --git a/SFML-2.1-osx-clang-universal/examples/shader/resources/sansation.ttf b/SFML-2.1-osx-clang-universal/examples/shader/resources/sansation.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d85fbc81d91e22c647a3338a37f24a9d684dcf8a GIT binary patch literal 28912 zcmeHw3v?94)^1gI&rAX&Wbz~=gqef@hIc|hG$<;90?JD<0Yn1{5C|baz=(i|hzKeX zVMIg?-~&(|Dk6i3Ac*JzABdtHL_kG+97IJ$GF@}OUDY$0B;;4`{qMT#uJtFY_f&ei zt9I?$d)HUH9$}m@<^(ZVRPO=(2ODd?c!jazwz%+a#ozdz zwHQ00to(;zeWv5@^WZOeeBtDhW)Uerfwf|kZ!exWDt~JE1Cfl47>?qjCghiw>WO>} zo-fDyu9Ex-h0U8KhA}p}j4{1Q>BK2z8FxSb4P!+Q;`ybelM73?GS&wC^uzN8BiZ2k z?)7V?-qtwhH`WlZ;^&p0zyf~uZh61A{|j+rScan;{tRcDye;3ceJlp@tgz?(U-;h* z%aA!)U(yG6&>hgu%pq@6NsKiB7m$-o>-r&H!E7wdw%nG5XOq;Y{t+9kMbmRO$PpjL zY{oW5vD^FLFZpv_KbMR3V6L;8;=yqRf7!+OqdoAg(bVR_hl^=O0n4Pv`8-^Z04|UA zD=TmmvI3(iE3iF`&ni~H?_mX6M|t(tGuSA73(^U=wyW>-LoCsD8|$mxh38k`8iuQo z^)(*D=VvmlK9QDr;a#I2E1-Pnlb#P7%{;c9$R`D#MJW3y^BC{q+GhRjXCBGl5Pc53 zZB9j(!Z^AwOA{)hv@_AnQ$aN4=@efjSZYk|*M;_C-8`zt9VLwo{k?Jpac3 zMUXe*FZ3dwL$8J`Q#*@iz_+nWeQMLtK3>S=bv(OJUG`q6H{_(jIvj&pBFSBwfoD!a zhRBaEh7RF!w6V%VyHY)E&}OX%tnFvy`7`R=1ke2fxlo;PQ9fbML+_w3+KYH@7On^I zEH0^M&=>u4>5 zq${|zme32*>#@ieUPqgN&mk}pNF&AhH z<_1k?sh}-cn*R^hinRc3&C)?HVJ$&3SS!#rpue-WtTkvmb_r;EmI2yeQ z_K~zN>xpzfcCG&>b_44LdL!!%+MitqI)GgdI*|48pJ9VoU(ms+2fj%K%lj$tD}$Fke}-?1WgJLot`$FqE-i`huf32c=AG%H~Rpc7dk zXek>FI*E+|oy^AizhzTc5oj432Rc>KX>7dz6uW~JgO;-ipm(wo(CKU<=v}PT{|%eL zCV|dmlR;;(DWG>tI-8aGzh?Kasi1S%G|+q59iVerIp}@tPXAYI9-9t&Kf4QbKAQph z0GsJQ$rebukj+B+L3TIjLu@wa!|Wda3ATvM0j*&7f_N~c*h8Qz*u(x~>`Ar=^eI*W`n05#>=C3_vc>){ z*edoY=xVkE^cl7k^jYQseU3fmKgynG%Rtw#$3fRhx{fXP|C_zQo&bH3tpHumo&?>% zo&w#-p7tMMn^-02OKc_R%WM_sD{M9BX3)>stLz!jE$ms)*VuEQTiNrVUbe>n8QaFz zg1*kyfo^9nfWEVf)w?(03($kG+QUzt~p)A-11+K@YHPpzpKSK|f&IK|f?~_&;VJu^pfX*_)sr zvz?%aB>jZ#@*iZMvbR7Fv)!Pdu|1%lv$sKyu)Y3|*uU93phww0&@b4#pvOQzWM8uP zK##M3fu3OdK~J&+pkJ}~{U5Ne*$1HCun$2`v5!E%Wd}h|vyc7nv+pGRo*hE^2lff* zkL*+b0rnqu81xML4D=`VIp|q-1oUV2Z~uPw3p)z>tEA`H7fAocj)DHpzV!c#{lSid zo@XaO|70gYFR-sbtJv56_n41;18TBUph8kV`__-%j4(J|K!FN*CgU%p_$g-R@8LTa z>Zk(&+n5~)H4MJL0epTV`1(lr_$c`HX!!J4`0{v`0RNo`znuhs-3)%ZIo@`|FQ>sD zr^64og8#h)ezy($Z9Dkc4)Cv?;8(NYPqSGU_|Qw?J1>LJ%z>}G0zR?_y9$2s8u-I& z;Rk!e|6LEi*BAco2Kc%D@NWa**9OC%-3&i=3;b6e{MIn|t6SlxZi9cyM;%7OD;2;S zjfNK*3-2?IjfcmX08cX!9%d3e%M^H&scag&NIAU6ba;&!@D{V+C1%4r%z;;!3vVzF zUSK|~e*s$vi+>1~ehhYA0bO_mQX&g~6k6~VTK^lg`VzJjt?q$kFM~xdN83Mvmj52M z{3LAnX;ullT?Ko626p-!>~jt5avkjP2Uz2JXv7BC;3ja-V1F;e?l!~Tw!qG|!oIe_ zuC~LTcEFBy;)z|bp53sTv#^=Hu$7;oEx*EA&Ot|hXNCqW1)20fD<-2>e(vCjyc55g z_vC~5FrLq6@x|IZ+Pm5p`VxJuzFptxigLxenz~Y4sjil;j;_mGJzX!lQ{637wN!g* zv)TCl^? zg8k6!T~ZTPLBl_WM(&aNFc!Y>L+I-`==^x-doeWL1D&4)ttXwI3auxdKLD+t4!yq% zIzIy%_!#tlmel+Y;5$hhFTjtShhI4gANV#jO6k{c(6w_?YhRK2yBU`95^Urv)azyF z`%my_XZ}a~{zv=%A8H>=hqdjym4y$;eTnmj^R{yTeOp=2W?uAU`fVfHZN-4i<+`@0 z=O%tT{?OXuMurkAgRdb!5t7i==pp@3$kw*6Ym?q`K<>cYO|yF@ zZR*i8FUjq8UAt-LfZRB$SF9US=7Yh*#VyI8TdX-;cFOA8GC+x{>BibA!*k zo+vxKZQsGU*Md`bUOSR`8yWx8(7Q7u(?%G>0o(xLcEFb%I(Eu(x}E86r#sVNK9|1J z*TV)E<1%()5DOp0cz?uq0`D-qW5YY#ndXd%OUvf{y%GTX6 zJjUJCEw3#6h0EcVS6Yl)*VBgbJBRxI$P?u$d~u$bn8H^SY%bu_M{h3V^HW4g9)Bc7 z6b#)wRLmQy7mIm(x^EG`bvd8DoG%npd4(ulF6J#4tNE>BHTt6hh-?e^aRWsuZc;jI z!~GN%;f(IK4X8_{I(F)s9iNq%-MI~SIiu3Ev*O|t;##J;;$knS8#aimrDx+CRnL0F zDn4SPXXeH=;;7fdM~K%qZaiC=<9U#G;YRBnI~ug6Kg4^&M}I&jHjKl5w`JHW(GCqE zlO*7{R^Ua0R3dSagi|F?sVq|Rqyy_ws$(a28qeZjDlIiGwpElHjJREO{_b=@|MP%v zKt;upIXs?6i!+}T+PS#fD`#9HTc2n(OtJbf1z-i;ey6dU|}?v7;Z=X~Ay1(^w3q%BZzlDJw47warPieB zyjf7&=s7W$e}m`3r8N-8WDQ(%M#ZEN;ot1r=iRptRnHNZ<2Q%z;cw%258myIclXzQ zH`*DcrxD>s{qK&_`)hmgZX^)3;?IGy!yzpVmdT{FY{67mFx4=ainLPTHp|g9!I9u- zI}JjVS0KeJ*Mp z@B$8L(eMLtZrHUun^$;vTXD!E4r#eog104C06nzBO1)AKt361%o)*Jj@pwI6WyE-n zzoq4BxwW3-aqes_S2WUcJ;+V*!g#Y_eu1`1C(qIho&^qtV;sZu*K4$=27a@k*QX9> zpB%t98saIx+hT2%kV|7(s|Jv0B%Vr_`i=&%G+%p_uMh?YlqEC%y!j$y@H%=HFP7(nU)gsJn?Oz@(4M;t*q_RK^7Y~a@BqWmg z@A@CeKN%x7W%CV?za67LP39jFOeI^Xj-6ttgjh#B%qq1Nyb^3H&7JLrA3*U1`}S%2 z_U)#*4?nz*Pi*Da`o$KgdO?nu{$t+FXT|88%3j>K;JI+Nm*k-@`VN|>h{Whp>8#DF zqYXTemm#&u;%;Y_Ga)WbpXW7a@r7H(EWXRTWC?%9qYw8zqeYo#`}GOb$>@jt;$)qu z-KkCn_*eQ*byBG~D}_2iJ#{I$K%GdI9({;;UFy_@+GXaEQ~UOv;uFN(KkT-7Jfb9C zTqiQ9B0YF2IzQ#7emBZ&yD(~wmo*^|+7KmEJCig~N)%5p9I6!OigiW`l#r%#^|B|e|{p89kD=aQFz%o>6dP1ZzX4P{L*5Np+KP%iqGBi$}aB-Xy#P2uV2(g&H* z+8Hw%Z^5OK*Q;F~>Ar#TG_*VQl!PL}IbJT%zBLo|xtSge->>(GQoJi=17ARREH3E1 z?I^EnTvj$$N}EP5+$9bDf>*qBaEGRg#)G{)oL?@s>^MlWdm&Ry$M0#r;p|y54B$L5 z*YTmP5~!l1)V8MJicn5Cdh`^jZ7r-6>PEe{%%A*NB9G0=M2l0a$4Lc1A~hSzz=1fj zGP`EC)F$zDPfiuztXj8j6+cvPz|1fswe`N``U?Fiar4i2djY!E{d{oeq!QknUlTj( z1$6CVllgG2mQ1qq36H)^pX-}p-gvwZKeul4p!2a-zhHYFvS@$^R-i8eLh)u{8yfFM!nhyLJ&J(rU4rn8H?+~e3yilAMfSnh{p{=x8RT+3*;$LHxECaJ5 z!BVPAKyDDWGuCFH)~(=W-D%k^0Jhvtk2aDo6TkChaaBXk#M%LT`PX7Bz{D%(in7I7 zk>}xtd1u$3_f>h6k2g-*DiOmYTMy_U&0Z^8cUmd*Xv)kKenO#{U5%68!=z=0z24pC zYufd@y_q@MciJv^KJycEJsh~Khpim-up?SXy?z+lmwJ72aF=kWgDMf_)?P+G^s9K% ztM$~LGDmu};aX&s$7A!D!%gbNIE@FS-&WWm9Jxr$1l$1UEH9%wc=;E4Gt<|Hys*oI zehek6ce^8{@D^d7(09|Efj2Rppx4Z4c$Uf}Ur4fv33_a@&wy+$CJ|?radQ1W-ycDl z^cY_1z4Yo3p)^5M)vAxJ2;~r}4vbJ#|3=cuLT^Sr8Vt(m@#^{HHXw`z+O!Mfv<2og zWTEP1jgbO)O4bW+VRS?aWz_>Xh6|+C=t~dOA9Bxz6>%Ywcw3vtXBPz?Zr3j$Z`E!y z@s18H4{%65f$|z1XL);%e?a880l59jp!phal< ziD!ke*z}={Ta2|A#u@ii-Axx>QM}1^2$$m;b&C+5Q?6>X{lM@#b&4wfD8%W_L5Q9!yBOUjdmY3kn%M!*pz|Lag3= zr)9v{*NU0LS6p>rZxvO6coGj;JVi@wCbSrZ8b$&=5?WLiNyexUt1ZUCT{RdKNvA8s zdv%#yS1f)h=0#RJ{|G*#fSjxSq64J_{G#QxqHJiL8t!Tm|KXhIR?Yl(^UM+2y>|vG zplop)WSS)XR3mWT6!~)W4UMF~ZEU6FSQyoSKP1Oud8=4A;a<0E-3e~vlf>Em;!5qx z3x^M15Yu_se*Uicsi?|aH-JZ;;`8|OoOJ_)?-cqeOzD%3;Kv~UQOka;F^kb%T;Ua0 zSQtv`Fxo#ywpU|I4&?P3!LDPVIA9|Y8j25(moMkbz24N%i zs2T*mH7e6~8_FacMZSZ2m1--dJUPNfJS*{pQFy{PgQ(@LB)@VzA13Qu%`fo@Es}MP zL4~s@5R`a;ui&c=o5$eo%sA}_-w4r&pOdnii8d<)58+Z@ROyt5Vb#!Kr8)vJVLSxT z2p{FDyZP@~X31Y^rTc(_!83r#(aX!Q={ zaFOvN)jm;;ALT%fvrLTX&js@i*f+<(20dFgKPRq0-T+_c&v?2yld$T57}0XD$BxH#@~S-mtN11HLC2t*Su%S?}#wx8@BP^Jhok6~>S+Fi!rP%o#Hk-|q8>-qI9b3Eo=?K01tIdjB# zzI4u*RJ>~7`0oLTxUr4?c~ z?_N>reN&tkZTK(q@AT?DyNHcqQmZ*vYN`BuCf^XqzdLx1Kx8n0waDvmH=(sSh2LD< z9qo4M$Ib5CvvA?Ucg+9rKln-Cajj`2aOf}mGqD3aYl#{cxg2npbl+d4huPjkD-se_ z{kQVzy5u?m&P+Pm)MjK#P7j}dPtmCP?*sS0Z8HY(nXNso*H7^H?jjk8xkdzd46{5r z$siFjhy=%p$ZZ?iQKi6lP#S??LU*nzk(r?1blZdCB}iq0S2TOe^Y|{_dfI#usYQJ9 zjy|@DSSl8F`BY#GlX)sLQ;X5C5>4U2=8%75siDfw$PZTc^9p&%!9^MZ7pV^P@z3ny z@mb;!AMm|+nGZX<9%C7iIY@kT^d@mFe`9d-H_;aAU*e^eM?kR0sf?n6S`z&;zCbo$vGhInay8)dGFwNH}QVny-V)# z?pbk{(RA+IiV88woT@GTVZIrrEj|M(^%AmZj&d8r=Tw(V60OswHOlhLbiZjes?l`b zyc%taH4sKWTd5??+$qKM~EC=KZt_e}Lc8Sp42F% z+W&}NWjk$quuuMkjfHoWahX-v&^?h~QGmcbirhCC#+ozILmy?ZD z`_I3H+k$f#!6?0)z;LI^*^6~z3x9R{#*N#>g(ud*d-r=I)0(?zD-)QvI0TtUJJ(to zdn~+6`p|%|mkjqiF((oSC+jI|eeUqxx%0(&W6wH|`Rt<}p7eKgDuBCS1=M#DlA~CI z(`bIT>&;!l<30U!h0(O?)Vz88e(h0n-1qlsRg^D&^wW@Ib$?BMl=^Ed-nRN{r^GdB z`!LneW}mqEMWd0|s?AhCPo9cojLjV~ zMLmr2Uez%z4Lw*It~#MDy$M2p1n{l+mfb|hMxz5+wxcb|j)s2ADPxpNdJ>1WpfO`y zuw0d*aw&yABp6H6YRxg$DPPlTPACQ$u{{<#nMl}Vs1*xK#X2)JN^*gdaOMg|!vd-3 z;Jw6PDk+#swo(^Eirkv2jmdIk#>J+kwyGOOGYgB0iwD1U@BITm{kgcfW>8JE%)F`x zH<);|aZ|C>19W``2Z(?2My5;S6zMoQI$D zASezIt9)%m*vW!kL}E$Gm*TyMOj*&7fLaBjAll1C;+L64JTf#Kf-Ye|`2bvSB`Pig zU8BA=2J;IvI*vlVvA8ZaXGYO;(x@6?2#S;Fr=U@Ff+Y@zrB@yrf1{iT@E#{ip}Fd4 zTy@9bfignI;`%t`UVA`pWe(Y3js)a$jEQKh#c2wlrg|aF2SL2=-v{3zH zA2e5u=ydh)NB@tqqq_XKYw_cjcGMjFQ0lMwN&nyD=avwD?1q$23#{l2$R-fkS5nyq z8wsRRgQ*sOQ)YTrOj;{PTK!_%=h^5fKtMAzuwN}YBTD!xD@iA1TN0k8woI2uQne&; zt5!GA`1S9#qte&irW}3!v+wjDH zQD=l3$*k+G_72OcYt?*~v}Q|ZWvrHXi3h5nK1Ojv>w+#C3kh@q^%kl%C$p_pWRzvD z=qs^wgTEnTWDXf2p=cwQ2!>lTt8&at{cwLTZzW0{(Y@JH57H8jE^3<_+ zglS>GsA^6;5YMI>hLJQSU&`wdZ<8S?D~lP`@_|ws&21l{EfRuQg5Cy}s4*@NB8uwq zxn{RKR?UIBZEdxqBKyLa9r9PWf?`zE-_z_yG|g{F3D#bZL&k+QMm5Lq+RK>ju04*o z9hYL3c6G6GNY9-pN7-@Ra?&qS&bo`0)2Bu`Xiut7ylhcINs%G-*#@7iYPJne)LTbo zOm(WspHPimr>b^6#Ez)06z~3LSglTBx*a-ErzG1_sUCs0`$(3P09qdsR6Sdr+_lq| ze$*{tO|^PGmQ6Lzg8?kho%2jS(fd~dGY4Z719(!TB;nS{km0~>Uxph1nL@JZ(X_4 zn@|?S+G_t$qt41x=!y^Mi_(_Rc$`A`G*+)qwzRf}aDHfkQI;pEQCQHYVC-z+Hnkog zI3E*SN$7TJWB6q8uoq+T8HjHVuk>xu2UYTCpbG{1BJDv-w-@H$tTgmwgrBIz0;_t-du~J2Db=!&m|!Z!O34}5K;%xX2UE3H%a5(KfHCR`tjwWU z-tH2yZ2ENm?wXCX6nS?EpHW_pc;5XbyLXrDrbWnec-sY+4XEHUvNuN@o^xG~C$T8> z>iJJrEX5d%;u}JX)?b8ls09P_GBKUA$Gtiib_4W}|Hq zvIA2(TF=^S4C~$ZSVL;KCPN!oEN z>kbJ~Yfu!8<{qha2=@^ZQ1gM9e~?m(f^=0X#!7)-r2&YOWF;Y@o94tm0jIX~&@EVp zTyp-GaX0>S?XNaZZ}T~AXm9g2ZKe5v)(M}@%@cG<9jh@fZ~G=FbE7PZ%$;cNiw zo?Ja;)mz=8*cn_0Eo!9;Yj_geI)Y|KAK$iv+CcN%NuDnv&2v~nHsUgo{T7%|YpIM+ z%{d-%h0=%6H7+r7)J#&R-4Y~qg}uV8SzoN%lllLfL0(LVK-4m z7`SgI*Cdfl<8U>{m4>=T!s=;ehh|Du3VIe;@t97NyEa-Lnb5`U(gPE}sf1;mfys9* zQmuJxZO!@mK3ek}Z<9Zj$M9n#FfUxO#W6(vv_pJN3s_$ zHg|{}&6cLjoy)K1SH+K6tN1qZz_-GSwCba#K7hxd7Fa8cNDG?r%M}I(jnrr^&DTnI z?e%@BIWd!l88zQbt&y5f!%PHCg;0Mb=IVc-tkAWnF|f86?0i9V6-!XDvJis{s&Q&7 zwHB54!ED_h-ogB5)7){8R@7Dfka_kj9P?>flB!~<6t|c8s$PX!m-Y?OsvRA9dtj27 z&TD~9M_15gNb@2NupK%75kBdqRMi69XwNg5Mz? z5D)M>)F;(16L~%qk|*&&D|X1IQLojN^5Zd*`rhN35Fif)5}rU->J#~?ID31H4kIN- zr2Hr^8c|S`UG3bV=)Ou(lwGA7S*aTFcA(R`G4?%hav>r9WdVPu%I=1;)tUrVcFp`0 zwy%??t_K6k!H|7OJQ=n^>+BGtCY}51u|wS`@@^~tx{>6h8e<38WLSpmXPU^Kn0mf= z$Swk&NbR(UwNjz0=m0C+@#JAO2T15zI^#RvpSx2u-855n>+w}#W~N8$h7RQe^BpZq zJK$L&HhaVqi{NymKX8nfc10MB_Fe^|lg+?|8(cWyeH%-Efb&pfs+tSA)`JYMhBt7v z!s-(3CS`bfhkzGo0P{<}a~jrkew%Mz#TP$1_klfP-#t^r7b2p1cy*M=V(Khv?OJjI z$%|c^XwHi;^;dd&NWVtytl}WbhB#KiWA|N*o=&@U@C!^{WAEKxy^puuxOg+XtF@_> z0q`L9UeUf8wU&uWmwT@QZ>Z7;H(va?z&;}DIg-0ap9&jPaSy_ngc~Vp5krf`fbeP5 zQlLAfs{ze85tb zw+Z?g%e_#4Simdz2%K+K4+fu!A1wkz>WAO1r_23TYE58m+(SFLYUqdD(PeFwKnbvQ z$6;HgY+tnxu?@y5Z7j)F??v3oGGP-OwxT@PKiiL(UMo_~FS0+;o*z0Y6h)zbL4E4o ztvI>n@Gc}tGH|t8CC-80KV9IHwYWP+)lCR@h`BpWY4{_O! z3@i2%m{ZIE57EJ0QWUMOUMU)wCnr9Gct@3m75#GAB26`F8LF6XLS`FfF%==RjrI3W ze_swY>WoNDoeFC;`zJZ)33;iwML*0HDm+f(x`5}B<3rfEoPi9flztZsep_{o)O5CZ zJfupH6pa-_=Vhr~Db~b+6x6CY8P5&Px7NI@o%&EQHZ)u0D`U-azE{PX$&Nx}y$Y?+ zjH1U|qWWZ;hg;n-(^Rb3k%9XDlUT7tK&pK`-Zj;_gRGZWYQwBpu_eofa*V9v#L5>_ z9)U;?At|*c06C0NgPe=kjaH0Q$H7$|={4%6DX4)ODLl~L!k~XY4qO)*Oc$kfLBXY} zpg=hpvK$qktsQUvNAcM@#cR`*gzK`=h;i>_0cezCgRX)+S_0X?Rqtyw3E5nz?FwPud=EVNFfalr!gi`2;y7{=*_&?4-#R-INs zlP{^eF58-Qv1X|4nrc+)Pv>Fp@)GD(aLtaEYhhHZ*|8QR4JUVJjztOd}z=_CPber#6J<(Tn1NVh&h7-?tN<5;x7ul2CmjE9b4y`9S5btUi zCiWm(t*273tT;CZ*rYvH=!YKBqkKp8LuNxgTueQTsEoBgfsfg-gPM#mC)UUT0|)XZ z#HykbHY;yhC8u`#U|?dclB2w9td!&59SAO#)1qbO7T@p#ls9Re8s8EosLeM;i!W9K zTa6mLLw!@Q3c>!#s>6w3IV7LJNELjMf&bZ`QLiLo^Cy9QsK11)ZT)Sfn#Fa;5za z40cQV9cV>iAQfw+LToJUV ztX!lRO<*N{Kvx52F;FB$SzcDi3Oed5b-9O7yPpiAdLN-esInZ)ombB#(%cO7DuEU5 zYJP?$DAYVRa<4U~jxws})A@d~hR`+dfzUL`4ehlJb<*LPsJ*Bh+Ka7W7Ag>34WweM zdx+~nay&cUUEiKNJqPOzvG2d$jd!xDe=fh+_Pgq~{O3IBA!p*$UQe#=6Q!%@M4Y;7 z%B4Imd|P*AIod)DvGyP*O5aWLp_QtQpk+!vw3^uJ7tt%CkC0bQ`wHwfrhUr#mSf8L z*9W8Q@xf(R)kqvROOMJfAFv{Gn~K+spk+$kVjlY#ozxh%K1*;Q+? zi*MNq%OfqLelwnr(Z?D?(Erlhq@1+Jjm6pL@7shu)!xHC+`hp6qJ5|R2v~`C+~_EGR65>roC`}0yFIKt zY(?0Pu=C;Z;g^Mv44)BR5xy>bfB3QRUmCP;FrvZS2AdlkZ)k7Wvte<=c@3Xyc(mc! zMr|7nX*8?RhDOI4iHJ)hhD6MXSQT+J;zDF8Ye&=r=h!IWxIe^3dez@^^dkq2wQve{81VH?`S=%|1(sO1Uv*ddhPt zdsEIek8R$$`Pk;`njdpDa$V<|=33%fgWu2o`q!Ad$AONNbd;ovB(0QmrKDRV-72XMv^~y$CYm8>rlg%E zEs%7Kq!p5`l61ACZ%VpT(p{h(WIi2aJ{@rWGu@$lI8+BEl;w_+v`F3=C+T=eizS^PX^Es0B`uY7lBAO*og(R-l1`WOE=gxd zI#beFlHM)pY)S8tbdfCGBh!ybS}E_Wl=K;SXNyd4mGn<}r%F&>XO<( zyFs=CL3{dFfcC=k-5^_{*Gbw((gA3NZjdd}LGsREnZ8M;ZLd&dY7a#B%LYgB3YJ4=JuGpQz`GP zl=K;SXNyd4mGn=UXO*NrdB>!8As^I{>-0Rgf#yj07buS0<8HaC4_i}L3 zcqJ&wCkOJOJ0zbRoHR~pl1~m!8mDxwOb?TkWR(NE7zj$T%E5Wy^bF}(4o(6mN;;N< zlfa3Rj^*GaaH6DRIXDTNDCt-Z&HyJ$vdY0(-;^dz%fVUSL`lV4-w}WSE2VvFQ%UFb8%@lw_F0NQODES-L}-mV@JML8T;fAW2G- zrj3*yZ>02iBc;b1CGU)qcSgxOuyx2BEr8sRE9gpjXQjNeQr_7j?`)BGw#YkM<(;ka z&Q^Kni1cPhq&GVvz1b1z&5lTKc0_u!BaFP+5$Vm2NN;vTdb1y0Ea=HF|Pkp{s17tDtB~+2o>;Q_Bi#e=~JT zp{ulT@|1}s`Ngh$WH4&tgb9U{M-}1EcCN|zhc~YLva*t7 zQlzfNnZlFl?0uwfz!||MI2$-0rwO|db#~!=;X?ct%hY6Ory%pec6rL!OWlq7#;Z))j(7?SxcyA2qQH*<&FY>*T$KR7( z-Q0&DcdD@}--SJQ?a>BxpObMooNYav<`U}uaEcOY7@Ph7eKI?pXZ?TYT=oi_sQoBp z_n16uz51l}=j3VCFUT{k)%ohR&sL|C)z!J`>O^&Qp87ug&w=-FcK3dqmHj^cx4?%u z7n}Zz0G-PdJZVos_N4VW+dI;beJ^qdhT(w&UFPFdmL``~`2o8}ddx zf=BYkJj&L-WNLA-aqZN}6OEw-6U&V0Aoij8qu_|_)8&Wbs)=JJmK2V6 zNuvTyQW_a(a%7N*d-M&>3sVnB{U7yy;SxL3h=6c2p=QF&gqXMBBD73cxsmMcGLXu| zMX0?17vXb4=Y-8y<04#6sC*Z$#&zBxlusC+`ozC_`|oij`$dW0FO&GaC(0%4PRO0G z6Co$U?1b0}GZ9)RyhKQyuo9tk!svOp2%i%=Cv1KzF2d!6$_XzKS|Y4ONQrO~p(Mgc zgpddy5jrAlM3{&W5#b?1LxhD0a}(kwyiI7Eur}czLO+DE31buPA$(2f`cI?@Sre`% ztOKM&h?-E2#5f%#S|lt@NSbgop=iR;gb)cI5_%?VNXVIRA)#i%frJ7H0}@&$tV~Fm za5AA}!pMY>2_F+WCTvW|n6Mt9V#36PhzSo98YUb^NSJUiAvnTsgn$XV5ppBkMyQQ2 z8&EGHHA1`+@6uRnphUZM+bU24YAdP%wH4KX+Nl!lQ(3Dff4^;1O)l0xm1v(zv`;14 zr_!ofpnU>0qxQL2%>wO1wNvd=)4Kk9{`x<&rJ6i&i6s%4LJWca`$#fk1DDAEE|LW= Y(-osHj2F<;P%p3rF{>lYhrW~jFV!_TuK)l5 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/shader/resources/sfml.png b/SFML-2.1-osx-clang-universal/examples/shader/resources/sfml.png new file mode 100644 index 0000000000000000000000000000000000000000..1da719ff0afbd9549533bf992b5fc13ad957d9f0 GIT binary patch literal 25973 zcmXteWmFu`)Ai!+F2UX1A-F?ucXxM(;JUa34Fq?0cY?cXaChg~-~T=Dhut}+XQsMu zch#-iH65j-D1`)%4-WtUkYuFARR92RbN~QM7#14Ta*~|71-f9lNocu=xtJTfSvxwA zs9D>a17Ow>;SngQKE~01gC2l!lTncPUlR{1?l)LXP!pV!w6-e%0Dt}84@|U@BLe_1 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
A(GOC&9E< ze@o5=8A&`m1Vy1;!d;vNW8iLQ#rX<3Ot8-4+SoRE6ulx}9lSEW8ImvNM%{E|;GW^h z`PpLY!K+M6qs)Gk_HSY%lNPk<kT=1TQ}rT`qNdL0fn`iWRk zmVFNJN43*{5tFNY{0SgbBj&&aE{YNhk**G2y`28*vCGmX4WBTG6TDwoc}iJHjfion$qoG^lc1>36VMM=gDA%kxYvm3D*R z(oK|iy@hteL(LyrR=Ju0MGiY82V@$d%>?|Ui+XtZNF$Zcx7WPojF=!RnVjY=q!I5Q zC5FD*}<*qPeEU)6xI<|$S%^dG)FKtsRHS!2M#l4eYLsIqn8mtuFab*ys zsY1C^zb$$pZ_ML=%fX^PM&S#=>WZ5O|KalunLhrBwZ^|x5mTcT-$)ULB4!1WKIi&(D=^~v0G07+=(MF& zjm)q@Nd7N9+@{ z-WGrdvARQ_kwW;eNA6KXGrlNgH^RB_3w1zDp~`|3dO0ay41TT)Hz7;gvG(9l;a?Ni~>D8)S!0MHHI0ek~d#l9Ze+7MP6W|MsMDXXE-9!~8f zG|;xfq^KL6vhp6pWU=VBSkT18v^*9~L+>YW6LBveODZm6YS5vcd!@awWrNm+ z3P4M+qYn6|WHYFlD^DUZkNT8S&b^)$-L>L`r}(>a`vt8e7q}q(pCI8BBWU-tWkS61 zfE*!;|G~2(r%d{Z+8GTX{gJsNNC)KrUdE*jPIX*Z!rT>~L_33ORDZf&IDv=49nm0~ z-C|T9VJ4~Xx4GNHsFZoVJ}7pl1O+vwjzfFj51=y$QTmzpV1k5NIQW!jNXUuBpoMx9 z(xArQNXm(zts4{>ByQ8X9;~ugGz=MoyKqcJt4ppkgK36weMWKw>zD&1Svm$qnK3Ds zzGAd>sxTJ%si}Dh4Dhefi#|y1h}rQGr^&FKq--f8j1bYEC!)k3dpF1A`9cr6#dMv* zu(JJI&A>BoQ2ZmR>awrrF0!aVc(nLLkPRgUF3_MxCl_Zxv6DTc3&DWW&Q+&#<3x?f zPN`(`0~f;DcJR`0S|Gs(xlEV*{uq0hQ%s-yNfcBmz>~vCwz{jq(PSVzgELe166&T>3ZquV;S~>T=f?T$zUt`w{bu=x+#wB*dS67KP?Z8p!529sRry|HG7^XB0 z{IVB%3*sd^pCT!eIG41+BD^t^dIgpW?}+A@IU=!Y{c!0idNHFbQg|}j-Z zloB2fi(sH&tDgS^!BV_E9UuD&s~O1ViU90i=`AnBkec|zKn5sNJMqJOt&&n91CJ!W zfm9L1G({!<#x-`oNhK*(s^3CR{Fp6A5e80CCQHZr*?RdymvxGIfsAyzJCNMY`!LI! z0$T7t2_`ay#*!&Zx1cJIM(PnsEMw7gdk?NhO#J*@cqs5Zze1Wf*T!}ZAk9-zWR9N? zJW&qn4fo7a^Ib-e1-kx}rj7Yir!|^NxzizB-c{+_R;~Wv330)A0mL~DVL(TkjB|*P z{c%slxr4i08sm}1l@3A*ZW0B%g3i-sA4VXqn2{A3gknCv^e=!%^R@Kw*_~K1Z|cc+ z2o8or-HAHO2h%8yeC#|@1LiR(~Fy^0ff~@cU)j^f`dV>n9fo&(@^p-ym5evfmkK^cg^=NQ6$lUY{SHG*T7^*n2;U zEeu>DT@4H1a62JiE+Uk3f`?|6X?r`7EJCW8M8cv%hQyOw#Q~HU6*usWd2%%zj<`Z= z$ddBmRk-z9U7_YI$R(Wc{hgHUWmX8R5u$i7g7@Kg@<%C5;)1Yl|I6kPHZ~|{M7@=o z9DaVpM0rBCR4L!7wA)aJ@PpZ-2U7rNnV1+#QFRZk{vRQ&aZwSmQ)9v)oZ&-Jy5xv3 za|GfY$UNYQ(G)HmA~WKK5eA<$sUmUc=#%vpXNBfvAJQ3my^R=WT+g8FY~&b=Mq-Ef zFAS@~gWB;7) zPy36~2*<gGalp_I0@N*IAj0}9HWNPV4s)D$O;tzbYq!arEM3GgTFczAT0szg} z(lm#3flSiHoq1UBP@4g&01w1VaDI?793IuTCM2>nrOKjYHN~|AQIKjzagok3e1Cvr zS33?dP`!UYAC?Z5!-!DEfS_$oepu5`P8gA6EwI$F+;glg{VK#)xL0X;v_Yj#vUehS?;ghc z@nz70r*sK6Nzs9!Az&haZ0uMIpe`Q7US}ZQyB&tjMQ$G_%-B0zg?3z;`t5e$yaU5o z_At1VvUDlBwi;dPM2IfAjY?^Q;pv}q`AkQK? zgsUf3`cBh$@%k#spR_No;9Z4-#yE7;w{IQdS0G(;sq9+W+jY1E>kKLxSTbMm;`l~6 zUk5^dmnI#-$NbdZR=e^jqmu)wutF>87c`Rs;dRly$(1xcgg~FiXq6eE`I8h8s`aGn z)z~NUpYM7>pPH(j{|JUZqKb(J8Tq&vtq`N91sjg_|KMUqcM+Pa@Ld46d-q2}`J<=& z*{YgXL9rHc5r_I~YN@@gbvR=mv0fUuwxqRs=6JccBxT_JT&?>l};jp zbs6q*`L8YLdr{p89vMZ7_ER;&;~_`55VBwcmP;5#HbXEwPBkeUT>Nf+DBbPiB81|9 zGP|_R*F}`$E>Yq&Wtk?KCK8s0_UpQ*P`oWR>LgG4mM>rH67bm_`GYzpo_Es@BF4F; zf$T1(jWUa^u#kNn3q5X90XhBB!e^fdkOF^YLEvUUl?bV};}&*W>rt2wIff@om+v?D za(W8JG6wIC&JpIe2ZFQmev%zk6$L9?3Z(paF97usX}5P3^W3W;X85K=wodSMhEm3M znBfs7uKuC_<;h$sJ^m&}IaaUf zxpk;GiPF0s&5R-TiN;vg`2l2KJvKStQ#`(ip*p!sX={?XyNI{aB8AcGL-W2bK&rj_ z_r*6Sh#f<1#0Bl&6$1kZEI-Ofw8=7Gm&}GE}dlX0u?8`lAs_3smJLZFP-lK~etAZi49>j;I8D$hE zvWB3BAe1z;{wp^9>24QQ*jB7(3T2Jd<}R$-7ORsCf+c@>7YRU3*_V0JEbk3jpBVq< zYi1gtP~h57xoQ+x%oQg7r+M7hd@0>=|FSWm$+AG6Y!<&YSUt=@38+Z>7rhiJLX^)} zZp#`mG(%}S_&@2erK2BdZrfrqEpsoP?fqY)_g2yu!Lb6j9?Gq#$C1>NaW?VVfII8q|ODU+#pL@8zO#-aaXTFjzQV**wRy=L`Zda7Q-FczAoNoG_sdxGIylq~+1uhj% zrfxtm&fC#io?GZLUIpAkQ<2NJrod>yjlw-0gzX0tt7Lrq*>Zg?Q|dzdLk;(H6V@E=XGeH^D>5kxtZ2| zYVjPh7l+Cip+IW}BaV%coL$qU%>F%a$(80~vH}HCkIa;P7Qe8)^E^!Kf>|QUiyBpp|wBg}-u-FV zHsF`Lc<7d`iiuzCBWpX4Uo=u>Dc2OXrEjNF$azhB+leY|Pd^`!gNPYvvba@!MXv^< z^_uL8tqr|F&LLqf7KbLntAW87;lHIT7KsNM3}+!ZJ=@O?(%@JHGlw;KjfZe?bz6Pt zt6(9% zNp#lME?|&}uS)*Z9U;UfsOxHJIry5bvNbKANho%ncaXc%UP0tLgmaJC8Y;yv7Ap|e zX$*ecTt8fj)$?cqlm1EbN5}E}ShO~?+sX`_;ODAn>i^$*RWqfVu);SLt*T~`#U9p{ zJ)R()`)nY1ey{Rq^52D5{ujT)mc5!uBhovdPRXK~tD`EHguJHq zzCf}8){L&8pK6)2^4mv6MOL@f96wT)E{!$hF^Q!o!S8O(f8RvH_1=z!H4TmNB<|}! zCn)~=lV1JI`5qd<^@lw?WRkUDako(-0&y(n!?e+!j${z!&}7wv_RGskyysGPX(}2R z%@*uzh~gWHW>PNJ?9d>^_aQS5j}`eP#jTHp7S19X{Dkx#U3%SeEKXrkezyJ4Hz|Uv zfDkAzDwf1Pg!~7sS8(W|=RhB;uMz@Jp#ts)`EqVDt+5Fi>a#>6wBjN_bo7RlysTm1 zNFpK!S*bS5=YQeXK7hk0{IJ`8k-TWY+@6tfaFh{uDCu?Y{WQPgEUDbx#4XmpFt>`W zB8P_2nV7c$@k(CK;O4jt4qddM$yVq^^;dCC}P!?#$$G#F63F;6cat1&oA3u^!v` zoM@@k*$bUeJ-hLO0JCTAt~=DOO5oo~L*aIW90C=4&x@2rG%g-=un$Eopasl|B$SOe z5e=0*pXZssVL2&LhdnJjP~vTVG-S^a6bODhiC>uSQst(PE0v@&MG7U3yc!K#${5&~C_(9L~S`Em<3{-Cp{C9Fir*~Je0Z|sB> zH|WB5(6J8DPcq}iXV98<;`h8;IeM_p*S>rOWu$0$yF1lWSn$1K!D@|fj=!AerD}w@ zpfK{6Oiz(IF=!$wUQ2)Su|i`gX${ulRD{8VD5L=79K+hYz`BsJ!&-z%+}Zs^kZ!SZ zMB5zhm{d}KXlKiPU-`>*c@u^sO8CA8=U*J?LC|h*$v@3H@guz!f>yJ^F{A#n*p~Ve z58fvQz`SIn%(pyefl@>Tmg;mZX*Ap6Gk(0tFn>`C`24r&Ufw0$3Gey>?u>|!{Hn4z>)FFL7}%2o*@~^`dj~u z0JV~2)InZmH@HTFSvz>_{BF{`{EWO7(lpX#Md#~f{O0NUl0Kyi&B?pNGq6J$HA+en z@+Uw}0sOKwk6WdZI+mzDdvS&K23jc*%NwO2M7AwpZpEaaju3r2BUbYA7S4&Lw=U@R zU$+5HL8Hi$usr!Vp|@zorx=vH_y=2(=5)95_-Q6Pl^{}6JCg1ba2#B*vi_5$2ZGM+?E#FW1fVP7l4lgSemqATIGd_v=55@S0zI)n+d@ zS*rUxAy{qK{p2qD>KGaWy8VUzHZ!>NPE&FC-;jSbVG%*SGm>*UqXh7sFKy~1)Nn5V zd3biP|Bf@MXn_a-8od6bEm2Jf(9&Z(l?Bx9J`?wgRE{U&_miy7L$wZl>=14|1c z3uELf2G85vY^X699iaSL{?W2g{HQal&R$kt({~&U52K@JAH`U$fiNvJ_pL0>qHwh) z#3C;|bk@i%YUU;_@{eT@6;*md&$AEw4`wKEW@WKZ_l^{q4T7$HOsD&NsRVGS6xb3Q zSjY)pUW5W#N2LkJ7=sMjld|9Jaunm%XErfDyF2jJAz|2sLr}iG+h-tm6+ia!^yrZP zrk^v5W^sav7AKXyHmU|;|ZMWvsX%!}X%=@FXDjQ40RtFlq|yi$5=bjMH{ ztV2eKAX{q%TPuHcjv)JDKa0Sw{-8c?ESIvQZWYoJ&rPN<-Ij&X*bTOeJSDUVJ=7z5 z43EHY_Q=ntCl6I#x&n!CZ3MUzLV`mo~jMtCC&UArOV?9DG*?;=Slxm*2zo`QNeSl zVMRx7C{&k$z_ii%QFM1H_8S>Hc`K6CdtEy&0(}R%I+IN@Lr$An34#HPad7GBd3=HzF^~=Sv^}!=Rt76SgrlRhPFBshODQv%;O@>+@Q7s{i&Ec9PSW&qo_@xGq)dJ$fY7(qvO5G(2j7A zxk~#;;`sFoM-m{C&#S(y&e&(<)Jw+NkQ9#?u&dC#)gdN=^Tl95&xH_N(o5a2KaM|G zjS&AvefA5UX1T#FP6cA4pVg}Jb@1e5fkV6W_bo0#bYfW-w#xG8IBJf)7^4^E98ge2 zyMiws0wg*==9d<8)wZ`r-7jLB#9Oiu$GK935aDzM|LdX3mLF?#Ymrn{*d01#oJJi9 zjDDGhvll5;cLw(o&n8D{tv6)yELLywC|LhCO4mi88`wby)MNPvR_@<5;)Gt0ET`6Q8mS;n@8IMca%1 zB)@P278}J_kyd%?U7RppR*GJpo`GFH*f>fuF@CD5g3OPIie?4Jc3!3~Yj`#RbkeVt zZry`x<-k9{(V};Peot3F%N0&!l;sCfTj0rj^{v?#rA%96NL8A1rWpai(iWzb8f^(A zOR$|$WDC+Net1&BvYVATD}b~J8y6Yuf5t1RD)uno^3Ydcq>S4J#}N|Xqqw7n@ail93UEd*CyrBu7pXMtDR<=Y-QMsPiIP=Gd(_F0Vo5U)h8_+4v9?WOHlX%NqWr7+Nt9M5I=5JUnf407ZlSq?C= zQpoTGlycZ$X)2+|M@sYY>?#;P`w4=lb4Nnf=TVO@IInAczh;dEzb>YQmEbR>T;+a& zj%*sXkfd;7ZiZj32*$m+cs;42&iAZYvE-`1`s9T};^X7~^2~n9@3DUu^7XsTfNYp` zOY$__g{LCOeyV390mQRw`H}(Lsc{`d(iZmQcf#q11*;z3W-t~=F>D$w`JDZnZ z-3}}I=Ufy{oum`#7`*End@fhPru(Ir4vr-J5W%SeDnq4M*diidv9)lxMVFEyt+au! z5W@@)R!G-eQ>E=_fUS1USw9&FsK#|RDdru&LeA80_bzb+Q@U$PtMbcQ=gh{Y8HBvBiqA|<~Cfd8s=Ifor9S3=*=5(m zRnEqt8_7NtRCtT%^_|9e@^L&SPK`5-3*x)Al?FWR1wekg4!|&v+eUJEY8uPm-;Wa; zv2h6HuRBr%V6cVw?2sLHbqv%Ep{P?wx14W$S4mk%>(F4}=~Tb+xD=E}{{pL&O+Wi) zqX0#ciWrEDZG}Cp9^k;YjF{oMSszTS?bD+DjtZcvG++y80_oK8g{gs^R9wGVFb%t5^)Hr28 zW6C6H_=R$cv1iNID&-hJ?L~UH;q@|4HV0leP<&b2FTo!&w90eUuh$3P1lbai{WoQ@ za~O8|+r)W=5@ibFztgle(u6DhSKO-r=;1?6Dcs42V1trTAPa#)+>3JC200MtD)1&4 zPka7Th=uBhW;kSQa_f?ONc{g&fU?8vBfAFgc`X(`VZ9W9>1jz&`?d*{Ok_42eRNv6p_utqFX)mF%%OogQ6k_tE+5mJ-l~I zmU{j)?6xQ++7N6L5e3$6n}m$vFUhTPj#LJXoZlAcIc6HGr-|iqc@|_QXAZK1CSan{ z`n#j(D8u7{K2&bpxyy{db<7=R+5Qn?NNM8r;*o%yR;B4O0;nkc5shLPCS8p!`DS~z zS5qj&Rvx3^p_Gb#-|9p(8v&H#oc2g9#55uf;fojIb*I8=nlg@i#|$MMc)i8Q%aM%i ziC5j2MOi>BSeE%NYW-;xeulU5U|IwnRlJzRbSpT6Ilv}p#XQcZhe6PXMyEabHaZ_2 z7~-L2w+(KT7qcbU#jwKw5s~y01Yr64{!8v2F3!@VhhF^suLy{r@}(AuvKy!5JsTgP z>8C3EeDoj5eZ`n}QPJGUbwj1|4g9d0;g!j?C-g@2n=ci%L`;)@H%t5UP+=<$YYXQ$ zeyi+?9TJWFQiHe76FRm7PA+94$L_G zF5iyo-L3UN(JnLoH7u{qlXiJmadv;i)NRP%yJGux|FT+PPConCZ6_-(Jy-av-0OGT zp}mSjkfMjgJVcHJo&<#d`KzD8>}3dJSjB#dpgei+ryV3i;fkhWe*u*j?pfU-~BS%>=69PKK|I+px#WWiKI-^TU7ViW!$+KY)bby)FR- ziDoUgvlY;M%fn6o=8z`Lsfkr6#Q9XaOb-2=xJP5-5td4emR((Pz zJh3JtuN2R6up$&2-*0nCmru8Y)rGTm;=Lbxcp@CR*~>ndB891~VlE@{;R)=fB-y3P z(gpHKHc2@VY#&qKGrv!Ux4!`i5YcBvFZj{;Ah#W*6vOMnTN^~{9g4vVi1QS;2VdC- zg^fvCqxGGPxG5dm@`T4pv&mo|C$v-B4&9wA^69qdr9+?w>Hx7=pOWprtBQkvOWemD zXiso(UQB0)5o)Bx5#s2)%A(%^BT(UB8>ca1a%%J1#ZIo`0Qt1IDxGI3mgCReT;b}w z?Ylwe1i?4Q=4-+_osLo$7c}|Zq3iMH$!5|V^fMzwLdq@fsh>zg!@jqE?#13uXfJn} zoE2?A0ya`RPbX|_9IqapdVOUPzIin8L6_({@@5UPJ-4)dZ&aSYPmjdt#m>{IgVvalsF(K*ORF?mMecBIu-O^)SvF7upL9p z-(@4+8=tnZgAE`?YxZtAc%Djm>)eNKC<`(a_oka0Wd&eU8~{uNYJcs^9-Nb| z>AV)-Y+NBXBJ1$zkDsuu%Z@J#u`g4HuF~AxL(og9%X`at;;ctQG%D$%x|Pm}ACZa4 z>GS7(%6J$4a-TLbe7KCb#%sG=w7L#ij_!Qt6!>ux)D)+gqai*p zZF!g&Tw=Cx)@9k`-)Oqa-%CU;?2-Poq@)@sM-7UR7y#WN3wYgLDO*jg_H6U|+5f!v zSwHDzQY3Gg?Q?n2FpygJM;t-MT^8eDQw>nLefSZXNJ~o-Oar5(oC%4B#l+>4n?XtJ zRJ;AfzRF25gsm%mKJS&ds6`?NAAVJp|Y&a0>DT?Q>48n)ObZF%Wpen6ZklB-p5o$C1ybOP}9f7b^19H+uCXZy8c# zs6nWB+HFj?gOyWkgJn7z1u6~9i6qVaeGuvp80{`g!&Z`9*Eg|wMfidRC+1q)8WMAM zpn&#&lra*5i!9|m*<8*CC2^8oXc0E}j2VIb6Ui=f$K;24x&6TJY{);NUoWsIlpMWU zl7BME|3^d#r>-e~rsEJQ>Gdc!HURs5NhzeH@~=Qh@7?3MQaQi0_W^Yj1QlBb0g9by z!yaP58jX_C)Y)=6Kd)1rkr<5`R``QGmOdk~s+0d%!#1Hf6by9R!UiXYQ$eC2+6RXQ zfz%s$H!T;LvQtC2sF2dFnU^OWhEUv|;I^Zst=G5Ux2?Ckil3z)!;=!T3CF>r^nk`n z6wVdPc!7^ET$}5!tF@7cejY!%fOVn9DOjjg3H*@ zTpPejf=PtB$aoA$Ogz#UM%CBWXZ>f&^6m{m;-zk(g zzO$;8G5y=;9O09}R)d!M`Q8k?Q*c5-s$#8uI23zIr(p+3vBkrPF%Z27Uu&GE-rLu8 zKhS<&iuj`*M|D6J!G+P&HJOEi`h{OI+b4DGtk4K0N4eDaV>&Ahy8<{IdlxQ?L3lmD zkN5PG#p7y{)Gs!TxX{3$)vE2=C1Z-eZ}hUsg08WICE+0NJloDsqf1x=Cu-8JiDKWT zldxhhRAWNzffRTdFiv9Lh*7R&A9D?FE&7|{DLw#4Wq;dRozcoRt}QKH%O=B_$<1>p zkxK$)MESe=pB|w;{Vk#4v41QqixXa3pndF6Y_VwH*^{zH8euN7DT`}CY>~X(kFH69 z(!p7E*1LW^I;)p%qd!X~4y7OIV&6W#vGvl z3rB~bf6S}=Ho9FM3@9Ms$;Kt|nC^cFS~?3XzH5gQ1n5xIDex!-pIAMv3K_57k4DHq z8I*9&3T2=Tg?q=$WfX@_Fa5)MF=b@-wEvk~QO_5k&g8PjD|m zefi#R8|l5>yTL|Q=5X~3fAbhfyh`ccC(ZVHHr`6GlTia>scTSUm+^J1LbyG-$Uiwq zrlXcRE;pk=!l&tFc6cJ|PVRmM^xkll88R@sm2eaoKS*at6M(Yq>O>^VQ zdN#h~)`O_wa0P_0ajkJwDc^ThG;tuev);5#%ZOR;ZVQ#bNI({^R*v21F0W7mR#1|lbH5D5~L$<6iYmtCdr}lj(2S^>*cA^qs^1+&^Hii6Zz6P(wV~ zsolMMQxkR+$;TXA$3s1@aUV)#J#`R3nbu=B~;kFsDU3x5F^qpSmnz%`ou z?XIx)izlA`24i=j_E7I|jQ|L;kV~g?XyD6jkd<=jCYBVVa9g^1af6ak&zoEl`O#NQ z%?AB_6u|bYsb4DCe>unvW}+N}N3K$2+`0Z{&U-sY4!PUB*x}LTW|{fQT0(H$lsvkF z(tZNDUm!QTpl`6)<<)dZXUG-2?WYQO;MGnQxHQk+_3@_B_ zGysRyaOLJ`iNS0)*o2{E*3G~FfOCs^#mAkW$=V7Xxtr3BbH!gKwYgp}W5NtkfuaK~=4xt^Lg*Bz#%wx0ffCSAzk z(J;OrK)IM8xPc*W4B=WG_2wOx*3n%g>DJmEt(Wv>Sj=-PTr@Fan@XZ|yzHvPPhW$ddsf zLnOHdKQAMJhvgD3KHeiLJh~3Pbb+0`p}S7*MN>l}uo@B@IzB^!>W93L*A@(aC77aj zJc6~+AoZhSHhb>_XIB3=EQh4gxC;ovrIpk`T-C?-)9$-XM;AR=b$RY$G-{jFm(;4^ z*k)u7Ck~B7Wf%5*U!Ja8SaMd#r$k<{Dd8?c0o!(2aBMVhR!;$j=eI|Yqfv>p`jozX zOc+&I{hFmbpA%1}@pKU96)e6nw(u80e2|ZZ>p})9ZuQN;zN!IKZqh16*c;;d#96*7Ew?Mn~1#YV~nbyagnxzblzoE5NMD zdOEvtbCt&&=Aj+I?G27pYkNd;;9SZxWzk}+T&m#qhnwqiw$~+TgCiX;x@n@1#{36X zUOIndQE6%+F5W1xg$TfGuE1x$;m<_Ih=BE+-k-03zaZgs_=j6; zt;oSMOovKPEK~XoxCE_?Er#L>F?;&>B1-0Sm9xv?yNb)8=|#iQ{}u&4(99mW9uYhK zvZX^OXuQV-!;wzk>)aHFe$xDj6TG>~3xX%2hP$z-YhKSEy>-eGhl=-KH#fReZQnI?ZJBJG(}@)0E)uCBMWd>=YWFb0_QQ z7_wn4nI;n=m!2Tot534N^rLhH8I8*Hi+&(Fj%m5kPLabkz&l*az!ob(Y-*#8;;mTL z`63%U{4g#EnjF)?=X|Tz!wtymBO{^;72Q4mLGJDREISwx;jyZ;YhN^Nq7s-(nr8C@ zbDTLLb96l!jT!@>v;hf^q-*W;GqbD4uq9ZFqt)`zw0{sXKSAQ(#+MY*_$0}Bl@(ID zx=fB$V3JJ8TTxW*czpLLj@29BIBo@Vf{bmXw4!_+ZmLgvcF{V9lD*NZsLaz6z!$Qk z>-IrD{{-1gzSwen68X_9*ONcVSc$I(|AG9y%#gS+1E7%+!5VT-gdF1!Fywf*8uy37 ziC1vN*ov-e8>xlUaf9UJVA&=yMVd|}E`!}urqE>+pr}u5U^ZfShD>`!Q?Q}%#qRi# zWR2^}^I%wIv0UhG@%k`=KrJnX&NbWnhFvB;ad~VRF3|s|9xGbz` z2p8QI5}~SsA%0Y_jX>(~9pnCvk9VL&rC7g0E!6JCs zlOs3bz0vZc#%bf;e|drr1qlhvbPDQg+RRsz5=Q^tuX|XQB1fVz&q_qM4Pmy4dv|sU zy~JMmRrW@qY&$OA*~~vvLCh935i%V{(UD^~2A0fSE>Li7m9)yaEWXiZNXl^HQOW^c z7%r=^!rNu#qEHl@x;Zzv*X+9{J!yyUe6C~V{l@z5MF7cE8&@}g2{?GIyIRhO-4DlN-uob-$A9lJh^xMo(|Z=81$jdT?Qg49ZoDwcJRXd0R2VuYh+)UTKoXGpSftvG~46*+3xx{8O_z} z;mtfny)ZCtb(9-5w^*YX&BEnR;q?Z3UC zAxH6tQU1)mv`x=GmeuAEalwKKc#u~8lifOA0d3y$Z#Jo72sCdHZI@Arw^vdbn*S!z z&jONLS4zP>MR%X#JD5w&9t=zGmW)WeIJiasOm8y0m_I z)K(Uuz#Ao*wjLoGniG!MM%7q+;)RyT{xwG}=#p^Obf3wY*GaZ^?|#l) zA*ZJ3*Ckvlckpr4@>x`LpdMx;r1mk})+NU?T+qwKCnLdTZ%(aeP53lVN)_jjkY=YJ zD*4kZLS&P%6oCKu2f2x$ULZ6g4=OGa9CO$QzCuQB8U!s`a32yoD1OoMmv+&2j@r$; zR$er%?+vaO$o>!emwqu68VA$h%ECn74_yP1QS+g!Ua+O)C}1r;dw68lRVR!0-}dL3 zafaRvd{)deOc3K~$_Gd5XdTPMR6CO4v}MdD!kcm${a`2^0KIx}n*!&BCS*XmZImjs z-o$$)jQA|_+oX}Y%jaL%v-_tRW+sO^402q`UQgAKK*RJx2UX8O0I5Xfo73VJH+6XEpXdBF^v zPG&zT$BSftJOUXm?hQ*~XyNt^&oG&wRKl1ks?(XRcH5m7W6oKP3Od73eII&OV07lF z$M0}uCYX5;$Rnj9BV^+GVugiMTu!Rt62ZE`s-%Q>3NG*E{R+A0{z#0F>LzX&nFZqS zf`(Djb5A%-2P1QbI?Bl+f;+voZ%x$HzCh4!AHQTL+=UgKL z9{oWX6b_T*4c=1lujI%`UN6D^cZ+jUext4dnE6)^=w2Z_988l?MKAq|V-mfJ?n6ms zrkd88d98FWyxU>|%`Md`xi!UR5s(jC+#!H`O5vbL;n8fAX+GHc5EHl((*ifniD!Qdp|-Pbj+w$LOa(s{zNn@i7q_wM&jJMj62 z3AmOi&rYS8c&Npcq>{&76o5S5YKcsOlF9#cx%YdtYOa66yp=7IK-5eohH1>R9zH98Li~c<&S-*gFvthx^Rnm&fddFe|Mcy zPsiQ8h2Y1Z$`r$IZcJ2}59r2^hyUU_l*u=fSRCKLt&Lne%5}aLni?}UQwhM(A)71C z39CPnj`sT((#9z6mX9_m`XvU#+wH56G3DuFZv*9?Idd0v#C@16y62e#;h+T z_jM6dTD{L?Z-ao#x9ESX6dAz}PZT4<0S%67}j-gc4a&!WNMJvM;uw zpW8ThPyZs)W;htiJ%ceWg+aN_t;7kN$ZLVKsCtN zZ1^=K+nI~^5l@+kt*n*ApQBYcBuCUizckRioI;AA*D!ISZurJ#lB#MHl#X%}1BSL0 zt)`N>wFzsDldKp7^2@#h5HiCGgBTXE<1-!W4u@g4$#nJpuW5?Nv{#EjkdO9|oNb|P zD{b3}|KFU2^}JtttS>nWQN3T05DbJ}2Ywsa_yyCZy>PwH3izYm?cYefM5D!dm54*_ zqWNjAwb-&G)iZSXM(Wm*R(nnMgFd`Lg7MVb@A3HH#!m#VCf=&!Q; z4LCvpwQ+UkISsL{emN%aUEQ18$sB##i}m!0Y?FT?=+b2Y=A95__KOtF2HpN_OhOv~>N@ThOZ}9L1tomFVg9MAj-!L} zI$BKq;pxGI-k0ORx4n>Y>?9{;-_HvxmmWb}X@Pi4=1-yv1=<#p0&sCVGVAm(9varx zI?XIpMs}Ib7o1pSUL;R@yYs)ktV~zvnW#JmoPUl|lCg=Kqbh%HL;Kuw<7AL@ei*Bj zO4GsUnt|xV6AFloaay%nMFZs1Fi=}6rsI+2{PD` zAxTp*FVx{VEg%3 z_B4n$FhCgJP3k)iAWRE~0xr)FCzH%pv|x1TRqsJ~7~`#)9QP|9^o_2{#HtA0QA8x+ zAT9=pB-rb6p@a^kceKO4?@}wjl@Yq!(C7d2l`L9a2*tJ$hr1wzDHdc6`-jGI5QB7= z;8ux>nUQo?50D5mz~4bXYCL%QCCJN~J`QE0!GPUqzb{a*NV>{NB-(B#)`mOUo*OLl zRzuCc4D6BypqjYYP9`01wx?sxwchBJ3!NJH=Ou#h$L;t%EiKq1ZokH}&M20djEW~^9hU&g?|lAydb|aAM`} zzx%$MGcfQh-Eys}o|)l5K-pe<28IL^HZcZ=8I7zA0%-}13@wro3=D~63w`~*eCxOW z4}-eaLBP8SvEn)m4I6I#E6IHQ3Ih0UmL6nc;3z(L=_&;9uHI|6Zpxz75MZ5FetX-S zZU%k zZQ1Vg&y9a8F&uajv!SFE0xsV@{&-@oAVWftUc@dac=_&c-FXZv%64N|QN1^Avpy4p zPu}(4%nS@}kHcFKMm#M#iD5*IT{_s6^-uU11i~Jh8-kq&4C$Sq;6@{^o_~J%w=@Go zThRUYSM*5 nzq||#&MTK+UI|VqPq}B`Jmh literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/shader/resources/wave.vert b/SFML-2.1-osx-clang-universal/examples/shader/resources/wave.vert new file mode 100644 index 0000000..5089cfb --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/shader/resources/wave.vert @@ -0,0 +1,15 @@ +uniform float wave_phase; +uniform vec2 wave_amplitude; + +void main() +{ + vec4 vertex = gl_Vertex; + vertex.x += cos(gl_Vertex.y * 0.02 + wave_phase * 3.8) * wave_amplitude.x + + sin(gl_Vertex.y * 0.02 + wave_phase * 6.3) * wave_amplitude.x * 0.3; + vertex.y += sin(gl_Vertex.x * 0.02 + wave_phase * 2.4) * wave_amplitude.y + + cos(gl_Vertex.x * 0.02 + wave_phase * 5.2) * wave_amplitude.y * 0.3; + + gl_Position = gl_ModelViewProjectionMatrix * vertex; + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + gl_FrontColor = gl_Color; +} diff --git a/SFML-2.1-osx-clang-universal/examples/shader/shader b/SFML-2.1-osx-clang-universal/examples/shader/shader new file mode 100755 index 0000000000000000000000000000000000000000..f43994c650a65d2faaf9ad173016b808ba556262 GIT binary patch literal 123576 zcmeFa4R}<=^*??$SztwKf>K1qvT9UNgai>orELOP*hm7A*P!4Ml7&R`=4ONO1-qDR z$a+~#tyEf|jfyR8`L?l&MifkhLR4y_rAn15ZSm`kp*CuZ@ulYf`OMsV_ilE<+S=d$ z`99CyCo^+q=FB-~&YXF@b2ra_wsW_lC`oWb;F1+36~UVe;0?1OEg;f*5q-anX>f@r zp@D=35*kQoAfbVT1`--bXdt11ga#5CNN6CTfrJMBk7?k=kN^6azVR1_0B2MFQxqi_ zIM0Utzmf^(@f2jwa$W11HTfH`F$h>)r6`os zcpQTyjloC&4HWj2ddsW5J`sb18I!9 zS5dx;N{^y2md8rZb)Xr+JgLl^=sQ%*uZySjRInLj>lnWxib7ctvhIRjR2I~m>FxhEi- zJyB%E%BpMvhoqCyoKfUk5nm746J?$*>tw5}$>@}n)#w-K8&cg9rcXd0DO(}+w%l4q z8IIWS&$H>3KCjn*OSLzi_Od4$xu6u&E@I|Ass83xdn;$<#iuOubh;de%yzM5BNkoP z;!7_@&yp3r2)XR@g}X3TBOIs4TM*}SDID_|KY$iaJP8dXG?36hLIVj6Bs7rFKtclv z4J0&>&_F^12@NDPkkCLv0|^ZzG?36hLIVj6Bs7rFKtclv4J0&>&_F^12@NDPkkCLv z0|^ZzG?36hLIVj6Bs7rFKtclv4J0&>&_F^1|Nm)VVd$;-ix;guHX7fnXcXi6(2fNk z_4kK^egEw5582c9=cEmDA|0WFAF&~{JMo!<_QR=)65e%$Skuz9PZ0~<=C=p)M0T2#8;f><=E&)6}5y8OnqG`zfhHn)g$NldhnI z^id&yT55QQgIJR(=LmjWr1f2?D93~3ZS$X|273XZ8d?PfgrG|p3UoWKv}?~~q8h;# z9qXSctOkVw0v8w++11S4X=LFzlV#pR8B`Xc80DTpxu!j&|5xPgCgq0L)i4RAG$i4| zzmB^0=lG~6^y2HkK?@su$Eh_0y99?{+f zLQ_Y2d*CBm?ND`ynl%i{?(b@vl{!K^Xg|KkCcBUSRJG6{4ZBAVU+M|ZNJWK*h1V{jl7fY_de&wa z>FKKCmn&L6_=ft954M3!n4LqtX;_bKW@st21p%S+(0*+KtG=c0V-$tSO=1z|vxDzQ zB|(^HClw&OJ2fpT=VYE7AxDte(aSmVu!IZI(s@pXC>ibHEuD;u;V!&O%mAqD>BwtnPifF#v+54E_R40oq@9X* z2UMonQi7W?$*4h=4z|~x#+<##kty|kgKB@P1`i;!zR&F+QQtSqe`9@LTJ28aZ3bRX zt13orIc|*W==dlpcj}Ab)wUmcGceqnP?HYnMqYbfD7X|! zFZJ{|gU4$Nb^1Fv@QmBn@mW&OY+?Vz(XC#!*gNS$IQBqc@5>-0tX&l}Q-b$``ONNn z;OlhrT0af-hHrvw+jTki2e+9}s}7|+zQpd9+C@LC9U2PjBA%iyamYv^PmF0%c;AeRCrmsFZzS;8)T2?6?i9`) z`?}k(tg((qQ#<@qGmfw1W7?BCqBZ!kf25kEX4yj{unMsj2t7aU*^ZBsW=?&@_o})< zRO-%4QSGoBy_~Yvw~r15Ik2mDUZAfXgPn|q55UK2X@a_=3s9(cT&Mr+`u1Zxe{gXQl?F;eZ3sy? zXIdoD7!4nTFD2;(bTUaqJ|tNoBslfA!I&<02+84~(dGPOr8JRFx57*@b~Sx^iX6uN zrOsC)n6zM;rTL#{k~BKtZ!SigVmAH|Ia(Hwn=KE{M;0%tKbES&nv_DdDa8$muW_ig zj?l>Zj?tkxcFY4v;}*QJ6FBPK2jGhVX?GW((22Dp^U+o>jfHj^w*#BD-uM`cLDZc{ zuHPqi$4ek%{od5;J_#DDbVYeG9W7L+BN4Fi3{pN6$GF&f9GdzE8hc6P^YU<22!iLL#l4CWPdt^&d~iPx+>fs_>~)=CuS1a>o+Zrir)g{nQSZN_ z-f|3mhY&j2-3X2Ku3?|UG|0jZ_KTd@2Kq75%mxbI@u_Sh(Lg^EG9Nm@c(^Ad^C5Eu zn8uNLkuFo;1&|G$VJ71Bdxz;0F;gb%7>7`$*!KHy#=q5mZ$|WUkaW%UnxT*JLLb+M z8%N^sMl3=J>)v7F4K+_ryNq@| z)Lq}piPUw73EzPt!u6?~&0PnX5D*FJOhD{f#P-)`C9|~%<(QCLhr;!FfQUQv0_t+S zMVDPj>HaMHrD0m7<+4$$A# z^Ez2P1cIs%hp`Z1;rhwCs284(JXwcl1t{wGgaAd|-#?ECM?=Xfl!oGyP@MMpE>N^9 z5lI=Npgop#R{=3Ho{Ij(4h7>_h#cL{hq1I+HzetFehfOYJ=Y#v3Jr@Uy)Imvicv05 zm#X;3sHtHb&OCVrRPn*X7#XqOVE5^tH=_Fj6u>!)#f1FzS zP>Qv@9%0XFRTVN`<3M9=5K>}T44+8KHHS_z79$f&;0`1wf)H=+_PGY+wg=F^0YW z`T^Xo1F9M%pKxFic?xcw(q0^2CAVjRBDuANRWY)J%Zcx5GkHRd!=iZp7%`LQDDYH+ zECVAj>-i^GHjfHJZ-g85;fbmOM@8F&yl|sF63Eof=`4v~ahstH61f~~Lcvl{&3G=n zYa7GYn?qqy>+nWI_Xjt_C%yf_7C_4dv{i?~LE^9mx@e%z?l=j=)kcn2S2c1>tR2k( zSrv?E!xM0Z-~Cf#H24rzH&BV{U5|bXJ*C5eCDL6#(LuMJufST7jaOh< z4o2Ga2#!WlgYAgmSR`u{bN1>vqr>3?0!+=$WU-~l%uXk?fY4Y%d4!yVatNXP@T_Ts zQVC54WP{5E$KmerOiH^;^pqxdNjRK}j!j%r541oxjF3TKqaGoTK(ihpn?REuA*Vn< zj|gUUQOv55pH+HSxBxtwnzjK^z3Z3I29`3RRIX#(_HY{)AWx2f7kWRuV*xNfcsTTm zn!h#F^eGa<`P-}{n;g(Fx$?)h)VtX}YdcZ_hXgDQAROEdm9dqybATmmp}u4JjQURo zr>y@IPYkyRORq0CEPYoK3&;~#4&!V0arV=Gi{IZ9^RVc~WUXj_1j$IJ`ZX|g1NUDQ zt`C?5>mme)uvkNcl=fqgpp7*lO^yJzl*h$Luy!v;5X)5S1xn9kIUy|}JQgPaX7x@1 zp`MX4_bTQNmGDHs8~}QduT4h8SdWxzkOeP?Yg@vN_v4^Mc5~x>B!6*GdmUvkc)=iD zu*yQ$h!0YhG=6;yrnZ#A#&3#{=XX>~WR36|eqfa~dYpwHWtY_F{@&1QDGhT`r;OM4 zyAGn?Dr$ZU8g%U>P{P2~20m-2ORBEN7@4U@S{b=ok8EdTjvm>@$UHr=HKQLRWoTI! zPA2!`RMOjqBgwrul7zdqJ!LFTAyb#(%yG#J<9a*#>}Bom_4fAK4gnh_799lQ!IZ^E zf%|9F?*Nb&LW(6gw;Vn!4ZvTJdITYIhkFlbEvP4OTtFOdPy55NLn7r5%MLT~5b#_O zyU+!3hr3WL)rE{DE(l!c+RC(}VXRRw!l=s*+TLIbU3C^Tve2=1kFeoo2US;>JG5t( z`YWNsJ89pcj&bjGd}J?sj*?IPZOWY~oQi8()W&zeuD9T|BSOm#@__wSZRaQuYQc&-rh{K9e4^oV!3#JZz>GI^6NDUs-yZ&DhTf3JeujgT0B;z15NaRHj z(awY%a(#&V6ZOZYiT+U-a%pP5Lp@8)wvWSJ+FsU2-OpOvk3jLAhUG%&MQuC9dXGpB ziPTG^wV&11)hRV&Q8eT_CNqT1VI6KeKJ~Md=^tXUINrv7=)bgwEMo9>gN{P+I)C)fAQ}y|$AyrI3YmS9J8uy3L8z~J_lR)pW)Dh^L zq1wZteQj*1alPZZLarlW`^XRuN){eKQ-#;|(m?Z%K1pl&@J}7@I6iz0`Qfg^#`oa9V(;bElYBxM32Cplff@Bxn%FnqvV z7~~|u2Ml8a3?Fc+fZ?awli}qh!#;=SCDFGh-L-xQXMA-{Zxy&Viqo3~L5I`Z-BCYW}gi@@yNM@`h|w@1}u-Z*qhl z8$u=0Hr5ZJ`od2q(FVhhB{L9f6WGU^V`|=zV`^=0C~xpFP;N**EX`zn@=*Z{U!SA{ z4N1%zB$_7wsI4OcRtM`CT-Z@O`NaY#lu1gTV|5 zEw+c|Ixs#>eZzmQS}*7+Yxgk3Xpi0V+Z-RgSUd%fp3cYCgdFL6*nC9^Qi1eX8A!@|^Jx164oLlr&yI0%=r{ zhUI*SN1oR6k!9Tv03)&=7vryfeuUnlifst?n%trf39mCwBklxW^$AX1sPYVhzPgUn z(9~Y@q~RXMJ%~Aru~}j|x)W$< z9W`+6Bvc)n;UV?=#g^eo;6x6c)E@~UU-!?}g*)WGTt5amk#L(q0B0yz;`K~|n+7){ zBCL-hn8KbGCG0j4GlcyCV^Y}P60&IO8bes-onpRS`Phvogb+ftye8DrVZUrS}RtY=+E zkJkK0C{2jt5&%ExBU`w;<@WWo<@v z*K|d-cgVF}>w+3W9XrPad#?HLolsYYHm2iahwa(2XPxLR<2vw0A8xp7tM(Hj?$cTr z?9sl@z_m^LjwsGGuUP5gSZL>twR6rfNew0`9)OJ7hf@Sl+ed1LQN7Ti-D?AZz=!YJ zUXyI!8A9BCH1N1RDUa`AyQ|B#g$|tz!x8F4_VY0WI#M3*0D)o9fw)_s4Tlb}d2z_I z5_`Dz2peNAQ^it}3e#4=x>VP8cS`Wj7;Dwq&Edu>9n4_wzVAMN{Xgs5o!-rMDR`8~8SET#qk!ivFTaTxLRZvHdabB*LJ=eZV@tk z!<69=5-9*i9o&D_8KU_0jT~DALz8*{)JbEhpiyAb=(N(fI6_10P4(MiIeJ;Ao{d^8 zF<3w~ze9GovDhTprjtAsV*O!RtM-y!F>L9UG_KGq))*t<8^EW8JAq!mcd4=CLCQ9y z^qh~j1iYCrx9WhK33ICsxB)QRH4C8@f@h4U^~XlB54*>P@(aWHsoainKg7NuPimhZ zN`9mGj?nD?a{jzdtv?+vupI28KGGt)VXp9yLt3UPH>S4L;O$_JzFno z%y-Wr)tK*8RS?GDh;_@{FG71$T-p^(1t~PsMF6!bcqf}5ev0Eb**lHH3=~kb(@3WA z61*+vL>>42%0Hn-V}AG$u-Z6DM>pn&Kb!(Pspop1;(UTw^c2y7Qr-819bSh75U6*5 z6BKyHh2c%SuA4ndZJeT0t>@BERgb_Iuf87Tn(-v}U1UBQ!3Q?S>)V0N!~gnD7K1$3 zAvru_6v2-jpj>;{I@w%^T$6q+S1x zL^GE>`-C!#_iQ@qCphpD*AZgS?*}@inNMjp!!y=z#`tB*!z%-({hIOwg%Fj<U5PcQB4+we}=zbZnstV!6TZzRZ#GBd^iZ?k_+pGS|68cHKwl|KD*CIz3@}t3q z<_8LTE|7YLXk!sz+?kf9@r0dC(TRGA_n~6Fm8U@kJRf{IyyghedXOz<%SM$)e4PJk zHI}QRKGrzGo)O~k9wXV0!Th*O6R&wh$L#vvPPW9V#)0*_qKzY;MvQ{GeC?2r6h!7Q zWQtdAD1)MF_Y2!b&CUTyISbo_oFu6oN1~XB^Ymf7=M3C8vR3LCC6Sf-JwV(@(kJVu z7{etTDV(+)QR=A_q4o&8xbwBtw)x-o%>Csn}-4r&t)}hS=0b^1}o|t+; zym$~wL6hG?c6gn_12#d!m|%?=o|E~y*I?tE>Gx`VC`M{~&ADCAT*5itoI$|=|36AF zcmrX0U5d%Tn0-0O>PrK8QoQaBlgqtPTuhmNi58{IDzfYM8hU2REl4q@$O^*x6j=nA zsyr8=wi2GOSABkL676|{De@;+xr!+=W_sEqJq7WaT#wQ~3W1v5 zA6WA!USMuOS@8~HCO>?V0|uy-0b3=vL3k4(I>Q>{CFYqZv34JuTKf=KEDYgU5=n|S zh&A^KPUh0|IT zrT@Y#;pYh7E&M#;7YKiW@C${%RQStT#{P54g>zg_ryh2JUs1H$hT{z2g%68>S~9})gh z;cLP_Cj4IE|6TZf!v9qG$^+DrUHA^+4-@J9%Ll<-Fj-zoew;g1#mc;TlDf3om1 zg+ERBS;Ef|zFYWt!Y>g10^t`5f2r`73%^A8rNS>4ezoxZ!mktl?ZOYhFSX06z;7;9 z@N~a}Bizz#LPrSQMCcVl&4dmR`aPj%3E6Fc+6XNo^b10(32i0xLqb0w^lL)Rg#JdT zkHZ#}>4er3DkF3!AudF_`F6RqjZh__cL|jcD#5y` z`&vTl2o(@|kkCv*y9iAq^cJB>gib#N&{#s#34M)_kI)E0&4h*$Y9+*Pc}ouyI*!-q zrQ8d3A0u=QmMh(VCN!B4zy2*PBJ?65ZdJSY66ztelh7GhJ9M`ax`fb=30+BOGohJ; z?jf;mlN7bXc3{m6Url$^%X$V2`wX(N$6HW z69~aLmF_eXI-AhF%uNNvO!=hGK==$^_{l|<=liRC71PVhDsNOW7Z8wKzZb;%H@&bVz& zi)ZCSoE3_H^L7!!14NsO&c%bQU5w--0>h9w_aVXszG}A>uT0Ht9JRF{jI#)2ru< zWe)o|kCFtn`G{~`aV2xOFkvWi?nQ)5x3WIZB0`0Hli6IyTxR5)fj(S_2#;x%#}S!_ zFrR26(UZAR;pv+)9+5PJUPe|S!YVW|Ql&=(fi;Mbnw`}Cg2?#@?~IZslPM-Z9AMCNRVC0vZ~w~S<>G$ZG8U2roZUIAktrngU~BM5tcY_`g)?0^2Cd!D1|Cf{Nx|HEC zx8Eb;Mq~^~+RlY{fkc9O5ut1XjYqwV@I=+N7#{T|o;wghx0Yxx>1b~d?GNxS)v**i z>cKuIsHGu7Y7-FJ#={$Hpe;b;QS=9aHUt7fJoz9IPyeRPO7htOKy2FY!6_;ndzpA- zegk0A-^{f2a5NzC^ly61mi$veYle|VfIagN6XwF1)XEVdowwnXHG1S-M()-l?=wO% zP*>$RBhTuQj~RIljs%*(F*yw$oAgqIwsG)iAmYhJ1jC+03m{_F`r8U(`XlScdXpqO zqQc#}DQ*9zUM0Dd$+PM4AwaF)NGcU@ELFt_wRRz#cv|7J4ew&HP+JQO?th%fkT z4tSLJC_h#GFa+E|BRst3!k}+Jw;dU3f8a=O$+pd6H3r z0Nov^q*4MmngE{w0BXD$p{)ttiD+Fe(BTo_ptl@O$%SK;#j^rFO{EUbRt+zP*3Y3% z(YbyFsl`KpcJm}c+Y|6a(=+SaB0pjmw2kwaM&=f~V4qp6~i-)^)^I^Hk9oX(j%ua!sA@#oX*I@aO5|V5gOQRIPuU1NID5Q zHrn@CnGOJvIf&eWFq!LHQ#-N!fM!klq5-KeOMU+W9SW11fpqZ@prtf0#y(Di5>FX? z(YlP?1V^IxG13TkEu02tI|9#?29n{4=$++7qYUVerW~x0cnDC?!%Wx&k7|995srGK zBXXWXghRA=UPgp7#=8h@{|hfhj*YhDdyp=bC(2NZ)J!vz18^K(#PbaNF>sri^9J07 zaNk?mI6Ax(N>EC4PFs3cn5g~3{evdh9OIqU=Mrfy7;jW;Zm&KD4;{nBF zi3M7#ISKG7f}_}5;A|Vrq6Gzk9Y`>@JhxO!wo0ErxcFXaiTeC z{>=P5=ls&560cA3d26a_eZ^k<8}p*d8u{P2{r;7fbicRGf7yzn;u}}__z$}$R9CK2 zX4Lw8-b%mIEB0+)cPa&-Q{yc6uJk*LDodQcvQ?#ke7>riYn=WnXK`s!qToMe=qib&g!Zf|7DVv!UT`M6!c1~@L%37^5NgC3+9oe67T9Vh&~{d6!_nzS1A;| z*5_4ZU7eLx{-HIs)zwu#zqdrG;a1amsdI(cZHkx&f|T(elFLj_S!Jcy=kXPll-1Vg zN&YH-QMr*Mih7F5t4oWlf|Brr)n1?9k|VB4l&wIC+6w1QwMbs+E2~^pR$gA@ zEE?}DFRJ1{0VfA%m9MyLg0sL^MUG|uBCm6GZFzOAAA52%uMd9{hMGd6g(0W2w%qSy z>o{+yg>uI`YyHlZ-r7}VMKlqVTkS0^E3O4EvYs$Br>fFhY>}X**jtW@)ZB!6R!FHS zOd0g*D`G{w#oo#yRILOGfmSM4K}x8=>$H@d;G9#7>Qp$v6#ow0>#K57Ul7(?UJiwN z1^LpV6{r)`TT$g(QRal$HGb#|l)RA1kGgA6gMwDg&JwZwcB3H4{SU zRjw$isX_VTs)~xLk}8%iDO*)pR#Q_}!G=LARjq*j$sD~=RBa|~gxW1PYD~hFUQr*5 zPFJIDmFVvfHy4Un1&Jz({G=2SmNuiecUckIipYz~Ru@%3B@tUeebBWGQ#9$KwS5)P zaV^ZwD5M)@gafKl##$N15D`YSTXB^Ssv7U~RHtbyJuR~MBNvKXG| zL6LSVsVcAX$<`C1M9NU{qUWJ)BxO@+uy=MiuMdU^tE?H1G0^8PVvjB=F0QS>UQxrXMp;P-6Q0=D z4nmj?$2g~BY|bz>Cv$4GU8p39DHfqEvl)jqSSgGLBIog&s^H;aoaqPsiqd{HmWY@G zt7j|9UW5T49!2QHTDs*HMJYhoj}vhNS6VvFA1pT4%3MM!m#iyH!xI8D&Q!m2SkY{{DN3VU%+< z+SfsIqmVQW?mpy02a$Y$EQdB%HX`pOgl5^9k|)d7!4>ZA@8|l?%m>J__rWbi-rWez zJe{u-NqunRpXu-4hR{CbuaP=ga7Ls4ZNT{jagr@Kx(rUFX8~txJ8tMBwD%v2(6Pwr zL|!UhHJt){Qx{UH_!h37lbj`}h&&@hr;zLVrK{iej&~;LK`FCZBZVmmvT5{an`3V}22wf_EM;@lq}=XT&Uz24vdP2zkI zi^DoE1Ez5Knn^*I8ZoIm#W|B5&_#>cT^z&ipQo?qA>ijOlE zIG?_u_ltfDj^56cm3Na0-;9+NSuu|jLbp7CWP|~@0#;(cbA#NntKkB0cfs8U_d~dCaKD0k8g3t47u;)bN8#Ru>w`2TJ^fyjLW(z+f%+3O)6TmfA5a>TuIaX|c^0>2qJd>DTS z@pe7VH0CvsJ;cpITUNu7{=g^eLGY>uO*rQFBJA}cjPO;&%?fA1GfUp3p!-0|^ZzG?36h zLIVj6Bs7rFKtclv4J0)1`5G90e(J)UYWwneIn~1!XV05HZ~A=Kf*eA+JN>-(->?O) zNvgJ0^Jsl|mdA4~FX(1WnuoW7Uf+Da;H$YZ$Gfr!?>k(|H9kkPfpf(SzW2CdacP+! z_jpC}f<>Zm#v;7>^wwqLJ>4xXB{0I8cliPzUNf)63sQOi*OE7R0p8X|QJONp8gDX5 zeNP#dURfowqt8<4VBgcq8NS-%{gqgrlT}kyi5EitTRf}NmB2>)2O3GJ8T(ycERZ)p+HMIViUGR^}&#bCkSY3kl!QJVVQjnn5Qy-I;gFL~jAO~Mv~x0; z)2EBqZ;OK=sNXk$I!(vg`htVt8s(Za@8&YnOB?UQ>WKBA;1UW*p{Dp7v=*;yS z@{-ikdYz2KxWvp$^Oh<#>D0`;c-1j8B{Lk6MoALMj?dP(wQpgIW7}vF22Nb|MyAy0 zQT#&#@fe~T*;2YDy=Ryo3&c0w*#mkOKR|HJvkr9&ihOt<@0v3|-4i|fVbI|BJXRTI z8>aHb$b5>=Mxw~*?KipP3rQ1ckd~!S7(>&X*=D;y@n1|XeN3Ni>hKFwunfhbPtW&X z?(t+yS&hpRRlZ!R*%->_%=b*i3-zkvBIeAWSI=AEQ33x-Tg7A%qy>bQnjdNd-7kzfjcouo7?zUA==Oew0a#)8W=Z#K$Jk;^BndK6zteEb;{6WOJa zY<z}OhUm^>3Lkuj+pOU#+R zs*0Iq_!^IGBu4IxNh^wK%8IexX5-}+&zYa$$;iMZPM^o`D=PEX$Six@sAaZfIz$C7lf`deaQ>Dk}D43sQC~8kp7FHURHRsE?J9suT4QO4~jFFB5oT zuObmGrrbIJQ?$RdSJ@MF<0bdU2H>JrQ8*$Zg%HxV#o~)D`*b8-N&-Tqc*vtYk~c+O zSk)%o9NIDe{#oDRg{#6AL3z*RM`9E<)l z0~PDLO#S+@K8%<(?fUQY7ajHB{{udP(V-YdMrS-6lVfzpBi0Fhek-T^nMvjD~H}vu0z}WGn;Z)O{s(K4P2|%35#5 zi=J>Z(t&BTy+CeGI$f;zLGz0Is@fWFMg~x#XSFGkix`~mi{R_YlP1Bs*eGSiMdkBv zsVsI?aXeGBsrFp6Wq5=Och zsln+SBL|bjN#2~64`Aa?cETGCK zWjdsjIniP!-dbkhQf7(=M}}p7wiHhH6yM=5nWi9mVWIP8&%Z)U z%G#Ge&lrM^MbXmj(da0>@iL8)f0vo_{Zp|HsKBQ#ey*lCZZ+R(f%RDrt`L z^##gXNy-rP3*|PwgX-rP%BwcHmHl(_Y~>NVv6KCu!BP9)LxVGwXND+txiM9KX*2em z${t(v;i&R-vbj6UQNn|jByQ_=*|<6FO19gZ`K_l&dr73N9c;I^euruQ;d#fKNngT| z%qN5F_AW|eH#XPGXG!yw--ymz?`#?{o zh99<*`Oob&uZPPDC>qqwEmMJ(OUnXAt>|=(1q4F4H2A&Q0q@3r?rFR+J)aM z{a=fe=L8%0N|JdN^y(1vCt$XnqO%V;a+F3#gnf%6n*EQVoFly2EV|Hr4zm9N(pvC! zHrW4G`1lkXDZjTe`=Sl;;3`rX zrJ4^>?)E>>54%rp z0LkAssq{sc{_NCD|hE%ugES_TDdM^4GgN=5d0?EBe?Mdmawsu4VP};|D48!eh+W|~J!{CeuIpX28#3vc99L^56 z84hKXPPoA+i$EEIa6Cd@r{#lB25buu4n-J1h;N*2TfqyU`E3=-Dx^OGYpMxYL6mzZ z%;eX-;sao$C+qm6OC|<>Y6L&Kx_WjQZV8*XnFDaois0gF+zRi_RlXZ19a*LFJa2Qp9gtF#Q2Mq1E*(Au_%Ax#2l%)SZ(9%JKx>j_C*aXKoE}z`i8@>Wc)AX^ z0bZ!X3-D1>sSe)<_%6!6_T?7l})9x!kK^VcQFYXp{J`;BzKujz0v;J@l{-gh7* zlt}yofcXQBDYk&PkA9f}<6in~9p?85%MG|1|CvsQd6%8PDJjarI)9|YPJF}Aro+qe zBOov7a68~X>oC7{_`ra%8XSzCM>?%YKTC&s&whdq^WOao9p=6LMLNv;`xQFOZzpck zVczi%890FN*I|BJ!Jpns8HVo-9>nj$=;^$(|C|o<4nKc-l=AQneXkDlF8!$(8JNyH z_UGy_@7zz+VcyZ7sl&XhU!=qQo})&Gd7nS1!@S>rzYg;|fI|ijK3F_`kmSX?{CPUe zyZm?QFuw!n)M0)raxO*=%EoU-DhZz&P_j_RfDU&(fS)eXVScNyQHNWA^AjEBHwTaF za5HfDbAc)LfcQ4yunzOPh_`i^-%R{nhxvU$GDb+^^V@{eb(r5_Ttpc1I6*&Chg(2@ zh7K!8FVNutV2=*-yO~NIJ_7tZ38RkH*FkRtRAGg5#$#KReP9jdagb~HJMi#iu0-y7hh-~*+;D1aOh0BJU4u@$(Sq6t;S6L2M1h)dN7_J1)3%3$(6YXZn%5kn&Iw+`z~A^TnO$iI2CR^+;`x<2ZyOg{2tdjg!jR1fWz>q{2XpO-2cG+ z0*>pRjd0(G`vKf0xXo}|;C=}ABe);K{RD0s+%MtqWO?ANhMNml0Cx@CJh=IA55heJ zw-xSTxCL-OgG;o*m(vDLW!8)tIA|;OR{K4Ep5~{=q+A)3k{Oed5nC){QY_Zxu}PC- zldgzOni887D^^Avxu(VxoD?h9q*x&)#R@SgmgA&Yj+0_JUY-#n#O1Ld0?i-jWt^&p+@~AH+k*7~g#PM$Q zVJuHp;$|3R#ETMKPcWI82^I|F#M45}NU~r>PJJzSkwgR2I8@ZH0aH4W6ssYTY^p}Y zOfh9Fil(>@LUQ^Ujd|#2Ni)mqIN~6l`R0wS$az&%a;$V_36o|d#gNOq88?8caRL~J zs*z>Z+oTcUW8j$5|3?==S8Z!ZC}C&|YL5p^Efq+KZxTiw`f%5yU0xV!W1-uU_<#Ce8&(Qa5mo!D=A3kuJMy z>{~RCc)>RCJuoQ8473^l+Fi+bMdRO+jE5;+DH<6k_?Bfr_7}Z48Mk=6E0Y5d|D(&2 zacP-j8|Sp>`x@2@l1ABR49k6q_y|#VPvWCQX*-&Hv}|AK`lHF~B&BfgF+Q3(!*P=S z@7#3M84K!G4TuD5y+!{MWRtM^m5TR8jZxyy%(e-p5V^ofZYG$Wyk+AC*E=#$m0Lm^~V1) zW3wX~jmTSFU*^TlNLSZ6SdCFnvi3TC#yaWUMN=o@n&Zhkm`=~=J;uE|G1XdDMKSrJ zuT3_uDMqu5u7kLFjHI}i!_0yP)|Y-O%;4}ZUXV1<<%D*UTYS-o=Jmbk2-iXXKpl8lQm> zbFWck$i@1-j_+NLJY+Jk!aRycmJtqV$|S$yZ@AsX=t)))*E&a z(t4_a8-1q^Xahctj{6~XEZT{_pq7|in_54al3Nt{z4*Xy!p#z5Wl37pJL0Ks>T&nc{f#FN{#vK9LL1}XP)1F{MXO;N--I)TazI5*>LH2 z{}v4JO@sW2dpAOlryzTl>sr@59+nSyYy;x)qGuto6AV0_1+GFKrdu9SzQvM2P>(}4 zahb)zG(5P`iEY&RIX>k_%0POBcv(VHpHbO(7}r6W5F;NhT-QV@JdobmXN7_JV8+T8pG({x1{6#e?^!d}zm{JBSfH9#3Vtr{-3O#meV=NYWdn(_{SPb}VoD8x#k&N9Mzlo-u9^&nh2fw?1rFInL$f z&YA7X$u-8PR!K*^AY=i=`Ls=!A?snzo9BvXx=2t0kU1y4z*SN$AVV zobhR!7d_eTQFO&W(X^e6uDI?Qk8JkD$W72#x_rx@bTYc~VrYEA=A}{6&9v$v`KO3M zUZam#E{{$?e<@pmY&82wz<+f!@x|aHii>-QPFG4Q+f6H&=_&83FYl!o?6ps0fcTvQ|lh8my0|^Zz zG?36hLIVj6Bs7rFKtclv4J0&>&_F^12@NDPkkCLv0|^ZzG?36hLIVj6Bs7rFKtclv z4J0&>&_F^12@NDPkkCLv0|^ZzG?36hLIVj6Bs7rFKtclv4J0&>&_F^12@NDPkkCLv z0|^ZzG?36hLIVj6BsB1US_2E+p|`RZXD`ZLn7v@Wd+o7N4t!^-4*Da$b9bwXJLKwe zhj+F8v%i106W>4YEW}sjPdZU!EqN+1!do^X%N=@CTPdQuS{MyqaqHE{485lH;?v&! z!2lAer2WAL6KXP{^?>+o`uRn}3*F-PH<6I|yk&fg)>9OPJL7-?9|#9GT!`=5;6yLbMRB= zDT~`v#sz!vpV!^{g9^$5MR}$Lm|8Y@hd^RY8~8QO1wS-{qJ2O))IpAG5!AP*x?-D|VcQB@XbOode5a;K_hg4|YLr4Vr5u&R>{`YwIRiY05uVp;v4z~M;xhKi>vtSVCQfq%ky0oK!$P(BvMTxk9iP~5)r#UiF>qIPKj=w?YK+f_{ zNOy-|^(R&=ysH#RAEcyy_X{kHuJxMRSt&^gxk_b8};%UuNN32_( znknT}J_f7(!Bhk&rR0Zic4VhK?r|L7WAhKrRXwRa$?lhW+~L`&5JDh_uef6-_=%6& z`#>@K_+X&st2dA8Nv857T3+Zl2bez!DYo=|1TL`CBT^_QnTB@=azLt#2E z={-p=yN$Ki@JsJR&;=o$<`79+TKi-L#z^vQjAA5k0Us6ksVvteQg_HqO9i?nu>wq% z73c({y)Da-u=ZOC9|BCF|BmiKp?eW(%TO3HZ9`ssq3@6gI&=KQ0Yq~&Vs~is!S(;S= zAgx)D5EQjKL0xb6er*||-J?H)dIySer9j+O2m%!2>w?CXIz&+~U5ppNG+K-gCeo~l zCHXgzf2t@eNNIf$IZ5`9i0Wq8y#cnEG6uhiLsR)W@j^jGuzy<{BcpvEN^>2JXl`gf z5eJE!J!Yeg?}b)c$abnMlL{C~3^XT_vIA?Jihl+QkoX5FmvjOo;ZXYr?vzWqK1jL# zd3Q&TlabeRJO1WOS^V+`*(sO2ij3dosxC|^Sxz)pKUY}}kdR|-0BxD^oIYrLHbHdI zKGcYd4zjLclC=D*)ychX^{c3FaSpfs$FOnibG z2=5|OZSG~P-k`PuCJC{`kS)dH(2q=&nNln#bPKV@GSJ0JC;YFAMRd_R$Ai5fFU3-r z=#*lSsn#~0LoE%Ev$gh9L;;Ig+$AKI3pt2z3C$2~8|hSbJza~?!7*@ zty5p*XnR;Hyo*zzRw1cz5ZA^KRtFuzLX?|;t6W_vK@Q_Np+5K8z1$*Pm%TK5S@!kW zo@IMr4?P%l_8lL%-1bW9V!53UxSRi14~XE%rL%S!(+Xu;cY%?Iwd@FF^yKt>id<-by%~*wFqC0nw zHDuE}^dU=v=+#vb>Az^#)=-qT!;W^Zg|6t|-$DX+u4O>dZlL!lykWQvh1@3v_8prYaHbg}) zd8(5c=QAVp;dR;9FYDfUG1ienK6m|o$FlC9neoW^Mg1}CvuZnYL!aiVBhqr!rD+cL zxZk-uJ`uA`=#aZZ`v$kG!#IfC11%6OU%fpoHFw;rc^KWW5pzG;FP{|m)Xtjm`Kmw7 zkvr}ccW7Z(e&`>$9sf+u?dVU+o%&{8%Jfe%+Vg|`PeD}0KdI;3c(~8#)W%#Lp7u{7 zYV*Mt`)aVeI-J*o9cO-fUU=G`tHbslxs_J)v5Yvy9YWTdd1^(MSRuWy{RS1z4UJB7 ztFHFkP)?d7KLo+^gMamp#1g_?zjst*RPNS*9G$dBtcTdX%epJ^vtldFc(&2r`*Tr9 z^xoN+D%jxIx(<4Psj|I~Kz=k-AKF|rJ=;82z59!_d2XmtwD~Lun0>raZ}41ow`lMT ziXD1WH28BD!X_y%WH{H90jr9+4sP71y49PpV(4{`>-48VzLQP;jqcDa;Qn@5cNc2D zY)@oA5@qlE-A4Vb_Wl4 z(dEw#eFiNJ(dEw#%@OUF8ybw%Kh2WzL-R*aA~$?}AJnY@{7?GqI>->yUwufV{HIyu zzaDA2{PXqf_mFLoe|~`+ZZdU2h1ubp3)XdoTgAzM98Ny3k+Hs;k*fVovWD$Du3Ogq zC&Z%8XN11Y^UnHXu<=jw!nN(##9f2!Foc&U4|OD?4hqkdx^stIZ4`^gZ=p42#zL6m7ipq+97;QGCpk-m==*E8@dj(1j9G|p&lG4Wp z)>=2J&vf3K5z6^N%m?B$o2RR}p})IBeR<(Esew9d*2cKi)F)4+c0+Gtm;8bIVbm%w z^uPV{#&%x{bnK5?ME&2??qwx#G{R{3iu-vqgTt87OjW;nn;0v1wTsLh#Cekcn^Kzr zDUSykm#e)tK-#sE5(#V50pk$46EF{Bs?aBR7;~fEH-6(3Oi6b)j7rg76A3$*0L5{~ zUda@7&{;Xe6l*OZh1{NyE;5hJK&BY9T-(qht$Jt5hZT#>(!bD|Ty5HeqB3=u!fgIi zK&DA+MheY#JY`tBmkOrkiJbr@wVqM%Vyb@~3PF*g`qWSNI#kT9eq}L*3}1r|j(jOUcOg&3+XUE9_**$YzPMxJ5N`@?o6-~ zCqk|kj0R$K2rp~_RT!mK0>QGI_KTDK!9a91;2>?Km8=^Wd0}r851%qf_U)ZtCE0eQ z3$np#R2cn}?9n7s#%UO|Fci z81yn;)*hB=?DjO@w)3U=K88>mF7oO*JmDCMM=mtl@U8-BlXcl3Cu}k(PBYX&b0R6d zSgGP1F(>qJ7O?jRbKs*wcrD}xv|K=WI+TaiDbC&09eS-;Li-w+=c+-DTDeyRIfmAr zkJ?ZKoH*v9nMdIaz57lZ#~ky#9_iu@MoI%WU_8u#99(+gj9x%)g3ARFbTxHHDZy~t zV-N@yyd{gxke!(q&V?0MkAg~q)xh{5Wq6ho*nUy4IxR2M4ej5~n0jrdTlJxz6qW!^ zN4OLrOsa4JLMOsJP|5)gDNb{%laP#Ar*JZ&9}6mV;coAm;-gkPL0yCPX5| zjV%%c(Ty7khFY6N3fZv5^Q>sv?DjEdVu(rdAgxpYA%q!ttg^*r* z>l_$*{odu-{rj@(KO3B~{!=I&qvKdsEqnzJozNwAo&jOBx9~gMT0OD?lq%()uk`6DHDWfQ;3lw z69m%>k-$;tbzo|T=`qE!KC^zP2dlF<| zi!LA)x`4i9(3$^Vd*2=(RdM!zHk*VHLDoxotzunUpr9BN2pE(qAqnm_2}TkDTkNtV z3t8M`h6rGg5dv zZWevF;~G&%v-`)bFNA^7_lqCNfmqL@v#)!zh<|+VCH4=Vsn}HQ&+?4BZ+C@bz|;OK z&$I9H)T#A#hiCM&I7weK_CxQulXmYpLGo9$e*g}?y=nauIDXHQ(cRE1!O~FCvTfJ| zt;u0{@1EQ)!Y2_ACyKmeCnw8==sYA5CcierCd)Doe>h9*d#NEtxIrwdhL)lOh`h6%M zTU`K9-v-aJ-opBrcLAn|{<^QC<7>Y`=3X4=wwDcfIwZ)>f6|zXL-#=S~>2%_q_)m_w0B}wAnW`@9f7ThhyN- zH&R7zuD|NRE69qeZ{mo6Hhk5y+GV{J?L!q)2Sh`6yzG6* zsGo{)_w`rI-s2rN?~i<${BrRQbP_G**>h5Q!qilrhh#r`6KbFX4P<#b=OilI|ESM` zW|i%GyzL1_w3j8$={y>54&KPBXiro)`o^taz)I;j$5q~5;c@{vhR88^so**r6T#Rq zr)yey=ff_}PiSxin45}l0POm(WZV&@E;nAfPAqR<>ca7eufp50xURgt##IMoDUqc> zYKXvF>SBB;sZtjD}*k>X~x^}Jx)dC?HgT$AiEVw z2y&AmCEVgti8wDY5h1wZiX=p)O~`Z&GljR*)l_`#_c%k9v~6_BnJVWT*g?)yAKvcm zxSlgpdHV(zAxKU}5Xz~Ec}Tdy#bBK3py^b$zcX(AY3QHc&Z`DEWBlTJRYm2U6I`B; zU&qUY9M8vpC`jP--%*(Ru$1l?dwUTY5^M{yucG7l%RzcuceyG$Cba?`cLG}e7^i35 z-`Fw7t-l+-r=zmZ)4svUJSy6^I5}8&J2qqwF;9dOlHRXq0Xx?^H}b7xQ6*nJva;7_ zbDGAWxZX*`+p#g5bF-&?qmz(yses$EC#rBsZ_J*fXhQN8Dw>e=G(}6e&B^o(pP<4C zy&c=K$Efh5Rk(!PoD46%c4Kx0VB1C~0gl+R^4t(jkArZxn!tlU+YBh#%wOm zsX8HPv33PbNV;CdOSsL+#1vAc;^k^&qf^3dP7&T2%idUgZB2GpTaB};LYbTW%gEdV3_b@ zl~|cTWk2cJ`Fd7)=SCN6yuz{5)6v}P!7)txA`B!8TwRs3--(^*?N~pNlD+F56HTpy za|AZnZ*YTs`q5~T*p=f@4{yRAo042|3?7B3)Sz9K^DCT9=r>?*fq_k&pS_J$liDNy z0VsxJeGQ=4aGUF2BYmfDzrMthcxy884^-ka0L6Kn{rv2L!AmGNd7jAmqYC3J)={On zetTHm^QN57c#NZnp?`lA;Xh-V21T7qb zCW*=9d%g-8d-CYbq=%yxsjo-sB~DKUTuFV`O5KINO#+9$_mH6@OH0#N9|Q|4_GUo+ zeR!--u>Nj_QM6I=v^;^haVN|*&I@Jb+-Gu$lP!HSn2gqQCva#CQr`lUnVb$N+Kc7< z>=;PG_7+WlX2(~^cHqIW7?<@Trs+7P5;=HVAIDnYWFB}z3b(hXAksWKn+yUPAC=Ul zqEp^ni;qK0CtmwaV);|fw{gbB-El(K5w&L-s6D8jvHPZzaim3L*ta(1tDQhke@;=u0 zqIBu!4V*EtUH5Rn>%3wLP>y8<`}CENwqx!VnSFBq+J4nq#On`0SaJK~`h9@yyS%lJ zWAn|yvm!Wj!c}|D)xSqm*7o9Pg+r$&xN}`R9>?1dcX9hO#g4}++dsxjjVa!p@1IrL zKCn|ip?K%sQ3&_cVqJC>N8O5`{_}MUj;mJ+(0qKj^C99|H`g_0BSw; zDO{!a6(%=PhG2pcr|#09g9)&d7lGU^U;^%>ZlzQIf+G(k+3BfGc!GUWmv`OddANP2 z<5}D|`*_^;=i7g~^Uo*j9318NTkuICvUl9}UhJNFyzN+If2{6XT!;26wp4N_fDMcO zTLyKAn&67|jWN8UM7tm89e33woEADS+k_s_@5VJCjM17tn|0rLSv)0hA_F^Q-L^ha zg?$DRofp^hAf7k&E{p45l<79HM*8fIz<7Mqdh}kZA*%ekGWeWZftrMRZ=)ug`%%b=JOCWrwm$yE)s0jpF;$4>Oz7dm4HXS z`YlSyHYzz4Iq4A*a()*7i4He{$0W1ARZ8p9*E5^e$C@~+stV}W!wB4i{>gg7`9G;+ zCAC$rCN)M8JT*QvOLBw)^#mrFtDRT43 z+;|7XD3Q!fACDN0yU(EX`f(uA##`%oh-Lm+kG(wSA0*NA9Y~G&=hxGQn}6;>q&ffG z0Rl$6ADl`PWB$2(G=e%G@?a&W-$H!&DJTE|gLfiR%sPV`0WlF>Mrk-{ z=l8*B+_|VsW7lU16)^unvVI1LVe8jeKTfa+P*rg}RqDt(mND{W^%N)#`Vs#}`IZ{{plQ-w2=M0ll4<=j)ruC10|*agry`i+_$B5ZDbRPA~(zsm8k9 z?9)8w!*JWpD*Ooqh$*;RzfmUJp?3no6x{k)l`-(|ITB;KMd?<_+NU=HF^2zcy@r&U zn|J8*$%K;p6ItlxAky2ru-`Jy&)uA#Z{z&DB{@GoaExeY52Cc1{u+zAZkH&4IrVMP z_hpL0_UkVqUQM#ss&rUNX!@N9hwa9epvQ5xL?-9+JhZYK%5egJP)bPXH%JMbZ5JyE zhfzX6N?^(*Wl;3|tbfQB&eSb3^;Uf`xL~tohRxUv^mzz0?32(7NvY{^t3H_tV4qhY zK|dKpntgEOD2tmuMb=_SU(2|*|M@&tQvS&l9k%V+tVz`I^~Bsa}E8T=5mjpKLJGqgkZ=#Pa#yiaf4yG%C9UNnurpJ+!}MPsi% z2V7*1x=XX{=!`|k_vzZe2}r-Y;5E*xA_BkYqjeIin^>-Dh% zf%98g_pbyo;N%RkobqQI5e7g=z z8b49f4oo^m_{R!=g7Cj2e7EqwEc}VWpDg?-!aqs)(}bTV{Cwe07k;7eX9>SZ_@@hh zj_}VE{#@bD6Mm`i=L_E>{I3hYLih`WUnTs7!mknjBH=F){x^ibRQTT#{xab&7k-`a zR|uasbPh~fCH#=^8-?E_{D|;l!fz2i@BAE?bcyiS3jcE9$Ay2T@Yf6fYT>sD|61X1 z5dL+-?-KrZguhYvHwu4~@NW|S7UBO;_}#+4MfkS~{|@1A75@s5A#O@$=BeCBQ+dynTu`7uki`F~1hS(fpjl?b{R!8hkV&5S4Br%?F z)aPMv7@SXRKCwB(zC~<0v8#zqA$BjZFA?h}#zW`&%uHap#0rUN#43pG!`{5Up4eVu zoy6WC_Ag@nA{Je6@HfPCVviB4$_Dlzv0o7DA@)46JBYnUYzwgyFwhKshgdnWHewNC zmlL~_7%u?S?e7cpLKsQ(GEdBk=TDhOVdfs3NUWUL zvBWMV#<$4z-zSz$jBETszDKWro7e}$GO>0T)QL?b_A0Tj5qp8yDq>F&d!AT=*hj>+ z6Ptk9fADT%Gl<^frg#Q248eKWC3h+RpH-{sanNo)nNA;wG1^=PKr;CK@oLu?ykGk`JDcrr>g&0Va; zGXXc0Xo+0F?h*{HaHHUQ=YjK=_z&7=!JVmTHzMplxJ%&1!+F3z9&YYj@PTKj80q2M z^TJ0u@gg_%Suj1iqNp_DU(NrpU8WV5)vXL@v&vSi2-L>3g8b@OIMOgL6l}auD_ZPt z3Cs&MN3^1<;F>_l9}7U#fz3}}qd9+tW}<1|FhmnUGtlP2N?IQrY^j}1;$^rK;l%S# z_}Bw$?{c>JBKjidW*%N>1&U}Q;RQh`Vy*xIt7*3~%?1#>MRXIR?^kRaNbCZE#w252 z1wnPTFy>Dx=0_y{tkT>;A_INf4Jbr^83fb3$QYkBh7&7eUSiC{)|gjR%*%}VqEpk3 z0u<6}Kwzza=^5U2AP7awO(0n8@31@%gO~vLA)`55oMOa`$;8(zAl8xXY7k!o97RJs z2ZEaoHwhiY34oJGOu+a+LFFW-C_)H01B4fWZ*!&nT@V!DBimgdD4>qSA5|K`HU#24 z1a>m!91JP6!E|&wtqDXW;0=r^L`!f3{(!`0MSMWwSr9lnmoa|;khTT{1>`V>BN7FSC9w?z1yLI zO*EuU0`UTDAlUu}qwz#jJP5>dVDlEudF*$9(QJ1x=q5O}3Gw{<_-zj7T|(A;BMlKs zdy4@J;J!kH&qZ)(SK41mtW(6_Np!+7%>fcOz|lCFl>4M2INfXSz_FimByi4#$143A zpyLd9?0@3nC4^bP1lxKLu#bGM&_Jn2mW@rCI^lkiY*m)B4{6SN23OJJLxi1YEu}QT zu`jP9aTVMYIPu&AA6HVeA2UXW`zf4wzK@Viz-B{nM*%!jGqSQiezq>IDT`hzg5VKh z#hrxyE=+X}pm<(^&zK^{ybm`3Cmt?)7&D(S10bH1IiS;Hq@k%6GlpZ(set0y0|ISc zs+JIkJ zr`bTsVmA;E5$bg@sYP&Rr&P=CZU4_L)%#Vmt?M@h|Qz@prD%oLd}hQPl0%ks)5VU18>by@OVjOP%~@#F)dr?H5$;JMeBOm)lNs5@rVZ2TlJzru zU2b6v>yn~xBXJ!ZOI}VrONP@EeVA%8MLC?9l2{+-lVIVgw|F>3Oo6)`&d~xdt;~>R zbf(u4ul2y?z^z8c+HN=s-b8}7o(T9|K*zV?u|0@~v20_PIhz^A9!+Cu1#ndI&m_3a zY9PYr$8foD$1>?QI2@K}qL=;}2(uJ1zXx(MoOm4IWjorrS=9t?Gf-P$=oG>^WhIn?uXN;ISp8;aFpVvV!|HGMo_HgEhG15I`yrf|Y|Yu?Q3TL#tR>NB%&|pB0PXe#+HLG` zc2jfGJTQre2=nJyuF;HNAi^gI$0A<>=ZL_w*{OPdWre%C-d`7pXpulP+#IP5L{E+S z8>9YMFx;3Ii>m0YieAnl{7~pfyS6SAogviyR|CFiMm69 z6*0HJvCbU{uB-fF4!DZL9uYmA2NbOQlCH6RPVPcO2K(8fk?~} zC|IRdtFf;Y`C@BJ+=t}RfJFTbO`%|{xh|kB$IjQtrz+wPL}~A6bF?Vvh-$ctI$ z<(7sU1GN?nqP2k#3KG2t-_E&{st7!U+YFAgAVS%%0M*cM_E*+p+MN(44tOAW5LGSU|ln^2-ZPrLsK9^ z?ij2htQ3TtXrK=Df|3a(RFNC}(J0c_h8r5fbz!Ei3$APoMx((7Rt#z>yd3st=ID*0 zX!FrVXx)%eVhU~yi1Ju$+Jdq*qQ663FAT8~8a4Q1l$2DKZAR61(2u$z^P*sjzX2vm zwiT2IUCU^Srd-r^qyaW=Mzb>#sYaR10YwS2R7PV+DkJKxHXMPernv)+EU##I0kjs_ z!X0UjMVcF?L1|dX4LKphu)(G%B63?$8NubvAvEr2xQ>-Z2HEz|j72(VmgGX9>{cwy z3K%mAyEnG@L&Pi%PxPQPAX7jfVEl4i|`^VWL$=r(q0? z#Qf~h{@U8+1`Ni)(LX~NPSKl1_k{YikGmdCPPW--6oV&E#{6g(XsHd+Sf0Bq7DTm~ zS-DX{nwTBlUFUCtO<)O*Aq~(=HO9K;pwZ#;axKFa$EWn6tT`e_vL@qPP9VdM+Lno9 zRntm~WFxJV#QAUnTsB-G9O)uBERL~G%Q%-o&o0S2*Y9wi3)*qSVVUPPb>l!1lXyOu ztH4mV79Jkb40l}#h&96i=Ht0b5OFmY6<8Cv0o~u!v{wMD0RIWtbphh8LHKek1=~Q^ z;X4Ju`~cR}fOA)A+DCwKz@ytWtq-seuqlLN2EZP`%xe+eplKmMtr44lz-3s)d<5vm zG~Cqzc~S5H#$zbo2I$y~EiGUI%g#PPZ4Gq7(x&QS(11gL)3Da<#$4V8n79-RPb^Qc zHO8XxB&-T)AuYq@(lUEonj_)TMhzXIIj}Ow>^>3@>yQLo{AewE=x8mYYrN*@9uL{$ zwJg^cwT$lLk=Cs_d)!(^g6ogT&~dWnsG6)f`@X6M-O{78}^yhh_2~l8KKYr=&HL2c_gIh1;R{4kr&EgHKZYxfv}4 z*RA;YX|#9@zRFa+D0d57_aid@T*;j#mwb=GwJE-v?R*wJ_cHELDQ}UTPtih8=vJio zexbs1uGyPvM3?(FAo{)}on{Dz{IjIldQXBkYmri{;Z2Svavp1NnOSVfM z!tei;%%?q5W|Z@UEuF1hit-~})e|z^D&Tx_&VEk@jL>dau4%Af+mn**CXov1zG+KW z(JHiLK1;#BU-7%LWP+U4Hh!C(na@U~>-&w&2Yp#QIZ<0WOFMZC`~!;rRD-{Ecz(8% zEf)T4#c#F~MU#(mdzIWzs_#ol=U+a_Q<5(ab!|sX{?H_#m ze=GUss_-;>TiVex;LlNVorWIeHa%?irapHg-GEB>N#&e|I_y<^X1lJo$+zgU)WW~m zXlErhep~w#^^bHzeBF&_qfrif{hys2Cqv+0_JZVhD?8cilXCZhZ;9eF?el<5AB+AI z&^U^IC*@WddOTs{x7m~V@LpNf?`67HrBBYswse;Ei*LlV9>xC?BcG$*mjaA-q1q4S zZv%gRzl@$?@SkeqSN0+QTi~DjlH@LE^;5SDYm#$TQ~F0#BYAf4+KneGZBpR@lg z0}Ojw+RxqKU#9p+Dz6eVB5>a(7mN9~N;qIZ6&_b`L;)(IN2Rm#abd@*;{uMbt42aD zBuR52NXUhqfB^~To+n}b6%5{!qcK3jR#NhZWqd zV4s42Q1C4U-&b(If*EmHjxh?3SJ18CNeUJ!c&36L1s5u~RKXPrHYs?Cg6kE$PQgtI z-lE{$3T{_0q2N;rzM$Z%3hD}epx{3h%w8wU<5KWg1t%()r(ltS^AxO5P*aau7HfUB z@GjM!UD)6_z{?E}AvZjP-0+C-<%+J8(2)1`Iu&p07e@SRD!$1Uuhi1qD!fPakA#9o zyd4^Hs#JgD#)|qG`r7&J^fJ}Y6WD+;9XDbr=^G`@4H?5V)t`;>ytht<8+zE~CzO0{ z+?bvlH>-SZ;DlUk;0WE=xCuTb=a z;kT&BgRSmS2YL~uo71zzsUyX%&?!W!H(NRc$F zx(RRLDg7Aa>ce~C+6#TP^%we9Hv1!WS{%yMT^y=IMDudr@*p+V;&FLYf?pHuI*z(R zse*i;uXfEEyrFI>C^!vx2rn6Zv5T7mxSg;f3>`ORFOwy+aZg9eXmFSWp8LCd9f^!3 zLjSr@Rf`ty$Nx(Zk7JoMN8{=Sfgo?c4|fOxzLsDl*6a^y@q}YLeg~a}TDfM853gsV z;YPgWj9u(&$=Bli{}fVEm#7(Ga_hbRS>eWtu)nUX1vS!}BXmF^llT6M!j0!O)uHb2 zO~4ANOiFyobR>;$O=gppLuo!adPb$oE-hfpkkSxVPERYOTM8jK*sQEAL*y`g40AAI zM5{>Ql_BJjSwpaDC@E}4m{pkh(S#~qwkaVQGi>q1Cl*Po$GdFB7xBYcT|`K8_xxQY zQYI5oQjx7$QV|(6vIeEXvi&we>dOx)s!x^42pm?J`7wyKNEuQGGj6!zn2|EG0h<|; z(ZgqJe2rqsw#P2Q;2Ac1BT`y)2>%2}Jj$Zx*Dg{!UA5k1@UU8yTYC;PLt&Rtb@o7Q1 zSuqE#m>TfQO(Pz(giWeshJ~tQGkm^+SuMB~6pnalXJedSQ0<$InPSUi|W*zRho zQx)7Qn`2G2QgCZ(`>Lrn73{ZVRc%pmt5XU81l6kTs`dZVP)#OYl&Ts3Bb|7ZhKryE zs3QqSatURf>k4K?1F@<|umKk%TLLv$cwjK`70gHt(z>)r?+6lR`J0-sBr983j)b%1 z0t@RREz&naf)c8V_gTGh$nOpPp*muy%SeZj_+WvgWV5QN)wYhu*_+@)(=85JUjMiMC&B+zlc zg<*zVzj8&1b=R!gNPvr>RjZcMB=L-7Eu}J^Ru_!oD%i!+bZsN@%|>-rH-y8n`Z6K0 zYeY_?8a9o{VW{72)g(sog6Yfs(O@lB;H*Dy?Skq8UqJzGDo1>=h(8#M zdTYy2;RV)l9U)Tbge?=pR=u`x!$N(QaMrBoRVB#FUmL?-C3p#HSTuPX-)S%(3n5J> z$|H<6VB;$SpV-t$Mr(7nafE6+_=+hrBV|J zs>j1T+LCdz1uyB@Fy~Hre48V!-qU<-ns4mq_%PAxn&$WX)VH zBd(BW86Ng0QyIz~@&Plw6!A=RfG~2k&r5CTEJnR{rAHYRyGccrWBp{T1?22~8n!`V zoE66Ew(_M;qy_olH0oY3Z_PYX?2jOGW@WfJ8Yn0LOX{pPOXea5=bj|L3Z6b4t&5cs zto4VgFK(8C#T>YY5Z84grfmDl_%0-Q>XggwD{Rg;ZUdy7x6J|V8t?1q8gf9 zUy?Vuj)7TMt&+2kil+6H=Cgv)bFg}ostjZvWg4Ocdz}l78qt#xv*dh&n5yzx*1X&@ zac9IIe1H-|!!etj|Mj#?2?f4cmW=kRj98q)nqWgPV`JLQoV*eNoKpwsUY4lbsFTl z8DP!S;_bLwlCeNLqelBvhBgY_LR+gkusZY5`W?GdNBg)7yr%hocu`FqsCZS1qo%*?L4s1d`S6Jb|oXJ+>B zXALqw<=MzU2KU&X^7!VTS(%v$YLjVf!?gn$)!N6Sz1p7KMcQ45X&Gk8Z*VGW;O7rS zfo^rOkZmZ?(A`EM9}ruZ@HL}S5AOW#tt`^CDUKFAEZ-ld;-Ph>e{&Fo++;?~iIZU>w4FQZY=4``rL?dj3U zlDs`SwIq8+%QCz)nq_zmsrrx#b@3tn?!StXd@Owa%vzT1aP7WaIc)tr*BG)M%C)vU zZD($g_CzkEwq`)yYr=n9`0v5DRKshzMp3o5!T)!`vwl5z?0MdLn32~zhsoUEJ1iy7 ztHu;*ca4GeyO~wV*Av8hgg+qs?p}rrz_*m) z)-h%oo`8fne`YS(&~_$ce~s7#Vj)5J-A@76cEDE;W{fU(x5L$w;p%oQOE?marf#Pz zKatrrdMLBo(Um(l-{p!s-E+G#T=@f;-A;E`MqfskqsN)Z=+4ORcJw&9GvW^I@2`%* zR|1Y_Aa;x)8xS=q9wR>|DBKK%4)SvN3fjTKfN))S#X-h6)PEuyqK*60<%%}Gk65N?W-ib*rR1 z6m8sZ-=t{c-u#`4PN?+Tjd+#*Dbks7?Y(tU-YbfJP0{Zt+W79_BSmLkDfyk4S(x6q z$A6@vjqffdlZO6ol|O&4opip+zeLf-_eoU-t@wS4jw`xR(LE~tm82bU@gY0yw@K0Q zMN+?e4O;bw-HL8f@vjQng_M&213}~a>QYJX2MxJ7f&pF*Fwo3OJS8@oKhJ87zuHFM zZlm9_(PKF?TjZZ_qoX$Z1{=NIM!#gEKeEx|a#Qmwv(X_NeT|KN+eYuR(WAJsu#{(t zjrQ8;kd6Mfjpl#pu*!Q{(oUm3{%DK;z($W6Bhq7(luy2-AyPgIZ1fHrEq)i$Ql5<% z%dGnF7ay(k;=@zvRW|xE8@<&=|Jp{sXQPiBmnuI`(xyFXZ1i>;|J#x_?QuA|0`xa& z{tGQDeWs1Bl{8r7^PG)--$rK~k*e=_Nt^lQ+2YT!(an-J%Xhtv?vb=9?@39c7074w zks^PSUSy+hv(bOC(Wm1_BT!f~{S`L)1{?ho8~w12e$z&e#exv>O?ytV(P!D{b8NI< z&~a10pp9;l{AT<$HhQy-{;8xfO37!JjsCrje#J(=WuxD<(fIKV7S@#iC1i6V+$6YZ zaHqn}hAW1f2e%XspXiBo?=nC?+;X^DxH>pYqvDspRsz<;1>sh~T?iL~Yk+Hn3&SR>FGw~Z?_@qq3=VaPtaQJLg!zY(o9Bv)lm2j
*20~YlG{AyAJMp zxGuQwzIR~K&W?2-~3FxLi}V!jw(a^X&-m;ysV9E+SaHg24;0sB(*k+IofgPLR|ewP zKlL314-|)uFvK8*JiE7W$^Z+8anNt!F@h{y$(J1#zGR@mX`H32vwUhNg3>J{f=$y1 z%Cw23Qe=u-QWU3-Ce5>MOPHBn@rc(@j5n_|rdFXDoUWZ2Wy(y37W{toeQoZ^ML5i!EIV7BOky;MAG^5Je1+ZaF9HR54q znPVI0wA5=%){DbN+Efn9HKO4eQm$kT&yr&8RPm|09n`I0Gp|obh3mk>vzap-XYJ4C z0u&e-gT zMkVsHrro)v>`%O^Y%-+It+qSL23PteS0iS`+pPve+I3$M zAs6fa)lF2Um&wy_^d9sT)I%w(K@7y7N;T`H(@(3K7&Um?^wSD58=5Sd^?qqmvVCEVEA7wKxp#E8N>zdlo0uI4e~O#af@4C-?t0ssI2 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/sockets/Sockets.cpp b/SFML-2.1-osx-clang-universal/examples/sockets/Sockets.cpp new file mode 100644 index 0000000..a73609c --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/sockets/Sockets.cpp @@ -0,0 +1,59 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +void runTcpServer(unsigned short port); +void runTcpClient(unsigned short port); +void runUdpServer(unsigned short port); +void runUdpClient(unsigned short port); + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \return Application exit code +/// +//////////////////////////////////////////////////////////// +int main() +{ + // Choose an arbitrary port for opening sockets + const unsigned short port = 50001; + + // TCP, UDP or connected UDP ? + char protocol; + std::cout << "Do you want to use TCP (t) or UDP (u) ? "; + std::cin >> protocol; + + // Client or server ? + char who; + std::cout << "Do you want to be a server (s) or a client (c) ? "; + std::cin >> who; + + if (protocol == 't') + { + // Test the TCP protocol + if (who == 's') + runTcpServer(port); + else + runTcpClient(port); + } + else + { + // Test the unconnected UDP protocol + if (who == 's') + runUdpServer(port); + else + runUdpClient(port); + } + + // Wait until the user presses 'enter' key + std::cout << "Press enter to exit..." << std::endl; + std::cin.ignore(10000, '\n'); + std::cin.ignore(10000, '\n'); + + return EXIT_SUCCESS; +} diff --git a/SFML-2.1-osx-clang-universal/examples/sockets/TCP.cpp b/SFML-2.1-osx-clang-universal/examples/sockets/TCP.cpp new file mode 100644 index 0000000..ff1e1f6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/sockets/TCP.cpp @@ -0,0 +1,81 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +//////////////////////////////////////////////////////////// +/// Launch a server, wait for an incoming connection, +/// send a message and wait for the answer. +/// +//////////////////////////////////////////////////////////// +void runTcpServer(unsigned short port) +{ + // Create a server socket to accept new connections + sf::TcpListener listener; + + // Listen to the given port for incoming connections + if (listener.listen(port) != sf::Socket::Done) + return; + std::cout << "Server is listening to port " << port << ", waiting for connections... " << std::endl; + + // Wait for a connection + sf::TcpSocket socket; + if (listener.accept(socket) != sf::Socket::Done) + return; + std::cout << "Client connected: " << socket.getRemoteAddress() << std::endl; + + // Send a message to the connected client + const char out[] = "Hi, I'm the server"; + if (socket.send(out, sizeof(out)) != sf::Socket::Done) + return; + std::cout << "Message sent to the client: \"" << out << "\"" << std::endl; + + // Receive a message back from the client + char in[128]; + std::size_t received; + if (socket.receive(in, sizeof(in), received) != sf::Socket::Done) + return; + std::cout << "Answer received from the client: \"" << in << "\"" << std::endl; +} + + +//////////////////////////////////////////////////////////// +/// Create a client, connect it to a server, display the +/// welcome message and send an answer. +/// +//////////////////////////////////////////////////////////// +void runTcpClient(unsigned short port) +{ + // Ask for the server address + sf::IpAddress server; + do + { + std::cout << "Type the address or name of the server to connect to: "; + std::cin >> server; + } + while (server == sf::IpAddress::None); + + // Create a socket for communicating with the server + sf::TcpSocket socket; + + // Connect to the server + if (socket.connect(server, port) != sf::Socket::Done) + return; + std::cout << "Connected to server " << server << std::endl; + + // Receive a message from the server + char in[128]; + std::size_t received; + if (socket.receive(in, sizeof(in), received) != sf::Socket::Done) + return; + std::cout << "Message received from the server: \"" << in << "\"" << std::endl; + + // Send an answer to the server + const char out[] = "Hi, I'm a client"; + if (socket.send(out, sizeof(out)) != sf::Socket::Done) + return; + std::cout << "Message sent to the server: \"" << out << "\"" << std::endl; +} diff --git a/SFML-2.1-osx-clang-universal/examples/sockets/UDP.cpp b/SFML-2.1-osx-clang-universal/examples/sockets/UDP.cpp new file mode 100644 index 0000000..abc7b4b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/sockets/UDP.cpp @@ -0,0 +1,72 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +//////////////////////////////////////////////////////////// +/// Launch a server, wait for a message, send an answer. +/// +//////////////////////////////////////////////////////////// +void runUdpServer(unsigned short port) +{ + // Create a socket to receive a message from anyone + sf::UdpSocket socket; + + // Listen to messages on the specified port + if (socket.bind(port) != sf::Socket::Done) + return; + std::cout << "Server is listening to port " << port << ", waiting for a message... " << std::endl; + + // Wait for a message + char in[128]; + std::size_t received; + sf::IpAddress sender; + unsigned short senderPort; + if (socket.receive(in, sizeof(in), received, sender, senderPort) != sf::Socket::Done) + return; + std::cout << "Message received from client " << sender << ": \"" << in << "\"" << std::endl; + + // Send an answer to the client + const char out[] = "Hi, I'm the server"; + if (socket.send(out, sizeof(out), sender, senderPort) != sf::Socket::Done) + return; + std::cout << "Message sent to the client: \"" << out << "\"" << std::endl; +} + + +//////////////////////////////////////////////////////////// +/// Send a message to the server, wait for the answer +/// +//////////////////////////////////////////////////////////// +void runUdpClient(unsigned short port) +{ + // Ask for the server address + sf::IpAddress server; + do + { + std::cout << "Type the address or name of the server to connect to: "; + std::cin >> server; + } + while (server == sf::IpAddress::None); + + // Create a socket for communicating with the server + sf::UdpSocket socket; + + // Send a message to the server + const char out[] = "Hi, I'm a client"; + if (socket.send(out, sizeof(out), server, port) != sf::Socket::Done) + return; + std::cout << "Message sent to the server: \"" << out << "\"" << std::endl; + + // Receive an answer from anyone (but most likely from the server) + char in[128]; + std::size_t received; + sf::IpAddress sender; + unsigned short senderPort; + if (socket.receive(in, sizeof(in), received, sender, senderPort) != sf::Socket::Done) + return; + std::cout << "Message received from " << sender << ": \"" << in << "\"" << std::endl; +} diff --git a/SFML-2.1-osx-clang-universal/examples/sockets/sockets b/SFML-2.1-osx-clang-universal/examples/sockets/sockets new file mode 100755 index 0000000000000000000000000000000000000000..00a60bd3a181cf944da78cec85e21089eba42784 GIT binary patch literal 60580 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/sound-capture/SoundCapture.cpp b/SFML-2.1-osx-clang-universal/examples/sound-capture/SoundCapture.cpp new file mode 100644 index 0000000..a6946ac --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/sound-capture/SoundCapture.cpp @@ -0,0 +1,95 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \return Application exit code +/// +//////////////////////////////////////////////////////////// +int main() +{ + // Check that the device can capture audio + if (sf::SoundRecorder::isAvailable() == false) + { + std::cout << "Sorry, audio capture is not supported by your system" << std::endl; + return EXIT_SUCCESS; + } + + // Choose the sample rate + unsigned int sampleRate; + std::cout << "Please choose the sample rate for sound capture (44100 is CD quality) : "; + std::cin >> sampleRate; + std::cin.ignore(10000, '\n'); + + // Wait for user input... + std::cout << "Press enter to start recording audio"; + std::cin.ignore(10000, '\n'); + + // Here we'll use an integrated custom recorder, which saves the captured data into a SoundBuffer + sf::SoundBufferRecorder recorder; + + // Audio capture is done in a separate thread, so we can block the main thread while it is capturing + recorder.start(sampleRate); + std::cout << "Recording... press enter to stop"; + std::cin.ignore(10000, '\n'); + recorder.stop(); + + // Get the buffer containing the captured data + const sf::SoundBuffer& buffer = recorder.getBuffer(); + + // Display captured sound informations + std::cout << "Sound information :" << std::endl; + std::cout << " " << buffer.getDuration().asSeconds() << " seconds" << std::endl; + std::cout << " " << buffer.getSampleRate() << " samples / seconds" << std::endl; + std::cout << " " << buffer.getChannelCount() << " channels" << std::endl; + + // Choose what to do with the recorded sound data + char choice; + std::cout << "What do you want to do with captured sound (p = play, s = save) ? "; + std::cin >> choice; + std::cin.ignore(10000, '\n'); + + if (choice == 's') + { + // Choose the filename + std::string filename; + std::cout << "Choose the file to create : "; + std::getline(std::cin, filename); + + // Save the buffer + buffer.saveToFile(filename); + } + else + { + // Create a sound instance and play it + sf::Sound sound(buffer); + sound.play(); + + // Wait until finished + while (sound.getStatus() == sf::Sound::Playing) + { + // Display the playing position + std::cout << "\rPlaying... " << std::fixed << std::setprecision(2) << sound.getPlayingOffset().asSeconds() << " sec"; + std::cout << std::flush; + + // Leave some CPU time for other threads + sf::sleep(sf::milliseconds(100)); + } + } + + // Finished ! + std::cout << std::endl << "Done !" << std::endl; + + // Wait until the user presses 'enter' key + std::cout << "Press enter to exit..." << std::endl; + std::cin.ignore(10000, '\n'); + + return EXIT_SUCCESS; +} diff --git a/SFML-2.1-osx-clang-universal/examples/sound-capture/sound-capture b/SFML-2.1-osx-clang-universal/examples/sound-capture/sound-capture new file mode 100755 index 0000000000000000000000000000000000000000..b9ce4cbd8cd2f53dfe3fccd1cb9664b6fe7cbda9 GIT binary patch literal 60100 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 Cvm=-Q literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/sound/Sound.cpp b/SFML-2.1-osx-clang-universal/examples/sound/Sound.cpp new file mode 100644 index 0000000..5c75ab8 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/sound/Sound.cpp @@ -0,0 +1,98 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +//////////////////////////////////////////////////////////// +/// Play a sound +/// +//////////////////////////////////////////////////////////// +void playSound() +{ + // Load a sound buffer from a wav file + sf::SoundBuffer buffer; + if (!buffer.loadFromFile("resources/canary.wav")) + return; + + // Display sound informations + std::cout << "canary.wav :" << std::endl; + std::cout << " " << buffer.getDuration().asSeconds() << " seconds" << std::endl; + std::cout << " " << buffer.getSampleRate() << " samples / sec" << std::endl; + std::cout << " " << buffer.getChannelCount() << " channels" << std::endl; + + // Create a sound instance and play it + sf::Sound sound(buffer); + sound.play(); + + // Loop while the sound is playing + while (sound.getStatus() == sf::Sound::Playing) + { + // Leave some CPU time for other processes + sf::sleep(sf::milliseconds(100)); + + // Display the playing position + std::cout << "\rPlaying... " << std::fixed << std::setprecision(2) << sound.getPlayingOffset().asSeconds() << " sec "; + std::cout << std::flush; + } + std::cout << std::endl << std::endl; +} + + +//////////////////////////////////////////////////////////// +/// Play a music +/// +//////////////////////////////////////////////////////////// +void playMusic() +{ + // Load an ogg music file + sf::Music music; + if (!music.openFromFile("resources/orchestral.ogg")) + return; + + // Display music informations + std::cout << "orchestral.ogg :" << std::endl; + std::cout << " " << music.getDuration().asSeconds() << " seconds" << std::endl; + std::cout << " " << music.getSampleRate() << " samples / sec" << std::endl; + std::cout << " " << music.getChannelCount() << " channels" << std::endl; + + // Play it + music.play(); + + // Loop while the music is playing + while (music.getStatus() == sf::Music::Playing) + { + // Leave some CPU time for other processes + sf::sleep(sf::milliseconds(100)); + + // Display the playing position + std::cout << "\rPlaying... " << std::fixed << std::setprecision(2) << music.getPlayingOffset().asSeconds() << " sec "; + std::cout << std::flush; + } + std::cout << std::endl; +} + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \return Application exit code +/// +//////////////////////////////////////////////////////////// +int main() +{ + // Play a sound + playSound(); + + // Play a music + playMusic(); + + // Wait until the user presses 'enter' key + std::cout << "Press enter to exit..." << std::endl; + std::cin.ignore(10000, '\n'); + + return EXIT_SUCCESS; +} diff --git a/SFML-2.1-osx-clang-universal/examples/sound/resources/canary.wav b/SFML-2.1-osx-clang-universal/examples/sound/resources/canary.wav new file mode 100644 index 0000000000000000000000000000000000000000..a0f3aecc5db38e9357edce96c8139ec04d1fcee5 GIT binary patch literal 63504 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 Tx%Yr^KOg32zryX%d+6l?8x!SD literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/sound/sound b/SFML-2.1-osx-clang-universal/examples/sound/sound new file mode 100755 index 0000000000000000000000000000000000000000..2a21d8160bcd4664861f136c6a2a2525e8fab7ca GIT binary patch literal 59096 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 literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/voip/Client.cpp b/SFML-2.1-osx-clang-universal/examples/voip/Client.cpp new file mode 100644 index 0000000..ceb2da6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/voip/Client.cpp @@ -0,0 +1,129 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +const sf::Uint8 audioData = 1; +const sf::Uint8 endOfStream = 2; + + +//////////////////////////////////////////////////////////// +/// Specialization of audio recorder for sending recorded audio +/// data through the network +//////////////////////////////////////////////////////////// +class NetworkRecorder : public sf::SoundRecorder +{ +public : + + //////////////////////////////////////////////////////////// + /// Constructor + /// + /// \param host Remote host to which send the recording data + /// \param port Port of the remote host + /// + //////////////////////////////////////////////////////////// + NetworkRecorder(const sf::IpAddress& host, unsigned short port) : + m_host(host), + m_port(port) + { + } + +private : + + //////////////////////////////////////////////////////////// + /// /see SoundRecorder::OnStart + /// + //////////////////////////////////////////////////////////// + virtual bool onStart() + { + if (m_socket.connect(m_host, m_port) == sf::Socket::Done) + { + std::cout << "Connected to server " << m_host << std::endl; + return true; + } + else + { + return false; + } + } + + //////////////////////////////////////////////////////////// + /// /see SoundRecorder::ProcessSamples + /// + //////////////////////////////////////////////////////////// + virtual bool onProcessSamples(const sf::Int16* samples, std::size_t sampleCount) + { + // Pack the audio samples into a network packet + sf::Packet packet; + packet << audioData; + packet.append(samples, sampleCount * sizeof(sf::Int16)); + + // Send the audio packet to the server + return m_socket.send(packet) == sf::Socket::Done; + } + + //////////////////////////////////////////////////////////// + /// /see SoundRecorder::OnStop + /// + //////////////////////////////////////////////////////////// + virtual void onStop() + { + // Send a "end-of-stream" packet + sf::Packet packet; + packet << endOfStream; + m_socket.send(packet); + + // Close the socket + m_socket.disconnect(); + } + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + sf::IpAddress m_host; ///< Address of the remote host + unsigned short m_port; ///< Remote port + sf::TcpSocket m_socket; ///< Socket used to communicate with the server +}; + + +//////////////////////////////////////////////////////////// +/// Create a client, connect it to a running server and +/// start sending him audio data +/// +//////////////////////////////////////////////////////////// +void doClient(unsigned short port) +{ + // Check that the device can capture audio + if (sf::SoundRecorder::isAvailable() == false) + { + std::cout << "Sorry, audio capture is not supported by your system" << std::endl; + return; + } + + // Ask for server address + sf::IpAddress server; + do + { + std::cout << "Type address or name of the server to connect to : "; + std::cin >> server; + } + while (server == sf::IpAddress::None); + + // Create an instance of our custom recorder + NetworkRecorder recorder(server, port); + + // Wait for user input... + std::cin.ignore(10000, '\n'); + std::cout << "Press enter to start recording audio"; + std::cin.ignore(10000, '\n'); + + // Start capturing audio data + recorder.start(44100); + std::cout << "Recording... press enter to stop"; + std::cin.ignore(10000, '\n'); + recorder.stop(); +} diff --git a/SFML-2.1-osx-clang-universal/examples/voip/Server.cpp b/SFML-2.1-osx-clang-universal/examples/voip/Server.cpp new file mode 100644 index 0000000..29227fa --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/voip/Server.cpp @@ -0,0 +1,200 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +const sf::Uint8 audioData = 1; +const sf::Uint8 endOfStream = 2; + + +//////////////////////////////////////////////////////////// +/// Customized sound stream for acquiring audio data +/// from the network +//////////////////////////////////////////////////////////// +class NetworkAudioStream : public sf::SoundStream +{ +public : + + //////////////////////////////////////////////////////////// + /// Default constructor + /// + //////////////////////////////////////////////////////////// + NetworkAudioStream() : + m_offset (0), + m_hasFinished(false) + { + // Set the sound parameters + initialize(1, 44100); + } + + //////////////////////////////////////////////////////////// + /// Run the server, stream audio data from the client + /// + //////////////////////////////////////////////////////////// + void start(unsigned short port) + { + if (!m_hasFinished) + { + // Listen to the given port for incoming connections + if (m_listener.listen(port) != sf::Socket::Done) + return; + std::cout << "Server is listening to port " << port << ", waiting for connections... " << std::endl; + + // Wait for a connection + if (m_listener.accept(m_client) != sf::Socket::Done) + return; + std::cout << "Client connected: " << m_client.getRemoteAddress() << std::endl; + + // Start playback + play(); + + // Start receiving audio data + receiveLoop(); + } + else + { + // Start playback + play(); + } + } + +private : + + //////////////////////////////////////////////////////////// + /// /see SoundStream::OnGetData + /// + //////////////////////////////////////////////////////////// + virtual bool onGetData(sf::SoundStream::Chunk& data) + { + // We have reached the end of the buffer and all audio data have been played : we can stop playback + if ((m_offset >= m_samples.size()) && m_hasFinished) + return false; + + // No new data has arrived since last update : wait until we get some + while ((m_offset >= m_samples.size()) && !m_hasFinished) + sf::sleep(sf::milliseconds(10)); + + // Copy samples into a local buffer to avoid synchronization problems + // (don't forget that we run in two separate threads) + { + sf::Lock lock(m_mutex); + m_tempBuffer.assign(m_samples.begin() + m_offset, m_samples.end()); + } + + // Fill audio data to pass to the stream + data.samples = &m_tempBuffer[0]; + data.sampleCount = m_tempBuffer.size(); + + // Update the playing offset + m_offset += m_tempBuffer.size(); + + return true; + } + + //////////////////////////////////////////////////////////// + /// /see SoundStream::OnSeek + /// + //////////////////////////////////////////////////////////// + virtual void onSeek(sf::Time timeOffset) + { + m_offset = timeOffset.asMilliseconds() * getSampleRate() * getChannelCount() / 1000; + } + + //////////////////////////////////////////////////////////// + /// Get audio data from the client until playback is stopped + /// + //////////////////////////////////////////////////////////// + void receiveLoop() + { + while (!m_hasFinished) + { + // Get waiting audio data from the network + sf::Packet packet; + if (m_client.receive(packet) != sf::Socket::Done) + break; + + // Extract the message ID + sf::Uint8 id; + packet >> id; + + if (id == audioData) + { + // Extract audio samples from the packet, and append it to our samples buffer + const sf::Int16* samples = reinterpret_cast(static_cast(packet.getData()) + 1); + std::size_t sampleCount = (packet.getDataSize() - 1) / sizeof(sf::Int16); + + // Don't forget that the other thread can access the sample array at any time + // (so we protect any operation on it with the mutex) + { + sf::Lock lock(m_mutex); + std::copy(samples, samples + sampleCount, std::back_inserter(m_samples)); + } + } + else if (id == endOfStream) + { + // End of stream reached : we stop receiving audio data + std::cout << "Audio data has been 100% received!" << std::endl; + m_hasFinished = true; + } + else + { + // Something's wrong... + std::cout << "Invalid packet received..." << std::endl; + m_hasFinished = true; + } + } + } + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + sf::TcpListener m_listener; + sf::TcpSocket m_client; + sf::Mutex m_mutex; + std::vector m_samples; + std::vector m_tempBuffer; + std::size_t m_offset; + bool m_hasFinished; +}; + + +//////////////////////////////////////////////////////////// +/// Launch a server and wait for incoming audio data from +/// a connected client +/// +//////////////////////////////////////////////////////////// +void doServer(unsigned short port) +{ + // Build an audio stream to play sound data as it is received through the network + NetworkAudioStream audioStream; + audioStream.start(port); + + // Loop until the sound playback is finished + while (audioStream.getStatus() != sf::SoundStream::Stopped) + { + // Leave some CPU time for other threads + sf::sleep(sf::milliseconds(100)); + } + + std::cin.ignore(10000, '\n'); + + // Wait until the user presses 'enter' key + std::cout << "Press enter to replay the sound..." << std::endl; + std::cin.ignore(10000, '\n'); + + // Replay the sound (just to make sure replaying the received data is OK) + audioStream.play(); + + // Loop until the sound playback is finished + while (audioStream.getStatus() != sf::SoundStream::Stopped) + { + // Leave some CPU time for other threads + sf::sleep(sf::milliseconds(100)); + } +} diff --git a/SFML-2.1-osx-clang-universal/examples/voip/VoIP.cpp b/SFML-2.1-osx-clang-universal/examples/voip/VoIP.cpp new file mode 100644 index 0000000..93f9512 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/voip/VoIP.cpp @@ -0,0 +1,50 @@ + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +//////////////////////////////////////////////////////////// +// Function prototypes +// (I'm too lazy to put them into separate headers...) +//////////////////////////////////////////////////////////// +void doClient(unsigned short port); +void doServer(unsigned short port); + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \return Application exit code +/// +//////////////////////////////////////////////////////////// +int main() +{ + // Choose a random port for opening sockets (ports < 1024 are reserved) + const unsigned short port = 2435; + + // Client or server ? + char who; + std::cout << "Do you want to be a server ('s') or a client ('c') ? "; + std::cin >> who; + + if (who == 's') + { + // Run as a server + doServer(port); + } + else + { + // Run as a client + doClient(port); + } + + // Wait until the user presses 'enter' key + std::cout << "Press enter to exit..." << std::endl; + std::cin.ignore(10000, '\n'); + + return EXIT_SUCCESS; +} diff --git a/SFML-2.1-osx-clang-universal/examples/voip/voip b/SFML-2.1-osx-clang-universal/examples/voip/voip new file mode 100755 index 0000000000000000000000000000000000000000..85ee187518af237d68968fff6e7a57ae18df86f3 GIT binary patch literal 81756 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 z zOGDKrO_}D_rW#RA%|57@_E`=V2??y8Q<(-^)`u8Xi^@o~`3scPLeV~gq(}Q}P?wU{ zn)+rZf05K#R~1AH_?w*hd3lprAAkJ@f6bYSr)fh~Lw$|2rK7{_X7B%#dM_k!=L<-U?)2B{Rq2eWBtea(1+pJi!gj4;+KJMF18H_dk_{> zfDaR47@_l<7^9>S=2qeda}mx#xVBhP-bU!0hlzMOmaqB9i*N_R0fhXz+q4y+7hw{_ z3T;KyIOQw&(NSWMgX*kBg`8H*p*F=@J{I}M;`drH;JN^7k5O#H82)Q9oO=Ly;}qM# z@yZw;m=$B`Z*eHraE_8akfT`oPE@kWPf;u_6O=62gyynX_+K+4i?du^?p>x>+H%I; zUIw$~fPOa5jS z0%yNGg}`h~0**Dw1BkId?ZUW@Is)_wiW`eW7nvzeJbF!8Uy@l2mqrRLjw@Eo6 zS-zs{nNlu!>5TQanbdz59|qxm#y$pTzcWQIZ-=N0>w#8R=DZ=;M;gcsXTSU-Ekf60 zzGkn{>Oq@Rx3yAEeA(6W&+CZWZ4da`B;R$w>Fnp5mq-0R1oTUOE=hFu3sd+F?KufH zY#Y$jk7(?Q{n8Zv#T{dAinpfLZ@Bg7llj)``L0aKC(EH;H-SIr&ssU$v(njbNa2@u zGikS5(KKoO)+y!HL$;8Ys`sMge!KQft$gnK1^@FY<)_s1%i6E!ElnOqsOI$clO*f? zG+?LXo2QriYD&4X-sJxr(EGL~SD$_DV?Wj+bomDUX^^S&i$Rb4_K#EKFVOlg``rtG zo$qMkFtce+mn->nJq9G-yHfAb##sTR+z*}|?`d+c(#O%mDSD)gPnN@dtU9RW&f3Lf^T3e2W*J+_Hkjo2I;qoF>!t~E@ zZLt<|86eH&f??RBg*h%Q{JcyH$6)`+^c)$UD#J-KoG!yTGMpzvuMAhnaIFm2%P=Iv zYh}1ihToIn9Wwld47+9ckPP?8@EIBQ%kWJZ9+2TjGUNwRS&w67c(M#nm*Er{&XnO? z87`1vxePCpVT}x%WY{Ld>t%S83~!U+4jJAp!~12pTZX+dd`^b1$?#nn4$JUU8QQRQ zV135RFjt0W$#9wsXUniyhKpoaDZ@1~gs3FfC;Jn(BP@s85r*83FywZGA-5w8b(bR% z{ksEtd}`>_`>mAE?F{AU`CGn~OfQpksvMnek@9k6f9Cdw^0@tB*j<_|uj@2fn+ z#sV1&WGs-eK*j@B&=OL$s% zLNPzKseQjQKk2)kO9SDtU53=uuX~1hg+e$>*NNm4FT_19CE9U={PuFV`_njALRkER zpy94DT_@?8jh~ zs@3uczDpYJ&t98j#y#5SNyEG1YW8HgMNaX#((o{^O3+!>Dk7R+FC}93ZPIZ6XBsmq zE9#nd7?D4_xv4zRT#b{XimJwz27l01zBt&ZEDh|+9wiHMRN$b-wLvR?Nt(qv|O>nVZgLau$-GFOO)v%|gj=PpS<}GRd!|hx96$u&~;G|CKIw zR?**FP+PZ=34c*@(?Wl!6emcoW!jmJVUQHguWN0(k`huYZX!v1vpw9EJRFvoodapc z>_3cFM{Y;)Ir#9-lu}Xo#3!t^;=;1H2FGSr#4;avwPBEB!{t< zkmv~L$UBqOudFaBwLgu=wDj$=^a_)s(D3$D8DjCMtZu1j<}oZZv1?UZVWPmc+txdw)HS>w7S6^oX+bv>AOdIR@dG$>=d&XJu)qdCd^-7l#*f9!g0gtsg zu_}R`qp*m{0O{SMq>EvT^j(JZM|@K9B#HK;Kjw8VEO`T6K!UJNsTlRq%Ks=C_W5)wn&I0hg)oHa@o?M{LV3yc!j zHVV^x&Y4K>N~F&&7nciWSGBa@JLFiJH(;?>0^8F#^t?OLQpAjpJUi1;@J0DLO6yKb z2?SlsMA9xpk~YBfHtI>F6vel0x)!~L#Q4z6&#S2q%BvSzMf=Ry3WBUDr%PFR7j^76 zW4%C^wrnw{@wghU5J)IG4Wj#nl61D&1z{4xvH6a=TYP?tZl$9R5L^O zQRJVUR0(Ra>*%HEownyFL|_6EYff)cUfDZz!F@@I@y;*{(^k+QLdU3CS0D0KHPwhu zx!2eD1HOP?bVSWU{pR@#s~h}P0hibo3}`GBp(1R(8|#~}dW#`+P{jMH+p2u){8!XB z`S2`IEtZ~eHaoOP!GaKv$04at$yTy_N={={eG{%@Wi?_TwE3$sP5A2kRnShEa+#8! zg^ih2>8^vnL@AzA)2wu4RVtlh6sy*s6<rrpvKe7BvyY)ks!#o%% zZ`-W49qSdVt*a6D;ItcyAzY2G5Z4|<%Hvk6(svb-3YTaf!PYKX!Wd6xneDRoS`}NV za=q2?u>Nc7Xm11VwI&|=@h5*-VxwZ^llxAq)fV1}Vj1-_5%mb7hBrdf?lyQmo2c_O z@OEq_){aIQZda5s@kj1^pvS$oBYIr!x0yVJzivx?@`QSZMK0h&ep9|Zm(@7 z{HJZy`Z=4;)`jcZHro#24{sGX{!-0m>y98t*8l!f<9}y=>BH_Ps6f|^R4RP4@V_tA zyp>g|P`*EAg|cO=NBOU@u)eZm3?Doc{Ao{m5BTF4vmS70jLp__FDsi^x?RfqWAgKp zp7#!d?K!a7Y{SCu;$Qutz&pmKJ|IQyCS~s%YgYDdJ8Jd^P0%Yskn&x#+?{r_+wnd+o*w?P5`Th2ezXBm80bn(M9`whU+WSi;us?3Us#OP{67(z13qtJ|8> zmzCF*wRYGV&fbxweERx0-md)+z#HDW)5UPQp|b+K02>K7<_QDvCs)c&04}X6PeT?0 zaW$0rna2DRu-H$>Rv({b7q_*i$3OB8xiZfb@EP+QXZZX&lHz=mQuyrP6Q5f*@O-H( z3Z!DETf$2D1zN!&(Bn}%UJ<4u{39gNyedq3yQFz#nDpI}=G9@+k4TzVh)F*qXw z-$%Mc()vB621)Dp@FJ4d??c@w>0xbH{C@9TXgY5m^b^{^ew)9?TNLDKp?K#nrU zxUiz%?>bx3`u(YkB%M>O)pxn1_4``uNskFD`u(o!B(2}4x?R%x{jK{Xt>53`?uPTRn5JaLVuV-ACDOag`pKRH(8_Or?1$DfG`$=-nC}m;Z7K{g)K_ixk>n zPuB0u6uL;GNF);Fx=y-elNu%TS`#go7fIqo1mUodxqm?w*ooZD@J>CJX9Y{Hf@N0W-#V-UtOl$B;7YGD z4=^9#0xSS51Y8clG^<<0h$4=fDHgV z%qVRDJfqMRm%>{Ds0XYETnU%~$OGg9HUTm=G`FEs;px77e>59MdsQ{!H9~W12(M?f zldU589%o%^ZQ`(Plrt}v3+G!Eg*Y&)^i|B^f4(7%zp&t0nzC^Ie7p|e3wmFOCmeZc zG5KjRGt*+ybEWeXrsbNQ7IQ&b%$&5CqO_Rw($jTLFa1c$%1^IGegRtvFG%#43L2%q zSYQjL9i@%-qQI0n@$SGh+3*I!G+mrBo2T%(UZj{jC8oX<7>zIf9%3{GlUEL-u^!P& zjL|ZScNU{1CX8TGRq-Bg)SP_n!NlZOU3?9a9;+Kv8?uLaAN8g0E-3p;rTp)|Wl5-U z)UWjtBL1b9^@*3bsfQ@Y&dmA7du6G|=w>|n`MFtIe0Ze_7AKnV97k}@Yswox;5ADX z=TUk>>d}`TfA~{+b1waO-aIvaE^nTkWRc|3jW#hmjFSRIQhfG-VZ~ut!DaqHv*C*8>zwIgml&TzIZqY|gd@;+i(ys_xS zP)s@H)^o*A!A*|0(|C^LTsu9J>4A0{n^Eggj<98(|B16}De8aV(3+Bt;68{so5@8G zQ^uqlAUelr2f%vzDCg%X$%cb-J;l&z%udV&o3?}=)uFH<|KU!94Q%m^bmAD8sdE1= z?=Kwj`R_lSHR;TBo!Ffu7cHL@M!69uPkhshJ$$zKQSU#SG3AW+D6_|BtAD1d;#4Z;|T6tr?ZWA*&3YUULQhU>653<#`Ea3gJ|>n*7~gvhT^)1e$ONA8aiGY!2Msq C%U?VI literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/examples/window/Window.cpp b/SFML-2.1-osx-clang-universal/examples/window/Window.cpp new file mode 100644 index 0000000..360703b --- /dev/null +++ b/SFML-2.1-osx-clang-universal/examples/window/Window.cpp @@ -0,0 +1,146 @@ +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +//////////////////////////////////////////////////////////// +/// Entry point of application +/// +/// \return Application exit code +/// +//////////////////////////////////////////////////////////// +int main() +{ + // Request a 32-bits depth buffer when creating the window + sf::ContextSettings contextSettings; + contextSettings.depthBits = 32; + + // Create the main window + sf::Window window(sf::VideoMode(640, 480), "SFML window with OpenGL", sf::Style::Default, contextSettings); + + // Make it the active window for OpenGL calls + window.setActive(); + + // Set the color and depth clear values + glClearDepth(1.f); + glClearColor(0.f, 0.f, 0.f, 1.f); + + // Enable Z-buffer read and write + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_TRUE); + + // Disable lighting and texturing + glDisable(GL_LIGHTING); + glDisable(GL_TEXTURE_2D); + + // Configure the viewport (the same size as the window) + glViewport(0, 0, window.getSize().x, window.getSize().y); + + // Setup a perspective projection + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + GLfloat ratio = static_cast(window.getSize().x) / window.getSize().y; + glFrustum(-ratio, ratio, -1.f, 1.f, 1.f, 500.f); + + // Define a 3D cube (6 faces made of 2 triangles composed by 3 vertices) + GLfloat cube[] = + { + // positions // colors (r, g, b, a) + -50, -50, -50, 0, 0, 1, 1, + -50, 50, -50, 0, 0, 1, 1, + -50, -50, 50, 0, 0, 1, 1, + -50, -50, 50, 0, 0, 1, 1, + -50, 50, -50, 0, 0, 1, 1, + -50, 50, 50, 0, 0, 1, 1, + + 50, -50, -50, 0, 1, 0, 1, + 50, 50, -50, 0, 1, 0, 1, + 50, -50, 50, 0, 1, 0, 1, + 50, -50, 50, 0, 1, 0, 1, + 50, 50, -50, 0, 1, 0, 1, + 50, 50, 50, 0, 1, 0, 1, + + -50, -50, -50, 1, 0, 0, 1, + 50, -50, -50, 1, 0, 0, 1, + -50, -50, 50, 1, 0, 0, 1, + -50, -50, 50, 1, 0, 0, 1, + 50, -50, -50, 1, 0, 0, 1, + 50, -50, 50, 1, 0, 0, 1, + + -50, 50, -50, 0, 1, 1, 1, + 50, 50, -50, 0, 1, 1, 1, + -50, 50, 50, 0, 1, 1, 1, + -50, 50, 50, 0, 1, 1, 1, + 50, 50, -50, 0, 1, 1, 1, + 50, 50, 50, 0, 1, 1, 1, + + -50, -50, -50, 1, 0, 1, 1, + 50, -50, -50, 1, 0, 1, 1, + -50, 50, -50, 1, 0, 1, 1, + -50, 50, -50, 1, 0, 1, 1, + 50, -50, -50, 1, 0, 1, 1, + 50, 50, -50, 1, 0, 1, 1, + + -50, -50, 50, 1, 1, 0, 1, + 50, -50, 50, 1, 1, 0, 1, + -50, 50, 50, 1, 1, 0, 1, + -50, 50, 50, 1, 1, 0, 1, + 50, -50, 50, 1, 1, 0, 1, + 50, 50, 50, 1, 1, 0, 1, + }; + + // Enable position and color vertex components + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + glVertexPointer(3, GL_FLOAT, 7 * sizeof(GLfloat), cube); + glColorPointer(4, GL_FLOAT, 7 * sizeof(GLfloat), cube + 3); + + // Disable normal and texture coordinates vertex components + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + + // Create a clock for measuring the time elapsed + sf::Clock clock; + + // Start the game loop + while (window.isOpen()) + { + // Process events + sf::Event event; + while (window.pollEvent(event)) + { + // Close window: exit + if (event.type == sf::Event::Closed) + window.close(); + + // Escape key: exit + if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)) + window.close(); + + // Resize event: adjust the viewport + if (event.type == sf::Event::Resized) + glViewport(0, 0, event.size.width, event.size.height); + } + + // Clear the color and depth buffers + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + // Apply some transformations to rotate the cube + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0.f, 0.f, -200.f); + glRotatef(clock.getElapsedTime().asSeconds() * 50, 1.f, 0.f, 0.f); + glRotatef(clock.getElapsedTime().asSeconds() * 30, 0.f, 1.f, 0.f); + glRotatef(clock.getElapsedTime().asSeconds() * 90, 0.f, 0.f, 1.f); + + // Draw the cube + glDrawArrays(GL_TRIANGLES, 0, 36); + + // Finally, display the rendered frame on screen + window.display(); + } + + return EXIT_SUCCESS; +} diff --git a/SFML-2.1-osx-clang-universal/examples/window/window b/SFML-2.1-osx-clang-universal/examples/window/window new file mode 100755 index 0000000000000000000000000000000000000000..2a330a0cb881acc3d4e1fdb83dd62c061d0e5b55 GIT binary patch literal 52656 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 + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + freetype + CFBundleIdentifier + org.sfml-dev.freetype + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 1.0 + + diff --git a/SFML-2.1-osx-clang-universal/extlibs/freetype.framework/Versions/A/freetype b/SFML-2.1-osx-clang-universal/extlibs/freetype.framework/Versions/A/freetype new file mode 100644 index 0000000000000000000000000000000000000000..5a62814ac97a729d8d5408fcd9200cc75b5fe3b1 GIT binary patch literal 1668068 zcmeFa4}6_vefNJ-4w7QzM9o|``$%w=6-7j44kkRN*rP2Y4zSUx)Ruo01|p+5AUP#>rDa$lq<}%5%9WcZDc=EXD;tbl+-~02uuIoPc zNz&4}{hrr;uNP=@?myR`@AbXD|F7?L-H$x;<-f{gGE4Y(68}!fWLh(slb_zrbxTut z_I#e5a@CZc@$b3+p2NU%73_OQ{=P>Xb2A;#fa~OCI1J7aLISf39f&ZUj z;Ojs6KhJo_Kl40bKZSpDCuTBz!~yXCGi^i$Hf~&(U%zhN!1gV55BODms@Sg{Zrs>? z%?G=6<^G#r|0X)Q^tR@VezT#FezTdLaJzBimfPNc1*2fz>Qn#2$|nT$9>J2p`UBY=vR1L?7xj03pd_+-Hlgo zyza)$AE3beHnM-VG;=x6^?S7cHg3G;+KroUzT*AYxDxZ**hJmCz=wVb1TFfXa6QJK zjT=|5TDK}yMD)MOdh@HhO-AIpB~imvsW zZlhj9b>`DVBR&VHyZUvRjDC+!6IX88l4^859NF(I%@|H8lZHcc82;1sx%}I>@#3{_ z`}O?lwSmuPn9o+;^1FL!lks-C9weXH#J^?ybI)JM)eAEn*L?7rs|wv$TzSJa8*jRz z``Xu>b=GU%B9goH12t zzj$)y6p(+@O($p0DP=Ox=h-Fv(|@;v82#G}0RPM+pWz-a`gg?#PR_hN{f2Qpk4btd z&(zO`Lx0x&t?}3Wu>9sdj~CD0{E8JkBkGA@I~jsH+34yVZdF#WooJ(O%Dkqq<>uGi zaNU*qcjbp(ch+mqI{Pdr{kkhDBU(J0e@UGs!c=3O4^bmsKHUdWm{B#Bf8SMCZQOFK zIwyQ~K_73wZAYOgMtSGHsk&V|{%TrN) zs+5nTd|Vt_@!kzzyX#rt`N9XAGX_KM)LuhnDBo-_AC5Y*QRm@kZA<9p5h^gE;SO7A zw=1mFj6Jgk+=$LPYI`liS=p``1Nyy3jvP6T)*A7%V|owu{Umg@L|x6LuEV9yIRGs_ zohkKgrO`smaDHYb#j2NK4GU{el$wTD8K`j!V=!D!7w0nDR8n?tb)}V@b|stjhzhc$ zN}LXZ?JD5_vwM1eg6wMc9uWH z-|kcT-QA$O@9)#oorArHa(%_d29^$%%H6!o_5No41v8K-t;!mvngK}IwwakOJz2V_ zwRB;2_(B=+nc)lD+)s<(9=_0xLf4r%t3g1KO{xs=N4ih*SDEgg*Hu}FE8l$?e@mAv ztA2(`uAlUbE&q3BEY(UT*E^`L@=Lfg_pTXlG^Gc{^U+!YDSmaX>=hz5a|IOlE29F zbB-?0r;C-Q^E2H@p(&xY+Q%PJZ^wE+#;Fw=<8Nuul~%!XihCV(w3YIenvr_P`lzFo zyW#w#8mYZbnC_g6vOA;BipR?^%-6xo_!mH0)Hxe{@oa4Nq<@#+)&5ilLC*7~h_A*QH~ zgcqBlj+Ut7at8u+bG^T9uNdwLYKq}b56-m~E4kuaQ{g&;6X0i}!gRDP_H?enAultf z?iDSitt(oOjFs{eQGP-VoNma7C59Y@B!$T%c9P_YnN9AfQF$zxIAWKh=Z$P>i@52WX4+1+E1un=+J@pQ zt#%w*R0q|!g%%UEk45=0isX7fYyeEv(LPm2`}--x1UhU)+oqxo6_0uF&mo>Zc)I4Vqe{2`H=HAC@J5^MSK>VS1g`IEYzPdz>QQywMQn0f_w?KCI; z7#Fiw%T{IT1;m{|{nT)NhzFS(bb$;QY62TTIpxh2br_#PJgJlqa9yNna*XssL+!e# zWA$L=Way=q3lBQn1Ll=Bqppck+s-IIWQ;PzMbsIC@v?(B%8z^69lH3v8{ZSmxjMfT zr_n-QelnD;FG7x31fRhP4YRdh=FJ9~7w!^d!bS~Z=#>7Z2`DbqM5B9Ad*oy@>SfRtk4 z0~yRidoMNcXl&|WYA{~n84$`l$cunEhqL8k$zJv4^vT &uE+9If=>R|rGa-r>O* zX$k;y{u#VIXU{4|W>dM(589jqYsId|p(;SMYZwX`-E(Bnc+@$j@lZsUFfED;Q=}x+C=BP`ijws&6oX z$|a+OiTUr0K}zO6^-%9)xz&)#VIz&X*8+eLu~-ps0`<)LBD0GXnWgm$vVXyX!mrYZ zyLvU_x!|8Zza(?}FL6bu+g~a?bk0GBH23J!!o=(+fBZB+)Nb@eHrfadml0~t3NxYH zH5xyOOfKigkh2)eZgt16ol3ksp7r^yuKz zr|uY(qG}o`K9)gH4L;f0gsFug0}Uf}XF{v+RfuO4r{SlD_DnVex|q)_$WCJx=;LV2 zGDjVm|5GNbZUz0aRCx9ax~w28<{a_Qz4oym{{Ygcz1@{5cVgQiK~)H0nKaSa`VN~UW^X>N@A-*n9eR^#B@&H{bLlpm#I1hQZwi)j(x-1)*FFzGG+pDRj!4g)zT!*X)z)-VlE;}_* zcnvix@z?EDMKyugce%DX)cky?>H2I*`kai#@2DHqWR#)Lde!bw)pc60IuXCiUQMW~ z<`_vMiOlZ|64@>g&F)EDTGLV-f~+xiQu<(J+MbfNJj*&{ruq*~6v&^D0tln1!c%&% z2z98FULJlBPGctJaaL>u85i{EM`#?%g6iL+_&ENG}bG~@tU(9mf7%#StnQ8k2l zg0V0y(&QIHgfzLBGScLtVx+km&)6B_b^F2j`-#D_a6W)>-hAwG6YMRTdH&0F1{Cv= z4S1XijA-*wiQj4^jE&uVK#(>c4SvvRp`Bzt8rzwSkNjK0)Ujtoh7V_I_{AZG0W3b! z9_)9_Skt~xSMDQn+r3FI-pI$;kcvt|*yU`WmF$cMt1pwm2$&d__Ru(DCb17CIsJ|K zTObR*n8G+kE9pw6CDmu_Eu|Z+$&Z=fMGPj~f;HI~?{fUoc9i(KamdTv3~gof2=I#H zM$?ImuT)QP5}HvLD5)A-UPIQBpP3 zX3&6?P@Ba6Dn3F4D(2={7484Z^vPA4E!Q=fJm8b;g**tt1L(~P@Mmfr&Z%$?Nd;AU zq=rQ~VLnQ|6uzl@B)7$t!p5uEbcV2p6KcgFaf9cBl)MJtXEuh5=B;Ol)l5psAJ_)2 zD|Ji)qklM=JVb%xmrr_sNqBay#Dc2K9c7Q%z_=l7PHi2v6%eZT&(_qKVG1V=3@ZLT zHuy9#>)id$O*4Z5%K*k=ZRSkF6jqn<)5^3xP-mese3xB8v?{v^bfbTo z(`p=XSTYJGHCYu0+e0i+970tj6VjtOv;JD@`g5Sof}e+r1LvBhGPilSV~Kc{3ySkQ z+##EhD}>%$bZL9(lJ+0wT30RmVeW+;{Apd)sw@7qHt}z5Gk0tBhjk?a!`9!jq(5mw zEJZZoGFl57`i>#BPoUlwG3@p7)az@*YYzyu+f%RChS%*5PF}A}y?$kQy)t=yPU`jZ z!|QYW>*0~g)gQi{xd8uv!K)Z*w+7=&G9=7?RG=_W&vp2s#G-}iU~_1 z)^~hOlJl^-SkxXr)_gf-w>et7B=^-r*B@#&pU)PHFv_F{{44+5NJRz`&zD+_CH@Va z9PaOEB^Lb#n*rglu~`;YF1A-^F81n@`g~*G`tjE-pX~JmOQ6v*f#MdUX<<~6SdE&6 zp%$(cwanm;w#5pE3PG!24U>sy(DB0^t+sfj>D7XeA1$SXVxjiyhFT;-S^>y>Y+R2# zHaT6`NZa^ zgQ*%o7^h}tMgnG3Jl2u5`0i-bIfC%`@H$g9qs4)fiWQ_kMMf_;!m^2?yi-bttNyc< zm@qmRjk-pnLZ!TIvUE;@WOMLY#Rkc(L~7gOm>t!4HAW;7j=8?y4Q)U$3)+yfSkT7q z&;|tM+IXk6F>550>-{K|Y&gu-==Fz|0NC}9EqQj>F1B`OZQ@QdG85kjRdpL4xmFeIS@=jp=P&5;PhFp4NNwl&++ZlFdn@Ma-!ZgXkX z5H^z?tS6otY|df-3+-Zf+`e zrTGw7{h?ez#UDj>&SXmYH_(SeC+t2~x5pAJb+4issrK_^F~{b%(W*rV{-MhO@(ZoQ&OXCE$0j~|LF4zwDWhoSU@fn}FUHN-pCB{@U}|Dy5Rx-61e zDWN3WNU@vg)3~j^%Cv_?!1T=GIX`dD%yxo~r|RbLN@|!ne99NOkl`+KIM-LPhM8%+ z^yMPb@7>pux6-r@^qHL0gtX$ZiUIF(y<$K#$wXvLndYOTH5 zS6QMeudynvx?BOIs_MyMFJ4PBcB+HOih|^^M(E(~CTgFqa$CJhZK=6BZa9d~ie`Qu z)neW>`nL=7&ji=6fN>;|n@6$0WA_OF!#H768c)p8IhG&O=I8=>d~QNdvN}38IR-N2 z0Y9-^En4?0Ov&JROjyS9kK!^jj^O`i8t7`pDGdH)(wn^#}kp zcC{d~JH}yTmAiM~oTe2dZxq%TZo$OW)-HHnFHZ4UE}w-+DKOlzUj5XY!GO^TyzEzyxlRNcfWn)8N)@Ny&{n z4e+5RGosKZnDk*POrLxRbt;svS`VojwPKKXliVCqM^0&cL)1Y&F|ymth)3uw8+O@O zPGWfJHth4Td{S43`3&Aitvis#fg6rl*=iZKFY%Ky+;MSowa#BX-0@yFb5|#?t_@c` zJ-XsQwbJ8+r@z_hUbr`Rrf*<5`_Fn_qf5IwH@P}LT=m?gEB>?Q?{U|7hs_J)jSckb z`B5g4@gvrNM4z_`J64O7$*95ZSRMF+9z;+}6qXP4p<>LRRs`yNM_ek9kL6Ic{vcH& z5$m2wh?xia-|t5uV%LA3T6=VD`U!bbr`N=Pl7f&K3_ES&Qo3Ts^uk|L&pq}kRaPs! zjlN}|6-m>MGm#!;GJaBV?I-q0!eG-_IPM0sa$N|2QsaNQ*+H;~UP}qs)BBAWWjs*E z6#TcL?~rE&;6S%dZ&yLYa3copI`F0@cmR8_B40xg*%PGsT)>mJI)eHSQv4Y9X^^#U zZW-xpl0EGqr6JdYy+^p+;hv>rC(Vo`o9LXV$D!${2DHV{OJm-O(m^Aq&d2 z%_EE7HL^&nhktk=Q4f+1ZXjyVSyMEX>$?@{WXx{kX-|2}%G7mANCkUO@jBkv$w}xW z;AFb#^-QO+auajTRkNtZu6!VdXK=H^+z1|7o5p}Xy{zHG@kDd9SGE0a?P}raU>G@#r zV}=hHy17^xkZ~wVlwVOCcvE=7jPnEtW|c4DUIdY_%mGt>3=61msB4Z}$Fgv115i^l zXADwM1_`BUWZK=Y$yWOVM8|Fe0$co?5TAe7ze|BVA zJ{A{8$XAPXQTeG|h>ml;XBac_P)2F4?-$+eD>6OST&{1aJ(zGpoolN!YqRAaItwe; z_fPf^IGbOQY4^4N#-0Hk0BN9WG!Wxk5gQLIpUyv!C9TZMq=X*i`tI=UrmA&gd;@a3 zZ@~kSb$vV!q&L-&sIkjM40(J_-RCE5_jjC&4R)rX6-sHQp>9;wP}DQ&hSLoR4{eTm zUdE6&tDCG^?azNh>@%8-)S;~#(-UyiO5xXiT&Lp_mcVu#%5*THB%WTjJ}Qhy+op+s zVDV&$sWqb+T4Z6OT@@m7mj zQOZ0bB*yq~2e=bE(8)O#7g}9|eYjg`cO6z{wJQUOwY%vjuqGOGUfg=SSzjDL+wY6` zzohthwDw%DgHf@4~nnWbH+b0djHh1`l%li4O=SgTq)`yATa*nifh{zy3gF1@ zhR0}hJnGyXETr{s3p8WaSjDOJ;?ND29=phT)XJ2wZLklNsBC}6015A`)7U|MC zbVtTadB9)i3kcYJHtNt_{WXQ5X}O%n3xC3XcUlP`9QY~k#$_lESH*)(xsGm5f%?2W#X8>`y zV}+`x?ex@ouGT-!j#XfNY7O0Q0YLG}%wi5CemxEX3wT4>qebm z1$ZLS{t?I*5#)>NGF?>a&S@T;d!Jp)Fs==g`Fr0tNQXPF)$rB0i3zp#isVim`pN&Z zKXy=BDOY7y{dssk%4=`KldP+lzTYp>7SOAZt}|5$a26k8^T1rW=N{n$aZd2V@S%+Q z-ak=Kn6W8;%~9?$q4=8b$R2O2#|2aKS)7KaG2Rb5!f+(TkSww4bfB*Oiwzd4gM?!n5UfVzZ$oHLsn~3se(UaM;mq+>KQRlL#t1T+DM%!AV z4b7zuGbM}|cDE3(C)Spq9L|pj{^9&V{fMCDS&!NU10G`)%xGY&+%@D$+yv|$zc1lC zf|bSG=K4-+QsuF7=MZC2n7D)1M5*z6t>D2>aL#%ei8>FKcJ_p8qS~8mFUweI&DCyu zOKHuux-c#p?l^~%z<5AEH6pJ#=Le$f$OSiFb>npfj0#_n06^4rAiDU`Y-!Co*hnS` z516q;HqkajQYh%e!GktB6Cwol87M+z+U&3Rm>XV(+-M4C(V*t;bF4Q7Gd0uQ$|jNG z-02Di4B$D`_?={FS8kJ#)xB9@bdFIG1ZCrYH~)angM`wh%1dV29-M=r=w+Wt&D5C6 z_%_b77dDf07UB&<-U%_cqd0WA+p6N_&AOwnH_VD%wbH53OYK+7`2lw4AS30&mO4j= z^JAI^$tc^Bl_Cq<>2oJ;veW;LT8l&L5JC<721Bo*iVWN}WLFMlIE0+m7nd9|Pvdiv`RiSaF6)amW@@7sR)*2NM3q zOrH}wYluOt|2<^Pvw&JOrw}slkwpbeh0beVn3QVYZV4Fi8gsU* z{NO{VxAL|14UEPmKqsOLoUWj*&_rD1fI)QN|=mv}>Dp zJaI%Z#5K(|AQSxYjbv(YDcjgv1owYhAoI!9~cs3toHEZQa^tC#N}6J!ntUwQt^u_gos>ToftIEGjKnwR9Ek#Af)Y<9|fOh*y^t==q;OuwSe{t&5P6Gr?#h>FZ|EO zVICs>B(iAoo~klM)3#@3lHt9*S@*%COE+q20Vi?QXF`RZxIb#jJdJ; z41rF>k~&2|o@1t30m;+Vq(-b&hOr)89}pSoyC|3<-$OD+h2Otlzd5e_>}~dT^0?a%k_QT z+CzZb-pvrOkGr>;hneg9GkdQQmb*q%+9iGw3%3?R8MSsk9Lga__N$yCGg{#NHG>SQ zSGmHK{rSHny9U#EZ+Yh%&SO`8=a>TG-2Ixn!=zG!zc=`0TFh`n!|I2k&H>YI`=f1R z(FV&t4>EzoHAyCRzqZ9Q=4ZN|mK1OZOf7lF|IGgqxCoqmv@UaCAIz_u-qFQ`04k$# zzP27^zIH7-UoaUQC6dy#p`=GN7EC3MeJG^TcLfS^fWXyw^@VVjpWm>lcB7e>L-?5@ zT0f9)e@Fv?FUEwXzVQ>(FlS>VHq6>PRA6@~@C7TdyEyPXqEt$&+Aq^b)Qg}ULeQQ! zvh@>Det%KmtXw}wKWpjdY`p5@^GdH4tThu3GU-(2>|eOg8Rw3pA#9(KFOlt z{9Z{kZ!luK2s3_!)plMjHpm~{)-cF#S+VpWuZG?%0OYXn^#ujqj37W<=Dv8y%#$$$ zX0Gp#t=PfAIYkz7y`MC(x2HI_WIMC4r>I@5dz2lp2M~cv1))7yzt!y4Jwo4s>JqC) znCJvBS{z(Lp5RB%v6c_OCIp{$X0dL0&$7jV!KcZ`8QIyg#GZg+o^Y^C@`N^cf@9#G zIM`0i^|o0j``onoPQGE!uvhmzoNewADQg;`Y1K0Iy2qlM;?}5ZpMjB-f!+}=zA}SL zUi^%Y5*ptJ7KDP=I*6lA(BvN};%oX>;4Cq>WRy!)pHLrwoYM@=lz%5^bA|HtZ_p?=Khoe-+W@q+rx}e+UyG z5M2sro}C_&Kj_9$CdMfddkONe`FUvl+x2 zS#jD}*GFEP zO;p`v!-J#FFD-8yDsLD_FQG8Kn%Z@5|BXw~;BAa!S-kyp&UE^!JRc?hhC)C zVA86;%jg0im=3LkSm<}(#}h^46qu3%D^X^cg=S45voKL5?a2|zvjN(D+#$8}&8Jz08pTeM++>D?R|)l#~sx%8oI>2>iL z7O)7gKUumkTRJ(Og+#rQ1kk>L0?{WxM;pm06y%9(7=j65zwbNWv159`M%A`3K5S6{ z*|oM#+C{OdTeVbBl=%?lX5w3JW_W#1w^}AuC z3Q9Ip+uEQ10xt(E%lbR_=N>#X_(bc{k^auVuuD=3`a2)wl3i|n>umt~TO7E(Sm`-Y zpqBdF*+U8hNB7#bJISUldJ@{!{#0yi(f|z&>E)CiLjyFXn6YE8dOj8WwPRY2!h#sX zVl2jn|4|L=;l6hRXJ)wX9Q|1BO2pEJbjx(Pu)Dmir~E0+$kAlLlkiUP=T3*fP4Xp4 zKy6oLGCMi`>^-#5Z-0C6AUPLJy|ND5_dV-!BOQSObz`sF zwKSMzNGeP@Ubdp*zw&D80D1Xd4aT#hN!|^ACxnjn_X!UC0HV~m1(z01a>K`-G%sP3 z>!2qps{xZB3Ie9q*pexFm0W(5sNpS5!#96RYXxeq`}Cy0dOzNQqod+nbM7PBx#F=` zdqZldr}=9|W4u^-7kevsIt(&Ei!PlnsEfJg?GO1*k@hyR+@`s8$B;cONfylRp1;#UDpy%tc|8c!4Obl`=0I(pC6X zMWQl(J(9px9RkhAA}sUM1dv4nSM_*!;!iEEg8Wo?2^h{J>YTFmth)+`z?g~M#_u%0 zl4TR}HLBNH&W9ofZlShK4sl1Th(O-E2e&+%`wArob!8#<3Knf9gO;H^$c7r#$aE2&jg?M9dkxxPcBoytl z3*w#5Odqp&9EyK$c|$tdA1L1x|EIp22DJA=0M+=$+v%h~|5e1KtV>V0o4$GENc9cy zG6kM*P|R4$6c!pQ4Xr3HzqYi$y4nQD0S&+pA=mrMJoB#6aNd(XC2XjMlg8of3B$n? z#SU=8VMTuTF^2Q?ry7Q{B?X06fbS~bz4n!fp%s7s748toz8)LQxKZ#0ioO(ni$2rB z;191io3OCWU_qo3>J%)|hN+ZzYC!E}tTiSyP-tI(%@;u<&OERFtI>z+U!2FX5z8G} zvwiU|C1Sa7(^YUw5)Q^GrMbB23#@K|*uOTZ=LvKX;0li> zz`bK0a3T*LEhLXs)T#bFuNW#M3teJN4JodACh#{1DS;@uevGR|#LX{p5<1{i`d z%ir0gQFXvF;f5lzM+YFTV1dWy-6;kT|8BjQKGM^4qp634@A_R+<<4DR(!{S8Aa%yP zF7&mlv}V2FC1t?)jgTZ6M;#Ywv2z=#3K|K!g)Z7mP-*iSk8Cboa#1MWP7xh)mlP?j zd0TjAd0dv^H=Mtp@n&itv{&u;bk`qhRXE_jD1RT@j;td>g?7ybg3U^YyKl3Mwfh7W zV6Zf%%gyd>?yH;;bf2M!r!6X=>Rj?(hZu2Vdp+(q?Q*~MyPSUIYAd}{4|;kiTFT!O zwDZtPfOW`LryLAKf7;hpuG8Tr%Vd%=L=WfE ziV}TvskC>uYiJR9)%r*V&XLZ{7zk6MQjO zAxsm$&0ctG3c{U%vQy-nk_VoCJpyM9ubM;Q6)Xg<1Lw1%(dxLpBl{aJ4r9$ z1S!H4^d_`0Wy47*?`G&IkpSJKgt+&WFx;DMxQr%w(nH8N*)B!b>k&!BepgU6$#dfI z4MMa_O}_yUM7pci8^Y$3>Z$+0nI2+#4L3neAXdpVzy5zV>;L_Y=Z){|{8t+}5(S+m zMI;e7X~?DZs9<>;=qb8o%fONocrTyX>2e) zb?_(Ia+Ywnd|NB%P-VK6dS=SGCKw=1v>v^QDc=N>p=mUGP+bc+R2r93f3n$88e_HP zu0K73TK(H@7Gel$nC7=kal0OKIpWmv)K}XiGVVbAPI&b@ihCvX>C?+O-m&m{d(<2r zapp?*N&WeM#iU`QftW$7KQIByfL<18%fN)GS(uFWQL}8nzWw98mMVhLjEy-r0pg43Ff5dwi69bu zXRjY<`O^C~Z{D0t+!C9(Ijg|ra1ujn>5;+jomy^r;iFI6!QZ7-Z5l@>$3RM}KBSk~ z)<@a=RC*N}2ARpImtPt)*=Oev%VD#dwF<2)tJD*1Bxfq>NzcI4vDy}SNkwc9==cnf(SmJoXeiMVO6&+FBx+UE z%h?j1Ky3{(o0x1|VY10Q6D-y$=;diE)TgIzBm7`RFdMcs3cL0gY0Qs1HwS4)yo zYjm={I7n*fv|TqBpJ*Zkgzum0ebosPd{)V8UM~hce`pqwH4yc9?vAQ~G+r9iIRtn1 z{~>juydzIANROx>2jc2itgN0xNst6rYeg$ML(0jDxcW&~#&UR}<#Y5dwkhZ^K+m

pvd+9uHm(!3Z<&Vv%7@B*xd@h9aQL=KKU@D+xbTWLpsO z3rST+QhhI*;c{jAolFs>@r3@(dRzWE8QGKm@T;WXu2jFiH=90S!^jTBtc7oXRxKE^ zO#k8PIe0`|@M$8jervBU=o*~=`Z9Zs`Be$bKW*Y*GIi@@fmvjh!Si)83~FzsLt|Z- z1|0L(eT>8VUBmNs#(F2qRS}PKW!!FF4Lb`mn8=ww;omp-_hbG!1(Wi3Kx z9k=7u%Mq->6zH4O1a>W;Z!$@-o*ZonUl!r&yUl0no{B^|bqeoFqpthcb(eMq(=pQc za$Bf{+A8V|uBZqb*lTeL8}CG-dnBo;z;8D#ilng9G@0MyivP|CaJrX~t=xUtF$Ih! za6b(&{w>B=thZDCEmMbJqVAh+ml@gtg;-U)op!fY_XWuPHTG6bl$B{T!fl3lGfAcr z8aj$NW{Fb5f)iQMLq4i_vJD)tG+di&y{U!X$# z%H0k9Q1le5`fAs&?tRsy@1*YcKjZ2O1}#H)i_w6_6U){gsKjEavSI#gvayKL%MJCE z-!Oljv$nu6Drx05k=_+>X%Vc7rm%LqL9Y2r7WBu7lXtX(eaSR;qg`)ZqvZ#_^Fkul z%oZ7Il1gLd=!jiJ??~o~oHu>$!ZKNt8MfGvG7#p?aPZUM>+rdY}D|q);Nv@^99D6>*p1s|A>ir>Oh=fa=e{(KzOD` z<}~jtoHS!;fdnYJaoFTHQU4|(pb+>Az)2F$ojQ)e z_3fU~@k*tIwLM@TFu~ANORgPjej?DldSp)x+$Uw1h`pcLdi#vA21!Y&RZ zB!B<{DOwWvHt!Zczs=(t@!lFfXjlJUkoWKsK_*43r5}rv0D%_vkW-R}roK+K$>6D5 zG`5)zsLS;ouz_GkOmi|ss~rrH-OR}lEXFirx}Utcw1y6O zKkLr8a*m7yD*6d|!V03LGkEhZh|sMH=7=^p+-wD5ak-_M@A3L6jEm0qmG9SlPuP5$ zEGBMLZz$pf-?p7<4z;p|d6AhU`!DwUGGy)4paG@b#t*aT?NL|*8x`l>HcUr4UIc~J z*y{<1^ zIv>H@P)J_9tYEaLFn$xV$bqAR&c(p6Lt@`b1nqGBfH0M|wZT{GLV{iT#-ndeCWp7N z7C?P8doi)vDr(z9{hM{DH`=8^y-qS-adn41nMH;@Af50O>PZMzqzupD=UXUO@jxov zr?{=N5aj^DYsMK602vT=3>b!T9s6c0=1xuLbI`1_c>VdLKBVFsy3VND<{8{W;Fm+= zPXE4*dlA(OhlOp%p|{3vlY$Ql0Y0c~+(rdkV`p$8r1H!bu?iWZCr3YX!94F3B4wYu z^9vJj{dwsiT&l;#+B1!dz{-8wxowsSD|AW7Ju z5R}Dmkhdi2=b1yF(l=hoF)3=igI{%dvUMp`>**_vbZCW%yV~Z(u?C*51qxipGPF=q z^VA%y;p6S+1O}9|k<7EvDBit|^y7c6kqT&a`&t8@aii?$mLXSc$n6k=4pc0dJLJtZ z^4OX(q z+uEM-`%lI0WbVzG~NjEIQi5oErsJcxl*@c&bw%`yKsauY9b80^N-Xt?}{$@60w}OKQW~ z4qbIt9AgMu6-1b@HSMs4*D_XG1x@ojNDP^24qL5urMQq=l8sFS*2R+(4R!kgPIN2Mr-)glSyOUV;5OnLemz#{!pT_OjY*4%@&lKj&@fi^>+V_pCnD@&-$g_qvKK!sLUUjtnZ0aWM=v z=*uvh{yYquwQ=_~Hc15YzBM^jSrsD1j8lOotd5KQ{yx(%9*1@jn;(z!f00P|9*}04 zeau0Yi~bdp5CHOS;llacg-P6C?;Ou~Wd8i@<2mWs#-rwI#~hE9U_6*j#~RPP?@wy- z?F&jZtPH{d-u?hb&v&fk5$ehyoKR03!?>PWLLllP6&7&o!|e;t=LzP5v(>h!ryfO- zY}(CKCRBk}sJWqE`G;ERLWcM+FW1N{#&pB(6Tz7ku7DB3CuL~I%2#1Jr*woPrCkfs zw1q*#iwGnbSo&2^!JUxl2vqQa1KP#_X8Caq@f3!Ob-6}S zZ%7R1C#(p>-$&lNdd_hPn5yR;ng7BdeE;5i(m7K}BcHWK=F|x~!A{uqC;hCh$IBPM z4`xF|gdx;jtt3n6w>Jp;s2`yx*XMNRVMDJ`0o+}&%%2vdy~PbGwm`3IcM#TZ*o$+) zld!TXxkGCd2hUL&Rz25^iL_~WODF~UXzyIRU1`_nOOJ@On8TS9EyP$~Xgudilk76^ z4}lNYnk8r`Chg-#|FTi>qbWz0aU;rY8KoW%OydjGngE*R*Y}%*q%OZgSQ15OjG|jl z6Y{S;9@yT^n$kHc;1-8@1y=C1SOPuAw0ON`?VGW+!I#^J@D7tFXB+q?mME{G{v%5a z;SAnH9xaS#iY{EM3DI<0TD{;-xy&w}=KMFHOTs(#@B1XiK#2EFod!0mk2*$Ygp%BL zw1{7;4+u-L6<)PT2osO`(ry`}WG#f!Neb0A&?|25Xmun7t+8x4o17ypoL*`L!09>o z2Kw$Z$i~{3j`$E7e(bDHY~w5zZ5}`JSa2{h1s5h}o?+n``+}*T#llx0I%mFko;J_Y zML~|`-!cRTtUD*LaANf*Jn<-dIRAKfX{W@|J(l486bM$K6L*u^!^waV7bqp$p@+n< zmFfZ3|0oQC&Fa`_a_)Sy!R9&1Otbhn6P7K7CRl08XN$ks?d4dkkIP*jKub`?rs$K@ z(^S2-KmRy6PdLnatRw4~i7-)tu0qH0e%o3*6@;6_WP@Fr(w__IRqZ3>5t@=5Qa~=% z_f_s$gX~4f62WrRZCHA@iNkr6oz~Zl=PN@1COVl0_*-4p*_j{|CxYz)k;omC2@$H9 zVY?S{RoZqlXvN&%6-)jlne@pUZPm~~^x}tK&QeH|9R&n36QT0f_soxT zBgqr`J8Hi2jPYU#-EW>kD0!h}}6-dUQHu60Zi!67Pih z?le?ECH1H!?}~G$YOQ|yY_<22CL53OG$&C69cpv^kMHn0N>*L2uV%C2ltk9F1!v!& zEx@f`;;YY>{3%V#3lxA&|KSv*bu6K{ag<5SFLZDNL8AY~C(gi0aq1nQ1h8aIR!P%DPH&KnzU!A zgPLPR@|d@8gewE%`3$c59UGx-FmzO5uViLaM;cx!Fam`fEI)7xd?u;p0|p~R14So- z+UmKv9N}Dq{`_~4mbU*($|H9VM{(}Ve@#BvkW=yDQGfnxltkZK6SYfRO-zj;O}q8X zM!R&fiY%Oo+G(z(V-&II+cxUI>(>o=r?VOOJG%$-#{J<%m7O6J`O)Uf$CAAhnJmFcdg-%2XmBToxnM@12`*a9z@Hz5FnF+s3Ox}xGMJ`)X4g@w)E5=5RBu&NrX$v|02Zv-X=-w|26rKeakRow1$7} zi;Rf|_4OA$*MD|nbZa+ERbry=rmRmzS;%2#>hxL@7Qbm(81JHK(M&sTfPR-jDV(x< zYpc;Qihj0q&yKycVB0F@e-CP9njSpG1Dlb>lv1!|u$J$>yoQ8^0SL{;y_R?C(3R=N zk%G=B@`Y59EBKyt-L!!e&3vkJN-8+jz%R#<&nRbydEVsD2$LDPNyC2sa9DOixsC#q zsVNHtxi}>=Z@Q2>xK?%z)d~x;OJ!iQYz-$Vm6SckEz#OdLLvbsyyqj2hSey|3H0X! z5b4ho*5&o0-#Zgd-3X*a%n-H_tp1OrhGH~3z-*VN2h1(}IKX7jBN7_-r<#3nc9h2g zT;6yX=a9t(7as061aGpsVM~e@n9B7=HgLRIk)=?-%?yb(7wC-m!cDsA=~0-r(?^-r=2bVyUu(@YIBkS@gWwBaCC?z0OF@_UB! zyJ!V2-L0SM53(wR(+zmLH%D3ajSQ6XcSZTTXe)Q;kHc$1M|atmXzc_A%JX1X)HYHg zn6!EX@s0#!CGUWd(Lr|Rv+equESleQ2Brv44@O=0l^*3u=RMkKLJ8N#UDig$wE-np z45d>>_am+iS7Su`&8$s#4__Rx!SMQGSoG-}hUD2&y^$ zSk2~86A8a?NPPqDD536+;V_}5T;Hcnx9wLSVK&NLJ4^YUG^i;o+*kTRGADN$jWDn2 z2y_C=KVxuIi~Ld5RC_iD)>y*?!-V@eK@ZJT{5RJ zxPfw^N4Ue_mdPZ`H-Y)Jg4rGCr)kdhxet2`M4dfNBjxf3(T+N^?BT)hGmB?4i+y?| ztGUq2gY=87_QHBCOqae}y0y9V8`;v&TX%f}xxR-D(>;cbUMRA9*y8PJFl~y{U{>Gl zrl&Z-P=u;GcG`oz{T)q#2$$sg-1!`k4t(rLhaII507ysohIuXZ-DDv06w5iqYkl3} z`CN*B`mPO6(TZxrxT^04|5V`IieuR@E9HCbOe#BS%1=+4fcmbs$_yDa$YvkV%^W|!c3nN4(zUAQ^AyEtvafIMc61t&45R9!AfQk|qR4O! z&KH2S{cGB;(2k1G*q6wFwKc?G@#PzyTgPF;Tl{GgO5S>LD-`vd&|aaSo`2W2==zPB znHEvEg_|0oLYB6U=7Pr0Eb4l?NVNNF_HBEzJ}HFv{yA`9FJU6+!{}zxaN|C`JPj^{ z(l#^PjZS6-x1F=>-fi!8@3!B7n+0<~_EQjMK+zjyiizBqE)EUmlw%IzMUgRSY2eh?qbuT8c1#A!=?A);ai$Ay`1T4{Mvkr&dXF5t(TJ4;M z3KGdWUb2~132g94Xw|2qiMYWH?i09&=u0S9%DH&N`CBgNY^{JW`$#eyHM0skT$cVY z^AVCTd~cLfU}9~v6>3g>DEZr=kPvQPX{H!?KeUzpO7j=2*sO@K;#@3T)m8wrz_NS( zO!^iCFCB3Y5>Gm@S67&~y4tTdC;o{`H_|77f_pL@&Ixe=zXv=%3<^R&gnQ*fr~I}z zUT7F24xo9m*XWSMty>;mODMS4kVf+Q->CE#Y@1S+Lh$cySOqrw81Wr zLs!@Za_AbnfJtZ6iUoSTZQU5+4dY)H$mOtGToS=+5$iP7#?+E4Q4c9=y}B_Xv25P{ ziIof6%k`dQg4Ln%r!?$2P6r1SPV+vghuF_oaOpqiN`q&UA%Rih2uM%gf~km$GN~Z8 z^0%CBFhB_eW1>yf-tEgxBIt~yx8bKDo?sE~VYcn=9;SCKOqf$3_TcIK4uhEP_n7ctEYq8Z^XzM@ z5es)AWt}l>2f4f0@vOU-79rBWXd#>Y4>zM#H<$S3+Poia0!GLkLasb$A00G#xTaAa zUcgLw=|!(kA?&1ooEY02bw0%&<3yB!N~9YMQ1J#nD02@c{e$t^JA_3tr_dA{2`a-3 zZdA8|d%+>P}{6$jlC^44BzJAPZ9mUf=wPbfIlm0e4S% zJU*rCfXAhV#@wA#W=>k5X2t};s@CGrny?GO@O$pU`F%M5U13zjFR?04tNx?Wxy9xH zEtn-v5I^L3puPg1BpfjXXnW4I$igr$rd*8-gNmJkQ(@H$NvePmK^2+AG1wPjp_Srf zb)6miY+eY)f|mO&#+i9sj9vj$Fs7(k;g4Nyt*w6-=|^ZxkF~art$Nh8_4WTKoyep! z^@#*d=dY|^h#xznYUoJw?9SA2O^7YY<7oEREUsklM6P1f+SI;YOtiS+Nl$n`gOr9t4YG$k>%B$> z9mm-2FsmdLB(6|vL(N0>+9|z;nsNMR_9|A*8N;#36$T}7Vp7EDYuPd2T~f=drsuD^ z?BrY(lbti#v}N?;L(e}kdY(0A16*Dq|89QVojj7{m!Y)aTdyxP?#85sp97VRI-iuml>>L*-HLm0cjmGF{;WHyC&j6Mm;czgCRcm%UN`K9LBnU{7)$Nl%Ss z?cU_JH*(-w*Yx;%5A{BlTRm9v-u6zQHSq6@y6&P+VqV@qx0YWV*|FQR$X(nk zk3B6+Iyb}GW%=e{{xqOMbw&5;K3(dUDOJk%)R2=L>1$rUIn(JfC%7^Y^3nQw;+n?3 zdg084ef=e+O8H*()qAwQKHP0Uv){SJNJS1~h1gUTaqoF;J=02n5{YK3qM<^A#3`Cmy$VGT+k+F`w#A-?+0OC(` z7c2sBCvk)%^L^CmkR3x3AUcZ5$)h#Seo2&rnNAReNjtH+vVEq+$<=506XanfIbPQZ zjXwwI7LVX7-le(^Lx#9D$;3lZ^al=# zrzC3*hx2>fkElJPboSl-t4}(5ieOWmNKR?IG#L*-r#|2HgXJXk`7g@sB0fe0O;(YnUDUrzAGUzn ztlirGG|cT1A`?WlW1Q9z6{-Rf*tC)?)g%eKD8-7*%b}b68S}jwms?+MooDY@>;kc& z*u@q=n1LUTD9Hi=z;yaIx9E)!+L-wSS#!LC9RaY~+PC$qiv7$kO%elGQ)8hv_EX_%d~Mz;#u43p|`^ z|7EH654!dXIt(dQk$j*K4OIv{;B|$Xx4WUy7E_a=!h9L0`v2XZHT>o!bnMfR6K5_k#Y|}H*wwY)Hnlmn)zk=;%wiu?#!W(Vn#E{Sp zEg3H(K+vdslHu*ladGH;_o38={KU2}_b!pjM1n!%K4iVkTCpBItB*YUxV`Om`hF&6cY3!X;$J@)=k z&K;A@MVLXSkd1PfV7X`Ch)ZN7qJv0mj{kx5MW2=cMS{bL4&ks&P=a7+Q0RPD^`_Y-18H|S24qWZYdaCr6=F&T|rBmX&h9vyP!Bf-7 zW&-e6aX#T|Zr*aU>0SoOV23p#MmDJ*^Smo&WO&l)IBxn)kLL#ZU3@$*S~#A^PhV_2 z?^XuXz78S2M`7&bsmV2ic>sr}*P%q(>wdo(%N( z#)li}ajh|eiSIN$E(^2(`!M8F@x%$1@rKV5=r^EnexcTaTyXA=knsKA2R!p z)eIJS>mN0~+McFsf68hj{2FTOYZQ`>&i*v-x!dHnM`F^=ix)I_an8(jzLNZP#JTqu z45aTeB-Ss!ZVPUS|Mw_QgYzJll5SIjd&W$4oW}<6K4s;G_+Ac<@vk@57_}M$u0~;9 zUY?qgH`WJ#^mJm{xZ9ma=#Q_&kWf`s%dG((%5E#v&% zb5qc2ahh06lGt4rq0pcOy#M!CP#c}L=#w9hzhQUdT0+1<)tVNj;yfMu)^;&nY=)W^<(^TZORqHh|k0yr!@zt#*UMZ`7p=PhH5o+G?&TQE7WsCfrnW~G2PBz`1VpVw(Y?t`(K{ZCyZCa+fS+U`K(s}#;{r2^6FbLZ?hywJihf|;x zFlVU~8lUku_6JtT9H3YXAc-fo&RdTK-*BMnFz{UOCyenFXCzhCU9+qcK8tmmd*TpP z?;KP?s2_GGpiV_S*Q%J#W^a?1TtP3Am(eW#%=P|n>x@;rR^9rqRI`k8wOL_YTx+2Q zt6@Aasjs=TSQLk5kM8bWf2ullTi>-3SRnnHZd&BC`{=|6X&_lCERX?K?}Y`$R(VBk zBfL%XyG>$4Jhra5(pm$1lcBX&o+h+alEd69m}aoIwJJKbL#Ne)Wu#cnk?!z1d8PGi z-MPc+S3NJZPSyvESBHyxM4Gup3#deEv5osjpuG9>3jxT5B5HvX_%xJ&hN=~gn|S~Cd=y)$Bo`5St34O5B@!VsOUNiJh;gBdt5$K zGGX<_Lf5M@h1`j22q_6@3xsHv91S~>Q5;grkM%G4e|F=BnFZ%T$}17RSo*vb!m4Pb z)qDA4FKil^B+4)iUgk#}uj#Fx^pUl-3zD{!UX74;R>3XMa%}hbKXfGIO^dajD!rq* z^cMLu17DQPn}IX+(viHYtT~(%Oo{5Vp}k6b%d!Y1@U%IuXS@vfQm zKf+eZ4px+b>}}aF${%48nN-+f%L?^NQ;DEoMKGCX!M8Iwd>LrB-N0=3l+FXI-!R!V z4)JpH?}%{=`>ov297(x;5j@tkQlT2?>6o1ue>oQNHdc@eMo}1tjq}?a&d+I_Q49s2 z4Ci&_#l(<#7G`uIF}b{nM*Yz0je^uS61FUfL&I*v~1a*6VGoL?lrW%;z<2@vu zr{$z_(6waY0@Y2O^>zwZnt(Cnl$x0W+D&p$6t|1AB}C!a8O{R7K?MgM6{nIHhG!s8YW z1p(|cktA z=>M?wzs!0B7WWzFpBb74`u&;UaTDU;aroe~(kbWyc7U73*k{8|3LdAwoj8;0@^HRZ zmlLwPoLPgNsY~n#^aGYnxljvcCVEDOjqF+(Hcf>Kv^?Pwsg!XA0())}yM*xW|^9b;=%#(w-wGzNX9*G!G0QUHx;UM&|C=fMisf6`x!i;gf40q?Z5W z8XH#FwDZLQO{2HSzRV{h99@`st57abVCeg9Xx}JjwtAm6OV)4`-Pr=pq^%tp0b`Bn zOebeeZ}BBF=PxU;Hi=7SduK?5msB2OHO-cBN1Z$KwruHn@d=-kJL4L3M!N6y<<{1u zjnVu+muJrK#}!bhZb!{opbqh_h+Rs&PbT8sTGP17(4oE?heYZr1$ne`#z~!Wov7Jr&)F#9-!I!aXywoLEh+}tE zC(a*{_vnt3c|Oo-+4PEkRh)RLF{-hSsK##r^OvEj@b8t(t^S4ki@4UmZT{are)aFC z{@+`utA9QI-+tQDKYyOTnLo|WA97}&&yE#;eadIoVkzej55}zq-Qid0BUCUUGO_!2 zWoJ$9`9C6(3Q=Mb9}R_EPgxQqX%;*rkJuLF;21r&reG{qbH@lvd^~hB>K^&R;}o;- zh_y&r(jm8iuL)KTngBr276V+7u5Dxu9}bDVo%S7=!@;SNOAta(=gf;2zTM7O0RcFF z*qDX_WC_$B;}FVy`zkON3ZT37kZ~$K39wG-5W04n-lySXBN^P7w%2d_7_rDd*NLbGRAmODbBt0 z_A~kY5{^3`T(^Bx(*$2c>T{(f#HSRYv7-S{lGz%8$4W7Nsa3Xemi1pR2M?*7TGTLo zixubaI81X+496zSKOdw$sE>wx79~B*nD>+=3xZy?`?LNbAEqoIUr7=ibt5gM&|>I#_MvFp9ys7Ut8@ ztN*;$>Uw-p?KyGvZZQ%&F)ZcJ2q4rUpq}ip7@Tl2jPPpCp^XkhIs5 ztUmw+h_XGx`c>Rtc&WXL;c9@a`@#0K%SiK6@!zmxAF`Fg>aj6<-#YL=vD5|eqh-Op zMjitS(KI1Z7hxAI=ucA84uum-!Jq(83>R_i?^ZE4ASM-mSa@Emgg6YST27iXuw3sL zqXI=5WQ!y4T<<}i$raJqD)GN?CXt?q1x4)HDs6@kN?7O!HAVN5x>t+rg!oEc8C+*Dz34eJj@A(%?HK4Y*>0yNSSh0 z*Q{2t^wuj^4YHAb&kg)=Zfdn7wH|=>IcZD{2~zdM!#v z_0XvMGu!nLtr;FRYWDj2-pa-CpZ>_KWm0e^8Js9S5Fsg~Cn8|I6o{uvPnIrhE}cAl zp`rqr_^bC@0)XL9^2MNX0C?%yqjIM27U|zF4ktdQ^>l`l0idV8lBz`xAQCwiSY?Yl zXjDg!sKPcq@M!>8d799p0#eV9boo?KetC5C!#1(KV7ufibeKKxv5t<6wpGd-#>7QB z65OwDvKZ4!CUIMQBfyzCrsdwkd4L00>=}BEyV7o>X|u7B4z$Mgx0)WEhuF=(E5we; z|3Q)h#<(TgK;0AdTu(GpB0p?A7ypOGqxs$1>ae;MteH8EcRglN0Jrbi0-OF_0YLx` zlI)MC7^gR$tNXa7g)dQ&R(e87j&;y` zjg`+)H$jWz_hQTLo^KD&=Uhx8a^Hp zmIOzz4NU0c5o8MOPGRYYKS?WnbkLThEvoVAPl{MjE_U?5q+=CRd9e!^Ch@}7AkdQa zdZ|Gj?|A)2x|FCt9fragdfSdEW*_+o*w_tnB^=Hn{6ds}M!{!9&Hg_*4!CI_HA~6Ub zvgqgKm!PN`>?d;?wdsMg8k)gBX>%fU=?k!|104K#K>xSBeFeQa?G_fBdZ8yT-&*Fk zuLdv#<`R1e0cu;t4d+PhS=mo(vI;aLdc{3jEPrJ|`v@5|uSRt)L$ZLa<_k1$ZMx>I zr=%O#dLw;WzE&DP=2Tnz8VA}k1+_N1d#Fu;&WMOeTZfDpU`t`L-AxTYjNeO&D+f1~4Q`9*>RDU{@iDtm&pO&ze}KFO<% zL90>kTT$;{wf^h?OH6X4Epr4t7H3Eoybz>}EGr9WER=Z+7MrJ{)(+cj)*vVD1XAJV9 zi9hhq>=|R04Lo}Wo9I_Csg_6+|KjOJls;sH5}*}F6Z8r7%bPRHQglM!+ju53M29T5 z`@OK3V~yj7-V%*hKYY|$VCk3vV8L3l3}5hRr5}!e(J?{%pO%Y*thdiZFH+La8~BQ9 z^d{|8>-P4h|3-BDF?TKqLW?S#&_$#0vCGflzKvGT53Mr0YPC4XVJLhAn&T{Iqg%3S z`u6N%ZNI_Vo)H~Pm{f%PrY$sXVR;U=sapu*WPggBTaOF&X#0ZAfCDCH=5GchByW*n z&go}mJl2%WC_Q@I`kaviG-ea)tA1vBwrwPU;VBCUcnrR*vT(*60lWCNwaaMTV zpU*kp@BO`#7I42kuh*|H$o>7E@A-3`>s;r$u5+F1Tt_Ql_lQ(MPme6PopUNGk(nr@HQoCLwgV+kL+(4X+;?WVW#x;x z%a?e|5#mZN8M$eI&1xH2Jn9p)^CUD8Plqrdr!sdi{^O@ghX#jOmz)Dtk!9?uvkXCO zO+D{rFNTs3+}(AzF}sgjQ9Vx5Bgipo3ZHKO7t_b_xGe>p9S_zLhbmK)d1lZBwy2qzu@I)$x*6$0KvY#-W?}F1G&`w1~rbl0I4NI9hzPxM4-{jZn=oBKZ~Hv%L7bjm0euB@RT? zC(mbPQn?-3C|IgzZq8=026xaM<>{n4l6+Sd&WyL>56-#bRGRXZ1@h9Iu6r_4mY1-0S;4Nk-P^*sPaWkY1VoyZQgi^Rw=*$ z$fH_MLUBZZCo081XAY$-(S+l~8)6wB9I`rY)2b38h&H zrMc28OV>@8o>yGC8r8@ODJt1=pl@anT9S>%hvLY&c1fo-YCFCoo$g+x)^gvGUfH{( z*K5+|;iYQc(krp_nzi(rLwX5_H#eLPici}{m`IL|S&lJprrE)iJ~PfrCZ2TC5LlN> z4JqFu?XpD4W47!800sJUw2uZ*mryJYK1b#=<6KsiS9~}opBLrB0 zNIDL)E+;yB`TmxVWjDe?;*H7fKNVj&3TG7CMYJB3?&;$N9S1~V2emkdQ4w+yrq#Y& z*8@Q}QYblXZH6X;>YS*-Al` zBg^-a)I;xOEBFB4UhAdnNUI*uH;d*31t2W{x`%YlIg9noodq9&eYt-jJ@9>eG5prGqjV#_EC z=jk4X2H(TbsCyW;EH7>b%q`8^ikqAJx18U%`TYJZ&+gm&Y}Ovd_Lj7=Uv_08p}Vv( zld2+U3qdeV*tE;6hWD#I(JYTZCi;uTQZ-F%oUc&$n2SlV@C5GsZ=r%f%B8NU@?Ddh zmZ(|D$Ayzu@}EnjoXmzR_jH66$vw5`y37s#mdgXr5HjF1g3}!KKZ6w&hXJ%Nw=7&P zB}cK9$8+ay-qdYJwLEck55;4%w%6!>ivqNt5>-oSYjcS$(z_aqcU7Z=rNP%2xlQ#%C_)OGC|T}!s>L#sgR0U59lSc&KR z0pCyXZg}JoK1tg=uxNkheLFP12etRyhI)B4LI6CJNP#&>Z|^RpTP(jDCnQZ0zzMDj z#YE1F6$2s{?qsg229obY2b=mA38;ZUx;mpSEvK?No!yPJvHeDmpD>mV;QkmhXa@Cf zzo`WRv_`rXpj0Rj&?;s@Ii7bG7jsBc+RJZqi^+Pfc^dFzsP z_NDE-f*_KoXlFb$S?U_7|8hX#Ya5C$P5#?yn)qZop4s894gV_fKbI*}u(^SB=Be+Z z`*ewDYXcb&#l%dS5<21hVGiyXD)1W5fBznjI$X4e|34C+^`4VoPj7yv`r|(F-Kn3Y zii&nt0T|FUSSkP2XRDVl@Mp|KtGcHK1{coqvNOrOGSXVCDyZCmepQls>natmvGq-x zefp;TxKQgC{EhQB`6<7r>7HkpO!jEn?_=8c(RlRnRo?YyYI_(EQE-Md`Ol1=G|#su z4YU2A;@IXg;Av640_I@3?T{9zZM%Gbs?{QvqiKXHu^Wh51f9GY_^e>s8z3d(=NM{~ zsdP^&`53#4YEV(HtZo6>5vx~68FVz!W7~@D&HWvp>}x;2zvEMV?azieAg8nu1!fwz zv+Xscc_cH)5S9qgtL+Rz;PVJ-2OJq}UMrwE*$-up(?L8A!X(>RXDkKsR_p%Y0QNKj z{e$=IHf)ORj4*eim*s@+=@`i*BUv@}niA*WdBOf>nlH|n$~QbVBW59El?{G_pO5*V z&4=*6C8e%%zSBKg^<6hfX>*SLjt@0`{2|Glj-ACv2o(FJ|7aZZ3?J)jcxjNi+gX~# z>=ZH(6aCB24dp&9EM4;DBH?MjL&(`LeIr-AqIqGBew-)-TJryq6JllT)lna9UqZvN zMlrNGwDxA=cheHeI0HaJYxAWFT!&Giui?B9v)u64R!~Rjm?s0-t<+Shd((+h4#yq0 zs2`G@YRX2=v4F+U@22v{NQ{zg<~k1q)Fk#8hlfTaFJO}6bgWJz2a_BJ^M+%*fBAWh zfV7`J0(NbyT83Du5g>YiA<^AGOq-dI0TR7v3IA-m?^)3x8|RzoUK?L#umi@R!gfpv zq*L>)4?zqg{Qn3!^#4(w6`9Zb6+31JNRl+IyQb7}I(;IxXQvf6+5o%V|mS?t{mU`_WNkQneYym_z20rq@71CX+3>!)bORYi3h!5+?_ z50DF7tzk>hLg-~zmtuV?xd$4acayh5*hr5&vNye{+W8ILUZ?JV9_GvE1ewr!&D zOaL43q#clUCVfddow&+?==p+d(h6%qPkHSUjS zZLR}<9+Q2#DeW*8142Cqb;<$MUVppPsY8y&>Ix6SS;T&*a-ZSY7XonKJy@@1*Xj zH6G+1kw8pY?tvxcjF7ULQRfXJ=<^`bUXPF5&}6~D7xaLh+aF-?opUj5`{pVncQDp7 z>q0o|MX=~oxuF;M(xB*S143ES#y}VZf{kk&1A-XUU3vpcI}OlIJ&3%%rcn(mR}W^4 zRqh!Tqmvu2%@MDTuU`29V3eG-*z4f(&RVSA_SK+^({wY~%x{HQ+Y#5-ikf@%_agc7 z3bkcj5hipib#+sG7q(Ti`WTx~J{>Ixt+;meC0sogUO_Qk)Eo~dXr7mAd`W}K*BAno zgPRZ>-Mlk|L06h%u)E7{Nzv6y;Z?W`_Z4WVk&{FNbW0lat^vqT0m%NA|C?Z}de;9r z{keO#z3PuZjXm=F*8YEM`xWo*{Oz|j_5OKG@Z}q!TN<|B`$$jSMaPmI-x80&wdhKj zT+Wf5iq#Tg*Vel)@inLe6pg{G=4akuKZA*4J7qY3v{~DV?N?)eF1BBT4#^!{?br5q ze6z3pzxQ{{^tHc5!lnIs6$-G>P;tMY+tkqgP`xe8^SlB+o74-Ks2t>bvH#7J+;@~n z$ok@+%Dt|~=4Cm3YfUh7mzsvD&)WJWSrogOy!s#2dmKKZDH%4Kly?6M#s%y+yDR$D zrD^}}2QDl6jvr8zcYlv3+jMsSfG3%Cb}#th*`?h-bS{iL_Bn^B()~)@$ZhqC{tug< zN|~4tR-#Bp-wJO*>_x-+K*Wv}+SYFE zHgzHkMuYVdb)P3zU&P!hca4|t%J!@zrDIeL4CblP63ul^M)}#4OoU_JrG>otWRo^=k?X}~b@ZVsseOgA$74NC(@dUbQ079U>fZ3<1 z!Q+bXh!L~A_1~hoHr_oGOtst|141O+lVFsM?mzj1=T-aSliQM5IOP21^6O{aZjDZ^PAL4U)xEGkBy~mbPpzZeCT|a&>X@>e7~LikmOSa(*pb_R{_> z|GjVXW&K;;(zp2+OPj7QwnGDHRg})8$)k@WO=kFr0cfSRwLd8HwBJOagIDTcMsP#6 ze0z+~DY4JhGHNzkHs<`tm*OKzlrV$~VX#UH1v1T^gGqFSpXoJ2wGs~4J-AY_e{=1> z+wCuIIrBF|3qENgSx|RD`8>a_E3@A{x)6_4EP;3VB7e0ozCbuQg_gP?_Dr3!lWtly z_~=<$1BR#qh?5mD&ju=CD4}a|tt6LhwK^`Dy2$o0+Fl=vf2R$C3;_yaGZ!d)#msd% z5O}k>6ehVAuY+l={R-XQ)rq{G775AoL!VJDxE%q5M`0 z8~M}lhAxhoPQoB%Hj~4|hsqj$_*s?AQ?Jf~0I%|E`v=zG+Yl^dDp7LJeJQ3>{D?k@6?fu|eHyiG0c2TxaB;C^W11=C&CI(Dd}eu(L*AAx98wtKKeOcCal`~zLJ zy12ME>3nTY-Pfz;%!(?oh__Y_xYLY#LlX4|PVdhL8(m)rfT;!AW2 z*-k+m@aGs8O!YHUl0{L;KKJ=JWF|dyCIsk746FK;%(biIVaBDKM#*0h?Y631Av`Cc^Q^l%Ib-2BbGyYE zd!*{U=9m#)#`7yk8NvDMDN0)hA3fJwEyn+*jeZ5;Xrzr1vq4phYN(az6tiz+S(wKx zI%!^vq?ip-A?j;6f{*80QUoJa0ztv-O;Gg6c0HMtl@>TG!bADc#kgry^BjNS7{)T& z?-vgs58MVx1rcS3|K0%ql-bVvl_rG*Mi~_`E71U($&=HZFI3%4JqoI&$(b(OkRfg< zOfz9m-awjiG6mbcV)2YwR?&u3m_Y$`NIh5nQKz%OM|^X{u6n{jJzA)b@nFvEYE}Jp z>@vj`)L49rZ8vrgyfRH;5(vs%%5v9tMphp?eAH*7p&?d%@hz<{eT|i+uUyTFhk32O zqW!g1peanM{!`hj`#NTZdzYi7(&4({-n#ficQo62XJHdfJ)cKoG+@Qv1}U`uYdrmL zeF=%sN3Soa53dwnpm525owwI{mBp{OWv`{Onknx-Qf{ofe5|SGMb$5@E1mbXq?CKt z(Kb$(^}`z)4+z=~4FWoO%Ws~|$7X#TjA_B;Wq5;E^ki4Q;SDX}r#bu(&{Byj!q4jP zvr0cQb{OoUn=FNHiT(>AJr8jCfkw5=Opnx`d`M@ljnk6zyU{uUs~) zfdM8*2mrGPC0!dMxb56ZHGv!vYYnJDb(7@5s?=;)2|jF^0!7I-noYB5hNSHhtJsBw zRI-bXmHn5UUGyCoH7pEw2^X?e=reG!9YdNUr#hdI*9TQGxRNl1Ko(M_A$3Pn+Rge= z;$I<>#WQ(~82I`L?UtPs(yHf4eEubsc&FY>iW9MI)YqfDfZ{X18%E9v?!@(m;revT zZnV7nFPIW)8Inxqz0w67T-4A;y*d0MiEiiw_Xq`jKV1M|81=;2!eDAHi8^*T!IPNgu+<=r26TNN>1c0IYVlEPUI^~kWvyxA{Zf7Ogn87(?;faBtLQ~T^v{gHt!v#N>R{0Hl~ zEPuTodPz3;D6~>4|8st#F`iejFJuec?0j~<{jH~O->a4jHMm-}oJwyEj36E2{LHpL z;nQjVACTJ_Kk2IJe`<-PeYDg6N9}L@f6=}e0rc(jRX3*`U{&q?lE-09#g1d<{xG3M z_e&lN{thC2n8S#f!>2rxy`mA{6?H(An(>|RDGMs5=tNpZ)1`8c%b=LU)rZ))U?04^ z`xmdPa`k2G`UNkf>Ym2y;!eg~?Kz&KG*aw1B2&@U!=!w=NA)5*h6efp{S|GIpAC)&OZ z5GNs}bn@NtL3KW1W~(6(ZPRshV?YS63Y19+?Tt@Wr1gV&Z?1MPyb?iqw=iFB|Bvn; zo^|W%Dqr?@M&g#cSe#MLMH1-`D-aWw*ksC(C_uyx<7Rj{)Y`bLRm{}XIHt7XwKDIQ}{ zisAKjtbG4F-dH2WMj_##tT3`oJ%2$rAw&N1GZcOX!q4&W<8L$U2cTQSZ6N)Ta@SD# zu7UD($7R`wtCf_>McQadBSy-I$Jm$bF~MdD`fx0!tS!mA&)Y{bMmFvjy+y6E3lVla z_wm=@#C?N(9be%xVdGFjAyB7rcprCJl43MWITdUNhqy4-ud=h2=;z7+0J08 z@_+8{_~!z_3VYwBMPs(dbIWhtdQ0-A#d&@$g~0o<@^8nnwmk-G|#%*)N>M5 z21Q5suKbhMcVL2XhOsB*u8|y)h1@YAS3{=@lB1>(MdpKlloJ_Ey`_+$%pO9_@REa1 zJfZuGKl6~?(x;)BrrsNzZHPMWyc9+ViH9@MYFA@(vbNTjlfCjSKt0j+S+!5y!e=8X z$s@H{&s_q*kq-p`J^=s>aR5O6Ph2?Gz>i#nrs}!gnR#{0;Ts_sk}UBsQO2|x0423m z%qgTc;Hflo0jU=is7C3bhDLiZ9Z$8z&IX{ybcl3G&2q`gJkVXJ`qaEiH7u*V628;l z_F3S8TX7|DhRB2&on8bz8v3CCr_h(qKiVF?_djX~OF_cehk#SS67Hh2 ziy)_`;tdLH8qRlT>&JLsf}q144@R8c@dURut9b&cEpmQLHzp{g?>uX|;0NKkf@#P4 zWlMi5Px{(^6!|}Efc~~0@qQX!MU zquWu$n8iSIXMj)5K*uX#N7sgxCL{*?$Q!*ETXlq}N%pnjaB5vHhCqhNquE>|GC^_B zqwOLw8EdP(qpc_jO`=+UtuX0V=Vcn{A6$<5;8YV{`j|Zrohn|_Q^enpowd4{X1pE$ z=%^KJRV_F#wt$g=^~p>LlQX{{8%2u5IMZOE+y7e4;+O-n1tTsZ^b-(FR+f zLm@s3!w4%o8OxtjQ$7pH^d#k%XXT@XP7P;~i}MA!ekwDdRNJqX*E)}lo%U6M|Cqzz z@x@e8Iwo$yt35pU%?t63edLElOJCq7yv95!xi9T}qFpT-%gfKre-JM#wR574^)oDP zxtgHzErbj`qxhhzZfM4>Z^O!HK4WieN#(2{PF*<%__7POvi%JEzh%q8-2R<39(79| z&QPkLaYBm{m=ChzDMO>)$D9EYCSiH>iH5cx-wqA&TYookg;0GTS14kB>+jYcH6qgf z$L5J9I2&ZO z0`^-=h+w51?lXr71%4i;a$5QWPZj>U<%{0 zvfyg7wd0+KML#F2GgVkk7d?5#R<$R>k8h}rrVuYrFlvIf#Elv&G^v;#B(z99-n3E) zqfW3PBuvx+CjcHfJW-h&-g4*N6ZM!gFi}bHL_O}w!UR+nn#Yn|Dw zEZ^<6MRnkNl2-p(n2zC%Rv&}F4r#vDv#PZY>C|F`?Asq+g3K9qZ}KHaoyG9vOFrOa zBPkE&2dWi@F{y(2>c0p)^4IXf@@d(Ci)x0Siy4028IE8`y5fnuFQ~g4|GgvO=~NQM z%YZ4=nB0>21}`l#{u=eS<(|>=W=z^Jw%UZ{8r<2;lhe-~cj$dbJ)-D66W%#mf!;j> zZ=84}L7wQ0B3zkI6DaTa5dNz(F;ORQoGZx@I6W|~#iNus7EaY8J45tVG^>4h#ARI< zbf7J=Q0`)}u^p)uXX`!#}2j&;> z>2Wg>OM0Dc^P!|$aiUnzG1kV4Z?i>s>)gzkQx*0^>?&|4l%TQF+DD3A6QwI3;e_}k z#aPr7TR53GS-g6rp}*}1gxKtnE|3-*zv&_Fy>j@FjM0t7H1=yoE(h6Jp0u*>ULm?b?T zVN3~7>M<|J`|JAJKEcXbr?h=)=~#cqC;I6A@w60+cjXSOf|?&rD-s)K$AyD@g@+J= z<9*8^qS%H{LN1i9;!d5h?r+uix4g9QaARMK&^p}O!ulLj+rkMB_9!}7x?V<}Z0xUw zgOh!~ukEqaU`Alm)@Ii9C^hNOgj1jMrI!}F#t3)A={7}H(zuLkTq=*p5vemHE9Axp zpFV-u05;(`I)VB4_TOAoaqeUN-LF~napMSr2#3gqP?jCl8lY-E*WXRQN6|cI?j{@h zlq@eI{^XZ!t!Mayrl*ijIv^oFy2iwA@GNm6w%m{JCR#9gDK z173p1m^BD*x;^G^a3H=_gV;!5=5fMD7+kZFg1UG7MBN$s+gcxf&PWH9lVV{|L-&Wm z3OPuK?jc#8^8HWG*FSlP$>FwrU;t#!!e`1`kICs1`h=-BCeOiOX0sb7tTmW{3n);A z-snF)0@0F;^EIIj`lQCd9O7J)GyF9N=)`Q)omy1sI#)LQqrG2 zp)lnnsSuPvfG`gUgbU`;)f|XmAg+Xq9ZFP$HhuwpsO%k_6!hZOJ;@u1JA{ly4hHCt zAbRx@pg&4+t!*B|h|SS;eCf`F2U>;TwEc_!SgFkM)ZiG8+9xg8hkP&*2uI{Fy}!&+ z#Hv4caqG@x>VO(Pgm$Mc94fUPhPmqTur;y~c~DdAKuxi}Ym`h6+$Y)eXk>#*6d&O`g~-8e}vVnJrT{prn9i;|Zz-gdE>b2KqcHat(%6 z@=9H(OIkeB=Fn|}l{5MjhxHoZ1>!la{MEG$*~chb0AMAu zrE$@E6x=lid(5y(g!*cW5GSbWkGdkuUusWFFM6`@R34td7~ceim);QKdy zzp*Cd$}jvkoe@ShT3U#ayIpisDhRjYea5%qB{Q4hC=prO)d1E6!Rk2ZG5HLkC8VD* zbC$nT`J9mgZFBSl6d;-sKP38uxI7fwpALe=hzz&{ez zAW@^%>7jKUhAtxJp3BQ{>$+f~=Q|nKk_5oXGw4AKY@FRU$B0D!LTBacf@P~!nYX(K zdZTAbcqa)<`BRnOs61Zc9G5kw!0$q}w(A$y_WF=8?99MrLI=$euh)N|*84ERd+PP$ zdgv+hv*IiV12lKjL#srW%;~w`9?*p<2w`9E#QH_pvM!u0++UJy&H3^b9W*1t@Z;5W z>6D4hfiekRG+DYUJCLQLr3f{)rJIviq&Mu02Wf&HAsP$ZA_h{fi9gvrd*f;OrBK;= zDVCZp2HJ9ov06arAFZ>{LNbt=IjVmh0ZDU}5UDa0J)^02owbaw=Byl_PfJ{1R`656L z*8uXO07zxQBpJ{MKo!3(M&t1mjmH+F@u<;=28Bjd-a3#&V{z-D5 z)4nf665`nG5a`m3UPN{i#urnsdS*ZQ`0vxJT>K~`1CBGzJp&R}^Wwl~$pJvO#Y~C~ z-Nxl?M%?;TWmyZc=*yk|BK(9gX-0h|BoAsIEKpA{|0SCleQlrhrn?M2j5KgzOA2+D zw~pk-EE(LZ0Sn)JJNO7>?3^AjCe5^Fyo{dSshNz_Z-_VU7F?QXOgXKoB99w=Sb8~A zk!jEiJ(996|-CD!g%+I1R=1F$k1Woj9 z)I;wU%Sf@pH9QpT}S3~KOL1sU%zwKd8IM9xZee4@LadP=~d`LcD zA3*JC!It4%oxkngK&+NY6N|aa{-ou9J{5OKf_Rb^LyW5$7Vx5f7s%6KRl{RCOM~3&%LcOBShZ>)?3Mq zLz)wZEoR)m!*P+UQ)y%nXg`ido6sb`n8O$%C7mDn)-j$^_z1MWh@X^I#lx5l+#Y=%C6+M)233? zh1OC*kacKRO@rN`!OH(h$rrAY(bjDzguz2z%p*9xVvoiVE%blDp;(8qOj|tQMSI%f z!4!pFw`V-%ynGkCZj6li`kL-h#rmZdf_t83domDIQTnIfOi`NWVLOJzT{1RyDt&*J z3<#bjQ+hLCM57aG>UG(|K3wXqc-dOeS0A zz9p!UEwY~I@Fo~h4VR28s^OAQ!cS%Kovh<)8u(q{U5OzsnjJPr2cdgYTQ?}=gU_1@}b38e?Q+*rd zV`LssPV&+Iw8J@E>WYTygiC(pbM+_tTU%Hn|GY;V^LsjTJlfZoGf$_yVv64A4p49~ zZsRWxY5wF+o3XOIVUJ4MG>UI(pSW3lV`P!xeG}S~`$)7p6 zLaepxZJ;7EAA+d#j!^CCR5yTFF*ABoN`ahrMtB?57M7`OTL$1+4MGO2BEhZu;qxYwF%r2OlEtcoQZHIxiuH3s1d@YmDcCmLCk0*NX<1dT(KyGXSc(bAD-ajMD zqSX4P`*x+NkO+G-ac9DTkAl%UB-P*jj)=x==L44#<25GK-`yS&o7>@F+d9xyy6I7` z>rHI`J_5aY=Mx+p$s&nXzK&;I=u@$G4;_iQk2&}8Qb=P1926cmIT*hK{yda^9&mkZ zb{WO;KEm3L_<>uFGE0ewAc&wq=(eSS6sWucWgDc6V6<+8q&_bPX! z9MkQAugM(~zv8Z6roKSo&nSh8SXFcEP_;??{{C0hj^4Cu>W9h$%$a@<9TVdXVGspZ zsORUZ^@PppOf397i+H3pLAJA&bm+In()t@_iig=qO7m3rnLnvX3rr6Z(CUghqW^Ax zV?TYLN`9?fVwG=DnE<1oScjl6{#0d!zS!yF& zDDAyvQN4RzuTs+vs=VKOJFBVQ(g+F0lJ=wj1|_%Tu1Z>!)#tG5*}|ox6D77NE$$|Y zz3uwMg0NSI#t6*kdi5-{x~;v+QpMYA^}^5c%)ojLt3#{e`C+~ zy7jSQ?^=D~g7QB#eXMp4_o=LU5T^9uBGt?9JHM=2RymIW%jKz$c{VxEO6PHHW#`|k zl!zO%mq(6?q*pkf|CUu_dGE!_m$L-zZ6P7~pYIdo`c^8dPa1!}^}Th)-$B)74_>~1|C=>Qu6~~) zdXoCjsIC9cnUOOuP5}xnXhicZyguJT*BxQ*%GB;j9Lh?HyVdxW1?;`gVZS|P*K<)S zg=r|Z9)wkxXE^!4?+AP^3a!jd1MZpMp+20~+I9>{zE}5;2*0pabl=u;$}4S$+xCn5 zls%i5>0oSNhbMa9t|7I&MK-2Vy6N83oxvLxK^Z{oC)DA*i2YPHKi+h&j@~X#Cbtgs zt50ZA?21Nx;=@Z4Gj$>uceQ64934<6YLl!^*e7Z>)`!>$j%zW&>IB~G=%flM5b8ml zs7PD+R%Vpb%( z$JM&taOe)msr)gzP`?Q&C?O&#L7OQdX+4XSkPq8pyI)F3nnOxR>a_x)a9+rU&HYkB zVxFoJ^78ivn67w4y#K&5DHhDL>O zDIvJ?qJ-?X67mfcu3_^;ffvT1Wc;QYz@O{@s+(PZFZ0zNnOZ z6pRxcFi&6)Qj3 zolJ_=SWv7m7NB7?D-TP1%ivP1SMpfH<+k=JOLe4v>3?XXmaAA4`Ff6`FPYfx=Va;& znPTKk2sC<6sa<;jze;HpA&&_x|Z?Y3e-F+&TH@hvj_<%-uaa;FK7=#n4Gn%VAf0>Kj>@6DTXDkH&XQ2 z-}+MsPc#7%**dn*!xATdR;zs*E*7j*zer77X@`PUR1n;a2*M#yGn1xWTk`h3_SAj( zBa+<$NJ4=m36huTlCF?tDrT{F@u*YDMQU^+9;t-m0i!jhF}85>9?ShGn`3?Kz5EDt z5{YlDzi#zoPMTRA-j?^Z4fnSVuW#r)TR)95R+4KiZBdZj!LQC@uSkz$U>opCoc6Bn5W|p1dF~awUNP5A>h!uGy=lz@2j_85+RhN%+ zGE8(1a!xyyyt7hM_eekhUUJG~vlTN<k2zTWSjV;3TfZVfTg(y*z(IT-SvwGzBS+PzyEtNn{-wMgs7(E zXY4rtv3ya2nzO&*fZtJ_VpY$Cf)k zO8pQyjQeE%JX|_G?7!A&2EwdMS0kbme|ZyM;=#C$hL`oekeZW0@dyKJ%__`}fOAyj zQ295h-CkQIe~UmLZYz)q4H*NKKlWEv+kn`!t<=!o^qB!HiiXE)@Uotx+x@O^?MJDj zaQVpX=YxVTp(GvkSkO_Av(H@QN;zFryFae$U8ge*giJ$nlWsd?2Z+NZ z`3xVhBtDoL0tyj=Jx)Mo6g1>JaaP7_@zVo}Fz$;_;`JvBXEgOBwzr}jDimbb@5F*` zy5G0S=j)+r$cz58SM84Quk>ZXiiB;$MreYbkbMO{J(aLi&3YXg5R| zLUd}No6~{DvzCG0Q)(xu4~pY_&^NH~7)Vxi*ZP4B%yX1hn8>7#JNV8i+taU(88lM2 z<74I_h)QC)w_RUhi{ff9Yf-gRlPlTUR>vOWX-I*roV%b z1e_gfEOzNgF@aG~xx_M~^pd5sSm52K@h1H@1Th(E>e=MsmR(MpxKo=lcWpq7 zZX0g(l;gpG=3q*m3oLLuM4=Bm)@fWX`YW{&q_M8^l{%O-lNd4U{PNh%;*3w%y4{BG zHm#D+@*j@(*AQH|zxHz7zOCQx>-ZM6hG7f7XGrHbY!h1AF=^r*HpiQKdOQ+XrZXk6 zspl4_OSVD|BQAY2c|M8JA<+3X;#r`3$Xw)~>XyDzIm92mxa!|NaId0TcOO((C1d5(#jR%cdL=GvHEQz3)=W?qra`F zW`@4$Aj`Kj$4Vz$T+PA2l4ET(2LoZ82+6u9mzNv)I{3r%l8_t2Ig$K%!~ZJ(SB2k6 z&-(;lx?F)AdOLQY}2|)B&lqHt+mds6PwKngs-o zl33B)63C!-0i)~e10h$}U!vy}epD~wZQ1Kb9!AhuvvJqkRB@Ee`0w}zeXfpq#J16+_{e5Qn)RHb*dh<>-sbT ziP;@+!fJ=)mk!Cl<<0TpIM0rBer!y8n;$QW+;n~rQ2)64$P6wN^w7E{6|j!#X2Gmb z%d*3SOIOtS)IA&+@|_Pa$ZihWm+v1wyQcHw1{;9WraC5#*HIfTm^IP{6SQ^YQKGFs zZQ&uDqpqbG$fufYfx^W~gLN*PT}S_5eyvXXpPOH4&!;+HolYzS(=>et3xr#)4rO>T ztDh?0KXz74Z-NM{Hk(eG)l8Zye>&afJ}n0op;VBwxlukFtiW_+xRo`zz!B1AU7O5; zQ|lNb_hv`i7g|4|Y;&2O@>~jsfp$;1vM5;hZbcka!TTWf&-<7*Y z7gu>>ldBwkiYhaH4y}k7;@PjrXlwaxYS01u)*iq-ypgv&ZVsvw=^+_1V+68r~%&1~hvN4Ph7O%S)h1XWDW)6QP-5)-iSx z60%k&N1301rvt;a2zj#+k^&)|wNs1m^PRVdz^R)_&FxlOF6Ex4<@{d8@3Tr<))Y54 zm$s}eZf+@USy$Y=qO@hbFM4a$MQ@un+WQ%zuFkZ8k!*N-G*z_T06!a_YQ90uejNICQ5_XfSRqblyGJlCsK*!SXpU0R%t<}RsrgF6HGMHV)?Wrz zcQ)iSQ!f|(_*EK%z=1W&K}QL!vU;BV6!$AJ^yOX4F6LsSxYlf&Ox7G?A64_lI>j?I z%x!a(_qwkq)qfrS<;|B-umS+r>PyX+H;}-ZqrCf5^{`d+XpHm8+n*ug5`5}1GEw|q zeyN_;ByoOe%4qj#fWQQ$yUa;+xJmd_%86x{&-1@PA2su*R8W*&`nY3oKkC~JNZ>r!!%F(wk7N|0UzGPXDK z>z%o~I5bcCsHUDQZb5>KBSD5$u!ASv%w;=wsDiAJKbv}YuTZ}tm3&1Te#4aFKz2kMID20(?VijHX;aUT@kqV^ z35WC?ECmYB(zyFrmBcR~nIi|xA+k*Mx1PirJvfCBpX%TA4H27%qIpB=9$NknA z-=5&@98efK#hg+l%sBYfEC0XMI9&-QjSOD;;J5^*>_Zx{fac+8p$|Yx9~gX~7M$D8 z8G&YMVI|bNU}a0}>6D~@Np>eaU7pTf_yVAstVkam?AZ2+mW;UGnt5F=$22*Z&#^?{ zMJ{(Mlb-38;0e<~R5;zPTCFxFE+L=QHS4E*yx3CfjbTeE5@aS{JDDa_J!~?9REQz4 zqPoAhu~vV9{8t*rMLb6l*u`^Jb>8-yr{Xy;Gy~fYPV~<&2jWXyeOA8X4^wc4N0QS#$;4W$0UWci#IWY%$=8VG5%`D?AHCC#dFEfJ$QzX>%a>p z;1>TFv;Ej;UFa_iQ4hKa{u>K9ZSGfa^iRoe7RhwV`F{%i>(s2?QRuG@ewuk!&pH;l zu?qWFN??|6-^3Vx1_?xpZv_B7$Wx)$Ek(f4?y?>pXk!;Pl^ysJ?TAPZ;Tj<~c*r7|02 z>#}J>$2qhb?!W6-QfxwdO})EA=2AhqErZ4pEF!xRyPCkp5H_Rztr;5|tz~0VPcIuX z4aXH2d#EjA?9`TH?7Za|du&OJT~-9Ng2$h@4GnDUBAr!nqIKF9q~sN()ZNa?V(f}~ ztgcob*s`pv95eMHMLmxLtB~4|TCh>{m-Fmd4SHLWCiad@mGd5DX**rF#bpJjuwM!llnTz+G1^ba-bn}k3t8OPNv{bJYjKW#MkO#m_szO?kPZDOekOga*f$qi zh16%nx#B2htYZUMAbGf;GWw^uK-m<&+D5F*U!XC>cS`v$iUJ&T-po9}oK^eUH%3mZ zbp0b!Y&zrCC)US3{$T%J{UrJU(n9^P2;^C`evtHVE6Q_Ww8kzXkjjiuNxj=Y1YfCT709Nb*<|{S z>;qU_T5_im=8Ic(V~JVgd|2Mb+qq??u3io&VIvf!lTiU$xNm)EO^Cp`(d)CPs=vQ* zF;ob1{w4L(Yw6QACUUK9YzCG-o9=Qcvc49Z#rgI>dfmj6hZ$kW&jt2+T+Z#@$w7i-A3y!(kgel0KGv>k(& zb-c{RFFTIV6W){famP{Kq2~V9R)Q2TjR}Lv_GodE;EGZo+7>_q;&On8(6MWmVl&73v+E$OUA!~{&70^7>N~D zmN0R^DB!JgktmY_`)NV-7UM>9;$vzdNPcr&?xQTRQ)rYkgkxh{b(LB1hzFn7)qWK% zWaAA}fz>40W)Cwx<0rNHF2F57Lekl8xjgR~mCFzMQ~q2~t5(C{V`|deYp#0$B@aWQ zgxP!x$(4WR4>Q#aa*hXy- zlN!E0;lSIY>LTMR1csZ+&Chns_PF!lOkYY7XH$L-I19$EV2WgU-nxn&dbVMxLm0<1 zW?}MmZq($%-eN59v}qkN=Oou1p=yE%0wDfEGHY`_s13AVXWyvxyKED(315j2MOZyq zrP_}Vs@CnT8`EeRL_qe+@F3M)@i>Owru%xG3HOO`h1Zni+T`VfP50dF54Fp{IKPt|!2FTx;rV3eYXj0R$dLYui1Z=( zP&a5VWm5xqhiwdncTg`=EHbxIm`(=o73#yCI05wt>}dqPQU9}U3hvN2T-d44{1bub zy)V4-E@Yre$k6jRI^tsNELpCD?T69(uxvaZQ4D?_20!m+Qchn$ot49`12#hp41HwB z{qm8!vd?9I28QNf8SVOw08z|Z>=U3N36@hT9?)yCkCuvkf|*gJN~uTrZ+OM9D1D6` z!=9DAxpG!DAG9Rzdl{1uSJIs6zXL>235X_=RlIu+L}1-ABEE-;1|k#!`%^e$^mlx! z5B3;Fa=;kE%W0~=?NexK@iHrXxN;R7tyb{KT>ej5vl|e39~XI-$u@)Lwy1^vwohJK z-`Dm@e$fN~9#D@nK<|A6x`lhd(%~qMQ}iJESRTnb7Gp-xDxqXGh25hU&{9QPn^{ob z0rl<=`rH1%eXy1KRW*H>1L-6Jb}tVX8>x8pzY~R5PX9-(K7)X4M8L!mA?W!= z5Zq?{QzEGH55|TJuyoVdxUawMK4YVSuIY-f+=za|*-~um3g3*4P-Ioa#;yz-yM&G0 z$69QJ{Q(-tnZ}lIHe-Xfz{ajTHrk0Sf8T1T^(oNtGe*Y{ODV=fsklVH@sd(3Qs;HYpt7A;Npe8CB9_+JA7$AEVtnk>jKn*r#%Q@%}ra&gln zw=$p2sQ_q{I(hIE`OH^13NqX_!fX-kBN7`(&91P6Ez{6Q{!61sg=KjBH1mr5$JXjc zX6%SeS81IW6=*`A+4P|-$fVj?7SfusM!~}XQOzGO#Sfa%BusX z$gpoTzV#=q>ZuWxH9QtK`%>uB!D;FV29uwls)?Tn%+a4H_xMkgdko@{x~9-WJdFG3 zIu9JIUf~piy`ZLKHkq{Z-M%fcski;4gv~Vbuh@RICp3z@^cX4fXJ5j{j#){v#4);x zeTPg2sIRjrXNmi9=&0f>b3a7}aTXNWCFiFa5|IFtT}Lj^*~`0r>M>R)yX!Ow^!h!& zHm0u^;W}B|y*z#WFb>AW-Ocf}@Hu7P(ZFl>ki&KtRC|p-07yCAddd-&(ZaXMxW54F zK=#X@nVw}yD4LikseuT%96Q$XXah4O>`LX*Xoj>EHThbc)<{|`$Z(Jeb~bC(*p)Fd z*cjCMs_vm?xG;+)@#APu*)dz-F+CKh+c2o3d*Dt7=A^R5l2yLglAkRRk9!aGI2wK< znptbm zxl}*k2;9fnUnD>nH+}>a?R5>s3zB31bQUZFQ_lfPV@g5MT_%U?9fOBS_~d!~DR%5E zK2jVmb?toY!@*a1b5?>q5^|)mmtDzlVJb^Hb^9&3_Sez=%$lse06}Tfnqr?SUXs4H z*r(bTBcr==rhC?0>Y~Zp=<@fwzjY=yf$j%ab$^3sw6OGA^!fG^a8XmDUZ#Lp#I^w8 zv8gAVMG#?xmD9FT`?_t#j$Qn|g5UR-+SeC5IAYLR?ATXo-&pL}UutdlNf5Llyx>-9f z_`?uScCa4em)t{rZ6E7z`ESb^G!jgEULM=+8_i7Hmu80s zY7YF99cFu_nJ`qmm?q9}_K8sYq-&oj_F44EIDY(;Al19jR4Bxnk2X;029y_n>OLWH zxJ|EgXCMgk9YY0Pt2a4h_7~j;;t`b*W?prP=nf9I9UwpD4|?&mpMzA)Y(nT$-#(qH zYDHa}FKyXKu;tRG_F~6juw2rm7bCteU3RUIX&)X2LjJ8+7Q2p=uG(DOderx-lkaHJ zG@s==L;3Dk=ZoAf{eE@62>a0WBji55C^r+3+yl-%POdr}tz zd68(AeFgdExp_c5652d~4W{zjkm_*TPJphPxhlog&eGQXwwUg;b#YILNP}x1k2c1D zrd$?V5uK;=@rKlxxYH}Oot$i=r$l8wSn}DP$hnhuw93bSkDB#Zr)%+R!$>ox-Gg^7 zvNdF^{%<+sKq=P$5=Vi{BRkA;)DvOg{UW9uyM5>%1G`VBe^c*^&0o|TAFGR_9~ZMd zhN{61sfF};Z8$7A)5`fF$>Kt4<6N(*I{LJ%=@Uhk?_|}Je!MV#l=|OiHM>vQbS&xC zkEa;lCpmbk8OsDmZDN8)_{8v)Z_!lM%tlFKW@q`rlwLeL!<1%rhAExp4s$sPb9q)h z#wRn*Wwa?#wb76c6bgGf09@UmNw}@JL&HHjJ!h;Mcp)B-&uSeA)MgcZ4z*&(kcKC} zKl5MZpP%}ZVXy8yy?%xD2ktT@9W)xQrFzN?<|TmCuZGnleQmlQ9!9ouP>(74l}%5_MV`DX z)Rm_H|L`OL3b?MIH8@C@F-b_YL?1m;qqJF9(dM)<($o`#lo7=Qyr{0xOUb65BWeG@ z65OacMbLA#XQdSLr>k00?$mZLdHl!vbPy{UVOf6n-CC6&H7F}xU}ajxmz|F)@Sf*7 zl@(bP2a-?u(}7UMWv=3g%uyXj(^>e3GN9a zKh$?PExIXJ-=Q>dZCYQ7m+o+(%?csZ%54B4eNGYG7!WO|L(G<_;MV8yW1qd`5nb@N z)I0fMj=RQDvH2t^X&=5Pquo<**OrjJ6^~uf~+)?~uJqJ+w zxt{<9J+%gtaT78ZbG)azz6QJSrLhtwPWB}ZS7ssplRGq`12WDJh>ENWK&r>17&;Eo zSFX0PZtZ8<0n!X&$Q+q4BGJ3iAxJ1>M5jN6tRg$QI9*{lnYH~fFa#elm!V+>$$W{@Gnk| z@_%u1R09@D;#JT!n=OZgNC-JPMnCVlqV9-PUDSM}Ox)T?<@f%ay_8VcKZ3r@sRs#v zWBu!%{p`l1rgXG$%-bKq6n_ zU}(jw1Qj*aRn8@SF%0P%Bp;ML`N4`D&N7sIUVRZiV7zJ!{K5DiK7k)l0$kQMlv{I( z0w^uwP2r3LA~5w5NY3@@lwGu=3NlUar24o8KWsg!n<^juH*`@utYBV7kiZ2Os!9&b z3}1=|t7$>*vObS;SKFJCyTWMlMjDK^lHmUwnL~k(;e70l*)`rr#S7F*2qx2;0e16U1Yul&>v7X=4=~6{-9u(594jkTj0a{(r5Vao|$KP13@P_!JUkNE*^<}_tzzecV=z` z61qKKqp5r%G7;qO4Cj4Io7Te2a28l{rd_@P`_ZUWM{n0N>gqy|vCc|+A+&&x(BqN0 zVP)9|?~8-O8?5#WYYgg!H_$u%ARP765`NTi-d2X672#)f_*tc&QrQ*zxV$E@LdRT* z7T-IK5KZoDQ4i-!WxZiYo4JrT2f#rm&kpCvvG{Xe5)JG!@>Z%7_x^!u7hbQ{oWT}c zgD6d+{erd9cWy*jFn%F(S6b#?UFzCZkH5iu>8`or+SPd41QL&q6dAJGDG#Nf57R)f zn8~%N2BE9T)896u74LK19AF7bohOz2T;;9P-u|%YA8s{<_%z&lsgb0oi?gRSdWzLO zd`|4;YAX%(t>93p93JX${<4dV#)(i$_Tft?m$4qH0liB+3%RL)|T`#q6b{dfioo}=983|5q zj{WxXL0>{wsf3V;Dv)9XZ)bH_)vt(OoS-sBg}$teUjl9l#17VaDax|fzf`JCfm%YB zQigCx+QEG(B4uOEb(BtJpZ+raq+v~=-IEsF8NXJ64xnWjZb~yKok<~JD(^l!LiGPn zvbz1NCaZMjY=4UiQU0^ABhwp^Q=JOrS-ls3SxSz9f zqu zFK$ZmXRVw0JpzOBOuxdeoHwn1H6&VRD3tapb7}b_!IPq_?6Tj7T4iESvv6T|O&(&+ zs;ET2A3_n<3dCzwl_9Y#h|tY;-l{Z+JIwjC)iATn>*CZ8UuZ0T%5eaH>VB{uXyZpu zm%s|LkJX~JOd)1CBP+dQ33te{WOY=h+yMB@kkS3%nbm6iCC@NoHD~IM^Tn(~1D~>v zmdl*)VB$P?QSJTlKZ-j#kjCF|G{zgGLPh;^(C6JQ0Gekt8Kv~GyVZc2ji=ZHoZC%U1~d6 z?49)k8Lo6->&>>+ec!?Sh7}_f;Dm|bN zQSxQ$k+073#pGdjBRUALrLqW3jx1lmnBlraVcxK%UQw9$Ym5VUcbh0#8L*z>#$YYn{SY797=f3~3z{w?6f$p z#hZ*}j4=-ljC$sazET}Fvas$Jp>vv&Jvk|wbu&g!A?33Vx19d?KoOG z2jv`Fz!I-@z>>%7@+Th2IGijO(DQ6Xq$@@(yYV5j(@|BZ>x6TZiS>a#W>|S|qEV*= zUC0vO>BQqutG%#COPek(K0Nr%3(L#Td*p|4%rDhfF~K!{pq;hxypwI^b8@T7+an$S zd!>lLMglIelGGMArlyp*&2|LaMhSBc9D+zprd8KsQEv36AO4lXs=NM8% zcW$k>QK@(>OXaJBK?xHc=xSm048FfAs_HGN07Wz6q&khjlMuivTzfCt53H`<*_8Y}>hhNn=Mm@u?YEX6P0m<#3 z*6tdBhfR)8L#O?1|E#6`$9SZ3{RM5e;YxZLw_MV3fm_{4AAO#xf#7mB;ql6^TW6u@ zY8O>>=Gl^u=^!I@@Et$e>q|O9C9=tQm#i4$e+Xce^IgI8-~tS=NpTeS4y?wh^|Rh> z8N<4smpK!w1?W(J;aW=dcYJmor_l@4qO^|B_Vp=wxXo69nO7TEth zC>wmgU^6WPyyKu##xnLL=?%8$hFh=ZOWh14%Eu6904yqUip-7xvIZUrtt@l&UrxGw~5~5Y&pGP^RRW+_4#!6h_TDXs}e) zQd4WG<6`JwaD5E2Sb39)gTB}ddjWv-x8BUmWm-)!N9rnjA6UNERaW^! z==SO1CTCsp4tdL^7?21P$Ey4j;F{3dZ|+pMr@8#4@zCF$DoaPpW#c4hFZu4e?&mxF zcZS_Jhe}z}SPScVA-7J^ceeJ`?;QnI8B^9erH7Q6&X|S|UTJg7w&IqX`MrSO-zjZg zQQUG%Y4ghBmd?`VRmClLa5$;B;ZD(6>zx-pA+=cuy|dJNCGBYTyeK?Izicw11xA`k zp-TWP*kWLVnSe+$b< zr1TSy24K2JRs~RIUN-ZRG|AoGaOcdbG@&`>A;^Gw&^^+4nuNuePsZnIRWO@W+2`4xiJwx5Ce|rT2Xf!)VtAbPu;SD02wp6}{BmG-=%Ds!!Zp?jNINxYgYsZe68B zjTb0rWbf?zVY^RZ*8^)8J4p#u>L<^x2v*dRyz8eyrbbxI*!--8f&GcAxj3x`RvxO+ z$o|CDJjza}p=n90dEaTO0m##L>W|WDR)lK0UJWGkR{x33o#F)&J$)5#NUK;Gs!*WY zISH`Ke$46?z6xj2@U=InYG8&g&LV3#)EM05s`0nFXD?1g6D!h_G2jrnbOfG}n=SAD z-sjG$yJ_IOdbS94a|46Zko?L6XLsh8@HxFj8kFAVaTxBSG*y%=`~o@2_Tl#SSv5zE1@~%TaaUZx+DnX5Nz}Gh5J# zy|KNYFWX98%$x7u^nIL86*PB2(m3wiF<;CpIF$}wvbu2hpovhpgTfEp^pN&hWFuD9 zDKpz{>rx(m9l>4%zx0;^VC0BozT9!}zhpmhc*CXC%$DWF;b(35SrdNNho5!fr&T{E z+CIepALRc()uHweNW0%vc?kqK9O4a#;M0zOAnSPD6%Gc{wzCuOvYl5bl8J04JFieE znXVT_e?cm*pSh41(KD^o&z#STrXtPN&n&A*`-*4GDj(+g)Qt(t`$}8)u%lW2^z}nb zorhM`|9$DouW;T`_nwP{yH+wafo~w}kjTJ*5|+p^W-{Mb!uxsauJZjZKd_?yM5*EL zST=?DQ2R<(_8!F7qsWiEGdJ?KaHjMqMFgp<$TCa1XX8FSEHpRW`+5Yq8fA089xD6* zz+-#ZM^?DS2jrA-&oSsB?cX6j^tXKo^^90WfU~Q-JB8)J(yMfcOp&Vcko32G@HDxX zpECEKo+fw8DRQf&*h>+)84mM)Q5U5Z#p#sINtjO6H8{kxfKxSw^Id9542-_k&HP#r zxTJNWa3J?v#8tkEM(qm;HM;_*WAz|5nEVsU@uE+d7F`+04Vr{`URCTOZ#iFWo|esRm1!cQqE4gp!nC{exVr?9BbM% z06Sz!I0+?F4NJn0DnHkVyaSy{C^!os>SwN1r*$_=YOaCF*!bNDRLT4QN*s8C^{`4{ zWf)t3S=S|H7HmX$-@WEztOSE(kT`dVb3bYc(bb^Z!~GM1A?Gj?&dO|*LRL`cQ+vXd zDT+>OPmm##r9Q!Hv{1f2vnP}bjrRjf-16OdTu_e&(~Q^e&!CmcPYD&4nLumZCV45F z47Q(-)4!(P#~?9EY2~D~)<~%YgZEzBv(*(^TKW=;ANk0BC{Rm0t8b`3xp_M=@vpx8oVvO~MO+eM9%{T zM^q!^atl>k3*-4%gpw&7-z1`oI%5r`X-fegDBm9j$P(W%)k@6v`vtKdA7i{+g^fkt zcDF=%^Lb7mE+}39$TVC~ytDWcLvh)?M(ZlM@&30`z|P6MeU9U|qGN=k>~r8E*yo}~sF^)y z%iQl9?TMJeR_m$|v-ntY6;>;z)NtW2IrL92Vb$W~Ns?P*vUfSsJca3MffI#9FD|fF zh-mdof5(sd`hw{zS*F=)BWbcsqQJI@sTjeB-&SEsXMN3f{3LEk+9V$}``acnxOhUn zlP4O)F3hW6#a((p7=(bH0?5`IRKesV*?|sn7Gon{U9#z!`6Ma9$uBu6Rw?pYUoE5R z#KQThOI}QMVK0kZ^4g}%5rdJK4*90tG;s%-)#9q_e5#T>i+tpNwfIZWkE1@WtHrAP z-tm)C3W$gOL;=#_^Avzy7bsv#6fm7qz*LlBP(We|P~-;EkaXII$_dQPgyRsta}>ZZ z#Fh9|HndYd5f(;s8aD3kPM3-f0Vjvt47C~7--l44=7@Ep_)AWT<%Qx+)eIVz48;$# zRL|^HatVXiR)+>2?i1``!`h|frFB1#PhDBU!*uxSaS~y{oI_<#BME#N|Q4~MI z4zIIYLDDysol`;nxx`65R7?CxT0-giN2YDVg@yEanM^<+J^3Ykic~@Cow?F)jipoD z9uW1Zj%xj{OzT&={t2Si&g|)q^vQB2d+E^=|CHN@PqUX@PWP7+g-bP)$aBIQ6mUPZ zz+ex~-5-O+r7>LfqmhzI!^P*m*k`h|=>}gFGr40>jS8~V@I4SwF2%$ z)##y&>AYBC40;=eSz5I@G+1$t(|^@c2%UVo6+Jgrw8PY3rq$GYOIlaxZLY3{Cj;sW zX9u8m%)5&LE^R6S7mF)l%4@u*Ti;!2eVz#sHlY+%6dPYN>$WelhWnx%wDn9go&>Dm zzUU$6kO9Vqhor*gF`2Z?N~40M1`v0+N7mrGIV7Ldq zTK?o)cxvyvu)IjFL1#{T=ZTBC( z8+H<#danry;(Ib2sV(iyA%Q&3+M{7-ZZh4O1CO;kbK^3~>}en#5lJ{a@zZ z2R`ni&i_v!#gt3gC{e3dk8&1|dZ3&Z1h3Up8*RBp3$|VrP&}}p<*NwU7PT!~Hi2xn zt1Z$y^r~02clNX=6$@0XkYKI}Tu%c=FM3e|7jc)(aRDQQua$nEulLM+_OrW5Y4Ps& zJ05H^pZW8infJWsJ@5B>-ZNw8^}K$L*bwRSV-ZUwcd-3QQZ1o*kqtOyr^5}pA2}f`!rRY5y660* z_6Yz`%Eu|JvW(Y;jM77GcY*9n-ho?b0QKbq@+h5c_bLDonXHtLM?0f@pDfSU7|(Zp zEZ+s?`4E19C+(Yhm&WqVEzgHBN9dwcI^2aB>zeaJNp8Gb8B(=3vW&687s3hDDin}p zoe%x`T}A$yU7&R!*=Sd;c&78p5T3|%UP?Hccahbdic9kwdpkX2->fnIm?BT)n#{|# z0L{RDGLhMQpOYY56#Al~x~zf`he^K}fe$-L-y1j-#SXf^&*OQmKQ%c6jyvyygl|26k5O82%TzRy&5>cc1v%I$?=oYX}LY1 z9KTS(gn3)gM74J|)msnsK^j-pGW8I5>Y7N2i#>!J)m97uP5D#VLNZb_#F$wniNnd1 zs4n5M*G?b`kkC{@w&5s5>#s|d75j&eLDJNrEx4CW;*cK^!VmmS?MeCpBo91i_ zg$dqya5NYZ1PJQ#GZ#dJHMFho3(xa~m^_;l`HP2BbaPE_UA53*w<{AjdHY4uKQ z7%-di(|;$t4CsmhnRazoDlSh$ddrj%9Ldy2`ldW7BqH=Q$IsWRy~|=ZM5D&|sV3?J z+SoKzY*tt{BS+bm1QFDfXxHw%Yzob7n&=xhYdrOdTEOQP|Cve&vx>Pj#0Xgyvpp0+ z^CN?HZUn(=dc^Fom~k`3P&rDAu5sa3mlro5!__Waj${w~Y#F3t_r}kbpQ#Nz^Rs2h z0`oFkhAnVzX3K~L=4ZA@OwC@yWRio~%@5qF5NaBtCT$M$ z9@z?LlM_wB+PcstFYn^a;$pm1NWB~m9SFIc6iK;3iy5D`*SbPoHHtX4dvwxWbADfc z0}d@Nritn9ImcZ0RWGQV_KMgEF(qxL1TwobB;C#K1@{SXF4^9+ZF5RloyIPlOa22> zMf%Lij6)+xJ$;&lNTPjcDE_uM1a)!RsESvb*fAasKv!2m=28{A%p*!wxMG~@wP7l& z$f%he!QPZei$SyS7ed$}bYr*C=&_EcaQXs^&Uv9ly*V#vg+Z@O_n1bBu}dr@_`l2v z3r_IIPZ=wMqbzKbkd!jUBL9^=}MX|!?@P(_s7B)$HK26T+{6G zoUX9t&vq&v4=3byvt43Id0d$!$!9uWtHf;U;{>G^T0$rxolAfy@sulpZ%wC8rc>f6 zf^%Gn-qg7S_+Q0)Q)k6Kg26c^Z*6M%ZD-4G$;lG#&Ao?^Xk_jkF?D&I*=W*&+rK_N z+HXQJGpQE2aF!Dsoot_EFMBkHp64jxQr20m`}rBR$%zPJJ_zQx$Aau-w3LxZ-Y3F| z5WF}%kDLeKwYWu7fFwv5vG%qj{!6BXK*thAA+~7N2xvJ9Ts&TqIugXaw3YH zAP2tH{_ziRaL5OTHTPP1AfivEQH2qA2y3Qv=NnBZ8tNWyoK`cN9?J`Kkl81XAaW~+ zti%bL$P_u)oj(cLr~8qYOeYW7g_m{pKm(ga+B6ik$;oY_;MFNT>7Fy3{EqlDe`kCidw|i3hu%Jw*<*x{~C)2NO4Uryi+I+{qm&){Suw z5$VoB9JfO5vm9biCB&X;hy&Uzb(ckV8IJ5$^e#4-E2?IB>+ha8#n1##Q`H}9@+_zETS zi1aVs-ToMyDijWh5 z&`FiGkcqMx6HzvsDQ4?cLo8eI!xV*AD37`J@%EYE1QWrJZPllR$|QyoGEKxX?XgTy z9AbDhNq;LnB2;7TQ?ttTa5Eu9>swsEWUA+%br3jREjo$|7=}nIo?rmBLyc#ZEn3nJui(PeNd||bFJdy41r>~Y}gu*b*{B5KAfd? z*?2a@w2#Q%z{rJG=`?3&x~CzgZ!^m(>=RLbv0i$Se-K|Rt>=FG>aSicHEBW@VbpCh z3rXS>zy2P%eulo(C*;9e{0!N}-(n34^mwH9l$SrG^B>rNT1WG*FK=PjAFG9SZLKx4 z;Rf4rckH=jA4!kW-g@W%luca;y1Dq-NJ?QNsmpCRX}F~pj&slUtg^T5h_&Puhq5twn8-srKqzw)`>0O#fJ@f+}AMbT~$4I}%|nwo;iCZtYf zMbb>v>va^{R4OK?CTCO{hxPmPbSxd#eMA!!8Y^=;U^|K$^r134La{m6T!V633?PZEK`~vBQJp!JL%7cOf51KAv_Dv1IR*$ANc3;y~KP z{`LXZDo*mQ7|37!DpTa`eFX5n5xn zGLB8z9L~%g%&h3kKQc?r=~Hw1b(Uvof8F!6r;+xgVfcFVyF{-q5TEa{${OOG=i^xL zIomogP=?P*k+tFoRUIX=_WofNvH~V5=P&XGzWQal`t8l(r$H@#)+<+*<6{s&aYYi1oiA)Q=gX)C8EPRfB1Qb2%`2_prUS z1{Yx%<-}ZW@zaJ-Bs3pQ(<EaNwM*J>;L@t#pnx_Es%IQ%7#ghzUinv);><$ z4*yTkm*kIimzel7Y~s&^UH#9KhJ0xa;4MN+9pd|L8@BsSebDx>RJ3Y_#vtWwCKumt zQ38idk<%hf`>nk=KajGri!D4Y6v^JjsgV^zt4|?Qhh6iKCgO)P_xvJodBvEXjr^m9J_ z@kh)VJZ=-))qMFct*cZc*i%c=v;F7C8a+`B^DHrZ)iKAf3d zz7;wU;^JNt;(k+#dr64>^-xv8M`F)7rIsCrG@1OaV;R6M>nm)!) z>mpxz0uC~EJvNgu26%SyLj=+j%{oRiwjf1@HYW4f0%dJGPd+j%N{2G{=}L#X#s~FG zIYd+ZQ)?!&vwgjaT=q&bg0)4UkI-A6%tT8MpOv0SK+xBdGD^Lt6r7cnU86?x=T1+| zZu@i6(i3O3T~NG+@;s41P5Q5RnZTt4*|p{Wp3?pJAJLrdiQ_UGl}iUI%5p@lwbWNf zsjIt=p8|xnl9T_zNTAxBYLeL~@-Cj?bL8=0@blW9H5GEypjTOgj(54E3QM)kwDfw1 zA*FY!ZCsY2!ZRVo?q}Tgr31*1K%$6ymt!tUp0p{$q$wA z%|ED`UY&eES1@280wV}V?g8cn6qA1@rFSo1IN|xo@Y1dO!;E!SXGxEblA83C7V7->wkI1LDn2eS0Wz+XJb~ z1Cabp0H6cwW#e#asPi}FMSdI=Q3h9MEsT2|94vevW|!r9S+sjCT}`r&8oI6j(mnMR z_Dkl+yd&6)9Rc#RHMc)(z7q&Ak_EbJE%Di1_BH0yv^OW->(U&99REm{Dz-^57Q)PJ zgy868&v&@9A=(Mj!HE$7)fB!(IZP4$*(esXVEFn-qnVZLX|+;va2!89RSwgNr3-n!dr3yHg2?!=MJWH=-jze!hzQ#IF3i6()fXvhii)*IeS>h z@yTOR^4NivUs&=lYKmt&yzqh}Dh*r4cxduUoJ#pq%u`f449X8DHgs14$d>>p=+Hh{ zs{!!Vn#Sw9H?=&B(;>tYYyPH|U%0qfo2{Lgk7{Wf20lF50;(ftN;5#sGcTo-hBLOl zn?FhEfd9-avvqxaW<3@IZCN4XBu6tV;Iz78p-nn7PIPM;-S;xS$M{~$w8BBwKR+XP zPV8(t|BgGUD7|ny{}7vPUa1mT9sEN9{T8{-tKvTLpiDxn&IhyhdccrAM!>)4{2tV_CeD+h1SMHJII6swp~M+foPb4$l&SHbcATT6&C!9NqYKcGBg#hwOlhH zW4rNK*YC?%4%$aoch#l4B<_Xx2WH{AGnaRkYF9s0Cu=e08%AwByJl8){pj51RzIz` zQ0z%idvEGpN&f(ehi>mMaXJW-_iTUp9GZYrv(4TNw=TE8!_5%fw3j$;fjTD;_+BE? z;j~k)6u5%CcL?Cw<7EqvuGsq8Sg}4jJF?02Z4isPbSSgQY^sutEFcBrDiY7*{;{z{ zu8$!wCVRPfNyvpAnsDdFs}N7_Y)PxVm6YJ3ck$0mfu; zM(1(z(J;TmVpNB?Ua`N0{16`>t_Rd4_!IzD+71l6O%qPB|8Ug4sNNLHoh@xuC| z#4wH6Ti}fDK>Ih`){*l!m~yv1?hQ0%}ey)5?W}I zHr}?!8nDg}$ql6Y`zpvZ8TQAl3o-H}UnNO$I2EWMfIhKSJJKZ#OD5cC5Hz4+Iw%}6 zk5&!Eum3~-uwjggNE9MZNfiE=@R7zxx1+LB#j$P!bcIz(^#AVzBzqB^_XG4p`=VWj z6D>274A5T7hhT!)cueU#X^y5{@FL=j=feAx)s|Jb5ZOmF>q#L+%y?CF7EiWA)EH>vi7XO=R1IbDJilz zkCL(V874g{Ce6BROnTHYX)aWWm~>Obm3QHn<+$?QldXq{r?eC0XX7If z-8$s#M@|3z{c*P|xxvKS0n4Pq>Li^#%Xd=oa{d_25B$PjHp1d!<}VHy+%COl6^KG@ zig)Uo@6)MhshYHVO(ng|^{;ZgBFb2G=56L%NPCWEkS_Ftw7|Fj$b)n=BZS1|2P5LY z&{ySn#M*n;v9uRk4YcV7fpz}*2I1X5e<6c_T2hJcIpy?Z4-c{AVT5dMb8;9O?rb9B zs+*>Q({M+b5H-c?E&Xb!Mq<0^pKr4MnAJ+t={jr^dPqR-OBY_J%Y>VF(I$Rfms~nW zWj6o~W=2yn9(F1fTQ_AfV}henyPWfHO09yPq@SJ@I*4LH$Iwqv>>s6sSLq*>3O|eQ zcn5;f|Hq)K5k)p77dFCLA|eK0^s zj;9Y?m0dsX?@$J)DdPCQ>v9uaL3ObvBAhu1lVl~hj)_K9Ht|aJ&VMSiKCicgaip=k zFK~_=)w5{n9)Ex|j*sR_d^GF0^b-LyqgHYA8PqgdVeEL~$i@!SYzxoPVn9UGz)`~$ zYJLfa^T5Dp9EVs&l1~VS^g^%ifmZTxN++N-yM`?5$#R%CQRnJ0qzXjm3+=9Eu(r}; zt*y~IV?NM^MO+WTA}p;H$iWOVVv);<1bm1bwgx-$9kFp6&R%Fu8__*;!`X8tZ-l#E zj7rWeuf(h_%@>zfGH8|985t}bnPF%R(fB>Fs=4U^k{R?>52@-E*C&{civs!i^*ACFXS76qh8iDJEt;o{%>?sw8F(A<)Tr+^z8~}Rc2dSvc#jbS zOOD2Mq%^LK1CiIMd?}J~7?Mml=xlCq36Aw6#}9%Ad66(DWG4XMOzZeumgX5a%| zko$0Cb7NyAPi`xdk8Ey0oUlVi>8=yt?P6*e78xX6RjAvtv~6@KFENtVtt@XcC?^sw z6K^u3WvANuqb3hnlesfIH2D}Bb>ftby23R|8t|;gq#-Vf%Of%I3QNa?8j2h#TS*(^ zJl@fj{1jqaI6`4k{4pGmDZV#W*nAw1r7-43#LALYHt0|~yyt{cj%kTgu&m3c&e?Aw z@#Bd7S&SyRvHJz~#})pc>5oo(yny~(_51Y475<;;kJi5z(4RRktUvGjedrAlVp4i5 z$j`t4Yv7Oh+#Rz=2tMX=Wh5S>cu`2~GeWT4$6n>X4&!n51i+d2Bnzlqk@Dx8zW(a@cbb+|r}CO&nv`OCz;5WS zEljuGs8O-#n!;0ta@u@ajo{;gq+2VI44hj(8Xh*0>t$H+fD9wy1tML4%22+7qF8vV zbJaPJF4rrk%2hvQ#T!Z>-B6rX(-;R?RdL8QJD#hmVmDDL?BxuVQ-5RptY#g`w4;yA z#^pkgHe$VhLNow=eGZ%c<0{gOZvl$#S(ITz2a2y+d^du5v!@l@{rZ%dogGT z#30zuVvC3M{VAdt7M<*4ebesRT1@jLsI(^N8pYNAJ(^uUGwZjsiJRSb-JJmoD4X2AfFR_{HLi)~zA{a@Ao zN1r>k_Di3;^!d*JSLz-u;#OUAay$m2hXZu9y?G{w+!yjsV{@ZI{L@&&Z*e_eOZ1Pn zAs|d$n8$G3X;&O^p7R9(neBlvP+bhpouYEwz9v;T*|oO&5ZTqGR88SG{KH0t>OBVG zM^IFet{8~)u0E8mJ0qp52la}tNaG^aeM>JVaXpDs=~{aXsvWuDu)Fi{F>_GaQ_qKr zzvGaDy$(VfO1aOVW7WBTV7W&#yz?uCh)xeVPYl}#ywu&QkWxx)e?s)Y{cbG{vB!1X z_B{^&wsqgx`YSh*<^-dafD;K!T8Yz<13Vv<4)B{=eg*HJYaP|}iDkdpeMbz(pA`|g zsB3mP(O({+67z!3vrUbLek|2Em;a{9`z4qUj>Ef^mVaT@C?Lj?#IVsUOALEbqVtwv zt}gG&t=OMS_T|MW?1(I-^MBT*sm9Moo9 zAyQoa665kb8LT7~v-FxsUIqn?XAkD&Ot z!7;|@x09OEJw-W?YSktHrNrK~9DGXI{{ z6!vCq(?KJ$WBr2WufdWe0-Gh`)Kpz^h6ZX%B6fFCsD#uv5n7_-%Z7cp?Q#J%VHm6F zS#Zr&**gVTi@Qw2!_G83qU$s`*~V2GEIdZ0<}zw#X;>~G#B$RI7Ef)F&Ni=%S4PcA zin(egwLn`n&YI7PKw(#nZ3M{1Ti)7|@t2$qvZN8byXMiRRoQ!8x26(HoH;daYacXQ z`_c3)HW-u3zl!1&=5%b=r7ekhpwG0|F=vJXf?IUHH{Y}$p2Fjeoa?Q7P}NkFbG)#u9M^R8-AZ0#}?c9;(hH8 zB^GsaG01s+8%{7E(;=(2nx2Nr=*jNJ@D$|SPs{hg=1k3XY<%Nn^k_szc4JXF{WMq6 z&pe}_;XpQi?ui#`?j0*HUV&FTJ%(XSxy`g%7-?Rv3YZe!vDeU~=kF+*af~b^ImYES zo8nt9x<~gVQ}6f`rg=K9+*e}9fcnp!tg3z`*{ixX`G;XI6M!Ar$P-%t*X!&Bqg_KjA65HA+^-5~kmJ$0XO2%n4BFE>AVi(2FHj~U^F zAx1dn;IQCh;0$L!Nu!^L_aVY=R-oMxYtTYmzF-__Aug>XN4XFSb79jPu_JFY-RgTD z`C^JySj$HBD%>c9_+>aOGn3rEc%;8)z{X#Ts?&;jfVs4pXEee!9bQF}WqXA`5<} zK4H}H5rk3luONR(XsYOLNf?bFdtvmfqY*|Oqb-|pWwjkq^tFB*i|8wkzbQ2z+Qe%0 zN}U;L9s09Ah(Ti3>F0(;aUFsCtv;#y5%3AowDWs2rRKu z92k5)mN*n=i4T8IEU`jJ2`sT+R1ZtU9MR`kB9iN%rdAMLNOLSPMA#i^5tAC^GJ0cD zHbgIgNyU&FXG@QjNx%9M8}n8TZ*Q7i!JnqK->o}Ft#J-@6=v{{O~NDD=qf~_wWk`L z_`P%X+aj}-RQ}TQer44C|IvDq$8y5z{(u**Shp%PR;Pk+i?695G0lEb``{xS6H))B zun*cHp^|**-g6HF=Da*c%~1vWgnYj-jIsF1^P3Qh2_dey*HTVMPgLM|Hs%#Sb7*NU zeVYz*miv})n%ANObtu2SZ4qj8-)(%G9b^{YaRVdQ{hMcAVTr9ZEN1h_YD!C;wq3JJ z_~s&H_+G<FqQFdR?OxqF+cdzK~J$J7ocA)xZ$SJ?lm@zCXC{wGu zPDai0bZt`W_uKzHvFHKLReZ*|$Cp~pn;9k?gbMP1ZP3v+d#bA5ng66E?o`$L%_fWd zJQTC+=U0-!9(l)JOYh6l=3Clc8wYKd1ngeOcqSQj=kU14-jFyrK=uk|XoWqRX%0gLAz}xka2G#;P1|Gw>pS>YPVISmo1rQ$wQJ`7_j*lscNe&f zqMpkrU|XmmTV>w?8&70@l}Y55EY7^MA+xqV^X|IC57F#wr`gt4vAE6++QDOF4-KxK7qi@%t0w|>p0GXskmoOC zmp3DlN|}N0DD19!S_Vfu=4u;<#E>|>`mXXZ&Ay1w0*PMXu1K_`c}}z{Pm(lK)tGDj zB5(SRHE|j1z%?iP1LXd2Zs8tV)~#inZ-h!paxJnu)+v>bq}w5{&0}(1?le7@?56P0 z4qs{B?&5@00OSbTiYMJj*M8 z=g)GVb_SZ&nZfj)_&w}dX zV#5)fl(7vG8;CBGQoiaMZnpU6tHd%1TtsF8T-9JN{-8!}k5xWg;|6=O%EKtnwEV1L zQDgUJSL|Vsg2|SfpQUGaS&m4a<=BD8R%~oJe&Db*#fY-Pc8OEW!~UYbs2^R}Xtd$t z)@DYGuuEI~ZuX`{fGXqggB|_XsBio=?i%<~GZx zl5%Yqd~*LU=hgHSdt`pmG9Rre{g>W%pyf$zsKM4Ehl~16ElpGQl|%vrG4wQdv?q)xyc@cV9z3{NDb}ox%z_c?XP2`+$|v4|LK=q>0wnrR&EQsvm~N#Yn3Yy> zs?5v=#*|%+$qynAVNokC_Hc%+MNTGVCqcKwAc5Ld-}{SPIl@Pujy{va)x8WNLpG`R$tPcMje*y*-wM64T4@&V z^U}HWiS+wr&N6+%IGM0U|8Smy)++j!xbaPRu#`Khl*?Dkjv!w#4Zi>$Y{R(Sn01-` zNB4xhmg`{Zg{ahaayqLghf*!<*1nw<&KLiToQ+Y=bQfE3!}h7n_F2krpG+9ZH*)UO z{(H+P9uEgJR(-_S;G}jFVB#OZOF|AOwrfwB%pNOqzX%J`<6kc;c~~}%Yh|-9!N=2+ z%*E+sHxdDtqD|%oEQ0RIl@hArwCASQhiCWE^&f{EiJP3HLp}Xg8^r8^6qip?_>Ib< z6Zr@6l3=edE3c_xSw#JbdboW9XFD46O?bFeK;_e#w&p9QPeOgkKQ=1kNX@}qa#*XA z+!a`z1SbDt+<=Ogl2`5>h9qTVW5!n*%WGABnfw?5wF_5j z3eZ{(IMf>PFg!@0iO>E8rV{@~h^ax?uiX8^fdC_W2;9R<--VAGS3(!!_3_&4VYF4& zij77K*ezxes3|Nh707cKm803SOqYU3V!W6oWSd)=3@Ii$Db{2qNFA#p6WlS~)kt;`6T#W8B&4Rs*&S{6 zZi2wEwCBJ5WzA>aPtcoLgX!T!I$v)Ts|$M80b|ezlJ*U*?rNqV5cs)lnp3!{fITb_Iz1`_y>mSYhN9N?*g>y1*Z^(SQKJ%Ws!#~k|Bvm++J5KpB#hQ?~ zF>S^zA>R;*zni;2I$A%c9KSs3hMHDb&A(K5^y6o{aIV1A<7b>>lHm)x_w21m(k=B9 z8)RhJl5>CI0qgP9W1B3EZJQt4YhTFN{@dS$vAyWOYiw6a?uS+UN9OJInNQbcPCon- z$s>{{B$(LZp1AR*sm8ASy@!S{`Q+apJs*d2zw=T-t{i{0p~|9;6Gwm@mQFY5daoHN za+ulKGTBC_%jC}(Sf&~%p_FNM3DU*%2X5*zagf1h!oyNRn~qjR{$>^LQ_zqj-hV*4 zyZM>EMXHG1XX5r5&h1Nd{Im6L+}|c~mwf?sx9E0?+a#P3icIDAM?Bb6+s`5;4nw`2 z2BCDP0iMa$+$#ahSRs7aod=`Q)gMkyA(kN_TyHsSz0~?%ec{TC9pcf^Egz73#oZ2x z8)mTdlLeEmM#x|Ov4|Bj@ZZ0D@5a#`B$D*h*7Y=;%v3sE~$S2Ta*Gq_wY%G zE%b@s*)`3C?;&me@oUcoJ`!dZdvCh5)qUN=*Xhxh(!4)5IhCfJvjAE=Gl>imph&MR zK{>;HiL4KO{qW(!wQ8<^Q83-bx!M>iu_?U7l=+_Q8Z6Olb?f9m0c1A5qr?A*evSDL z+~ysUlMAf2@XS^}Vu+ef4`q|3!TrAZ1odLM+D?L6^ij3w5m<7mMO=XTLR)n3o1sNw z^@4w*;BPeeJMhsH|Ry-6!g>Iu<5@ldWmeX z)Zw22fL;!kI{dTp4u2BfQ5Z|8!@fc0Pi_s`6&h5E+Ffdp@RD7zJDc29*`N=*2C2WV z6!@(Mo_3U8FzT`UZhSjUKI~y}C|nWcbS@KJ+Bwo}AgAc2lygDI8Af@y)M*4=b$Xbd znn^{@j^X(=8-?~=wCcAf*(jIxrt+=aB2^f%Xa<7raokyMXNCUqIN78N`^)2G9WLyu z0(l~SNrkOd(cf3}r>dgYeV^#ds-n;CA$qAr(=IVPEtoI}NeM;#d0cCq8+PHa>gngnql2{*#f8WOWJTL+m9_IYd7mp8L)^SQH1HcCr)K|4X`o5K zHTGJ&Z>u6b|L@68cU;kK&WREzyH5Pa-}T1vfO%1x=qI#62{wMbDB$Hb-^B5e?GHIMHegI0n2CT zFoM04@4~lS;oj!i!eikpAy1}dr<+xtihHuHJGt?)u+imbd)pEUpC}dBk!{%l4ocU6 z?!Y?(MYpuH`CdBxrKeXl))cWWYGD(GQ0-Riu=_wA@Frhbv;~`A!}Kit?hjmtOVJ-3 zA^NeZ=LY9a68dou8RH-5y+;h=ymYN!nIY=KZcPPF0P9H#e+n* zR7L;E6GXqRD!TCjqF-JWz2skruBnQC=pfOB6Dx7@2R|VCp{nTRLe+PxqR;#x(L1Z6 z-|=&zb1vFVH|C#Fo1bnwz81~ORaK>DK1AtvS4CfdgID3)s^}AOCo7z4(GY2-Wjllc zV;q2X%?Pp`HBn+mkd%_MiZ)eKW($Sxb&JV%-V-YfO}92ObM55HzuKq4ytM-6t=?c1 z!NiUf2ouWybJ+pE6`O;j$y5p0EtWwpg4xzv03-`l0F>zXGy+Xg-{Zd zuF{3ql^|}3LEHjF2_hwkbAecD9;OUHM?URa{7NQYe%77BV0|S){9oa>yDIwocM|>e zs_6Z95&bzAt<`Y<7V#26-cXACS`_&a7kR+E(rOFukAKz_{=$7SAU8oih57dBI1!_U zWWGH-ny3n1Rh9guc=B^EQqSV0|1O^Va8>dbm z)wm*x>C#(5F48+U1PUsN=jpAy1*qbkRnZ?2v78m!L?y5=4PFhSXDz?-3u1V<>&bM$@T=d!bkWQl z@Z#Wqn)916gaBgUnI6PxaS%+TIEb?l@I8pHdk{ukiT0Z=cm6)?lvRGIRh}|i zKkcZH{%R6wTbqhswF9FZl~QCOs^4F z+Yzj8c&Q1EQZALD@J;;_2D^E-n64^eIk}EzV%T?L<(1ZEdecUrOxZnXTNek}om|lT zwnWVao=w3g8lX4ukM%bydlh9t7Y7s=0-=Qw+aUNfCQWWF+*B;FLzj2|hLQE}S`?*6 z`&=q*gRPSeQFdJ^PJG>g)R`2win-HW{+D>zjIn>Tv1bSI_Uglyad^sPzYL5+zdwY} z==W)U4REa0{I>DCmtQUG&P;x1@N4F`oZo7GH}LyBzdihZ%CCmSflb^Lz7Zw~sket*vILjU^+e>d>^96wnD zWFY9`_b|Wb_`M1P#C(1i@%t3Nz5JfwHx1LxiTvjC`xw7Yet*aB+x&X@{es_b_??aM z>jV6*=eLdD*ZA$P`2CLW`0redj$iV>JNO%Z2MH%I!CuI3g5Q^3!kcdVhWH(SGC1+S z*Yo!s{4U|w=6_lKe#QU3!{2^>zvA~CzgJ<^6wFrOX(^~k z!aJ^HRyGsL;#8J?^!n~c>!ddS~0XL+i(F}6d4YAwhpnsCO`VtVL|zfJHo0@@f7V^=bi#^Z;Ljo zYBcK&@bETp&u-L|_LE{veyRz=YS_Q@F(%YG9TC#&91mdc+oP;O5#` z>(;LfEqjx1+0*ZjKptDe?lr*b@#ZbhX$8y2nN_-HdF1X^^7nz>79D}!276lugf?6m z%x{KOaxk}Izzfl3RI#XnDo(k^Q-!${M^y1%ql#exEu2%LirUa=N5c_Sw7orctTE33 ztm>^>?8wBQsKlLueQrD_M$*G?HK&PdumM6^Uh!V4dM%EdUm@a1Uo4A){l0_Pu!XG3Y>Q;U%T~3D-Wynw1yE z!qSCM>aKq_*9MdFu-L(s|}Y$4imOXqG7Nre&f-)>5v-+rx%k?)I8f zPN*S8d#Li4%b)!L<%r7u6dGnzlH2U)>2PM@OxvOKAG6Ix+dM)0@B=ksPQI8Nd&!$! zQlFiUBbnC7AyIB2XY*m0XBt2it5uEzQ_eskB8XPpO5XbYt3=q;jdbfew8%B;9vbER zbgmPNFtEIM2I2zM?7Oh6GYymr3(%ihkvTqd%dY%Ufen4Mm<~AT82@b zx^sa^_0v~JJ; zAsw!m#yhe}_9t$SW@Ur`=H%M1myh2}8^5(#kG@wiMD#T-G;Hii(K>fQVB}xU={6lu zo0(nFlub5<=MBUCh)hrGL~ZC);ctw;j*5utI&EZZKf`pZD6;J>PT7hg*0XV2Ds%lQ z70DaW)Jnhof7S+QEmte*t^Gg-~G64cQg-nH74~*zVwUOq$DhFE=XC=^Lovp#CV`ST;gB zCX+o9X`**A?o1UMuvb!87|36HpZ{qxZT=FtPTroJ&lzbndJ*yTx_tv%VCZuJ7 zS-Xdc52L~*2`An+5x;lUg2Nluo=Ir8%OTc)!xZ`TlrSNRJY?JT(pyk8)g*Kvb~=6r%g^77JibGcXN+S$)4%%!Ug#&UDu_b15r9a2*nae+8aKlgX%- zMht%WJIg5O0uwgWGyKT{pK{9tM7YI>u)Bf?yOD}wGRH{p zdt3U&NQw;9e)Y@H-O`@_Yt~;oNYictO1}*?PHmp@I0|w7zxv7l=bSi*hygGrmdc&X zkt1W8`0Qfq%($&nZsqb?(xg*h?q8Kn0rwblynyF=68*5Il-`l8IXn%#R+2vCo}KRL zuSEEYT~c47`^|=j(*xaaMnr<{^$A*HRKM9!vDxy~vwwyJ@GtfuLJZVzzzW*{sqseK zH#%uC}E71^2F`uP*#l8w4sw2R5M;L5hkV~HbdoRWC1PyE!iSAV=z@^P2Q ziDoO=_OYw3O|rH-uuofJY@S7w7Hd4cqV0*BE^L5knn;HpHjxcIM|7=` z7#qwa=1yHjV;}1j`=x31Se()hpcCJ`eLH$?xfjLBLrx*PmK8}qboPA^^iA7&& zoOi^u*Sr&rown-iEB=1Th``2qug=UV!>Z9+n@o~~&bkyZi;Jf&DZmkReTkO`z1Src z^}Dn>%I^;UU<@&09T0VmIqDiV>iUdjwsVg)0jku-Q3F2I4x2v zt;T8#zXE{CtNkX$_OWXPH)TW-VWTJ{9EsnqA=9iO@#K1v7r<;x8U{kWWL4zhev@_k zvKQ8uPCc&P`n$tkKGz&tfx&4@@jX_Ug;|A>rq~+8e%kNd(~D@2!1l>UfSmv~)&~Kt z+bR;0ZK9vTwzR=L4STE>iJPVypBc2RJNd7eo#HkO>5y`^xk>nH$4CWg^l37L!~Aj#*q`IJnvTO>A-<6l88Kkf7p`P-LHs1xPaq1{`cR2Ze#R z8wMgAAq7EsJ#ifQJwKhHE5GFBCj2^#jJv2vW)uzv=HCXfMU!FJaVj^ZD$f7O{k-57E8xm(f%DwsLklGbRAt<689A3WTZo#j)2FB&cE<1F zMb8~JrJ@8jZMpYoc4Oi^s#*LU?B;f;+0EjG#|~kwLD=WInCLic{O*|AaJE6%8z6ko zAXpzi{k9;@Wtawrt^5^H9BYL(UJmxQ^w?;9qEzs0QKn4m4qxzfu{gxt?HeDdN!iX( z+XcNXU4l?V6|j1b_gQ1+&HXZ0$}ZAn_M-R#h!~_ja27G&m;g4|=&Y(@S+$uU}-y4L?b_hW@DRt?ejq8=s zGn|u~E@5NhEF7+#&3CSKcbNI7b7&ybvMbxNTQd{6kJ-2##J~fJClG7A0O==OX_3Ez zXT!}id=~{0?amWrr-ikTmu(^baPkuYGw(Hsn%`y!w!jKB@P-SrD|UjKRoSL%68Cc7 z#jWCuGU>K#;ZfPo$lc7Sig_K3}!??n9ksrbLv((*ev#xn?q zoR3s_Hm|PqQjm7BSi!wa#gyxH7Xf&@^tKoldRuk?kePU^`y)kxFI7)9cza0j$1A1Y zgh^XH22H5?6|NPumlZr`ccDpAlhuAok?IUn+WVx4dKlA6MHE6%XL;gRaIPR3y8iY}Qe`!5I$t^<&OPdLY`!st7jKvM)T5kpuAlW#-%K{jA-W#XcHt^(9obDW zBXyQLBf0TW;}Xe(*>f-#u70RaTM@fr294K0fyU+_*EBm#Z9`>KS3`Rhs~Rpu-k=k*Z+{`aH2yT$D`Z7 zPz|Z?w!6`H+s#Ft+4Z|uW#?^3-1~I)dpby~8%5T!oSKJrCU>=>wq3=)`QMz(8j@3x zrPY$N+bp>OW*q}-_c*ps3HM4t%w2A9xmxXT{)+}zLBUmWcAF(H?XQ!3q4f+>XWis7 zqr?s8k)d!h0!!%Ev-A<{)34}e7-dYW?-lWV$OBN82@kp~t1sL1lWcNo99&FYncPbK zyKOoD=AV3taG;>ts)Xz|%Oo6>HKDqycspgdi&r3B_6iGF;masEw!H&>^{JYiW9WKH6 z;d{@P+@iIp4FeuP`a<6QmbcI49hID~{`5HGic?BA_DK408=mg{-kHHY>X37yv1xRo z$-$V4(BBUQ9qX#1$YWJ8A`6el^>97H0(b*`jK zD>;aa8&bzr3g(WraqT?;LR9qrclkCoMU~Eqwdw02*{;g5(g+(->1;@z<4PZrVayNx z$4TpLnNR{Zkm0?tMgALhA4g*_w;sxnANh>y+k|bTt$_4HIqdfy(j9NIRRN*+F{ZBE z7T=DL{n)AnwW+ofUFf(}60?82&=yubQ@HcsP@HpI43NLv6vxHJ3VBJ>SrGhP7b&&3 z?Ea8*vn|!_Jw)3g!(7LiswxjajeW;gttYhQG3n^854IilJ0@0?FL`~`2YfBd;GG?Z zm*inT&^jKFG4s!2l_lRC`F|cV2~B=j@hbN|HqC6J+{%)Nvx8yPlz-0~H0l-oKUY3s zDKf?TFZ*S4UXd%Ox-yP2kp)So(DcT*^MX=|NDh`3+0uXbK^ugz%;Low=;me0W1*!{ zXk`>y?n4KfFIJ`l&6l`8AK=fJMDDGxdwiO?;qZu#YQnF#CeOYRDE1piZGVokf%!Ml zk@0G&iY+KFhC6ai{^WSEM29;$Atfgo<1hcI&>rnb=`fJ#u|JcyV{D9H!M%sEe2wH| zoPTDt%KBdhv$Y)N2rW_H^y1J!@kQ3@i!p5zBR-IPhk{IGuAi!x%!t?gQd`#vEORI# zH|u<4bXr$lL7EDRkP}%(D|TvcU`H}Q)Mjn+{SI<=$x_+f-SZGw1?uy=;xLnMj5i?L zywqT@*pB-!4H`G*lU=gRx0#8j8tkRZP0g2Z<=rVEzdcZo5|!8fACbMyo-)|V8OD6% zSa9^>M#O*X?am%%K%=o>0?T6-`p1?C735dPi}A5gpb^*QV9n(6izOGQ6kHQY_qhWNvS?sHX5k6Q=15$XqVIa^Xs;6LPVXx!4Htl=ALr3$6+w#gs)YH48Q! zSSB-++wniRsiw1~cT-F6{140j2Rrw4BmunDPUmA&b1l*EWkSczzb@Hiq2q}=(L#0e zFKauMkS(wW30P4nNe-odL;H(=>+05&U>cBDSCC}n(7==kErN9WikApz4baWUpml$4 z>$$%w<82IGO@8qsj+di-(v{f))-cCCIbdf~lCv#=<-3&N>haC{JkoWjS2NY-B=r}b zFp1C4*|M2hSy6erxoEBe1=r4TU76iB;sVp#{@n#;v~hWidU;~o{RAoyw#w8FKSDO( zOXu2S0fY3(=4;z|ZlAE41P@@$HOxjNIMbkse3%r)vjB0R`2)s^JclBuPbDqlGNm<% zUh!NK)R0KewJA%(IYph$pOv1NzQ*;@zCVM z6kCZ=4p;1+Q0%zMVlE<9%tg3jH-%!ymx>|S0^CJdu@}c8RBSCMKq9h@axFRG_KTH< z{N*_J=GJ$`t}K?5EQ?_yb#b^{22n$r>WI{-CaBD>NU&2(!^0&9tesGeIbh9g z7As{kXw6G>%reF{!k#l3^dIu5Sazp?(N|?^f4PN6?Bs8v!=EyZ=w2epY)T4mf&ep& zMg}pnDSv<}1#_benW5sZI{0N!dX5Ao6`%~ppj8{qYbb(KIH@b9v zIJV|=Oo$fy?5Q{+9T z0aCCaB1C4B10}=YNM`8`WcS`;PKdv$Gg+fdcyh=^l4zB?Vv<6#HZPGG&YyM&OL&wzkq3i2SpEA?uXu6OwZYkFI}_ z&Kfx$r|3;wUrmoT#MpOaUx4mwWv@k~r`rsF;k!2Vh(9iQhQ&7^>VpC?5F-z=x+qh& zL??xtLYd=}S6dmGO1O(qW%vutRKsvtW>#d0V8+0NJONyzYs$j6fi<_qW)N)j|?MpEwn3iaklDU zEE?>dSLQ$4f#UJy8d>CTj+;5BxJE=H6w79eGjLBx>qL&d3G^f*($4(1xr^HNmv)L( zbbQU0xm~NfW}4@5KDUCSC3C{2cz(sXeoc3|Kk0Id1;P+^>#zC7^)}Z-%uq9w-ej?m z=16a|7ED%{9r{!Ff(|_wZ#h(ZSv@djG}s-hADXEv;Bc@T$zIryP3~Cz^vv3)2-*WjkDtQpMh`xV zuXen6@1pu9-?<1RagCL6*}D47Bj&(7cLvdPWq11ncQ)KL2qiQLj~@mqclEjf!RUCT#Bd)D4z>oj*MWm|TZpU2T`u+yE3 z>^w$#^xVn#VYEtWdbm~6jF;`h6xSkWY*JFk4~g(oD0nyhy+t7x>IjdW;VAweYtIm? zjN5u=aMojUlzarZ0rO+p;38^?7|L|Z-?ipP!#r7VYQKgOpOOJw`)X_EqMr|#+!YLK z`OC>_0#bCA*ENu%f@^P7Yf~l_;wFmqq^VPmMp|u$m87*<1E_^1umT-o9c3vFmS3}c z27IB-F&A+ybN2j0;x`XG^LXaL?q^Tg*j;gn`B9K z@cen0*cilAil9P(ST_bEVn6NKz!RV%{~nlce($jdC79X)b{ z#sc+FQg2I2^Rm}AUoGTMlc584IzMB-waF%RPJ4HFQ6g8i`?QuVg?%=TQL3(U8FY6! z>&?r-OiL;z#%}ftI;V!#elgpU5;0&mX_qj%rFga56;2DGUQ3__A?g8#@5Rl5WXAF ziS$I>+7C&rL{fiW@QG$)9+d!>LLJ8vvuNqhZ~fr!4tGx=hV^F_<4)cVi8(P6^)jw{CvVPgOKFErpR2i|E5QQ5z=vL0pi%1^dfrK6ziKmfr?#x7n= z13_MPq#MC|k-{p8n5{2Lo838H?e zI+R2Q)+c&91jGi+o{I}9ytd$jjT?L>8@YL69j-cVP@hTJP^2bvZI32e$3Y;nKWmj_x9Lk~m&#(58Hur>dqmSFwWieX*#5ipJHug#-g{fdlnG$ANV)mH z(=01+Bz89U<&t|QA9-{C7e^X10)MAy*W$#H_IQpoW_10hmWGYUe1@>vFrjymX%ZIo z&s-YjMM;ghdlE5>xvmj0mRXR_V5}Z?zSlFS9XZYV@UFtLSqnqaneE-G+v>M9MKDIjx13MXyH7+MkAg>niCt;(#Jy$GoBy z%`*^9&=<(Q#Z`>D|H+2iGxiGhtxQJdcHvFnS2*^&`c1ihyJPqzc|ps&hBH6#80d@f zLnDf}ST_UN8=T^)0bbTPrek(d-3``2>ncl!treb?vvi1^^xAr26m%Q^h8050#8Z&* zHe;*I8@C`pK^9xa3B_o#CZIW{lg*e!XN)j=;py2sj3dsAal{5nWODWV%S*(@zp~r( zWn^Q^T-^;J-tvlHD&EM+GI(aFu;|8?b=N`11jEW@OP*-RCkjEv6-7C2@oyIrB7cXt zehT}WSI(2dF!8rRrI5tXWjD@-p{3=;P$u8m`NX`k!IjvR!2VO8;btH6r->;&^pz6~TCnjHQLE5JSQ=Uah5@heM0adE-Gb0k&z;n&dr6*2c z_c?LXYb>%)x40c-ljR~Bip}ZpBTNt5z`<1@r+tCaWn;1!v|;=1pC(D(Oan9t(?h`> z0deKh_KsRv(ZWO4+>k!!NT8)P#6kZ}tf*}l9jUMsidbQ7@pJC8ydTBIwuV(i;!=aU zh(I73rh%f+)*Z_bn>gJF2=It-zr@#LQT9Gse ztuRW(*IEANqs|W<468JT7q=nm^yRR(x<$KEH}iX(-)SJ`gZy-4^3_(xb4_ zIDKPHWqim2 zv)rr^b>biC^n7O#NOu5>zQp$Y*CwsZoKVJwmZ>*8L>LgJJ~)$RF$jUKTWFRCJJyFK zg_~g*2Xn>L6-CaFP1bSJw2%O;L5$R21rH*NGdH#T7yeP$PH-A+5WkLFu<{Zndgj?u z6XOpn%khVXFoy1D6KR@mJTjrle>dAVfWR`EB}4)*8Pm0nPA-rYLxu*i5>+qq=yATY z>l5Vntt!j}4xO&PI*0kK6STB@_J~GSWfm@?fY}QZ?cTEi zPYmx9mH#N&%!LJh6h*GENXBs>7TIi(12zOv&OfzC#(y}L^JNw}>;`Q;>fbmWJ*)?k z3CLQBoH>a5gqO>x*-0hTMxc&zZsn&cv*6@K0K-1GurA%RvSL5)(!g)y{$o171RQ+( zycbzU<`ugGlgL?K@M+mAFG`b2HT+-+LuUw$?6^Qgl=~qa1iiP!ztHAYIvY98KFuJ0F{@Bj-4VYbO;H{6BO5E zG9C1V>bNJl(c&BC*enZ{gn{R&UcT;*GR7 z*LhDDdlIc(g0bWb9a&EfWO188LT!V$u5%MdGLuFvzS#{oSogiiJ|4$gVJ&DdKOcg=Fd*Fe<`FLKYvD|UF)Uj zfwU77?KhOZrng<^;~UyO=0i1Ym;2D`+i(cAQm3~q^P#zI@9?4dZS#HTEp2b`p^MtU zu$8z(m&sb_(|R7lLhJQHriD(^nNM|$?iQToThw}qkJhGnLF``HV?J1aAkRH)<$6oX zg3{oyg6>DXt{}|)lMtp~pyYvK=)Bh>0xMCX<97RCdNWFi+)kHdT0mZ)a7?Ez#ti0P zP3yN?TS+x$-tkrc37zG2c5a`9r{*)Vt^3Tb1jX#nuD2W8JjJm4Bior+3zQzgxyay9 zbS6e3+sxnRtVf=ziZ63m@Vr1%sqiP1(HZ{AruwGUhn7w@XK(lph1pVMr>7aF;O>0B>?BLBI4Zlg^%s5@BJH0PhguqPahc>zYE zy9|aob-&xgpl=?Arh4%&jBZ|10pO3y0dOO8P5z`R09wq7kf8YHR|r==cim2$$rEMr zaW%gl+t@uH|PCOt&V&54e_cScAYiXAWVNfiKdL~YA zlYO;6$#Q2gY6Hb}s84ExF)EXrM`F^{b+6R1A1z2VMSNZ(SO>X#RRHEW00@;a0HUSj zsfBMF&nY2GFYJtI(eKoGiz4pE!;Ud}%>w(1=I7N@%Tvrxu`8ROgtuFm<`R~29mFf< z?NDsqO0qLS?4Uo?f1u@FXn?q2fNI&U>tcf_%xDeTXr0Ge?~j%_^-FZtHm&eli>G6^ z(g2NlN0xvDR-0oz>FyJR-{g=V9^u!^RMI389m6lG%06<0?B9xKXIFd(%8`U6zA5S{ zgWXPMKVnA3F}h_k7)6M#Bz0UxFCiEcLoDKH>qdW>s9|4`s9|4`s9|3wYFNlb4GWp5 zVIdPWEM%gFg-q12kck==GEu`qCTdv7L=6j>s9_-!H7s;m@_ZUEfl99OM9ImYJ!nG6 zO(HgFDv6F8jU_4Lhm$jX#*axJv5c1|+CMxw&vHzKSAm5iN+U{~<3O3z48n9mz)?!V za}?Y%Kh9JpQGlb+k%XVQP1&K!$l%a9qp$3zb3rY~!kAO|5e zOhhDjM{U;_7z!b5^qH`+#|azi)$3$Vh^KAOZT;9?aClgQG`Vei97|+vqB~to9aC~k z?9R!uJzSg!bg1ex75r}>vT=l`UqQ0AGscBCgJt~hCE|a(LzC|f`S!9|7w3PsiT@24 z|J$deYW}ycjQ=5^Ii5xCi2v>O{Lk2D1^)wU@Q&y{lj~k8{wKB>78W#9p-z5Am zLi=xRcJ&!e^cAi?BmoTe*O%!O+t}1{uLRydF^V$$!;&g+{|b655^k@xT*Ef(xOvUe z9wgpfGxea?Fl`VsP!q)rs)qksYlkb$(LO7juP6-joV@TkvBFmKiY{|0wc3+i=0O@- zKqDsy@?@;})&dX2T2TRn`X&dmJ75aZ=K?wF#<1^37Y?j)QkBp>849kpvW^g}tlZb&;;X*Hd#U)$8#W`SLsI+GUo$4#AUEb#SBoog-dja;WqY2B?v3s7wtzF8ukk?fk8 z*>ke%hv|PrM66a|u|Z2>M9i7#z!!Swk72h-;V988}da4>y-z`^wS0SD7j z4zaozlz@Zj^8*g1&yV5YU98tJt$n(1@bg_B2OqU%RXBJ@qQkvI&#?1!c{vVzMB14Y zsC7me4rY|$U`81ZW<)rc5#eA)go7FL0}f_HIG7RPU`B+484(UIr zM}W5IMBZ97YNuVHi_KOpcXpF6CpOlwjxl*_3wl06BUdy3!sJ>4VcK2$QN<#&E=pdy zspW^XQ=ig^Q$6It84eS}~7;dHq=ZXHH)Kx?`$; zf5|;eT1}|`g39`*hx&hN3y1oT{Cu1HNXt+sl1qOnL|_<1`GsTJFLh1W1kl}^ zrt6hHcivMXVE&7LkGzSW0I?4nQ`}3{k~{qnpm*m_A&)5DyyU`-LVR;g?p6yIM&CECMbI+T{ezu^=i z@{zr9(!ognu`NwXM8PbPKiCr1Z@5w3?g2I;wcAKc_t;VxKkqfOYJY1&`&W--YI_&f zUkA#17n*3Bf8eVU{qb(p@~Z#z(R^tXx;lhX=ELqYq;@Hq|E%a@4MF(OWe)!1fSE;I z92eYs}|#A(Y#IS>{67dgBs!|@HG z4|*^zlfEpI**Kz1^U5IU%QBhqBg&*l5=+(T%QBf|(`C}FF8SO&@C29mkUvlD z@*qH}m|#nEV|P2>T>2ze8T&WgJtvd9N}oE1W9HG^d!%f-Zuc@;>uEJ)#hHeEb)8=6b4O$EPgLMp*s}oRh)h2R99$Tz=}=TpR?Gl`)hz zDr9Fde7pO};WxdmLF$l$eHg-?T zS}Cd77AO^z%aF=)ZsA)|tSY+RzRZJ$uaD~sr{j)`$s46)bNb9}6D=^4gSm~rQdP9e zU4Bgal;gFbi8I3-p(+qh8yh7Md?4$>@rVUQc5q{H&gariD|cL3x02E>p2F)=Ra&rY z(q%S^WyzJ;e`?xm+thzH*=K+Fbi4RqF(n{oYvbIo)E++sl`7eqiQO>tkkbqG#2CsgS^cK4kz)P*!5 z58GS9ecSv{RBq;QTh4s(_?GX zA=b6*bnj`AIh~1T`ZICaC6~gk{vU1c17BxR<^SK76jBV{AXST2h+42{K|s`kt)|$p zDcedxs;GeVORXSPSx6}Ew)B?dLY_Rm&?5DVidwX~U9DfcyM?Vfan&CYj=$j zA+GmwBj&69tpO^0-=8xx&wXx^mg?*E>#I-hJoC(-GiT16IdkUBnL=*Pz4W{9ng#zL zW0PSN1R7nlS@7$ZtsYL5Da25<^JUr`lSci3w;7>HvKevEA)JhP-(rdVURoZ2lgv?J zXOT|r({S?V$cTj(x&z$ILvySev4X}qpk#7+gYA%W;wCCky_ov=gCuB}Rd`uQOj=}n zj!3rb65=R;eHJ%uGgZq>>=p4PD|O+LQZp#UkyH_nkBm3?N-q0$Bk zANt;B6TH7Rqlc15}Vnm|8`Ys}%( zXzU4S1U-wHMh>+sQK`%#jVsJ}d#JFv_?3z*{@ZVgo;(Iy8f>#gP4nafp&``?B$QrJ z^K9?-&uA&3B8S+td`SmX(G$d!Z7*p~akG@hhjWBs$bh|T!V$^6M=9(L4R|2>-7g6F zOgBoUe-mHAC;^!Y`L@I~oe3ye!IpQ}pl7c^K1t(q=*_Wp6$=8McYdFQkXEavH z=Qo7UHkTUapsD2ZQQ@-@f_<(}eIEXk+Qd$|(TAZm?Hq%xTy+0&Ue3HoK-%6r0LL$W{iE4OB!8AQ2Qhbug=HW_7 z!w1!VTBrCVkxjdmL=T2Uicb>ROjJqq#gItxNg|t)Dv4S{BE=_(#D-IVFAIr`J?oo@ zafBQq&6&wtD$8#fs3J6Xjj4rZs(8;{8#P|vF9+cpiL_!_k<1LY5Z1+4)J9i~M(ai* zbm+KmL9>mzRa(#izh2>z4emEu+NJR)LyjR!gLai&n1S9YY7GIViU=DV+;nYv*O%OE zAx^}J?YeCm;JewcG8;uo?vFZ#$!0rHjwiGiHou-pnSmqzRs8JN=^A`SZz%d?b``zT zzJdtpXZCSRdZskRw2^FNCB>Yr%6&0shhj9R$q4PiCH_trmv~)h>3hyaOm!-a%uk3Uugb#*q*L|}t0-&Vg0GV%o8QY{526Y^hL;ZIwjPnBRA^*@hXH18&ELdLIi163=Nv{E zj$`LAsQvtl7A+Jg%Cu41(2nv2L^qx9qGct$kqKS#XAu8hA3xQ_GnPBbuOj}emXEDg zF-N(0)QBA%_7`#D(W-;H4#95Hwv=dBygnb==C&A3XdT?pBTj$iM?Zph;Z~r%KoIj> z!IPYSXM`m3(ZPu_Rh=1Uw+kOm-mA!mXzffYMCMAqBhRuBm@)Bufj^6w+XjU*XPMOm z>Q)(uYMp25)_eZvPgOoBisHvTvy){D^Ov31cj7WO`D5Wi_w!6PbY+idJt;8~O`F7M zX>*Gw-{A&vEpiTWUb%r^ZHxzXX_hh{yuyBLjKe@)+@xH`V3EVEpLnUXUarq>Z|mN zZ6gfZs`6LGxoz~-Du)7`ITvx}Jh2$ml+HiH`2MF!P~U-cgHruF4*#k4NYVXdbbd{A zZ14HCJrq*B0$Q6`@ti97kw@A_mK=#Nf;BixKZF6~jeVHk1(~GZmKUdEN`usqz3sO) z`|i;o?P8F=58=QM(gD{pTdab#A;bz+^Y8&Anf}h`bUt^~mcC>85d)4|v#vK>hcZxO zNU^Ng)%&bhn79C6*u4gZx;s>PG&7PvpVc4d+>w&L@*L@va_1Pq^p$b$!`nRnMi=mA z>SS%&01ulsr8ibVB8-B~mw;rKAlVflc~uo8nwGH1^N?st(wl=s(~;gBB$|cHdJjmr z&$9FdHa)4DSSaIA_?ydT@b@XwT65H=nhd@jGx8*J4EVfY!XuC!Sjm9syHzqGXT>h_ z_2eqO-qo8zKAVd^FVc$o4UKebuNU9N3nFMYsH|q=8>aUIT9c|8cSmD}8Wcr5~|M=OmR@;pp8-We5-h zZAH#afu`9?JV|{AqVe_V>YZw0nFJx4+Caz;NNcd@U4Gzhus5ldKnLi#%HExj8qo7o zsyqUSEz=|rpFaWOw;u__Qr80U^Z>Em9gGf}ZiOfqj{vqAhrs4HJH})43oHP@rk3xX zh8Z=U7+~+B!&Px4%>=BrbnOwP*0B?%Uf@y#ODKB+jdw1d%fOmJLOP;%t*xj3xousdwwB-+wDs`yoIyQq%?D1;_;c%7p?WqPNj-0+p36vR?Ro2;ThCh6 zbK-=0CXD9JXe&6Ts^7BzpsI3uPii~8no?lAo>FF{C}rb?+sLB|w^K+p0w<~PURUAT zP@&%c+zRE=SrxwXNGklgtMFw>>IFIjhIZgmEdAb8Ttu zgoG1t6-PsqO4?;dl6KIgm430h4<-Q6xtLqYOV2~+)!oZF%y%z4V~#s5evQz)?}(Dl zQqpf6QPKt_mHRbFj%5$?=AO2369dZu4-8Dx=1tk!rl$ILkfZbtUj}O=3RyG05SBl_ z5SW}5V*VIYrHtM}DK=*T3EB}#IqL{Y!SFN<%ePd@x99-12Qv;zDHBySn@j==_NVDm zR+6P`=Px-hN)g+SposeFB3`c|P;sZ_y$St~&R@n&td;j;8sgS`Z9PkD!FMH%=;YBX zC!?T8cwPlby@%&oo*|xPj3f=;sqmLGcytc6pXWKAH^PE%=i!2sjEwQ$$Fqj#ex4_I z{ulAz=Q)YF_(GmLcqB>8MbgReT*h-J&kuNh!}9>L+!Q3*zv3zI?Bh9sxcNMv;JK6M z1cdd+$o>S+Z+V{Q(ZRlJc(hHK=Wz=DWdDTqPmxp^G?{clZM0l2=Geu;Js}INLT<}H zVWZ^NfPZ?k7RjT@rdY}#B`MGC$ILj?`qhr}RCM%--fyU)n&nWBf73Eoex0?o6ikZD zC}P{IHDZSaH{;W9dH9p+ImK4?FM#LLlmoq#b3|zq*qIu%lj~3bw4$uCw$J4hXgtTX z9bjXBy!lK}7j0TWhsB%EvG7U@+Y)5c)e1+p0O?q*Fa*`nsAMRCbBh#!k7z+X6m?vu z1ZaReS}dhBKT=QNU_zT@ob<)kmz!>adyB9$Ho!h9#fD7-rvNZt0I}^VBuW80Gd>`F z68^E#dG}j=-0DKPqq4CcOKomx&uu^=GK!-7{nmZ~lx_c(3j-3`*Pt6!d5sMkk_)q@ zqAD!yV&Uj7(6z5~)LBdS6dPOu(=?N5t}@kyxPI4MZNd2VN{xZO8s!YMF8u7F$2q8K z&~=#uY25NQV4@hpEQ9((c&-iNqPG2PW60f*?$+n?#;xx~*2{xl!_+1}gEnw1?uY3-we?lWPP-pdQXxK~{3G7pT#cbX;4eU{^XTTrbVEqpn{y)K2^ zN43{G%MQc^#PZ9cmO@)**VFhJyqk)gUsJ`ROKOmv{Sa-X+vVkB2;7vkk-j&70mV+) zn_t8a+v-+l&ejxWuMuLzG9!2AoKK^51?DVLKY$b4`m?b`Set#;$(}3p<`2?Zfrz6{ z3l|D%jn{J(=h&X^kozPEF(;VAckmNW=VT*}*8Hn{J*g~BJ{Ab@*}}D;Pw1<@gb9Yw z%dP=VV?tHhiX(b+5LzxqiTV11+rs_i^5erj3j&sxz9|V(q@u zXr^_b@PKvamsM$$AL4JJ?G6nLcZy{K{agzDESa2sV$06h%@++Q{Z&uBJhljUZAsL> zH~(%&PV*f(891JtmWWhb$K)J2Elb5Xa*~OVgc(mxeHM1))Sp7yYHimV(x&tk3Tk8^ zrC-P^cQuUM6_sxgwZW~fJl1RBhvF^5Zd9|m%xd+Bd*C+T1Bqy{p+|%gNNADigN=Ur zQ}mNQgE1O0_rX)NR|w^>pCB$C71T$u{S6FbFo_AYwBKUv@8Y_sFu?2H{CD{a-v5t& zTmhUZMf3thV2V+lFL= zEa#d1;)2=}=~qrBfsXuBfUf=L#^%*6t)Ib~eJcqR?h^q=53Eq+142{u<;xZS)r&+x=gf}p z(<>acM*Ah2x3BEd^JgWr#r`8GOSj2kbFsTen27Fmp8zz><-p|{cSpNV_gWX*UWzLF;BMvL0^XaG>tT_g+A0v3)lKrZ4$fJ3f|gpH!5MK zk$x%4Z&&g8T0h4B_GmxG?c(@+y^p>s6+I_*d8~oBO^dB{QFDE4O^cdm#MUmha6?M9 zC2F1(TU(-LdRevZZLFPAdWhu$(6)8WjPiFGD51{ZO>>|W6s>LX1e%}vFKQdojBg6X zQ4#~gHhSL~x^lnRz2gv(maC`rX@}GoIxBXS%0!;R=9kZk^D}&#KT};lNyC@rsruPw zO~#oU^yorH*ob^NJFKr>gW^mb<9Fn(FY+P`bGX!cYMgfzpeTHRzbej)QZ%rcwnZoe zWt#zhRu>$?{o3Onzk(e@UWoOnMJ7u9hB)si#t2B)n6C~dWempRxnER1!*pYPq0m9D zD6hZ0`HlP)3n>_cf#ma-DM{f{{uVcWS(%kOHu}V;R_L8xi&pkf`mD%G#FkM7)Xc_K zQ33Ymii@lq)#pf}QqC;vL2r?Tjvso4j+qI^3q<(0TdR}m13iUL?IuZmaPD**LHqLZaS#4V`! zkmS5d5hNwVYMA4ZwJC_~qvMIizyE+L z6qnQ(+R$M*-W6Uq^4e(=EPZiR7?e3Ba*GIr+F>Qm`8co$5n!vhB zRq3C-s3QIAv`L-HX83teQf!eLAZX?5ajRS>(QoLHs9_RFvVYBROYeWOR-3K$zi;jI zpV3;`M9o%Z7MkNjcF-nCIP@Prp)DgUVS`I3MM9vT?~|%Gb!o3(s8`nOhqzCI?NnBG zV+%B5Z$uy&QPHJ{KVD8RU&G|ZYC>ZOaY;MaLw*Uvf(}=Ev`L4lT4A6=KvTSwWjKJr zg-qdqx&wF16+J`oJid$7)It#~Dz)J~Y-%io9V&90U-))fkCpntDtUY*TuoWzhKWe7;nH+_sszvF_TSd_bgg zT#mZMD`WgwjdHVnn8Ou{HYg-!G8xo@+hgQS6_r#^7@P~ZBO=j*;Aa}}%D6A-GP3Wo za$pTz(EPW{Yt-LvyJ9TxiU+t41BH%sQl1tx@;xKj>OaDO_4TOizoOMKO0hl^sXPdd z_eHYt+vkr15^C$Jx8{QO8b<(*aBlfK2%k9-)ab}8?dS{bXuUGkj@Hv%M}SLnud}D{ zPc0HV9auuYy1~?nuSRv}kgY?C^d7AZK9P!<$Hm`}eLN#1ciorcxj=L<9%bCuqL_+Ur}f?38MBNZL31;(1We3Y&V>&fCfeyrxvkzGa> z?mR8fLW!m`l*Dn#eM&>0xioJ#%I=YCx6Nk8u&gHDY!(d5YU9nzAgpLvT^wDi0D^7P zo;atlXk#I(FJ6_{UYRa93~YKSt^4FCL|yP%7u2fD;dwN^qyZ&neB-PFUP&gp!tk)Q zHWrX;WEG1|3O?T6s3q0%fq40z2(O9Gr^qGRjlkye#mB8l=9@&V-3f9u#nHy8I!X)< z8q7Ra$iVrpHr{vZMDtN=ILb_D8ry5eICgg~uBk8%-nhv$Fb>|tRKz*7+Gc`4?l_>A zVEFz?x$xJYU&9-eRB6$4Z%}T z44xc4RG9IYjISSxXFSIJN%5lYn&}UTl$r+5eW>+BqtaU0WovOQrJp=v)aXVpO?J-v z9rHXqrznG5g3PExn)2rB|eXfrE2#yjmj=g{r-7U+p=BHfBzk5zgI@(EWk zIggq{CSP&w68GD=4JsR4(Bn-4Rs-Mw`c8Hzd2vlDUuiEiiZAQjmwIb#c~SU+M~)g{ zkzeG2{qZHWr^$gwEWa}cs_!>C?)ii8a}wI^e1@_?n+xbGplfjR=^Yn?k|0V{@5a0| zJ{%?zchtyG8b=yQoTjL8A-l~TA`1I5=-emnk60@whoZ`!@Fn`k=n!F3^a9~a--IfG zdGK2BXAwYVIxmE{5%doT-l(GXJ4ls6%U8P;m=jexo~jbws1le`28GQ@ceH+w<+;O! zn}FTW@@JjW_K=!S821Q2X+>ehSqs?{YvBWNU9EnSPH;d#j_8Tc86(zRTnn zz15tA>fpX~SUP(AW7D+5U(Gfdi>jj6HLxeZ=I(s3q#;6Zo*`_Q63y33hY3l}Vh!OD ztI+H3pp^7Nq^+m1ie0n|ftoL0qJQGtE~c_TH5=LQ^u07dFjHPG!pwC*I5cckT+@sd z=YOq=oBqq>w`49qaH`6HijA~j3Ls-pwzMhvf7zp2srW6yfr-76te@sp&+hD;B8wc1 zBLh^sIwKppb3o)z0_t!FNEs;P&br1O?$CUF_Vt>th3iBB6K^n~zO;>|1#Nzgu(**% z{C?lUU(&)~u3B*Glp7lqqOGUjX47>r4laHj8U|@)1SOc>42)Vy^{`E!4woX_lTC`! z;>ffCr(cyUfY=%z<*o%rfb0+%8)$i9GA6%&#zz16)rYNsoV_zkYQ&a!&~hBbB3vDzN=TH5tfqn;cbS^T)WDX>(Co+PD}3d8A=` zZ>8)0f*CkVz-r(N&8{u(?@><-iP|M}|H*RL@x=t2_stf44f!bqKAe2{lK&zhH_R?x z{>_C?wf4!_vj6n)@JZSSx+hiOh2axI8J}jUT1jNXoQ@&fp*xX@hZPSo_oH9uWwv{n zC1jAiL--K0qKnT?5QJoYWCqkAV!}RVl|3_%h5q$}b5sK=hX?}J55NtBDYRK$=Rjy` zf1dUJq~nME(9ply*t0DV+`Z`#t*unY{ATFVvEGF>DiWk|-DqLcD?fL1M$6NImh076 z(dj^8^K!-RYx$^25xl>Q-Fp$bj!51ADfPIxfhC;@-G@(K`m{bl@W$CS0^G@541~<- zizyB0MbptZo;?Y&76q$|m*8)>X0evAnDLnOEGpaXq{~51$^t0PwUgKsBH|Qw!DDGF zQ6OAhy+G~B-Q_u?fo?hAbbjqq{O#+7wm~j(Hwy8|;hduE(MlnAR~6EsIx2;14}~a| z)oB5iA{1gohlM!MZnSJBL<~*jriuMX+X!?^pW)~ubv{93)}sWGb8N3_()etlUBxiI zMf??{v>a^-1w?h1%&M}VH}RCgSTTNqW&`C_Y8|F<)whCQU!M_7r9O!YMQxLn=i4Zx z4JenSqH(dO8hCDM8WZC-&B&1NEtmpg_>ioT7;cg+9MH&>=@6-h6Fd|g7pzC+Yjm9mHmtiA##3nho&#*u=tjubq zPl-oiM4x7FdxModVtGu7G2&EDPKjaoQEEyql|mV>YrWLUV7jm}erX><88CBShF50s z=2Tmz%;HTeRIekX>>8C_aAhx$lic-4`^D2^LR4SAk(UL}Df%5&sctpF>By&uzNRY! z^wToarN16AH68cOcC8LjGr^DO`gEbe<$5Q%z9&<%)4H$eR_2iJw7#}tRX)fe8Ea(; zzGTXjOV;fSJK5t@`BR=;gjH8A9jquuREWQQk;R{#gx{u9mqoW!@ZzrD5AF>|PIkL& zyWG!C_v5VrW$h&2N6Bgi&d*Jv*|rC2jE8x}*1%83+J>^m{|CO$m&|FbBnRMTZDTLj zIOzcw8CzMkjZI&(5K(x+qy7DLn4oa`q$H)?Wh}64*}(YISv*y`%RcQQ;@U2J`|a22 zuD|pNTUV0y*ld0i#Y%)e1dub26v*jo7W?Y)k)!H$M0L0JYk=&u0PcF^zMWj?vmV%X z8f-hq!FFAMt*-Uus1?;}#8KEiPy+GGTGt;2+E3bs=ip1Dbov_9k$nqvW6RATcaI^L zxudUwroQs$okoj`#G3m2Z7{Nn@CO|qMz}-=BgC;0iCPE&?pMT>eqtXGhjwep(_j=0aV z?PNq~)Nn&fX@_O%6AZVvhw!xQSGr~NnQ4DGyXYb3^9?=LX;i#DZrV=bo8M<8?NAf| zY{%hR+`i$xY(}t1%YK(U{pvUag~_jf;t5qt(N}1sm;2;SjpkSd)h}d4_hNt--EpZ6 z2IS7RB5spYbw*8FqkUiC*7iTXuppDe-u10QOA$7fPUPLeyycmI3`+qX%BNfMab^1C z2Y*{hP70yzXzPt#zLOXwbWER+LC5T}-f&Vq;pej(Yg}sZwvK+;lUnIeb1K53b-EV~q3&80$Zwr~i|3>4L_LXY zBqN^j$%|jdX-<&!N0A+a#LrnpC)uUsyTso~MdZ?Yd3xvc+_NV!1GmzXNd;c2V6aK& znt=1q+TUbN`k7SHAl1IwU_s&-gDhHJ#V?e_7;5^Y#?Xk3A;}|d3`r0&9LkJg!Ia#K zFY1OSDMND_JR>$pM#~73^CYdx-MuNbh)-%**=?95KRW`0qL1bO=dWWP^8DLYX z0}g*;Ha|sJq+uz0`#+M7`CP0^ZU}~vRY7SD8Vp&F?OU${Q#N-v(Qx|BKUaiUNh%$S zEE_e0DON%v0JRl|3#QZiG4#`t*u+Sg8P=5>H-q;Ih2)G(5?y|4|@LV}t@BzR3oPN#m{oqb0{BVCxYse{yyk*`OvQQ6PzVy{UnE&_54TbyCrWJVHzx2x5zfU_<8`+ z?}vt@1Gj#uPLS~l=J^DIygJ1%wUtE?uL>!^s+Iji|KU$hxUv_rejf$~`VIM61OKr6 zGvPOww9%tR(5{(MnM~SDuJyUzbU%2K66HzLS$xLZtSr0<%2C8GLPSfl051Oj15X|B ze4JXrYz3Yxef1mK4HeZN7lx0fejq1vmk0aQ@M)vvL-nM<;hUf;!us=&_7S!aL7hIN zw8l-%HUg6f)(c}0k7lP%M^0m6v=bA+XK`)j&Ch3q8!`Zr-C}2TdB+@zAe{Sp$=-l zoiSiV*rI>w!1O-Lzq`;eut9E>`%6!OJfta`3FQJf|FA_+tA>r8eP?6KcG5X}$9{1O zOlu$fHrwuQNFdfcmrP^VJ$u`AmfL&-?8Y%d13cGzDUdEgr%nPPoKDr2E5B1PNS6fP(=o-l|5@6{iNP`- zdrWFCgE$xRnuc`iW~y~vzGk+jg$pz--2Zd~y`>ko<$z5Gw`seDbNOc5#NK1Wa*tZo zi!)a*j`vjqyFUhC<+Hu$Z z8DXYN&3E(C`caig*=+0$Q3>RJ&=C`JnX@yJYFayb#bukMxno8g5dz=og_1I2?~tjm z20ND=H|%vxpgB>EBn7fLzW#C0tJx5$1A&@n-TYu$J+EJz*V#mmRfPMFravlIBYiat zd|n>$x*O;9+lw;Z@mjBQqvw4?^)}l1BtzYpDwecdyo94E2wis6ZOrZBm<0Va)}X7R z?p4v!CpDcvivnOi;}$LFlkxzSZFkp(q_h0-^M87=qq}42uR;d-TzfQ4Vz+1gF%;|^;&h1Q`Q<}dCdp4lP$5IWR%kOq^c zWG8>g2r{g9YQuWdx}eh$s_1qsPzFK|rO)EKjJZ6-p`ud&HPjwfGsWx1)&7?fmMzTE z_NUEGzDm^BHo(*{BViB*ptaTzISO}h={0|xdu0H2H2uaW6FvMU&;!HD@|udMVE316 zHeez-v>D)s@DXc-L;s9gHQ%&(h=OX2rjotKkH+dTjY&%;(Lq47so<9w?`F)T5?mR| znQ0Rz&1(p|U_+WX_IEY`InxpceD-DAZ?#^7IZxGPto-5~`3J=5KGa0JC$T=^9Ersq zbhRIW?`NeUrAHIu(tEaJMw`x36v5w@fPerck1yeeC7H&Q-{ne>0U?}b(COa2*(Yzo zdMlI#{F9XRgYxq7;tD7bc2ba8llp=x#X1Fi1w>}+Ns9fBMgR=zVlgP|ipt2b!=ZF| zahEzZHF7)`4N`w|;QEXo*87)EJinZ*7sj;x0%v8$lG_8MUI~?Se6sR|^Uj1IT2b2= z=bXt3%{a04v$FYmBU%zUl6Loc*{i5DWvqHwD*fkginKt7EA$6OTB5_2x7i3s>cAYv z%!quEVlqKeR0I&yw#_zi3JK|Y;mhjjVdDfbmluS39FHVkh32I%Z?6SDbW1p^6 z8fbfZ3O6vuGd`bk((u;{SrdnxwhQV@F|{)$EUMomBc_6WYBPz7VZ^IR%f1cSw&zS% zLUA;xIn}yKzl>D94=2(Qk=VkOr+KRtWkl(8}?|~TV*sVM8f#l z-tne2>IkDm9na!xkY5hi6l$vksj}!rV|U5s^>w$3Zibvdn9YCAm0hT?yMH%n9Kw>s zn9W~r30PhjO&&0mFzX-*Bn;BY@8C&WFRf5d0{faDX`4r&vL>X{!b&RBa=O%XLa)k7 zeV??HpQ!J|w;5Vc()I9k@`#6F)$Dgd z4SF_jzNg(^lc`Nk98L(Tt!I&QMyMfT>+ebQp$5J9mCd~16)H_sq$g6jpRyahy%;@H zm-heN*2TJ}h}hzJBP)1MYejmGYi`nkhioohv)PUD&IY}5v%O7;UYtBKN4^UV& zpmqfXjxczi?cR+J53|wE;vq4|Jv6@EnHp_pj;c$_mqH+zl5xyt79np)b})!yA2zl2 zXc-kVfTZm2TxM2fKH6AkShl4X3TU)h%p4jXFI{;tuvT5~&7@9Z#M`Wij#I4SpfSK8 z_od~yRQZRuCxqW=wl)#`aP4(W7JKaLz3Hsbt7Ivco9Bb(l9q`QHH@dUw zi6Ax&Xca$@?`pk9qYf>1b6xptMoX&DbCKFuu*ez@+fXaG^?c~-+ODIVy@9#lMRy=f zVBn;&h@RWqX%@fOo&vgcx{W(&7bc85sk_~N#oRP~?QQyhO6GZ}v} z6?okvo@lZ1Fl5w=b>}6UdC{$Wrb80-nH47%nX4G!?4t;EAvS9Ir353*FJht~9klFa zu_+@@<52K3iIrMMAjuti9dW#lpsLk%!XZ5FB9LUF&ye(buA2@bqp>NlDz3X2f>bD) zLGy-OIyaN9d)!y=mb1!An>hqM-f#&i*4BS~sqnMptQ-}JhG-75m8-pC6{Xcy8tfijjy5Ut5RSis@MTgs4z3 z;ete3VQNBxnVP+Ig^B7A0n0N@=Gt*^$9|H9#YfhO9U%D0+9R7kx<i5NbnJU$P9>v{ne5qj`{=c?LpJ_QF;n>Sm786B3mX=m|E@NBpz zCv)P~ovWg{4cuM*?Pg4Cl0k z9?-R(>Et)NiWLUwVw9Kx%+NB z-ba4VV&Ixxn8Jt(%5M#g=ltICN8HHVW2|A17BAuvd}(@Q6+z72AF;It7`Wls7~QXq z?cMl5h|AtG6$&q-*y`78QThdVDY>h>nG%PhW=Km!hlNVE{k7I%((h*5oypk_^`rTf zVbA>66d)CuE6K^>e+DVtboY2tvV&4a7?2noNnVkmv)zTAcP_;e@p?QY7tcQjKXcCd zV`RZMs~|Yu(btg^^Z)1sc@;7Lm;xPXj)&m-ivk2)Zv%o`T*9`o4^}X+*~J}s{Wp%Q zzx9&I>wbJ$sCyB0%f8M~UVbAI2bw;_HHkAUA5+3@@k4BmB^;pz!B#^Q*urQ#?F(XR z9A@-Pjn8n`D9M3;1%(YFI z<(NJ>%|GMu{B!F>{%MwjUMGM`OIi(?NAEK-9|PpD&vB})+wnECNS79em-dBq3`~2s z5!J_s1=8Q&$VwEI>y+%R>x|P4AyABG!--~eV2xN9IrbSF-e7EaxByzctl0*SOS9p9 z#)dyMA>BtpIA15ng-PqtlFj&ajH8kUb6`Lj2|+Ria(W{iaYpZ9lF zkp0Hmq5}k+=LR$6&6JnHFZ@scac`P<}=W9SuM(vGoG(UIg4$q&-saNTE}E$U6*QI|vy1ukT5r z%F#~tmJ7j;cXO(N7&YD9!jyQoXx<(D!R76EAWC0xC&Ey)U>^~ zX`9dyH*J^1!{){ax9kQ!@N+9{TimowA5S)7*p|YLLxUU0+W)n(ds9qGbtN3kkeG0+ z?5(of)r!za$CQ=>rhS;mo-6tX^G7E0x43E6;V(Cm5-&d&HKJ?YXq2CAI>pgxJBf+% z4ekv-S=e$WVV130rDW>)s3V5B$tpho?`Q3Y_u_pJ}9E zDFU?>uyhP_(lMaTwLh+$Vaeu4)$^_+8(WOMEKJ4RWHE2G7ac`2rFJrBw^XHZMv?9$9cRuO68cRr{BJ+^7`Ex`%&@3eD!P zdQ!N@@WfS?=n8+#o;LBl7Ox6z4L)&wykSJ+p{Nv>bsqXYwT`7vNxYTUjD9u#NxLZJ zo|i#;=hrARHx5Hg#kb9wmMJuC{fq4k5SPrr!Nevlgu;O@CMDb2`;SknL*TOv-r;zQ zDlOdknG2Xt=nqX3I!3wy5hpcGd_gK(o!YFQKgIkRb~e6Z{!yCai95mB80@2qGNsRi zl&_GsNyf3s4)1YRaWeHZxs<58m8L=q!bS0Kei`~!^p-!-rJc4LOihydz16A9O4T${ z;GQU_dre5}HPs0pvVbyh}Tc?h)~B=$0D0uzYJ;o%yn-s-V8g zvTRpxZ)hMj+B_CIY`GMXdO;m(l6dJo*riB5I$GE}%T;0@hEY$HPwH*b#*&avByxim zYEG7#W@)7i%WizuWW;+6F2m9C;SCQl|77q!9k1()x!13vb=8hRv=;xTm(QM2>@!R1 zq*HcUK|OKfb!Ib_>b(cAt)htAoa{R7Zb31z|Ne2X3KJjl#in?5`>()qZ(h!9Tm!i| zZJS!E^DU`*|Ejv)td+#fAQfk-dsRm9UDdTdCGOFbGkG+7+j8pT&3fZ%__~Gr3#>Pt z{&7C318-r5uXbm&S(`=%Y~YkS>Cu~)jH0T`Z{y-#!gznv-z^GX^SFxCX6SIV@s`!9 z($YxIafyMZpp;10U8%A@;mcxpwr@~AU$d*DAKa|x7wJ8hsNuhajX_7`r2@-1F`H4Tn0!Oz(6 zhP^qpf89uYMPKkZzLu6>4t|%+u9t3o5h(sym56hLp|Kq>7Kkufo2|{OAv)Xq0GC#1 z>u}rNmg=J6x^!6`#n)T85B@II(AL+oJQn5py`+a=G)BlX#e|x+3i zMb%&Ti~%Q~G6%hb3SY~A6zz*0b54~ddsWrpGKiuBSZ^P8U(EADD#wrfhMmRx+MQp3 zRHE%6k$NIY{h7C)!<^!PD5m0lfsKnfiLGbL6$oMK@sq@4+#VVL{1vmPEzjj$!THg` za$fW#yKW4`-Pd6=P8o@pbk_J(9Km7nJ?vW4`ZIqyZWVlWDS7drTMi1uF~45up($a# zkUvR_?gJR}FCFX9b^-<bSnrCfQKw-zAs2(@}vdnuy@BoBs3s8_Amvl^aag7R6!ViQV@3Z6!fy{fZfN`z6Y+_kIwJsLwC@xyK+Ftv@>vi_31(tnnvDba>6~`bq*}K>_pLzdV-aB*J zjx^ZT8fTkh>Hw2%W8m2oF{_jFjW)p~ZxiAd1LWhi@778;p44t$d z70@=kSo|R{XuQ!5Y;6v5MaLy85f$Ps`WjXg@)16QP;Mp4@DkSI$7{ZxbfvuFEXV+b zu_U68S)JtdcUcOA2UEq+-Yu++lB z0-pq9@g?;Cv1L25y?pnvN?umoHbSm-T~3CZvH<-XFt5GBFQEUE(LZ6h{rTx5&I z0mMSwfi;>E4?kI|B*=rZ&)@nT9dhhReV&p2yum(q$=C|`>n$aL8NnkW!0)rZ+wYhp z8=_tGno$qp=49ZHJ8^-$g~O{6HO~4+jMbU`v1FG(mYkOg8}RA=QMa($VqW@NuC#7) z(_hNB8~D0QrORaMK%sSi3ceS$M%4Km&MO*;=$P?-jcY%j{_0Qa-I0={;_*cAjTbpb z=ZN4uB&5lSU;x!;7|!&aBZ7YVED%AT#`}08=zmEfAipDm9!~^4Mg;p3BIuIFTSTzO z`gV^af<2JKL?Zaow?zcI*>wq@tB7E&ecn|e0#Z66*cE{9F(T-9M6f$<-IYS}WJDln zjhJNqn$1s61kR?X4}n{d8X9-M4uNx4W10+oa-Hf>;@ zElVV9(jSd0tXFVEQ;YN`&WVntIAyk2tRL;Vc*2V-G*`T7NSRIPD-o-Cwim4vmSYE2 zoIMnLsY+gf=nB=Y;C^VjoFb#b1_po8KWKP3CgvreMP5Fe>G0#dTmy%ung4#JzXa{T z-ljiHDQ(d(ke{Zbv$q@Hmig4t^WW0?cRrgOha3bF?5^fF%Ex1P`S8s(ltAV&6I#X; z7@KzUW1UTZV3Bqn*|k>Gu^y~@juHP}KGs=xJkv@?-PCk0m?*dR?iUorV`xa(%C%y$ z`4#Yjv|wDBPbb=Is(HuIJkP9odv=E2KoF~#QLL$MH?6)Msy8=?M30yaR%eYiDOrlk z1tnk}i+^r*gGQ`rLbm0<`A13UldeoTo`Gsd{Oc7mIhuS(FbmTyh1}x{g5i{f=w9<`1x_FY>y2( z`i6<57_S?Suh2>*OebNXt)Z4=Jjz%zN)R#m1s7d<=|wGSfoU~wwL+z9TSuJ4)=cRp z;=l_>M#ytenb9AZsj)y?`LT~*O?Ao4m8z=sJ)qRVSZnliT!3FO<1XS7ly(*mj;wtR+eXt6<>qrAqgn-_rt@?rLBvCfq&1R;qQ*%8d zy|&4c&9*nOHT2E`4;rf34oNhfP5+FL?RHeHr?!skCW+w4EX7T%>QkNd|51M2w3Y4Y zs6%U63-69PWYQ~$FtL*Ed#jm);1Qsnuy=fRk5nlY1(DR*yQ|3c3s%NGosEt2Gp(lr zAwOC0iQn->wkg^#B~rgU{g_s!KWbh?psnl7sA;1Gnxm!;3ovcA$3!;Pc^@bu(Jw#L z{&;p#cZBv&%1KmM*>)#@wM#h6X-LSO#+UzI=j+>bq-bN+hj#n0(S6Vsb&}qq?|^{~{|s@|f@EB%OcLx2-|G*i`xh z{T(-LGWlX_kT3FUVFgL&m?n{nIEXX!XWPxsm__@DM@4fkUE?At#Lsr==^VXrZ;6%I zxQNR-RP^FSu<*}&l;>9xRX(=Yei^cqq||hsOWoFeX1qmdM1_oEjg?~SKhO_WqouP9 z-OUrz{o-389k6f_iK~5Ly4J6e&OS#A7jg8_0qmf?_{?b8neoNvM9a>JFP;}In-?#h zA2rYS4Q|GZ$G*66i9~*v3!9wgW=>;7%}WxbBxNU!3;JW%)@HAL_Dx^J#Zdy)X_qIZ zRNI;2<|mSQdX>*ME`L%!Zeh`fK()Wwrq<~TRO8AVm*R((LVEHf1w>p`$k!@KAY~6( zO?8@^Q)##r#q{owbyYbZPNm^iE9u(D!~0H4qA!BRQZR0+N|{kf0!jN)MB}E4Pi3pb ziS$M3QPU;`B%4lQ31G}5+kP)ISFcGapph{Fn_?8(>6bKX;!YGkj`OWohun7>@T>uz+k zT#?=P*qdKQyz2p#1qBzMJwW+_sGgGLZ&txnsh_n{l`pp3N(Esl!W9}@Wd@cU7;>Ew zpX{~FYsoe!3=&j^1%0zyUEb)^X=g~0T)w1idR3tGRVzwCTwXP(Mjt-C_4sjVah_;J zgoIW{X1*mfSVA4;rAb0O5+o(s`Les?f+`4O`g4C!^CVR}tj7g~!`E*dfTwZ+k_QP= ze+^%C;tXQmA;>GeaxVQB<(H@=`z!phw?Tc13njjh`g|`tS)Np!(HQada^eBaBYB({ z`KH%a#K_X`ea@M^O?Mq%D*@x5wEGh`-PP7t8#UbpP@MEgqG~J(dEqY1=*R-Jj7K`1 zz1EP8L9A?0NU9;%J*tK@TSN3$$+;WJB0OAgO~LimTJuKTLPw{QEJ;bXYh9972P?MA zRC<@cH;{z`6gpFteAER)<5QI&cGgNHF237W_Ll0TsmhcT)lsH+!X%YCY#Z#@?7ZBp=S!|wrbNRKNmFh=FjA>uw1^}63&SWiqT=P{5cBP zUw_5RQ3z+@{a73zV8Lw$Fd-@?pTHD&_k4b@y5`fZB#OCe$hE=u z`&Tb8Pqtx!f*g^o0*ViFCqW{{il)03d>!bs`PtO#1#830<+QAoowRf_ocUd21!acc z%Y6d`y_1%NXlb*An||R2eWf+Yx8xYw?9$YzmN)r!X--nR&cA5ULX3L|6*@kuwiMf5cC%vVR;`Ps|@*O;kqXeFV6ZJTCga=&O_gy zV6Gbu;HZsG=Vu{;yR;a#7$U%`h+#`}R|A48T6%@fcMnS~B_ zt<+l>QGhTbX-FuEBpPvItg%_`w$LJlaJ~SKJ;NgqV|D0wj_WclFem|8B2>sgRSXjb z15b#j97v z%ck=C>3CU9bn$iZvfAk4mUvlRbn#8nS1(-K)>E5O5av|p#PeYk3YV%lp*|gITJSTN z@*3<9My@4~6vJZ+u5AxdeA8-jBtwZJvns{hME^N|H)QWg7kTl&!y|#d4Yw5w$crXx*hI3F~hx`RQo%p8K`bK)2m^x#()cT3ZG0 z=SDfWs>N)y7&c?=6Q@F>%lH(=O5Y3OtYmEW$vD{9aW~<%p84KTVNvi(WcWpdrI$E3 zS{p6*=M%xQ-&8?T_iY?TgX|ahmEA5jz@*&P7-mOrc-m^M>>)M3z~1pgj2m&C^YhN7 zKhNq+*>HTP(x3a-^=Nqp0V-44#h=b5K6lB6!<*x1e4wyp!I{zCxY-oW65|k!4}|0c z@uCf^z>7xfL!5&)u5mEhaFaEim|$_Zp~GSh#yR_h)^qWaYP4+@`Z@o&As6zR=L^LY zRjfACW`y!bEN0McxH*b4g>l$_hu2lxLoTzyP{*wMD!avu`gvJ=UiQI&} zVQ$0@eayZ4PL(tPnli;7d|f>HFlV~)Iy%80=&a7k{HNQoSGPG(q`uC^h42$h0YJNO z3Upiu`tY?6n+r5L-|5doyd1#LM+a;fF)T(m>VpewI2TJ%NAGQVW{Q-?&!AQw>RkGa z&OnpBajFiWsfK9b)V7{k6VCh3nVcTotRtC^8a*n;1Tis!dT4ZL@A&ba_(G)R(#hf5@1XNVYMT>3t-?2GnTYS=!X(WE zR9D@vWcN3u@r}g5J_mx-X<&q~VSH?gTFm`Kw3ryz;;D8k!h>CsL7T?J)W_5vG|u{! zbfPV?!ivZW6_0xIrB7W1X)0vh*5$U2`Gj&Hd@^4cwsSP1iL@9`=TwRl^ffMQgvweB zPlK51vfb+I)y}T&SA*J#fokZr5BaZ}Z9Zx$iy$LuY&mT6~RbI}Tt-Rq1U8 zPB^d6cuDgcc$_Yg5CO?&17hEc+g?5U!gjmJpu~6Z%ZbC`@;O$Ro3Hn=t?LbI53r*k z%gYMuFn=FsbH3JXA9_Y(j!6zRehg75z~`&3jJ&hKHf6@P^BwG( z`M75*#gtCA`HvJ0P`lVXE#Pf7v$Niq33gU>64L#U?IDujZ`)~-?0Z*^>umF(CzVV!R=|;pbd)77v>)n3RmulQ-aqmGPuFLK4v@WMR_FAt&*>_{!t}U^O?RoJg*r=uUsepx4 zDmn*N`*sBZpXQiee69^I_Vl*epxP$N z$VoghUCJIihNZ?6n(eTNYSFfG_e2X(Q0|dQE%)AYtnpBd{ZIKmP8y3hqQf>erk0m( zY!e9d*n77Du{~;rx_7YeZ?9XU<~ca$kDBMIL1?NvoXAHr{9=iaUo3SwV+dyiyrD-U zuOd~4@wgU@7KMPzQuo%3Mpz9nfxw$M->8%8K?Ge&2aWb_I3Tj%A1`}1jPf#t0~WXe zJnJ#+4bFNjTDleWSogEX#>=;!#eVqK?&oHl_1K1ANzvlI$uJ_{!$jQ5+_<&<26YAP z8Exxc7In<9Ue+szeMBQ2+o*yB)9g(~C3L1z+1ZI5NZ;10JKS1#L}Lbu;}@==mxVPV zTF*#!i#Zd=s3NWwR^Z(d#7&em(};<{tf&d1xr;&BQqQkV(sz0L($e*(3Z7l^=yHb` zfu{LgolSSlKY7i|^fN1)j{vW?sY4c47NdK2l+X^)X4@_ZC9s+>*D<>~6YqgsZr{{y zspWB^Bo_@6Z=@I!ikH%@!$*Z#|MYY@OhsBCYwjhtf1Nq0?`OyZ}x`*C)q@5gba z3+U3lzKj>;3o(?jJt^UARW!EiODw;mC#U#LqexX4RP~{f!I1UEzdZhw_>eUJeDlvJ33S>H{ zpaBQfs}vAay35C)Lc`&p!aBu4RjYuYI$HrjB@x1)nohuPPqu%KHcKKZh{`+Lr#x{2 zE}k*I@LTdXA*i2{BfTV+_E~`9cb9p+{aGsqX-(6DM4@6RcxIH}Z8WI%?w*<%n-Ui+ z;_H3aziqbwsl2~pcP3MldY@f>zprCxs@uUXv&p>{K)ATpN4zUQF%9?c?wixUbs4fi zeHV4mFdEXLwFZ0t`n5<4iP^&iHS@%gX-<~k6ThPSx%w%Og^8Ai{a@Fx{NFVs4VS&J zfFbW*Yd9)yVaXM(ki64-^jSjN;)h*tyueCPlJ6$;6QcZ1YKaOv^mog4{^|lgcClYsxi$>U_NXlEVh~A^n|I>8l55K& zcG)>5A8%1{FFqcSEJ4Cm9Q{Z4Gt_$aW6!~fq7M7O)kICX(lA3k^k?Q~PF2~Y%x3hF zwB|0XUVjr^R2MzgT{^i?ckE-&MiyHfVpQmwL@nr+!; zq_W+G`8-yym6LYbk(dZcw3O-6F!g1!O{KvIwBz7G z$5kg5QCvfPXh=H2z6zt|kNH!Z@F{FRQjOH&g|%;+r%rd;8|()p3*WfBReC`c{?0}z5Qszgt7FYKRLev75r9IMa6Fia_X`CS5x3b)H%B@ zcNaVx&ebSv>vHs>tTJaZ8!(q++>I#Rg_`EjeGKDGoDJ46zL1(rU$1n|;gMn({WV!b z@1-zG=Nv)i?IH6^_MVOY&${Hg?qp&IEUt9Gr3hhREYJb@%Bwm+7K4*^z?&fs8-DM# z3`#dy2PnR}142vTORfVfi8{dQvcHG#fb4&}4tN+jGTi|IqhUB!$VF6X9k7zDe{l!A zDP*Pt4qumbz!*+EsOu#=;3tT>lcKnn9yAmWDTQZObkUQQS9Q_l>LU9)SqJFr;nCSO z?9dq-9L)LCD^r1tp-T7C9B=$p#2((&r!NAo9nn_oH$6igrURa$vcI?kz8NxCMu4|T zo6?Fl6t0-!RFeZ?J#!`Hl>WH_cOc2hvl!vLB~;DS8~UF5j%?&UqciOS54e5iiEtkt z2!s2Zt{hKM&VEcYo%$kJ=N*;3V;S?7pXk=Gau1YqO!oHemDiycf<4})>dE5KDOttr z-6|wmnbzJ8NsIMeWaV6@j9ti&JHi%tD`q4{v1eEUl{}Fq<;c2aqW+ycSt1F0q!{Uo$K8lFC-COt#$PUsp=PR40#|_{xJG9GIT0atL0olwIkhCDSiSQ}Rugyiu=zA+_&*A|Z;MXj>|s zP@%r!HVDTC+ygF!--?m`tyuh}|8}o^+vaUL|9of+)o(Uv9LxK&2gh###ri3Q>dBd{ zjq`sE$r(MNuE~=dXm^C?_cYP1-w0 zhXHW1OOfuK3xDBz=P3I|?<|@~E0fo6js7C}4W)m{gmgv7T$eQZ5WLOWdPYe8lHF&Z zy*TJWt8||=?l35|e7zxGsvjrEfI)S)CAUSyCRBpGW(TT*dd-Mdp-Fq?I(p8=OhhhH zqz>FAI`OZ_>olq;|FtvmME)@&PxKJZ#@5nlomM!9 zq>9$BOROci`)=jfB&GtL9V!5<|5j|J5L|bH3wqY+40oOFu>Y!ZldrClc`D2*Mk)8z zu&_Uq*c9X|5677tU}HxGS&&&iUcNnU-4-@8v7(a_Ro;?bZtiuGd08!)q)D5DHE*Vc z9mzDqH{3!U#Jb|;MAJil5sDjRI{_yT&J4t6JbjK+{Z7V^nsznA?~NtO*LLa<4V#jq9Q}V z8E(kYtJ7S36Lq)%Ypl2Z?;NIU-Otv?%X9H1wQ*}MzOg1=my6#cw`j9wql$CZj&huZ zV<$RmMseX2O!;gGGvM7W_|}|u!S}HFT)JDOhlR$?&OElf zj^eQ^nx7b2nUQ6>+D905R_!RR7b(nXpv!CB04#pQNXS&7A2H1#Gx`pEK6taCcsbg` z#8kt&@+YYHEhXFn{k9A(W2q*aWD}E0E0f?P-qy4BQE3N+4`lQugvyvc4 zjVFx!3034286eO>TB?>#3kgv&V~(WV*qpXz!}sac-*phE>U)U|3+p_1b}msY7w`Bq zpj4-P(5E~EAY1M8)+j$q-C}>;rRiDsq8(iKjm8v|NX^(vtEQMrek%jO4r2Du;Zf68 zzR`AFAG>wh4Rd@{Xw};$hdL6iR6{*IKuuvcxAx{|QZXp8HfOwN7GXCo%n(Q(hE1QM z`4%G!uqo(DQ_f1<2Rt*J7+Y~F`Q^@!i7T-D9bwcwq;UNzCrom^8hfhK_u38YK$bqu zA0-5gI^m3WND-x;ewV-OjbFmvP#i_Bmj5)V& z9euEt^lg&YQyE9q$8pVuP^pLRr!X4>%qpr$V6)eZ)vHMAUC#!Og5oi;g(_5-TU|DIvjZi{AACU#vkC<67_V5L*{^Nx=i)7ji|aPSVxqcR z{3r1!i+3r($)jpRLB&C7u39B>4e(H`&y^y9ag*%yxhVmDCjYGx1(vs{=xD|U4~a%Y6(re>pA}{Wvf3W7S88TPH{jGsGP4Ne z@Ye7l%8yXA(lpjs7ZvrI*I)3w_Vpon@_MeHgVovREy@$!)iK7NOKF&`8mq&y5A&rr zKg3_*AkORE7vzGWAic%yRzzg!RYpM>(;VtH3NPKDKcCj0o2)LI8$V^i(bQfbQ$|ho zW}v8Ix-4|$4`{XlL>n4mu*CcA7T#x7c3NINS*f*$EL8>JWJK0Kla=c}r+0GxMO^&| z)5eyTju`{9-vco(R_{K7FE=#4M#9n+F0~(p7x}!J0(3T2-K!whn)||>zRw|KUz8tI zU)W!tWlP5 zZ*(S$ehI$)%1kf1GXMp>QueLKTl(E3b%s&Nwd!NwMCMGmKxhVwyKx_H_KTEY#|f;2 zxTeEfMpZ>~$&CNv%%qs3f_0SJ;Qx{@Tcz*9Tvsdz|DfQ&BCh6%yzt)Rq3sk zg6ShPO=mpRw7$?ZI}%dRtD5$X(1P(zdtLZ2v1xX?#7d}YS|$1=o7QFBDwva|eaE5> z)3ovjt!J#+p(8MzhewabhK#oE0|6@_TIsAWys??OsS)95r%rG0>TJYORX`I+tCruUGx zhMDfK`TZczRXm^J`8yu@@%c<$r*SDs#; zeLVlk^CXY*l=(ft^Cup8DL$U(bv&o>yq#wu&r%*;81iwRzu{TO6Y*@}(ee22@O+Qw zhdht*{DSAxlvm>S_dL(@)bM^BkK$j&b285yp0jw)<59ex_wp>^S)6P7oIQZwpGY0-N&k#~ zOg~>iy3;f5jhW1u*a>`y=d(Ot;Q2S6CwVTydgHS^H@pd(vxZD&2G1g%@9>=WhD_%D zJYV5?o+m>&Z=0RT+{vT#|Cir+r(`lW@x1@kOy(`by^=J?^8AtK6uu9#d3-J5M|s?V zIQQ4=!{OWLGm`T^?B9|nbGx< zI+=_2EFZOzvc;L-?W7hmS|z6OYD6Zzs?@n{V=rdgwxsibMVn#$X{m*@~1KEH3A8$V#kzM{w;zg492*^B3Ip)jPdU-n&&9kl#5o`t}M(1Bt4r$b;hmZ$k&k&sn<_t4Qo!NQrHdDW1Lnbnzp zQZc&p+NEje%s*8fGrKcCT%Bu9Xa3jKY36q3|GPTo%+CC8s&k#A4r^?_q2-$Yr4Ajc z7yVG3FUlZXnUrI%SC>yp01V$fbnd$h$eMaeXKOhpifMEdlaSJh`rt{{A34mnUuE56 z3)eg@>7_E+Z*x7a8MM-Vys?nZ^mn>(c=uf!qlI#?JYma<#CR44^Y z?v5zNm`CULANq6inNcC5G1q)fRH(7QJluII&^VvfAAv&@+>8$z%Lq=pH>;gLr`e2=I!;~Q_U+xV=N+nfw0QccUEA{-p zsW8Y7!V*y*vp0V{BXr8%{Qn{&1ZZXHN|t?eK;gcA{(26X9M^dDqr`<14B7lt8_^?h z#=;h>9m_L0K3YQOtnH~v`ZJIo=T&B0u=0}(c&j2)ZShP0?lSm9g2sUo)S*iB0RV8v z9kTg$E7G9O_se4|JWCG6M)VgAz2C<_t&|{czbx86&LK|;+fol z#L`@96Gv()*SABIr;`2gi|yK+ixP-ffjw}PsmM{VOBFMPp1 zHVOrW-Rg(D{`Thg@Rv_OAlJ1Rnp+E&Sh&Z+6AO&DSlpdC<+B4>oYmIAKy9bPnktVT zLv^Q~wTjTmQzW+Q6v>{Jg;hMeqY8Uxc^WcCP#{wTWdf}oTf)-RfU#1<(;J*>$JpT< zY)|#o2AiA&7z@z_wZ=kpooYd2ENW&FaVa&Tbhf4-HlfwC#qVvbol?^Ic=}kog!y}{ zQd0;O6qeTkrymjw^GN1SRgn=43M-wtIgl_%#JF8Z@2le6`-sp1$ClRwi9>#u6~P!C zBxv%oUnUNADl49-zc9^P-A_eut{B#*Wcd!UHny>3I?7x#K4$M zNeV0ZTU_z9GAp$!9<_BKz+Q_slmx6rR$`o2Rv0V>aSG7+#hF%)>T{%CDF>#8Frrzb z<>j3w_sUZKB>K@IAR66LG=5l)LYwCenIicFrW!L zEOuKuR!}Qh=u(ugE|mkLE*bo%1)wosH^>&(M~`$rjS>0rk3E}IvT%m3$PJR^YeOCy zVdZ(RFz?10f)g9Dk$29dxsL;0=MUsHCig+3OFyVHx`-d6*5SKgH13?b94FbbW}019 zsT;64!EwNdG58<%u3mk4=wp3(y^X9};d{=r@giHVwT)D*{}PAU?%eenyw`G4x}G(m z9cI@JfSe5;ad4%Uf2s8({Zm;_R?1UjSdNYL3Ir&;xZnkT*SuFNG@YE2j>6qgd1k27 zZW1>Ko2paeLaN-F^e z87N#yR=jgP!Z|nr?;3iLqs0Dl z68xax9Y5NLiXmD$fEyJq95qkT`*fzF_;m`D$Fu=cOAX4`#`2-KmHk3o*D|a37us0i z>JmcRszW-1+f=S7;;tWLa83VO0(;WwSz?qn&c6XHH$`t_!m!-897_e&^<$D(??S^+??OXQ z??SXM`i7!NKeOFWgZr85e&)EJbKK9F?q|OHndg2Ougc!&ewMhOX7_Wc`&s6GE_Xkd zxt|sKL7Zm`fva7(bj0p$l3-%rgS6Pfir;MZUwlm79GJYDo7D@5zV~q{fgKM5PGy_ zKA;MYWxZ-1iriOjkC}f%>jl-N{%v)sQi~N|=SyYk62#+5#hvRVJ zvbV@^#y5;(u}b&*Y(4%@E~&+XR_*Vz$4_xRYU@;>ba|TwrYS-&zm+Uvc1!nj#7(!+ z!bbOtc;xqZ`JbxLZc;Z+Sh|*|lkB=STOVsJ`C+4tgeXfCZ`6!G+)H&g0^CdC+*! zcWEHy@8fi(ntGYlTLsv6ZE*HG3OXwVz+~j}OA68$(`rhiS`J(ehp8^ZB^wilEwI+F z3LGgtW0c@~SA$PN^dDZ3=mbp+1e#d*e3~ZOAC)lIH0Y$Nu;C#-?tQ?u1C^I|QuAHo z5@8+HEiz8C`5iiFRF&M)@po1)UuVkKmO9 z`cmS?*oJQDFifn#Z3AKje4(G^mpCSqA-<=EJX@1(&ybPaaOpG~EMltMzyOi1IUiFj zj*~9$=ZyPZe6-Wy=1F6)l%oQIX30Boj zEmmb}Ai?R};UfZE1V;WJaqk0PcU9m2r)?^!25w+ct5%7wxS|zNs}?PiVlTF=!4#=> zvnXnf#WIJG3(U2cl3dBn?bX6y;>KKLnXAy>7BOPxq9!cgCSW#GjV{xu0rS;QywOFB z619%s^YuRGeD3EaDVF`dkKdOE&Ha4N=lpq}_j#Z9dB5N1ecp#~Bjs1KuohKQb>ik5 z=%x5_D^P#R1rR^WWveR)40aRMewu$D}F`7l@5|&bjF1JC@ ztAv)^dR}3$h1Xj$;f>DMgYNZ7U`V3#%5mB;vYJ{c`Y_b7Z%w&DYxfFN0x5K7mciSQ|4r zPW-VYGQDBFapE^Ek#R)?juZPWk*#0m2d(7p?t*&-y-1RSXXzlN znmTQ-InoaMgn!&z=_8>*A3>_zMQBJDk8|sS@mOhdM`{l99zmG7JO!#~9dxb*oyG@j z)Cj03iWTOviZCF_wqdfs^`0(vnn+lp4?kv(O{YDQd~U!Dpx; z*WRg;=?N7y9ulU;L}^}ts_~)v%1W}(RpTYBdw|rbl!gi1d(e!a(%D3}w=Rsgw@9A$ zl(?T@9t)`Oz#j@FOHv@nBJ(_I6#q%0m07w=8+OdA7(JDKoJ zL>g&Qgs9A&NgLR6b*bt^?$Rn!y)3S_rDKiTS9qbhQBrJNymi7>?g<-8y@9YXuH0h* zhNU6o{1<#jIwoKI3*y5#tMNG*xFXf|6>htQ3M%B{-zA z&T1q8U!Ka!;%H59H$qlTHsyVTU zkd%m+%!U$mR7_tb#Y0-OxDOOvVhS20ZLdqR;ue}&zB|7YwvbH)>Qwo6SovO~N2u?H zCi51mY@Iw|@w1K^O=??w!m_{IvMbd#lSc{%Ca^nbnrohGXNWbTbjR=wDJh1Kmec1H zDI=dgY703aAEAioAUDT@L~RpAB;;wIUhHi#}ol#rTF5)U==q|srPo9$LJ|o6H9`FJJC-BZm5%jKK zp1?b&&nWrD$|g6^5%Wk@SvHcGVYiwwZc!a9ajaCm=9n~+UnSM1Cv+)67{cO731i(E zB8)LpRUAS)jY7su`R!pu3K1m9qRTGtAUJ_k1d`2D-XSZ;H97GPhscZo&GO6hC2s>6{BVfM#0PS#m4$k*Wo zjo@Ix^JDav-#D@$S}Vc;g21{oX&De>z*Y=UuI#`L8#Mb2$odOA40KGq316sG(=Oh zPV;eRV?Jel+~aj!4@TVj*y+~#kfp1J>Bo$ta-ZV0j)k@<)!DCEU8@uF?Yz^gkW`ez z!R&(;4zXvaG-pus*2Ezfxz2~O^A5E>QXh9Ix&rImk29CmpYPr_xu1>hXN&u(cR$p5qywz; zVm+39nC$ohJj74M^lMd#^O7ydy%nOqr5jj1pBq(^7L8A!Xvb%eOw2BecE-LjZ_sIJ z5m|2aDfvQKaZ-Od@J0Q$J(Sw=AY7wxr~G|Izw%vR4o06W@6>~2E(6{1+pXlnUxc!R z*D-iph@uAxzhrQ`KA0}u8l8`_cjGfd()#n;vtOm;wDvbc;-;%^cwzk9l*s%ppZT-N z%=L-Pmn1U3)@N=@X09VplwlOPYZbQwgy+)<0v?{9&Yos?uGU2@>KggwDq_!CckIF4 zq8PrvAyaeAI)h(}25?z1UXR5>I&5&+>HED7%hf;0h>1MfmvPskkw`~HM?u)AVCT|( zap~5e5?mdhUAAtZy&zKQu!ew)jau`g4v=}03ogjFeEzrWp*rn^Ro+QcP8&WrC~8L) z4*M_Af0t0^c>>%3xe8rjj}L^Eo-g3;>X#S0J}G)Ywj7H?6M|h4W>l@kG)K_9z?wl`VS{Ce|L?2?KaZv?( zRDp~7d}x-tHPrHPg+bw5iK8OU&Jj8cf+xh2ZN*2nj^)&o@zeX?Q3cH$-%-q|`?xNYmFW2G-@_(ySRlmq#g z>dsbtH4$+l$XT0MQ!z+d$d|ga6_wX@q_ke3k1vFe%|wBe&pGfS!MrNJ?J6XxLd%iA z2OdW-(UOLH7_CTx%rBNDXZ!_%}~Zst|w+;<(S6onW3}NyKZm`%yi9-Aaz0 zugb8n+3;=EB+#UuQ|g%#Qgjl6aPsR64%ZPa(omxJ=OMhCoy>a)k-Sn0wU@O@m|M- zO`NmrN2ttWzW9D&*-L;?={|)ifY%6P{?McF8}AJFuodW%gG_2!N*VsbW$;2Em@s7v z)Zon0N!v^s%vB#rv>eyH%ZkE-qyy_eO|xX?};rcO`cwyAqc{P#~jBmRq_K{hN2rlUAhR7}6s%oVgW!d0-U zmo=xwc&9erhL!ha<(2-TvsCG7tCWmXFq~^wIYxr{tYx0sDxzbPYIYRkv*u3rM>f^S z9XoTcd|X^B&Tz~!h!>|0eKCGk1p84tlkjO*fuE~`SS)N;rQb{!TG50#UA6?7t`!8L zLt4{)wxV3!YKN}uZn4AE$PB15|2t8#qxz@^o!ygNWjp#AttQA;oAGcb`2`A}u z>1Hw6OpDK~UZ*VE5X5IDcYQ~=GYNquyek9@`@`L&M zjke)HmJNcnep7heXs`8UH*9XQv@K<6^)!T!-WK_)YH6C`T*a1Xg*9JK+ibsFVlNxr z%T}KsAF2O?*KhU%!gE~%jbMhiHSXa_zkjcx1DqI2~#92*M6GohF-a1%=$Z=j7eAEY5E$zRtBHPqs z(jlu#d_7ZwY>mX%GbPB@RPfKlR}*BzwK{QA)=1EI7T+h2|FL#Po7|2Zcam_E5I0NC zI{Jw>q>zoYABB9eru^ts(pcaiHFJT9Tg-_`zeup(HLGdhk|1`wQe>u-RLdahPM|5* z@RXNa?M9=d{K@1h;U|_quneDIoltd8e12omi`?_Kw z&(&&OsgmS~B*rg-n75^=PYJUM_yNC>nm~RpRf)KnL*itov*p#_a(92qZ{+zGiBXqm zA|Zgr`UCpu9aI`f2lT&fR1rih@JJAL3FN=IU+IMpYxE2$`YitDwW+^sq9Bgt{r!`(PP6d zU=uDGv#aV@vLrFm2nuj&DjH0!QLT?0v7G(cWFDwZvz10 zVM|8LAv|#EpB`4LBSE3r{htCbM#MX9Vei`44V>QOWQBg9&`%AW9`&*qM>XG*Vn9QkG!$>J z49lr&`XeR*Xt7PTeaJm89<7vZcOV`(EMIQYph`<7z7j zW!hF#!>E_>@6yF9K!$dH#Y$1!T~1xe9o%KF$cVdn(0|sCEDzubV|#7=H*$8f3~4Uj6(H+~wbMtyoO9Wb z0Eu@jdn}I;WrLfNSa$rB>}OIioaUFN`4e*iH!6L=zzngG>~_!K)Sm$QTT8(BRVRY@ zTHT2!5D;YkBKk_YjgJ)N>pInMq2Z(ZT%KII-M*|>xsQjmLw+iv&v+)Hf%m)7R-07< zsCEvBY1A?>2`fh1t;?s|!}B_B0t(OTp{^wJJvgY@gCZRBOLx8(xixU%3&;CGQm5#n-4NR0U(IA1FS|3Su+^IaN z2Z-T5Yhj~i6f`QkpTt5o;x8koN($;t?(@w`|Lj+=XfbpcwUnrhwEbA+c9;CMp~hMP zk$T`kK4UOe9XzdJ{?=h6~+s|AGA z_~d*dnKNis#yVtY(9|0{gQl+788r37&Y-!Rg5A!b33fY!rgS@l_9|OPkSaNY)9{aumx%e!99b?ut8^Hl;e83yhx#!}RyuVdeKVaV*_hlDJI`o2X$Z zoWYV>@FXX$>^zJHQmjK8!G&viiMBt$nv)$=({7v=9g+I+XO+V>TT>|9r7E)eJCwbf zzoJP932VGQh;R$n@D#oA^D3r%u3{FSfQ}(cR>4s38cy*kXI4dR8id-S-}I;+`)c%4 zs%K3+YrS(zc3!2khpi_2t0Pf|^ooRFo)Ecgdw3Nm;FuGyoGRz9I}&w1WTWYl6|?1V z7azc@I}&vVFFF!sHCE&cs>)+CGMh<3U)WN2Iar4Zsy<}Vg*SPZMTd)2n;nVLgDawK zWmndHbw{E+>dV_36LF6l@gYHACgjUP>&9a?c<`?Hqd>CKw=I=@LMkYe$H8Q`9h%(KL zMlq${Py5!ab#h#EjNppXfToV3VVZPiv6Lp`&A%ef-;+Xj@ex*^)^PtM_*@&2S`jO3 z^EqUFvn?_%tVSm9MIZb(iSdz&0s%%pDT8uuxqnbQ91LhP+($cXkAEkb^VudCtySi2 zTe(_HxI(~Ls}-H<#x@v(27(DkONFFa(zRD>}!gWf&mRDX%aRf~FPwA`YG68g9KQ~s{|;b#-Z%jl~D zs~^LU4fkb?5TsUU=ntU1EdkmnY6_sGvVUONW}q6J8L@1RnPu}uE_Gl3O08&~O+4HB z9XIe3x6mdU_~lrs?}MR%V~etV?OOtLH~{+hmI1066l(Y#HUlYL3qFL=>E&I!-c^|p z=x6@DtnZim4Du-JGYxuBs$VaUt^KE)n^@}BS6e0$2os}B9reGppeE2jU&prpPCf9@ zz#~M|34#F=@L%m~?yW zQ;(%pK`S!-Cev1EBD*wDHtQB9a2~BU zrwG?X60Qk{X@hIRq6t!4y>RnF)Yk%raX)`f(;8lyp!XO?Km&8kFxC|k5_s{~OL`I% zUWhXwGK5)`lZSHt4$@uUk^T|#6uKfsS^sGD##ah%Ie_6BhG{mWzH{E~YT8IBCH<><;}3Wjtl4>v$eZKYBTrPZcE$49hZ2Y=P%!# z&)^QLi@da$tp)Wc;8jw&k(O&v^J=5_P0?rV8&I7Y2C@TYfPqNwqEnAozrz@vs`C( z>&t0jFX^RPkJpbNS(6xPGspcdxaoMUZ{uH-piTS7YmPK;tuJ1XuR`gMx+ zjV0?FE3c1(eU+gxv3eZ}iQA(c!_})S4KC#1{;k0cl>>KzLHk~;0x#qEP@Pg&5sT;) ze1sm;nvKF!Zf)XJTbr=f;0}l=v}WUbia4B1;&3v7Bfy_DHW+*3dl!16sN^B0?}o(mmGFlI9`8cTY8DF|1S45X=^+M#MlBue zHi;(!o(|MF=BLROJ&pZW(~ujblaLc8HbFvuTcb{q|1ft+Rqm}aSN~+c%+;z7Vc5>& zEB>m3C+ZL&BV`GH4%b+VdpqF5R*ZsI=Q#_ufHz| z1}sWg&%DzR3%zVN3{6?YUgP`qMdIfH6LT4uPINGr6^X5ios`mCCOi$NEs&BUQvraF z0Rd*Jk5v7aXeJi2#n8tC4X|so)$M1s&TL!?pAnsa$4u$R;}c9w7BKa?o%YpyFmZo1 zc5}mxhB}qC3poXOB@`n}Pa87@)5x&xI?o$p`ge5CHsUrTREM%F6J;4$8X#)GT>kbu z0Oj1{S{EWadJ?hc&JqLMQAhnsiT}p9*(Juor^*yPGFBx%8xxPeL(=j0N{aK!Ax-1K zrIA0&x|l~AyQrAxnmm;KZI+409P&@r&RC%hvsXib%-+VtDjV^LZnmcwp~ptEtNjHw5Q&S z|7pdwpeMK=;f$|MYN1UOpvmR~it(k*eQ`(>LGe*(#ph@rmm*&K+XKzVd!$pPDfXiB zY!{ZYF_moYvDz~CHYWUUjsMmz>3r_(8L=m??ZX1foSku*@2Er`kp!=Iw{~g@%GL~t zfp^aji%5d(){Jw&Ytz|MnZrxP0eFIJSrtW2|2n~&5gMo8Xo(MNtPpRvsR8l%*@8Qk zEHk6{{0qMAdD*0x4Sk2nV-lEi8{WG~>vkQEMf+DwUGG!gV)VwWEILGf4) zlN#w0s7`J-CF8NM`meDaC-#wtbt;tKncNPT_}tJzL9G9HIXIvfQBjARr?bk3bfKO1 z^r2|_iz2!a>2g|bI;%tkvx&Jm{N=I?ANCnsScrpKD@^353nqi8WHLy34egJtOrP=W zJ|yr2&t9yd!9`9nXZ0!PgrAq!>DT^5>stHK4`FSmm~-_h=Uj8jIqS&j4H1JjqJy~| zYmL8yHZR;~5M%_R$L()1Je_j=>!{_N7KTiG2nXF>8Yyt5FLS8y<%%!hNP;iCxRG}2 zQ0bxxZtqMG$J;_%T;^x0cT1cQOcJrG0csPfhDWqijec*yYP0h+x=^ME_%VCMCXko7 zS}losr~l1_fgTfqB%j|p91@V`C`>%@SO(}RmjRCA7}Cn^L?5wW!g3PnR|U7a3b;E) zL1g}$^OI(x`JL4r$)}G{9oy5Xwx1d0x3|tOZ^lQB-({(+&ITHHhlL((ov!30VLme) zP9|WB2D{bKTg{*mPq~+|@jERS0)wFrEmPENqff;sGI!}KvVg3OQ<3_vAsFJ$%e9IlC zK&MTC&fJc@VG2Mdo%Ox_(E@+hhzP zjd|$Os>G*U8UmS13r3z~Su;W=^U;mF@NMz_RW=r5%*~1Sd*4Is zqvX|^GbMU^eJ{2*V-4_H=36Y;6U*?Ise-~rMC4{j|8 z#*p&mYAM6#$qd4@fFXzVmKF?y7;>mBVb_0h<0vYYWTI06V1mozC8`oBH+{Et;%>P? zHQWWOyX87#0~QzUJ716-W{>B8&J&WPA@DNPB3VQKK~>IvidjKg_=qU6$jsx;2W9pl zkhYZKA5|y)Ux(^NhyR0g#y7Q$e>>pKu3a7oPV?o+rxJuaW#X zuR5e%#-i??Da)MzTd4zL|34un=Oi__9P-1 z)O70QW}G$2g`k=^Y~vDUyl38|Y(y1UiFEHu=B0X5e!?VG^8P%^3y>z$+Gg<)UryZ) zrqIa#x^hsCvnAY=+tApg%TXvUU3K2!WQ`qrY7?HEzJy5ybesTvE<>f1%fxrMY8gEl z(g1m~RY;qloFPr;Gt53TeT16%49w3`Ok$!6<+r^K^hoxQxzDT`nA9d8GWS0$mkVuPp>rAD<^x0 z44z_SAXfIr$k6_))^k~&!fF$}ooR-1myj{&kTGcclf9?pvmrI^~>DPaxhK9qS<~r+2=6b8{3mjY2UNt`MX8&icT1cnNBA_Q1m*B(jZEe z*)ql|Pcc?yelx7z$ezEl)EX5k%f=EF$|T1Y5L76uj1V8FP`}ZmPZ#26g!mbUc%0#< zphXa$;mnFLMQ_bvpIQ`agqkF!CHL!FXPAn9zNtf3TVOluByTT0Lu|Dw;g2c(cvKJx z3M5gSDcy}LbGeW9yMcjYw{wHY%bLH&bebvb#Ey1LBl4TW`?+52emkE{Zd zd@$`KDmcHag6^4Xo&i{OD1;sT_-gKA!{ft zzE?5b%bz@I)8uI)mGbVq+NuoW&>6bZ>ALJ8bkb>YIDe)oX@vN}^QUTL4rV-?sBBaI>H z4rTZ9)ygD$vNF*VTpr2dQD)HtL~+?`1gO12cdhfMxx2+P<;ZRngP}JVE>9AG};o(VipTq>FALkEVjVfzOYHJ44@i;74a%Fo6b8v@`W#GFx z9J&dYh4a!)WH`DRH)|GeU-wZk-ufJ?`*5g_f#Q~hxDg9#;Oia@b;G4ct#0<$6Ll9a zcIf;lrzKsBT2qSaUFu8EC`)~o%b_{py6Uh{aBW$Tg`up1q>`ax`abPi7@Arq@u}c$ z%6Pqii zZ(WFrZ;I&E#;KuVb7k>OWw>xwBMr_%T->n$7ZgP(Ak~l|-%`m0 zLvp2&*HjB5Z~1jEsvfv8&j?J*h&{Ma5oO{BG8;2$LMpNg10vU3LE^!HnHfCpHD6G@ z;%b|<(H)pYVe5(3UqQiJ_;}q#dHcm>zV%ltu6wq7%l4b2q8Qu7n0dIbBRyAeXDS_U$i9q;@_f}dtqPX81)W|(V` zDIzI-eUc`N(}*hv2PF?k={vlQd9sUt@^t%}f7bgtrt=&4XZCfAcZaCvj?;Pnn%LD9 z(n5koq;sM4%E+OHD&i4q7!C7c^qdv|kl4`nQySAb>B)=C*Mx_q){9q)qB475BUDo{tvgD+uS^iNl9Tu+$w}N0 zOIBk;lvO}eR!}osTxf_5Eb9xd)bE_91CywMW7?q~Gric?XvT{-l-2m&r&go((E-g^ zc)D9LAG%>znRk`d=`JGu-Q0vleSrk>AMsTGGL}Owug>8{DhUJr+*4wi>7!~HgZ09e zKYogQ3?XDe%U71Q+^3eY*SMC)P`Awf!$Y4bHK3p#l58#?o#!mky0dt8)THQW>+r1c((Q%tDJ~~{PzU<>`GL@Fz$+N0t8PSxFeTLuiw^Fypom)#Pd%#h%4hDKg`%3OsNo3gV zGstrna2e1k&Dv3?przWLY2U{bV<1(ivKPnb`b|}@HR;uHpkbjyMuSn`mRLvhAS~G0 zGuzyTF4?P`fBYjx9V!csWZoYPtm1I^Lg$B#kDyt5esUCkE``|qReK=%e0?oSOkRiM zxUqq2KW0LxD!&;e|H9}#OofSV+ksBcsh*?-{A&eRx0MCuF& zJ>Ft)1V=@ZD~i~wD3)(Hf;Q=0Ql%Rkv{f3lBVtIZO?fc7_)OndrRq|(%OoBXdn=+~ zRGEU&Ya-tMzb>M#5tIQ`1pvAN02rLQ1OQc8dtGX;%i0UIcUid1xOVhDYVV>wSNoR} zGz}>aLdu8U4JySfmKf|iXOn~drh9C#-J?)~u`Sdt%W(@&C7f{{%PZpkl;hq- z4&6+uYb0MEC(jh!kqtT{jz&lCiLvNA)H+ya#vExa-rl-yN%%N&->hIDi|QV>}(!C;Uc^7^k2Egv?qS>={7P$_A`6R_{#lh8Xw7zb@rhZze3qlzQXn z1dL45n~%gMZ#Py`h-c8MYa3@n+eD)6DMv4A4?g4DvnI?AJ`Z3rKraXv;O3 zUO)O&^T*c8RhV3iF3LvUZvbF=-NSes9H@g50}uMmceGvsV4c=B&zOGMs|igVbs7WP z6)5coSbU@Xk-qH8H>`e&@r}j~4rpY#gFua$i^(0)4<8mg84dA+)|(MyY^5?XN29lK z9cKGL3kQCXXh&I_DyCPtEG|d^%c9%eHP-|!Mp?VTGp_JECYHn3EL46ZnflO>rCH!C zh~UGj8T%18FIYP9ktEG3r}ysCikG{KH0EhOGj{NpCOOlN{=bt6jM1EjehyJ1* zf7sX+08>*!sj>Kr zL^c1#Tm=P5{IS0DvHl8sW}%_RTJ;WiX}U2a^9-?47jtK+P(@&KIKQJd*SI0SV|A`^ zV}8e)T;rzvwz}NbdaJ3L(ir8p*o%6=3tk=6yV|{MrDEijE&pdD4^h9+pKANx8bBKj zlf>xeUeiOn5tCTL3wG&`jPhFO!fuENiDz5;m}|AsPwtma2O41cqpCOCFX|K4kPCaQ zfjzilc>S&TPP7jbBYK-8QYb)61CQEIQ@UML-D{EspTZjhnf%B|I8~0+ClGI z8(co{*tzcG)(rq#V=yG>2@I@r7~Wpo6fSiE6h_it1k(GyrY52l9nK-k9e#W|cRcs+13x`` z;8)8F)vvI9!^=cyP5BRQDIB<~>0ff~O}W{o$A8e2`&Q};za02!WmE2hmy;paa97h% zx^o5Brl#*%CNubZuKqwK_ek!~stB)9`0|5y;9zw@d~+Hzo?VPDUMx8tSm|jS3EBQ7 zX27Tud7T8-I=H|5d@+de@_;EjC;SDiPH353*-5Q}&MOYnlL}=!MidA`igy^oleb?26mrq0UrT6{8Zgtu)|G5^_GnX>m}K>!DN=2 z5f~mSjono^n!kK+J~MIfSf{cb7}Ua{^)IQtJm2hEW6lpamA%L+1{14|j_K4g0elDk z#_j39RoAR3cvn-tv9>99CO^;OezE2G#?|ulY+S=#WBJCq+>UD4uq_Wv94^=XZ;F&& z6@0?IN@3IOPuf0@gDa?rzs}a>IvR`9JbC{Cddj#l$LPLpNQT;YS4$Y#*i7>H&&wd#JKxbiPXe1?D^E6d7lcI5^lsSIhigP^X&9=Vn=a zHA=_s@RMHrV4jwui^l#Z<}A-Z#m@1wq9zh%jsMO{zLl7vgZsA}v}x)RbVl(OcSe!u zO#+ZiUN^F78mG?2siSnv4rPqmp$yxcCtEv(jcXw6?qv!(@keUY2uuP`e25w4i(pAn8eH@aI(G{9nASEdM8x z`LX*M1aQwjRz(Ik+Q*9Q9279IafBo+ioM<*LD0lHoBYF^tkJZ;j~ev2yghv{!!DrO zJ};Ds1XKfruxudL(AAN?52ez-SE`EzOtDqs?5@s{r z+_`KfZV?%fWs~g@SAjE=fzMy)XZk#ya`<~Xob zN#BD%Yry>}cljst!sUvDmx7^a@2zy@DH7oANpt`Oyv$r|z5msmbA`v(n| zf+so+n(UO7PN?Nxb?`7RmbOj5Ish~;q>;cv6nP9x%Jv{Ghuy2k#~8OKTtF8 zQ*aDL{gnBiCS!A3y)@jJuj>|{4|OdX1)H^TimkmC5V!aoZUd)=_sO^m7HEv|V|hIQ z9G4Mcz)td<^@4*bmp)$<} zmRn~1q&PUVAD@fWy!i0zt-w?}I2FQdMj6<8_ec^~@|dA2`ZcafWp|#WiVVz-HmM@+ zuziPq3_h4wEM17wQy+VYvFOPQTc|~J=1P~v?`OI$G2ab9`epcKH*-`q_??Ovdss(V z;Ygn3FF#Z6$E;zDg}zNclfR%x7~3tih2M)rJQ94azqEwpVIBjLiF(Ew4FZSVVd&Tj zI|0GLFo zLNa+KM5+dq2hm`wvcWwG(VLUJR4-Bc(p5NvGpIZXk{8c|YMTe+F_K-qt%K_q#`iLN z?xuXYF5j>wzjJjSK5(EWe`U2vrNBL#yK*LXAj)N?u=MMi$#k!EeoE5lSD7G{V7DXv zRTrrv-Wi=L9pXr)+1d>^@@XDb^b4w;{tFu?ARS$X?cSv2ewGPiv9l6t2hG)C#3UKy z`DWMbxn{{kMAhfSQLn+0*Po7i_Z8uAgPz0nSs6x}GH6m5@3p7xp00;&kbkU*d7ocq zlR%P^@=k};APr2ohiNB&haSK5RKSrt@Uo(8um+I5CP1Pt!xZPK25q0)buB(TN7oVp zyYHwZd7={(PYEBEwRLclnTl8(+rYia8%7U%ZT{@aH>}I=T$|6-3rR4C z`rc5J+j%#RwYkh)`Ak&~^EDP04AMwhS5D>*KqPk=k=$+br4uB^{@51a0`$wvz!sj= ztrd_E2^|&f>3?+}7%jiK>EqdW%imD?h`{uYw;kz!Mb0&^3|s;3NZq>6SnnOWqPYw2 z#apP?U(uXs?RHZ=t+fZ^);iJ;_Rm)$R73VWn{-_nQhJ=vqa9@NAUA|cT#>jQ>xQNE z#A(xF2lj?2!AhIDHRVd1UL{l{Tvf|XoZ1`&bZGm@v-K3Ow+5c(8~8_4J1Lnst0RSh zb?>C-E_W0Ujk4(D&fI^Y)d5^VB4Wj(4+R9>6A)yauzUKRg^2mCOQ2h(_nEH(pu@oWiZ@v=0s=l4iYCBY`Z!s4 z5tk^@h@tMr1MVe|TI^GEQiAC=Dct2lqO*boe2X&R|%!^Y8!RpJIH!mw*4jzeo8eKfas! zcZ7eB^3Ur_jp$1qOZf-1Hxx@krogu?zK?bq&UA=~RXFw0+j#9r7Y$%;CGGdBs3=O> z=oe)DlUyJSH{%@JC(l(j+WPQ++=1F*8kmiY8j zE@ah#ig9|zJQ;U(C=(?n|>H;yw1of zhq+djv9ah4-7GqsZrQ^^>^=E(0JdL}JDVM*6FRj4w-n7GuLZJ{vIMf{v({E{Po-AX zZnLA@_(kMrx7kX^;PVha-J_PO)!eQ$I$AoZ8l;4-% z(|*y1%ItFP248Af!;Y2-7;(<|17$f^0wbiVUQ;Q@eEaj4uVDu`f5Y1RfwBCD>k3zn zu=o`4THoYia{7}JvLtUODQrD~Z>y{gcC7D4D=`i0_Gv4(tCdA(WDjS>>+8#lsGC!GMUd^)`^z#sz$_MDkXiF?17$3~ zZEa!a-Gxj~;Xrrc$|Kn33s?sm4i(@fJKGC8J9C+~e5RcZ6XFmk>S;c6m>)LH+JfIs zKr#ql!>&qQ^eXcvp2(-WF;#MoZoc9G6KUevhB{};wE)EyQTqDktKXg1z64l-b#&Ro zc2YPUGcXT(B>f85*0K6`z`c&xMkh(D$r_&5U?dFBb+j6u*V4s-`Q@$sb*+>AR?#}~ zzxvhQ2ypyYyymv9=kJiawiV7|-WW8n!7PtF>nVlu|3E%b1RKg{u~HpVyzkQ{z$N#pl(yXBFBaG=t@zo<(I=G*N+t+j7mc za6_SjLA&qKzI98~afGR!&k7YCEiVJUO)qIq4Ov5csF=>#XT_Y)8@_S}%~^zl?+obE zT}G`4L+LyC%WUGThbqe*l;?-c@BVeIy>^Ayb%u&767^PFik+G9MdV*HWQX8X^^l#n zu|^DBcN+z(T`DWhdMMjTvo7P^@zW9iG<~DhZX@1uf?P!1=2O#9aRs8;EYap*^47V1TMfzLHZzcj>|YY9QO5VeNO3sP?BHRsFtB^?^X#q2L`>(Eb)w zNmvoiJI^k&N@eY?FJIQdX=U#;Xmiz#pfzS3+1pZROhMEoF6rJZ4EL*geNuw5~c=D7MKa4Lnmp@VZYtN-+} zOwT;zw_RoDIeQC-fAb2+$h(*s6-V71g|%&_9pGAuC-13*kJ0(#W&-u80kwr9hC?7xH%*yXv z&Is8>$^Lwc4J%uZ^5YteueRff49db&l{;gA#<&`T3%*c@0nXowViKu&J-woe+^UC! zKC^4{T&s`1gFjLSb>AJ?@<0 zzB_WbEA8}PSK5V-uV57nAN61#eHF6GD9r+^K?H<=wfpW=iSE05zM)3MBv9xvh|-&N zP@Rf>5O}KN1AMXF=s|-e_Rk)_4cx3fANH0&_J7-3hcSt_lVC0ilV;x-TPezN#Dri} z*xByMDCt!deQueEDIVe;v23+xW$SlozO+0;Yi3A;z8g2>c5KKuZp`i2m~Y&a+p#HM zU!U7tALo(#7`<|CX1*M0m$)?C6G~}YUE0=U8tzLfi-ozAkA+`p$TFq0%Ul`*CI@@& zwNs8p_l7jAHzJLKOf9DL3Zf8=cw%$c2|`cRah*_@H}*MtBn!&uf-H#kb){OI8=#}m z5t37F*9qyiJ?{>tx$~5&#?Fu7GSy;^Q@5~BWd~yAJLOK(A^9>ya()xQQqg!e;G_Lq zO%e}N^BK&@3;&KhsjLhX%s&-S)u&OZPRr`uC~Ss@LOn9W3U{V1b*npns#AD6A8Tvo zp^ksS57nQK-Orbc-@Iir)!jlR?sOgUgQ_jQ%fXz!*nMY{&3#9NcNywkhBx{Q%i|23 z)3X}Rb{SsL{H|-%!iqRUwaeg6=?TLxb&v76yBIOZBr#&%vnC+Mse?{pOvrRihtH*N z5h%Ts-zxsa{^jcy_Nh`;U?wodQ^UXG!khJ!gIep&E4FQNJsDINm`OlS_CRhd0 zAj8s}Ib>g9 z5XsND9i0pYr#Y?L#j~Vv0TOD~nkD@n-Oh1h|F|+i|0h~?q9SQOw|E?^q9@q+@w>3B zKx)?Qf4bg8ZaTQ|zGw@T(eV`mZ<58xU|FwKiRtlIFV=XlG|e$832)2R^PMsONwu?#ZqhFV4Adr}4T#B^H@Bc~0r*ib? zZfsOv8ou!x=kS}@KUx^Cwm)e;V$CjpiHI<#w#gH?Gg^ zSf6h^Keyw2UE?Yu!E$gUwz!yNqO8u-gK{C3ou|15>$IjDMkoNJlG->#yO29EM3Hr zNEdlnx;>Qgi&8Az9?Gp~t%K(9l$bv{-&h|}q+-{}jyQU+AMr-Kj8@r!Se=Fqk{-WR zs=%zH=`me8I49Py6`bR_-l%W(wB0`)tG|K-o!kvoM322&{3|Ar_Zo?W9A{E48f_}e z@kW=!Y?ot&+x`n_ociSAE^w^G-Zjo9B1^1Rc-Lff+Fo%)XO#VIoE$^4w;Yo1xExFc zH#3}el0iK(8IrKab_SNQ+-}__>=w$+99?ufPve403vOq5y{*(+e47@`hVjDA37<>G z!06LA1E8pb8qKQ8X}fU}@-qC{$t~S5NH3$2WStq^d!e0u10Y|&-ReMkU>@5u0C91G zRn(}>3RKW+1l2-+v>%q_--xp*^|PvZjebsV zex`n&-h76Bs+&*K4|+ag7Q|vVjmiuqS_~2c>no>CbVqsVd@591ose(loqwij8Y|sd z1J>aa?!BIhZLvfaiVSlbz-#Gvl(t$lrchV)3Z8XI^Mtp>vz(^>=E1hFr?y~KA7LMI z2+m3-Mz%6~OE97_+mDmJ}6 z^IUlZGN`06UF0q7&N?nrU{&(3b;^X+Gw?|QCJfCK4Xnxaz?W+MhP4Z>@Q)Fym~>!m zmm3v#3Ap%;n3A{^KN|J&!*kt#E-o-(mJi#yd*8z1^!((-KNyPFc+25B4Zq!Z&iSNK zu1yMi9&By-yOq_9tQPPF&c;g~TJ|8Ac|aeRBJ^9fm>`Jyel3vlKRtC_nwG80aL!c#8pPM~g4agj zwl9l>N-MQw>F5Q|w3Rx8a_sBU)R=Yx49FsIzv@8pb9H>JybdC!RYc#eb#=fTd>xt} z#XmG4&RS5x_sT0Uap4n-DiDJyKAkRkX45)&mAQ+bmspR?f9;yEWX#5zlRy=BnX(5I zI($gSsE-LX;(mJdb1eM@p~=vzE2G6nBJqm}`pc;B+)>r?tGB1_9B6rDnV1p5QJ82;ufT%c4)4Qd#G1 z2!v2a2|`aDKQl&W08gGfEdSJjf$6ggl~u=CHU~kv{1+74aXj~f+@IIxuCK|xu{!sb zs@yY%-dHJmi5|K^VjYA%t{`l8Q6DIQX)@66j!jc|xj3F<@D?M|6T5ai_dAxUdW5$@ z=Kw;((|<>jbuOOcsarorT1WZ|>|?~JJJ*9Rw(k079-4zpngekrMSK-JOCq4ge-!ep z8?1{_ewEI{4Ql%>43azBX^0wR?n?Xu(>S-%ltt#Ho{DLAd~49Tr96iofl=mad=ZS^ zV+c#d-pyniW;Php zdbzu!qxwwNhxTgLjZy2===3o#9OrUp(f0M%u%_j6GPZSW;}RyK2P1btc^VD)9T{5t z@#;meiK`#ceX^NxuR18BR=;X~k&xYmea##jf1p__AEpIW4q+GzyV;&4|1dF50cM4b z9C98l#j9f&0Et~C^EWc+y7KI}02AV2YFQh9+6;=JAjSCi7!g=nA0%AtlqQI~!jOE6gQIm_zX&6l zYn?R6x{82noS=ARqJ^c0QnG*ub=VepC^U8GYZgLkX%3XS1rrX(v#oj)Ke&vF^DLS~ zkmnS%8KluyWOVC{@wC>#YrH?*@0R~&4-SZK-Cpa#fjjJ(dP$erIOoN|8hL`F0eKmb z)zk@&Bc8_{OaCi8b1Ave2u3&JI%YY;&VtsciiE&;BmQH_Mc!!dFs)m%TS31>xoMe_ zd|`3Mqr7@gHOslw@|pGREm%GgKa2PP862Blu0S@yyYhu0^$iM{0rB+Z+5;@Qyirlb zPO?-#XX&;a25v9LIM6POwXy&=qn1AAghb}HH7mY5u|QNr@^zE)lS`JEdXf^?Buh-@ zQG83cWJpo+g0-vuA~JivW}Pk{q3?bF(E@&HN$$D=FH&Zwl!lPIPBIBrp#}7zk zTy2m zCAleE*_NU$OQI4z-oiJR4`L}LN`fdy=L|M5@X<0Asx3X@i zt*lNQT49CnrgU`j(wUpeT9sR?D_I5I`-P9{mjXI-p~+qWV4c==MOikZ-%)hAPJqvt zNvzt-?y*6sMeX_ZsXlQ6ERMfw!n#e8s@D0ZD>xDJrCN&+HaO?$BcYT1T%?@I>913r zWx+`p(QC9>Or~{yWitoA_+62Cc`!tv3KU-!URwL>^iF1PrP#_iD}^P&rSMXa5f`Ql z0KigZLBs5Em8LxqY>_OcICJCp2z%gA31bOaebr!2Doz^t>rXX5GPK*Rb1JU4_9gcp z%j`Q#hse`<+936(RyblI$Fzf1IKvbo{v1odrB$T*Ks5R;laP!jW(KmwCw=sZ9il+|1`%CvTia=m|U-ANTbOc zi%jW_rV#FMxE?KjK#NAjrhS=LYCv_{Hwyjr8eMB@;Eb}SSc)s6H@T*C)N4^QPOO+T zV3%kWSg2Q4llJg*J@(y2)ocV>9T_MQBu1PS8O#@kCxAz8;^g!6E{7JkUcE9P4I_n_ zC7g4z7BIstW$d2lMa?;=U*e%=Fl`CICekM%{iEX=U_C!G^)YF=28C~;k9RL1`tv5e zhPV}%uB_O{>CFdoTuw&l15n;=3QR?FhOWyEtlQkcuzx8)NmQ)l&PfGG$n2yoxuWmv z4m2;L_y_qetqMVD&gi_y%cx?B(JCS?YJ}xbMEBGo%_lu-e!RW-Y$;`4nFB(E`P3mf z$LfyICGn9Vf(;+a>Be>XmIhn7eC6?E3U&k+uX1%T9$-VB#~$r>)gR%Y{N}3jLG{pP ztaOC~1Mc-nHy5P!(QkX&_vu zdZKk;x1S`W&8t3gfGq!p+1`utZYGgDSe8j|mdRxNIMaGMSgJ{HmdS*Fmr1?@(LFyx zLMt7wFYRZteYN&U;zi_Jx~$4MlbFOLMJm`{jTri_meMi>WZ-ft@VK>cSPH|>y5#r_ zx$8z09hDxsx@V}{%5uOLwcd!8xjHWu-`nb6vE0$*8Y_0hK(bC&9Sq(G zZ^klpx=aKMykl|DO1rwG-i;rGT;=>f@-5d;D0mBqmRjw&f6`vX{zdejjsj08g6Mt$d__wu+w{7~vY2#UkE=*l>%rM(MN!Y_||A%F=BOw)?V58B>JNhL67DxuFO4s=;A6-UvwoW zKNmM_xNK9W{CtS?xGNc=Lwi!hSZJ6pw7mL~MEr+)wb?Suk{WQKP9*+YFu%+>jbS;F z*J&uQ2MMWRSBGZ7wOXES#`-xiyRwrE+N*P98(qCkTV`ZBV(IZ#+GpQu=|h&zCkPq> z)DEicKHkpfxa$c=gD|J!{ww}UIRbQLJY8=c;QFRX9&86VXoTsp=(TBC@UU~rMJAQq zEV>ovMY|g-++TaPTNnK)h3KE(QkMJoEH^h$RWw~#v0RQT{&|J0bW;+Cr~k|K2Jg{I zGOh3d$-du_{=N=@69ZKoMF-cS8!TsJ!VG$_w*x5o;qmICwd^#P^x&hc2<_$$~9(qAi)k;5Sv#qgTpe z$$=;_mOx+6c18Ee2s`ND_lW*^eHo&^Lrbnps#FHz=(tUym{kASa?FP--EG9OYedt# zgoE4wcxuY;e3%o4xq=Rv)bBSQ&3|6`a?i>WFXwgx&vek-owX|doW;d!d~y9! zyr6u!+q%>-8>`j<^x3K0rF9yR>b23QVTj@Z#@m(VY44MEP9vKBCdvW0g@zlU;UV|7 zV7fedQ5izMOC}IfAfUUSnV(%SUEXzBS%ITg;0P^LRAgR2Ye$I5hmT1r0|HWevZ|D(SIcgw5wQ<*k+` zN4{CMK2|E}`Zcl*}u#-RYfD;5Co-R)%%ud|kR(^DqP z{us??#>waK>BG6Ka;WPCJuu<3=a(lWaPrj)%UU?*Y=Q;5dMiM+5G`*ihw669fQ@yu z0Z*_Xgw~+LhLV@S##_qUy)3jV#VEA95F20n!!lT(t1@=fuM8V2;$)8vJ1{70=t0=9 zqh+Op1UA03sjP)wvky!a3cBhjK(!DX7nDQQrWIr;`(jFfjlY*PVhuWMD0vBNq|4iN z0a)>dF^3kXXhuzw-LB8oy|g z6i{qTK(ToNg}%NVijPL#c)DD>$yT9`Te1hXI zJ1(XDRrn^5PZaG-+M`Rc1;4Q0^0QFfd2_O4@r0E$9+l)=#=xAYaL5|m`O&zw&)7YY z0-7aPLMe1zQCt^fK~_*DY6UI+o?8!Pb}-%cTNdB}sTIX<#_0kF2PNd$F~=5)B;xb6 z&Y+c7d411o4nd1h`HuR%?0HLJvGD92^;f%BA|SFsFNE@?cJaxBTJNuA^_TQFukV`9 zQo~@JOIReQ!PN4G^niucg%v9SACw`gjLofW>V?y<(191#4{G$?umzB&PM{^xB7Ps& z;hvxuBvrrxFBL^>aQ?FZLigYefXIAFWG9Hqg>C~pQ^=u8kK+L5ng#diqJwz+ zdX*Dd3RMAz`aM>}#_UCkoU2w@^kYH)Wtt>%XRLFb;c1PYyyeC8b>}Z)y+y@5rNgTE zZF_P=b!NWMQ@kQ1*^gm7m6VFVE5`_i*m1| z%g_)WKvsJ|GJWQ0s5TF5^$6I`ryf4_#GiV$R_NV?_FkN|y&j`}Yz3s~P^-L3sT}g$mrbAM5TZ}DJ087Hs&Lc zR3#w6HYCzyS=N2G{AK3}WSZXvqq=)jLxu>2M?df<*S$+wmhrJG-~PpoD=P{+k9crY zUKT!$oSvgcf8d>EnGBHHgN%?3&{|&Q^2k`NliL;JiD{2!t_Bkw+xBi8mifTlKT)tk z`erOupYaG0S9Rx4F|76H>zgUa4u;z@bp@|*1?i@JYt{yEpX}teU+lbvW1HlWM$N|l z+`%Kj9Z1VAL6xz)KcDMVy28RVYo+ba->!_gALcHp%3W5OdscMgPgYQlW6M@SL!a~X zi{Gii3cx(lozW-B?7+zH>?>qOJ^n<%!XHpUDxLh)u%A>LJrAXP0dSc=OEd=hSe}@$ zU4`3T_p250sqbokVwX)YFwL94qQm9um8&WIU`;C67(t% zWmcbYw#zWb2N#s3)*sg7()uGF&MG=XRgS}X4%v1YbD#|Sm`8YDxD?x;}__#?L1g_P+4lYQ-k4=}DRR+k+M-{I!2e1CdsdKq`%@!k``l0CdmmAj`ew%vd*;I(eM=J#^GR;i9tTcaC&iPF%*XH?0~~%wp z918e2>?0wNqs3w8%|&H54>#V3*KQtec3)(9i$3I>uR!s?738vCoieuOkteBlTA|b8 z-oh>!*c?mb+<< zvxDNZybpzwfug8J>;8Oh^IrS1)rE_q6?Xv+A7D82)dU6J9FvScuCr2gRIHlWX$bi+ zJjbP42UdI8AX+yfo(A`XsZ1H`^O4z8XFGYF3d{MW@gbXFNYpdh7kD&xX=QHt(8X2i zR`kmsu2_1T#qW1Uf(_vpSB|ROPIgwPCf;B9=F3X^E8jhQD*G#pUxLa6%~(E2iMw)8;@FRZv5fDd&&pQ z?FY>r9Owllrjl?n4Gm>Nx_V-ZA>9|Pd1=B#k$H*e5fuhO2_z*;g-y0P4Brj1L03G4=x13r`-r&)(a>XkDoElv&-j~UV>kQR3t4iNnu_h4QWo0 z*DY0V!ZC>!20xswy4g&a*@=#H%x4y8&MPGUr^yOO{6Mac# zKVi&i5{nY$ZHJt5mo>{C z%U@n~F1DN-SSM%LFsdm2Im?PoHdb#9KKQd^2egC9=T;x;TO)|di8NEfw0Y9Y*X7oK zK-8c<8^)K$n3qq8-;8JyLFf=kzw+=OL=l7}w;Q*|EHkFhGe5S3`B6iNVvA4gue4!x zx8eUq>m@xH!tr< zf4wXLS>hXI2~X=_rz}y0hJLnbsQ&3f(WF~D9HLqWw}2w?KeKmi%BR;nxv_(;LO`0s z{(Q`|7`3EwUD2y+1c4g!PAZ$TbW9Hr7cOKYj(!!5Qe-mv7Csk0oGd7(Jss24&YpSh z!4RUe{y-=kb&J2`Fjw%BvVyc=2lz@rh~g%7gN1q66kp7M8Ig_ffb0)^x0n%_-T;R> zz`_cxV$@*9kB0!*W&R5=HSAoa#gMhho5NH;UI#8dst~|NoNSBE2KHR>Dp7dEgBjzl zBkZ-&HN9}cG^3St`&sPIq6RDw7~^&Jk3M1rH zNp6-BXIwLVq{Uq}$spa#$=f1=@V~ep?45C4t^GK1%t|uWf(m|SgBcD5D5jTd!i;iQ z(NR%9m%PHEq1T!-82s;f&-JN7ydZDy*F$Eua9~uyQhg)>W&~{C>^K}8a&c1A-O(T6 zq2;Vv^eUAljGKTeVAb*+p0_wIPzsK9WT>$WqvzOsR>BjeR*d=y&7dR;-*>*qjG-Sc zGR(;@pR#K8CDi|1ml$4k=dvc`D3W2V&^w zStyI9B5LVLl>7REa=qo{`fY)YnfjQmh^bqyg(VltjdGkpn&T4OM3O!hsrN^GPb&(C;B{@d2~ zex_pCNN6!U=}3ITws-qN1OH-GVBP`M=F16-GEQH7QKDz5>|a>Er!eCCteuI_&ReWJ zlW`)~E+b_a{TEyMq)81n;Y~;D1@-$mG0QVRSB^pQ0Rz>5yNzc z{-D2328Qtm_%ei*UmyCyhcoPhxD+K&L6QoWJ23@+mOpi4&}hUfWB){!ygep?+S&s* z2@#Sxs?)DJcg__u6FN!8p${J+LL5(%hFMz!*Q<@*KQDHtmNl;=LbHBMZ#4p+ON577 z{xT6Bgrj_^>!U;E7$t%w-|L!{s4ZDrjw;G_7%EqhmS#ZDeFbIhH4L{K&?f<|YexikyN{ zazC592HaW$#70ZN)l<>*C#*KcUmxw%rS#T{;+u>udU;7wW0`B&n{Ahsp@)K9o}mzP zQPpQyrjx=9H;`QSPabV}x%<{c=Uz;{2%iAbhYSj}Pv&wNu(5RWV;o<@&I>#_eNU(| z?<#&0G9NB*qiH#rYuI8kZw-AdBl8bAGG{(AFDg|a`cR#SZQ*>_5oe4(u{P$wZf&fA z(5NArwMD1DhzM`**ILGY|8~y{g`D9q5lS=Umo}bYQ&b1q_fwyLGiFxGIbu2c%V9IUCRIEY)}^Nmi|4KOGm$r{&BiQ#9aKw`o!?m`{%_`0jQu+%|^6eO;HM zl~nc@HhRY9bWKQTaIHD(6C1@`Y;51MC(0v+%k;OUfCN3IdkI(s%kp$bH(Jx(K2K;x zr@5{275OdM5nHdcpW-)G=2zU1W#J+@bRDIOr9r_Dg!EU(Z>-svE|Ub_=kyK5+rh7E zLNOLdCz%gRu>Cr6$MfNOwyPJD`NvF{6!mI8SQLf#KYywD&=hBkauBxPV{!B0{hs2l zI@@vFuRJ9A%r?cN?TIv)pEk;)jfpfwDob0NNCTgiR^!r8eVcL}ItEch60n(eLn3!* z>D`I6(9&gzw9wM)5^15O7rV4lOTL}&feYwl@f?1eu?LzN^DY&`=%MEx#}Z=^@&`>~ zK`58!U*I(HtmRxM&n5HI@T-N;9!J+U`|BCG>7N@x4erz4V(efr^1Q_85J|i=wZq98 zcSbp@mQsYD>=P;ImQ3KG~L)QZ+EB6c<#=%uMbnbhv7Ay_|+I%{9PI}&Kg*B z3RHK9D!GJM_eQkpKv6A2kHmA&76_v_F3hFWL1dL>~*RB7-sztfi1xMf|G5nxIJ9qw#Dd?<*PYRBL?PqZ@QAjNZv~LvSX&1^uGA$Y4n`6%;Z&!Zh9kAeD-s` zaQMH*oSngYHf{TfFb9!o`#9BhPzBNxPBpxdCsabtG`_hR@xnj0*bPK4_r;I{8 zoOa^V!T74U{fiT@ygP#i*;;`;&6@|ss&AI+-&|JzYpK=M&q-q6zl!D; z#?O~EKQn&*fG$N>9#g7Z&CgEM{39c^0Qvv0W(;wrmWKV2%g}~~wq#9okz%wZJIMGo zV^%~-8qaSp3`&hicSg_uD&8s$c$gGe0+o-YVvHMfB+9`7VjDht`73Tf+!C+RVQjE< zjbRH7TXjWa4}&bNqdlSQn2FBjCKv1}e~4OZ_=ZFx0fYt|p=3{MSI0(VH7khk#PofZ zXuz}ddGHLZqehIk#D!QGxD5#pmF{B|b%`BcmYJihp?K%K)x2|_7X9Z#^p|eYHdY1o zD)TCT<&soL3LNREtlCtU!SJFNymuJlBi5%QJb)b(vv1i)@MP;<8In>T*=B1fkkF7i z2d522R^7P0Fy8L2FnvoV=wL>c3klOVV&jn05*jg^mBY~wexO-7!*mcLvd=T8{}Tx_ z@hg8^mf_bZE~09Gr_;Q%Sg1lq#zZ4{cJ!0zi6`0z+8ch<(eNWYBrQUPiA<}Tp9SUr-qL7kFZ8921y2x=so2i z5p6@=b&NB(P)@Sn5BPlGsp@unn(t`QMgbK=J9yVP55`HeOUdLO{gs^=i6On;1aao@ zaN)N19WQZ*-v@Ismu!9=^WAX=R$0w__7Do?CtoiCgpOzF-3``cgShY&jqD67- zYFEo{xun{#trF!=t92FsfuV|jpk!KbLDD9HOozd;iz~b0TD7`e?P_GJ2I$3v4J1HT zgJdyc+#N8oGfwW_s8OO@?R|f~=bUGrXEJG{#ozC~E-xU@JkR<2J>UQ5d%lOwEMu7f z<*FD^PUg&T87N*raB~07%UWAoqiCpwrmoV)+J#EXFvd|tf@#pZ@072HXriZz`1cet zrPO8*&*W+Wrxg!VTP`fd zD?tgXC7BM7wTzn%Tj9TUwrqtfz=5<;j0y|P@%t5FUKV6#H6FDZudGt{QCHWulHD|x z+0-W!g6PM!brQT9g!N2JsObt`a|mE76b#V&{lYV=jfYeuOE7f2q>Oyjyl#N&l{QM2w&dNt%BU7dknwCS z(hAH14H03=Zl$-a*>yv;L_C>*8!O?6ao=?-G6qUsQHtaCal*BU^!qHBk%XXKGj03v z9h309+3@q@RqKRMqFWF&2)~goI^n=|)S-h~W2oSB41Kip*6{s^L-!C9Rx~xBim+|n zXpopN_>8&d1XLW%#&n3|D3(p*!uo5t9#R7y`ybu7xY* zi31r7lN?0g|K@!z`yb8=h4eluB#~g9bn?op4yDTlYJbJlq-_Ygp^M(mmF)*Bj5?pT z+ajhM&*!5f#?w?x!Ye8_?8~_<{vs`z6jZ$#=`=sdx9dU2r)8>PRYAocw^Ec`n&ZqHMR+Ldo%PjAyccc8~1ZnWY zu;9~Wvv@AF_q~y2u34--)=EV-r|rO&K4%~8Pg!c?7QCR+i2I4`M6nIdmPsHH{VT< zxZj}Dy9`Q}O{eqA_T1-;8jRfcDOULa4;vVheLJAcc2~6_xb5kp^hfP!;hGQocMI3N zDgA!lSw`doJeXZMGFa9eKk+{;o};ZPe0((a@gwe|Qs)u7>`)cE_xrITZ}CNl2e}(9 z3x>~<|<1T5ar_YvZ=8NdIJ{xO5%B(TIWY~F7F&YK z5g7)hf0wB6$tTPC+~J1_d62DHG(hPfR%1rXr#`DtSQvAisaVhnvY4OsK4UvaVqgfF z^~-ompzeyGi&3z8M8C<;)wBA~Ao(QGP5+%>ulVT+;5QTA2k`S80{F)iz)yDFG)rtQ z2P=Z;g-xK6@x#C-(o& z4;JT~`NFb`UB)nt4gT5Df1Y_V9iJJuIJyB*1IjHz6sE7p{n6toU4$1fLOwu~NK+Z8 za)3-)G&Z7QJV-U95^-gY;jo&=D}=sfnByDh*yNEw)XS{kMbpCYX)#|E|1n}3`v{?L z4Z`3N7o|?i+6E$KCDY%_L(L<3yVLCi=zY6R$>{p^f$UAYIvAo|<7Nt^kAt^X>y*P4 zrIL54{uy*=j_(TsbXZq8w>?Dk5GX~$s>p%dP5Syg!AMe9e zz^|1<%XO&e9kIGA`wO+vQgqDJ!fR!~!(A7OKk|1$`j1NJw-rNZW(cL(Bm1b0jEgXQ zNIs|`Q&IAL?WGP=91`(+i~C(0SOl+D*elgA?!ueKa;5NUxqDTCap5cMXv7EpQyn%0 zm>kUl8%MLQXe_>e{q16E6;52YGrwEc5-MNb7XEvs|Ep*H*TR3szZf?(R(1}VFDdRU z`NDT)MHb*7qP27Q>-4v0fn34)LEgwZ15~X5%WE-g@tp8F=#4UxM8{C9R~QE@K~p>L z+<4&p)yCt+6M0L-TTRZYLt-^2RW;UL`CPKiZ)xC0^7)?r@HZ}~R#&*RyzA)a z5%7nv3Jf1(Z5lodY$7XzyIAUF)w}>++@B|j;Dq=IIm1%-Sne8(oN`bnqP`}L;cgc( zDR4gj$G?E7Wri{+T0e!}p85$Zo2%U|f%s-&1NS?)mC!Mj8Oub*DimTe?jOG9a8>}mUkZ%^lJda z+yEpK;S?T_Bc}Y?ZwPYbY;UJON4t84Rz`V9od}r~7ah-^S&1*y`-vtJ%u=jjclcS0 z=;4wVT=KKw61mAV7;T#3c3zTsV}0iM>fmX4RvA1Kv)9(2M}+hJ`iEV}Y;CpKt=tbtmJIU(6>O}@P)B+_sWhTwRf=TjTvG}+yEi?!u zs4G184<*4UB!_+aosLvwi03s-_jlUPrcW6so60U`CY(K(QiQI@q$jOobP;Praj299 z3K|x96iwE+-$}== zk5Sk76c5uBMmWtRB1&*v5KKvRe9BtX3%7y~LmW7p@a?(=DPD>4PkaLUx0T=z+ssyOr=# zB2<9PG^4U4BL?|H%FH)qsipB(>}D{5)TZpg(JJi$!|e}6jY|Mw!PIr=9;{jM1}sN( z;b}v~`4(ClL`z_GNe`&AEu-2`gUy?2r*K7mEV>&+Fh_)xu>ZW?vMOT1m#IAU@qTp! zerhw(U2u z)L81dTmJLz<7&mfG($D^~{`Qvzx4(RsUX|+nAu1DGO0!ROK59Sg zd@@)!Wgr3Id&~s7laIOPy+Q>mtqlW+ z2RD>m>lW?hgfupVsZ|}1pYX^G83)u2G6t>z9uVAD3rnDye$$rd*fXwe#zpsJoA(Ir zU6<3Nt%cPhB#?vI!)N_8(|l{DW%o9gYZ$E7ZpH1nZd*~1R|s`$cGGTxDKmt55F<5B zeugj`SyyeZRl0+r`_*>ETwZ+ixd5npOE6+L`6>;u9C()5GqMt5edD%dsMi)=3mKV* zD*`XkS65+B+ajd8{to3QfNDgxu!Gmu6|t8|pslryN)NO&m|=S@jS0Zrp1Z>Uw5nT& z770yLU_D6g06SRQEi44=j;T9Q=;NRw`4{e6ic5SS{6q!sdNL8a%v@1>U7K4_}vtFxYI)S~jq(2Xa&L*I&)#Y2X}l!Ht~JPcu5YKyZ{rEh%_G%E+f4Nb0fko?r>MR=JI@W4Gac@Ku7%{NGvbKGQn*wqeKvDYwBBx#>r(PahWwaD3 zbMsIg_bGxG;m1koM?#s@O%GY8&T%Arh^$e8{;GGl$9T52tFN7ulk+q*62*> zs4XGt4&(~{^qTl|>w1uvy2JoBFmMvXHP+EFbCSK_^rmIcbqH~V`R3WY8N@$gS?BYj&lsMVOJWx>~~Bo;IhKQC>!( zmG_NEap_-ZVQUkbn4Cdq028UN3|Uj6oK54qIu}k49an>tlSwRH!azM^MS}Rtb4!=W zLCkK9`5<+eBj`IVj&ID)nGF@%p)!uAPP6?>;CJTH;5V9ppAEeDGDBbozY)O?{%i0X z&2_J0@Z6{%rvty*{I4?nc)8KNjHH8B=jCa14?k5eKWxTpjt1XyCo%Zu1AOzSjTSNB z0L7-!uA5Fgz?K54gSZ+PRSmvlzYToH1#gAac+WliQzbO~d{F9GLzZAtM(Dtq2K;sn z&*AS8^j(L)V^!e4ItKqy!5<-S@E-$X$wEtCxKQBk!OLj)`!cYf(Cg35V z_wqFB{n4Ob?jnLd)t>;l6@&4Fc`TC)FvbF`VgM`v0W}1RJP~zlT?P~%pK}SmP>JI7 zl()E#XR6OumZ9|w;?Mh8fRa+rY8bN@gO^zOiS?MBPu|uI`=`L_VF98Unl5)8%xwz8 z@33r$_y=X3n__j0$xUgQV|KB{Myz9WVZX@i&shXGok0|H##qOUyRl=Trl2M()cRIl z#ZFr_j}$IsD5fKP*zkhnQa7oL>hI>kk~VNsSriYQug{LuS$u)PLz-?8AQMGx!3fM(0^Aj3;^2=Ai|hYQwRU@ot|WYcQ4f5j}BJ zJ{Ij*+9T16iOp@`wKgVGth7MwHh1)ZTb_B}aWxB&gN$Nwkptzp-O7}8XBib1jz%Vt zSvWBslrDY7H^ejyLe{9f-HyV+5!@*L&hx-uBl+YUz9GN84A^{`vcVd29GBR+nRde} zd#0|kVOZ<3`$JKpUh!zxTJQO6_o{zk_M0ZodT=Y0PlgYN0{QGM_8~oS#-o=%+MtpwHw>oR{{n|W3y*T>7k4?YEWy7Z`}{OWmvlp zTJ1KBU0u-BC=%Ag;4Rlmvj+As)gfZ)(vF%6h zVR0LrTW?+{XJS;i;O0z&%o&47z_6CFU5TaJ2KOMO@i6WDz&|Z+!%p*GpY7khP-#*V z4MbX9q{thqL>R{Cv19UGff(o7ujgV;Cl!YW-3bqIolLucQ$BdpJWyCulz$r7%M+gJ z%p3Gz66ecvx1rVxFU`&X%`M)2sm@!i6nMR`?R}VWy2`feGxpAH+YSfX{W9ClRQ0Z9 zn5WpmD*oDPyiCj2GO1J<&Y-a^>OWl|M#uJgy_rZgsjlu?FnXO>uiFctCvynM)F`}- zs2*2b%3ReVGaR*aMT%$B6r|yWN0fW!)fTMnp^$!^SsaqbaVxlRLHP#D!u@mN%8 zs$?O~GzAdP6VNxTSB{+jF!1nhJs?P*%gkLu6ZIg94Gs?e&JNdp&9B)o7PCG-be^Vj zT?61&N}U8zvL07h?z*8PDKCXXmCe1_&Bc~ojm4Jz$U2MW<2-e1*NZqMX`z>aZ1-{Z zNYaj1NZNtyE%qTj9!c6!Nm}%gf!r;h`(Y$$M`Lq4uRNSlX*3oEGD=^zs3Oc&HJ&iZKM4KM~yZAmgxAU-w0T7bo?dka!zy{<{X17J|{Z94@ESzh-J&X zpRpHF0|{`HLwKNwp2FFmaJ$0z?GTaeLLVX1dE5joO>8)Jcn!;^{O(Q4vZWHZqIxe)kTha)nNG={wKoE9-WUf+a}K zzyDyYOiL(ZQWI(F%UlvG^Ew^;2~rjUbjrCCq2b=R_^~P-xY>|UM3cczj;0?#LbjBD9eu>42?klcI zX(fBn;_{6W4_z+_2*Fm#`p+g7X%Q1Cbl>Wb79Y|+IaiCn;s`q}ELzdHkZDRc&8Bb9 z-Sb9YSGtuPjN}3>ywZ+I?8C!lUG=$|gw?Ame5DHSKaG=!Kq#|zrJRmUD|IkfF$>HJ z9>9$%ydG>?*(4a-OMIXW<^$bl8tB`t4_9-4IaT#?$_IWt%i;W`r^FBFb9ET$seYt2 z9YesfH?yFqgZoASfa!uHn2fgH{nu`_&aq*y(jsqIo!x{p{yT^&FFZ8@jl`(?oz(Cv z@f+929=wL3kGEFopa0azpv*!4uY7hiAXo@3#W0GOSZjU88ezx zg@0bG73dX8A9g?c@m0J)C;et2E$Bsop0heS{NI* zwrq=EvKHnAzaQGnBlunEY95iC8e|`6hS*ph5w3%Tgg#DZ57+_f_h#EyLYSz4+g@tF z9GTWtBhy|^9?qlPnvbFutBW#~+G2ejJnyMh(pdEk%ld!02*-T(yj?5w=fY(jPn?!%xh>iq&8BZ#{3u^C zZ97*)V@Tcf6&52#yDQnqdAt2yZM3|yqrZs^ZP^P~+J4GDuZ$TrS4J$n?Przz4 zL3YEMXaeipZ&C=`1lAmV0)NLIn2iz*-LdXPVFGJ9`q0ssz#5y6YrE<42bRkyJCGPR zOqii)+(wktX)2u-N<^IG9n%$@q|8&YHM*_n9O0RPq2{D^&C&RA8|39cBi;s<(VHJk zM{z+IkM5b}g9mf$gR0h?UPB|I&Q6z63uvNq9w0dRWOB=M1j@)jC9dTlITc`;HSK;l zWdtl1kO0~*Y+B|6?a);1H!BDtvzdJWG)#TvLBVLqpVBYxwDpp9G^3HESRzvK?%Z?r}aI;T#6<`_Yuv-AI zNz41+X4I;bJC$L3Y9Sfmfc?74&HQwR*u?a8j^0n76}8nUPoJ3*yMZ)YxGBXo>AkiP%mARnRL?j%u5py}(^?vi|wvK=FAm4DErsu9{JdWkL~ePpUgJhTpT*kt{lvT#>Z-{cNq2n_Ctyhc1i80nUXQ`m zo6VRACAp!S9>XhpIeyO4Mx{@Vl@7PPBuWp)O9R2E?S^V?|82bVDW0ckT-ggxY1PiX zM!3YiKc$u9P_1V?XyCr!RGMZ@PH}~ow4U{F>Qn#H`Tf?^x(AV&)S@*Nz)7XnPMuxA zH;da}1sbe7RrD>hT}}OJ6*Vhbjw;gi-zT~jNGWh~XnEGy42p|M0}Zm^wN{Q1#vt2Q zm}JO^ymWNCK!h}3biDJq|IJ!8f5Ej^$64wxa3NBvQ_&6fj^7q%BUvqh^ag9Xi74;> z0$L67xC!agUqmzM;cQB$3?OL}O&vd8VEW0eG5zFL=_fsz13Ohr(HDr8TGNgW;J-8V z#u`!Q5-qjX!tPiLyQ3CtfX2Hqhk>6YX`FZ4C*ij7l;;~z9Bti@q%C8Fe|dwatsjMU zPp_e}Xj_W-H+Wlo%sv_1=a30~C-l#dLm$lmtyE&uA)DTWow$OOm8?!lmL4@2K+5Ux> za#W6qrMfb{66X|bT?$7pJQdAOTFNRxG;;*cYGF&)n>7{`YdqC{BOW43LOcn@-gjB zH59+=>C&&&8iBU#T>L{;sgU34mbUXt$+9PuArd(v54f`F%TRip4roqrR6?}10hC7b zF5zk$Kvj(CiORs2y|6Khv#Xrv%bXdjd-R^(jt>d zVI$&GD{@mqxla_rxD@el6(LbI+l!Vh(Zsuwy`+z_W;TwqI-fLD?tf#UDb@ zotR~uN5CE65mL4xW!u$V4hAcNXGj$8Hf?3POl5QWLhLrWR1DF~)3v?b5G}pUs$qWC zY0)lmjp%XnEQe(uJ4(S}DGv=hPF98ooSN2oOJ9Y8ZbR$u&3 zVxl+DnvXcmcG)U)U;lt&VR}mIAq-!;C(9`WrCJPxq|goR8N6vY(b{So+W~_))_G5d z?nmiy4QIRm<8v^xO$XS}`MjGlR#y(sh|^Z(KSzet`D^Uck0aA^jo?LQN4o*ZP5<8{ zEZriu+xv1Z?wt=N2J@wINul6!goz#V7O)4KG}pt$8?8*ViffXqi1V7vRM$C9*X6Vo zLkHoYRFK|(rbO|zuA>AWFi_s}P;NFKxar%8Q7%f1GUGJ(S`QOik2Ls$CjJDOyR;Fty%@m$%kk+GZ4+_lM zcXwb~uZqQYnae>_A3|*&lFS$mMEh-Rus0OXwjvQE&#MB-{nvU(-sb5D!ZI(rAgLs$ z#Tm1Vhvo^%*M2Jj$-7-;@fOzmh>%>OdH;|juCj>ij(98v{2Ss_It%buwhR~6c_0b~ z0wUyFlgTxxvd+g^W&NTum*-VfuCH3TUX|Y$D(e@O>t7^^3|UmMdR~ zhIHZa+4N9$8&BI#Y+dlv*31RiBVlM(;KbH@WPv@}nz<4SW+=P3;{kj|Lzxqc*O;9i zt>HRM`WQP#^R6irKH}H#J#G!>xm2G>@`(oP$gQ(ycQjX1=z)U4JZrRkscoacu3-7K z#=H6~V8GFzl;z^RjLZ`N^2c}-BC>E*URtrCF{Pp+EhDzk9itI-JvWWi3g}M}Mv~3x z(R_m@4c=hg5_>_EngJLd*%x!)|I0Pf-ROULSb#*@!imQc*!yd99~g;|JrWWtmh4Tm z8gEZhl&!{J(1nfVPff=&-n20Armr%s;ul=A^IWE>BnN$;AJaT2szy+HSh`A1kCwtJ zuq024)!Y)9u0sSc6>hVNdbH$q6&0&_C^B6$s`yT;s7JG}5Qc6~VNt54DndVeCg%Hynaz>uFU6&ncln~tNqJ* z+xl>U$1mC|5QOLb_F8Mh)#MZ+!eINUdZK|Sp8@3_E$KesN9$_%28lL*(V=i_wp|0l z74St|0o#ex5|EN_+m?j46ngma)=amm*pVca9kdn}7*4{-#qPi|rIL@SVE1{6<&8P$ zw5Bk<&12bx9;EQ?qy%hAz&dHTxpCsLmC5r`;YKjrOh)!D6<#~TZA$C#EqZhF$maCI zOdcmr-{u)oT&;e&InE-*%^A%Bfovp^@#RP2jISe)WKttp7aNIQ#71&im63cdPS857 zVEx4nN3Z67m|e0ArhYHLI4n~ir?eKKH>s9O0rzToJKtmHqb)ul$`>6E;F`*$Co^1; zNBZ563T;Gn6-V1L90hU>moFDuBUM&v7ol7W#-wTDKOZutav8&llJgaKrSQ1|gDlBb z%XPn&026|yWj}Jtdi`=9S_#xTe7(Jy%ydgl=Gil!5Fk)^{lAFI}PP_Z7p}#v`R#bg5-LWOD5InD1%haO%32V zJ$ToJC6@6cuuUHA8~A}y1n(pzFRX7p<6*{!7B_nY(71&rsX-{e%}t`wcj4TC)oUU5 zHH=ec)jEY*tYGz8s06BoD|V=Db$qN#sD+2KJoqKvlS^J{yk?cHG3-+!P%H`AcN{2= zcc5UKr`#GYV1Z%@4qQ4qUY~?JW_+>TLJmQD*6K_19?~I@;(h#&XC>Gw>V<32R%Cbd za~6VZrhsLP6uNk1*cgyubH}}$>>NRZ%5K}7y>2*n@la+>IgC%oyofbH9r3q~^%cJV zZ|DXD4k)f#gp=OxhLLUB7+T+~6KBSV^&N`0s3TvD*d6&`G^khb*QfB@PWtB_Q;qkc8v? zD$TT}vQ6yPMy(C`uOYrA8Uhhm%Pr{xGg;-v@_9dN>ug=s&aOFPXK$NNXHC8{H>KE6 zpJ%m6{2&~23$!lw`8T6(37gjGb9|^wH^!Tqwgv%B2p>BzdWosDA7C%() z&4>iiPww(~s6!kiZV33qj`vJr^;TF*Ghy{+Jcga7a@y~S7V_{Tn*PjeT;j|Zu8#$M3c_paQ+uKb9mV9=|<1Ux-MJ-3_p0y&eg|oY7z6&E1jA=rqf@ z)?+)Za*!yw<~UUgaN=@Ad%@XHkP}bzh#c|U8In)UO49k zAV^JT``g0nDCMnjZT*}p<*l7BczW~QqHeQ^6s07YM23ri94Xx`2UH5=2C>Ah ztxnBGbKuR_r?nF0d2932x58bqmlE*z4>nX1ioWxItCXl)|vvjOWl0Tc~ZCp@ao zI!bsOo!8^M>^$zD0D-d^p^&8&9O8jR9Cm+9I);J9?xGma?f&pqv{t_#(7dPcPlts2 zW8wJ1E!1~m=yoPyXZWdb;Wh;O81#;B+3u$B&vrM3f3~|R{ByOtDWdA=U!l78jrZib z(;An%n}T0&cfX9zST&;C_vCK5PA}a?OyTEpyM=MLZHUI~lY85EUlny?_f+@}tKCyU zkJDGGe{>DkS0>h1Ceas%8)!*qX40!&2ZGJZqrU9U3g4IAS>d1U&I&zS=#lH?6R}=i z^mO+^>{FjZ2mfb4za*OnxW=MKKeYF=u1i{*uCW-vi_SF`mhX^|=r?b{5^cFXvo6=; z%Jrb;`D-ltcw>6PfF9g67JW3MYb*ffqyckCCN|etoJ2!*sRIsiw;R!?!(!NJPVtfb zRp@*W(Sa_g=uqRs9D2jpN?v2JKZJ9AsXTa#@zFGTY@=fzqX-EMCQQxP@2nfrSTy3I zup#W{ffO0eVHK{iI0b{xW@Cn)W~FN^_6klqe@lhE${k_XSm*~zEvvrQ8r;hR&~evT z@DVs!j)w%0QvMnXCDd?}i!ncUjfLm$z`*ODCMzV&Qk~B*BWxyH&UbCpkG{K}aC7mP zb|*igtS?s#J8^99H4iJ)sRs_jc&+mdp^)C|A1lpGCNFHiZa=RIdVjS2 zeCHUD(8czV`NM4>W!Hc^NRW@GfCf<7b5z@zt~PuYg{5DTqhJ(qp@r%CBEJ6|K@H88 zA$73%APWUA?o$mAwvIm*x<9PDWIgK*J4i3rma{c=wkR^y`Ci*da1CEz&ydjw=cKJM zoe2Q;WS&zWdT>gTJ^2ebhO#-0GIz@>M1`JT-uDajbASjAhTOKvVm^$Az1|*;U!LP0 z;qNWFdx%&O@%j(y?jisDI-Tn9&zI=v9Wv0}?}5&O(2Tmi@`L5BU!Umu&s+l<1yWvZ zu?z1`Y0E$}UU0SX0;xd(#DC7_hR$R%Uyon12Mgbx3DC2JctO|#SqV`FwTdd19~~>Q zyn);xX!?C2{?0xzwrEi7h#@qFAq<$)o(VU?%TPihM<^S8eifX8?6u!0#sxpv3iG6% zX;*vn*wr2pq^^rWs?m;(ghld8Fvsm4G{fy4h`64L+daCjVDY)&!~Ry>@nMx>%ao0E z{yF?mWeg!oM{D!G_%$CrRj>IdJ=4Zu8HFuVE1}1=u|EDL*2g)CK5!zb58Nc79@rHD z<}I30{EHt zN9k?m%uxB#;av-rdvJfo#Z>R&`n}5 zCSGo^c@N(h!tMHVfAc3P7p?K#u{C>k&TJJqpBtwOq zRRFSjNrJU(^Q|yd%X_Z}^4`0!uUlQ-`;+yZEI${ex^A>q_~moo+tZuUS5d-p->a#> z>VFUe)ot&v{R&-45q!j$YLt|=D!u>PlpshKhzartj?uiKnt0&x#(pPGwEIz4Y62qfnJkEb%!f8U* zs2^UQ@qcKTS0>E&XZg57zR(hNcER@xO)|{##$iuMPU& z0yy{A!4$E2JszkNIE-R+8(-$O|BGr;$du3wq{ zbxpNW{vTK3#E2ehOAYQ}A%9wxR1+q^8D7g1&j@;LbAuE0m-6Fa__2i_cLa>);|gEW zFr44)=2+qIdpV86sKZYbO?ElLFC2OvZfvHoXX10r$MV28{SQqMa?XQb;XLsbc0>E_ zSF$dD#(x*{-#Y(S&-zb!;A8Q?=1*i@iG{DrY$8oM9=d6B6xyQk)6;glb}k_O zl_c`sUxqxcI(}pBjGwi`@oHj;VH|7z_@93s?(0Ev(n4|DshA;4`l;Qqf5<;J+aH>3 zmp0(IC!6@U@xw5BQfY$7M^`Apab3!7_y`In{8R#4%mL5qREb=Uljc&M)VG!bhWEEf ziA6gAa4Ps_H58ZsY*n@yW0n2J`fR!`ldj08txOfRxAZ2-AHybf#tw?;TIqLSUo6$6 z0Lfz=>?D}a^`8;|#vSuYFV=qc_{}y9xEQQ>!Xu0&zIOMcL=mvD6dbl6Iok)v9$uz9xf+MP2DI^Q)9yWeVJ(A z*_Xciy;~%0d3x`b_oTY^QO1(IX&A#DGk+qkSrBlF&vA`*^cewoPelJG6EpdRX0G8E z!t$)#rve8Z{iVA8%?cbm`{!#?@3dRSt?6&_R&xQNP)9*1T(36ruws9a?B-*XFTsfV z&i?Z^Zn#J}5ylx@O^Ho}zO&bEY;KVp8`CQXAq!`55NfJ5C~-FB## zXgJ?y%Gv-#3oy|BY3U0BA|l-R7{icl@-=w>F zRWHExg})Z@L`C01Q6PrMooUVN5Q$5E!i;v@YR_O;dqnsnnfq2}0Ba1WI}$c#b8!r&ea!wwJF z?{E0ulE?Pq3*iL}%U*muyuj`oHV(oGkNPr2ZAV=oy98S=!&pFOM-2&j#ukU%4RF@b zvcLB-Pn@qhe#|TX6lpa{*v#m}%RKu#-x3~=Accjd5bKyxlt~c@YWN}z zw6MxVQCzUb?mIY2eYkHyVSGu!9MuOrs{(k+@&~fo(XX7rmP&=aB?qJ#<@t8$jIX%* z-5+EIG!1de`=XjOw-(q#Q%6Y%!GxB0gXqED55K5s7#Z=ZiDWh=P4uEGfU_oMs6+=3_t zqHGp1^gNt>NB`SxWe~$0bD7FqfK-d)@syGux>b7b2jBf6t&(y}vLm7uLIQ~DQe98j z3W?qet3Iyjp|{WvP4Y(WNLjXi~l;v8jQgyIq5+4%k#bS25M6J`<~}+XV+$zdA|pwu@z6N%_O|MV$Eff``Sl z2W&L%1KH}fqQAQzROGU?Z@A0WfCPKw1KuI5Rt?8x8V+>yv6(#}reDB}9ySGu6?zL~ zueQ`(y~5{)?y{?$gZuHgaJTYQ=JCve!pXM@+bA~8fC=*3;dH(UM`uon=omQPF`#xp z;_gdET{ zXUhXab*3AV+qjol+KljaQ=E;x`-7Jlfp8u~xyn69O0Pj_TQsfG+F5ti#QJ0z;1sMY zTyU$f#21%4fZZq+(?7F_JDLBwI=`*LV_*4-i{5l39{cas*UX|T=+}rdVz(0?O0wG* zeL6PURM+RN;>2Ln`EIy8ZS+qp*JjN?Jnb*S!`s8dJHo@e+(Wj;=wh=L(R2D+Kb-7( zA390|sPrEhJ5;R&+g=!}wYQ?y)~J@l+o0UojY0AJU`LQ&y2N8n`PFvShp(6$wm!Od zvUFB#jBOP_{g&y80R`&Zs>|k^bg+yxG7UP0pVilYNB@}^26K*g<9V+;f9~;G>e8?R z)82C%c=wB=an6Qi|L~6_~9)vq)2sbib@oI`PVw{k7o))Vb^jX0z0FV!sGGxFD}1-Ht)^A zYFA;yD?CRtgf6R)Y|essMe(Qn&y~}AG-;@j( z<6I`^hN=C6!twFRrLUz|&b3krMbcaJr3=mc$qRt+6ued~BZb3%o$Hg%ur*1Znag~JSE7AKPN*jhn9 zZM(`2BRL}n-VsR?&82! z!SEfu{DImth8`~1p#rX}y+)n{SDl3$)pd66u&W3p!ov75#f@Ca^$|>PZ)`gCM;BDt z(v#ghw7@LpZeg{xVCNQH3tiR%Ba95-=9@*G(NbM%1we>Kr=-YM>(P#-&B=mWN=Sf# z4&8n-z{9Sl-*8hzf4&agXxE0rDbnsQMlErh-N|D2R4ul4A4Q+h}zlu_fl=> zd7u2k+B8W0{k@&vNv-QAc87acq;u|-NA;-f@3TGkeKuMe+sB?J&EIbniN5;L*E^H< zqiFebhz?8okk)MNdVFD@^{>V*e_)~Jy;u9)`|$gGwlxF)uWa*&o)Xi*(+EiiD?oAi zK!ndF)CT`kn1pCds%mW_RudfMc+#@G+m&=-cDMX&SIf`1D;9)nV-Aiyjmsry(-S6U zr4c5W7IExo#XD^@_$>1!T-kF}HxjB+J-s22q1nGE2Jks70^Hr!!qq6 z=Q)W?$3o}9rWNj~0wR$ljr6^X1dwd=Qn%T&>tg5Ao$kK)XC#=%dF=EeV^zjWrj0>B zgl<7tHMR`KO2@P4MyYreq<^D9zmNsLAGgc>rsAB&OTUN6P|>iM}r$H0$gWYs&~R@Of{CL4lyKjee3QN7o51Z&DcJaU+GTb}vr zS5%ZY!aV1( zSCZsdATqVyN=>sVCw)k7iQ^NKWHkToFNfDRoS0V3^Ws&vHIIteFE5zXIAdE5HwTid}ZhfBC$;e*K(}=#tL|1KN%R= zMWr7lrgL)mA-G%`m75Oko(x{sT1Nu1)C@XEx3t(OTZ+EvJQGmI)54y^JPL< zv@!ovQ-iTy=0Whjq!AS9Aa5+4CFUX^v2;UgHk9JCpN2R(2J8xAAHRrbNVH!@8!hJS zCJoqCu?D#oUu5ZZg}*HbYaFWJzyRq%n7jrZ@Mfz4@u;XeB5(=!7HoUIBtZTI!M74g zUuxZr^cUFYqXv=)%+uwXaF0AVR)K7t^lfY<&xgzV>JVHKRHN1xIwS6at17z~{Lfzz zgfO8g6z?|CJ0D6Lp5H8oDvNmm9HU!ZT+>%sth`WOoEv!~?1z9-s`Eq}XMo?Ca4ttI z$h%?O77K>X*6!!F%BhY&sl^+xCLHr*s-)x{5NkY$nr9H&N-D`AL_Fu&7xasvY$_}m zIjcY3+G2oJxY=3@4CEuB(xf2XTYA_0rgVS}buIiKqiT}rYC->w$CdFZ)4~VGY7SIk zHP5uJA<$k_iNA^CfgwohhS%VMolPd210j~>d&PN{$e4utFpSiVUtp$;1OfTiK7<=2Ricb z7<2g1{+JmcZBPSJ)Um-S{5^pgn$NkNamW4h9h2)T_=DqzejAKMlhNh(B*x8;9n_T0 z#fEjL2+Srx1RembLG3ofvLeb92i62Vq@WB{oH2e{ik%D(OQVEkm^OpY|Ep`wY?0Xh2)|4tB`aTSM=Q#5)~AJ0@_$ z#cqSyOZSR(hp8muS(ePEuef}du?UrwLHgUu_gU?mJ_$xS^=*!}$qE5N+s(|4u&lwR zrNCK|+^1Kc%`DL=OdmzM)K};$US*JhnlElMu7Ebg@$DIJsEK8iXE+f@8XE#_Lgz?m zC~-pk@n{uRP+?YSkFc@kb^e{Gzm?TWd(?@Q_D-oho^pncn7LHau4#p>dipK)<4pGh z1CLNcM}paQ=cpcYj%vwHNY2;<@puzr6GM=x5x_PW2OwSvjDm?mQERj9HNFy7sjDQt zv+T}9C7ZMa**st|gaE}7+7e3*>duIZNFPe=yw-_3x1^B(;7s2ve`EZ7H79h={*6hw zx7r#q_obm_!NGtc&yaq2pbV#NoHbIc|;JG-j= z#~qX1Hr@n@8E7UMZ}bp@QA~9d0%O4p(?X3PI+L2EuNTKnUr!i?GK+)SR;eQ1Y32D^ z%PhsGSs`y2&Tl-371#EHZO=2ko-4j*sr46GFC&@$hl{vkPX|cnA1P&F4tJeeylJ8i<$euL%0F zWX%g*Ly~;_RFK_3l!%9XSX?4s+4c*pZC2vspnNt^*R$I^fHv-E3Jqe^{W9AJHNyQe ztr12QR%fmIUh{Jj7bNwOmZpbij-ttcqDExaWIX+=F;OSu=b*PWKhG-3QBc08zVm8^p4Kg*e|%&0SOt_ zCr~Y3Lf&fg`!u}a^l%0e$B9$SFY%(;Hk+C6kBu>^x3Tgj^LpHIl7mjhF~nXcnNX8_ z^N?_r=EWY82B9^69gUaA_?JK{)4W@!3+6+qH)We|5=b!w_hwseDzj-m(BEd>0mc|v zn9u1%>vFeAt=-w?-OeJ+mC*AY5Yy*`5iQt`dU)h{$6B`u?fN<*q))d&6Uc9I=9fp9#*h)78r z{4{v;%i4BF{x`;r3w}={#EDHBb-fbm+SU9Nyw;FPqZ}^&G>CN?hi}lh>j>6?j}Y$U zkEs_wX9bh4e6KGthPWXIt3iVXW&3!D(NSNr*o0}~6VgrohqXQIG?g2r30V`k9c&DK z#-3_pGZxjt$_A3<%A+bn#tc2TvXI1f&>P<)dQBRuFYlhXZ`AZRn99MRza1>=Z!i(l z-x{sIpudR?ob2OI%WhsrBA5FbZ~~?_afWl4P*b)G8qN_G(s`kU>nMj~a@Rz9&5$Br zc{Ln=g_1LBXb1CV`vQTH+W96#rdw_pfP6w}N)1~ncnRJhsdYEhM5P*BDH%dD78J;D z<0!bxrW7MGfcfh1_3AnCHJEV$jlfsIvy86?tKzFhM^KW()0-{e%y4+f#sCrIHQESy z!9tLizD9)DR%W#L2|EBf0?%_vF_@%7WsHttF9nY<7PIE0ahi3QX*pt1a2KQlcdrtw zM!7FO+j{4voR0)qJ3x;V7ub7bf?=|6)MIiC79Nu;%6UwVmGkzqhK;9+Z!;s zw~WaMuz<<*7cdzg+H6b)fJ-{^%GsFeyw|peHCgIAl7Wvnv;)@I@I6H>pz(D0Ue zP8}@3HHfe4d&a|%0C1aBr*xngK-hP-y~-n^Sl-z`^Tfudd&;b)*3^lz;(sK^uLV8o zYVMu?`1cq!?Ge-Ju%7nXitjNs_UWFPUraorJvPU>_CD5>(r zbAqTsF`BiozXvw+^iE%A^gRHsDN84@vbc1@J9ZTQ*C+WLNvFQDDC+al2>}-j@xBu5 zP;6PieH$U{#>P{fpK(ZKrhw<0%L3m7_kcUgQNHLLUGa8_CGU6c?gyb_?b_&LKwt$bTMuA z*tn`WJ6>&r3Z~v)l+K@@0hKpHXR|3Ov+SfN9@Io9Ou{iD+o#$$+vgkY%*Xc6E8&^7 z{qypEk=ZTQrhuo181V46R#*>g*&emnxM`_*AIvpo+gw+@49$3!3%I&dw;*gby*7b| zF8+GuZ2V&}qxpo5nTd*!0LC#&rC1`=vXwDuu3caGw z9~-@{uUL<;SproyEUIaw^|`3`q#+?S&IQLkh>JO7mNTphqWv{N6a9}jC=!leM9A^0 z&i@ilF2(=?BJyRJtJ75et;o=cvs3gMCn0kNe0tFHih5^;+t>md_?<_f#j>*$=C_%{ zv9g@5y|2LAp~Y_VrX9=N!PH}^4hA1fbx;txMs1kIlV5Yc;A}<=@{&Sm3bPjD6f5L; zWUBLWQ{0?+XvAYUvl;(b%%x)vqwn3P)-j{mAU0YUrjOHW*maby-}!m4xkzpePEP*I6a~Fw(uF>)M33s(q`jKDR#jSGWCY*qmTW@{IT75^W^(R&< zI-D|Q<7BzCgPrPn4=QZwI_3~YJhM7SxwwQ6Y9{Pk4X$6%@rz` z5JSd|U@KyXejn=nzpfT`fomZqPtL5M_ey!PsJ>Cq79TXq)dCVdo{d;QzKsSAy;aAhg zzwk|s{pr=mFSIs)Px?3t%CU0KV`E(~2pHDyNq?^{Kh$H53Cc1D1Kj|HIGC|5J;c}+ zF=a8f#jhCK;#W`+naiv@PZ&pTpbW=F>-xdC z0N{wBq?ggMn=tLzgBmnBvGr@V0H)Sg@Dt^E{;l|lE}r_m@)O9fJ`rC8D_YM>;xAae z86L{KY{qRccwWY@7%$^j;AMmW!KDt}Pww{FHZF1YiFmEm75&3x=44}^yj!dQKIGX? z^bo_Vd72)MpE1MV6F;lBc~s+PkKQF~!gg1@jaz)3iQ{8o&ydNnREJECrMi>>!~9v+ zMDb3onAyWv6BJ_mY?d`KV1)vQf2kuQuVfi6RI?;LW|fF@K$U=Qy$WVlWNPPE*m;|c zdaHvX9FIS4jGYHxMyN%q^BuMt=wHhMee=BBDBnL6UmA+AvkSUTT>b$0OdPcsP8!*i z&0%OG#_RYM<8}NByl&d44&46Ts!#p)v}))NgPe8@a$5ch7u>*>8n30~iXEaTwaI&m zgvQlt55#E!I^GcVwY;<{#tmt23d6G3gqZVt0JjxxX>PoarJM?rK`9FH6&F+{#DsOxD>NGX%^t9b@|LH&M$xot{*WEZfB3SDXx|bw;{iQ zCpWC@Vm$wA_^D}KK??k+3^AsZX>{s}pNp@=NjYLv3jnufuFZh2*}Vn`IOYsbNbYL1 zt7e@4EvcBlVRD_#LiS8O#WgM$6!UwqXBsN||G!xOc=h&Akv;Rm^|+Y%4m4)^X=tT1TATXddc1 zWHQ6)8ykW$F}J?)hoQ*-d-?`!%JhZpY%opEQ`;bt5b-!mwRo&TwXpLO|3Byx%EW@w zgpZa0zv}wLu-LGb87cnS9@�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

R&hqhL}jXX^??vaEMA_k?g(_ zoEX?{ zgzy0&HbvPao;A}{i%@8hapg+JH7;A!NJ}wS(vi^lc$fFXl1tuj>-v)~l|v&HnLC_^ zz<-+Hvu8+aPob4?f_UlgfOaBJ)|by~4X@%~0Nw>*(D8cPsz@EB@EC@elLA@b^6a_xxG^!nSAI z&kW1z`I#l8B}vm+kO%~E{J|Wf8z-Pyurd9^Pt$mK;X1jB2T0oF6`V&!3Z}JEciInn zwDL-`(xFIKIwQ+PYFNT=K~54~)7%ukn(pZF;&tCf4y*E_1Tqb(=L0wJHA6JnBnZ%5 zOB-6bM4|0_>{8_0@HegDG_P`?%QbbNGhZQI*9pa?LtnYreTlbw;F~lImZWFhEGHQHX($U2)*o{IMxM#;3bGT-tEp>a0|Hy*Mpc zx|R+-YM6VLN*{4Uy*@N&f83r5A5TeiOJjZNr2eT9gxQcPXJ&rrIK7=`T4L4&GHW9V zPzke(*#t9~<7!BAYrw4*Azgqe9`g0*w%jopHF`n0X;a}etDP z`ie9*VV+^Z=5-}o8$GL@R5i_psPUvfdiq*v3Gjtt31!ksbA;R!h>+l#)oypW)#Yj1 zfh%pMhe=l!a0Md_A71Y<3%i?$Pq2h)t#hT*vHTqj+6A3eRNJvuQjrM^C5|>!KIPyf zHO=OrRVf}(NJ55#KjGM&Ax92@nvLN2xq`mejlDo^QGVQF<9Fpl_=?k z+PFc|Kb1XOhn_U3rQW5|Cq*kO_G@^W<+^dW2Q(Ox56V|a;++vEfhlO5Ju8!`p@Xj>#u7aR z{j02rmHP3}!XqZ5=HLR!1o{2H5lSv@P|jd+@F61zt;{68uUXA|;2N3qh>uXBb>_V< zbx~U?BGp;@EmEsB6}8|pGEuJhPeb)@XuPfwnq`?+_#A^%o2E;z(_(KSR)|xLt!^O! zCNPkUp$W-0+GweV3J_{F;5llv#Wv*oLBuZG7~fJ^Yb@Kes;pF;r4tIY4W1B^{C9A; z=LKWF5@Cn3{^ge*h=ninxR6ph$E*71R$GgM#}k^{ii3}EJvMlfzp7FFMU;W6_33k^ zvTDMBgU9rSza*VrR&~t4)>3#-RwMMbrR3&Pb-i3JpXP6IP=7=1;@}yTluz-u8di1k zInQ2$qA*=OsE3*;bFGwlcF3$G;B>(fa`x(Qv-;aVTPP0R>s$Rr9vpZ{DLgN$Ks(FR zb-$n{G)2z-9)7`p%lg~@#R9S=6swlO@)Kd9Pqk~sYD?;af!%7?L64(054)BWn}j2uJ37#wxe5vJnc5#Rc6S&yz7 zzpz~Lm4;x*PyN?rX!oqyi$;)}E9-sZJTMN@fK((fDps(Lgw%8$k>R$K5D<`2)&~@` z$lqoU)wU)vV`rN~XTxovcTUrN#}7-1nXx=vVwuDMVvO*pR2DbOWq#0#BSE;_tkV&> z6B}~e+yP63z?7g|r?H1H&LLG;nGt(vRC0E;{Ow=3I;n%2i(*f{NoPqZI$1=&?z!ll z8)nx{tXy>F)l*W(Sg#@3a8W57)xQm8`NT?0@GP;?Gt$-JPzfo|yGpE7l3HCezg=s_ z`6LVWJE9A)Mq*|7_+5TWTEG?qQ~oirvIjj|Ngpum*STs;=u|SL%z@Yu@mY0KsvsCe zVxi9)TpU_%Oi!F$HZPi1nnC&|YHMyRm(9;j6Jw=+HaX;I7Y{Xy27}qcT?=>fznq#8 zPP&mSSbNK*o7zc*SLK^F7muo;(oI{6NB#Qlt;Hd~i2_fb?1RE|<4>j=)eZ(XPxMB( z0b>B;XyaVo>p%QgZUo~cWR5E1CuWX*PQ0(o(P>|hIXdGDGDl~1q0CYF6@nop8F3Y) z5p?Zd|ld;zdJ8|3S4#Rvo&i3)|IX<2#u>e36|j=IEur?wHA|@Z9SyovW1| z)e-Wew&dd-&zLVRc5xP3)1iF6INp^Q(D70(mSyd)u&hWD&%TH85REC@u**UbZ-;n5 zrP}{&`QaEOtK$`9_~8>=6!mq}pnh3Kv~=BTzPF*_0DcxxjfD`g^(@8mh7Oy!i}`eM zf}v>K*+m>Mr~WOP#ui5^mywR+MNTPioa{KTE9`UCsw?koqkOlJZ%YT=FNHt(u1Vtm zNBO+ByjEF?60^^e&pVHGjdaP0ix8*s%M&JVsm{B-F@gx9f44w4d#Wm8OBqK}$IQDTZu zs?<{Xk6pUxeBLQoOIXCT%H{J;?qOcd4^go-gL zUz1Dp4c8N@N%jFcdz=KPeI=wl#-d=$fwfABw!jo z`EI6t>H|j&f;{LEX{XH`<-nx2!jYc6_V;_S^Nh zR93bA;cvw+q-Mi+;#V+<-c>SO3S#;q!KSo`0A_fuh)Mue6jB)YYSu$WqSSR-(-&tv zeNh~|R=_f{>iyNeruW;q2)$?U$}WCb6^l<6U)x-KeN*xKDi^+=l+^Hs(=y`A>s5c> zcUJwrHLC|;!{-dQ0W~@VaVgx^dS6QdM<*WjnSop!Dek%}&=^MiG^lAfY)U0-pCBdk z*pHOD9*RQ9=`ELD`_$8iEf=Y>HAu3I0Wf0MW`W6{)LSCuupD58Bp4CxKQ~D*otuK3 zJv1t5A7YF#-n4!F`BcK&jfxrD39zA}ndeeZKEW~t>V%2P`|&7OYqQ+?xM!Xp!4g{k z1IW{c%5HyPRuNVx`Z6Tx`HnYkSX+lid*m7V_l)0@iBtJYas?d0&VP@I+BI}`%=ahg zg#8=WAIc$Yi1S+r+aI&!$0)*BBZSNxJ7HjG%6Y;9Mq-j*l7E{NqUSO_3U!%8ryy<> z7wp%K>wJ%zs8wR_SYP3bVe>+NFeGt@4<(o?BF*r<47MCh%-I2K0)Ry9T7JY@{eAYY z(za#+lt>*6OKtg}4^jvk_!3aYEfWVsUFxsqzuKN{{$wc`s`P{8D8R;EYE}zI`=XY` zwR%}xo0r9H^s=~3a)EUCA8*lFlnNJYGQSxZ#4xeH;9K_lyn_=R&9dENIOSXRC*>)L zHfNmzy)vGfKi?N2QTYQHykDpIM*kr2M{AmpjO*1{4;7#XtDDWvj3r~mygY%32Tr?Z z!no!2@1)yik37u6qfI>O{%J0qr=o>=UfcDjj@#?GoAXqmw?0h~WUZK)!_9KbVYXmJ z6JL)_gtcW_?jn0IF@w8VK96 zt^r%m)vLPp%NM1ZK$L?=h6`4k6^qRUTN~$Oo(TT4Ld)clUW_Pv?fu!o=JTgy60-fR=PBY1s#|#ugL24h;!A^l-7}F(RB&<;e)`&tfAZc3PlTctH!SRV6!J$Pr zxL-AX+_I*B2vH(+=GkTwzDl#tm47X@Cjj(N<|$)#r4Y&Qe-&bs0lcK)!7_V#GHj=h z73qq5BuNl%3-iQHSes&;im6wixqydW-oBaY%9emjO@%ilEiNS6#S9wmru7?PoOPWK8?0u`83+1wRj`if(6rn zS_uMGL8rhcjB;~j2SPE>cjT;5VovBU;tMc>WZhEUzU|~3 z#D7#tg5mvai_SC6;u=>wr)X%SRPMw{9rL0ykfu)5OPqXu6YCq-nvZ~yFqW`Z(6G49 zWPmLmdQ{_9?)x(hSMZ@7Jbi=Hk`Yh&I3zZq|WT=^O%`Y3DK|UGD|CIDO zYoOMl&rkUw*3fNv>O`gfQ&DFNQSL~cuUL~h0cAC9{yrx{gki1GCTzVvZSKsiuk`w* z8`6-s*Pr(^%+PQEjlCTxb;Ws4M4({OQIN#AN&|_rC$HqT8nQWUJ&Y4^EAN?r7PMUT z3{OoZzjL?Dz)`|ayqH#w6KuriBYlA|4{dsWh+E}FaBJ4%cCO=lpU3T}y4dXBar*!i zV9mF!imUbT6ShM0@1?vc600)6jt7}j58qxK<6UqF)|M0wkukc| zzx;I1@A37qj$6Z{i|($NcDws?5p?P9rQt5ga9+@O&=#M(m_GSJe^S%E!C0;J7mVck z%NowwcaC^Z$Ml^8+}Tya_!&?`+5AoI{lY+ra^Wo6KU|>gWk|Emn@^bzFPXo~=mC%F zDVRYMAhZ!mLalebSNn9qT62lX(aXIc9(5snrCxmur_$m%Agn=qqU68$w%>_nZ4TZw z^ncWbNuzn>3j_b$?xa*=Vc`3G&6sc6V2Ui(A;jslN=HQTP!1hk7C70@+fyqSVeq5N>IV9J1aawcORxoV9m%{N*m7hXGp>oRUT82 z`9S~3ZFqj=z85Rrm2;2(nG>6r3^V&wh#1BAIk)g7-y@LN;vn#GKp!!cw_V5uBy#=( zn5(n@K#MkzWM{t)4kQ~ECG5VHHS3VR%HRWguH-Ua9s?IUbNa&jAFN?ts~OC&oXPYS zn@k#rWFZ?Ved<~*Kbv^SE$hc8*)c*JxoB0ic+>~AXb)E1Tng|=TBfexofN9gT&(4C zSDGoZ0k^|S5`8nO{UPF;@w zSJ*QOrkE-&qPgQpS3Wc^MGuRx#{^*l*8PMHCRXpCv?|`PW_zz=XS>**2Jac#i|3IC zkh~#BMN}ra2z^7(6(#jTT5yFXvFLrFtdqMk%*s`P=KrmqZ@1+tV~GGGgX<3SDvza;LOArjKy zEC%VWy>sNhhYwykuJPIAA`Eg55knUYX<66G)@53b4lm4q#4z(F8hx(ug0{!#Vw;gHNwn`9SrLB zFEbv3U^pNtTms*G0&6nXgYPC3CoqmDk~v@^sbrW#V6lr{^*ByJ|EN#=uJ<1; zKlpeSKZgmpjghd@%}rM_`LtZRoL!|lEB6KUz;i`HSttpDt^}h?ik&0);sX}}ZS4e` zB4HYc1fmh~h(cbge(kx4@Fv}!C+_Ux{9n2q2*=hkrVR>TBLq~<9^bfCiR_?H;AF26 zZ&=Ci>-T5jyXnt@PUK1b@m7-1CsDhLMYNE?gyV@JUQe-efL~%TQ@jxQx;ZHTj2-M4 zZ3z?v|59dBGKk1@f?#9_a5UDU{5hR3*17QX1qNJ8(^<;s4?)BJ$$X)L6L*IQgN5>JMwPQ->WKZ>S{s*&#--8-Losp17eYlPQ=(H}t}ogIlWGwR7-gD^t$fv< zQhX>C?}ve{_U8K!eePV}o)XaZ+LcKcs1{TpO_sIa+jdVGNlVL?kCf4UyD6ljhmhN} zQYj++^(iAS=r+VFOgia+n-=y=p)-T`OXQ7iA#tbetq_pA4?UzCo>%vqo(bk_f#qhwoXSUu1Q@|~=cfEct2|Q#9Id1R0rc@>6L}Zk~50m12O->m{aFFpP&WVD&04^Wqh0|Pnj>3d!LA`h3IU?zF}37 zCsbseOxZY?R=9A=P8d`=B}NAwQ`SY(^Z%K#HbAByhh-o5B~Ya7Q@T7M^((KJfeFi4 z=>u#(k()E?92a?wi|q-8KwcBrAZf(@7!%kqBM2t)F;f=?br;MZON7G|i}c2Lt$);W z6YIq5q*Rh@hEXyR^{tV)6y}FMDnd$=%eBdFb%b zn~5@dSPUvNRi43^_HvFeb;0#UBMRj{-9OvMQG_weO>1o#gz3FwJ9o4TB@6(9Zb}!+ z2k-xqgz%ned7NNfV-ZbHMffv?&?ky9KEN{clG!u#1l@+JWoeIdpyBDDS3Ij92(`}t zK_0cO4yOClG{a~^#*iVcK+HB~$WK@}FH$DH%c}&)nKjw&TRg=XPuld*>`X98ap1K& zOGHcu3%{9S{c{S0%&8+H7kb@UanN77I>m30C++`e`0^7BbM@b956n9tC}O-vHgdzQ zc@nWexLEG{@Gio2xlr>FmMw?DNf@?^xijalKG*$BiOVy^a893&J9r@jG@Id5ZMAFB znc!wxRG3s8?{tDt^(PRg9-Bhpou8zMk`AcGApelB8M)IYBQShgVq{#un#?Crs~ZmQ z{=smpD~pHT?niJr><-~gR>RaAuSwAC-d65PXO7sdeF6LC`}m4si6lZq0iO3eH<52Z z{HcEBkH4f){3#jeQHEbja2~p-{u@v>KpgPOY^ zdxE}csZC|1dYQI~P=X;M?HK8UN;5Rx%0pWEQQY&;`Oe?q3&Xs^&!~R1&(lpUrB^_# zrQS!beCnFNFFvfTIqriykAa-zcReEOeny)QtCZ|3-$UE7_Pv=$Fpy7_I!`$D@`Nya zJfubz23SYOXdJgu{z#Z>JYL%KP`PWo)N`!d`x`=qvJ#WXz7XcX@raIFET5SFqr;uQ zp#{->0$M=8?Z*Ul*CX;(j@ei7!M|&QKDz?+S=iK|-$Q5XKv%{Iz-u78!N^-F_) z9N@oDA`>rMLo(_W<9k9%g+85RnoP-;x>OO6ZYy>kDRmxkM~1j?eHzlN7}bW7@$wL> z3g+32@)+m^Gv%J+kwWaTYx(;7oMJ!BYYy6r+6sd|W!#QB(8n%i{ZAcKkTOu9mK8V> zKZ^9x(UY99v-8Gw$864(lxxbOs>0wufYiu#sx4_2sC*#8W-8yzvc`N3I zL-njjXQ8xbptO54@}^&LVis?KWIg9V@KVQZ-d2{2EfBC)%f{2J`@;6b;Dyc8#kkrd zc_0)fR=H_b%rlTPUYyO>#U3+v;cjR-JwV$wB3gr7d2UL~_`k zZbHUoumXG=kg>#9`bRnvy)4bhB=FpD9{>~1%gJwGsrz1b)QLfjlIP8gi(B}P^&y%N zeF)Ch(uXsqpy{9h0fc)L;k{#r!`zryM|<<)V{|zk1s5#YlAimDMDdOpv(mf zCzfq=*j&MA`*luJ3L0JHOvDU7gJw~_Tx`cEWG7aZWcNSXp=3`~D*J$AVA;Jw7CJ;% z`K4)DN0oXF8^Et0Z$5ufzFh!<&);Wvg-~S&JW%;t+VNngc>QYoPXxAN7pD)H>D?ha zp>d|gh^yI8tKy?Tv6Qn%A!297K@7SSIIk|s(_|uglg3!(HQ(+hh+9EgIV1M!8|#hO zwfx=u_~ohmwnXJMc%y%kVIa!~(70gjWma!YXR_4`n6`TFxglD;GnT*aF!;!hDS@mI z?xZeIe`swDI22?(K4pVHB|%uE{*Hq;b!gBhc(x34FQ*LnO z+o<*oT##s!d8XbsODRn`dfD=9_J2j>SwENXDOnM9wm62K<=g9W0Y$834Lx+9nYGOD zY)UpX&#;%9ue+za=Plr@`x@+(>$C}Y&l@ZO)J>|}fZiOEwjWnQ(|bNO@K=SMkF#M) z|1d)|H%|{{gV@Gd|9)0O?i+r-{0ZDKj+P)yDaUe4Km@zXCydmQ^3O;3gM7)zA&W;y z_!@9IINBm)HrpZud1V)N7Kp;&V3)1Pvb_Fh6xkwp*@Bdl2*6yRNeGpg1ise{srs*P zF1}W&`Y-(-mW4rF1T2Tp&U*P{Ad=}P`h`DYrqaj+53n*%;sUhDhtj-ckMDcDwQ)T1p4PsOk_C|= z06T}q2pg~^#$vfQf9_uh8)Ph37<}Az)I_P{mbAR*23y+aN*%jQyoJI4$5klk00uAS zIa9(e>DZZWaX!wL8m#MveaR{(Or*hI_KRnc9JOa1nAm=JQ+n9UNnJL+sEE1ghuhO9 z?@SN*-ktH`OVY!;au4r{55H-dbtXL-X33C1`5PCX&J~|l@q~*7AyJJXj9U7ks~x`V z5NO;IC&MES5b%sGSh(hcTt5$s%ook_t5ib3MP~{4x`}H=!?$Ad@Q7sw<6Z$%Cn?`> zQL+c&pjjJb_>c3-rEq;@NJ`TVkF;`lH+giAd2^+TtZ)lX_VD4iLpIj94+tMW-_Z!s zB$BAjt?3g$SV^-hh|^h18#MP^|L7gI4fFB7{)JoDlBcjGq6#@U3kLZTS<>#qvem@2 z`Sx0?hbg3>wE)qiZM8EKB=^xKlLCkwm6;I9gXrfjrNL?#uS(g`rMk$>c&Bs}Kuhct z217>q49iZ<1e0DaXU1USuJwKb5aS_kKP&T?^7IpDqjrQKacGavnSl9|G>EuWbn1 zvCgwi{*LZt6m(6Ndq#6^sqEy+A1Hr=;z8y`5YByDA}-iQ?n^15tcj$sVH%`9QoPnc3 zm!9wZOoKLH3>{#0ZyWj6c&7meK@GnU{1Zu>_! zrJ0IszGA(6nj98jpILpcwnAmp=ipK@w?^8!GPlUzB6ExUtxe9~YA1gyPIBaAm}8}V zg0{|ohY+#e^6~72Od2AFAVP9$l-I?~Oq1pG;FQQ4xnXgErnSY%?<`_N8w((uTH{lc zo9>cYTLe+T+wHFluV?ir-gV}@?Fe;96^PK-ER?y55| zet$9tXj*GADTN(@T@C5)zB>=;>nt#DDMgD=>1ha1-^gNmg>xfTzEg8+32N=nWAIXP4v>;0(%|f6{ z+DbjGrQVj(?ajs87mMtV*HbCN0ef)PPl$csL(ddwQMhuTkK07LdV|EkT(ack$H}yt zO$G2$lcS*bvl0Qr;t^KMYtT>gi$D*#Zs-i%gj_fD!6SAH#}%w~P85~Zj+F}+xQtZd zq6HI+xT<8*im-dz&@A| zY1jl4wUkv!(QA%!CYgHQ*RN>&YN@Bv_|+l-aoj0ZNOv9$%hAh6-z00R>qx2VC{>ED zWcf64r~XGth8!q$9VvG8fieJP1Hu80Z-00{O^({!sg}H|;s2hU0s+;ujiBaBjGsVs!PSp)9#<`yQw|joG)cH{Va7Ss+(Q?;N z-a36br`>v@VTfl=4m&QLGx$B8Ksl;W@#IdJ+F@*DW0W=B;}o;S;^3VEzw=np+Y&@% z4Lz+>X}w*+`N5y30^@gFcu2HX_FMSy5BuWgrqYM+pxTvREq&MpufFE1MQ*!(4QItHl!A5S`HB>rym+$mfogVmo8CIbX z-``E57JobzxjW^qlL5r?$JH;Pa*c_X7lv0fW#RA6A31C^$jZ~=fdn@n35aMaJ?w5> zhzL>Um^W8=hW<~j*?*)hnF~xRbqKsQ`#=9f0UMsBDGZ!8Kt@tS263uUDhoScVWJdp z*N{p?p~fHnbXjlXD24*hXN7s3T!9|Dv)HABw@|<2zy9Kl+3o*k?``0#s;<2M8w?t3 z^u#u`sC0-^Y(qtq*7kvl3YIu%O~slpSiwpKlqnzsxrk^an55?Bnie`bLt8tgtxl=c zN2a9??O>Z=Y62n+FSWr$jF#4Wy^*F!Au5&U`&;{*b5CASXQngH=l^{E`Q+Za&p!Kg z?X}lhd+oK?*6Q4^l5@F!cD)X?_Wv8FCz&yRQ8q*jNyAUnk_cX#RQqESSl78yvgGlm_O09~G7_yRszsnkvExaq3%D!FSl?zu9$Ol$H;TL7r?}i3k}TceQ{0V4aW&yYaS{8WxSM^7+bW9N>KfUa zv^ni4?z&{W(WkikMRD&lio05yeb(QG)sM;Axx5bQigRXB+|>catx7`09EmMiYh{;L ziRg+vw%8C_q&2;zP2933iLZ{yxiG~D-M!c7uA^1wvxqXYIGp}USaKoV7vqq`Pm-DxOa z=bG5?gnTz0pYAG)(G=A#x~t?_y6f8Q6L;-@-*4T5?%ErpyA#RrHvKogGob%%0pC$> zM|b=8Uv$^vV%BR%cl`))ifnrHgT@#f-F2inh!Nd&pz|V02aZXmnSZKzXR3%dXb}-TmZdM|Z6#pB1iaFm4^eYoogtwUZ6pwo+tE;W&p+ zcLN*_BOTo}G%sBpp}S?j5Q1x3i0(dMbhk@%*T@)jw-XZv(cK5KboT*Ach}mgV~?Z0 z5xSe*k1puDK18!96Iu$F8bVU5S=2Hu^(?{Fp7TP7n5ZB{juFDEyG~LQ$6By}pqmwFJ_Zf0EhU+5|s~k&601P4#0oF&2p-Go)N1*d&{FN;EPjc%vaqBjfBvaUsTiY^f zWX=|30lSGAEQEETt3be6twoW~u`iV=o6oUrjkLPqb5mIwMcB0y1&+_IYj^!+x%FND zCW`l8vpY@2K2uj6^=wnQa!)+z3;9^*^ZDL?xh~f#W zIon7cxN15M_x7d90js8Wzg{xA=55zY1C~Nv;-?4`!2+t)sQDlJE};IR>m@Ogf$OE? zXsEIjc>e$jd|v{clsQFgSiLeO3hcC0wr0A|C~&BvYBt(_d=(Ys_b;cR8uBC2UM-~l z3mU41A1ixvvLw_{HAiUgyVp=bdyNb@K-G;DpiGVpHB<(hkoKAg{QpS}6)Pn*{{Pod z{om109nUEZo5UYR!XKr_>XF+KB{?UXTtl_-u)r%eU~ezW@ptf z_{wQscKtNG@A~Oz#9ryDL+X^4M*c#^+1UQ&))N;wyUcf7PrT0>GWdF8{NVN`rM+g3 zmNhv^v8w8~QTWJ*0^1POZhh?^I9qc(d*!T6*drg71z4{Lan_!c_8`_Dm8FF9F{9V1 zRVS({TV+bzoFn~o$x(MUG%$9BL&Z|JoYW`bMI@{*>7F<;{#W%SuTD(HKTuzCU}9dJ z{qjGs8+A?>dBpEnwaA@)EPb*o*{@ryFLi%dx64%Bm8&dMtpVW{*R2JwADfqG;!Z5P z;6bjlyjrb6SSn~i>Q;fNsbOJ8yT3_-pwv8-%H|&33QN6?TZ*&$?kZHq2wG@W49V;X za@u0MU(S))oTz0jC$@aX+#@-Ms3f+(17KtP7E3)iG=O1;_&|thH`T{lo6;O#_%cLR-a-mUS zs5l7e*S*XSLz)&YjxH#q!_`4Zzb?v>1vdOO79ZGm`|Z(cof&vEIcbW(?j!WeLxe2W zAG*4X_ttLfChfk&+MNm^$=j(iCPl$SWY8i9UZQ2-deokV8X7QhR@vxNZI#0ZVhj!F zM^%Uh+Hpl4#8$Nc=8p9bu&1|%(Nc6=ZXD3-3;#c@DQcDw)lE|o)6FGhO6O;_qlI$D z49#e(tms5VHK?K(<$x*uWxg^qtOzh0pNDpLnvz|tF32WszxBoClWmFeWjJuk>2Q}r zdk9PxD&HTm_0J35O+0|!HMDN+L#&eneRzEOPY2@OXa zm_?cbcqXgd{Ng?dhQaQNpaYq^2(z$Pr#Z}JN4~!s8oViXfhvv=>+x6#1_mTKrVm6z zV-@uu%49+{qTB^Y-3FB+I;=4POfJH++C|~K+NI1jCeDDN&aQ_d=Ho}rqORKkCW}3; zN*$mSiUM{F3^6yww1a1oIS}ABr7vWJX$*iLZBJ6BD<}D zVcsV#uhx5BjdL+YIc~B+deTATn zFqG;Q;-S8_8g6|gwrV=0kkK-IPN?FGS??sdz z<2{T~1In~M&)`EKw>kw03T2I}{*32X=I19#6_F`^IZPBAZ0}KjnR#JJ*~1{Gk(KE& zV5T|2H{0Lp?x~i0M*s7@I2kKNc-(J|1cqYIds1iOuQMD>ul5|XwGUiFxV=~(u0D_Q z54HK6!aw8VA3vSR$@(>=kKX#Tz-};kY=!8TgzEDcTmoM0y(%9NOdaotvy7<_)vB$e7m#5Gw zoWV~up#OIa)N20XaJ7yJX_K&a2i>w3cFKuyma>W$kv>1QMJ70!f$f+PLO$mR>*2OP zqX&JPJvH0xEYb>VIXihpPi#n5)hFUVSu32?w~ms)Oe?!-4`b{8aizg7k#<0m0hPyCjqg)Iog+WJct zee5fX2U|b+GEjj30(W>JfPZO#j3;naBY+Rpjzw19X@uz#o2;^c`158L(^9pGfc_-u zFx+n%&WTuPnqzYZ!iIM5H@wG?$W1rDn*;8@j{3KkctoL(TRz4qz>9End?Btn;{V?G ztq*@+KI|h3Z0!|@ed--Y&@#wS%Z(>nC;u~De@FiBx5vai+wm;J6~~uHTmu5Z z!*6-gFd-|C2rtB1eR(9aAS-j4gtN>^IADt4@2DExwTUdElA6tMxOEdRWt1L>UmrD0 zwDO${3Oa_h?T<)5@p}hMQYiuY+4sC1e~ijIu0qK>x2a!#cMs{lNkkHZLV541Et)u^ zcj7FOBRQmUup)tFFF!PTr_QUyMsLgEpbDafgC1Zyl&Dh@ojx(*{jsPx;nluQrf9VQ zWK8tAk1%z5Utx;XA9;0%v>U7AiBa34LL_3;)yET~`sllY`L1o(Ug5`J^3%7C9Yp1)Ckp=u^O)|zP#GQHlF{T@=7yUX%li9>ZGi^GS#Gk{_@J5(biQsSEr%8a`pQ{ zc_lMhgQS&WK7n^&z+DY%?vF6wPgr>PU~{`a|8;9bsnSq4a-)=VTZSDMLOZLQ@~}}z ze(gab{R8Ue3aa-|z=Mq)BE5l5qaezT;!YkFlz`7)@1LBj8%ybAm*EuWD&flCU)qD5 z4_>Idh&d|)gQY~txiZVJW@%sFd>HlB7KHab!p}qezR>3alZLz1Vf~~c4wjs4O@e*n z$^0&fDalFWsVaHJM4EWFNK)UpC8eSV@<{|DF%EbNyUpYpsz_2qKEevaGX5bSnmA~<43|CHiq5*tS2 z;xNU74$l&F6X>L67l6iL#xBU*Fcd0X5?_McGRD%d{ z+tAe{cJ78Mb`5KF+-m?Ub_^)g*Zb%7DO=j2 z?ZnDTUN|{iSKXLvvO2G4kiEKT4iflj6z99%4*6K;#kkaoEj!a>U>y+cbke$*t7b^% zI%@-kNY2NYzM*oz?;%v3)XD%_koB*6)hSY8;>}}*llV+YVg(hbAbCl>F_bWnl1#F7 zuD$~L-M{~3*3py=UD$OS5jSP_$B>le@`lY;oPwGIR7RPuU&WJjW$~^CE-`RkVWs38 z(CUB8_gj6HZ?G12|H`l+J7jNNn-;{Sg1F=r(=^Um?ZRgmAnPv#t?V88Tip$vV6=~d z{l55Wp@43LUL%4j;x8&K(M-BSO=P^#pJz@Ku5QlFo)=}BAW%ilSG}0XX_=h&2w7Vu zn}C&C_kBka5JBoh|0GH{@qd+Y&1$%cfD26vLuG!bx^a$?GKQVD+&Ial)MP%B(f2hF zQ+#=o_W1n`Fu9j(O8hD_pP*qaa~iCz7#Td<0v&-cHC#BRYG(MA+enA6U)Nyj^}zNf z26p`W|KjiLg!2#iuPm})8sxsLDK@tN&?H~QG-;~YFp7wKHSQ8&6u8{zj?I@>Qv}Xo z5`gb5uf{FQ8*3ZAT3w`U5}WZGw}Q4c-}r9RiFmag(G(4(yMYjs&Ag^)@}<7OokJ?M z_D3YFFWIdFe_bObMounvkLOfrAQUmiMzpvu1($N+GAJHhDdudnch7uRV~9<>7^6EP{E7Xv?I4;+s@E#^i(TSQ)CCd(!}b z@WoOUdSC5uPX=uc#I-Y{NL4|BP$`sCU3Iz8G|sv~*Sk#g6bG)p!?N|Zh(`&+LagRq zX(L*l(TjKQDofI8rV7m$E1{08`MtIKs#+$EC%3Z0m~wolBfh2}^DrB@HsZ~$rC5X4)S_Z^@;KB8RnXn6j29m5cMT+XKUdQlz9e&-_aUt3q+SRGjW|!SC}V9 z%_N*U6NL)R&ajI?bFWg4njZ%_2A28=@U>FE8l(wJ?M;4eS~A|e>VUdmU-+@Um8fuz zVy#N+?Yv~}RP&?NOqZ<7w^bPkU^yflSnVf*YKIS~wqIu$CSVfFT<%ITPw*fa-L$cW zR8WE6=K9>cw;A`EYByfAhaSftvz+4%h8KXJ%xOw;&t?n5G z+|`|RwxP>z?S*hj9h?@9vI=2y7kU)k+*Lb+&D}`ZrVyf0so5xTH308=OSi^4WBMN^ zna__+AJt1ML^Ja!QaI{#*cK`_04Q!u5VB(IB`x$bzLEC$_y#Hs zrms8WcM*M^SG&e4^|hJE^J@8L|5**`v!gqag@C`K8?Z<+&oJ^>ucd^f_{dlkT4kqm2qg*BA?~l(}`8!+DoX#kkBai$?Dx8<2yqq&j<2G0 z;6gEn*R{a0B_Is}$u-|)1EM(V^uomaZ{(pSG z_dlesd^oy;`9Gnr)God0D~s%URRkkxzT*gEgY2(95N%z5edV{`(v7P7nclJgMt!CB zA5yAg#y}Sz5=}5myQT;s1VgokxV)l>1Bv4X97x-*gpD0@#;*|3BejuzL=#!z_1cN^ zYQIMgn-E+)DUIxaQc&xJrIc}X#oq@-jBrJ0M;CJA-_il@{o&`2?jtJPn?<_SpGD<` zA+^*Is;=ak+&|>RBm%9;vp{ijO}+)jB-a#J-~v~dv;as(!zFw9MqTf;#bvc6S4&_1 zj*k_x6k$~fp{9cYji(6J(XL1(UxI?1bE~K)QFM2j+Rv1p=mE&vIrJE-s&iriH;UAT z6PVkcG4(;HF1j)*zUxp4;NG8MOApWWRx5+%n+Aa;lm!wR>{&nOY7Y#%&eir}1pU{c zN!{)QljxJE2jyTeP{sGTfy%;wGv(o^_;{SPj|2XrLV3|J$xtd5>Ylyq$``1DSiu~T zo-_6E;SjNGli~B$RuWqKx+Cpc{SQ6@h5lA`|4^9R3;|e$hHqDcvLW(dg3wcKckVbv zTGaj~yS}jIBlj}d@-G&>h|dk?V=%8jrHKG96HbCYnxC{acss&>8_arM1NQLspV`Y- z=D^WzKbC0obAbP2TV)*5MdpWa({_q3&rsmx3j8DBWD}$U;97ozcpYjHH1F;GT{AX^ zG5}h|6v+zP6?~}+oLqsmlVXO+x1$32x;|Kem{^Vi=fuwe@D0@DlevR4Yd!XAG!i`7 zrbu<~_2@fRYA!ZRZLfZP$dZxrP0PcB)vpidLWA4R+%!3N3fhr9-uGIU46%E@T-ljR z{Y{4qeWkRC=P#r83jD9z6ys8f`UUDd^ryG6oOSJ3vMuv*HLqA#A*U=&Ds#4CM#tGA z4=);%Wu~2Prq#A9;CJJ0&j85ab<2W?S;lPk?PjW*#{^~of&JQX;g|WGjZ0t}m3q@O zKCY6bR|Gxd^tgI9VVU38Nz440%a>sSqgOXB1I-kecN=IH_TKO8H;FRv>yAXFx1)V1KfBp!Y&&QIhl{_CQrqBKNL9W>^VWVMXU~#8UxnNYpy?}YE~5Sm5{nr*%8N#7MFDej+Stg*13 z^z~tqiSZIwxbfPh7y$O-S##n<+|LAch5_B~5UsGtpxu)`B`oa{*^g&2cMY^Ht}Tc?OWGDGuYGy&q$RewKa6apI=e_hK4#cZhb+jWgV#MqrdED z|4p%>ax5w_`*N~vi~XZdyTDGU7CaB^L}`SOgsrnz-E0HeY%kPs7lEZVD z+Ym<7*C$@q#UC>pd}7pNcPTS;*GFl+e0C5wON_A(wO@-CZQV@)jIZI{Rcd%5;VsiL*rqF8LlhB7`yz$%KV905(Vl?zoZBp zg*)ze0w@+8Wq)1d+B*1s18zUEaNuIlaG<*-266y8D5dOhwLzHrM`KEm!V|pOUm4_W z<$-KWGr*m82!rik?a_*7Yrah2+eFLVz6Slq+`+9E^D_lrW-r(MvmZYE@WXh(J@QJjWOGCA zki?dzS4Lvl(U4mpBn8-J_scIEE685jDhccbfDcsQc<^x@4=)YqG#cks|Jk6@De>nw zPnA5&?&)tpH~iN=J1g@ZJ=_t`<)N~^nIhm;WuBBmZA-=#SgSi4lwP$!?kKk}pY877fE zRg$5HNITqtB{>I9EkUqC{*}7L^OwZslCyr&kcn}52PSmF#JO>gd{jxkq0om6e1M=< zdlbQZHHkC+2}_5l{jH? z!F)9TcoHWACD!n_@n;I2aQ&0USm)Tx%~YzLy?TLGTif4+?cgUzG#BsKf*4!)Hn!W% z(VaZ(RQH~wt0L_hk_YuG61PrU{UT?ku-R_pj7A`+>l~u7D#Op7MPYjq zABop5Tzl2!$m{Y0+~zeekte}jK|;XWh0<$*mkmwyAP{!X7B0%>igJ+CN9t| zgn@evQ*gJs(NAfblf|~tcwf@IrF*qQtY{j0pBxcpZN09$TOGR(*MLvu<`JU5_i-Qf zdc##*tu8lO(Ady$CxM3YW}mufoFr4oe2%bbYf}wq_@llFnFG?DxxTGZiOwM{J6m6T zFMToBg(5LkV07y0Y?Pc7)+p|xNF0M9f3m5MMB?%@LoyR!x(4md$&yV5?M;f2mRMHj z5G_a-t)PDTx6w!?T!V|w{ibEokhfLMn)J?P=IT;_^<6%5_*C;b1-#bh&wSj^DSuZh|8yw*oxJ z;j)!8B57^G{-mK+O~WTE-lq*pPd^(8MmtsJt(#EH_vvmUtURZ0E(lIbhWA66O-Q~Kt5t;L`0_)#xjkF5d6b-w zpw@RU#@+5(<+oSkb3tE$z3+WUwEm$UH&;{*I`tl|j7#E4w{K0{TvU*{9_iZ&R!)qq zZoa@_RR|x|R}jb|gNv|K(lR+;?Q_+c0|@HvPF&+RzXW5*28Q5gD6u~#(xlTs`{<}Ao^6*;Xgp03aWOyha4P24szcPv>b`% zs798N z7*9qPmJh{}_KNw)Jjp67DPodL!9@fm?AoAgtZfP@#EdftkGC*{t5YaAZG^Zjwj#wA zeHHmyCQViK^(DV$Qi1(Jv38syF?p&b@i+8HJi^+lY(-&cR2V7_Lu339f_iez$AD#G z+O*`FPgqwR$zHPpk+a|{av>~iUiP{) z{+tp2QZ=bJKWOH9(q!}~!iYdOtR_MVOp*`zv*#-MNq=P(Nu3gQ_)_ z?e3*$-4MH+E>H3=tif3g1@VgP68#2K{&86EFSOu%|134L% zfyj_~CcmZdCp)A%*n^6U7w`q0k6d4FKi-*>6dO3_8G`O6OacpG%vxs$xwX#xU4G@l# z^nwEsP7>nJp!d!An;F*TNvyV{w=fcxnMhpAq)AQ`Ggh{~&)@*BqmK7P1}9Y*rWr6U zt|8I+MG?{QkrcuBcr{K(ddNnjH%HJw7yuf?IA{zpL+D?y)RS^w@RWjsIRr`p1kwo? z$y#Yyk;Krh8Tx|*lqJzDIxVUj$;d!BnIm|m<2#HOGsfh-@K%kC|4ZmC-fr^&LzgRTdNMY9XDk z6Z_$oTF?ZhG+vh%V?jH z(X3eN*Jp@=HKI14IIs3!t(XUrlV+H2V-ygZwcuDgkMmPQK>xMjjtU_s*WsJIu_#Er zDVv%Gq(B5z5%8f?Pw@HBTGJHCY$o-_kZfFjvSeM0K~JsHQeOvP)+JWe*yB3Ho5c%n zy-6yDNo7iscGthrMe|#5fNs#?r)(^lcAF&_`5K|i&Jc>zMgKL$yUsRS**(drMTyc@ z4xXC(eg<}fTyvLf6ac3dCraBms$)8RkbOO?2y;L^nB?TTYa$tnM+T4MI8elFt2RYi z^$5b)Agzjj%yMo>Oa;w0CZZskXqc6i;~L$08>c_0ZeGw=z^bC3 zTECh8P;=Gz!Hmehhp%u}^GaKNeMC#i2IWJihuzD#oj5HSw=+??p2jr2esZ#W{WxgP z`ldGu$L(D8qVxyuojC`e0^!g$-};)R4i9lb*R(iMw>UR=T-8)TI8irAv%92cs6Cl3n~3t#!BEto&HgZoT1R zrs~)KD$$@_1@E3opnbAd;RFgyffxnmMW+V}Ov~X8P1USs7N-kHPn}YKr5|?T_bU9) zE_|xOUvuGM3V+#!PgHn?3!kF!A{WLjMlAhB7Y53)^mG@d0kQOzF0A!M`VtrBJC^>K z3)7rf`ok`Krov~sFn%Xu=~G?!B!!2#un0@~Fu7>IgzNMxMwZ&R`Wo%QJ=5PO$o7L@ zb#GCkc05p7d0x_ft9wsNG$k5z{^Pdg$yz%Hk_FtqWdWy5)xBp|T$#Cs`aJ5(loFtl zSY`@=(-gRffT<@wMnIUA8BKs8j%A7nykCJ25cq%srxJkZ#4HmEYKVaw2Pza~(8*wH5+l0;M&N+C;Rc)sdW1nr~@(V`S4Sf5jebQ|}Nk`rZaB zX|;a~F{!__HCG}AM8kB$em_x$SND!c)Q%Ah?s16CO^cUsIzUhPoV5p69C6xwH&U%`#c##nlz6+mH#2j6prwOC=A)s);~^{~ksZ$aqH6)Tcy2ft#T@BLI zUTw)4tr~|d{(i_hx6RQ~Ql%cIzoTwChsv;*#b8d0?Q|F%KBrQv>XgJbQM9pUJ0F-p zyKAGiIT&lj^}RCVg`xr5LD@371mtjUp*8j-(vpr<9Db&SVTJ!c%7m z0it<^Me_7Az$)F0W4xMl_}Hh2Wp5q98YNQgQHU!=#x2j zU6Oqp)NR+%MM^gFVO{-&pauh~`r~fA%0%yg0eYXyq>n)dPvr-LYkx$q@)NTM`B{*Q@=pg#jYWjnT}<=L>sV0%{+itqHO~ zzN##|K6<&|#m830Vt0ALO@B<3GV9p7WP<{tx$7bQIWe8vS`TT|LOyj7Qjje;*3)6x zYpox;wAiA2WYWH{$nu@YpYVm47KN)>y&!d5h-77id}F{!)M>`qF}7pF^!fpJvrV#Q z)kus!{9Cc;TzOCRmc^sn*cnsfo@#n)WYYn7)dk{JZQi{vDzjaoHIQ9VsO`F+k*F;u zvv;R*H3TcWo*uyk) zTN9Iuk|l1u2^aG^JfN$EfuAr~eX(SB>w`v?n87Mx6Oo}R!PWT?LT!2xUsg6kfW!oq zbwz&D>x8!^%h%bt)OE>axyj0P$xD-5Ry$%8N}XJGf}Dcqs!;_{fx^@Yb`fq@dYYB@ zwjH5yqpTVuOLPb!&LOw!9AVT$gjr_x@18mq8GsZK@%SJOcR_ypJI3xB6A=ftFEtb_ip+~oyL3?`eINNFDbBVO zHo9+LxwU*Ang7#BIy%S_XVlH}=!fTTFBtm?|}*FNS?S5b**SrstReO`nb( z2f;q<>Ie|*PoP=Q$A~obr9b(i5bxY#(9}3Be(F%ruv?Yv`W&&Md$-zqYAzGDHRvr8 z2F(-jWqNwl-nE4>S<#-VX+$osT!AJgT2`h0y#a;m2E0O zDgb!Zaf<>r*r1>jbQ(EpS)S==vkgg0EKGmM(whJ=(gX+)5M3Nxlx2%H?Ram#$yka> zSwR{B)TL#P9xv_F*|cMYF;K|OzCb@{H6#zJS)I-LMby#3<;5z)?pqIwF%}SsnhaJD zR}f7m4-E)A{ac!?PA9)8+T;+?Zl_pw%XFp6B)PZ1xjRmSs~!e<(v4SZ(u zxrI*!ALZ-+(VFSr`X_*~7W8cE+FhwEYh1sd|)j&3v|@XZ#hPH~D-7RpS@={F(S3e$Pcu zc`fnx^4Y=j0Y0HWOH^V^g{*%%ws#ZTj=YlC+4TBIeDhSX=xD9p6>CZrG`&=i!~RBh zqP*Ab!v$6gg<1RKLGDkjY7`;DX2RJ)p*+!+U=NrUwQ$vuJK=<2-GEA-OyKelvtYTX(Gt zb1eM>%gwB5PSj1I@cNPt)5^%W2d^`gw==DAh7&dlIXhtU@_m zi8|XL)l7tzN^Y`Q*@;i$Al#OyGpH)frsSF-8?d@r-K@83PPA~Vg-^EdcEYsQbrUg? zy^QVE%`=^`sF|BY_vfK4P|%}ntkV5dqLamRAAjBh@CA~h!Aw?Z%9{ZI;dO*%F*td+ zy?QWsWUq@JBjxallFYgWxt}<;Ob%txMH6JG51FBX+#A^G{)jyToXKxrxXIP$$T2uB zfDy+GVLmxuj8zKTdCc)qd=F1hyDe=Nqa;(+8Wc9Mea~wti=x%Cf)n<3`6tFRrS^tZ z&wkjWGZhruU^koNEsSNbo81}NyM3+Pm~|XT?+0F))A=ZI8H{!iB}0icGn51Z-z$8QWSm{TLi&qmliZ(eHdK z1DwSdF;YP~wG+u}pdVeG#_Ma}6g~gxOQ@hqEVbrc=Ld`Y`o-LYi9>5BVQ3Fu&Kw11 zXZQw(1iA7=imoV-D$U^_aS%YE>c9pElVB8nV9lV2!Jyn|_JH59_m&SgFWpyE;?U#hlZFa0L;; zRf}PlkNN?o*ug);sQ&GxjN4k?328L)4jzm`wtXtA$`OZNn?M@BfGrdZg70Q;IWgc5 za4iU659&_lAOBa(!FEG|gwZ10=JLlxFsKR4A&3Gf_FsQnDV&Cm@VVF-(viL9j>(#WGG{+}kB6Oh>fqnlb`-1>O zEaX$D2>+|@?lYeSp8$(}`l>ViW)hGQ7jHBL8C9VeuiEe>WO+ ziXU?_N8bdzeB`@W22mUObx{x}k|AIH#2xd~pDAa2N{<{zbHb^k0rDNjgz(AIuhbdV zo@k%Q9!o!Dh0qBz4x_CE|3lrgsn=Unfk_xvj>9TA<;t&hj^DnWf! ze$Na#uFj#$)vm*UK4$53#Qw?fE7IT5umkl*W0-Rnn_nWEcBR*UxwC_Jj&pm*?Z}YK zKMd9jh;KOGFn22pW`6-9U^1SUi1#M&10zbn;nrNE095Vfj7%wC9C zn-Q@+k#kS8OVtO=j$mzjbo43RMmH_-o}AX~0a<8To&b=#KwH^XvcJnuv3*jeJ_|MS zQwZE@qVw8E%I1bOSKkl{#40pbg?@rosFkuGrN_1?^o55MMb&W@e4-IVQHY9q?7jGu&#Iarww6QiXtpYdeWr#Pb9}4rwRJJ zpSE1eXEvW7@QL7$;eSDWX@0UiFHwH9uJp}-RI?!7&ytqxi12S>)i;d_+`L$cglgt! z|9(`nWq)YaW|5C`{5-T{)D3tp*AUC)7ceAKmf0YGES96j4y?OmvAbRwP~x0-EHSon z2&?t~4HgTqSV45@*KGP3!!92uQzEhcc!2IE%yl`KIZ47<43CY#NA~8y{BkhT5fr}^ zAe62JK1^XT*_u_OVBLth<-PUq9p4t8BdJ82mrS5sm7b`R)-95RH@$4s0G{_X!JlTi^JL5;q zW+q82^(}LPoujJ?x>Z473@+^5vVh%ilhu=&i^lF~Q< zO0V{QD&sACXo4(fhv77Vy)79!8*m-zRB~F%1q7^*fF_T4UtoYV6q8v}%5FqENsxs@ z>4}u@n|>k`2IrPiBO&3{y;owHxw1G}@<_wfZagS?cmLA*^+R`RO4cYMX^ z=_iAS&v-RIA)Nk^MRXZK0x#47##V}4mz0PRM0{y0QasqzP_hA&95HB)D@$l;DQR>+ zt?s8yKUn~&qb$^8sng97$k6y=RHVWy@N2Vv#S@w>09tLg03y*I3lwD7%~I10B1Qf} zCUYS~0^)#EXwe;N$kjkQ{MKPthjtp2HpnWu)~QL^V|~j9S+5oKli!V=^jc9^%wtGK zgJ4%OMT10hgQ-Pv?WsipI0gl%Et9OF)<|x1QMyzLQyR`z3gLJ~Q^LhSk+VP!601++J%oU zDG{Sg#<3&t`x{EuV{I!811;UpCWoDk`pHrhb=tUlgI&hhYLdth?<;LeRq_awUnmJ` z?l+XAN9V*j#|~G_BLzvoR$k?2#sxv)Yjy8mOS(d+$(7=x8A=fuW)MJLe&mQ=9Wu}s z2Ymu}Mqw<~@T0$HbR$H|Xmte!Sa(fPr=)$31t^b0mVl%KCWrEWHus`knkYi~&l}2j zuj92bjzb{+s%BwV#J@=>FQ>n1>0oc61FdIzg;e9fbNOW3?X!T?1&w>2b2+8?TbdVw4u(ZdZ5Yt~)UM;;b3rp~#{ z#235bO4L1li0`zvHOQ@5;U72n2l~hAPrRsrDaC~(HFGqjWfyG>=zS|;!Z4y!anq$2 z=L9d#@Lv>qHA7Xlmcy3vgZ_&%J-byd{hCn+iuj0-li$Cpn48`gM2_=nPz}4B=Xo_{ zLAcnf)%{5Z5X~R6GWrRlXfvkOUYS5tXoArY^)zK_@JD!O-qadOHo@>jK>G4F-p5j( z;Mk#P^ z9QC)wn7ORE+YEK>%wvd>S2Ny~`BMnx%5l5cA4#+(uoR1LKk}AwR%ml`0`uQi*1<bu+Ia3zKaN+cF&XwkW2tA2_t7#I zA?TLHEP7O0<_i{udVJ~M5CYmCip!~zbtGFN9nj^;C>Eqt(NeDVcm<-}p^oFYsC4`V ze4P?7nB(KC8H)SrB`#8xx-5wOML+`M?xctoc&F$F1hjop)M|0k*e-?f3niupO^nZ4+a6 z&eG4YmD3RmFMfLa_I%0B?O$pjr`3zO0p%!>bL4EU0nm2-JhziZ%bBJuv>S|?Y`<8mY)wI+eHQZX#lxZN zl|1jvksb&MWxHk~;tU0tD>&;0vsH`PY;l)RTz$zdPHfi7gr&Y@r-Ek_)a`(s1{LqC zTEO#Uy=6!pu(HL~fAA#(LsvPWPNNFAwjpmVTX z`R&XN6gpTg>e%B3gueJd&J3rZ!4d~U1i`k2`pqg{)W>8wjFP|MzbN8Yd)~g>@#kM1 zffFh>luf{5V}G}!M4cfeq9tf%QkgS+Y?pybr>ItDmmgys$r&eEFdG)e8ZEIAGr78SkF+`c z0~KVw<8m#T1-PyGUM88FBdnTEsX$KP_vDJW{SK3p2cGjQz)yZ-73kFXU3uFA{fcL3 z7X5f0YR{jCC3?4g7OiSiS1xF$m3bRa=fr583K$_pvb+`Tu`AuAnFcR{j%HVwj1BbI z^S!pVfmsy{d0V4O?VmdsG{9pACT;$}GE4?>USdptWbl7`=TpoO4$RvPXf)eA1%VSZ z1`a4t8}Uv5qrno`w)X`!kAT|0HBa01!mtRqnG1OUWgMwm0U#VVr*(eg!X4}&{{r)n zbL`lv;KcwA>?GP3K(gcqR;(QwweAAW{pO#6gTM|!yI`2UcbwJXpV=dXo0(4CDi<04 z>ZqYEekW@T;nq=GwlsS+2MnW*LNXYM>Mr-hDNzkIIDXW|?kLd5NugmBQetOyBNM$d zR5zv=jLZs0xpG=}qPr11ztqV6ot?UVVGmQ<4xZY9y*=*O;V}BoE`VB;!;P(B8ZgeG z6Xq@x+O)J+pS3|JoI*wcLG43bzF76jujmcD?mVlRlc=ByV&S3m48sUoGjXhRM%|}SO_g3~Q%8NX zjy_?XY3EyU0nzF_k!N)V6s{}T?O)8P&S+Hp&e&z0DLUigtTWq#&TO~NxHs0Bc1JhW z88IX445;MONyWI%@H=GXN3CYp8B<3mt$p$|Ha3n7-5zu%13gD1<|w_^60rxM?f?yG}~F{G=|SHe`p&=hon-4L^KD{_Yoab8(Eo6 z9mKu@Zz6B2--R9?W5Pqm(d_yUjJuoAab|DUYf4tb3)Rg=XSKYa3`OH*C>#YI)Uq>X%hbM8{Sy_;rh4a8$Ozh30 zs>H1B1YX^^#HhRr9wYUz+jMPFTVnnmr?1rY&6<3hI$uZN+u!+D6lT>0ek$PNX9HZ! zDY})_uIH%=R(z^zz}8O9*Q8x%#{+2?F#~zmsnAeF6#6Gu?Hs8xr(fjDhOskw|DE(s zIyPrx+V6;G&3dJDk-j_7s)qP_f0CFHkd(>)Cgq580*j*d>r&MEXIOPG)=-`%RZLD= zY{Z@IUqP$~JId;g&1w(OKiP`k$qE|=>7jAws+Bv9mk~$Uc;{+V!|YDXx^E|cok~J? zKvw_&iQUU7wd)bd;urgm4K~y@t6rD}9^J1B6GOt3ResE60~%#z^{ZD%_6@&l2tijA zB2zVC9^91vU_)*mp2D4<)!N4R$2A#b^%QE0QX0z$CTKk6_oMB5v_0(no+N8uN0Rs+-t6Ph}9` zAs2YL5l*{v{lJYQeJ7kllP*ncX((Kiz(g%~m5Ft}U1*m!oA-xARnwjX=<3dWle6{g{nBjpf+5n^DltX+m3iiV4aXnO<=#xGla z%E<0u7O-4clZ8)6&!ysmZ?Aei2d)5QmjT(MLESjzO4dw{-^{A)7mW>T{>0KkVzfxO z@59j1@G519=u0EsGsE(~?3a%OW_&|JBsE(NpP290aR1;nICdGe_a1KWnGtv#)%rs^ zG4-Xlq3V9N9|AGrgS)jJM~n+4Q4AN8xuc#;7V^pGGlI{Bd?xZ4GwMm^3;MHM1XSGD zdyk<~Ex=gIdn}%xv*XCz-kgKg&AF_|qwAq@TS;Bp_%lZEm^WqTx#jss+QSr%zu^bJ zc9%Tim*iD^{NIa!*XZ4~9V_#XbkyzLePCQi;h>m%?0$Jz3t`0`OuUuo z8P=W|k~nC#oYYEre~S=bP}}Gn>sOrjQ!B2icI(QMkL=z3^0>ytmdtw-Z|r`hu4(u0 zhdrC<-Q9(T_{gv~d&`9Jb!dyLNhVRzYotvrMZPv&qV9uWej;%8~ZErbOHB zUi^Aw3e-}2>>AcX_>CK`r?{R>Z=^8SJ~hvL|L4)f2|Frt$2De#PuOwSNoG=zIc36@ zC9h7{;{8)2BKxE$ELD==-#7nKKmW3Kn?HoTU!LSEhw(Qgzx@4GIWb^Yna9T7SANJt z=KZOMKMeBQn?%!*y$Op>Y&-i6B&zC`;x-F+ynpu%xZ5*W@BZKdGmG<_p&-eE! zZj;kGu66m)Y8^&M6_UyNr}yRgc31^`$Z0)o+qiAZPa42I8Nu=d#Uf(fm|w^qHFGvT23 zz%S#cW=^Gme`@0C+rO+BQkSNrTwzFRL7xT$^_%3^HoCQTD-CF)W*X2&JF*S9(DG&L zM}Essw4Pg1ka**agSCg3`}Ms+eer@!*qS$JO`rO^M@0eP*I$x-NIT zXKIhd|EBuQWAV!@ZuGX>Csa4*+oUJM>G(m47uR;+iLtUE(R<{@(Qhp8%6vev?^UK# zM5TI&-ZuK+?JcQ?Ka_=FFn)Q7)+6m2JT`7Mc)&6}GCO#;1zCdh`QsYTEy?>C9gm%{ zjeHOs@BXIRUBZ@Ob!iIN*{6U{`UO~ikyduq2usT;645)@9_&S z0BN>0y~5KjMdloAN)PuQ&&|tebCi(!z~`_82!;3fACpx%R>*}Hc#r?tdwk;foFj>+ zn=%ygnict$6_THq^GEOTgBG*Hdz^p8Bz8vVvyvjs9og8&8=MAl|d8d{3?!~=o9-)#$ zds$&N=fRwU@uU92p#FkB^~;m?0_x{i_0LlS&I%h)1vb0Wa%?V))Nkj7h8yu}D9jtT?eLbIj)i%98#^iw?M?07`rOv%_hvpA z_E#?twYT!J;(Z+pQ#|b3+EJMb-tT;+c31ql+Q!?5@p5l!-ybt45U@+bg8tH7z*C~H z(tNLYCy;9cGUbPem{q{n+&r(io7fDo3kl48MS-K<*jHWZ-Adi-74Hdh_PplJAR;N> zb>7%rUh-7}4y4}L{oXg5th|}8s)TQBDcTl)zc+U43hGW%xMEl2Ua%|kB|1*+>rb1) zged+~Ja?Y=hr=ZFzPZIKew~!Zys^i;Z#32Hv{$csWgEtklq{QYJs$JQUiPN{-Yff+ zSGHd9-t=d@u^o4uMX%cO*HhE>wW}EebH~l%Uti>xk;7v~f4>e<*YtmLPDH|-W ztWMAAYQigf~pK1KB^>eiqK^ZHe&%B`~F!G_+0 z=8Wu$LMGKt=1v=Pqr8ilStIzGn@@B%(HWu_@^0oU3iQyMSN#mT zl_AB$o*;MoL26`$ljkL6bVOP(@j^m|iPs4djGHTXCdCLDpDKDbKAhmz6{qqdO-1$s zd_0`F{qR%F?SdbCb#e}c1qi9c-Z!5j;&oCV;}M+PQghJZ%UAaD zJkXN(U-9{Y-tqhl**fmXBj)Qa709WlReE|nM{iwI>3`7FCyRE+NARZ6tJl^u4M>GA zlU2kRDGHnGBdcYw=Jt^KFpuDC*j$=v&86yRBTasRCO$`83!ejo0W)Z;27bqHE{OY( zHKHt`nDkm6Y7Tp~TJKWO!Zvcey5i)Zfh#UmWLLk)k1DdgU*!80sS00RaYvB-j=$%* zUjwW;RypsE3rj(XPZK!8F-^mjUxOxKRKcni8t!oCx@Y+PEw#PKFGzUWTrlkqjbzwH z1O$9WDbPC&`mLO&P0PcX|Mj!BwFwIc-rwRgRcayb5>jz`s+j#PVB#}gaLw1Uj~CG$xa98PyI zZhpqf6nGEgIY0xq?R{}?T4UA$H4Zez)POo$8$0t?Xahg%1uG8#{Rh;&+!Mu zm7j%)CetWCe+Uz=zQ@4e;Nm4;vL~yzay_%FKTtOGug)J^YnFhr_V_?qH!!bZjtyP_ z6dTCOx}bZj2j;O9Hnij!n*O@*(2evH+K3EtRt?OlAxO_Bea+#Dq3IhfqfpSHh(baU z{ZjJGjz`A?_K9BWr@QGWp zjkin7{Pu6D*)S6`A8-S6_CdiR8FJc~JuyC# zbJCzW-PpSPs$XQm@2kU>ruMD-p4_|YF>GTxpWgelo8fiijsQ?Kx+{KpNUUg@hNZY^YKrt_&BWlj-e99 zMkB4{U1Y6Zx0co;ISuF0n=a9#na@kqkiO4K+hr0RvT8)oJj3{hS8<>3z1%$<>zrRj*zqvsn>##T|V*a>!as+xv^Z(T=Ql9Z~!Ij{M4-zQZe~(bx5O zWiNPTzw@SpADuiuM@L>`06Pf3#z&$bh%rOs^IIns?%=W2mkR0Uj6;NbBI`wmpK#== zI?Pu2Ek(>J-ifp!Ha%+;0eJV=Ej*MI@>MR~{j!gd26lY|m6)W6>^37q_z)Z$Wy8uoZd`F54X#`3y0WgAU!K>kx8La!Fq-+iq`J~i z8uBBinppY@b({3*Shg?gJ;iX6xR;ks*h~tWiOGte_1|?dbi_|nFKlq)>$;x*W#X%k z!fK(bPF?lo!KZ4Tbyy5^H@KFT9U#0(y`c5KK?eLaRno%ifU(Jih_utYh!ed3NKrto zph~^vnWC?gP>)C@D1yy(g`-z|~VQS|`$Yne9dLdoCA9{dM;)EAbkd_wAvN z+g6wXG$K4ld$`{3p;{dD5aE3K4l1W7*CG3rApw{DjyPdgCvnfwLql`Iukn#w2v*I| zcp93MZUirWzphw%#(PW$^jCnkmz8GXm9?oIT@VZ9RxD<9bVq7xr0YxchQLi+i3 zB*>1+)g24-JB*JD;m36>tm#)M5 z-?n{CEd0;+Gc>jTv2z=2q{*e+yM;UpS9iWhhS&TIPw(5Z@AZx+#4kG@)%Oc2NtY@N z?m9F*8m!-YfZElz`1LEU(?g9te0IfEu3WO5M7gBDh=iyl_Ert~L{7|?0!wsXCCwm#a3nk{>u?0Dw+=l5<8hHS%t+y+DI+kw5$wEMjRwYKjA zA0?#-cfbw994DnH2GpCt=XRtNp?-8qn7%O2YmM*&jE@O5$B!uBPncP#8~uNtlB(xd82)yGSYX3({Dcd*CkyWt26bMlw=3nP7iDQ@+~ zwl4dy_qSDtIOl`@1fvZ0Dq`cdj&Axnzp*o(Ma}K+B%*M>VODx5u~sbo!=5Qp+-u(F z8zE$MKcOf`fY5e6U()-$maGMJPY})WZJxJi7vv10JX3^u^)D^8t!B%mk$m2cKVa9> zA0X5h?sw)Vwp4F9me{fC*<;5>#;V^q=H0ht73g|GFI<*EvEG-y!wxomG7(1DZ1*>^R4@(G&_WHNj@E~dV)7}954f7 z5X80~5;hqroHz`JVa<{&7}weJGIxIM18+vYg@?^w788dLYXu{klYUDj&lNBtYr zq^oGE`lGB@Us%}NUQ_ofiT0&M^!AKv^jlS+0=k|rO`VHM{yD7BcxEDuYkW^hSB72X zal0^Y?l&O}-l2U&J~jn{`o)wEprTMm=igCsw7o9Qt4@qUWeXADgP&hH|9qayDG>X! zf}8`&0?<9}b)T@Z7&%v#fJA$;_?p~sh`~vo$nH9)gxF*+;0I|rUuTB2^{JcEK;0I0 zsgoxv^lyYx-{30%IOVb5U+SL=%6xEiyY}(th5j_W$ItX0KXH6}{P&k#ensup_#fE3 ze?G|U+GG2zBRoa=XY(BTL^Q?H+xMM$8MVZ;vuZ^tRizTb~P)nk+9qSCR zu-SX4?WaY&9=$hlaQ7=m;_Zp266KpQiJ04J#;<$Wik-XXqVmnRd5UZ%6o3Ckc=jns zRJO?vdFl3ZOSYd?-u7AA{`#;Z;~Gcz`Wvm)m5niPN()vb)y?B=i%#Pu1BNmOZ=6Y% zY>;839LQ}Hyw}r`0q|ZQzfVv@^Dl~TxNYc!%8g5~9OT^|0itr_xs`2a;ZLV>BN=&=Y3Cbe zURND|1Pl5{>TpH0!F%WpJZC1#w_|$(^fw03KbL#MN*{D1usyMxYs7ZHoTzL)GPia2 z+>H~SyKUHn=i-GIm26z*CF2_s@#aJ&Sl4(K*Qu9pmRn9$zv--5n|1%#zTF3C!tOud zGI#fH6VDB!##D9X`dG#L09>0Jn}c%L$)TOxM4MQ5nZJP=j1TjHL1A=SWnGdVFPZSx zvcg0hM9xdRAw=GqXi5JXc-0=xg7`3)6Yu6#ufyOc6FA>2$rA>*q-At4p|TYe21^oe zrX}$j_JGBlpet>zetl&8oQo=3fowc)$zFRWSE3Mtb4xqVs_YuK^%p)G$D6T?XlBBA z551Pqv}sTD;)c|FsNFF6Tj6*N}HZ{L>Tmfqrq&FE8<& zL%;s8=}NQC4zp5wsE^Mmrrm z4cA-e#@o)CMRgKC#IIH6u!MlxhP2NLC5|zTZc0`dZ#%<&>xWsb;)b>RA zBV1%BFbU;=r9iadqVh*>8^%|>0666*Dw`AWepvSi*m!Py(^-`u-bMkP7VJL2?Q>vn z@35ZqB4%zDdPe`pMWxsPo>KyR+idt|5ZD;M4y^N{Sa&QlY9PV|=++XVTXp5|7+%Rr z8q>%kv1ELB;`Elwb3r(a0vppKh?`KkdD#ao*~#EzWuxz{20QJ%#081vxtTO)&oQzG z_*i;w67a9MsB-gdr-GX@pKnxQvic*D4W~vzNScUmf;1;)aNgiA&Po z(wq1u#$}V}!DjCvX5!{VxlGe~`;5+}MCpbs8do+#6qF~6%JMr~nI|$K0+9!SIDJAd zcdA!zh8~6Je5|xlEvfhj2dZIMMkt!kn$=2f5eg1|B^Kw3R&3b)+hK1ehL2;frZMqG zb@LQQ5{{iyxM5iA*g3=PdxU)#+4m^>F1GJ6_I-hUUufUs?R%nqPqObR_C3|Uud?rH z_FZP*Gwge&ecx!`bL{&T`(9w*i|xC@zL(qgo%UU2-!=AKXW#eQ_iFpT&%W2%_XGC5 z&b}YC@AdZmh<$J18z0z({G@+Wd*m45;R^qY3y)Cv8!lX=@K;=Tl)`traIwP6TzHJa zf9Jv%D13tpU#RfsTzI^~m%H#pg+JxOlN287!c!FfYZsoX@aZmmmBJ^x@HB219_!fm9ci{yJKkUMb75--zu2A@EF1%dfFT3!a z3a@bCDuoxhaE-!Wbm2OMr@QdI3Sa5Ms};V)h3`}NV=lZ_;Sam;0}7w%!s`@1)rB8a zc!&$HSNL$X!Ql~wUvc3L3h%Sjcn-|=^_?GkL%)hB3w)obi6-#egGJkQ!dGl^vRB_&-*$d~!md+zoG5d=P=Ef>2 z&bw*h?8QrCilxS-Rw=*!g3}s+c+R zZe8*v7qevU(p%$8ZkjuG9x<`8!Q=U{b7EsBFJ8Q0?vz{O)OLRCi*vHgy?Ob0%VsZ_ zKWBEu+}KSEW-nbj|0Z=H8@VvPpkn@c3uiB_n7d?YjOHy;FSGAyJ3XBjTRd;cc?;)O zESZ1P(%5bD7pb31W6S4_|Kxddmdsx^cZutC8Bi({l+^p!*hRNi%$Ykc_P6urRNNA~ zdU3`4n`SS#cK(XFv1=F1=KVQmPrLTK$#ZV~;@rzAjz|4i_PKMH&%G&jZN=buv}3AIBuG}=w`-c{?g0mFP}SS+Wd-}Zi!uft<}6>?xHKE$F7>a=;rwBo9F(` zl3P_GaJ%i+C39kzEr`#ZKAW$levyg@!dF+^GIxoKxVB>M!fO}JUObg9xX^U9efAhjq)RouEHcKNN0{{J-`8uQVhkGwlT&S-xOoIX{INpYBbUGs_8MBUIjrQA`qG;G5Y;x zm$MHh?|tvR?|r`K|NWo4AD4S(_F8LZ)~s1;&Ft9+k`2f)wVCUi7n*niOD8KksxegA z4aU|=j7M{Q8<~e8pd*}x*4GL|^IF=>?WnEIy0Fx^M#yHaH@DI5wvk09bA3a*SVdNc zxv`cq&TMTpZh*qHw3+J6kQ8lMj=7a@$Of{et-;(3eX&-2LBX>cjWw$Y<*YT3?7TeK zN_mi@;-dB13Q>!rvI}!4S31b8?K#GFBZ;9((?-GyOzUS6@i8wKF}+Y6R58mBSB0tG z+}7T@ft0t_ny4^HWe1%LP0(YqpfD%P*k+=<(DU-Tx;9fg$;-*w(2kDhi+4QCZs`Cv zuDp)MM!rU*1;OC^ie@lw#N3o5Dwk9>U^X?I+S(}XJR@Ynw~2O(PtbvqE3OnPq@_ZQ z7_EyWZc&P=2F&jUsvQ{PmenR<3N2_hU)EtN%ptrcR$?~MG4C){Hkj+$`BYxV#*MT! zR>}wtwFQgl{|gt9Qgd^j$=Ke}YNA+qIl@5G7MB{KOzTNVW=?q)gxV|&IjkFo+t{(5 zK++wJ##X|sENCG&tvJxudO%GBeMZ_1)QZl_tDvTXw+C&4E=V?lAN|$ME$f;Eg@HAs zytTp%6(=feM{{knc2A{5C4f$Da>C` zA=OP$3H^_v%iZHSWL9R=digYJ5i<+Qa?t<01tlc{JKDLz>=l`1`6aoeG;^_7Uuj{P zm?|r;D77T3&^|JML1vC9kBZDiE5v&E=&C0rDdCF@RpQ8^gxr;hpS(*tc(l%Q#pj?H;x#bJ0tfe9s zT6d^&K~`mUMd3VAk7;dk5%hOTeu3b40>)wNnu$odRtk@>l)=R z7grS&W*3*`R#x)$ESB`SBDVyZxiEKyG*2<#~DNIuS}O zeaDmr(_BKLgc(n?5d`|lPe$DNd0knRSy9EOEHdfslRA@EQ2-6_m z6G&TAOACTR;TF|cQ)`u6OAOJm(QzcRtp@Q7h-tV|Vyreb@+sc8W|3@?jei9s8*!G< z1RA*rj*_MjW|>+m;qfh*HX2ZgETw3wvZevS0?BQzrIpY-MK2X2U7BraLVRzgAp>$k z5JW>uWO%nJV-_Q@<^vf#qG?0~h|`d%LR(hT5|Z0iL)nwUHX4}l9QbG_>tU;h7He75e`q@Ux;Bm6y=n+uyo#9i~-4P1p4hgXrAJ@?? z@mcFm@dcJ{S#m5g^kI8fZ9uqt!bdv~&2k7te{D&9CvAQylmVl?F8OnnK z0y@j3A@oI?aN&mz_~%ld-gEMbjpoXRmZ-`sp;#>FupsdTmd7YA=rC59jm@B|GN)5C zv7oZ0xn3wiSXf_TUSMHC=3QJO=$#gnW=e$Lhr5dmg@m{y3v}Rd~G{N6W+C`zmymvs8+)H0^1+5A9PFH#hDG zmdhnRM}D9GlQo~(wLRBTK8CPEkL`w@NY|hK*GEx4ad|6u^-~2Auab4UGd@E39lMv^ zvvY=2O2|h8a~*L$o7Amy`+^IS%kK&`7mc7iFWWKxLo0mcq4-bepVZ598Ebsr3g5Hx z@k?pFE0(rr9JeYjIJaQrZImDTiKO@h$oz$rmcLk*%ySVhLR<(36{-V^B6VJj$t95mW3k*ax z|LS5`g;J%qv6b#3yMKDq{)>zGH?Irl|4jz}MRKwG8imS6WAEtf`d=jf3%Zhc5LXy2 z2UZDC6BqnIg9GaTa6+0N?kPi}gkD(VJFpbr&O$Q<85zpo1^iub#GCjKU*bom5r0_q05XGUNgxR#Gf6P^(L#xi zgppY!oJ5dFL}k$=hUl@7izRU+o+OY&l0=f>5mL!){ASf$l19==2FWBe7|9`6U6FiJ zKnh6_DW;AZ4!NAnBlAfGsU%fo0a-{Ek;P;QSxPP;%gCiWYCa;iJ$!p|w z@&-^m~39Ql)+C)lRPykHpxqhwT!nz3PQ84Y8{Pzl>J4vZt?#5gl9 zj4R{DxHBG%C*#FiDTlK1SXM5Vv?B@CY71Z%wgs-Y0UkQ`NQ~&CmBp8lf`5+IZQ5-$J_zA zKS}bL0;UjOycRPhOes^wlr!^~`Ah{<$y6~5n1#$DW-+sbS;}0(EMqQZmNP4um5h<8 zW@?yP#>CVy^-Kd}W>zt)nMS6GX=YlOHOys9E7QibGabxYW*xJh*}!b1Q|)gqhL`Ps zO|Ji0sk(^LG4PTQWbp4u;BT7$Zx;Q(Z9V?Y&hzB|u>~R)8${#bsaA-<4w1iDB7A`Z zTSP3@=wG#Q8xZIZunCuBx1>By@`y?LYs|!A%f!Ne`zBZy^53>E_zSKU3nMg!<>#4X zYiOBZZ{X*wEDlx_{{uGX-|jvb2zHBdl5H3M1~1{N0^9)Zv>EdC_FHesA)+IKDsB@ljw1}qVyIZ&GqCUuN(J()lA#s>zbvYx z|I_#;m5*;65Z^e^*onqBh?^Xg9snQWq4Wo6kq*W^3=oO59`|@aGO<<80b~Gj00n>& zl+OcH0Tu&y8Ol}yYLRZ>>$Lt)i3r09P4P{|ng{{>#g`Hh3;#R_8inUhi1Vy3CH$cq zifFkL;y+&pnzkjrVC96k&bJwS(I+?b$@j0-qyJ&V2MaM@@Nh%_Ex2OnNaIDy-wpDi zd?`;S#FtKpFX@HRu{;;@GQPx*NBk%MDG|BQ{!#uub145DKpvm~Py{FelmX^p>?;73 zfGXq{;=UO7r2xp7S&sWkKsC~}0281NP>-?(@NWdH0ki|wqx=foIXv48*aFxJ`EMgW zF7%UN`TFXoWXw)m z=q(ma00ltS0VU#LcVuaqJI3$gi$16EK7H=`x6eKB?63T78Coy&3C}2Bcj%Bibm-!X zt`GhdJ+0Rj^sawH5B8QlkiWM6;@bWbd1+xu4|34U&fdY%$!dc@D3$;JSI>D&M412K zbwS?L`CGgT3c3eE;o_@OEV#hEd3@yTx$_r4r}OXP^_Mjc)lX^dC#~hCK2NmJOXDD| z-&|qiTw&u}VdGq3;~d#wKqw##5Dvbub!;@!dO$27-ojdm)tI!7v=kzt#OjN#L#4Jz zYf-6A2Nrgf^#b?+D6T(1-q4_Y=^s>)?6Ea(n&zKju1x7ObW6IFSd~#6I-evQX+Al^ zZaKnkIb!|li1n)@+Tw_|IHE0%Xp1A-;)u4`GFm_&AP6uM5DW+bgaUMcFu*LxH4>l) z!~@_982AEaE+7q%j`}kIS%4hy%>xtwijXe>l<`fbp@ z+8z&}pQ+IH1oQOPwu$Z+{AXq9$ijEBK~i&g-%Ahk)|i|5Elnv+?Et-+n_7+1WU6l3 z&_>hLQc`@Hrg%~s!%W)Dt9TsxOslP~r*~={6Y9;?G_3+)OL-kls{zJ_mQ}a`huWmS zw~6$*bWuFXzG+~8HKP61z&>hVA8i>M36;OoJrcT2Dac&bO9_eo9KA-g<&>8Oc3I-3 z0WS@M9S%kVumjjjWR|-F=B5MYrY#c*hyp|dFUInm?vwmodo2hTC8`Q?mzHPG7t9dS zCFR)*giM`z)#}>n1_6Kl#?}_RT=|>Kn#<}}ZMcZ3RaT4i)qq_9-io6CR|7aeIRCLX1K_PH2J-?PPz+=Y9Zc-SUJc*?Zvfr|TmWFRhg_g$WCrd4q6Hto z8o&d9U4YL3^8yLE8L%=Kcz~6W;0HJ!g**V8LgZ>d#$%uZXdg#80Gka&4Iuc-A{V}9 zupy2+;9p%|l@T%sSXqu06To#IBJv7CZoqWcFCyf(OJJ*(VgDHrwH(i@@gb}UCqU{T zih4p!fS1=`6~Y036Ct~?oWk$#lW%WE%(k77q6hxt7Thx*HWPJ?UW&iRY9yo^yk~%S z44?(z+DJ(KWsrXxA?E?=c0$51Gn=m_r1N@0KDmjIhfz=IErfgw_{Z&poWT$M$KFXu zHQ*|2;r&NfIQpInco{%t(F?GahdtzBEfd|6sWP#ahsH`Cv~7|s{-gS5qrQ6p#~0$* zEo42m60sQMK>IlZ{ag#MUx)Dq&_1g;yyNJ^`Jm0%n%s&XNQRuh0elaLg&fKNm4M9v zDi11y|GoZK0{>J3uCN~fE*f_Lww%e&fDyn205+gWIv@k^0ALs30s!06BnF@d+zi+b zcmS{q@CM*bz%XD0Z~=f#Y;pmBt!#1ufDLW(Mk(+B7XS#0$OYJnl~2OH0k8o~p8Fc} z9&iCbe#8BD_^tDp7XUq=96*isFn~M{dj}xL7_tIDMv({5x1~Qn2E+Y0OVVFrNd{mB z{bAIzxc`p(zq&N2!VyT$xC5|#Ps#z@G_)VUA(Z)k;U$iFb9;mCJ z7sa4J^Yj@7wV0QlA!{j@p3^&xNvvy-=qdii7sdUrT-cTnUVv#tDq;QM;_Bw^;pye= zrY8k=iKK2X-0 zNWE|?tZivG*5Jqn&WYBTYR!#}MuHO@LL%E((?O3l3%BeVV=Ed~Biw3hT3d|r31p!@ z(|R0%ZX%a;pzpQS5K2c=H9b>W-%M&-z#0cyO*oW`%8X4&wc+%!fZR&Y$l@4qtEsus zR41l{LL)uaVs2Ya)--msk(w3=h&142xCt`CgBF}?!LjQGveDGqLRxUbyM0{?{wimy z2_439Zc>NC(}+>mlQwj_nFt42aKIe>YH37&+DuJmAw|cBOc@|F&eX;a2fF&-c?(rd z52l#f`94)6DKu3qmHJm>HrJS2YdV@p2R)3_R?~vRqr41xy8q7GD_Vm|thJT!Ijh>* zaR}K&gu%kuPmC!Y5-MjL!>y-!Qp0z81LRfL*n(5PkdjbT)6t4Cs@Wj4uMOx>ENQ&? z3hQyi8OMWLgig~Ok7aqr=Y+=8nZcfza0DIWS8J@V$4MmNMwLexUD`Cvlv=7BM$CdW z4Wt_L4X2LyT6u2OIO=0*#FUIskEKaM*3{T&UekuNNT{K`p`}AqLt&(Od7vIBji~+n z(9|`W))PT)O-87GGlWW~kvx5B&1fd&${&)JrcgsibG@;(qp1-mwMa`n^m8@l6Qwsb z@!ihMB{=wA2PNcnvP963a`DDL#J2-A9rS=SG4d5sJvEa?0i{K}VMd!;n=qlO8}XF^ z&P;dk@@s_+sHf%v=7=CcdyA9_+=PoR^V4_U|rOApCPee-UH9%<=a6}`+3)O7FF$*}&0^b$^wZ)1Z zJ`54rwFs#A;)6D!O=xsBW=mP4CDmj}HCs|vliX6)W=Y9)AfBnCCLT84GA0OysMAIuKz%(w zCYGXXi=`DhA$WNU<9w>j;%E!EEa8?d+;W6lu5il}Zu!EkK)4kOw<6(IEZj z6K>_gZJuzOFWf4GTcvQT5^f8G+d|>CNVqK)ZcBvQQsKr&8BI_poFCmlRgOQoTT5Cy z)|ibAq>4@}0aJF(A|-~-q8fsW5FQA&M@S2{L`dg|b5_V@QCB4-v#G5Taiqvk$d>YM zO-R?7>+t~#@1KN0u#8bT@4^JE3L0nflQ&ziMnXo?MCwU}5_FYU^#;N23+XmKGLzDL za3*D_h#JhT_(X6WjxZz9#z%J+O`vm4&S0)tGMH;}n$9&#j^}O3(Ya>H(AjS3AnLZH zQN5g|Q_zy5Es!&4fhB_$$Z6UFOO9`WB}ZFe$eg{)q0h}P@%M7SHod#rem!xv>(6bN5@Wwo@dCMEnjs1(x)s{!eQu!LFNtS1Ljla3+4x=m+5DIVFsBYW`r4K#+gaxEb}{ajyaE)^(?Do)vPUR z$Kp&Q>%zLR9;_GZ!}_uQY#1BMrnANDF~v%@nyqE)*amhL+sHPvYuHw{on6bWXE(A} zuvf7hyNTV*Zeh2w+t?e}o7nB_4)!+oe)b{u8Fqzgjp|C(7S*S!ewCj(TfI_Uq+Y0Q zQrD~7)mN%_syC~*s~=Rqu6{zjPyL?yWA%XgnEGe+i2A&GnvKfF)h1sttbB)kpY3HY zQ`9TAD!o)$s%MnnDr}VABu!bR)RK3Uv#>Gq9lKkZK}v8=a5+u|W-6B}aS~8@mGY3{ z0Q&&mP5;EMC!2}0;vvNz#WrGAtyTS|x71t?VR#d8PRF$aiRz0lRt=gk{O?6oHrRoRO!(>!tqjpjUtDBWS zD}GUoD9$MURJbTTmD82sN`tagxel-0&Zy_8<7|4BFDZ4Z2z8LnC(21>pejOjtI|#t zuX;s!OnFZEBu)&zh?9ZuQ{KA_yKdi{WkB~9J4uYGiYnsU0_>dyUuot?QORA+dg5t-}VjL4{VRw{%G50`>X9AwknOY##iI7(Q1M< ziJC&q5>11qO|wzcsoAQzS#yWxKFuSVr!;#t2Q_bM4r@Nue5v_Cb3*fr=2y*G%>|9x z&e6`pZkkI_Ltb3>|5=xw!gvtF8jyq_u0Q?|Ec|V_9yMfaYWR~!OtPgA<-e*VV=VZ zhh~Q>9JV^#=J2S)9)~v_K5{tb(B*L2;Wr06M_HmM9Z%pC0@&CVkz7g+fRI>IBa`Wcfzr4Tk!L}!!d+FBq4u9zT@nc6m|9t+}ewjC86Zr->@V9U< z^;Twp`Gd7V0F}a4u$Le_+RE->&Yp{_! zbCQ41iEjc9iX~m$qrH=+EjStRB~JYJeHE803 zUz|97aBXSK-i#0rERl^fvd%MM&cB6xxlOHghV);Hx zQ(bBm%stGb%;(*M0w0zP^p5t94YXZD-evYPZ!#aq{W>a1=qHg+&u}}-e8U_UJG)DI zew^pkN#10}M9kw>t$WDKvW~28ugv(1p~>FS@!lR@yd298j`SNl6}Pa4@!_H2Hcqjn ziACg_FOCmE;n+ym2@`iAaJX-HsCPBTC`Si|>aQX1AtYYIt`|r2cd=bWY(%ekH}YcX zB=4|0#F7)gb$5-P?j0KFYUWgitm{b@`x<+Q{aK+<*eSdeL5gTa;)#LL6Ler+qP=E6 zWxwt^aiVvqoeN;aYLq4g+sBTw=jD#M4#{j|$Bmp~2jqa}b`A~<^@?Qb({g`;pkHDu zC&$IMRgVvkba%CK%%<$?Nw#8v;%dcPild6-%BPgCD&JRrVN@tCRWvACbbPShw6H{YaqO3*fk-X7?yaT7VLxJU7@s93gQrF~Qt6)z|b&>kNURFPwB z(e+NoPVs@*b;ge8(IpZcXiy^Ho>V@le6&k$O`%DxR4RRxGnMtqHs#i??o<6;V*_17 zvXowxle$_~IZL^qcMPKK>1}0|iOQnCp?F=Ucu~;TF}Y;CU#>hGm7VGun_AyTRNDql zbPbM;j}D)*(!&F0PVqQDK-Xcg`CgwDg*Rz6N;8M$3g(M_ugSTI{P+3m8uP@ z$5hX#`c&g;qIOXGtM%%XrJc;LD)xjR`*)43%0)FzW)pvM6b*v$xxPlJidH44(o{Y|k&ERe#rF#g(-R8>7u?o2xBWTq#=dPV$kBIRDR_8gAdjc-d^VxkZ}3USh=u zPRc?H7H#+YHd6ol8(5pyY~GiZHA(hmFPjxM-`kwDnds}sTsjR64y>PQ%+OjB&VywSCU^CDFI|jPzn+ZXX#N7=%Gp z+;026=$5v&vbJB@cFA;FbYyg_x3-hH$@a8d9Mz`Ouo_2Ape95v4E&px?S}3@Dd@hb zU7?BBlxdb3H!1Ga%+cgo+*7hx`}GZ-Nhdk!fBuWyqGUz_OswX0&4*Un zz0hJkdIW26i<#AQX@)>zQOZ`-BWOge)w~ZKo){I2Ys9A4<=;T^?c(g_+O4*0vwPm| zExS+bb@uW0nf6QVSHC^>>qOV6iHp0=sIbemE3sQHIJfcBrx7CDYFE`ISd@iP>2M!*0bbj4AVFdO9QF(jz7WTSe6|n&?cQ(T zLY~^Y_xYEQdGLrdBp(?S_TShKI*`9H!%zH;dhZ?W85`)c>Th^8>)`F+PlKCKs+Xeb zhS#tT(GE$H&1)WgRLVE*0$@7Z3{H=TPg=Bq?o>$Sl}O`NCRQ zhwB`6$kNS#*A?Ahzo?B36GMGnqZ6kGyC&K@CqHx8FO*N7{axzz_QD;c&|%o&4~Gkm z_KwrBOS0T?KlVe8JB~V@chWm8bgFTB%;^=UPu`LzLrf9J#C|E~qeU#5%s>_z`WLmG*xnv+z7Q+I4DtqLmAD z62j=zX(2k8tDmp$*B6;5g=S0}AZ>NC|<*p2lMkB-ZaeVbUPM5kh2-8-3ZrwsW~ zx2*fK5Vc#35d;h@rn2~k*#_5DyS$mHleJfF|E!skgoYl^5&a<2o zoU@(FtzzR$nA;lGd78794(}V1ZpT}Z+xGWb8Qx+mZ4MWOysG#HQtaI3e5Lbs_yvqi zmlBs%E;qZ}>+*!lK9?gF`+4n0lKy^Tv~j-E`AO$DoR2woJNG+d?K9SY3IVT0m3E;` z&pGesgA=`_)bDSm^vE`bT;FK^;Z5Uq}MXnPx5y5E^E{3U=^pvTM0R0 z7+qprUUPY077r%|x<9qCE?>EH56DlN1+7_KvW=9uGOj9Djq7yR6|UF1-s<|O>mJwF zUGy6Rk`U6WiZ1X0YDL@}G{h-yt5 zgmbK=GaK$|6O-<0c5Rg=aXOFJ8Ib6Dg}62kNFF$2C8#;8I`KE`@3zu6jg=r$tppL- z#=5@a`UMTpJDE(^j|JtM{7vX_W9jvz)b&@_KiquW0^L&G^4%)kE^({1Xy2Bu8obML z!$Jj1(j#tmqUt`!t5}*8bi7R$FmAKlVkIM88uNyN`snvJ2=I? zWjB&Cw=Hhl+;+Hq;da{Xth>V9(>>5V%01OR%e@MN@S$J{nd};++r4fNyFKl8SP*)? zB=lS=bhmwO2kFFoXNu5^tc9M-H~9y*Ua84BVw3ae%oyxFiFMh1SnP{2PXpxrk-Nr9 z-gZ{^-7>wd5MyIrHBy|t|SWA1xob?z6fqt)X2 z7x)205M?z=_b=Ula6jddBM9#E-l1`<6?=rW3G)CIpZl2mSt`DF1-rI|eBt5f;pw6E z2=j>dm?JtPtIe`+#Q6TGmDl(}Y~{GP==sWGjsj{G9t%C1JZ|c4WIZnRFo{DtPhi42 zh=zR=`O4#Rk1cYiPKq2SEt_;7*Rvk?d+f$e(kW3&fAH}XIqLC(h&ais)66#d*(anX}NO@Os>9ub0*4(hMvAQuKE*{bLQR*SB6jV&CX7-lsfb?o{mZ z8aOj5Ye}Wmq}I2w-nQPpKzhR4N$%1bq2FufUqj}5hkM6)r%UZSWJPQcJ9b&cHd5ie z!h47g`$%^ zY;DmN*0SDDd%tLjB3)pUyz%T}+OmGxV0)z?@ayYoz|Pr`tp|FxZLr%%?{#7OVxz;G+azF7GWQt4Cg z=jxZ__oCmAe!owvnr5EXG3~l(H|ME+I($C&`PH}7cb)H#dX3NZKDYSX?en0|lRkTV z4*I<1^TD3ypMPG@g*faL?jA1)cb9#_-DkgWpYx({k9x{s)D7utDMTtxuQF z0J4-H5&5#>b7QQ=SLN&I>*+h)H^eu}H^FzVZ?1@2E#fW|+ps`vLyg#m`C=OuiEX%4 zY{N3K4VT0zeHZzz@U8c45iypF7%N1KrD7|p;_ZBI^u68pKHo=upYh%A`f>GmUaux<6~B#)V>CVe}jLs|JGjms^zX0*1z3<1AX1{^k{P@`N^LXJANJ;-J+zb z&8+|3{*Mfz65a++p0|#U%dMaSG5yo&y#cck zcTN9t`j4WYUL(d`9%9_Jh5Ru6j{rr0eLzq^ctD(p^|i>hwT2CF4e$|K@vVjTh`@yT zUJ4z)6stdH3D$aeluq((K)Lwrw+1%g(txL0*npaVCQBf8k_KYW1zZuZIpF4iI|HN_ zT>Y4`VjIND0)DXy#0JGcY{)7Q>txmhydo!PYDM5OL*(z)>U#oa@hG9m+jHNR+%-CY!6i1EhjM+2h!$$JkiDSQ=?jFXw zTK-kdF=_8}kHorD@zjiZ+Mg+SUsy^S!BC9hZlbSDIi|TyG2^}&PtSN^>fVc!poAUc zqg?}i{q5|GH)eb&cjeiOSNPBKa@)i-%;=jjECyNYMLD-G+)5T|?X@1-8QMA8Y;C#r z5^aqX;Cv*H$5kd)8=}?AwYXWWfXal)v)5`CCR)9QD-d;ItvG&HEZRaAX)o7aqur@} zTl=B*E3r+RP;U*Zy+L~m)%cGkgWq1uYIkXOOM5{9n_;1}d$cc07HW&wm91iU%~>@g zNvwL^;w@ycc1U|B&@FIA;LN}nsf(Y0`JaI{7Unm|JL}u51E;x&BJa0ioGdb4zvLfe zN#Ojz_P~Dxz82UMI2ib6P*_lW(43$gBOACVuz~lVSWdj-X{`YK-UAG4%{zw{U)*N<9Hhz_-^14tKE)>iN8A3v!aAX z>3DTAF9c4A+kca0MUX1UCCKWfXRbWdHr8gh!b%7!VzV}g1ABI&jSVUex~zMko(-xD zS}wC#HSm`=O^t&Ctw{bzalm)-Aa}QJsWf=Xl$m_%=t5)nR#&Ldqy^B zU(g$}kxvxD=?yh((8obPQq$GRTp1)HH43yP6{3q(-?&vouXD*vrKXcv8O>#R^ zFWRfM+J^Q*1zTs{^VbUQ_)7&pSoyx&tOg{tjh*??OdJKFM`SjN+oSu9_Y-5VU+7Mq zQkSFKta~?18I}`vRoLsZ@@9P-etr1q2>ca8LvJjJ?TWLBUm5>I!sQ8@6IIEMDTau-Da0+r z3+-HscCJG^*Q1>q(9Vr$=jCYU6{!D8)PEJ~zdC-K&M_o5Brzm4BrPN>Brl{Wq%5Q& zWFhD|(077<6X>r2{btZ#3;HdfzYg?UL4SS1Hl0&QYslJ=jUiWsYzo;DvMuDMkR2iD zuWlRY{{i|NKz}3XZvy?zpx+MqTR^`9^tUE%(>aIi4S6x-<&f7y-VQkw@?prQAxA^d zf8A{cE^r6vACBV!Z;R&wZwLL|puY$7_k#XD(BGf5P3Iai8ZsI3d&v1vHdGyI7wQ!1 z7E1g70P5cb`Ug?}L#Y1|&_4?L$3Xu$=$`=nlgZn3ZlSTEiJ_^XX`xx6d7(w2WuX)~g8m@r?*jck(7y!wr(?J2*wDS9$3uHU`$GpqM?%L#&xW4U5&d;K zkI;8R-w*vb^hoFzq2Gl50FKXs;~sESfa5%HtN_Pma9o3OPn3J1+#BUSDECFVA8MM0 zn*32y5Hv-p^Vey0!MZSAq)xAk*Cp%b=rX`}Cg_7f9|HPN(CZSoP!;HBfj%7c5ulHZ z-xlhmTc%s7tJO8=8g*-Q?Yi~4D|8&_qd*@G`WVpbL2p3)v7nCweLUzBK%WRrQS0v2 z?b1D>dqVfL?s?rl-2vUJx;H_e1o~vqr+_{c^s_-f2lR76p9cDL&}TqXrt5yt9oO~f z`gMc45#6}%tnOSG0evRuvp}B>`W(>bf<6!Q`JgWVeIe+JpeX@i{$bj%;IOc;$S{3a zd{}bWoG{w|V!UPi4D_XV%eV{l<)ELR$c5}p;zC|c=0XmEeqr+Ux*1_h!e zhP@c}GHN!X<&B_k0{tq`uLgZP=sQ4v3Fw!B{!*h&*r#FNg#8?LGVH=E=UIN;y?9eN zXy!Cqc*j7xdU_{~oJQT(!G@gfRSJBVdkvtm~GtoT{8ExcbBn5OkjNc>)}R?eC?Ys0Kfvu>bJzBfNG-i~cx3qW@W~d=;79jyw=jxX56pUe*4|mK&3bRv=VFZXoa~V3 z0#|fbFNuzQ4~->7pZ|5Ml?xR&e-FAT2=H-$HbchEMSIdQt0Q+U^~;Y-6; z&?Ga=|1Wg83J9l%YdQ8aguA^wYNlnGp|4ei-yZ%z_%q=zgnwz-=wf=hPRXNl89$gR zF+$ozdcxld|5%pHF=>VJGvcN2AHsV?F+C`icVUn6WcZoz3lTUWLSJ(*f1Vm1?ZpWh z!#oM+#K{4(IwCM4A!;(}T(rHRMbAd)BBGz)`+PE|^*nHJpMldpvPZ9oNQ+t+g^jF; ziio<1MedM9#9A5i;(+7Hyz;_M<`j(9!d?TAAW zA4Yr{aWvwqi0>kP0<}M=r-M2G)H6V>1$7{(gFrnK)WM(*iMNY58*wg@L@Fa~BOM}L zB0VB~BK<)f3Thpw!$3U?)Zw6x0Cgm&qd*-E>X-z($i&Fh$h63;$h^p+$g;?a$c2$h zLA@Q+ET~~|l}b>nK&=L~4XABFtpT-NqFrQr(q$@f652ekpzv7n9vb$pUtd&10jLW>T?Fc4P?vzZ6x3y) zE(i53psp||qgF=UAN6q5YkIq=wNV?Ru8P_ewIym>)J;)4qV9;=2|ktJQw2T?z-J-& zECQd!;IjmLmV(bE;InKG5SPa*qn?S{6SY6;AW)ovLRAYURN0=Qiuxexlc>+5zKr@d zmYX~TRx7}&26%12>qus!PDK40$3_iAoi=cjhk^6{K0Nq#@4*yK>-2)2jaEe4=sB%3 zwAyihl1;RKbal+bF(dl-3_%8S92*@Jtxsm7!=fV%oO)FTi>`=X z7`-%lc`T=18ON!O@tnFkfm7Eca_ZV7PHh5qT?(hJkGF|#jouM`B*rNwI;Jk>e!VLC zs_0G8TcWo`-=yc%4d84B{WQ?b0DhpsF8Yb+r=y>b-WPo!`qk(+qu-5wKl)=}1_5&> zY6}K-2x<#OZ93Ez2Fh8eEgaMlv3AiXqkoAWiXM%gjQ&0Pd<+|-jrMJ^N>l5^C`aLfs za@yVd5;)cC`;$4sRYr^qlG|1E+%1SA7%5slEmEccA_r)IWgwM^OI+>YtPC^w;Ze z)Ze1NU4OU!KK+CGNA*wYp8@r8P`gP@e>KAE^65J&>Z%AJo65e+&4( z#B+bZX#Ek9q||?=|55*|ep1isztn%L=l&>0`3!?X->V*((7y%RgP?u&1rWX#&l-#dENxV80Oietds8^})kKA1onf!x zph0QqG~8mi)9`dGYq-vE1EStQ)qxZ)(EWw|v0R|n{v?HAm*Ek^6LFk2GM>{$C2-p4 z7hgom;e|afV$_@V9eg2)V_&Oh4TlV$@JD~i@ebB-%IaLO<-fJmon z$jIrl?AQ{i zzU@+dI4e9Qsw!w!#aF?MV0U9pcN1nb5bXLZWSfuXKJF?asMfuVu%0XhHCX>4K3 z*^j4e?^%UrvG2ux7WHm)J=GKqZV6#UJ6h{DEQABPigf?PtT zAZ!(?Q5_lVf<&ZB%TI&-YjIsYJzZiAAI2S%7z9mWu<6v;#HdjjHyn31ULEfxAr($R z8o5aNV^gI+J_7MsdK~?07shu?YD>&W0~eSu*o!lvja*O(|Cz|1_{HLm=F?5e_*L<( z@mIz_AijBKd7Mf+j9-pn*;NGfCguRjW+WB)KO|PYMISAzq;Gfn=Ody-lfvSR$<4_d`Yk>v^OVITKbXA5$|Tq0%+f#`n|yC_*XnCXc=BV(Zzq3iWRssxetD3t z8zl?YB-+cSCN}x~*&Z>LAbu_uiWjV#)q-M*P* zq&TN|r39sf^Pd5d6IR{P3a04%YT+~+JFi2Xl993`Wo62Slp9m-t7cR3QpzQNd7H&H zX@&Xj0Uw!CpRz{sk+(@c(qj-bJ_kyemam3DR7b!oR`IA>r(%xIIEmRgXyGPORHOT8=gVM~LaK5=S{KZi(` zrB+!RhNmSlL^iOgTT-`M)MCxJV7JpH_2BeJT06-VsZUxlT_#(5 zmGnjj+am33>gTE7NiRthq8U<|)Ttx0RkQtP@1DJX_FL4Ajt!h0@5SM`{vnw0HZHWW zhMjFc+pTK?^Cc+3vL#_?P|XgTZJ3=t`_kEWNop51#c^&ov$Jz&S51vwZjs`w4W~`) z?AqCvSw}KEdQXF9!|bh7XwE$_HarNEjPDlsDBzs!(D3k(byeq@WQlxhb@H;heY5KG z*`LhrnmsZ5JU+kJJNwv__l!sQaHXO155w$1Y0M4Mn14Rnb+T6~EoorqxX#HoD(3jk znK>uiGPKVKLl}i2oMV`iDh=T?(hx?`SLke|Sv6Q&y^VdZ@{L!)BO&a|YoEF(K-S6b|e)#^FV%{egV$GNR@pPc)nINTwh z)v|M5pL2Mi3u;k|ZAh5Ak>P=%@c~S#QGChR2Y(pyY9l-6#M~kiI|qLp@#MIOP|wae zJD24%y{%lxyE6Wppg%Ezm{f`s<_6A1WJ4nbm$~6`P%xV}pq+Zxx#@D@9Bdc1vU4lv zR)b<(W_p4mTjjffw0`b2y(h-SRz6LiTiQ1Fwz>CP+V--{=EXL}+&yzYoBMSWJNKoz z@4$YEK|;vx0lXIKJ4rvj4V^7~nG>>W93OCmswPI(uycFU>}kUW=l(IZVZ0}?YFMuz zzj`*!J55K8-k@CjJ~_E}Xf+o+Q~p-gW*Ea6vejyOX0<5NmZh1~+Pk|DXAB4v+E3Pr zD`cJcVWf)>aqjz73VGgXRi@pOetY^)87iDlPJ1Xl*`!F@o%USX81+!&bTqCdm#4j% z_FmfeX(!V9yW6?5V@+(@M`=d}YB`*?v3!VpiD0#+nl*#!fHr*xNlQQ{JW^$>>WEo|`pOX`U#pF{6B-1m}SJ4J-CYPj_r&pyfNjFhW zBebR1)3vl@HYFb7tKCd4P2ZS)b^7M??G*J7iu$`1>RgKY8}@;(VZTX#F#YNDz0`~e z`>N6WmZ@4ge5Xi%EB)j2qw@0@{<&+<@I?2Zu)S&==;<@D>3!*=GFG_dtb~PeD!#Zy zw9v|t$J*Eo&y4BfD@4xXH-C{n`@E(@k&&E{olzza=URC9Sra7}cb6@7MEPeLZIfrv2a+eiU6)Y>L zD`+ja)u_pMKI4^)_cA`tIF>P(F_{^jiDj4+{x(}I)J`Grv=I!I9}HE-cNr%nL$y;f zRDRNwiQ78VL+$KPPlqzoHq$NBCv%2{Stl<=7l9WeJJ`;VF`UC)%?19_s>qz3nVES> z?{FO!?Ku0!9?mSvTp)`$l4s!nJJg5s*NB1;*Y1~nmQRf`^Qz2iGw;fLR@j<%6pm|k zlD^FC;x4>~?$&4S%6ydW)*qFQ2xulo8##7CEt~mr=7;pVZ~M%*q<7f%(hS0PxS8K( z4)9-+caj5{C-~OrhM=YoWlm-}W%*@=nAyy8SxN*9_|bzv#n4IN0O#b-R+@Nxc(7+| zoPH~N<{`@w&&lHrs;oI#muGFsPRrhDRA%L6&Cj|dt6CnF4HiM(BZzPsh9k?I)hZ3g zJ<@PYlO^I|QfJ+k^+eX2*~)B}?2y0tcI~wqHtX4}7f&HxTFvR)Ej~KGmd!epgMiLYAdUvUGf~|cT9fNGHZjo7=1$9?5+7&*sbIN4r{VbDMKFvz z@|{*T&pR(b*o$(IZ0)5378^k$E~$ME^b17#^%3 zJc}>s7M6u<-c@&3h{EAU;z@gx3qJ zg^i}@(c#9MW-9W&&+Ez?$-9srk-s>z!hbsI%C-zP!Qr zN;qOu$r0OZHg7WTkGIM=;#0v9#~ekzO@3g0XtpxnHQzJeH-EZ;Bd)O=af{=Kdpt)x zDCN~3=W@g)SCyZXKRZ7oKR3Uqlq0^M&gY2gvnq}#k7aXYS{0i=FTW~_Bi@TSqR3Rw+#zZnuy1w$=)~{61N4*khhR8+$FVDgm%n#Tw6X;o3jQ&;fi2()wqW~@ z3;K-41)su1p4h;VM}BKn7TjO(Siv&|``_k2ZJPZ25Po)tn>*WjB@|DgUPYMERL{?ne89bA>jAu7yhq z?<#z_@Y%w#B12J9(E@ok)>^#QW3{Tn>4l+%k%g&+Mbe@#k$>?VYP}vi|N2FHrf*E$ zGkvpOQD`h|E#!Lfah~ecLbJ5ydbO{&wNtAt+=x9RP8-<47H%oLS#pk#NzO4;j;~hA z@ztA+iozEQ-zcXOX(dP3m7c zLQG2<>k=bdG_7dXlDQb7AF_y70*8`{C>$XFutqkbFARNP1vw4 zdZOr6s=%FkyP`d^KF$@Uf!@C8kX)G7$`*ZHGJ<@*CvVNnYL|>9xl4;@mkiaW3vPz6k z1MI2K#?Nm#nrurpmmDm4v*g>76D32X(@N88*ph7}&ta`NIMxf>L6-?^$-O0yO08N= z-xJW^fl{xw1b*>2Z*Ahp^ZjPF zxl#qM2QwoCJ(wAa-`r8`D|M4TTfK2;_%vQojSr9FHZg{+$DxVS{2~UcDRCd}?C%X6 z`$z*@T2y+4QBhh^x~#Ou^6+s%LOMvObX94aB%#M83F-KalSO8A>GsmMO8+dgEpsoM zZe&aED1CbHxA6fq8=khUQ*mwSW4xBpk8Eo@L+eWSBSaY&qmpW@F!0l0*ODhnzbO5o zw6FAZ>4dO`nB))k3rojfo`Ef|;oRgm;>($9Wg}B93+e6gaeO9-Fk7#fG_z&FWij{_ z6LO|303zlMjsdCY5lEs#VNd2!(t-j)<(8$QCYRTKj17W`JGK{*=1!L#MeNs zauks>)XlG~LN>S9l|5YcT-m|0cgsF2_b&G@*Ol)q--i!y@Op)ha-Dj5PYEdxx$S1T z?H>#xF4|0j%YG^wD4QrJa@b6Ln^K|e>hgs0 zyz*t`_2t)<-z4aCC;M%A1}|6}J|3-M%jcIbqz9g6{vYE0J1&aje;mh;xdU6GCTe1$ zL9Edj6YM2wjL{^<7(qo4EF5rfM?0z@irmqAkzzpvLOkYd3BkXNu2|GNDNw!MM+Zp`YV1h0>IiIck6pw*?TFLR8r zHidp_8QPo3iEPhY(CX&Z?e)zdI<9B(mW8^a)&J@B=U^z|+FIe^tI?%5MsKp-4|=AQ zvRI-(DdtG;JH6R7cB-Vr&{PT1`$^B>1JV{j`jB_efFDJ(MY3BU(M#0J(W}uvrT=Qp z7i%W2S-8e=ZT-4Y>y+zy40ae?FlbyqVf_Zfk%kF|*@h2{=82JBs@^f$nXkDMU^M9` zGojuoz4Ln2WDQ2J_;fVI9%zg(*VKEcKSh78zM*~=RM4nD9^`$oQ17|kD}5ooC_m-| z`!H6^j`Tm#A4xx7&ONUHuX2UPC<-If*#;HbUrCYvBK_Yu214>$C59hzm6;>`E&3K1 zZP(DEi@)Gs{cZY6{UH4q{r&psjG$l2pv5mZx4R4UGSxoIbGtjwxZPE-2ymT+NWWbF zs(y|B->kcwCdH==VI1TX0xG@K=lW0eAvGVBeoW(Y=5s|7q~Et@0H=W+qGo&ewUHB< zmsz1TQ`gL(oeY{-ug3_fXw5Hc^w(@$W61%+ij(TUVzv6eaSjK?GSQmtYy8)itp!6K z@q8Qu>}nM60?Hd~G(VC_;&zWU4!O;P&dAX*K=1~2x-orvMVK1QQwI8qj zjG*W?f}-uEXzj$cKZ?=XscYvv22V~}E|RuAebdzLs?eQ`EeMYqz^GuMm}DbEYuBu` zc+$`g1K82j{Fq*gGrlIWlMY`?I+8;|^BmCHkhS0efVt-FpsZcHcWoloun3y$ksv}h zc2(=R(`e90HSnq5d+`<$8?^T6TF(C=eJ$Vr!9|YNX|5aI20i1Zf(z{uxz1L&Zv49M z*4c0q;Rgv?H*4JwAQggC*8fF=y>Q*~b$_m7BZsUV(7JW&Oz4j6WPrPiiIDSXX@+nr zXQj@hbz2FOq!`y`r@1a{-H~;9>n^Ul#RO>$Teo*zGP6EDXBNWQ8ldHx_F4u)gTV%07%VrC7`Slra6I>sMHa|l zjKK`*OT!Gl=DsxJ{YZ@zD{qaJ2CEE=xSA&N@m?xk$XwMI=}ehANG>$+H3&6`WwPOX zLDVg4AvoU~nHVG*q(5$H$BDtvJ|by*qm2dy24&>_W}1F%azF;v1~oL`lbEb%`38S8 zg#P$*S7gw-{)>8BZ^0si7wZvEhX2YLt?$1cmOliK^jQ)LsI#N_MLn1(!Kg4!>?BcQE$!_N3XKfRWPpqb!$g704|fNx zf4Ke`N8)}ZBu=TDw*D1Q#I^3G+#xI!W4|Naf6?NiX*j`fvEfp~wT7{f@2$Y_Tf;f5 z>RHObHB+h(Fj?MC8?Izf>!`N+rf#v&aEqarVPIo>&oe19lo>h^4mFA|DMfwwE|WOr zfh#ghF+4`5g_z17M*v|jG(2lqWeECzh8Mj+L+V$Ka$RsohL4TDecV!S=PMX%*lGBm z(MY2S9IoDIfsBMk{jnSh)+>m|O*R@z+dEz+^Ja(!b8l>OS2t+Tnz8yt_(tl3b{YL_ zwBAT;j*M0q>CvnK=xBh=h-ODZqo^A*9vY`CLj{&bzDBo=>W%(2da+^C20Ig16K|9K zo5pUMA{H5i8^szW86Bm&u$jX}o0~u@(A3Zj^4frI5JHUdjm{WdCV2Qyp4|E;$gSl5 zN^Yk1Cy2im2rQ9B#z=%leH;GRuwE+K(0{|24bwI(0(IJkAsarU@%v9i@8!>zhx%@+ ziTt-zMgAIAeTy9!YNe(;-o6J~p0At{-=I)jyFbH5-h7Ah%%6fye-&Fv#2uVC+Gcz&Q+? zcrLNxKX8K1FC^iD*~THpF~$dsON`GOR~t8)Xqb#Q`QBuKiHV81i9H!T2|J~q5fX1< zeB^x+A5PB}n+9w^ZE{wO-2`OZxW@PaA>+>o8MkQ?BjZ-%R~!YG5DE^a5R-l;U%W@O zC$L1@kGB*?a725y12S1+@+&<`?m)Cn{xn%f5$#Z#X!kI5&xIq}t~Aj$uvPXVlkMP2 z1dQb_J7f}Q63x-CUx>i8S1vL+Y*J!!(d1gA7?~V5$p@DOto$EC|9sU3xdND5t2;6N z9w+E=3Kz^W=`eY{QMhsJ#>pFh+PHD!&W*tv6E>!AytMJg#`^@woW|>40%Y@zgWm^o z7!71=0PV)_H_juV{g;5&8bG`8w~cE#&{`1CPLQFEW*c4J1MPSgw7xvh4u4;|e#t?5 zmIK4dTmAPES2vo_PVzfzj)4azxv`3+{tj%1ZlVTMqu-YWvJazNZ z&0d=$xBO(fz%;^izj(0tYw^$G4QAua=9wK357^|o$!nAUrm#)bn;JJg-}H8~Hao$0 z)0WE~8pxkpiZ<=ul(Z>x(-|^MC-?}cH(C_|^~R_mpx#&*q)j!O*!jPk4ASQu75sxx zL51!yPy~7lb2n>k9tH-H<~AD5BXbsl=pjFU=QA_3dHUubSf>4BK=KemGsaxB`H#(O zH*ehRM3aE0jP6QfJQjjBTWpqLA?P--VSdHWJ24)-c9a@pHwO^;WUNGM^MTDrHs@_F z-F$P)JdU53$#r23*M*$+R>2np;+FxoP@|={Kgj zV$l}EE#fWiTcX$z-eZBbSZx8&5R&3V@iQY~sJ3`*2_)-j4;iYF&Gw=#`?sWS$=!0E zOo9dcNzivybrSSlQ<(&P*CoO&_qMc~3O0Q%T%yZzB<0w5y8R0;@QLO1x z(^l%{S#D;7X&dKVRib3EkQ7y*gLX(fTs)dqQE89maPqHmB%UUo$8~ib*VQ~oMkxMW ztVc<22MO{%=7hvs#AWbEBDRB=d@M2bgYZ6qsd%S2NW4#+EY1+0?Hpx&Z^tI0akL=%7#HjLasR>4FJ<8P|{oSCQFL zvsGsPW>Fka^qOsv**Y`37Epz|AhXS85=z4=I7(|+1;t%pu7)CRW;>||I`ioVItw^x zW_8xLvN4z=UlVX%l12)oW>+M}5>LrN$z>~JD|_imsiD+dmL@wPJ0&}BJD+d^s8E(4hi3FMJn9rac z3wVh*bFnxwAC|BAV)I|g@+~6EcfM3)ZftID?r0uCR_`>G)eAc7qf*s2&K2=Kq{Ch_`SfedQSxm-)3V4uGF4!e_q}Z!6GAx(7>n(*AD=bna0!mNm zubE@9$->OS!D5?5pv9hSh=<9Ufh?pJwh$qcV+jXY={dlxcecM|FR?itjPmR?1ZWV? zM9my3;=nmTGuNWT;;cobMU_R3#bb-EY%>VG$$>bXTnKH_%q8#Us#cw=R&_4F>fEk| zr|q@@n%R=iB%>rcl8KV5;KXF z#1Xq5e9cnLAsE{*lHyczB=M1i5?jv{OfMxdlD(K--XZjIq6LzqOLB-#Py1_FT9P8k zIU>u9XDXX03Dm5S{4IHBIn45vRe!75R*S7x)_1xnCrKoYluv`CUGkFgX^=4112I9y zvn&TPo$Q?@)v_FGxyW+4rJH4{MCJo)~}4cuZEi8P*BfO-r|BR4K2+% zNA2FU?w61ihMJ3g|B~M(2$5l8S1kQ4WB5y?H?>*S8MgP33|Stvtftote5Sy%g5RFr zbf(s4WEr{B%Ls}-vg}YPdW0$3(%jVmAgw18dAkj=8f-O*^+~^L^(AkKh4pkphG2Fn z&S`r}t6i)*d$hI5?NaD_^E7}$jaTS+Ul;=^M)R&$ja9$&FZ8T zq@J}3w%SYar>x7+cFcFOE<>YKAKDR>z@I9mKITxd6NfEsT0uq|HsUFyv)R#K6Vh@? z`%6EQj*)&RU7QW`JZ}b)4wilj!D@LHaF9;qsZRJjwF#fcpYVCu%*jkfAi}JZ$Zzri zQa7o$be}X=Hb^!ScKVK!fpAOsAqTMFNrR+O9kft0m5kwbt_Ocf(|A1y2X#h(W|8!Q z^osO`^tSXLX`8e!8v^c%a&Y)vE(F^Zk@gp}Zyf6|vD694Tx1b4 zB=eB@kaTg)Z`#40(?XewN3>COkLvCMi*nmjaD|a#r}XiNkwQ{94kn94S4dn%vTE5~ zS%a*P8-Lg4W-g3qCI`w|Stk#ap+M|NUUl@q`eW+jgSIL(VqbSOHQ4(KrdfY&J;Qpj zwE<^H1KQ3G?Z?i@dYSb~T6bv9D$g2mk~N*7vRHx4I>+SF z{GG!H2btqw#|@5RM|;N#$3CYooqhptU+YNgxE=`45wx;aj@4#D>vZdE>taHe16WM@ zHDFTU1gDt`tuI^Ou!f#sJI!^BM6K(r|Her4E`vk`TuS!!79#6j8%=vXdq>u6GC+cC z2HCHq)b`STHaa%n+5BMFZ9mLj$NpPzwdihQM8_Esjm@BJp)+*O2x&GSY-4O=ZBuP4 zv|Vm%X6s~o)b_q@lbz7+7rX0r0F)NIr4F`egI<5ekLDs97aK2|Fq;^7!rWW{`ZTV_ zR8aOx6uMe+q0N4qqc){@KLuS4n?n?{^bX`|FpY!b7k0s6-k%E@f**I27NtmpHnleO zHl4W5Oo{Jt4q%u}lw}>aW6`U}4M6|f*tZfak?jE6kquqlm>XnXTOvcY+O|KmK?gwJ zhit#Gok_kD#}t{M0^7ecKhwp+8;k-N>1;2LSFj871cAl+~_WJLw2|A9%27R z=GAZ8u??A;g45nKfC^c+pB=J$W8V*)4O>VH!vSjKJQ#zGT*P$sun!{Lko^q%A93B} zaVS(y&ciTcOj4?O3)<~B+gmb5obNd~zJbkNQY8`E``Aa@AHZH+Jg3?_T;bV0ZB`=t z4Et*P`}Po+XrE%l4w#Y%#VIVkep!+?q3DrDiha5&ZY!(Y0#yiY)(4#U z*wNA1{))1lu)%a|RRX_%^>yo9xR8%Ef; zAcuVpe@l=)dA2^|raByVD0L_|Lk_tP#h?{{7~Jt=UEsj+6FpG=vcom71C7_g z2bh3pE#0^&&4juPNV1WSj{$c2udIgWLl!u3?2 zG0uIDx2h;|oaMN}QJ>4~c-iqM#uOBZ@v^-F$(ZXC^qQM+2m~iKy^xc$$kE*~)iKwx zm@-f~Djh>Pn*B3Jrc)gE@XZ@l4V9W1bR3UI1)y5THz9_H-pe98H$^F8NBVv$pn(|)JJPRBXU(2>0*ttY3bl&B>-B_5NE5tad(f4RiE9B|2TDRa5xQs)A*omO4^OvKY4T#hivsrLsy z?E3Bzob{L50Q{vo0QdQkj;jEoE^l2m2}ENFL`O)G>u^_X7VEE6vD=rEm88@?>N=md zKDRm`*OjiO9pFEB%5{xO_+`iIhV~wNp{uQ{hwJ{nQHiQM$X zSLDLI3;bE0cJOa)>ja|_i_|`L)^xq(+Ot)(^`otmo0=gRL{GOIx!!jDhX8O1ul z0S^@{POx_|Z%R6&(Cxue5p3t>3nq@O!?unl#q@X<)m0ej@Q8FGB!mDk0Rd=f$7ZNb zK6P0oowR-dhVw;tS@0bdQ;8qEf01yKtZwx`2eVJbA{(oEEZdwjdW zT+Ul+rbM*$%GRfD0=JK(XzR_bkOh>8mcHyj>XY6ob+fmEpve-#Z6F|$;&QC<pX&JC01X&!i$ZAGc7qeQp^9-ruRr?89mkI!$##r*nzOpMuKXt;+2t{lyI&x!C|y z=NWwGnfqY(uiPg=spsx$@jvb=tkFnS2FjYu#FZ+g2FgY5i{0h!+uV0T?d~hw*SMRw zOGuz60%?}AQfh)n27M-cNgj$?dzgDBI813TY*Pi`#xBbK`$4~d68d3KG-p>V(zdF=4ug^91`#`c6q3~y}RUyyeT zUy`#kwz~wj9`|>=^c?QF-gC#!;XA+DIc?|iorXKBcfRoQ^z!pM>~+Gcz^g~x&!ffT zg~xx}MccpHK5Yk=Xd#C-yDp$t%nVqg+XrnQPRKzHS)((aQM2=PeLFpmm)i~8{__s4 z9iQ)5v}5It%{%OOc<+eYaa@eHuh`z#(qJjtZm`{ad+GM;Dhv57)^$P|yX|pUi6lYW z-M0Iwlz644@a%g@@n>jz()LW1f^XCdzE;1{+sY*c+Wyb>R+ZO5PE^S<&oGiX(5$jdWom0r;Hf3>20%=+H*afnN*Y7pmOl^^~~5gq|pU=hIqyUB5dKs ziF^s(GcaYrdPA+YkzLNdf`y(1p4FapJNq$aJ`2yY?VUiTun|x(?jDc*8!bnk|9HN2 zLY@tt*rdl=`kdI}*b9>}_A#4v^jY9|273s?q=NcGvEL$5Xu2zqoeb@qxpQ8p7*b&J zlY`sB4qBIXuH>-?8*F`FlvAnG zk=IbK1zyX&R(iQUZo*nMifDcN6vy`qy+(VD^O{Y?rhVN8E((HUUf-~0;_*XqxY}f# zb%B0qBG%Mucu^rj$jiVB@`-qvcv*q!2$K0g*pQ;{Pi(850q$Ek1g>w@8{n70Kk723 z9>AifISakQykfleQ-Kv4OKE;=>@ZfqYlC!KRCGlYlh$eyfstip zc|GxJW8w6Oer)!N0OFQiqyR)|??~?>-sRp8d_VP_?6<|w(=XHi3;*x^fAiN5unh~v}d zi-;+^nm11=OsxGQ-LUTf6DwjB2M8w4B$)U+DN-C)RM&UZgEyt3Kv70e5Y~;do*jo+ zLby|=sd%iMth7@4d4CP@Bj88yQY=(-DnC(O%y78my;GquJXd7tnuV1$AD z{19x&SnPtluXxuIlPCnKK`#~BKTG;~xBA%nxcT_|B>I&5T$dp4E}t!SBJclvw0ws9 zfGaFb|CXx|GDr-;r%(_oEkQn0edh7W&J&!*$7hMpYL%jIZ>SR3x4-fE&s7{Rt89M5 zw?6LVKw9q;%>(H!J8#XuebRi22^n7OLoDdMiwW%h=E*QFAc%>DK7aW<@zo^HQ=c_7 z_OytRPrJ`6a_=x6{tsTHN|EnKUv0|U$C2g8cgeJT=lGiVKJjh$>+ko|6AR?K$aj59 z1IS@a+adQ9D^*D#=3h|I&||0REAtKYjrTp|dq<3X<-R*r`DiB<_W4uQhZcmB{>cIP zX82x)3bK69wDEat2cGg*#Fvxp`K9C>+`TwJ|Kkgc8QbE>Hdo{~#BZUq@3>F>M)^(h z``&LhM|*XsmVqlg?Ob%HgGyvD4740NGdg9+?>E2okN5`S-^r|9VT=4Eel8#)w=_H@ z20I7xG|o=w=jRvgcR+>rPvHpGDyk&M`zOjZ{Z9GS__g}I^cP5xUzy)!7Ug-fy#HCQ zlaKuP!@|kfw?X+#(Yvw019Z{tQO->BAHwD}NC)QLU&kNzfCd7UPFj4_8TrrlUra7@ zSqjxoIwyAx6Xg5L{hj?i{bT(T{qz0H{OkNX{NDtO3@{2XgXsEv*68m2Sc?38{li&~ z#D?}lvTh_F2(?1~ss6|4t#wMs-7s!I6OG> zm!bd^Fo>*z6#kM(aYg~!0jq%%34k3P0)DPTa*}nx3>>#T$)*uF2AmvTG06^V zXCbl$pUcVja#*?LBrCU+Y()W10bZ>QPgw{Qk@5v@C?Gr_p8u?rJUeY4C$JBw2{aCL z3d{?v4(b>5Nzl3=uaM-B+>k3F&q6gre+i!zzA)S%d{e}th+iZ0#r*>s1KtE`1ojUc z8~APD@<4qv6wnd?$rR}1`01cm8P|`NftJyfcQR1kz#)Mn3FS>Elo#|$M7p%*V0}4| zumAD`DH8NUkfBncv4XT(X@&w#1Fcz1K8TKb5hR(50(S)Z1cnBt(cJZKguDI)bJu|} zft3Ht0~PLiC7-+g1>^g`lE4ar@0T<9{#S`Gur}~v;A^hUY}PcTZgn8U1hES~@FnnK z&*=pJkO7&UaUoVH=<}czVqwsjpeaGH<2D1cy)>M@05}EB4O&9rw3oo?3s~a}a|X7f zAmbnl7H-jiOHq(*5ct?Z+&OaMan#N-QBY9ujNnDVZVf&5{et3y&IJ7()DqMa{8{jL zF$zi!%2Gv&autj@jL2rWxs^C&7 z50`52(We!JA~*DOlb026Qsd;?|Z55qDMy# zqZ3>k{5KgL2;HXld60vOEVwQBHRq)+BVOuLWGJM62yCRS7PU8-^->Swv8!KjF6r|f zP{>aq5Ce)a{+HhQwo+^bpSwe}=3~aDu8r zL!#-b{27<@eH4P;0J7DUkTjlbWy~$Zu8=Ywz!Pjy$jy+4kRS!yra>&q8~{CWLJvbK@5krmgX5Q%@Ttt_ZCO1r0FG)}7*)=uK2(>z-m|gbamg zh7DI`;%=%jaVvrU3!56I!v8faUj6gEG>%~|{lb)Cp|A(!cxw1Db{>|{^Kc=|!|>ej z5;6}<$UIzVhr+AETOUDNfeL#I#)sF1^WBt$j4SgNSft_I5yK(R1e8PJ?;`pER2ys* zLKhHC8?Yh;U%1L40Xt+%eHft=!Ro)3M6mj=C4^&m$P)Q{mdF>s77HVcBP=3p*ybOg zo39Pck8q0EPMUv!G+$dDEs#fKMwCZ>8d(x0iW(O6L)6Krs;K8tZ+B(J^pE*1Mi#R> zc4X|Yv1`RBA}^wtqTGTmqJEfWCW^Qk@hVayauBs+xHoc*xEI007?2ANG(8Xw%jtI^ z;UCQlM6(2X6zxy7+FTg^&WKz@cjFUIgA>K686sCkuA!f= z;GSQiEIBtZS&y`dbihipziAV!pP)O^Co&{5F7iNR2IC~c+t{WKtp4EJrF{!4peUuO zLc5lUfWO1)s25v^A}b>wL_Usu1N&Y^R!4#Wh%JvA`t^%gE2At_WBkBPU;kq&&ABHWgTlG;ptz83mP1-eWm;bJ)U9cM` z441dYs$HM$(qTc$qK#gEG^Q+vPfz1q|8A@U4u6V|i;tEHxR<}u_1k-ob?)rOIQ?yp} znCQvT)1!Znwv7&t-WPp5x-hyf`f>ELXt4d$1VGHL!KZ|MFx>?~2w3RhCkqI+K+zvX ze@aakD~RZC13l~$(5UK6pkfOlW4TEqY+DGryBGIi6-UpD{)w#Or(_jdf!rOvHhOck zImcv(TPziV(}dF)D?`yv(Z26-8agbeq2zHIpS&Lr*Ud2>(;ZOsndl0dV{iey7JVi9 zCdGUN(#*$mtWd#PVL=JQhB&Znh@c3P?nVC>gK)T;esd>8KChJvV}{1eh*@fdVm^zR zOig`_XE9^Qwn(k456dt$zonIUCwa8aK^UVKV;BROATc|X0r^B3N1H|}U~c?GCln)( z3AI2mt}%*6$_fCAQ9(v)eHWzM#Y$4asqQA65+9SVG0vJXDKY0`YGO5F2g5F?E-2<$ zOfEeOKP6a)2?hV1&O7}o<_fd?-%-9bF%M#zIGVG9V?>U`K*C2>4zQsN+vH6`!d`T^ zpjho#o;!>e_MPz-^u*4JUC6ACRm2ZSp}o3?vuuyuiefj!X26)ln#LZ)UGvdd9BUWr z8yjzqVx42XczWUAv0hly0>uW$?qZa~D;~AH#JS-6{-A$Wc0Fzf>%8CuyB%3E$i*mbOx)Dg4n{kmn5n?NkgU0ID!a5Y zXcevj-HdOnP@G|$OoHMz#aYn#=KsM-`TurBaq>8KvTQQQviXJ^Bgf{~^=)nKjLGtQ zGGYqd8@4F!Xk0m9Ht@ElTuB+ELuVE9ZGYVKjAy$nQ;}=DoP=@z#=YD97&_DuhxbB- z4J!mEX%=WAFygzlcDrE7EKo3c_gA~W-93HxoZUa|UbWj|w~S7e&R~=O7UPV)t=QuX z29-&fsuRXrvi+UW?zOv(@$^&lZ6I?=#}nuDea84iz?0dSKZnmv*&Vt&es|LD)ZJOT zOLpJdeOL8!KjP25!k>G|eJ-5$xdHIGbGt9mpEG7Zw-bNv1^2l*cwdz#&5giIB4^?5 z7kf1JeBAJy@GxbtzW_Pki*W{Ua^OxY_17%e^YxzDdlu~ZdC!_XX4BE0X?vzact8P! z2NdLp;Xm?LfvS&v0gZUrNS*?|k9`4nppy5Jxh11T1fhR`8WO4AP!gp1WKZ^kg z_j>OQ-&?qE`o6`y6zqTEBt1TYiF@Ps9@?8lsF*cx%rzNS)*6~~X5W~03xC0Pd#~-i zx3^*M^Sy8P_2)Q|AgBxMPe8K-{Ae*TJC|NO<<&db8SNXqZv;J;){wdMqNxi~^fa_J zW6t;)WyD$9(E$E1I7>R%z)}HY_uw5|6gs+H4Y2*KP8zF736=`?neB^-|4J;}XT8s5 z-*y&ZFj*d^0wvw&y)T5Igrfu{OqKZwEB77TcX;31cu_oTO(v`buPCW#U+%u!`x^Fv zkhiaB-$iQ5u$m4J6}`xpst;`mYqv_J)JKfVraOq7jI_Bx#d)h%E{vZT|4sZd?5mR6 zAw}`i;}?*Kdu`yzXi;@^SAA^r|Hu8m?>B;dI<(>);-lkpa$(lO%CyHuqnO;F=F zqxi=C2wrK4f1~n>3&RjDQ&sP{x}g1^?}zl0pz>igM{X(_AZHF`yKob|Mg?@YUqTQ9 zSy4WqF838o-S51A=l+2G>6~7D472XX#oD3$Vf$ks&mM$dXUoz4eftkUEbnbL(qxb` z+Ml^UpPrv)WPa*+zbbr?FD^(*y&`n^;!|4+bzp zN1cQTwh8_Ti4v6Hl;FY0+#X#xq?Tfi#%ec%iXkC9A%+T5E@CasIG2~wyIfJiql9K! zr1vJ0yiYr9cmy2wxVZ`cVO9(B{~YLlV5ZDlc=5o{1EVInIoK9t1MpMW^a6&+Z5 zfM?Zm;~;Z~6^-*)(fE{Opuq8fA~8F$B(Wm#O5)wbz9cQN=s@s+Kv$9c;HpyM~Po1j!B%5 zI4yBuV)S%jq99R}*dM|>3xS#yn!_;zC4QRt8Q%L1qR9&Jrf!Ac8LwGLC|02=r7Ltq ziAxiGfi1BYC9Y01O0-IJ`@f2+5ye72Q7lvqeN}zd+17v~KUjDqa#ZsZX7x;X2m&K) zsgcCP=lboC{^e<6ePRzGlD{Uh`+xjOTKSZjp~qZBNkfxHC%GnFp`viHtwS+M_Nb>D zf^LhGrYFrw`XOma(uyRbBxyFp+ZN}*MtQ}#zz!6Xs)|)%Q>@nEVt$81b0bc%9L_w-L_WDpBfcC$rhC6}n$hESf^+ zD_mZwGctKHwxih~`w&H!T zpHq~;DS7X~goEh^@1zVoH0sdIL%R;=9j-gvkTxo9d|E}?^|Y>ZL-C;G?BtT<%H-;U zgAZySoO^KTL6d_{2X}L5bq7mPvuM4CfrTjfPV$4~X9wv-fVx;0s2ulYawFy<8*s{6 z*4CGq+{@bfPLLISyiuamEIl}a3~DKm=z|jven&`j79r8P97YWyi(aYQe2}mI-%aV% zz-W$Tx)!#r&+X7b_k$75Po9AFSp8uKj(P!c(xSUrt{69mo9myMiw@=-EIN4Z;APrs zw1HTS3>lYzdcKLs&;lKNaPTP`;r9txj1IOPd`WoA4V1-5scn*?LAl$OaVkwQ7(wxk^6iLLv( zq~4lMDQ8pY{e4*emQBdqv{jf=pVD?{FjjRup|wck7B!1eN>5538Q50*y9}lfyhxGw1{%w-`2+tleKIC@D z55MSnNK6}sm1z4RTUG&q@>Q6H=b*I4IxmX){Vmfvl$3fU_03_;!`g>|3$h(>=;Wcg zLrsTXq)tekks6p9n_37TFF91D%0)S<@IEwhWcfpL6-(F>8+7Px>S)Xl*`QRd)FFhA zTEI7a$rui4zKY-e4-UfA1*yiVGBHYBlKQ8LtZB=$p$Szz`+o$6$^oT1rEVwRTFC#F z4gX@13rdYo%~0jR7OU`J*3fit=~wBM9pE99T9bMoI}(Dk!Wg)ElnP$GJTJm8$mU4n zO1UK*%+0cY4}Z#=Wqa(=;R%QLSoxrPhrc^K|L~6->o$>+1_nZ5OLX|R!&@<;^g*SE z4Gx#?h=mf^Jdh)f=5T?0q)WEk zrw&(emaQ$6e}$D2?Kpg$_#t@kFzy<;@NnzlS81PcT@K^A+?uAz>vDW2xUEwbsPPPO zJnke+o0_&d%}y*#o0+yKZ5cb~@6&UBI_Gh}u|bN`)~B&Hswn=t?uAUVly{>j%`+_^ zEj(>6Thl|jCR0v_^N?t{?1gDZ(sI*Iv1QBYvdg%#3SSILO6IlOCQ052khLD{&o8A4HA_8UHU>C=)pDwTU$8a zLQp$O6)zspu$w@7nr@ZunC_nL!@d+kw|)@U`Vg+C>Cx#4>4(^|=jpOPb7jvvM+=oSTnDvvHZYLhuVb759hu0gI(?t#2bc}e+a^Q%t!oxED$Uf?Yrklvd9^2kR=)*Z1s z;(jFRNcNFBw&p@iFqIl6M+7{DgTzAf$jBpOk9>V(_L1d;*_=%=r1SXW*mp{eK?WSW^N;xP;JqC(Si?V%t0BDrL}b3K@50vrc#35F_olVs z8KD09BPB=Jt=)b)!s6~O(|ZQ9U(8Ps zzzMmoGCs=q9KOgX-8};TExQWMXAV}Tpf{y-i)PQ^q%nsmxsMIz;x`o#UnPk9GucHx1 zbB=Z$Gd|{eEd1C%$KKRKJ|5tWh?Dn1_*U%Eqd3pI&dj3;U;*K>Dqf~!ML}AFz3Axa zqm@T%jzU-l%}2~snVvan(=%6fdgf6HZ%!WTcWlJ5FOQ8sHsjdRW2>g4V;>*;1SFo5 zkfi5i4oE{M$xJ$_%GsY(^B6Jl4VL z1jn%o?D3GkI9xFI_~_#kkAHuB)$w)5Hy?L9zUz42@v`Gp$6JnfAAd(aY{lY@R$Amz zPOv<_;C(YvB#p1^*o2gu0TUdT9JeQ!pp{?(JMc$2zVmnxXDYHHR-&(E==h%F8Shz% zCb25#03IAZ=S)I#9nkR`$M4cQ2M=IJkNOTeuUN%>%d>&ye0 z;2}m$@V8EwCxouFRIquFT#OB3Li5wN!Kq z7T6RMqwuomu~SUkg`-gCz)+nSdg2Q*R42($&1nHgu@*pkj9NIFLpvkDvz+VD3W?~1 z!HKvNNhh*liJmY$Av@uAB7k&imdX-6skTH5RF`NWn@RTZ^9Ea`PR5CJ=JPrkFU0=D^+y49*m^2ybYub zk`80~b_bOGC>wHbaTzkS;5i##?5V2x-QgZ4n3FRlXGYG#9OE2ujz>;xPC?H3oU1wQ zIWKb&naGyxVrH_3C?`mAetjPqM$pL67S>gcG>6T9(L&ahEug?0WlkuE0xby&oFqdz z@j0;XteQ*SL>2}5^HAVt915J{fO2Yb{-W{LHb8+nk6;Qx#+M0UGzxsdpg>m+1#Wdg zx&3ojV-%P>GX#bK?-A7#3|0gyrp@6UU`)Yp1#1e{V?~|!IPa6qC%f@Z9Wa@|;t>qkl0Ne{ zM+KsSj~Hji?T|&h9&9XwxK*>k1{F*!SOhA5n!7A2n9f@|o$d4g0__*vnY!fAyoNw?;za4qL#sBmWCQWYC` z-+5vK-=fOHls7{lSP!pXo*V`$Ep+FBQPKUfp#gT?re&EWt_orKR&ULJ3l9_)VB>|e zviJAGbl3vv_rgp<@qZ^o_g^zqSXo$w!+5P&PsV}fT7{1b|1Er8_@-!Kks+-xmeBi3 zq!UTdys1GdD$*(%QuI~PH1ctOet&znt8!_*J5+ku3j&QfDq2>w0+WizD)9=AJo!+= z+yWI@7r8KQhzf1k5fv3}FY+bgq75Z3Dzxn+1B#N0juw@kx^(JM@wj41v32nQ4w*0g zz{VNCf)`yYx?9wEYVfIVPZ^vlARYOJ-;usJaK)FQqV}Rbm9cw!P|aQWBN;k1{M2}r zLVdf*09(=y)2HT~0zLyfl`tQBo2*vNAUkx*IsvD(N|7MuR;(7?$*iy{P!x;@QQ&6>lQ;HW@fttFb0i98mF} z#RfDt;K^_UQ4F`S4R&onX)ZpRcZ*$$1B;`GNp4=T7n#uW$mi}t@+#KDHUCAk6DmGj ze1bfU=QEt~Qmx|4C1xe}Pn(_*mM#=)7T+#@Sp2j^Q1TUv2vTX(KM~e^aa%FF|6eLu z^Al}RiB`!FGHrBK#^)IJ#fR{G7h%b_B`ZtT;Ly>MStUPGR19-EulCTCi#p#;a{+&- zg^tEageBG`86{_>q7s)9&ytXmc=ENWDqq{Dy4w067>YkL_Jei1B)jBP17u6+2G?|9 zBX)}$H>(?R*cX;uF1ZQ}{tXqD{)P;dJUTrO92wx#?WaFIJ@)iBVpP&|TBOQtaocSFJ ztQvi1BoSj>cf{_l%F+1}C{+|g&m$Ax_ zjW7q#IGthr-WgnGI=J;e?b5z<>`UZQQ3aMPS z!YA!`pFxVKb#K5x!1XS}Q-Y=TA0NaJ=ppt9e}EE`}D z%k;`N5KI-v$5e40yd-!I5SqlGINE>Hho4IV#1S@PNzNPFb@F~?MP=n>*UFmCnx3^i zTgIuEWE`}m9FK9a>^=|BzV^bhjj>hS(X4pX752wA=NXHKCzJw|N z8mC2P0_TTxcDF;OPOMI9AzRy?^*Ni2xifFw;b+6o#xYvWO$@ZbS#&;aD$^Zt_W0R+ z=J96k@q%vRcQyio`p(`s`v9b|`W8xet#On>MJJquXP=!Lc| z+5gT7DGT+#fU3Yk{TFPc(GD9czoPZtfz9<+qH`0^eRJ;nbF-efIZuwf{n9D% z*UUc`es2G{>M6Gs?rucb6xZmzH-`d{psu#fl1p3TcINMNGy1iaY{YGZscn9%1DK zarv?Ll}sTPsJx=Qin7s3fvqmTS^j{F-k3;-aVT{rmN#)rMi;Z-)F|7i!l&I06u`C_(=HaSO-={-8937hBfGW0CC}_yI0v)Ods0gFz zP!LUrU|)n*yp@roGpaaPk%0pg0LK)QX)MTr=#7fviZaX(tZD9qIK8p!T%!c86|EIL zmD-htmGu|2E+{WVT`0de@S@2@i;I6kBJ;TDc`co7;wjo$!9K=Kp3txT*;t2|LzS$UNyd6yB9 zoZ$NMY?5_NeEVLjp@&ly83xh9= zykN73)&YZv(Z~mar9Q!g}E1gyzu*lH5WEBAt245$77ntv_bnB_GDpV)>@h9 zt#)4YmQus$%#Wa%+QduoS7gt?egY_TZz{4)AW)a|E9*C#ZaCXqV=y1{PqSwXni(urz z2qBAcP*4D~!PAzPQ#)7s2rDk`znFcoh_qTMth#uFi3ZDJoVJ6R>uRv^+MtVo2x~g_R7mb2AQ!mOBeC_FfuzX)Y)OyE$lX#=gbq(y&X~9Nt{c;my=b zQ+cBx11MrE61w#BCEli&C#d{sJlc~@O#p8V*(IAx&di+I#!MJjSItWSm!dB1xs-j0 z+jl0IUMT|sNnJ|3luo8!D7+nMVFUd-gH??zcm}$ zdU@sLb)>ENq^+|F_!PP?xB6<4D|%-WUSYNrU5>q+ zz=+ZzN&szBdR76dUHsHlG~_Ja$8kO&gPU*=)T4d>yws%M>Tj_qAI;A$O8i*cRPTI zm58d$tL&?`Re57%Ky%n1b8~bG;U%w7ll9_Dj-TC0b6_DdVO2_1W>qZ*#aEEtQY@@0 zsybiA#eY@Pqp*q_yXr33&KJtnS3RrZ@<#j6<%C>0zU;JKF1+%|mC;uqfR8vOx`Soi z0$rJSWd%v$Z;!6byt0^E9|yRm^>HTn_$%vqONCeF4Hi>i^=G@FE8DMlY}U5uTQ?Ne|^*S^y^vI3$CBLUM22- z<=&P0E6=XHs2*Ltu==-ZTRJSwhqwSv-@sKJVS}!`tsc&z*!JrFycX|g@Tw8bN>xv) zp3c1*&b6uyywV7tZ@3jz|5?4B-l0=>^y?l7FrW}Ab`z#!^804F39DVIJ*z{=tow~W z>-ySwd*W2@t4<-MCa9G1e?&g{0Jtu5R9#+u36tYS;+o=WfvWFTKVr3we!v!0H&;W# zEgW2=&<JGVjjJvta0$n|QwXqqpl7Xwt#0yt1GHDbb zlLS`pJ;Or>L2uM^#l(vc;L*`eg??C}t1qr;QIBEcK-yDsVkviexh5%`M zPu9HFe(eR_u#rr|z5rbv0n7D|uYaZ1s(h|hxiWP9yX*70br5NTuK##_1v@)BnAx#~ z$0r!dMc1vaJ6#XCp1{4hi!30eZs&C`-msgV5$qz2z6<1N3U%aw)2o$2 zdk?FOK?TI)GwgL6IN+DM2MOG-KfT_0{l6PpH^$!h?#7H8i*NkG;owD_{|23K3>ME* z3v}b78=tXjCXDkO3u$QLFruAIAw0utpb^umT&_8fw?zoH-EhA7`%Ur9pc<Q)hJm^NqjomkrZ=~Niaii$Q%^MGH3U3a*xw!rbi%$MzDf0=M zW&e*x-ruv>Yz+|I8)Y{x5u$s75Z&)NQ2W}T8;@`FvS{wfjdmWqW0(=sZ>`6^Q?yR& zPdo)|(akS!PUPzG;fCz-%^AEZY-UQwp-CTRq2&1DWf{xrQ&`qnGjs&!VcYuy= zy5Ce1bQHm$qaI1Wn|p61-^#dEa_fH0i|=H0w~^U1Agw-()UzZFan;_r`e znhOcKS$gv#xp$L~BzskMP3?n>$7HiH(ao2)1h)p?(kAas;=k7ytV;O%LR1KUU#QyS zE{NK?wd@w`2f^Ax`ns_Ja8r^>}!ytTjy?7kpc$l{^0&j!dp*j`qvDvZ-VLcy1f<3ci!qHJW~eX0@hC@gO{{< zWzYNGkgvP23D`$LAM9r9znBYuNjss+*R}Tl-sjzFTQPYo0m($p9Mpx4Z6MT_C^*Ajkoo9 zV2EYfYU(V!ZF_sy?cztxR_M0NZ7*(cZJOJ=n;Rk5KX=Qn1u|^_5x$*pJDt00^?pGa zg{f|r-@e8H*N+2k!)?C)*X}jc*nayJ8Nd*hi3xr!Mt26>8OCDVe`r*@#Uotcac9BZ zrFU1|b-x>3ckHmeXTpi0CQ{Lzop%E6#NL4!PiqoY{mUz5=uZ5d3>6I0cY&B;*Q+9>i_P}v z&ZRqSbmR;bjFv?JqR>70yulLP>AI`&6bKE81=Ngv4x`sbrhZK4bJp;==XEnALArf+ z;@$aV`OLYiOP0kP^2%+Fo_=mFylZfG<6S3OKeH1Pgu51ZWtbo|GXz09s;ARdfug{N z&s$^1UGKXg3?ty9(olCdylXF?-A zbe2GB>!#MR`Og{&skP+!GijN!f%Q5H9+Do)DgN+QU9^U;gI#z!4)pTX1NAl7{OV%r z66%ip3p^QQZs~j1*51aP>wH8fNYfbvQT9Uct*$GnyTCzym_$@}qwaoPOC3*+v{u_# z>l_EMITonyzk5U92j%YfK>0u>y!Xw$+4q)kAT{DZS_tXI$V|ut_LL->i{*j9SdQ*l z-*e^O-^{&#hT)*{Nm4|{{18bp(Vuih_tNfx7ay7aZ2CKe?kRyl5F-=_j=(WuoIr3K zt}h{hpaibJfa@f<{t~W7!SR3nEtA-~hy|vDZvl_8t6;f53D087`~-E?nb3FY14;UiKZe`?!kLa9qPD z0>Q(dnBTMXFZI6y{^uWX*|7-zgFoG$>E8~fdMuxg>#vdJMwP+U35MhU z;7`M2jX+~Ze~qCZX^H~j$z-^Pzo~Px@0|lKDZ>8^?(d64xU!E$B8(OMH3LLG!v9sr zAGiA69r%B&BfX~Y-Dm%gb@9qlZCD-BiHXQc`2p;|g z*Y}|e9HtN87mkN;=+wjSBf8)Gddc}qweOMpq~>4e0c5P$-RpBd(LK|N6fgf}zjg2-XnH13>A* zqa=7*R;M9wxDS1Ksv*#6g8o1m{C7POo+rUCAP-YN`d$b8W(7ch{ON0|pxS>1q5Y|G zfM&3Ncs$4-eshyr8T?$mOlY`jJ$TI2%UGz@gLxYDGJDkO8Tx@Ta;6>{QuMl4uV*_` zhV*fx8c=ln9b&RDfFg&!!BqE@El17+qg?IHEsexS?}wKh9^pv>=TWn4Z`<`~l+JSXrU z9(UXqAe+?M#^>vqdPtecOqqf3i&qgYQ=nGQLgqfM2baTT&a0I%V(#PTgP3zOwQspI z_sRUg^+?sqczmFYy;_+vrVM@`|KZ;nwe~2O`xpj0nDf8Y%IxEn@np`Mm@;^t;J-XL z$k^d){H<3^8PboPaF3jmGAOJ+br0iM{MQ5rzaCuvBFuUGOZxFGT=46`=Qq{LO#46? z9e@umOWM2R8xWzf*|yekxS*WNz~mr zlgvzJm}Iuej3k<}RS<+8gla|YYD#FTr$uRLyW2)Zg`N_`rF9U51_z<4DZkfy@7J1h z$wWS%-|zRw_xpG_th}CUt@m1c?X}ik`*P0gcLDJN(pN+E{GNx_fAsvV=Y*T;&fgB& zT|merA~FI^7y%nSX6^UU?svmtza5q&g7;2X@(AYq?QIv4Jj%F3BjOB1o00cp$B6DJ1^5uK!DyL?pQ=B4upH zzkY(vN(8$b`-;3&2lCp`&*!1-2&Vtjdn0YHplxNa-HE)}eeV;h3)UfBKnw@i8xJ8* z*Q)CEN;CcV4#8T~S6&$9^c>MwUIcl%$-eTU$j~vZ&(k$Fgzf2g>6%gf(HRy-p3dX? za+()GUTQ0OQREHlBTu&xL*DSMW^Nl#8W}K$lBmsoHVZayq9quOITN z_fN}duWIPGm&hupsT1gbwBG*6TMg|iZvgVvY$dOM3ioGQ$s2&YwSDAiI|ri97pw9H zf!85u-XP>9LzT8@-g5|gyl;oRM&#lDnvd@P_Q;!njK20EiM&Z$$=d;WRv&p<=Z?sm z-bWsiWGCdEy0yHNNd2`TiummwjJ(`d%I%E2=05VY?Emz$3$A1JqkU;U^?kArZOjp; z`Smsj(?!gnFCtbvC+;)Z18f+v;n*KcmiOLLc?ath4EB{jlq7 z`dUZk*V**7o;YhJG#-N9j0^QphTd%6#s7ciz;&dm8u;QG1xW}VH)eb~HL zXH)LO=09~dtNO4RRCmAG*BV`aPuka7y{%_8*z`7^)u_$3p4F($ww~3f&9Ar3B*^#la*Y#~vsqynE`Ce`L z9O7PGnqR~FxGzO0B7ELQ@BbdaKIna465mhgeRm3~_j{wE+xnRM?{%;bRDe9$o*EiKxE@7W+s2 zYe#25)L#dS1M64A`qIJuSpMLsqz{Qo4nan3rOffj|2jfrZT=nTzs2}YNBi*~ejn6s zBZLMHMbayE{nKkTE-DYeW&{#eA>d&ElUAzBJ*0<`lOXl=Fr}SB?S-Y&x zzHRh5YOl?LzHMH|{5Lk~?!Ikw-?sHBT#Do4vZxdg^izUnF2^x}P(Y~v=yR+jzHim_ zZ3xs~-=KQDM)SI6ef~$+w_z{|zGtmmZKaxVTq4L~tQ}bLbbVWnP&fnWO=t`9oYtt6 z5u90-wCbX|f6gk{AS54-iignG z$Nd}f5l%uo8}Plk?$-lxC-U#*LOSQqbiZLR%a#H;K3ZC(8<>*B-f?9+AeBN5j# ztZC2qy7;s@`)0(e+dro+e@5N*=hxX^T4#S{U3^)c{ffHyeRcM~t&2ZWXTP>C{*Su& zhPwC%h*$UT<#pq+urB^dUHRB`wf&Q>f+hD__=lQ1$FT&>*6=n#c!{R z-&Yr3RTqD%F8*>|{N1|vr*-iiuCMKnee2?5>f%%D;@P@*XI*?zUHrzn_=>vt@9W~v z*2UK&UVS`#R2Ppgt=*sNFdwSzZ>@_Tk9hTb+P^NoLtT9-#H;Ox*X18k7eApcetKQJ zwJzRO7r&$~er;X+*1GsF>*9Y#yn6qSsN28C>+GMYi*Kxp>l#`8(es17TTF@wGBhRy zguXtdgJP0G(DTD^{H99J54YX$KRCbh{GjFfI{&59G5>kFIX{&4MjQ6pvJK|^P#RI2 zSKL1)8HBBUbpK>Rke`|u69-{ypET@}->A*6E}x$glk(Ksd{dXM**40SPpr)!jdbgz zAkAw*TU%@MO?f@TrM`*n&#KL@-oDoslYDz^zA3NIcWspQ&Z*6>E}!f~dAl~>l-JQo zof{LYt2V#7yw#2Tp4xm1a6RVyQp~j*Vq*Uw=Kog5xdQ!% z{OV5$b3OGeelv*RB9stP>kvn95lRU9DIbdZR-x>lgYqS4?h)+I>L8x}G1DKz_BRKt z<<{Z4dBStS^>YrY*VCs$^?0$N`u%VlbgQ3{X!AYThx@RtKcauuU=E@!WoYJc?C0Ug zKOXx(26JmP_Wx+K^BCA2fjH6}*mwvI+Ly{ezm9yADIqQQ1o$P`meAg}p@>`mLb;Dn z1}uMt%^k2g1Zl@1{~5I71?Y>|K0#{$OPyH&`zLqat85ifOpiBW;Cd;jHDIsjcd|0uSeklHE%WdhpvI^lv zf34QN#cwiD-iB=fA=O7281;Uv&(I!(0>ailE0A#y?orM9p2BZzy-!gNVOt;lZK`)v zLYy%PNgkb$j0UjzX#Zvq-l%H7=GkAb*k~Q8V-uLa3Gon$$aByJ{h0Fa{=Y0QrzIqh zP)5j{UfHH!IsVaYm)jHKo)hHdTN9EaS8xAcb=%LJTdB*hqYK+WTD}8yK{NPma&`Gn zw^2Sf_w&p5yRkApT5tXKi(4r_47TM95>omW_G@863gGHb5|R8x39&B>(o^8-k8^!O ztfkm5g!B#AFT^u2C|r&DzKb+){!ZlIRVin!tgv${#uLH48RdQkz9r%RmZ7)|^@5#$ z)UFAA)tCAy+KtfH$GRPLBUpC?^{0PSTYs^x{`xx7Wt7{5dG|i*|8UD~I0Nuo_JR1l z`+u;Ve`A09HAt>M)^=zCnnZqbGwS#h;}^!WVf~Yqs!tAOi-WMfY=__EBRJdRxA+LM z1AecCP&f#ABN29Cxnp35P&%IR64p)x2f;(A|D=$RI|SQ69m#`H4&i_E(em#9hw}Pt zq=fR;DC`?T8R38P(d(1qq3F}Y&=&}D_~)0;yo7T%f{WlGly<~ELyHJo`{?=WHauSo zRulYAzK?#~TG`!j+zmrG5aDnH{SBi2R#AV`cm(1{AsmBnEW!y0CnL;2n2j(G;WC74 z5N<*EDZ&E?k03mSP(pYcLBH$O=aKr1RKFYk5NYzg2I-Hm3xa-!n}Y6x@KuEU5e`Ba ziSTuV6A<)!=gH6$5zav9Kv;-y6~Z!vyAXbj@F>D_2>QL1elN8Ftl#bGbKdvCA0qr0 zA%?#ZNFek_*bZSwgq;y~Mc5r7g`nR*>+dc10dMV7nvOYfD(1(TIF8Q3IG>IAjgWc_ z;c@&;3Cg>l^YVDKT^)Tuf>T%Qw)G5^I)YGXsYAdya+C`mDy^y+ydL=bay^*?%dK+~G^=|5Y z)IU%kr#?r0jrtz-ztnzs?}7Hy&eXlA2T+fo9#1`ydKR^v+C#mVdNuX?)Spm)LH#ZD zQR>swm#J@4|4ohId9${22kP$BuTc-B9!s4}J&oEzJ&*cr>J`+%g?{?|W^@R3C^bbL zMjcKaK}}OfQAbn9P&3p<>ICW}szsenJ(YSUHAiixwoyB%Hnp2NpSqChP!~}bQbvbnfbtSbxy%&n78qp};-+|{GQK4=|y2d}IZlac{8>t(p>!~H`i_~@0 zwbUYY4Rtkj71g7r&<=d}5Otv1zWG#}+D6S$Po-Ma3DgXA8TBUWQfi*Mj#{Lyp{}NG zrhZJ_L@iS{Qa4bOc(;YNdmy!es_(qe^f6HF-_cOr&rwi(lNC)fK7#qf86QSXQCC5= z9*_DE^Qa|cZ=x=x=BW;KA$2~r4XW+U{5shFD5%DVGM;4o;|GHLjZn>B z%lK->3yd#kd%_Xpc6Lv?#=s4J+8s5$Bw>JaLtUj^lg z)Rol5)MjdiI+XhHecV54fx3j+Ms1{~sGIK%%B`c`OU+X|s1vBes6u`5o}l~#)TLCL zI*B@*8l{#vev3F>`ZwJ=kMwW6RbA>b>P^(8RQ(%of8J3aqCP;qm#Tjou6Fvj;i?1i zx5_%-8=yKqQO1Sw&9L*=8>r@QqL!%}nZJSY^^BJocTkURXCZYywVP^FJE(2cW@?Ul zCiPV6bgD(oP{&Y5Q-?#f-OCwwsSi*KRQ=m+ZD*Ofk-CApo|=9zup2=gP8~+ozxmdB zPNhz#>feBC`Vy%2=VGX~YZ2oP;|m#|&v-ZEHsc+Pw=v#K%~7Kd1=|toW~A$OH&M&f zjnoa)_0$seMd~{0T56H%Q6Hi{KwSaV{krLQ!FC&|5BxTWJJjOpAifH!_A4288DGr! zLdH*}j-n>18y^YEucj`iI@B|%qp5?b$P=`^4`r;ph@()m#Qf=xa>Tqh5 zTKYp!PXD$==g%;z{*8;qGt@Cu{hJp}UkKItJs+y$+ReDlcn9Ncj5kwrRKeebXgy`b zRX0*MP}fsS)EBAisB5W3sz-f@`T%tWRNFU(+Z#n4K^;c5sU6fdYBM!YT|(8rY0-AC zglhdOsLP?+FD~PQ9}Db~)Pd9nYLqI}O(^I03$;XD&HC0p9^|iv>UIl^FK2uS;|}9( zjGxK)XzE~Uc}-By8tMw_B5IC0hB}103GLPG7pW_$i>b}j40SO6ra<>g|JFcN|JFct z1a&xd7&S#b6RO)el{y`&{cABkiSY@HH!_}Kd_7dRQ=%5BYpAQKtEe9JA?gFvd#MGg zOI=32iMkl7?M>ou33R&ysZr{1sJ37K)ME$(dDH@RC3OXLDK$@Z zsBKWKx6JrP>IUk1>cC>K9sSz@-QG~BmK#DH4Apig8D9=nJC~ZLE}<@_c2jL?jyeIV z^_QLwv`F=+1*%KUQyr>J%~36ChMK0Ps7b0&%WJuPYLV(u3sjeyr#e)dnxk6O3^h$n zQIk}mmY?GGsYR+sEl^!*p6XC-YL04AGt@LSMNLwLT7Ht-rxvLmwLo>Ld8$LTsX3}e z%}~?S6g5c|YWZ*6KD9{os0FG^%~Kt!P0dj)YKEGorl?7(P|IfiQHxZMntUdh-vg-) z)F^cXRewvZ$H5q=&gaq8QBeOlXM7dZKaQyd>PqSg>QZW+>QLLDT7U9cwu@S3{zmG0 zs>S?C)HHPjbr>~IT|%{~9n@xOk-COjpsu7YrzY32ebh43H&WMAE#^<6rl}*S!>D=c z5~@w@pf*#B)HT!sbtQEZjNiogQpWR) zFJXK!JaK+YLYsT z+CYs`g}NF0q5bkPbrZEr-ALU)T~94hU!<<1uB8^KYpAQKtEe8;VLQ5^IxcNc9ha4i zub?icy3`U>+x;Rn^+FIIN*zp1Qln6Pj+JBlOzL#1MQwztoy+(#>QZW+x(KRvD;d|{ zE^B-4h3bA3pt>Jxm@fF;uI6uM{A21SsM>FUs{L@<4WsIBjBFhR zs441nszseZZKU1=)$J~2JWpLhT}+)%ZG&oi*FpXLWO|XhhPs;i0Cfe_-%tE5*56O4 zzn|2B)CTIuEVqH>(o7#g9ZnrawWt%QjnswI`BaI&*|s!QEKT~A#{T}w^j_oQ0?P^k9L5NeV-klH|vQiVE+I)U0q%~12yCDg^# zMO25nkUF2*O|_{V)HZ4}HAj7j`T+G_YJs|vx`Mi#>QYxzS5ZCcI_g?#k-8D8{kDO+ zo?4xBf66#{=B5IMkhPs-%irRqpg=_nwRDo)HHX~ot zKc;S?mZ_s?KOCyZ&!SfXb*Kxe^Qqlbo7zEbqc&4>)HA84Qm0cb>Lls}Y9lp69YY;W z9Ysx3M^J}Thf!11q0}MN!PF#mAhm%Sr3!U3`{iTmCTf|wk-CApo?4>5NL@!=OD$5@ zP*+n|Q9bHI)CZ{dQVZ0T)D_g_RF}GpdJ}aiHBVhaT})j>b*Kxe^Qqlbo7zEbqc&4> z)Q8ZIdY*lNdM{MxWr4bqx`Mi#>QYxhb^dx#ouBe*P<|8BH!!_CblA|0m9{K5W~Y;> zv}IexP$BF@b2-Zil|x?0b|PLlW97qMI3LbON=Pb)-LP$!LslW=hBEnBDTG4BuoJS< z87Gn}h4P_vA>@U7Ocu84RsT8QNPdC^kDi4>ycP-#G} z9LhLhC*p>^h=;AAjzj@%(k*)tScHmNxQxcw*h;7na?nWp<6=X3Y&0+_hH{#dDIg`| zhKpev#bYiCq6ROL%Vn@T04wj;R}SR|6e4y>cRp<4AGFPdK_O&kiVa@45X-p<znuv5TQXtQfJ%4Fz5GhA;=wT20r^A9B@S6jxuouQC zM7?Oni4>4sisn$p!5(;F7x8o<>N53yfJDxsMk{zVn&hGIznE1|k#IPHc#WaXnyxEOXL zMf{67f)30#xcv$d{2ML|(86BSiFpwZJx~lghm>&;6k^!DXkkz(ik%&p-=To^J7G6w zmj)CP*dm(c#xY{0h>OzsNIB-kicu>c%fKp97~m#KJLI=3pjqyqd?=U4E~T+&@%+Ga zD(8gKxlG#fhF}t-ze2?b8n6Qtd*&pZcv*Mc-=_k4HRDDyWhf3ZOf@Is48XpH(wQP= z1T0}!Y{;Q*40k@3M=LVuCf%m)bQnFH@1HLB&o|_-H)t&^V}*!|>464WCG1sccQh_l z2{|0*&e2)17mbt|57OJ#7kNqEYJ!h z<{Q!}E0=LXmSq+Cdjl;?Yeus$39yP3!wzP2AyVAY(FTQ6PPmLAO?%05Ln&ryqSh96 zLWKcV+D+hCLy{A=Tnw!nDPtVHeoolw=QNZCbfH{oHm%wz3}co_FG`q&*%O1Ta0E~N%Hf$jM%O zqLi?UI2hdlb|LDb5qS)1#{E)Rr@;0F^Z|~bkQ*-ca|Xe}frX3l$`s??Anhv*KGtmv zR4%_eIyF?nMyyQA#%%C(Qs)5J1w``b;W7>;q@}H#8_GwDVJla}8t;!u8ST!8(mG2T z(&aFk8Md6L6L;g<19=?2IACpT2fG(4VqwUK^Pzk{2kq0^wWY=Wg=jh9VaVNx*N~5A zP+vNYny@A88k%0loJD!eM<-E^731YWPAsJ-r~-N=pU9*=WTY^Av2Lez2v9>In!_y4 z70@r}lrWCqLdc2d`=QxrMG4KzSvUt^)7r`brMR7exfXE-+W0tFS}>Mg#6c6W59N@9 z9mNS4hZX)Uqf;^kRE-_S$QO0uVh~;Jj6Cd}P^yF>EQK>gj0=ija@lB?E&*xueA)?P zWU-T>bTQ^c(A}j-&e6U>QW^hRg#qRM*am9H^cw)h;esB?qt~3U?oBzI%c1EQR!{dB z|6u{t1HFj4)C9R`UB4U}q~)|drW}mII8Qne59KV>i9#+8Ky;gnMwbx9@gBuqTREKT zQrMPm*v_M#qE2ZyUOvdmIFS@O3H9JewRI9?P@DEf8O9h2IWgsi(>SV9=~Nn9Njun_jn0m_{oGg? zD^oIw$!zI}VTIKTA^ejmV_C!=>HFXHZ?nfB9Cv(^zDm89Q&p_a%G6DfjTc)_ATI@< z0p1Sj1#k3AV3qL}(@bbE+$eGIji;vcOy0_2gWmi2Cf(ddlE?$ob<%{$SF_ ziTsV68;`$*H#X>yI66_wW+viKg30zIylb3X1Rp_mC!?)o^)fe`Y@H~w#H3Hdd)CPL zQ$!vj7f%yWS0K8r0y=*kIeixX?3tW{N4Y3|%&9h|*&^y@z~8TL!50X*utek}a{6kK zbICS%A=$k~Bu{p(6LHD;2Spw?lXW8DwJW}j zydvU|bFbo0bjjX&^eI_=fBlZ^f{TXX4-Bv3@au8^CGvsckMTbDc#vKO?@U(TVZ+E0 z3(3)B^%FLYtiHn9$?7}oB4a-^BsY-NZ`ew*`VadPS^bDTPgZ|oADMIubk_!ii1b^P|*ONRfB>Lz3TBmnJNbV==LH7u` z1b&(9j0wqm z>(Lk5-A&GX18pD|!2cj8Pe7j-8}K0fdAZ+y@P6bXUP3>XoU%f4GPw+HA-mH;GM{Xp z9FoOk54?<=J{^5RE`jkCrN6C0XGq>5V-=Q9$?89CJN&3y+oL|z_B0GXY6p?kuUdwz zKG&v_)n8kau?KgP)nD9|Wc#}qJ8}X1b7OODNd8DJfuAPluM5cra(QV;{zJBI2+1yR zYNhQ=-WZbMWE*@0xeT62E`Bd0ZN~olAz45!fb-9V*}FL;PmwdXg=C|# zxjiJ2fk7MOj*tu{d*FS@$(11)W4I8KN#q>3!!Q>1#boDx^bgrx6_R_&L3CVhLx)_pw8OBMW-=Lsv>8C>S6>Ma$(ff!@*&xMB_soJ4%YE1y%v&TWcB5DFj;;2Wym@3RI>U5 z%#zhFU?*Aq|9zY6fb(S87?Rt_IqV5 z??iU~6_OO${x~EDkW2rDzd~~AlaP!jC;x-vmz)D<$u4*&Z6w7IFdn z3uE)&ko=D9f}bQipN8Zma`7{)b>xy>QQ^8u_azq!`+i^iu>kMG^h`J`hm&3KSaK>7 zmXpXHxRq?d9qR?;5_k#OiG}4hataqAKPM*>VfnpDZwSj16K>?HQJb$;nh$ z9w(Q<&yr>Du)IWehK1#yWD6H^ACgmFMgNe?;C?#>{ooA`%TDCfeqq^*?1B#>m-i3L z(Z&W2yC#w|2cS>Lav;W??18^SE~dkBo#ByTxtW|gBrMB~{iv|~jGR0yEDw-#hlk}) zWE&TvkCWXavG3&4n6SJ|E@!asZ@)X zS$)-=X6%0*mNv5b+H=V2zwd|Sj2D()k=57UW5(v;u)Iii!Eck*Kj3Dv4c_icK|9rt z;V`oLD;!1kieWjHto{e5lQVx0OO9-tG~d182dy--X^P0zE8-hhKTHe7c1#pP4$n+f#d>s99ez$okCWh zey!xpE)khWE`l#5yF()KeR68oh}>?{;Ro=3!+S>L5wiL-{JTlVjpRFI^&V{z z5qXoG9ubkv`IE+Ws9ofjhV7TGIBn&ORwj51XKQ5EV zvLPaEWcBefkE}jlE+ea7mz&7y59SWC`iJ=y*(+ncC95x)b!7E{^B!6K-z4^CAALIalo*k4f#EyGL&2ZA7psXsEj42_CkBevUgNk$Z7CGvb|qaZXlNqjLMy4 zZ)8+{O->#hl}E|yUuPXz{p`F!R)0I2$?A6}`IVrZ>i=d>viie0kgUFNjyCDwNo4hj za|T&`^qfalKRMqq>5Wmjo-D^lWx3&TQMr$7fgdH8!LOP02~j+-4%$|p7?s_~xf7yt z2-%*D_K?#jMP-KJX;GO^E}RmT%MG6ql^e@;lF8B(v`iODK>I>#xvifs* z*rdb%%ZudlMNxUj*jyZyPs#S8sBAx+?F6UD>f2=$S$(`rFzMj4$?ET=o2-6ct|F`d zmmeE@@Iz$v&+=EY1^$OgzalDclie$$68&1x9`&`d6Ima;4=1bNl`$qA{!dOY>EP4J z>gVKKvid#wHd%e5TuoO0EG}7ntK3U2fLD>N+oJL}vI~BRocuA`Oite(mH!(1JEF4l zenI=~6;b&bxda|VcJRf4W%%x>G?8<^h)NgPzBekDlHCWQvXq>D5XU&V{5$xoBCFq) zN66~GZt5aR{tpnlGUF|hOE9;EVBB3X(g*Kmx3JQyU6xh9OLBV)9~*?E`T2=yU#@Bd2$K-7CH57R6Zd);DIB8_UG22 z{p93xQ8|E|dOj-0klnvWWhy!IGS(=v^9uHbEbFmek@K%bfth?iiD!P5Le|nPk$x9Fv)3 z^}*0((!m##)hEM^WcAH(m*L%G@_WPZm+%Bx{U`jLtbP&RA*-JRIWTCa`cO!c)u+S0 zCLMevS^Y9tWCz?z7QAo%0&*UF6`!(#F`V~_XBuQ&GKf06aQ^!*PC z+NSTN-<_=Qr%#jh{qbGJ6S^ZaBN4CEgla=J;O)+_xocn%E zUN$!Hb@2%~?Z#yLLxb(Ae~P`x>I-5NxqLg?KvrK5XPWf8VzQ7dD=~*nI{0pKz7Uf? zl2gCH944#3idV?$x8i+c^T(Kk4-49(zBG0ut51!6$m&;PG+F&?OeU+JjjXYGEGFG# z^)IoQtUfXBAggbTRb=&n@giA$VQeC+4~!iT=RA2LCi{`q55{q1^@DL1S^Z(mCuhKy znDi&nKjb|49%Hi>Z6K@fjAzN}L*p%z{$flbqk}f6PmL70`1hEMG>jhx98XqX9cPfO zSFkpc%dcVmA(!63x=mKU9?Qwecd<5-9sIyxl}Z0FCQlpw2_@woh%oJ_>!RdS&rF8?JyKHq>qiujby7aF25$LpOYuZ?s)XGNuLlG{jHKd!^xizm!ah3 zq_`YTw!o9f>MLaixpZn=E+ps9ip%#+dUITUMOI%aj~Sa*>?2wIr~HSU!Vgrwd`!@W z%sFv6jGXL@%Sq&X55|-%=f~w*vie_HZg@dl?k6WNh|81Y!b12|F*e_hOYG~xwrud1 z$(|FJ1IW(haT!lm-!5m6)o)9ev4PK)E6M7^K@%LH-}JcFFM4Re5;2QM+{KaR_f$g&)BkDLSlo}Btg zT>eIO!0X9H@P{V-_PF#rHfUS&j=1be_Q0da&I+{6*xVVH9NE4L^MsuHXi-6hMajUE-#ad;E%}8<8c|#$Z>oE z$2&Ryx40ZaE<72R6Ub%oS>)VP=tFXHZCtJ<+u-HK=IOY2WO*hoPm`^6aruB;dM+;8 zA0M=#{Cr#vBs(v}q@fGxgv41r#KOkq;W4y>^@M^O6T3ptVlmA2; zjQ!gfmvKQG((hpolkE@S&xxG>FfKjD=3m&BvH4G2en(dSM^BK|AJRX_>Qm_xV*}n{ ze6TI`u{4}q0*@g(l8}kyR5&5uB-@dMw2<@BgnXM^jwR$uaxtEe?~yYN3318JfQ0;% zY!6JxugLlB6Y?i=A(@ahIY=?RaGFX&#H$_`mqUFN46Rh@+P?m-b~JnOUS@)1Z~KSPskqR0{8&3J0T&* zkgbUcnQnMeLR!fsD=STpIb}F>d$JKNe36m z>Qn1svijC~&ZL7sFbv;Yu}MMO)Q{F~Wc7)42szW8kO|}h_*8PbCm|hV7knW(b$&vw zCFj6DCOhDJ$(i{HSxxr9uaWZ$67pZN`rF!Ja?m#Q!!?|&{uz%4l7y@x=N91@As6vO+z(9p;)KMf1Z^mQcO%Ocm~Uj~s)URsTT2ph zib=m3V@Fn>U-QVBYZ9`UtbV|5BA37`$dXUU{U#m!7sJ;kVs?=x$pxVv*a@P+vMEM3AviAe#cyLdRap5A?LxX$m)yiX|nnxd!6in zKQcDpxW%^pFd<(eJK(PvzBM7E$m;WK969eM>qC+jda;Duzl4ab5>U!IVg$?D(i zF0%SLd&s2Uk&wTV(|4jj$?A)3vtjsT+v&uh&FVw#AhP;Wn@m<;ZRe2HKiidte~oc8 z{0PR8?1CRA7r`%(oktV$j!FLu*5s3d?dBfCxr3ZqgSEo&<2WA4$tQ4*Aba4spwa9 z7S=1n|3v?gWh2g^&Us!&`z?4 zKLq%MoPw{t*f)cAs^7ic$m)OZaI*U9n@CoFeP@x?f8Tjz_2G9FS$+Bagsgu5?jx)J zzlX`{&+i$s`t^H*tp5Gvl%PH8=kH5o_4juGS^fSUPgehbXOYzp;5@SWv%7?x-l;); zOim7Nkb6z~E)DV|IdxEjyh66YpODqB;DA$u_Nafsp=1kuAX$9|X2|M0@Kmz;5bPwY zZ^6sR>L>7KV*@Ub)%V}SWc2}9BC9XJPsn-r_)DG^v`78@?Mqg_e`Cn%|L;_?`T?9v zw!l}BQ==QiB`1%7KRt30{Des#(;%;s(?>VRdt^BVKK4%M7=d>p%h%x(o16n5L$;1> zkZ+QU;0|)8u|X~-r{JgY2W0ixxRRX5AEZ1)c1~!J$HXFrd-l635DGf57Tn5h|=iy(^G3nsz$m(Ps(v zX7KlV&EP%BZQ#-54)BR&8+;DA8+-|QK6n{*`C2|@3E;;vYtS96GxFH+#L-IoSrX*Y7 zVPqG45V;IKn(SQEAm1Q+;M2%S2m4FTfo-x2zQEXg2m4DdT+$%lB^MWA9WXYRHOQUh z6!?Ddc2WGD-wh4&JLQ;22L3G9kaOTy$R7Az@;dNvs4k zCFj6n$S!y)Idup6+1P^@7<+Ku*n?M)J@D_zCGd;nGWZj6Y6Z?OGlDjF;1szCKA0?b z;`~cafzKpoz!#8n;O~+h@CvdE{tdYVE|ODsHOLF(47f!0z;7CR@cU%>X@mTSoB}6j z25lY=-kqEQA4$%Er;{CU8+jf00&*FA9XY)cYd+Zm|A}ma*OF5|Ymk2$dvK&VXoCgb zne2eSO7_5G$;rDL2jtS7 zc&}1x(6-cF{bX;l1O7UAkC=!D{)XY7_LI}qW`KzLcIi+a2ph0NR^KX1$m;)O8CibW zPkv2SKP68YdvJ-Y{v+NdtM7>Dte}4NA2EciJ|Ye#s~?DQWc3AcI$8ZT%p$9=go}(l zc&V`m-$|bEU_V(!Rv!n?lhq%=26F15ezKXY@0H)aEohs*TYeZh1wMkT?~=S>MMwg{<%5JcF$7)9f^icQ;-{*7w=v$@=cGTgmz!v0sw) z9b&7L2jP7HulAF_k{iI!gSQXi?~ZSPzjLw+j+`5$r|wS3m&wI@5^}g_YLEF+ej=x0CgNKu?K_NMcoQj0x1afh3NX{U;4fq>dav_YrOC?(i@h%9m z_id5ylT*8j{Dka$4SyGGY=-0Sri~5S_JT>@Q{;8SIHos|?ZIgOoS^-guZCo2a`{NK zpPar0?`4!1s`?OGKU^=e~pYc#wEe%h2(Owvr9;plM7!8$!fB@GyYbWT)a{w zW(RE$@E&CABD8^=`9Bc=Y`rJ) z3Aq4{_XKS#jTIS8*57OFLryOiIh-s@L{1>*&c!=h$jQA$I>^NozI!95_7S<6Y!4N= zom}2s%KCV~rvgcElVzpKXTyE@Thq|6ye3ppYC!whqKQ z9}MH3=5%uLPPCa^xJ%^Q~VwoI?7^bqiu%Qq5BO#hwBG& z68&};*+zf<#@JxHe<6ECj48Q12k-eI=g$gBe_S*9$7T!0lw6pK_v(1@Ac_+o-2x7~A@QT!u~LLXI8g&j506Cy_nL z4)|cQjcd7a#va#ZXB+#sFplKn29e9ig*QchK=$4cSxGKq{rQ8j8HTN6_y5E(`-Kw_qn(S*^8V3A7;{V&oWtA$9hm)+Q`S~@Sn&<@axK` z-$9-KB@1}46VzF{H7;KvTR)7;Sh65}x-!b@JIY(hC6rxA7TminA?Lt9G&Z>ZeUO}b zu%A3jcEN9wJ>0*`#X%dqui{uETlzbE_feu34FM64096C&rf1{4$sYI8pc@6 z2cv88Kju#r-&)1@1sqkI-&OIWRa~s%XR7%1D*mX7Kds^fuA9*Szy3j0Jh+PY3OKB7 z*sqEYtK#FUcv`@Ioo7~Ya}{?~ad#Cjtl~?n`06TNR>ikh@%>f&=PG`@ieIea*Q)sK zD*mX7Kds_8uBA+0ZCAy+RIy%f8Jn+FF@7d0uOqyHfS-WMCItNa(|_mT2IyM|`1z=8 zM8Ho+iX^coTK}pWfD#bTu`19eL0}haNU^)S;se-bS=}K}U0T zZgJtz9iG ze&WoI&bck951F&GGZtiL_sp5y6qKyb3d(4mtxYpgW@b}IOSY-`{H8fGTju(e&F<;w z?mTRi&&}=UA2w>n0{mrLcHH#rvCYkz4w~H4F|K`nw*3(N&638)cPy~mCUrJ7w{*ek zoSwPeS*x>sPB&`oJ9k>oj9FSH*kphmo!!~?Iqlv4mMcj!J6f91F=%lmt+{hfu;-Pe zSzYbT+1B>%?Ch5AuJ)OzxVZ&A(zzfzxBUVbo7l{@rY>|&RlatFWE*MS*wuc%4n!*k zCfhToeP(BKOO}P0dVW(^d()im?A(@)mYLn1U6t%kyJe2wv4UpI?(D+GgF*3!L9%mN z=GA6Mwzo*OwW|}O*VEeSZ@!!3pS7l;SF&?kb%TCo)n${y-&bE8HIkTE8qk+ts==ZD+9d@X@rE5-8hd->rJP$?}70kgTVh_x1L7|>5 zq-o7n8BNV-Lv=zIdi(sAsx&j4lRKMxI)b^<)ie`xd~SAbXO~vjsz*wDvt&*BENra{ z#@X%#c1zH$eiRd-Wxn51W9cWObaPYJJao(Xt(Z+FZ&r_Pqsg{WQFCX{4BdENd2?~p zZ<)s$ds^paTjtwnXnkQCw6)H)J9@U*EORl<`e@Vntxa20*U>(wXMT33E*7AOLtRuQwOF&ZOLHQXSK{}!C_dRSzT?=#jWk=s5woutGa1+)4AyXN;;+v4(VCw z&UthE1Xeuc?eT_MrW6vAZK-T&hrb@Ci4`5 z7S*Qf@O1~Xr#8cHXx};7&^~jTy82Gn)w9n6y)&kE+g&YKoBP;_-kDTut^+)?v&X+6 z*kT9GLf4zom91|k#*WuBLA_m=5Odp`F&*kJMye{o%nWR*((JBI{~R#0vkU7})edxJ z=l0CNY->aBH|erlRVX;y;Hm%@Ssg8{$gJNg=AG{1xj3m|S;uk_#4FcTNYKj=UNZOw ze!Q#YJe)63qn6MMBL9TjTY-O`3{I{v@TazaLdMk~79f+Po7R->_D;-1lj@&nYYqLf zGtUn;SE;Slo`qxCl=F@BfUQevYsN$EUMszh%+@ApGn!lU2(Fyz}Qcn);?QL+kR#xbu6xEI_I`yla-8#xK3pyTG9+U*SYKk z{`D!Uoq!RnDrRx|)o!SMHlds`tZdt-Iamz+hHaV8w)vyi-PP0LU&PGPE)g7h!8Ms5 zt#q|-I~V7TZ2RmcU0c!jnuawhIP6Woux=e1tx)&QzmD@uRFbf=`zgWdt5@OYE|{ZN zL#<7-+dD8;s9^4bIeLug)vRwewhy(zs1f}i3aQ!^HH<0@AdA5&DT#noheGH%D3 z7xa8$e z8g(#nq0^1)8p%%7J?V{|Y&YwXHn|B0zL^WXnYx80Tt8JOoP<8CjtBRNBS-ng8#}vk z)5yp-TV_sb!D=;@m-i>>>Q#wab_?c(e-ktIo6{?lora6AZcGbYx1Z9b$E2U#i`Du5 z)t#Shs5%$R(zG^QU{AzX*x2p4Tl8RKJ8ovW{cA+r9abXQskj!cO*yqTdRlE%?Xz_z zej4mf!b!0?JH=lv0-oNP9gnrnWFb1CsiU4`01ik$IoLFtIav+3+z@;Q-`iiL5z^a>@bLf+*CCV&oI!nQ*fc! z)Zt%qYcEfm|IO)>f)1ZNaZ2Oy=od{sY3d}TPCK{V))^b5O&k~K@sp+ zM$*`0wWQWDY3fv~5}Vj-JHzPM!|Pw)fcCd3bJs)63kpcD;Kh456XqGPdx;Ep^Mr+d@%G#|nvfWKs zeRyKTgNl(^y%p0t`{^UIQ*du(HQ_o{+cPpd4i9nk(5p_KHc>Z-TO4HfCN-Nu@~<+2>ob1~{_HSubkkIQ_&Cmgn5q4! zj4pr^9O;(V^= zV=4gO`6HEwbx(pw(6y20w5(fD*c(mS`3I;6sE*IkyBj=?Y;B*fSF9Doz7vA4W41KJ zmqO?>eVSTTL-op1mmEBWt0Z!EXM?4rlCHhb+fCd{+y(`k(XPj{kU4m!+>EDSX3^5p zes=|Dq|Vk>|4C3Kx!pg`EAeK3p{c}m#$&3vPq071@mQ(DPenHbi!QFP#*GWkH{%*{D$?(Ff;9gqtV+`wT2ah5 z(Ssw{l)rvs<9a0Ow;sJ-E{_jw36%JscK)%;@L#Mq2!)b-Nowm{ipX^&N$zyGB^Ba(0f78`3b#` z!?dEgdeW(CLgjwf&+YD-sn5gt%@1}F^Dv9sbsSoi)b0g(rKa|}a`R@oH(IH@=4M;- znNYEqq1OYwPe#q@^G|4Bjh+R@AuJ}QD)@SvMlsnr$hb4UM(2rKXeN4@z>tP1$HuQtPfqS;qX!I#4|Woo{R!&h8$yZwtG9R2LaU=rw)%HUE*Ti{RJ zU?r_2;)~6$CjEAFZc7tauHJq3FXH^!Y_4_cuMM?Ye*#qItiQ(h&hE-os!gvN4gIF2 z*Iu_~E+@3|+ERY*9RCrBzhxezy;lrDhx%pAcfxfIFv)e>H_3f&z9y4f$CkMg`;XIf ziDsNNBSFWYci}}``v@m}UY+(93C^6gSD#q3_~6v9RljA#w>h{<)&m5ig&j3pG^Y#1 z{hJS7sA|6MJ0BGW1+;B732iO&b(ssUiUS+}2-L5;gJ|{PjVk>p`&6TP`P$clWAZA! zQN6O5+{!|N6o11N`|6bdxwVIWC81J4n}M5&?zuC&+U?#G3oNTIH+k_&oS)8u~--8&>sZbz=PirC)>yo4*=&5fg=a0eC8_1aXeqMBB9-1SB)wN@SQnp?FT^hPTK;a8i`WK`Iu#UoC09T1W5q%$k77I8PrWn{#w+T5!hlpW)+--e+D{M+;8GTgy5)$l__0 zGe0;I~#_<9;VqW#Nu))WJ13{)mp#E1ikK-L{D~`cqbodG}q(XF|nd znl8PSd_P)wB7iFV6mxN`b@~aF3dZYcbDCbRRcfiE1$Nyi<{wS|F7Y>BT35wzl7DNd zhCBhb`}eou>;);>Z2|br!C9;(srT?duDyGz{vu=I z9DKiw_D`SJc^tmPn>J5>YcLL%(Uq7zvo*K~nm!dzpEahH2S;oWpWD)Mu3qu@KSl9> zLKdX!Fx02{zb&-8^a{Bfw=kwUrnLLdGix@Xhd&d7#iA;~%;%~ky=BI82rc42%D}yb z-pl*1FSx5kdE9>U&eFoYVd8N%L#-XYW!|Iqgb zvTApm@%&|rp7IY*?2|sy(KhlLj#qv9Oa|TFhC4KT0f2$^BV8>jj08)GpC0@o*2nfa zm>b64{QNdM15M~?$M3&_LX~*XN0oTX9Q{=nzSih1VZP_+O*jX)c{K*X&yM^OdXbGa z2fyK^1@4}DFpPdCxC$}WxHmH+j|iGL6D9G)q0(8JsI#<^^8c{+{&99z)xG~D1RW?a zvBfsEwhW4Xu|IGUeuXOaL~`(?%}5}mVsGt`pCmOTA(;b#OJrhZG>7A8YO$uh)}~5Z z`YqMz4|Kv8bb=`}Al1QAJH6#w$KKSQ>7=*Q7G>~y<@^4uwfBCW=bRI;-hS`v{^5BM z=6Tj$d+oK?UVH7e*Z%Q1C1#bl2p&u^h$hY~ldmV*Z&uVomX?B9rQpPm=A)@C48bQ6 zZpZ_t4hndt%Q?*85t%&HVO%0XQZH`-Sa!D&=mv~v~cbdJ}dYDTfmlCJ>iE10B1A0?=EwZ_+m4(aNi8=raNpzosY%XEY^FcO} zYEts0ZB!UoJCU?gNKjiv5)f5AhRGIz=aP5qWWBN-hIxFf`s>_CG9i&K;0WCpI{VG~ z6jJttu{obFkjm^;E{Dn}B#0#wKnT-hqElUCY9WgfLS>Y*kQT}|lAd5Am4&B`dk2a{ zu%xy+n+7zCRqoF1hR^_R6ML&+npmW%KK$AgiES>du&>{wDbsiM zZ`hR zto$4>0j-8X3lcD`b0&zj1~laPCZM@9&PA-NF=_}tpy2*jH)Nu)WV{92@}MYxOQQDn zHoZww1UE+$5aM8@3ZIi{iABi=d`jXSh~@Ac_>zF=eybW&>~r zEAGE_VWzAbak&+yqSE`^HjUe^=4M1&S7`>SimfzN!_*GVS(qGc+IEvd!=%{G zsI7EFwy3ZPYtQDJe1g@Qw0V=ZS_Aj)r=^#`x)=s}L^$l-6;W|YTw{2d} zNuRI)N`_6HTi%T?DlSsx^Vyrvn5?v=$3(koqU3bw0ec@mr+Z19q@FZ3K6f9+}z44dd zdCInKNy}O~pVZRM`NUNDJh0ftEh$!YL0_PKv*gy+&C;S+v$oCB+O=$!8gn+aYlcv$ zSW}w{D-vjGQ6;r+&n$(AS-v%`9d#s=jpCwK5KpdwGXkn^zV|D|WtlZRei0`x^WEI& z7QvYXbhr~qRnG%6$}*2BYOg-*@8K9m21r&nAm~pY8*wuXhiK`;pc*=Iei?Y{tNlAU zpq?!?6=A7_9A2I#BdrP7gUOCvgvF^*5gP6b0C@BIJ?{+jsrZ)5VySk{6_SkkL}PZrrx}nePPX6 z45*FHmVn8IHI2PVkQvBT2AUa&b_rtK#DJWf`;30c(+^C-*mY3=we4ayKI11ZD`ttW%7Uy?az4*4qWRI$bAue+z?OXuiu-Gjw`iA+s_p5+ z*A;;#Z~LT8dB@n0pC@@l?jfq4`o7^*zDxvrA2 z9edm^r(c)`DR#6XkX=^&wynPfUzal2w)G+z2Pf?

VWM0LB7xSu(9o{yE1Lava!T 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 TL})I7wpDYS|xst(q5p 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

tZpUkUK!H8Q* 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

F;hI1X{%a|_wib`SEd*Ch?b7$XKh_^ zNTZ3NG7cJ{M!>OkK*x+-@yHTqbfACRZtC&5YyMZm0fK#)`-$h{7P1)Azd_1o8?w@m z{Jhw$C~&rhl!`m;(NYlL<%+%QpfE8#B*>3awDBwx-=P|-QmHuP5bVb^(XW6ajd;2i zE(eONDEfWZkd-7~V^LSj1{AriGa)LeKGsLx64U3!-jw~&)HeLOiuRH@#w}Hp#@Dg= ze|RBxdEOrZIj;IG7wZ)VOZR4+wB2`mmw_xjN8V8egjRN{X4V`NNoQH*il~De%U%7q z7#GXN^m|S&HsAH+-zhc-VMM(33U?wZw+Xel+qk#haWJAAO3B09_)1^bwg-QeJN)%y z$lDYXez(OCN63U1s&Tf#{2)r8qdu-~ukb`S0E9G{9+;-grt@w#KbWN;$KGyZft4w-_U7V8;}V^1<;%_z_T_?hC1 z;&gx2vxJLYHA^ce-1i!U+};z6I7S|Klc~(w$w|?E_N z-Y6R^W+{oZVu)2#qIGnJfZ`o-r2i{|$Rxe~(^gqyDgHmnhgFw`a`Ew~T=DZDRxYXv z78(Ax@2Pl`)VlHvT2zOy(eOVl7WT55*&lPo0vem1UQs6z4Ogwf{-!savI@xWGrv`mIqY+u+-) z#uz@ED(>B|G8xS=U!)ac6y<*xgY=`>-KK0}$MM+t^6UaZ`5vCdDq5{mk@X*(od zF$j|=nXoo05}r5n+&po{(wsk)qQ6+;16Er9V`WU9Sq*rGC!SL-Dvzr(C3|SDE?d|A zEnyOsSsHik1f9cVKMnlXp-~s9!oPaR>UA!IU%6ljVtsZ z0*bay?WB*&`l%6cdEoz91Pm>-6Hv*lyZm1^77PURWam>ow-Zn~Hb1U4p%F-b<&_Dw zl(ICn)FBgky97kusCTD?o-0ttnJIr+RzyuHuSbPA3j5%3VbNvHF5@zNSgwO}V z>QWSRQlnK#Te?wOOvmhhViKHIwzXCZcbF}u>%QD;)3k^GjeGRaJT+*|se&86JQ~z5 zDTLDg!Dd#y&)UvCEo7A|Rh3}BF6Bz4ExJkZ1=6|<2m`=%AVW)IF*0qt2_eD$MX33i z`7a)b6$+JsQBOOWG@wd9DG%L3*XfjA3VSC-2mbJ}MR(Y{#@||poPHV~Lo^nrg=2Wj ze4(&Zobs$z8_*~;Q`(_6TfKOT_oB3KUxUzjot$8ZdLu?(su-jal>}J)o||T&dQnlww^`vY2c`nk+Sy| z_I>AURO&7}J6e*?VT@<;ePW2%>Tm~V!wTv0Qo;q)NZJ4)8NRtX&P+e&Dj zNVkd=j?P{GmruZH=;knvbn_T5D<6#|2l|^G2l~IWf>S~1oN{Iru1zj+>#~pS{mt6( zOHX$^<%9e8-}QJsuYWw2(3v%#tvz^e6!*=o6$N3VbXQ`W&6@N|g2^%$D$ zXuiY_aj4io2O2nir?2>&nY$)LXk8c^_|9ly4Q8VJd4JjR&&3QQe@{7X>0i9$NE`C+ z8XBb+9={B?$AS`5cNzcS$%viZZ}4uKf$Em;YG#Jh4WIRA{>!4I+l}kgEVf=Rbphs< zmKaQ1wzilfMfUuCC)mXyC~fjfO&x>s#RDd)MRc$Bjp1CgJLGhwa(YBKhz1f_BZwqW zvZIP-1kO_I0A@%R;0a z5cDogjKE#sGR1KoyKZCdV~QMJxWyc6qg1=0anROjKRo2;`pVEv$Pxh?XZk04$yW#j z+r|(Md*CLnOLXDafsS`sr%Jq*5}-3lTb%cxBu+Cm^;bBhN@L?8Z(I}NC1QTUy@wlf zxJxQ9qI1@9I}EuR<-?eOUmTA@r`2@c0Ywd2;=jsxaZ=h%>6jCrmD3vs2aObP>2(O& zEp-7sx-iIMl`#JO!*=kqlS2{VwbSW`Q-Z81sbQJL=;32R5urciCWi#j4gnfoczN!V zNN*aL9o->2gi|J0T;Mri-1sX?7k?1C@$ei4e~i)||I$c5-;oYyw4(uc3Tf=A0PbE1 z!%VBI-@4kmnyS?kO7Uy8di5^(UHh?8{OC8d%?}KRM&AN>y#UI=LXHT-3w^m8o^Yno z+idQ-Z^yU9H9;9}fV)DRl-YQc+-V^=7z{6*y!`~W`YHz)cO}!I^{bQQ9wk33l*#iF z@OZigL`?{_NA>l$h`X~Sgp`h%^oMsP zB`7fF%j*Hk71MY0>8)Uw4i^fgcXWE@>7Myo-k1xDG|I$(q;zlnB0p@=1ev!8sLZ<3 z;2{ojU_A1FS^2FfShoJ`IJ6N4RO_5ia)M|;TNY*40VN>x*K%~L(QDeFVn1JTdDt>j zx7(m;9*xG_Y0M0GBp$yN3);+0jg1cOKlMVEq*%u`S;#IH6M?>hIT_ELwofuu+gvW~ zl#1^mzij`r;T2<2bVe94ecie5Q#^bBIh=A=551ayyno&R<+WwXkIR<1&NhDqy=Nm} z6Zfn5MFhE4#2k0qN^;hOoa{msTeeE@WkJYt4ED*!O<4r<-iv^sy)BL48VVYMDg%NM z4Xa`Tz+912sD~UOXpfndG8pi#&sgy)|0I(n>WQoZ}C7eN72@vDL3**nz^x}v0?`$Nbw&F-49W=Jv%0q z-2FHyAUaaus#F0>a+ux|ca=iHlEN-z;WSZK)Gq#T8-X(PV>3Au8Z$3R-Etv(5b6kM02G#55 z@71n2^>MZ*qOViM-2LpdE|h)u{7MP9s*gQBg{@(bz*}w@A`dVcMzKEeK&i0N$wFsi zzrymM{Kn~+TLFKe%C;R?TUy9UUAy>8`MM#Lfzk;!^S*(p8Bf`Zgxk5aroUv#s??n~ ztOTB7jatIHHic^rhM~=G1nQiZ_EdR&MbnIDSV}crreYb|>0e@iL-}aK$yFwWO*qDI zsbO}7Xc7Qo+0T8Lu{u19OxDRX@{;FJM88lv#I z0+1~O){5Zmb?}D)X5({<@SXDh`cE3)MS#6X3f~mqEV7GX24ok}AO+KrZKnZU%O0<) zulnah&(K`GnjY9yTWwR>Z)=abW4|<@mOchgJws)vPBZ)yH;OC!>p?$Xk`I}braIZK z3_f6o+hY4=&qrqq+$qymY}Tidl&>^|i(epSH+EmP@t@iCC?o)iRNyqphk|6KLg!i4HInVbyF;{hE61|de@=AW~U|TGd zh6J<$TzA#*C@}cPP7JrgL0+o7kbrAb$v;NnLA!hlfSr;$LlhCE)^K6{s&4A=GBAYL zW3t-wlyPeE4F$YUm|APGr9J=4`tu#Jt$w8Cc7xO&KDA)wnz(XO@UrC#WzYG63s zJlC^uq;Quyvm$JLrGq6^ZL@QKkrj)zo4n)?*;)|Ht1Uk0jzb+9-)B0d zl1)Xj&0r{6Oh52MO21ygJ>!g($j(jOk#H_dOObG{+(A#L%s*z)@&GeZBHTq!d1)`i zd2I$hy>&yx8ihsL@lf(5jvRTdueG>2=E<$LE#BGG6nasU0K7UQ}oM3x{vH>wcY@GyNk*%kMuM19E@cRcbkv@C=62Y zl(pTAf!;yMOZa<4vwxyph5?GiurgfzGE)tmgEi^;zP*jbQ{xB#~ zu)U`LXqJxL+airzz0IXhg|gzL*BUf?fx2rReU{c{Q1o&p_=0HaGguk-z#a!?KM|O{ zv;j+(OZLOtAXVJ1c7+Z#mq<(K@rq>N!*_V3G#CNK^4*H;Xvw2%yA6tyDwgaE!=mMA z2~N!wZ}*LrY8@Z~eqbWLc>FSdbb}F!4xtKc0M#ZtJ(~)&nc#-jA~s_DTjQ(*_UfLH z1XS_YBbgextDpGMQmVL=g|_=XJwbV(zY7G6l1=l$dcNsGw_YBo<25$;@=We)bW)fu z{^9V|l6twn?&n!S`CsI(z36)Y1x--?%rKl7Lgk9rU#AWJB^p89Bol`KONu2^{O7YK zysWpNP7?I51K8EZSz5Nk*%Rr+iz)2+$^#EP@Z{g^`_9oN1d+D(lGpX;U1Yk$B*S#d zmC_p~dq6mRN~dv~uXUV?v`!bQTrZQ-v_?JS&sKcv6RgxfVOIYYj4{{N!%AsMy0o3! zr32~yn<-ag8P4n=ZnUh=j`iO>Ht^XsY=!&0c1;E!o4-g=%-N=F?*@WYosMlfPu<;S z|3@WPqAppvg7m82PAN#fLYO+g8)8jTc7oq2enG0+!Va#GdQ{kFBY0)pdz%vGsP|;rohbfcE9@UyQbb^R>`UA6BUk3WKQgKiylIjpu)a z#mim$de`ZvY&xzMhR|nimhI9RZLhJN_57A6=qqS1^@04l>q7) zXlN+8QY($_cJAQi(bA|)=rf5cP;v&|XTr%e;w0X9jJL-5$N3JT4hg5ju}JfBZ{T6m zn7b*Uzc}HX+>;ckL&r&<8O#yaPHbkNBzYZbNiWtElEk;`hc*So`c)Dq)vTiQiG3dC z!Q$)XuKRsk)U;#l36K_@a{1h;164c0D^CU5RAEnFsyKpH8`n;9rfH{c;T+OsnABco zTT+IyBE=lPbNq_bHMwr2=ojQ|pkZm?v2|WClzZQNlz3lSusv@x!?4};o3ywS!a zWlT**!Qy>82F@M>>K zoYD9ltxzp=ZwM0zrZ}5y{keOcru=b~b@F!39Oz%$ zrwpc=eWAeXVu9CtbGAr>tKGrPfMnw+Ks~8)?f5kOIE7-t0tFRqKBRAZu@XLxBOX;N7lQFSb2*!!_}3&(EkFe@mfkm30g-7q*Duscrg@QpWdK12O&C=u?h31kaZ(Z_z#eAVujVfhHH^}2k znMZE%UOuO@a9RWqv22d+z-s(fa79p=JyrG0#7 zz5Zh7jae`Np0Uxah-%&vxMP_6R}#NBxy#N%1U3uQnh&+8y}pyic^6g(9SAtDCCpaO$rvL;iRm~&Tu#Wgyo->rTNr;UE4kV;QPtDOMf zsXh)qTa!U6{jH7P@-pNFD!sYY2NHF4SbZ3eeb7VwyKKOOY3#!^eQ3PUAz4Rq#q(Xj z3oe~PH4rzN02mb-KG4b-BMjN?G9fLL6@_QpD2B7$>YIIOS5KN2&stDQuo3#t@IoGm zFk_AuJsPta+e7NH`7 zWGc*%TOTiUOMv}AZZj*`OIGXzV_1OZW+a>G0nBCxV?Pm$y|jS|<-FAxVs0B=lo9f| z0wmg7LKE(dIc677r$a&@u-i{DSEgKh(I1UB&CVsFb-~eB2(k_{WH4r)G&SR#qRZ1y z+~9L6Vf8d40U^vG0O>Bd_-|+AKRwhxh&NK>bE`C++8GMBatqdSd%_HjIJs z^6CMLTkwG~TF6iY7;{il=AjmZpf8@Rlt4HuU_4{AXxJ6! zU;!FlfICezyFur0x`*4Yl8QbfI%!?gfJx919&JV_Jz?+T&*H_J;Dt$uTwzD* zClC@=l4OR9FmOSpQf)#>;=mMuoxWlViVjRKi_sg9w#veOjK#*&)9PHYKb1bn{S9rSgYy!PdnS<& z`m-f3I>L~?89r~N*I~3~!767_PeGc>)G!|zHMXal9cUI3qu|+EaP97Hq80cR-LhS? za#>yRqCsoOI@P$tjIq+JL~ywE6uHFG+5}6s+_AYEUTPCMHYgSd4R#gwLOMrX7ir78 z7OV}A@@0)yy-`sou#csXS9XUHTiznv>#H+q=9zLBwo%wILkL z8{NeW<ZQfJJcs2&PHsWnE4x6v<6jWs^dHfLNn%=jP0(VP~Q+eXvU zg8S3(!mn)aX@NAyW)@Yu(eN+=vT=sb1lO>oqO0-F!-=ZYjMb)h-eo@u`2>PXe?DvE zRwRRh-7JI3W;@o_MIR&e>t;*Th*>T@E(IA7YMWh?5wac@K~~~YHGphc?uBv*ki(rf zlT*2?>o9dIP1d^Hu>7yH^>V}0nKUbR%`NFPo4@M4&0o$o<%H_*K^K!Qh#@?cSaH;t z&*fcS)YY`|F3(_km2dNm%ZR7qA zsF~*p(Yv%}*t#f>d+FYq4=MLi!XDW)GC_(0U)vjl>_hew3w$4!ON|A`@)sxUvbB8$ zxsahTuOx;rf8mj@AX~LBo3*(&(iKIpH;c`ulr!|&)BPX9I72dH#0{j{@Jw{G00?A{w9Z?iO;0# zXZkBtiaUwPmGb*TXDJm&m1a0~!1MS8+PE6Hj~wtg98!k-xY^=%EE}KcQ-fY!alD^d zd?rK8;xp}(8;d0HZEHZx;xp+%swzMAH}79*qg~FEGH0lJ4_fh=tV8BfwSuBCx7$dN zy!NDDt;a|UE8B|CBtWhBOlrOmsojdt)GMq;o$m8;uo9));xnmCSXHj4D24!o9g8j;-4?7?75Y&vXU#W{U6Oe-R`=FiZ2hA6OF8W#Tiv{_EnRqQKb- ziB-TJEv3vjRP24pBkIb96pitjyqbIli<=#S{V*qUBVQ41@on)&dLmHPq8Ojav%D>m zV|*q7#q%sUV5rcRY<#AT-jw~&l$l-ZrA>KI8n<-#Kg4I!BX|tyCvCB3)0qBo1(*mMbdkIjpy-9OlkWWfA2^KYQffV%aY6Nh=psSCh(|CyLkd)~J|OEL3Hp zaS6~>;nK9r^&!=)=zm)W-s)B~;x{QN6~F1@AM*11t-SuX5KGT>_@YH7M&A!j%QqS! zKxe^}4qQknKF7lU`eQ$E1&`{)OmTDa^q!DS7@LsRcx?t)jSA(8GNDuWBnfxzcxM*t z|B8Syxvu|Ph+DQ1(g)e6!C(zJxoZz-2T(csB(qRglvXI+U%24JoeBl^R1IlF64zh& zKSWs)&QR8(EU6b^BC?9I^wUH3UG2#3&^Q`hL|N^do{l*1ZzT|R+Z&!CuHwHVpzB32 zrhUgCL)ZThs#pCKQFV?tE)mZXcZdJ&)#e8qK;D^{RcMXZlusM@=Z4R-H5fAy;qho5 zrJQ+hJAsKuQ)3HNHhE_7RG|5CZU-$cNQ$RhK`RiY6f)8Ne1n`8U_{9hBtp{Y7Nh5M z$R3a@Zs5!_2s5$2q*|11=-Xey*dLlhr^kU+n5o{#DTs-HV5L$c)pritx2uA6kYsx0 z$roC(1TmEr{KOwuxC3CDb6v77nzWswQd3*Ng={h6)R04W^pnKGv9zbXk6)>JRr@Iw z$5U@vx31#u_BJ3p6GP3!SU7V$)2qQ>@qV|3uo{$IST)uqV@#BnvhgqDg6vhCIQ4 zDwfSeF>k)&+sTUzlHwH$l=B#J&4N8WCQip8m$Gc-%L9+aKsg53AX%;6feN6KmZh)L$5Z;m9i$uuDN=Que{-}n~U z1u=YT2AVxr?NCUzOMCAM@5uFp?5h^l>ItRzwOYM;*BrCZCeutXFQB%8?ykNqfL}bz ze0ZlQB>OX=O@5Z1g*QT*Jj>sxdBhfJH)=vwGm|~!7$;4;qv9mPI6*7&>vkvUWqkEo zm>%bts+K#@$$xA@BF?<4sNbU({zTF?54a;}OI?KIxa#ScBuh(+eQEB=gz}vW?SW^`Am#-)7l-9pW9)`J|xei(fgF2XK1~JE`>5=}zru~UGn)pzr59jZ@==9-qiL+7k z8W{)~el5`=Oy!DeJW*Ar8YlUS2EmSWMxF?=C%MU(y>0#VAgB_X8y}6!7~J~DLCc-y zu2YCA-YD^Z@9MR9FL&L~J0|08qvNz%Q`mc)6W9$f9Mqq0oyZPlQW%4Q{h75Ud@n|{ z&qKsfn%k!H5E697Ru{1Bd6Z`g*z*+6JxjL0IB@a%2+;|JmqLfEEIK44=;%43qvz>> z&Q#m+p~(dm@X7ae30rj_YtvMZtXE!YtCw=dth5-j2X-5x_v=pHm6RrQ9i1|FoETrhGY3S^~{)^fY^ zAp6HpT7K|(GvusZ@tRh8z;7txcinG?MnVQy7~+F+E~S)uV_tEw!pNB|B-Ej48+P@y zCqM$bHHAHx)gq^Hib)5=9V+$%l7US<8)jwXm$+{&-&%@6B6H*KVuMPPjvvE0Zfj0VOqecAB38WGp^ zoSQU|+=Km)jZ6!DWv&TqYo9k%BT68H@!Xpl<@>3xTc3eF1+cWXx9P6;D441CO<{`d zKh30kiH2*({&9NJe&1-vp}bh`nXZ@IMpDd3m_zCi^-Xc$aY&6w8%bTRv3LrpEk}r_ zpao2%(3(50XW&RmEv@G4R*B`~DO58HXqCcMz>e}uGch;?aqkGifp znWxdzH(}j6Uj9WdX4gLwFfPZ&fxfdbFPn5Ljv$Yk1~O;Q6hC0UoCzG&l3sj8TghfJ zK3DYPFJ9e>7t-y9w+AHHX#oj119PdcQ=-JLEpG-&_S*8ff{Qs+Khp2@ArgCOJLpQ6 z3m;IdxYx56Pd?U|tGp>R>vJMp*7YBo8M4~big2Mw0dXP)4I-@J$GTSb6iwf3@HVS| zwb$QB=^!NY_GrTMDz4yKTdhvV+}7t;_&gqN5;2HeppC;zU&Gc`l7HDN;okXeucW@A zUCwvM9;Esd!{F`96i#EI*6G&r%GL6L(0a- zac(6U9FpIYau1N9UrDr zXoq=XAth+h!_T=dAg|(96$-w&Oh5I3#h9Dio|Z*CB9^%OwjQKo>|Q6E+FxX+AQ zbh}WYN0Lq9A{4n$*RelpGbWOtj}ho-H71#}0JFs67A``R>kS!^P+E;+O$T7&>2F)z zPQpb9d{*wxiyeaxE7eTyT3Vaj^>Y0t!x>B=7Sutz;g^!_F)JnJYBIN2XA)^R5QPJZ z06Z3Not1(gXZUgdRaYv4doBhS@2mxZP-BoJrX{rE&PE`shw-+jS{_Qmn8!m&=+Oh>gisPHr8Y4f7^k?mYG6ip9_>kx&AVT% zLP=PORwxO3J(4MryZT4iamxL7W&%6x*e^XvhNg7{zfRj*VKa;GMyFe5n2vvP@mnts zED=xQ9K6ml#XtQ0SiHZUX?9UOiPrZ&bEZ zr)RglEo)c8B8*I#Pit~^O**B?1;|yP@vj3eWSv?nv;+)_=hq|ksa{j5WcKvX5>q|k z+4!F3aj+}`UKzJjRuwd#- zMy=`p7=`ANa1^z&1+?>U6n`+*|FN-wKTtS|?}^+LY{h?|`KSHV2*r;J5t1l=4sjrG zI1QuKQ8?}X0_$}?_lX1fk?$9B>$D}f>IK3%6NVfL4RP&P$*z#5kQhp0VvJH?)YL&; zaYe&zHKUvVo^87f(~D1fxs6Ut9@lQ9%PP8tK15p+$u&VTsxh9#ttd3t{+h`W6mG3r ziYEb=v01krAkW#!r%Ws08^0e*B<$Ef1cK2^HGIzish*A}VV;|O4z&K=tu~3~;pmOD zv%pSC^w9gc;a#}%J~VF{xE1LRNeiu{9wost|3_m;5G-O;(}PS`swaT$6=7R|=9q5B)kNqSHQjNoa;=80X<`ftAJ)c&JlDsZkU4 z&wgfc9-3Q2y;pDNg0QHbPm#%kJTy0kGTXPyyiJ+IMR)jV#a`f~uPq+v@S*%qKmNi) z|0m-wjB8}$k|()d8mO%!?htmB3sHqNGz>s8@OHK6GE(N_l^_MG+BN;!6{qqrsGIxs zC36TT^Qf*!=tCF+{00Cw^~DRloS~PVwi0KhOT5YPK*r{gx2TD_Y0X~5Rlv}sGSYYX zALTATlKHO9G~svo^`u*?AHumrvqBvSAOQ_XJF2f0vUhcL3D-=HNGzN-?MAvw6vJS` zM41;F2O`tBb~Y7u^UT?lJ&*Fd+Zf%W*zDweH1&=F+ROuVQ}o_Vz~tOWmrJ-&<`}!r zl~LZ6{nq}O)$Qv9#ad?_dJQjtMa?2d@_i>euPf-VxsA1JV|GH&_%jpEHU>74H(J|C z1G!3woebRAXs+_RF41YYmG)bnHk3}2_a*S!#cIY9uP`~fu&)L#)-dV3p}W;UlD3Mp zrmT$Omz2mr&?m80ElYL@8y1m20c$C|d36!VQovUP^rkJv1_~<5xUpSo?Cy3o7AQva zp;)4wv;%^QB}ZeaKU?J(!Q@kvGUpv$1<#HjcZabY$J3*>$;hy~VQF~b*;mES%siWB zHS96x@on+rGTcVgW^jT|i#N%-JF@gbrK&Tbb0JG_N)>UBY7He+k~?Qaj{;w>mHjKidbbX*uFMvQ5Z zhXpJyj2`MgYu6(z=tTCGxd3zmPUuYAZ`To|X{2`;wU==b+N#Urgo zsc&K~9T!Gtr>?fV!@*mpCklJ>qBMU}bTHfK01p65=Wa^{n)#qNsvVuS;yw1HFh6=)S1u~6{ycSn zwXPYzu;*aPgHuF;D&6&>q(0}RBnTp^WF%UFO-YQo$BSz72?ASL^gO{ zrXn&bc5zW;gH52>3Tq&ZEE0xV+9ATNAr_EiUCiv$#L%VXRzfJ21T-Mj9i}c{yNo{q zM~Ks6G=oqkhB6?-GW}+1%nWf1M1{cYhLBr^6WRzLR>Y<7X^Uf!8~L2`sR_vD`{A~X zbR2xEQW(88)=4}A!<%~u!U}e)_TT(#m>GE@YZ)KX?!VRQv~e&X6Cr)cn8#Gejhvjq zrLn?aGU()rkJxBZHwH8EBg_z-To>;*I&G5cT+EDl7#- ziEZ;RoSudsTW~DOfCF}jCxVex4GYrn^PL^jWf&^SRR8Rl1tT__==}< zd$I-9K9dXge9X?j(wStKF$x2_VrAH=-aNmort_oyUj=|>+iYXZd3hEj3M5RA^?y}I zdw*m@VwNc-6UJB{%d=PmD#{pX@3*!GIQUz2Y#FZRm9(X_!i*2;GQF|P2}3Z0l_6ys zC>sq5K0ESGMbhQ-YO49skS*<%V$zbq&E0!)#Vw3jLrZ>aBML`ex8-YjVSma!x>V_ zL)-{c_H0u|HR48mt~~<8b3-j4*KKd_-@0n~TPs5hNk=9g#_%EZ z)a1M;-P+I10(y8qflAZ+)8Rus%ap(Cf5kJ^0qpwvK$rXGBP>VMY>HkPe)cxYGQ1i7 zMa=qB(0hBd;NP-xuu!<78>=^bW9RiAy(#6j@5=D5H^X|bx?QXfD`aBZo}yo z7doOE6J6Bc4sVG@D<{1Fo%FagTBB_{EU81Cwpi&Le`Uwt`DF?Eg9AXb_a>4;A`j^s-NbquzT0dB#EzUq%6 zpsgn)huiR4bi_H`hD_v~NfN1JvXUwjyz+0T*IMcyhbSj>^sv+9bK4Xw!`z#0a+X?n zwX;OHT9+$6^c?Hs_*k9;*@1=8NbQ9&8)2=qUve^l6wa6BcY);2nkBufo5#98_VB3H zn{}?25n8ZE_0Q_`k!yCM^7=LU5V{amzbavu;Q+%o&&m$7q>YBdEU}3$4;f5ZSHw1z zHLN}LJ*$n`AdsNz&!*N4QK2mVcki_P32vW}ch6fz%h_9)Pg_46 z0Cu+kZf*l8ADAiPJ)_qEC&y$U8K~)#8FYLUjKv8@u<_e9rhnQRTIl86RHOFIPAs)B9J(_ zgJ75lsf;5uTd@n(blTqHxM&dF4#6z&oi7Ml;o*fBY;XBLcSf3|VW4lxGUDa5Rm-km z2|QDj_w+;%G_`k{()uf$!XOO70@pYj`L>c0N|&Y=Swpn&A~6uN2f7dpxZtYrwLdRo zM^I|c3@rvGaOq-_b|FA?(C$P{gEG>$K$)Ca8YAnVY&tqth!Y~!l+h;1*X(Fa2s@XZ zhFT0ZYtqzOj-IgY0epny>lHl?Prg1CNsw7g7Xy*x8?r5}-|1WOps$X8K(Lyl zoUB7`VNebCq;%cjMbB^34Q@Y9OJorpP*wh#_qW&$^W zPrR4#eArkjt_EPsg}C9LFSM=dx#fy7<++z?P1ixn75RNGk-^OFAjjEl)Y&ZrWgRk6 zoy4z&XGeWJExre1>H1RegiR4=KLS*rL9vJ#f{s6))YbCfe0f{Fbl0gSYX7Qqf4QPZ z9Zz=!2hBvU`aPtI4M{owAL*5K4((wT_ibO=!2+pOLDoj~<|poLGw%?bP$dTxg6oz> z!wN?WPN2u?kO&j$*m0bY|^%htNGIa+2PZ0M=Qp5sNG4#eI2snOZ5Y*7p zq}^=*iVg>Uu6TlfQ7wj7_FQR0Av-SRv(#>kYe-FYS_z{P1whzG<-m`gq?awFDSirF zG82`={m9GfSGQ{1*s9SZF`E5U`tlMvLiS4|RAe2Fbzw$6OAo$V${V}4ly-&3lX$$u zXt0qD&aNx`v6sgof9&INlt)begkG~W3o%>XrBN(BRJc1eUc>@ai-JOE7XIH-DmwH) z%3Y#Zpv&)kZh=zf_^vQ4=JxLYTZDU^+8)3sM%wwqy5cK=CB1ybDx>!V)H~M}?ehA( zYe#tjN9!bKbI2)pPQi1g$mxROR?tVM_um*D)WTK)4T+Wa0>^rR03q2mZrx}SW={>w z^rvw${k7ZQO@DO=fAZ(HX<`poOY-<0ZW@a({8=ax^dt#Esm2RYacX&P;O%qTy<|*0UBSYHg!Y-V8eLo-jFKDcO(}MN8vKmkOUE&a)@3gDGKe z;)}>ITdpOeb1FBc*-NOw$$_%?`cIiXW$CSb2prGfWq^~6HDq|(Ru1tU%Gqln$=ziG zYyllsVh&BzuICM#;IO)A*ouyO_Q}@euL~k%vLSHHPn;%@vP*Lxhod zCsn7$@@sH6{Utp*Cuswi?2f*>w$H1w@Zdgn$UKpm(MXeSuOdu{VAIgK^_BO|@oWC&9(1fw-kDIY(rapp$ zL3|ZYi?<%EzlGx(nE`_aFnDDs!s20gZ7J>00@zB$m6F|mX@~Df9lCEbX>iAEt1Lb1 zwVoxWFvG;pidDAeWhZ9L${}k8-{P|`5e7pr4m>qz8;^ss_Nkq!9ZafjoC3#r=sj*3 zGWRplGGufAARWey{jbyi-N7g2N-5D;op)U!Jp;{Fzj%}=z5ben zqHRYDgbjzP;nvfl`xu=6gzs$9pUu|1|!N zrOeQ$U(WW%r~N;^e`SXU9}^qY=?eS>ePNn`+0t4*grFvyA0SaRSGH;PCilX*AeHjVb0GzXQ`cF>s637k+Jc8|T5#Dv zSGupf=~1-v@?gDikEV?NHdOlQ=(egnF>o#1z=T|1n%)4%)^{|7r-Y4I_hHEuxrpM4 zI9DpHvemYho^^SKB}MPn`C*hNGyPiNZEVYkcstUyvt5IlUj<-n|1S=0AlIRoj=&e% z1i`r~k#wrCH})lNqW3(3{MMgslx!`ZO$a<23CyUb20)!+_{9nXjCrTe)pYk5=iJHh ze6%ZJrhp37;`r|Q&XJ5S^`dUD#QE(KyuC*gdiD2S>5N9b46DK|!Aw{<~xM z4pHW7KRjhNecv~%v?+P92>zuy7m#wE$Bm!Kh-k}chyH%hVOfZ^WZSQ z0=v4G%9S5ZcjF8t%0ecET!-OuWLV$Eo@ciTl_Y10|Fb2Za{i_#mqZc6&3MFA-f+%o*Vr%tK5 zuLAKRP0ZbSN|kx05R?-XI8M2yunkNq{^Oko1)5*Y#TNkzn@tqg0TY5usV%}vs_ZQx zyrjx<)R`?C@j?dL%&+S~_Of#!k}cp`gMHJC!hxFS^Vj8T34Tr(_X)GMwsWqlcYz(| zmnkv_6l4+Fm2W0^w`ZuQkdmeT{XER+0V?lD^T5pa2ltLVlv}qCS~O*4K~%y+)v@Dx zsu)|6=mZ~9R(q!LyfM{`kJa9%$okq3haZ1R zOHv*3`NFhFAHF!~XQCP0nm7+Ufm%SQg6Fa%7@6lw{kSBtahWH@@;qjrmJ9~wx*WRR}fyB#=g8KY4qabR}MryNFGipz((UF73PSb3`(H_sSas$)8zDfOh zKUXWF)@xCd6xolFl2a%iu2YQ6tgnQ>xgfThG9fv|gN@}SNXFJo5%e(r6L5D_WTu+B zJu+d#JUMn;C)f^5jB53qXdlW65*Ks2n$_Z_W;J*If>PCFk*Y>jE0XrKs+A5iEqDDW zBv6fVXK7$(xv;7b5kc=*@Gq8(10$Qu4yK8Xroy-Zl&y28$=YhZb8*J_b zbAYOgB_*Z{)Xae!(WU9^ZcHJ(jk~uq;}3o$FGy-KLu*WxWP5w@;{8uw)CZ!jZ5_2f zKGwuC_Lx1^n!gG{EF+I4f^aonn6{O-h)QJD%A0V~8ib8e90q62L^NA}e%s#h)aG-* z$bssCdmeuhThS(*gzY6`^m;OBe6O^$yzh$m3%{)0%@k`>Vmkbe5BattYRC}It^6A2 zkygKz^g+B%eJhn-50P&wm#{~oi7PSR1K^HmHZ*<4<)Nw=Gcb4O>EPCIQz_p~dq=Po z)&WpQ6J>}O$qyU9^!|=ufwuQC6P3{<+h+n zZ3`O^QNE7)|5{j7|2KPY17GP?)&C|#3MouE z0jh)-X{x-WP;uZQPPK)TItR~41JmNjsEC#7IEd(oleYYw%$(^Y_B?Z%HUia%AVCU5 ztq_owOr>p7$H}4pQchtk5vrVCYdxoDgowQ~RHXO&TWdcr=Ome#0{7nky`OtNpX7O- z{j&DjYp=cb+H0@9cQ`=VZb@C;43+K2HMevCa{@5(DMseX@TV@KS2oT@I!KP(Wv4H* zNeYpAj8Ta8*(QRNME9USZWF4|BgoUt=pU3aZ-UWtfpV})zXu#`(i%C_0ybEH1T1Tc zg@9L>$@A?_TauLk>EcNX~~%4dG?k1cZcX&8(^F zAFFu*xnmGFwy(*L{5a*)Md&8+bmhrx$jPWaBhLUYC(G%cwl0~2DZNcMuol8<)1lvs znTC&Nnn#typzR~Q2s+59Uv2Fqyh^2vs~TVWk05l+PnK{=8_02c683+-4)>~DpMri-z!9>+2 z3z(R7=+`c9jpe%_+_DoYOHFSSG3hVp6aph;Ha>NYX_LX{hQyhvVll{BGjqi9R0nk# z(8c_2)tkBHuJF7xJa>fWw(u;5XFfbPhv%m791PEa@HA|JYn>&TyQV_FXjSYD3Scr! z#gac`ZwUVP$RqSLyaVy{yFwn`3>Ljsn72?EyE96Hgu!B?>>HM8vvmnbs<)6zd&~@~ z7MJuYIZ*72N3b>fpY%;jn(u}8bL0O`R#zwY_S&<1A7iztm)FlfzZ=CCiRc;nye_$` zwUkU6D8lxr6iN1VabSzlSNNodrnUA9fUL~k6F~r#-ey?x8mgl})QYyqLOv47zKB{h zGVh0S4r5>}R2zL^5*7^Rb~+X{z7H|ida>lWI=Z-o%>dSjf@Six;o?6xJ|Yo*@JQN? zLjSom(|B2v#1BevaJoR zU~+jtV^z3?qC`xGJz^lVPdYL)YIxgBkT~V8z}j-I9eKM2XFHL^q77^sJw6eJKCKnV z?6P%L@{B(p-gVi$BOQ6IO3Uq4VjxzPOqkLW+vG#cZ$V#i9`O2nHLgz%zg*vC!vMitOTh6Es#9IXw_sjX<7Sp#|_K%?z5TeSQ!vjtNFKxZ2>9YEJ; z^v?B}m_EsP78?8B@0B=cW^AZ;D1kT-air!eyha=34*J&JP$t?=CqW&Jsq8ee+@(Voveco^LGl}n}Omy;pJ|k}_pI+NVrpBM$9fa6~_DmV_M8!g`*4P)v2Sbu!DlSAm13<$D zRfPTE(rTkixGJ6 zSfRu(w6m~^gCX`whJ7)i=Yivs8gPWB)E;y?dSr3J&z_COmsJ!a8eTISY`4o9{$+b4 z;&mYb($L7zB{-gd*zGU*Q^=*EYMt|=I?mjn!#WBF5xV(iO5)x{L&2?Vefw}o zS?*ISaB(ydO4oXuHBeL6goJ}0U`220<* zY+zv^`nLHEE|V+`+lxwBWPWMQ%$4gcaW|ZI%|Cb%9#VOaf9lkiYyQ5iaM4n~RKl)R z_#}ahhbxus4;LqHG63?pxk=oCmd;o?q1VPem>ry$=#bi;Ai8>hq~dk&R=v|ByvMBQ zWPYw;?|T|gzkta&GoC&{#@lo}eZXVm@$@Ftr_6YIR98Rx5y=`}*v5e~(w(6v136{arj8d;^1lD-MQBq>UxTb|E`PJpde$=Fx z7E+8MhUZNx-`)5>?t-ms9b~B2KuF11e~j{!(k)oNYFF?uWZq{J-}{>3rlM7al~ou@ zKH0(3Cf;^NZ8SVf&}Z}u`R@?_XyN0W zw#H#7BTqV1cmxqSM07)%6MK6@yK#63A83p)y)Q0yHZ%5FjL-8x?`pl;0Vqq7-=Jjx ztl|>@U?By-$Auo#i^6Q{oxIJ;T3kg!T$%Y85stIwr7^=SM9uSqJef9dexc^ec=_S| z+S9^#?V1ok zBUgEKs*yM;)ay{;<1`d2-p9;heyoL|xn{4hod#O8Qu~?QD>RUA2OF61eFW&vUHv3U zD)GkfF@wtls225V9^&>=zu&M@0Mo=v4h@@$@X{7cw{&Y2h~fWSpfIKC)5M;imq#B` zVE^gaz99C2M2a^HjB- z@fk96ca$xN%9$W{?Uaz0#OM%taL;G32)2IDtYF=jznDZY>n3BM)76D;^pGC>6#`$a|tMEqwi~i8Fulo<}Fne0g;7#%Now-xmj<%JyU3_xQB7 z#F8_g=kR&HL2I+&``Lk=$c5^RzX=Abfb{S&BO6r_F;_Jd1W`kA*r&DnlwM%Ii3eTR zn1(2^CYiCHwcp=iHlpA`K^e=%3l4AHxMAPLysv0S3`=bp{_u79Wt$D(_W4KN@Gl?! z(<4Zz?UThvz9y&Ng~qFk3y=0N-P*wRMqo_lK2UlEFj^NF@WZ3vq#u)r1?Wo=kri=E z!h+g#$b3;3o-0B5fU*l4cGL2Pwk(Nu%xZj0FKl0b4o_DR80&1(@P#9c+6Pw#_G@&b zUmuIg=aL(DYn9&IZ@j}wI)d+-J)0_pYnX}b!E%4i`25IbWho-gT0d=XhufvmQfp1Y zw&cqRouX|C5K9>fN@+GJXG87-P2oe5sx%AD#BFtsIcK9!HNeUw5y&Vf@$c!_rN|`jU%mfAA^@*Rrc_#MSA7qJZ=M!U16jNpO7Z>SyI<=yvqtY(i|U{^>e8&_ z!1&J?z0=bl5g_d?Gan9o9DkHXXm6SB+#lG+(E~?HR6kfDHDB2oVFmxTOlv!%!q-B} zwJ!ABV7MHyZMz30YOEW&2}IL%2a`O#RCA>gDV?oxaPsi0UFjV8K_O5nN$PkH zQ{KJe>jwTtcC~mTLd1nGrk;+NSJQ?WiA8lZST#(I#<$Y6Bv{o4PEcK~_2C$maDeab zE*`D{O243=Whl~18^+9DQ)#C_5p>v?BIi`ek9K}SirB@MMv)EVTuqU_RTSyKH%k$* zso1q+{mV2}qZZv_&lUDYXAUdznPuh0(zH|yeoC`gN^Da0m5&u!`zpp7tbJ{xnM1y1 zQ6LOM&$$IJ>BYi|MfoNZGv{agZ{AQmaNKl~XcSqEM^D6xZt4uZTs*v+bC3+c#P+)a z+@EI6QEaM}M)maHF;lbHR^kS()I>2W(Aw?E5-0q%r9jdV$mFh6qA(7F0M@KAC{v(* zLjbavY_x>M!{xR>(&PMJl3~L-VAV!XWP#>-Cx(SwYBR>j0^lx#RlTrKb5k2|1`q(w z8FC%<^buo~z@H9PyDF*LwB<(Zw^z*)77zdVT2&iguWBcNb;?x>z`bfShFqhP-%C9k z#ajjwbTprA9J=K6+|3a$^xYao?r0QPKiU~B z?2Ly0h~bBvpH;%Gb1_*j>J~LXHGev&&TokpNy1M4GuFu$S24|}DyI4V0Snq%<;8SM z^F5_4-}~G1+4*X>G~%hSxwu!e_4;f!9Iq~|Lre;vOwqd9tFvg`Zm?&2C>r6NEqWYwC730jRIj6J0ZKpklnBqX|g;K;c2V7IpM!UDY@*fQa0?@eV z_q6)w*f{6OL?-nrv}jZeo*&_HcFeBAdBJxz$9KYRbxC6hqYhM?oBmUh)@yPEB&ea9ci z*lr2_rT8NNF6n0YBVf?l*G)AYb?~F|8z?q6pf{>@! z6c)?r#!vorvMrBExpb%8_-2$ViRb_}nE-Txopi8e2g^fX%YdD1{L76A*xnfI{YW%N zSQH4r2dJuknH5vVxn#g^a^oy$+bIxMgsB^pQfiE*r3}WU{63{P_1T)Q7h1Sa`}CR0 zB!fqo%9!45W{b97zOFRsh4|o|aLrtc)kS>2DR6i`68FuyjddP7y?=oMQ95+tE@Sq) z2u8 zZqN_A2jb&6GWNu9f2GFvQ|gcAUt_go8T`F?rG_pV?zypzvENlMMX_<|yv|J5?QT^h z-@&@X7?zmk$|=~pt6Ab7;TX~9zvCrxGCx^yONWf9E)qe zIKd_WDuLg-NrL1G(EuT5C1yaHl5_$yDRnzk_&V!yr;yNKyMl~1XhU>8V}FZVgJkH> z0~yp;9SeKTGWnM*q4t=y9SLe{Bs7*dO$1zOZz5VQdpBL}WOvhPoyxFnNl3#ojyKN+ z-;FH(oL3IgaWyy(O2Z-DhbH2t??k4vbc&VrmSi%L_!bCT{z~ozC;i+$O~-e6jz&Wl z?^PYf|NS&$8oIGt;i#{vF`u~6%;xjn=5qj%9@L&@LTRicno!c7r1~NA_@X6QR3^0B z_NWjl&o9==Un)SOXO?Vgkynz0LRp`S;L+%TE1DF|%F5B${3^{`VBZmA;FYogf zs(rYt+`__YAvjKla#0P6eT#)MdGO&WNb^vinIy?nKzNIxLZ~z_7HQq{BUx##!;hQ zHs3Db;+o_Sv!!?qVtyO?OYzdUmX1lL#b=hH?F-1_5z4U6Xsk#`mV>NSK^PuUjdf(c zRz}HfB?NiGS0ylvw6TYpOfZd$-3pVL~$A5O+RIB6DpiW zXo$;xI5L|Gl=ic#RjjHK4*ynS>ZfW>Y*Tg(5Ps@+xROc3#B-oZQL*hKMYxM8c(;Uf z=IYXs&cXr+&X*J13lvCUXc^1$wtp;nkxr<8IfmVK=gop76}03nQ>Zh%#T`sK;iMuz8Xdy{nF ziJstn@%dDG&uc5=da5t}Sp3>;x16aj&Zga}H;Y{JCN*~k+vW`fG(XT0N(ykv6RMw1 zprlHBB=g{3)pRw#wK0A!b!~z{}?70q+z&!QFNLJbEXSmvgNWsMr><7526BDKSX{e`;H2ep7 zt5Y0(BpLE~r>-F=F3qnLmP%lyktQx})Xr#=8;9!yNSy zY+LW6!**FZ#~$Kju~)Vt2q^dj*#8j_*1*2(*q0k;2kcSvrw#kJfW4{jH@vJ0Ax3`+ z0CnSZ*>UPVI}t^D!Jnu8KmrRTv+LCtD=^v?iz+GX~bfX%T>=?_vsC#w#sO=h1gU}*%tOG5v0iq|dEqG?F zEsqWmwJda$nH$CY=;jB+zP64o^AcSF5fK|`WB+5Fg`k4X2f-Ms5x!&QGSk6*&3CEJ zV6vEht}3Wk=(kz#!K8UMVPqysmiM8&e_HG5yJ$B=lOPERDdG&IZ!;tA5Nv)fW9tTP z_5M`Z7IWk3GGV5Xu}{!`Y5kJ=Wa>)KP3jISb5fljpVm|(hHBY9FYJLbJ9P+Yt7&EH zHr8ERI@M|EWXWvT6J7ba2kY##?Ar4aWU5&vPG_T|(fzrdaO8fwL>P~krh z4S&9TXYU=BbmVyS&GMO>c*lC#K_Dsl>bNMs(o+Gee)~$JjN9W69A6eaBl@7`^{`AZ zNh$}ogDqLCY(g*jfekc^1dCdSv~F92bn4|*qHGtHU9BS*rSuNitZ9)G4{tTi&iv+0 zGn3u&dVkY;quy}ERHDW^r?Qqt4XC;CgDkvzVGNA6m`qtoD|D8nIf@$_H`$xY@;8;G zH_Eb!%o%A}sApc*Gn2B+Em`$8OCU833)xKGdfJW!whl8Z>OmPX&v2`rvsN+UJ6=7$s^a4BSNSYEaR80I@tf7BGYx7SM5^6Y5HpAtO?4*>j`0P?R8+6 z8nAfcYF|D!KgKjCLg(IIF8}O+W2U9~;yRdBwwEe5sov2yi?=83m;3l5y1%UQbh~$X zVuux`O0EwI#7+$B5-^7seKJ`IFztq1>-P6H3K`59kA};Yt^Eh@@75{uI)9~XTGR$b zAkkXCsh~sVeOErT_3X{n5ivF)XP@6A>rNYKD%X1zZnBxI2-Rs@Xxtz*RO@3}HEJ)* z54%?HH-1!nrvQh~Om17#ioLhFtzrdqk<>+6LUKlfYjIHTrfHx~A+LXwdRsJx^#gtr zbfewD> z7$Q*b7~m5(hh-32Ydt-l=)EJI>z{PqMx&l^8i->4YzNmsqSc`!EMOBCJ!^a~`P7St zUc*H1N7tI@;j-{~Pi5jU2G$5b1&lw73-1Bil((TG^Tvdl3IUB7n96Jm9F_gDGv(fA z+7_VB;C(Mv(Nc-31~(ddt^xuMj-Sl!VRl1y6d0>~O~h#aG;Ouclw~i&L);$cr0vlg zX52eso(jWlIwzb516af6idECr^3v8WBbX?auN3^D`Os0v{?2JbfXxT1HXjU>o(nbM zDR?2rA9@Z&7A;US$Ux0bFr%VSXUctAToG<(lnm5x6~dXTeP{N4k`ISP_jac}cuP0eJP(^)wx zqITXwZv2x3hQ-}x=%}E7V}kxP<>S(xL0{j#=wWqXg&@>LE@f7ismEUzYs{p2)MYxZ zOLleH>hg=K%UfJR8D;9~V!5%`6J(nPHjJ>CFKhO{SdH6S zjrksHOg1BFYmXZ9%_6{kj;08}?xRo-weVuW>k&2}Wa|-D5bV)b8(&+Tc0V4_KclO&HT}NJQ?6iv3JMk?ZnI1iBUgk8V3z zA4&ap{75o5nsd9dx(KM;Ql!1~OV91nXv!b;_K~z6f6EKwzVy&qQ3Zp|GE8mOo@JOH z?q7B@^9s2K5yIJ((VCrbnpqju{e?lUR@0Tyc?!fgWdLycnR0xzvH1_tPs95E^R(ap zGtVQ^+_Tv8;RAs*Q0s{Qp?o$ni;c~bBt0#7Nipr(oW|l$oG8y6qY!3FO?p4&n@{## z3K-S0mvGHxlBP*Uy2>_IQl+!|!{f0W0Om1wpI+1))V9`qzYFIYBkuVd z_Pl^Nd;QKHc@Ob=HlZ4l?e#mkaY=4{COGHD&ksSs%m*f2;R&e<4b@+4#H1iy_!leJ zo1Xft0brnD4sGMxs$_KM(j9519$-nVA(pHmR2w=)Djuvhh&uJB@t3$b#Dd(ub?pSi z2)!Z!7&a_u+?ng3*T$4yo_HWo**L@3y<@1rJb_iLLimhX zThD`tEz<4(-*}555XzP!$tgBka5V7Ek-5IGR*Q89#G~T2=6fAzH7E|1VfBOk#SD}T z9#uwQ^Hbv%^mFb62cY{o+=bc34u{Tye*)d6d@(j@W z2R?EC1>+wSl|1n{%w|VAJCriH<6H^wpOCG(bw28kUJ{AACs(l&%#5U>LV}L2;TKx!sswtYVd z>R#;a{w7H4;4g6`jc!H`}od8`+eI{cN}<_5!!wxkwU`oFhj%@AB>X*u$(Xd z-M35bs%IE#ZS{XUTWu($t@RmCv!S>>ZIHxxdq}5ox+gc*pQa%sRNRc4x$$q?c$`Aj zluP4a2no)yxv^u}bcFtQ0E5kR(Qeoli?<|bXo`(sALdxAD82uzilsM(RYL#t_JbvF z4bhu|E6My$GjUSh>FR;Af+Ir<$=~h*3@3WI+e(QKzmD~L_uI0#YCn-&aWeWyHl@E`0 zRMSIOS5phZjjtcHYUh|&J(+3}-)kNho`+~%!UHRt+_5@wLJw-r zm{^NjC7Yvvjm9E}4(iE5@|L3qR<3WWUEHKl;3ki_d|UCHZ=_%3xYe*bhmC!@Xczo- z=vU+F{YD2r04&?w6dZRQ4II|_O?7h;v}+Q9Ea4H0%iL9azYRfxVAKeVX$sm%X_aPZ z(~(#1L#)MCt^-Fjx`b8eFy73HXy32#rV(#@bIn?tjRWj7nQXKdgZkdRTu>mjV1*fyFrB->Y#N#)&2)@F z1Sn9BTH4jGq#V+TR=nvn|12keRgyj0LV zT6w1|Q;F)KVLn$6|FYmLw^JfZDZtPi} zcs3={lPw<7w9t%{GR>7F8rjhLmjIF~LmwZK_VZ!o&^K+SsWP|mUJj6y*gRu>nNz^G z5ma{Vuhe=~lFsvc0?#j49r+!6nxAv_E``pVWzYqnN!e@mX`WZ2jLAULZ;7U{A8SGs z5y+_@FPH{L+JJ7>TqUskX|52K%<9jweoSSg*xRC;$&TG787ZH6*@YAXErv_hqHc<^ zCE4~-U>jK)wSC4odY5>N%nsJVk0X>D%th9NZ?Lr4qP;$rM|vHCVgp_9uap1>IRVjy`v6X{~1*hv=V$k_G8IwEoomsA*Lk@#$u(m?GX*7DrZQvQati zUPnuZ$ik$iuyT}D4}O5u1KxEfK-R;=CMkcU=S6yr;%2l;Gf?%}V6#wM_!dWfH80?( zuU>9Wcmh44UL2o)XWY)0Sy{)eonPxOYoF*}s!w1l#_QsMA24awrVzut+IR8n zIr{{}HKLu2`q})c-UOp|u=xoYI%c5(5iko;P}bl-X&#aH22NEelW8ZqlFHl}9nfbx zfxVx^&F}rh=+}C>5+?0;T*b3sfoMart!lrFqFKprNo*Qxm91NB`9M(glLaR= zzUDrDPqDkE#?&cm!KCTd%e~K%>@~w6*Oo2G52&*79u3R)h6Hb1C&9i~wWR6QMG)WK zXdV8l*QR3I}gvgrdxF|)46xhJ z)@ihUBTf{@a8Y0EI~p=KsIs@Yco`CP;s)yW(@cDoA;u9kp^PIc`Tyeh?j#})^{r|9qbeuzLWNt=rY?Tke>>1hgm*tyN*p4 z6(K{(UisXB;IRCo_Hnbuyn1HyBW|5ggi?)eCsi$m6>snHRn;5cZWH)r*SM()k{e7} z0+?q)XEQ^2sQQdf_XOVI5@*S^=;c?&a`-4Y@laJzz3 ze6};i3v!TM+xTq{%;ayi(MH<~CA)8QTn?GGhh93UViBNd>MK-0Kbt(m;XyYEiUqzv zQqSI#oVyx4pja!F4hg6M2W4uI&W&Jn3_hr?W}=kL5FQ4R_r(QsGO#Hey`mJqu(u5| zgO@8kvC`;D&%8v29nlI1vp4PgSpm~@$JCEN2Ahfgf>^}OA=w1JEoQd(C&fpQIor!J zZ3%2k+WcIbQ&SeSsB2(12yE6j2EjF%O^LnA6a}jhDwMXT%aW5V(1@*`(E+F=K-MO1 zEoof|Q(dW+G0E5)f2C@f=Em{XWV!*UD8%Nr02_9jiR?7|(TaO@s)8bBgJp6ESH;lgu4fuOV+(~3p#DGDCw7zlWWpn`QMqs%i7|$V zZu-fnr=`jaF(D+qFkNXn=O_UjJLegc#ZEWjaGGU~jbZX&_h+#caOR>&Nom9F)4Kd6 z8lJi+`Yh?VrwuQ(N@1!P^*q1vM4Wue3+3V44-MZYpK!ZbHs0dNXJU8Jrp7{)B zk;MGGZSYXxc1VMru#Hj&kL=Fc8`}JbvZB=s$`@(KDIpg$&U9x>Sk7|or)v27`+Uf{ znXF~r`GyYoKV0*W3s({|WXd7pA3Z>Q!)Okrw? zmF^?Dk!fU9=@JPxz!$D9S?T4qj;BP#uTMKLrF&>yPe2kGWc{G5axzlI0u9NS8}^)| zBpGfn#b$<;t}i|+22gAee!Pm1=2mgdWiGxwAkgD<ZZ7TKa@$dxf8->B9oy-!XMwO zK*cb$EM>D;=Ms}uMybgtVn;&>4-Nc^7G4bK?)YtXP3b zcGFr7anZy<@11d=q_%qbsmOEJ-*zYB0k<=Whur)9-dl=TxkW-sbNhQ$!8;mzn_=$1 z2SvB8$mUkYr&es)iSgR^RtVNHWF3|^rC;%7A|)7a-K}ATSFzpdvZ-#i?5@>ie~u*0 ze{yLUQ^3e_t#pm=9R+HxdLM1vz==6-^Z4cO9qKI|6?;)*6;U6iPR*V*DmD?E$Ku+4 zpW8dB@ZZG59vM-E1IvA%OY7vW=l$C%LbT#`OgqTZo?k=DktuHcVFWi`AZeF?H*TR&2+99B``%+^WI- zz{9KH1~WHii>L@%HdujDaW@51EPzWN@2_iHFlv)c$h zn|{;LO-;H7>-jY$H75<&LAEEBwl-T>C27ga?O^4?yA7Yv#W>^cP~qKT zKx3XD0soxcpe6xxFGZG1mvdmM}BDJoSb_nLimlVcR{*SHyG z6QT1h^F5GBqrRH$%XPlheVnVkv-W4cYwdlxO7h+`I=`9THku$uwMKy8Y(4=NB}I&TRyfqw5Dv#&IK;{KBOKgp zg>aa2;V>7C|CY2Mi2&s-qcwW^?WZ6mX4llm%7xpp zla$Bb)`m6n{5>x?WPzQs;_~~GzWXHT(Uz!ky;VL{DbM+8lK9JQ)!*t3v%1HlaCQ|Z zE*L;tz|^`?IRGha&}meqCFl|BK`mmV}gJ5)UhAUh#IfNqOrkk1-JXIn#n z)Z_tVY{Wz_9ogY%36Ob^Faa{JVS>SHwN0)=e(WZpX2YW_G>?39XSDs{WL2nC2L?T5 z7Gul9cF6}bAB?KEWoC$Gk-&sTl5d_UNo9jHrOGA!TzeSZQ*_sq$|dOHU(g{L4A>`y za3OM{14N?EV|G9XNbqD_2hZ#r*?i_Jn%bjS_RG3b_jj8OSavNLdNtR}J_H8q=dWX9 z6sK;YdFFzEnODvDE(<-LOFSiT>O7ZtmUx1QrLXc-`dUJXb@0%v(>S2ipn0+vfe`VmroS>QL8w<1}GkJ|O=U@)Klfo?tiLp(||2jlJVZVjArO%Z;cB3r9?@au`dnq)^uv%tTTBP@f2Ds?h!<)~J-%5FKY5BO zSzyHjqmaWi?Vkge8nuE}niJmS32)6CkXz05UOS&|GUs#7A(Rct?#X87i#h2ZipK!# zFYr)Pffo>sYhx5~ z0s|us77>oeDT@+2sTEGGU zdNYg2Kc$`NqcBM8S0GNzrRtrVtlqZ@pKuBh7&v8boiQL%&-`s-+KO>Yj(u1W|06D9 zq}Y0SmiAXovy;57ys+i*j>gW!x_9QHdsn*0Ub_=#rO-$`E?G>KjwT~}Nvz(czjfUI zlKM1JdRTf;_u*CR^7cyq7|a~=j3Dt*ag)+5=C@?hZT6@GlS$UhO6S(i@l0>$qB$(e zk?H~E4i#(Wz3*~2-i(6zsR$gertKp}r?kwcY|NMWk$0cgsV-7Ar0rpTkG{l5G*aV+ zu1{ka#+25`a|^vqw`Ci4ztI{Z=*`>$@eTW2Pu+4*qh9I&e19)a8(N?s8}r<@MM`f1 z=xs2K-ihCk`%onQt$8JCU!hI)o|Bln%Y`q+)<(1If4_{Zz&%v>5@OpKCfISl{KZwR zWYp^*+%vM2G=ss=W;%d*s34&WD|kvSK~&B{giDyaUiZ=1h=R@S!}rF8F#mNISScS) zW0AG8mDSN|?%lr9;N2>5hjl+cyJj)=$G6Ojl$Y$x%J?tDPERTzDhNCNx`I~97@^mt zmby~iRX{DQ??-XtyJNktBXeC$G@?~04K?*(79o)gxZJ4j=W(uIzU}9sP?E!DTK?lh z`kGwhy6qC&Q$t}c>yM!FjF?u(<~0x{K<@MUfvDCtRTd%K&7jlsdO5=lLe%7%spSQm zkz%3N@L`U;DJkM3X>oeA)okEx1CRm4n^l?h(;U&ZdtEpXB6|bTjc%wYCeGJt6;CjB zgP_Djp^=*7NdVzYOjuN=spQCYN_5)u^M0q7<&B`TCMZU4s-TIYzLR!bgIh#0Rf1&v z*_7+;R3ee{2|wyCG%cpm4wcfJux4)S^B|hmn6SQ+h0L9}YmjDVRPKXpyoO^)+gv&7 ztQV6^bD{%Xp3DfePYd-c$TJT_Z;56pDhNrDK6Wt4W?ez_Ki%5MN?t6TX&~>#VDHlFX5HoxQ z?YE#;JXS8;?0~IJOk8s4>At5{3ZGG3*hrwZ3Q5#bmShfp9gMJB4TwOtNI)TSxP-t#c0U-S=j4%^d1FH2mpak#45ktq6IJ&9&rVj@l1s`=u)U z%+W4nLP+L-_J7d;<+~3J-y9$fb(;a!p�Q^T0iE5gq=iC*U`Lrpq9w##e65=oo7Q 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 {WwHMy?{6wKiZo? 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 z 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 HfPeo34goW} literal 0 HcmV?d00001 diff --git a/SFML-2.1-osx-clang-universal/extlibs/freetype.framework/Versions/Current b/SFML-2.1-osx-clang-universal/extlibs/freetype.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/extlibs/freetype.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/extlibs/freetype.framework/freetype b/SFML-2.1-osx-clang-universal/extlibs/freetype.framework/freetype new file mode 120000 index 0000000..f38cdad --- /dev/null +++ b/SFML-2.1-osx-clang-universal/extlibs/freetype.framework/freetype @@ -0,0 +1 @@ +Versions/A/freetype \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Resources b/SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Versions/A/Resources/Info.plist b/SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000..4ae5f88 --- /dev/null +++ b/SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + sndfile + CFBundleIdentifier + com.mega-nerd.sndfile + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 1.0 + + diff --git a/SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Versions/A/sndfile b/SFML-2.1-osx-clang-universal/extlibs/sndfile.framework/Versions/A/sndfile new file mode 100644 index 0000000000000000000000000000000000000000..97defcc6a916b954be11db2367b544486f7f2aeb GIT binary patch literal 6602736 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

P+TIa~xLWu4@HH9OC>oS3_ePA5EzE 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