mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-26 14:20:59 +00:00
[qwaq] Use protocols to distinguish object abilities
Well, that took a fair bit more than it should have to get working: had to implement the protocol support in qfcc and engine-side ruamoko.
This commit is contained in:
parent
0e40366c7f
commit
d88a091fc6
9 changed files with 62 additions and 5 deletions
|
@ -32,4 +32,16 @@ typedef struct qwaq_event_s {
|
|||
} e;
|
||||
} qwaq_event_t;
|
||||
|
||||
#ifdef __QFCC__ // don't want C gcc to see this :)
|
||||
@protocol HandleEvent
|
||||
-handleEvent: (struct qwaq_event_s *) event;
|
||||
@end
|
||||
|
||||
@protocol TakeFocus <HandleEvent>
|
||||
-takeFocus;
|
||||
-loseFocus;
|
||||
@end
|
||||
|
||||
#endif
|
||||
|
||||
#endif//__qwaq_event_h
|
||||
|
|
|
@ -166,6 +166,9 @@ main (int argc, const char **argv)
|
|||
Sys_Error ("couldn't load %s", name);
|
||||
}
|
||||
|
||||
//pr.pr_trace = 1;
|
||||
//pr.pr_trace_depth = -1;
|
||||
|
||||
PR_PushFrame (&pr);
|
||||
if (argc > 2)
|
||||
pr_argc = argc - 1;
|
||||
|
|
8
ruamoko/qwaq/qwaq-draw.h
Normal file
8
ruamoko/qwaq/qwaq-draw.h
Normal file
|
@ -0,0 +1,8 @@
|
|||
#ifndef __qwaq_draw_h
|
||||
#define __qwaq_draw_h
|
||||
|
||||
@protocol Draw
|
||||
-draw;
|
||||
@end
|
||||
|
||||
#endif
|
|
@ -3,14 +3,16 @@
|
|||
|
||||
#include <Object.h>
|
||||
|
||||
#include "qwaq-draw.h"
|
||||
#include "qwaq-rect.h"
|
||||
@class View;
|
||||
@class Array;
|
||||
|
||||
@interface Screen: Object
|
||||
@interface Screen: Object <HandleEvent, Draw>
|
||||
{
|
||||
Rect rect;
|
||||
Array *views;
|
||||
Array *event_handlers;
|
||||
View *focusedView;
|
||||
struct window_s *window;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,12 @@
|
|||
|
||||
-add: obj
|
||||
{
|
||||
if ([obj conformsToProtocol: @protocol (Draw)]) {
|
||||
[views addObject: obj];
|
||||
}
|
||||
if ([obj conformsToProtocol: @protocol (HandleEvent)]) {
|
||||
[event_handlers addObject: obj];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -29,4 +35,14 @@
|
|||
return self;
|
||||
}
|
||||
|
||||
-handleEvent: (qwaq_event_t *) event
|
||||
{
|
||||
return self;
|
||||
}
|
||||
|
||||
-draw
|
||||
{
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -4,9 +4,10 @@
|
|||
#include <Array.h>
|
||||
#include <Object.h>
|
||||
|
||||
#include "qwaq-draw.h"
|
||||
#include "qwaq-rect.h"
|
||||
|
||||
@interface View: Object
|
||||
@interface View: Object <Draw>
|
||||
{
|
||||
Rect rect;
|
||||
Rect absRect;
|
||||
|
@ -14,7 +15,6 @@
|
|||
struct window_s *window;
|
||||
}
|
||||
-initWithRect: (Rect) rect;
|
||||
-handleEvent: (struct qwaq_event_s *) event;
|
||||
@end
|
||||
|
||||
#endif//__qwaq_view_h
|
||||
|
|
|
@ -28,7 +28,7 @@ rectContainsPoint (Rect *rect, Point *point)
|
|||
return self;
|
||||
}
|
||||
|
||||
-handleEvent: (qwaq_event_t *) event
|
||||
-draw
|
||||
{
|
||||
return self;
|
||||
}
|
||||
|
|
|
@ -6,9 +6,10 @@
|
|||
@class View;
|
||||
@class Array;
|
||||
|
||||
#include "qwaq-draw.h"
|
||||
#include "qwaq-rect.h"
|
||||
|
||||
@interface Window: Object
|
||||
@interface Window: Object <Draw, TakeFocus>
|
||||
{
|
||||
Rect rect;
|
||||
Point point; // FIXME can't be local :(
|
||||
|
|
|
@ -68,4 +68,19 @@
|
|||
wbkgd (window, ch);
|
||||
return self;
|
||||
}
|
||||
|
||||
-takeFocus
|
||||
{
|
||||
return self;
|
||||
}
|
||||
|
||||
-loseFocus
|
||||
{
|
||||
return self;
|
||||
}
|
||||
|
||||
-draw
|
||||
{
|
||||
return self;
|
||||
}
|
||||
@end
|
||||
|
|
Loading…
Reference in a new issue