Skip to content

Commit

Permalink
Update examples to SFML 3
Browse files Browse the repository at this point in the history
  • Loading branch information
eXpl0it3r committed Feb 15, 2025
1 parent 2994e93 commit ca4b484
Show file tree
Hide file tree
Showing 9 changed files with 139 additions and 154 deletions.
19 changes: 9 additions & 10 deletions examples/bitmapTextExample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ int main()
// standard setup for a font
font.setExternalTexture(fontSheetTexture);
font.setNumberOfTilesPerRow(16);
font.setDefaultTextureRect({ 0, 0, 8, 8 });
font.setDefaultTextureRect({ { 0, 0 }, { 8, 8 } });

// customisation for the specific font ("Selba Ward Bitmap Font 0001.png")

// customise texture rects for 'j' and 'z' as the glyph for j spills into z
font.setTextureRect({ 80, 48, 8, 9 }, 'j');
font.setTextureRect({ 80, 57, 8, 7 }, 'z');
font.setTextureRect({ { 80, 48 }, { 8, 9 } }, 'j');
font.setTextureRect({ { 80, 57 }, { 8, 7 } }, 'z');
font.setBaseline(-1, 'z');

// starting values
Expand Down Expand Up @@ -94,23 +94,22 @@ int main()
const std::string defaultString = "012 Str;:zingy! qu,ic(k)jumps 57";
const std::string xxxyyyString = "xxxyyyiijiizzJJIIvvvwwyyxxzzz";
text.setString(prefixString + defaultString);
text.setPosition(20, 50);
text.setPosition({ 20, 50 });
text.setScale(2); // scale so we can see the pixels (only accepts unsigned integers - single unsigned int, two unsigned ints, sf::Vector2u)
//text.Transformable::setScale(3.5f, 9.75f); // it's still possible to scale by fractional amounts by explicitly calling the Transformable method
//text.setTracking(2); // base spacing between characters. default is 1

sf::RenderWindow window(sf::VideoMode(550, 100), "Bitmap Text example", sf::Style::Default);
sf::RenderWindow window(sf::VideoMode({ 550, 100 }), "Bitmap Text example", sf::Style::Default);
window.setFramerateLimit(20);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
while (const std::optional event = window.pollEvent())
{
if (event.type == sf::Event::Closed)
if (event->is<sf::Event::Closed>())
window.close();
else if (event.type == sf::Event::KeyPressed)
else if (const auto* keyPressed = event->getIf<sf::Event::KeyPressed>())
{
if (event.key.code == sf::Keyboard::Space)
if (keyPressed->code == sf::Keyboard::Key::Space)
{
if (text.getString() != prefixString + xxxyyyString)
text.setString(prefixString + xxxyyyString);
Expand Down
25 changes: 12 additions & 13 deletions examples/lineExample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,36 +41,35 @@ int main()
std::ios_base::iostate sfErrIoState = sf::err().rdstate(); // stores current state of SFML error stream
sf::err().clear(std::ios::failbit); // disables SFML error stream
sf::ContextSettings contextSettings;
contextSettings.antialiasingLevel = 8;
sf::RenderWindow window(sf::VideoMode(800, 600), "Line test", sf::Style::Default, contextSettings);
contextSettings.antiAliasingLevel = 8;
sf::RenderWindow window(sf::VideoMode({ 800, 600 }), "Line test", sf::Style::Default, sf::State::Windowed, contextSettings);
window.setFramerateLimit(60);
sf::err().clear(sfErrIoState); // re-enables SFML error stream (re-enstates the stored state)

while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
while (const std::optional event = window.pollEvent())
{
if (event.type == sf::Event::Closed || event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
if (event->is<sf::Event::Closed>() || event->is<sf::Event::KeyPressed>() && event->getIf<sf::Event::KeyPressed>()->code == sf::Keyboard::Key::Escape)
window.close();
else if (event.type == sf::Event::MouseButtonPressed)
else if (const auto* mouseButton = event->getIf<sf::Event::MouseButtonPressed>())
{
if (event.mouseButton.button == sf::Mouse::Left)
if (mouseButton->button == sf::Mouse::Button::Left)
isButtonDown.left = true;
else if (event.mouseButton.button == sf::Mouse::Right)
else if (mouseButton->button == sf::Mouse::Button::Right)
isButtonDown.right = true;
}
else if (event.type == sf::Event::MouseButtonReleased)
else if (const auto* mouseButton = event->getIf<sf::Event::MouseButtonReleased>())
{
if (event.mouseButton.button == sf::Mouse::Left)
if (mouseButton->button == sf::Mouse::Button::Left)
isButtonDown.left = false;
else if (event.mouseButton.button == sf::Mouse::Right)
else if (mouseButton->button == sf::Mouse::Button::Right)
isButtonDown.right = false;
}
else if (event.type == sf::Event::MouseWheelMoved)
else if (const auto* mouseWheel = event->getIf<sf::Event::MouseWheelScrolled>())
{
const float lineThicknessOffset{ 2.f };
if (event.mouseWheel.delta > 0)
if (mouseWheel->delta > 0)
lineThickness += lineThicknessOffset;
else
lineThickness -= lineThicknessOffset;
Expand Down
23 changes: 11 additions & 12 deletions examples/progressBarExample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ int main()
return EXIT_FAILURE;
}

sf::RenderWindow window(sf::VideoMode(800, 600), "Progress Bar example");
sf::RenderWindow window(sf::VideoMode({ 800, 600 }), "Progress Bar example");

sw::ProgressBar progressBar({ 300.f, 40.f });

Expand All @@ -42,7 +42,7 @@ int main()
progressBar.setBackgroundColor(sf::Color(128, 128, 128));
progressBar.setFrameColor(sf::Color(128, 128, 255, 192));
progressBar.setFrameThickness(2.f);
progressBar.setRotation(-30);
progressBar.setRotation(sf::degrees(-30));

// set textures
progressBar.setTexture(texture);
Expand All @@ -56,7 +56,7 @@ int main()
// marker
std::vector<sf::CircleShape> markers(3, sf::CircleShape(3.f));
for (auto& marker : markers)
marker.setOrigin(marker.getRadius(), marker.getRadius());
marker.setOrigin({ marker.getRadius(), marker.getRadius() });
markers[0].setFillColor(sf::Color::Red);
markers[1].setFillColor(sf::Color::Yellow);
markers[2].setFillColor(sf::Color::Green);
Expand All @@ -65,10 +65,9 @@ int main()

while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
while (const std::optional event = window.pollEvent())
{
if ((event.type == sf::Event::Closed) || (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape))
if (event->is<sf::Event::Closed>() || event->is<sf::Event::KeyPressed>() && event->getIf<sf::Event::KeyPressed>()->code == sf::Keyboard::Key::Escape)
window.close();
}

Expand All @@ -78,14 +77,14 @@ int main()

float frameTime{ clock.restart().asSeconds() };

if (sf::Keyboard::isKeyPressed(sf::Keyboard::Add)) // [+] (number pad) increase progress
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Add)) // [+] (number pad) increase progress
progressBar.setRatio(progressBar.getRatio() + frameTime * 0.3f);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Subtract)) // [-] (number pad) decrease progress
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Subtract)) // [-] (number pad) decrease progress
progressBar.setRatio(progressBar.getRatio() - frameTime * 0.3f);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Period)) // [.]/[>] rotate left
progressBar.rotate(frameTime * 30.f);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Comma)) // [,]/[<] rotate right
progressBar.rotate(-frameTime * 30.f);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Period)) // [.]/[>] rotate left
progressBar.rotate(sf::degrees(frameTime * 30.f));
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Comma)) // [,]/[<] rotate right
progressBar.rotate(sf::degrees(-frameTime * 30.f));

window.clear();
window.draw(progressBar);
Expand Down
35 changes: 17 additions & 18 deletions examples/spinningCardExample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

int main()
{
sf::RenderWindow window(sf::VideoMode(500, 500), "Spinning card effect");
sf::RenderWindow window(sf::VideoMode({ 500, 500 }), "Spinning card effect");
window.setFramerateLimit(60);

const std::string faceTextureFilename{ "resources/Card Face - SFML.png" };
Expand All @@ -40,12 +40,12 @@ int main()

// set up and position cards
const sf::Vector2f positionOfSpinningCard{ static_cast<float>(window.getSize().x) / 2, static_cast<float>(window.getSize().y) / 2 };
faceSprite.setOrigin(faceSprite.getLocalBounds().width / 2, faceSprite.getLocalBounds().height / 2);
backSprite.setOrigin(backSprite.getLocalBounds().width / 2, backSprite.getLocalBounds().height / 2);
faceSprite.setOrigin(faceSprite.getLocalBounds().size / 2.f);
backSprite.setOrigin(backSprite.getLocalBounds().size / 2.f);
faceSprite.setPosition(positionOfSpinningCard);
backSprite.setPosition(positionOfSpinningCard);
faceSprite.setRotation(10);
backSprite.setRotation(10);
faceSprite.setRotation(sf::degrees(10));
backSprite.setRotation(sf::degrees(10));
//faceSprite.setColor(sf::Color::Blue);
//backSprite.setColor(sf::Color::Green);

Expand All @@ -68,14 +68,13 @@ int main()

while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
while (const std::optional event = window.pollEvent())
{
if ((event.type == sf::Event::Closed) || (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape))
if (event->is<sf::Event::Closed>() || event->is<sf::Event::KeyPressed>() && event->getIf<sf::Event::KeyPressed>()->code == sf::Keyboard::Key::Escape)
window.close();
if (event.type == sf::Event::KeyPressed)
if (const auto* keyPressed = event->getIf<sf::Event::KeyPressed>())
{
if (event.key.code == sf::Keyboard::Space)
if (keyPressed->code == sf::Keyboard::Key::Space)
{
isSpinning = true;
clock.restart();
Expand Down Expand Up @@ -105,21 +104,21 @@ int main()

// smoothly move "out" when spinning
const float scale{ 1.f + (0.5f * std::sin(spinAngle * 3.14159f / 360)) };
cardFace.setScale(scale, scale);
cardBack.setScale(scale, scale);
cardFace.setScale({ scale, scale });
cardBack.setScale({ scale, scale });
}

window.clear();

// side cards (must return for the central card)
backSprite.move(-120, 0);
backSprite.rotate(-2);
backSprite.move({ -120, 0 });
backSprite.rotate(sf::degrees(-2));
window.draw(backSprite);
backSprite.move(240, 0);
backSprite.rotate(4);
backSprite.move({ 240, 0 });
backSprite.rotate(sf::degrees(4));
window.draw(backSprite);
backSprite.move(-120, 0);
backSprite.rotate(-2);
backSprite.move({ -120, 0 });
backSprite.rotate(sf::degrees(-2));

// central card
if (isSpinning)
Expand Down
23 changes: 11 additions & 12 deletions examples/splineExample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "Selba Ward - Spline example", sf::Style::Default);
sf::RenderWindow window(sf::VideoMode({ 800, 600 }), "Selba Ward - Spline example", sf::Style::Default);
window.setFramerateLimit(15);

const unsigned int numberOfVertices{ 50u }; // number of (control) vertices in spline (one vertex per frame)
Expand All @@ -40,28 +40,27 @@ int main()

while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
while (const std::optional event = window.pollEvent())
{
if (event.type == sf::Event::Closed || event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
if (event->is<sf::Event::Closed>() || event->is<sf::Event::KeyPressed>() && event->getIf<sf::Event::KeyPressed>()->code == sf::Keyboard::Key::Escape)
window.close();
else if (event.type == sf::Event::KeyPressed)
else if (const auto* keyPressed = event->getIf<sf::Event::KeyPressed>())
{
if (event.key.code == sf::Keyboard::F1) // toggle pause
if (keyPressed->code == sf::Keyboard::Key::F1) // toggle pause
isPaused = !isPaused;
else if (event.key.code == sf::Keyboard::Space) // toggle bezier/linear curve mode
else if (keyPressed->code == sf::Keyboard::Key::Space) // toggle bezier/linear curve mode
spline.setBezierInterpolation(!spline.getBezierInterpolation());
else if (event.key.code == sf::Keyboard::Tab) // toggle primitive type
else if (keyPressed->code == sf::Keyboard::Key::Tab) // toggle primitive type
{
if (spline.getPrimitiveType() == sf::PrimitiveType::LinesStrip)
if (spline.getPrimitiveType() == sf::PrimitiveType::LineStrip)
spline.setPrimitiveType(sf::PrimitiveType::Points);
else
spline.setPrimitiveType(sf::PrimitiveType::LinesStrip);
spline.setPrimitiveType(sf::PrimitiveType::LineStrip);
}
}
else if (event.type == sf::Event::MouseWheelScrolled)
else if (const auto* mouseWheel = event->getIf<sf::Event::MouseWheelScrolled>())
{
const float thickness{ spline.getThickness() + event.mouseWheelScroll.delta };
const float thickness{ spline.getThickness() + mouseWheel->delta };
spline.setThickness((thickness < 0) ? 0.f : thickness);
}
}
Expand Down
45 changes: 19 additions & 26 deletions examples/splineExample2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@

int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "Selba Ward - Spline example 2", sf::Style::Default);
sf::RenderWindow window(sf::VideoMode({ 800, 600 }), "Selba Ward - Spline example 2", sf::Style::Default);
window.setFramerateLimit(15);

const unsigned int numberOfVertices{ 50u }; // number of (control) vertices in spline (one vertex per frame)
Expand All @@ -50,45 +50,41 @@ int main()

while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
while (const std::optional event = window.pollEvent())
{
switch (event.type)
{
case sf::Event::Closed:
if (event->is<sf::Event::Closed>())
window.close();
break;
case sf::Event::KeyPressed:
switch (event.key.code)
else if (const auto* keyPressed = event->getIf<sf::Event::KeyPressed>())
switch (keyPressed->code)
{
case sf::Keyboard::Escape:
case sf::Keyboard::Key::Escape:
// close
window.close();
break;
case sf::Keyboard::F1:
case sf::Keyboard::Key::F1:
// toggle paused
isPaused = !isPaused;
break;
case sf::Keyboard::Space:
case sf::Keyboard::Key::Space:
// toggle interpolation type
spline.setBezierInterpolation(!spline.getBezierInterpolation());
break;
case sf::Keyboard::Tab:
case sf::Keyboard::Key::Tab:
// toggle primitive type
if (spline.getPrimitiveType() == sf::PrimitiveType::LinesStrip)
if (spline.getPrimitiveType() == sf::PrimitiveType::LineStrip)
spline.setPrimitiveType(sf::PrimitiveType::Points);
else
spline.setPrimitiveType(sf::PrimitiveType::LinesStrip);
spline.setPrimitiveType(sf::PrimitiveType::LineStrip);
break;
case sf::Keyboard::BackSpace:
case sf::Keyboard::Key::Backspace:
// toggle closed Spline
spline.setClosed(!spline.getClosed());
break;
case sf::Keyboard::Slash:
case sf::Keyboard::Key::Slash:
// toggle random normal offsets (lightning effect)
spline.setRandomNormalOffsetRange(20.f - spline.getRandomNormalOffsetRange());
break;
case sf::Keyboard::LBracket:
case sf::Keyboard::Key::LBracket:
// cycle start cap type
switch (spline.getThickStartCapType())
{
Expand All @@ -103,7 +99,7 @@ int main()
break;
}
break;
case sf::Keyboard::RBracket:
case sf::Keyboard::Key::RBracket:
// cycle end cap type
switch (spline.getThickEndCapType())
{
Expand All @@ -118,7 +114,7 @@ int main()
break;
}
break;
case sf::Keyboard::Return:
case sf::Keyboard::Key::Enter:
// cycle corner type
switch (spline.getThickCornerType())
{
Expand All @@ -134,15 +130,12 @@ int main()
}
break;
}
break;
case sf::Event::MouseWheelScrolled:
// mouse wheel changes thickness
else if (const auto* mouseWheel = event->getIf<sf::Event::MouseWheelScrolled>())
{
const float thickness{ spline.getThickness() + event.mouseWheelScroll.delta };
// mouse wheel changes thickness
const float thickness{ spline.getThickness() + mouseWheel->delta };
spline.setThickness((thickness < 0) ? 0.f : thickness);
}
break;
}
}

if (!isPaused)
Expand Down
Loading

0 comments on commit ca4b484

Please sign in to comment.