Revision: 18757
http://vice-emu.svn.sourceforge.net/vice-emu/?rev=18757&view=rev
Author: cnvogelg
Date: 2008-04-29 13:24:12 -0700 (Tue, 29 Apr 2008)
Log Message:
-----------
chris/cocoa-port: fixed display ratio in fullscreen mode. fixed mouse mode mapping.
Modified Paths:
--------------
branches/chris/cocoa-port/vice/src/arch/unix/macosx/cocoa/view/viceglview.h
branches/chris/cocoa-port/vice/src/arch/unix/macosx/cocoa/view/viceglview.m
Modified: branches/chris/cocoa-port/vice/src/arch/unix/macosx/cocoa/view/viceglview.h
===================================================================
--- branches/chris/cocoa-port/vice/src/arch/unix/macosx/cocoa/view/viceglview.h 2008-04-29 19:02:06 UTC (rev 18756)
+++ branches/chris/cocoa-port/vice/src/arch/unix/macosx/cocoa/view/viceglview.h 2008-04-29 20:24:12 UTC (rev 18757)
@@ -32,10 +32,15 @@
@interface VICEGLView : NSOpenGLView
{
NSSize textureSize;
+ float textureRatio;
BYTE *textureData;
+ NSSize viewSize;
+ NSPoint viewOrigin;
+
unsigned int lastKeyModifierFlags;
#define NUM_MODIFIERS 32
unsigned int modifierKeyCode[NUM_MODIFIERS];
+
BOOL trackMouse;
float mouseXScale;
float mouseYScale;
Modified: branches/chris/cocoa-port/vice/src/arch/unix/macosx/cocoa/view/viceglview.m
===================================================================
--- branches/chris/cocoa-port/vice/src/arch/unix/macosx/cocoa/view/viceglview.m 2008-04-29 19:02:06 UTC (rev 18756)
+++ branches/chris/cocoa-port/vice/src/arch/unix/macosx/cocoa/view/viceglview.m 2008-04-29 20:24:12 UTC (rev 18757)
@@ -115,11 +115,26 @@
NSRect rect = [self bounds];
NSSize size = rect.size;
- glViewport(0, 0, size.width, size.height);
+ NSPoint origin;
+ float ratio = size.width / size.height;
+ viewSize = size;
+ viewOrigin = NSMakePoint(0.0,0.0);
+ if(ratio < (textureRatio-0.01)) {
+ // place along y
+ viewSize.height = viewSize.width / textureRatio;
+ viewOrigin.y = (size.height - viewSize.height) / 2.0;
+ } else if(ratio > (textureRatio+0.01)) {
+ // place along x
+ viewSize.width = viewSize.height * textureRatio;
+ viewOrigin.x = (size.width - viewSize.width) / 2.0;
+ }
+
+ glViewport(viewOrigin.x, viewOrigin.y, viewSize.width, viewSize.height);
+
// adjust mouse scales
- mouseXScale = textureSize.width / size.width;
- mouseYScale = textureSize.height / size.height;
+ mouseXScale = textureSize.width / viewSize.width;
+ mouseYScale = textureSize.height / viewSize.height;
}
// redraw view
@@ -129,6 +144,8 @@
NSSize size = textureSize;
+ glClear(GL_COLOR_BUFFER_BIT);
+
glEnable(GL_TEXTURE_RECTANGLE_EXT);
glBegin(GL_QUADS);
{
@@ -145,6 +162,7 @@
- (void)setupTexture:(NSSize)size
{
textureSize = size;
+ textureRatio = size.width / size.height;
unsigned int dataSize = size.width * size.height * 4;
if(textureData==NULL)
@@ -366,10 +384,10 @@
- (void)mouseMoved:(NSEvent *)theEvent
{
- [self mouseMove:[theEvent locationInWindow]];
+ NSPoint location = [self convertPoint:[theEvent locationInWindow] fromView:nil];
+ [self mouseMove:location];
// check if mouse is in view
- NSPoint location = [self convertPoint:[theEvent locationInWindow] fromView:nil];
BOOL inView = NSPointInRect(location,[self bounds]);
if(inView) {
[self ensureMouseShown];
@@ -380,16 +398,18 @@
- (void)mouseDragged:(NSEvent *)theEvent
{
- [self mouseMove:[theEvent locationInWindow]];
+ NSPoint location = [self convertPoint:[theEvent locationInWindow] fromView:nil];
+ [self mouseMove:location];
}
- (void)mouseMove:(NSPoint)pos
{
if(trackMouse) {
- int px = (int)(pos.x * mouseXScale);
- int py = (int)(pos.y * mouseYScale);
int w = (int)textureSize.width;
int h = (int)textureSize.height;
+ int px = (int)((pos.x-viewOrigin.x) * mouseXScale);
+ int py = (int)((pos.y-viewOrigin.y) * mouseYScale);
+ py = h - 1 - py;
if((px>=0)&&(px<w)&&(py>=0)&&(py<h)) {
[[VICEApplication theMachineController] mouseMoveToX:px andY:py];
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|