[DEV] MAC : mouse event availlable and periodic display (limited at 30 fps???)

This commit is contained in:
Edouard DUPIN 2013-05-29 23:31:38 +02:00
parent b4940a4bc3
commit 6ff6693871
5 changed files with 143 additions and 19 deletions

2
external/etk vendored

@ -1 +1 @@
Subproject commit 1c21a6f3d5df76f313040a87a837b201c70a5edf
Subproject commit c90b9d1b3986f21cbd2a3f0a3ad8f12ab1df3bd1

View File

@ -31,7 +31,8 @@ static const float millimeterToKilometer = 1.0f/1000000.0f;
void ewol::dimension::Init(void)
{
ratio = vec2(96,96)*inchToMillimeter;
ewol::Dimension conversion(vec2(72,72), ewol::Dimension::Inch);
ratio = conversion.GetMillimeter();
invRatio.setValue(1.0f/ratio.x(),1.0f/ratio.y());
windowsSize.Set(vec2(200,200), ewol::Dimension::Pixel);
}

View File

@ -69,6 +69,9 @@ int mm_main(int argc, const char *argv[])
autorelease];
// set the windows at a specific position :
[window cascadeTopLeftFromPoint:NSMakePoint(50,50)];
// set the windows resizable
[window setStyleMask:[window styleMask] | NSResizableWindowMask];
// oposite : [window setStyleMask:[window styleMask] & ~NSResizableWindowMask];
// set the title
[window setTitle:appName];
@ -88,7 +91,7 @@ int mm_main(int argc, const char *argv[])
//[window addChildWindow:view];
//[window makeKeyAndVisible];
[window setDelegate:view];
// start application :
[NSApp run];
// return no error

View File

@ -10,9 +10,10 @@
#import <Cocoa/Cocoa.h>
@interface OpenGLView : NSOpenGLView
@interface OpenGLView : NSOpenGLView<NSWindowDelegate>
{
}
- (void)prepareOpenGL;
- (void)drawRect:(NSRect) bounds;
- (void)mouseDown:(NSEvent *) event;
- (void)mouseDragged:(NSEvent *) event;
@ -27,6 +28,7 @@
- (void)otherMouseDragged:(NSEvent *)event;
- (void)otherMouseUp:(NSEvent *)event;
//- (void)sendEvent:(NSEvent *)event
- (void)keyDown:(NSEvent *)theEvent;
@end

View File

@ -11,43 +11,69 @@
#include <OpenGL/gl.h>
#include <ewol/renderer/os/eSystem.h>
#include <ewol/debug.h>
static int32_t width=0, height=0;
#include <ewol/Dimension.h>
@implementation OpenGLView
static ewol::SpecialKey guiKeyBoardMode;
- (void) prepareOpenGL
{
EWOL_ERROR("prepare");
GLint swapInt = 1;
[[self openGLContext] setValues:&swapInt forParameter:NSOpenGLCPSwapInterval]; // set to vbl sync
// set system dpi size :
NSScreen *screen = [NSScreen mainScreen];
NSDictionary *description = [screen deviceDescription];
NSSize displayPixelSize = [[description objectForKey:NSDeviceSize] sizeValue];
CGSize displayPhysicalSize = CGDisplayScreenSize([[description objectForKey:@"NSScreenNumber"] unsignedIntValue]);
ewol::dimension::SetPixelRatio(vec2((float)displayPixelSize.width/(float)displayPhysicalSize.width,
(float)displayPixelSize.height/(float)displayPhysicalSize.height),
ewol::Dimension::Millimeter);
}
-(void) drawRect: (NSRect) bounds
{
if( width!= bounds.size.width
|| height!= bounds.size.height) {
width= bounds.size.width;
height= bounds.size.height;
eSystem::Resize(width,height);
}
eSystem::Draw(true);
glFlush();
}
-(void)reshape {
EWOL_INFO("view reshape (" << [self frame].size.width << "," << [self frame].size.height << ")" );
// window resize; width and height are in pixel coordinates
// but they are floats
float width = [self frame].size.width;
float height = [self frame].size.height;
eSystem::Resize(width,height);
}
-(void)mouseDown:(NSEvent *)event {
NSPoint point = [event locationInWindow];
//float x = [event locationInWindow].x; //point.x;
EWOL_INFO("mouseDown : " << (float)point.x << " " << (float)point.y);
//EWOL_INFO("mouseDown : " << (float)point.x << " " << (float)point.y);
eSystem::SetMouseState(1, true, point.x, point.y);
}
-(void)mouseDragged:(NSEvent *)event {
NSPoint point = [event locationInWindow];
EWOL_INFO("mouseDragged : " << (float)point.x << " " << (float)point.y);
//EWOL_INFO("mouseDragged : " << (float)point.x << " " << (float)point.y);
eSystem::SetMouseMotion(1, point.x, point.y);
}
-(void)mouseUp:(NSEvent *)event {
NSPoint point = [event locationInWindow];
EWOL_INFO("mouseUp : " << (float)point.x << " " << (float)point.y);
//EWOL_INFO("mouseUp : " << (float)point.x << " " << (float)point.y);
eSystem::SetMouseState(1, false, point.x, point.y);
}
-(void)mouseMoved:(NSEvent *)event {
NSPoint point = [event locationInWindow];
EWOL_INFO("mouseMoved : " << (float)point.x << " " << (float)point.y);
//EWOL_INFO("mouseMoved : " << (float)point.x << " " << (float)point.y);
eSystem::SetMouseMotion(0, point.x, point.y);
}
-(void)mouseEntered:(NSEvent *)event {
NSPoint point = [event locationInWindow];
@ -59,17 +85,17 @@ static int32_t width=0, height=0;
}
-(void)rightMouseDown:(NSEvent *)event {
NSPoint point = [event locationInWindow];
EWOL_INFO("rightMouseDown : " << (float)point.x << " " << (float)point.y);
//EWOL_INFO("rightMouseDown : " << (float)point.x << " " << (float)point.y);
eSystem::SetMouseState(3, true, point.x, point.y);
}
-(void)rightMouseDragged:(NSEvent *)event {
NSPoint point = [event locationInWindow];
EWOL_INFO("rightMouseDragged : " << (float)point.x << " " << (float)point.y);
//EWOL_INFO("rightMouseDragged : " << (float)point.x << " " << (float)point.y);
eSystem::SetMouseMotion(3, point.x, point.y);
}
-(void)rightMouseUp:(NSEvent *)event {
NSPoint point = [event locationInWindow];
EWOL_INFO("rightMouseUp : " << (float)point.x << " " << (float)point.y);
//EWOL_INFO("rightMouseUp : " << (float)point.x << " " << (float)point.y);
eSystem::SetMouseState(3, false, point.x, point.y);
}
-(void)otherMouseDown:(NSEvent *)event {
@ -84,6 +110,23 @@ static int32_t width=0, height=0;
NSPoint point = [event locationInWindow];
EWOL_INFO("otherMouseUp : " << (float)point.x << " " << (float)point.y);
}
- (void)scrollWheel:(NSEvent *)event {
NSPoint point = [event locationInWindow];
//EWOL_INFO("scrollWheel : " << (float)point.x << " " << (float)point.y << "button : " << (int32_t)([event buttonNumber]));
EWOL_INFO("scrollWheel : " << (float)point.x << " " << (float)point.y << " delta(" << (float)([event deltaX]) << "," << (float)([event deltaY]) << ")");
float deltaY = [event deltaY];
int32_t idEvent = 4;
if (deltaY < 0) {
idEvent = 5;
}
if (abs(deltaY) < 0.1f) {
return;
}
for (float iii=abs(deltaY) ; iii>=0.0f ; iii-=1.0f) {
eSystem::SetMouseState(idEvent, true , point.x, point.y);
eSystem::SetMouseState(idEvent, false, point.x, point.y);
}
}
/*
// http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html
-(void)sendEvent:(NSEvent *)event {
@ -91,4 +134,79 @@ static int32_t width=0, height=0;
EWOL_INFO("sendEvent : " << (float)point.x << " " << (float)point.y);
}
*/
// this generate all the event entry availlable ==> like a big keep focus ...
- (BOOL)acceptsFirstResponder {
return YES;
}
- (void)keyDown:(NSEvent *)theEvent {
bool thisIsAReapeateKey = false;
if ([theEvent isARepeat]) {
thisIsAReapeateKey = true;
}
NSString *str = [theEvent charactersIgnoringModifiers];
unichar c = [str characterAtIndex:0];
if (c < ' ' || c > '~') { // only ASCII please
c = 0;
return;
}
EWOL_DEBUG("KeyDown " << (char)c);
eSystem::SetKeyboard(guiKeyBoardMode, (char)c, true, thisIsAReapeateKey);
if (true==thisIsAReapeateKey) {
eSystem::SetKeyboard(guiKeyBoardMode, (char)c, false, thisIsAReapeateKey);
}
}
- (void)keyUp:(NSEvent *)theEvent {
bool thisIsAReapeateKey = false;
if ([theEvent isARepeat]) {
thisIsAReapeateKey = true;
}
EWOL_DEBUG("KeyUp ");
NSString *str = [theEvent charactersIgnoringModifiers];
unichar c = [str characterAtIndex:0];
if (c < ' ' || c > '~') { // only ASCII please
c = 0;
return;
}
eSystem::SetKeyboard(guiKeyBoardMode, (char)c, false, thisIsAReapeateKey);
if (true==thisIsAReapeateKey) {
eSystem::SetKeyboard(guiKeyBoardMode, (char)c, true, thisIsAReapeateKey);
}
}
#define FRAME_INTERVAL (0.01)
static NSTimer *timer = nil;
- (void)windowDidResignMain:(NSNotification *)notification {
// NSLog(@"window did resign main");
[timer invalidate];
//game_deactivate(); // freeze, pause
[self setNeedsDisplay:YES];
}
- (void)windowDidBecomeMain:(NSNotification *)notification {
// NSLog(@"window did become main");
//game_activate();
[self setNeedsDisplay:YES];
timer = [NSTimer timerWithTimeInterval:FRAME_INTERVAL
target:self
selector:@selector(timerEvent:)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}
- (void)timerEvent:(NSTimer *)t {
//run_game();
[self setNeedsDisplay:YES];
}
@end