Skip to content

Commit

Permalink
converted button to c
Browse files Browse the repository at this point in the history
  • Loading branch information
denisdefreyne committed Dec 18, 2011
1 parent c03a89a commit dbc435e
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 48 deletions.
15 changes: 7 additions & 8 deletions include/Monet/MOButton.h
@@ -1,10 +1,9 @@
#import <Monet/MOApplication.h>
#import <Monet/MORect.h>
#import <Monet/MOView.h>

// @interface MOButton : MOView
// {
// struct MOButtonData *buttonData;
// }
//
// - (void)clicked;
//
// @end
typedef void (*MOButtonClickedCallback)(MOView *self);

MOView *MOButtonCreate(MORect aFrame, MOApplication *aApplication);

void MOButtonSetClickedCallback(MOView *self, MOButtonClickedCallback aCallback);
83 changes: 45 additions & 38 deletions src/Monet/MOButton.m
@@ -1,63 +1,70 @@
#import <Monet/MOButton.h>

#import <cobject/cobject.h>

#import <Monet/MOApplication.h>
#import <Monet/MOPoint.h>
#import <Monet/MORect.h>
#import <Monet/MOView.h>

/*
struct MOButtonData
struct _MOButtonExtra
{
BOOL isMouseDown;
BOOL isMouseInside;
};
COGuts *guts;

@implementation MOButton : MOView
bool isMouseDown;
bool isMouseInside;

MOButtonClickedCallback clickedCallback;
};
typedef struct _MOButtonExtra MOButtonExtra;

- (id)initWithFrame: (MORect)aFrame app: (MOApplication *)aApp;
bool _MOButtonIsMousePressed(MOView *self)
{
if ((self = [super initWithFrame: aFrame app: aApp]))
{
buttonData = calloc(1, sizeof (struct MOButtonData));
buttonData->isMouseDown = NO;
buttonData->isMouseInside = NO;
}
return self;
}
MOButtonExtra *extra = MOViewGetExtra(self);

#pragma mark -
MORect bounds = MOViewGetBounds(self);
MOPoint untranslatedPoint = MOApplicationGetMouseLocation(MOViewGetApplication(self));
MOPoint point = MOViewConvertPointFromScreen(self, untranslatedPoint);
return extra->isMouseDown && MORectContainsPoint(bounds, point);
}

- (BOOL)isPressed
bool _MOButtonMouseButtonPressed(MOView *self, MOEvent *aEvent)
{
return buttonData->isMouseDown && MORectContainsPoint(
[self bounds],
[self convertPointFromScreen: MOApplicationGetMouseLocation([self app])]);
}
MOButtonExtra *extra = MOViewGetExtra(self);

#pragma mark -
extra->isMouseDown = YES;

- (void)mouseDown: (MOEvent *)aEvent
{
buttonData->isMouseDown = YES;
return true;
}

- (void)mouseUp: (MOEvent *)aEvent
bool _MOButtonMouseButtonReleased(MOView *self, MOEvent *aEvent)
{
if ([self isPressed])
[self clicked];
MOButtonExtra *extra = MOViewGetExtra(self);

buttonData->isMouseDown = NO;
}
if (_MOButtonIsMousePressed(self))
extra->clickedCallback(self);

#pragma mark -
extra->isMouseDown = NO;

- (void)clicked
{
;
return true;
}

@end
MOView *MOButtonCreate(MORect aFrame, MOApplication *aApplication)
{
MOView *view = MOViewCreate(aFrame, aApplication);

MOButtonExtra *extra = calloc(1, sizeof (MOButtonExtra));
COInitialize(extra);
MOViewSetExtra(view, extra);

MOViewSetMouseButtonPressedCallback(view, &_MOButtonMouseButtonPressed);
MOViewSetMouseButtonReleasedCallback(view, &_MOButtonMouseButtonReleased);

*/
return view;
}

void MOButtonSetClickedCallback(MOView *self, MOButtonClickedCallback aCallback)
{
MOButtonExtra *extra = MOViewGetExtra(self);
extra->clickedCallback = aCallback;
}
10 changes: 8 additions & 2 deletions src/Monet/MOImage.m
Expand Up @@ -21,7 +21,10 @@
// Load file
SDL_Surface *surface = IMG_Load(aFilename);
if (!surface)
[NSException raise: @"SDLException" format: @"IMG_Load failed: %s\n", SDL_GetError()];
{
fprintf(stderr, "IMG_Load failed (%s)\n", SDL_GetError());
exit(1);
}

// Create texture
glGenTextures(1, &image->textureName);
Expand All @@ -47,8 +50,11 @@
textureFormat = GL_BGR;
}
else
{
// TODO handle gracefully
[NSException raise: @"OpenGLException" format: @"glTexImage2D preparation failed: image is not in truecolor (filename = %@)\n", aFilename];
fprintf(stderr, "glTexImage2D preparation failed: image is not in truecolor (filename = %s)\n", aFilename);
exit(1);
}

// Set size
image->size = MOSizeMake(surface->w, surface->h);
Expand Down
1 change: 1 addition & 0 deletions src/Monet/MOView.m
@@ -1,5 +1,6 @@
#import <Monet/MOView.h>

#import <cobject/cobject.h>
#import <OpenGL/gl.h>
#import <OpenGL/glu.h>

Expand Down

0 comments on commit dbc435e

Please sign in to comment.