81 lines
1.9 KiB
Text
81 lines
1.9 KiB
Text
![]() |
|
||
|
////////////////////////////////////////////////////////////
|
||
|
// Note :
|
||
|
// - we use .mm extension (Objective-C++) instead of .m (Objective-C) to allow
|
||
|
// the use of SFML objects in a Cocoa application
|
||
|
////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
// Headers
|
||
|
////////////////////////////////////////////////////////////
|
||
|
#import "SfmlController.h"
|
||
|
|
||
|
#define FPS 60.0f // framerate limit
|
||
|
|
||
|
@implementation SfmlController
|
||
|
|
||
|
// Called when all the outlets are valid
|
||
|
- (void)awakeFromNib
|
||
|
{
|
||
|
// Bind the SFML window to the 'myView' NSView object
|
||
|
mySfmlWindow = new sf::RenderWindow(myView);
|
||
|
|
||
|
// Create the SFML loop for handling events and drawing
|
||
|
[NSTimer scheduledTimerWithTimeInterval:(1.f/FPS)
|
||
|
target:self
|
||
|
selector:@selector(display:)
|
||
|
userInfo:nil
|
||
|
repeats:YES];
|
||
|
|
||
|
[self onInit];
|
||
|
}
|
||
|
|
||
|
- (void)onInit
|
||
|
{
|
||
|
// Do your SFML initialization stuff here
|
||
|
myColor = sf::Color::Blue;
|
||
|
}
|
||
|
|
||
|
// Called when the Apply button is clicked
|
||
|
- (IBAction)onApply:(id)sender
|
||
|
{
|
||
|
// Define your 'Apply' action here
|
||
|
if (myColor == sf::Color::Blue) {
|
||
|
myColor = sf::Color::Red;
|
||
|
} else {
|
||
|
myColor = sf::Color::Blue;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
- (void)display:(NSTimer *)theTimer
|
||
|
{
|
||
|
if(!mySfmlWindow->IsOpened()) {
|
||
|
// Stop the SFML loop as soon as the window is closed
|
||
|
// (thus the user can still use the app)
|
||
|
[theTimer invalidate];
|
||
|
} else {
|
||
|
// Do the general SFML event handling
|
||
|
sf::Event Event;
|
||
|
while (mySfmlWindow->GetEvent(Event)) {
|
||
|
if (Event.Type == sf::Event::Closed) {
|
||
|
mySfmlWindow->Close();
|
||
|
}
|
||
|
|
||
|
if ((Event.Type == sf::Event::KeyPressed) &&
|
||
|
(Event.Key.Code == sf::Key::Escape)) {
|
||
|
mySfmlWindow->Close();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Do the general SFML display process
|
||
|
mySfmlWindow->SetActive();
|
||
|
mySfmlWindow->Clear();
|
||
|
mySfmlWindow->Draw(sf::Shape::Circle(50.f, 50.f, 20.f, myColor));
|
||
|
mySfmlWindow->Display();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@end
|
||
|
|