/* * Copyright (c) 2012 Jonathan Schleifer <js@webkeks.org> * * 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. */ #import "OGKDisplay.h" #import "OGKEvent.h" #import "OGKEventQueue.h" #import "OGKBitmap.h" #import "TestMain.h" OF_APPLICATION_DELEGATE(TestMain) @implementation TestMain - (void)display: (OGKDisplay*)display wasClosed: (OGKCloseEvent*)event { running = NO; } - (void)keyWasPressed: (OGKKeyPressEvent*)event display: (OGKDisplay*)display { of_log(@"Pressed: %d", event.keycode); } - (void)keyWasReleased: (OGKKeyReleaseEvent*)event display: (OGKDisplay*)display { of_log(@"Released: %d", event.keycode); } - (void)characterWasTyped: (OGKCharacterTypedEvent*)event display: (OGKDisplay*)display { of_log(@"Character typed: %u (keycode=%d, modifiers=%d, repeated=%d)", event.character, event.keycode, event.modifiers, event.repeated); switch (event.keycode) { case OGK_KEY_R: tint = ogk_color(1, 0.5, 0.5, 0); break; case OGK_KEY_G: tint = ogk_color(0.5, 1, 0.5, 0); break; case OGK_KEY_B: tint = ogk_color(0.5, 0.5, 1, 0); break; case OGK_KEY_N: tint = ogk_color(1, 1, 1, 0); break; case OGK_KEY_LEFT: rotation.angle -= M_PI / 128; break; case OGK_KEY_RIGHT: rotation.angle += M_PI / 128; break; case OGK_KEY_Q: running = NO; break; } } - (void)mouseWasMoved: (OGKMouseMovedEvent*)event display: (OGKDisplay*)display { of_log(@"Mouse moved: X=%.f(%.f) Y=%.f(%.f) WX=%.f(%.f) WY=%.f(%.f)", event.cursor.x, event.deltaCursor.x, event.cursor.y, event.deltaCursor.y, event.wheel.x, event.deltaWheel.x, event.wheel.y, event.deltaWheel.y); position = event.cursor; scale = of_dimension( (bitmap.size.width + event.wheel.x) / bitmap.size.width, (bitmap.size.height + event.wheel.y) / bitmap.size.height); } - (void)mouseButtonWasPressed: (OGKMouseButtonPressedEvent*)event display: (OGKDisplay*)display { of_log(@"Mouse button was pressed: %d (X=%.f Y=%.f WX=%.f WY=%.f)", event.button, event.cursor.x, event.cursor.y, event.wheel.x, event.wheel.y); } - (void)mouseButtonWasReleased: (OGKMouseButtonPressedEvent*)event display: (OGKDisplay*)display { of_log(@"Mouse button was released: %d (X=%.f Y=%.f WX=%.f WY=%.f)", event.button, event.cursor.x, event.cursor.y, event.wheel.x, event.wheel.y); } - (void)handleEvents { [eventQueue handleEvents]; } - (void)draw { [OGKBitmap clearToColor: OGK_COLOR_BLACK]; [bitmap drawAtPosition: position scale: scale rotation: rotation tint: tint]; [display update]; } - (void)applicationDidFinishLaunching { ogk_display_flags_t flags = OGK_DISPLAY_FLAGS_RESIZABLE | OGK_DISPLAY_FLAGS_VSYNC; display = [[OGKDisplay alloc] initWithSize: of_dimension(640, 480) position: of_point(200, 200) flags: flags]; display.size = of_dimension(800, 600); display.windowPosition = of_point(100, 100); display.windowTitle = @"ObjGameKit test"; of_log(@"Display is %.fx%.f at (%.f, %.f)", display.size.width, display.size.height, display.windowPosition.x, display.windowPosition.y); eventQueue = [[OGKEventQueue alloc] init]; eventQueue.delegate = self; [eventQueue registerDisplay: display]; [eventQueue registerKeyboard]; [eventQueue registerMouse]; bitmap = [[OGKBitmap alloc] initWithFile: @"test.bmp"]; position = of_point(display.size.width / 2, display.size.height / 2); scale = of_dimension(1, 1); rotation = ogk_rotation(bitmap.size.width / 2, bitmap.size.height / 2, 0); tint = ogk_color(1, 1, 1, 0); for (running = YES; running;) { @autoreleasepool { [self handleEvents]; [self draw]; } } } @end