| Rect.inl | | Rect.inl | |
| | | | |
| skipping to change at line 73 | | skipping to change at line 73 | |
| top (static_cast<T>(rectangle.top)), | | top (static_cast<T>(rectangle.top)), | |
| width (static_cast<T>(rectangle.width)), | | width (static_cast<T>(rectangle.width)), | |
| height(static_cast<T>(rectangle.height)) | | height(static_cast<T>(rectangle.height)) | |
| { | | { | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename T> | | template <typename T> | |
| bool Rect<T>::contains(T x, T y) const | | bool Rect<T>::contains(T x, T y) const | |
| { | | { | |
|
| return (x >= left) && (x < left + width) && (y >= top) && (y < top + he | | // Rectangles with negative dimensions are allowed, so we must handle t | |
| ight); | | hem 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 <typename T> | | template <typename T> | |
| bool Rect<T>::contains(const Vector2<T>& point) const | | bool Rect<T>::contains(const Vector2<T>& point) const | |
| { | | { | |
| return contains(point.x, point.y); | | return contains(point.x, point.y); | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| | | | |
| skipping to change at line 95 | | skipping to change at line 103 | |
| bool Rect<T>::intersects(const Rect<T>& rectangle) const | | bool Rect<T>::intersects(const Rect<T>& rectangle) const | |
| { | | { | |
| Rect<T> intersection; | | Rect<T> intersection; | |
| return intersects(rectangle, intersection); | | return intersects(rectangle, intersection); | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename T> | | template <typename T> | |
| bool Rect<T>::intersects(const Rect<T>& rectangle, Rect<T>& intersection) c
onst | | bool Rect<T>::intersects(const Rect<T>& rectangle, Rect<T>& intersection) c
onst | |
| { | | { | |
|
| | | // Rectangles with negative dimensions are allowed, so we must handle t | |
| | | hem 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 | | // Compute the intersection boundaries | |
|
| T interLeft = std::max(left, rectangle.left); | | T interLeft = std::max(r1MinX, r2MinX); | |
| T interTop = std::max(top, rectangle.top); | | T interTop = std::max(r1MinY, r2MinY); | |
| T interRight = std::min(left + width, rectangle.left + rectangle.width | | T interRight = std::min(r1MaxX, r2MaxX); | |
| ); | | T interBottom = std::min(r1MaxY, r2MaxY); | |
| T interBottom = std::min(top + height, rectangle.top + rectangle.height | | | |
| ); | | | |
| | | | |
| // If the intersection is valid (positive non zero area), then there is
an intersection | | // If the intersection is valid (positive non zero area), then there is
an intersection | |
| if ((interLeft < interRight) && (interTop < interBottom)) | | if ((interLeft < interRight) && (interTop < interBottom)) | |
| { | | { | |
| intersection = Rect<T>(interLeft, interTop, interRight - interLeft,
interBottom - interTop); | | intersection = Rect<T>(interLeft, interTop, interRight - interLeft,
interBottom - interTop); | |
| return true; | | return true; | |
| } | | } | |
| else | | else | |
| { | | { | |
| intersection = Rect<T>(0, 0, 0, 0); | | intersection = Rect<T>(0, 0, 0, 0); | |
| | | | |
End of changes. 3 change blocks. |
| 8 lines changed or deleted | | 29 lines changed or added | |
|
| Shader.hpp | | Shader.hpp | |
| | | | |
| skipping to change at line 510 | | skipping to change at line 510 | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| /// \brief Bind all the textures used by the shader | | /// \brief Bind all the textures used by the shader | |
| /// | | /// | |
| /// This function each texture to a different unit, and | | /// This function each texture to a different unit, and | |
| /// updates the corresponding variables in the shader accordingly. | | /// updates the corresponding variables in the shader accordingly. | |
| /// | | /// | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| void bindTextures() const; | | 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 | | // Types | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| typedef std::map<int, const Texture*> TextureTable; | | typedef std::map<int, const Texture*> TextureTable; | |
|
| | | typedef std::map<std::string, int> ParamTable; | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| // Member data | | // Member data | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| unsigned int m_shaderProgram; ///< OpenGL identifier for the program | | unsigned int m_shaderProgram; ///< OpenGL identifier for the program | |
| int m_currentTexture; ///< Location of the current texture in
the shader | | int m_currentTexture; ///< Location of the current texture in
the shader | |
| TextureTable m_textures; ///< Texture variables in the shader, ma
pped to their location | | TextureTable m_textures; ///< Texture variables in the shader, ma
pped to their location | |
|
| | | ParamTable m_params; ///< Parameters location cache | |
| }; | | }; | |
| | | | |
| } // namespace sf | | } // namespace sf | |
| | | | |
| #endif // SFML_SHADER_HPP | | #endif // SFML_SHADER_HPP | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| /// \class sf::Shader | | /// \class sf::Shader | |
| /// \ingroup graphics | | /// \ingroup graphics | |
| /// | | /// | |
| | | | |
End of changes. 3 change blocks. |
| 0 lines changed or deleted | | 12 lines changed or added | |
|
| Transformable.hpp | | Transformable.hpp | |
| | | | |
| skipping to change at line 359 | | skipping to change at line 359 | |
| /// | | /// | |
| /// That's exactly what sf::Transformable was written for: it hides | | /// That's exactly what sf::Transformable was written for: it hides | |
| /// these variables and the composed transform behind an easy to use | | /// these variables and the composed transform behind an easy to use | |
| /// interface. You can set or get any of the individual components | | /// interface. You can set or get any of the individual components | |
| /// without worrying about the others. It also provides the composed | | /// without worrying about the others. It also provides the composed | |
| /// transform (as a sf::Transform), and keeps it up-to-date. | | /// transform (as a sf::Transform), and keeps it up-to-date. | |
| /// | | /// | |
| /// In addition to the position, rotation and scale, sf::Transformable | | /// In addition to the position, rotation and scale, sf::Transformable | |
| /// provides an "origin" component, which represents the local origin | | /// provides an "origin" component, which represents the local origin | |
| /// of the three other components. Let's take an example with a 10x10 | | /// of the three other components. Let's take an example with a 10x10 | |
|
| /// pixels sprite. By default, the sprite is positionned/rotated/scaled | | /// pixels sprite. By default, the sprite is positioned/rotated/scaled | |
| /// relatively to its top-left corner, because it is the local point | | /// 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 | | /// (0, 0). But if we change the origin to be (5, 5), the sprite will | |
|
| /// be positionned/rotated/scaled around its center instead. And if | | /// be positioned/rotated/scaled around its center instead. And if | |
| /// we set the origin to (10, 10), it will be transformed around its | | /// we set the origin to (10, 10), it will be transformed around its | |
| /// bottom-right corner. | | /// bottom-right corner. | |
| /// | | /// | |
| /// To keep the sf::Transformable class simple, there's only one | | /// To keep the sf::Transformable class simple, there's only one | |
| /// origin for all the components. You cannot position the sprite | | /// origin for all the components. You cannot position the sprite | |
| /// relatively to its top-left corner while rotating it around its | | /// relatively to its top-left corner while rotating it around its | |
| /// center, for example. To do such things, use sf::Transform directly. | | /// center, for example. To do such things, use sf::Transform directly. | |
| /// | | /// | |
| /// sf::Transformable can be used as a base class. It is often | | /// sf::Transformable can be used as a base class. It is often | |
| /// combined with sf::Drawable -- that's what SFML's sprites, | | /// combined with sf::Drawable -- that's what SFML's sprites, | |
| | | | |
End of changes. 2 change blocks. |
| 2 lines changed or deleted | | 2 lines changed or added | |
|
| Utf.inl | | Utf.inl | |
| | | | |
| skipping to change at line 104 | | skipping to change at line 104 | |
| { | | { | |
| // Invalid character | | // Invalid character | |
| if (replacement) | | if (replacement) | |
| *output++ = replacement; | | *output++ = replacement; | |
| } | | } | |
| else | | else | |
| { | | { | |
| // Valid character | | // Valid character | |
| | | | |
| // Get the number of bytes to write | | // Get the number of bytes to write | |
|
| int bytestoWrite = 1; | | std::size_t bytestoWrite = 1; | |
| if (input < 0x80) bytestoWrite = 1; | | if (input < 0x80) bytestoWrite = 1; | |
| else if (input < 0x800) bytestoWrite = 2; | | else if (input < 0x800) bytestoWrite = 2; | |
| else if (input < 0x10000) bytestoWrite = 3; | | else if (input < 0x10000) bytestoWrite = 3; | |
| else if (input <= 0x0010FFFF) bytestoWrite = 4; | | else if (input <= 0x0010FFFF) bytestoWrite = 4; | |
| | | | |
| // Extract the bytes to write | | // Extract the bytes to write | |
| Uint8 bytes[4]; | | Uint8 bytes[4]; | |
| switch (bytestoWrite) | | switch (bytestoWrite) | |
| { | | { | |
| case 4 : bytes[3] = static_cast<Uint8>((input | 0x80) & 0xBF);
input >>= 6; | | case 4 : bytes[3] = static_cast<Uint8>((input | 0x80) & 0xBF);
input >>= 6; | |
| case 3 : bytes[2] = static_cast<Uint8>((input | 0x80) & 0xBF);
input >>= 6; | | case 3 : bytes[2] = static_cast<Uint8>((input | 0x80) & 0xBF);
input >>= 6; | |
| case 2 : bytes[1] = static_cast<Uint8>((input | 0x80) & 0xBF);
input >>= 6; | | case 2 : bytes[1] = static_cast<Uint8>((input | 0x80) & 0xBF);
input >>= 6; | |
| case 1 : bytes[0] = static_cast<Uint8> (input | firstBytes[byte
stoWrite]); | | case 1 : bytes[0] = static_cast<Uint8> (input | firstBytes[byte
stoWrite]); | |
| } | | } | |
| | | | |
| // Add them to the output | | // Add them to the output | |
|
| const Uint8* currentByte = bytes; | | output = std::copy(bytes, bytes + bytestoWrite, output); | |
| switch (bytestoWrite) | | | |
| { | | | |
| case 4 : *output++ = *currentByte++; | | | |
| case 3 : *output++ = *currentByte++; | | | |
| case 2 : *output++ = *currentByte++; | | | |
| case 1 : *output++ = *currentByte++; | | | |
| } | | | |
| } | | } | |
| | | | |
| return output; | | return output; | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In> | | template <typename In> | |
| In Utf<8>::next(In begin, In end) | | In Utf<8>::next(In begin, In end) | |
| { | | { | |
| Uint32 codepoint; | | Uint32 codepoint; | |
| | | | |
| skipping to change at line 242 | | skipping to change at line 235 | |
| *output++ = codepoint < 256 ? static_cast<char>(codepoint) : replac
ement; | | *output++ = codepoint < 256 ? static_cast<char>(codepoint) : replac
ement; | |
| } | | } | |
| | | | |
| return output; | | return output; | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In, typename Out> | | template <typename In, typename Out> | |
| Out Utf<8>::toUtf8(In begin, In end, Out output) | | Out Utf<8>::toUtf8(In begin, In end, Out output) | |
| { | | { | |
|
| while (begin < end) | | return std::copy(begin, end, output); | |
| *output++ = *begin++; | | | |
| | | | |
| return output; | | | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In, typename Out> | | template <typename In, typename Out> | |
| Out Utf<8>::toUtf16(In begin, In end, Out output) | | Out Utf<8>::toUtf16(In begin, In end, Out output) | |
| { | | { | |
| while (begin < end) | | while (begin < end) | |
| { | | { | |
| Uint32 codepoint; | | Uint32 codepoint; | |
| begin = decode(begin, end, codepoint); | | begin = decode(begin, end, codepoint); | |
| | | | |
| skipping to change at line 405 | | skipping to change at line 395 | |
| | | | |
| return output; | | return output; | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In, typename Out> | | template <typename In, typename Out> | |
| Out Utf<16>::fromLatin1(In begin, In end, Out output) | | Out Utf<16>::fromLatin1(In begin, In end, Out output) | |
| { | | { | |
| // Latin-1 is directly compatible with Unicode encodings, | | // Latin-1 is directly compatible with Unicode encodings, | |
| // and can thus be treated as (a sub-range of) UTF-32 | | // and can thus be treated as (a sub-range of) UTF-32 | |
|
| while (begin < end) | | return std::copy(begin, end, output); | |
| *output++ = *begin++; | | | |
| | | | |
| return output; | | | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In, typename Out> | | template <typename In, typename Out> | |
| Out Utf<16>::toAnsi(In begin, In end, Out output, char replacement, const s
td::locale& locale) | | Out Utf<16>::toAnsi(In begin, In end, Out output, char replacement, const s
td::locale& locale) | |
| { | | { | |
| while (begin < end) | | while (begin < end) | |
| { | | { | |
| Uint32 codepoint; | | Uint32 codepoint; | |
| begin = decode(begin, end, codepoint); | | begin = decode(begin, end, codepoint); | |
| | | | |
| skipping to change at line 472 | | skipping to change at line 459 | |
| output = Utf<8>::encode(codepoint, output); | | output = Utf<8>::encode(codepoint, output); | |
| } | | } | |
| | | | |
| return output; | | return output; | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In, typename Out> | | template <typename In, typename Out> | |
| Out Utf<16>::toUtf16(In begin, In end, Out output) | | Out Utf<16>::toUtf16(In begin, In end, Out output) | |
| { | | { | |
|
| while (begin < end) | | return std::copy(begin, end, output); | |
| *output++ = *begin++; | | | |
| | | | |
| return output; | | | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In, typename Out> | | template <typename In, typename Out> | |
| Out Utf<16>::toUtf32(In begin, In end, Out output) | | Out Utf<16>::toUtf32(In begin, In end, Out output) | |
| { | | { | |
| while (begin < end) | | while (begin < end) | |
| { | | { | |
| Uint32 codepoint; | | Uint32 codepoint; | |
| begin = decode(begin, end, codepoint); | | begin = decode(begin, end, codepoint); | |
| | | | |
| skipping to change at line 548 | | skipping to change at line 532 | |
| | | | |
| return output; | | return output; | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In, typename Out> | | template <typename In, typename Out> | |
| Out Utf<32>::fromLatin1(In begin, In end, Out output) | | Out Utf<32>::fromLatin1(In begin, In end, Out output) | |
| { | | { | |
| // Latin-1 is directly compatible with Unicode encodings, | | // Latin-1 is directly compatible with Unicode encodings, | |
| // and can thus be treated as (a sub-range of) UTF-32 | | // and can thus be treated as (a sub-range of) UTF-32 | |
|
| while (begin < end) | | return std::copy(begin, end, output); | |
| *output++ = *begin++; | | | |
| | | | |
| return output; | | | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In, typename Out> | | template <typename In, typename Out> | |
| Out Utf<32>::toAnsi(In begin, In end, Out output, char replacement, const s
td::locale& locale) | | Out Utf<32>::toAnsi(In begin, In end, Out output, char replacement, const s
td::locale& locale) | |
| { | | { | |
| while (begin < end) | | while (begin < end) | |
| output = encodeAnsi(*begin++, output, replacement, locale); | | output = encodeAnsi(*begin++, output, replacement, locale); | |
| | | | |
| return output; | | return output; | |
| | | | |
| skipping to change at line 613 | | skipping to change at line 594 | |
| while (begin < end) | | while (begin < end) | |
| output = Utf<16>::encode(*begin++, output); | | output = Utf<16>::encode(*begin++, output); | |
| | | | |
| return output; | | return output; | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In, typename Out> | | template <typename In, typename Out> | |
| Out Utf<32>::toUtf32(In begin, In end, Out output) | | Out Utf<32>::toUtf32(In begin, In end, Out output) | |
| { | | { | |
|
| while (begin < end) | | return std::copy(begin, end, output); | |
| *output++ = *begin++; | | | |
| | | | |
| return output; | | | |
| } | | } | |
| | | | |
| //////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////// | |
| template <typename In> | | template <typename In> | |
| Uint32 Utf<32>::decodeAnsi(In input, const std::locale& locale) | | Uint32 Utf<32>::decodeAnsi(In input, const std::locale& locale) | |
| { | | { | |
| // On Windows, gcc's standard library (glibc++) has almost | | // On Windows, gcc's standard library (glibc++) has almost | |
| // no support for Unicode stuff. As a consequence, in this | | // no support for Unicode stuff. As a consequence, in this | |
| // context we can only use the default locale and ignore | | // context we can only use the default locale and ignore | |
| // the one passed as parameter. | | // the one passed as parameter. | |
| | | | |
End of changes. 7 change blocks. |
| 29 lines changed or deleted | | 7 lines changed or added | |
|