Rework macOS retina support to remove deprecated code and fix scaled input issues in multimonitor
parent
77514ebddd
commit
f0db568bf8
|
|
@ -213,13 +213,8 @@ void LLUI::setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t& rem
|
|||
|
||||
void LLUI::setMousePositionScreen(S32 x, S32 y)
|
||||
{
|
||||
#if defined(LL_DARWIN)
|
||||
S32 screen_x = ll_round(((F32)x * getScaleFactor().mV[VX]) / LLView::getWindow()->getSystemUISize());
|
||||
S32 screen_y = ll_round(((F32)y * getScaleFactor().mV[VY]) / LLView::getWindow()->getSystemUISize());
|
||||
#else
|
||||
S32 screen_x = ll_round((F32)x * getScaleFactor().mV[VX]);
|
||||
S32 screen_y = ll_round((F32)y * getScaleFactor().mV[VY]);
|
||||
#endif
|
||||
|
||||
LLView::getWindow()->setCursorPosition(LLCoordGL(screen_x, screen_y).convert());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
{
|
||||
if (!mOldResize) //Maint-3288
|
||||
{
|
||||
NSSize dev_sz = gHiDPISupport ? [self convertSizeToBacking:[self frame].size] : [self frame].size;
|
||||
NSSize dev_sz = [self convertSizeToBacking:[self frame].size];
|
||||
callResize(dev_sz.width, dev_sz.height);
|
||||
}
|
||||
}
|
||||
|
|
@ -338,10 +338,6 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
|
||||
- (void) mouseDown:(NSEvent *)theEvent
|
||||
{
|
||||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
|
||||
// Apparently people still use this?
|
||||
if ([theEvent modifierFlags] & NSEventModifierFlagCommand &&
|
||||
!([theEvent modifierFlags] & NSEventModifierFlagControl) &&
|
||||
|
|
@ -370,7 +366,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
callRightMouseUp(mMousePos, [theEvent modifierFlags]);
|
||||
mSimulatedRightClick = false;
|
||||
} else {
|
||||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
NSPoint mPoint = [self convertPointToBacking:[theEvent locationInWindow]];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
callLeftMouseUp(mMousePos, [theEvent modifierFlags]);
|
||||
|
|
@ -379,32 +375,26 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
|
||||
- (void) rightMouseDown:(NSEvent *)theEvent
|
||||
{
|
||||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
callRightMouseDown(mMousePos, [theEvent modifierFlags]);
|
||||
}
|
||||
|
||||
- (void) rightMouseUp:(NSEvent *)theEvent
|
||||
{
|
||||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
callRightMouseUp(mMousePos, [theEvent modifierFlags]);
|
||||
}
|
||||
|
||||
- (void)mouseMoved:(NSEvent *)theEvent
|
||||
{
|
||||
NSPoint dev_delta = gHiDPISupport ? [self convertPointToBacking:NSMakePoint([theEvent deltaX], [theEvent deltaY])] : NSMakePoint([theEvent deltaX], [theEvent deltaY]);
|
||||
NSPoint dev_delta = [self convertPointToBacking:NSMakePoint([theEvent deltaX], [theEvent deltaY])];
|
||||
|
||||
float mouseDeltas[] = {
|
||||
float(dev_delta.x),
|
||||
float(dev_delta.y)
|
||||
};
|
||||
|
||||
|
||||
callDeltaUpdate(mouseDeltas, 0);
|
||||
|
||||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
|
||||
NSPoint mPoint = [self convertPointToBacking:[theEvent locationInWindow]];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
callMouseMoved(mMousePos, 0);
|
||||
|
|
@ -419,7 +409,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
// The old CoreGraphics APIs we previously relied on are now flagged as obsolete.
|
||||
// NSEvent isn't obsolete, and provides us with the correct deltas.
|
||||
|
||||
NSPoint dev_delta = gHiDPISupport ? [self convertPointToBacking:NSMakePoint([theEvent deltaX], [theEvent deltaY])] : NSMakePoint([theEvent deltaX], [theEvent deltaY]);
|
||||
NSPoint dev_delta = [self convertPointToBacking:NSMakePoint([theEvent deltaX], [theEvent deltaY])];
|
||||
|
||||
float mouseDeltas[] = {
|
||||
float(dev_delta.x),
|
||||
|
|
@ -428,7 +418,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
|
||||
callDeltaUpdate(mouseDeltas, 0);
|
||||
|
||||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
NSPoint mPoint = [self convertPointToBacking:[theEvent locationInWindow]];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
callMouseDragged(mMousePos, 0);
|
||||
|
|
@ -436,17 +426,11 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
|
||||
- (void) otherMouseDown:(NSEvent *)theEvent
|
||||
{
|
||||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
callOtherMouseDown(mMousePos, [theEvent modifierFlags], [theEvent buttonNumber]);
|
||||
}
|
||||
|
||||
- (void) otherMouseUp:(NSEvent *)theEvent
|
||||
{
|
||||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
callOtherMouseUp(mMousePos, [theEvent modifierFlags], [theEvent buttonNumber]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -111,16 +111,14 @@ void glSwapBuffers(void* context);
|
|||
CGLContextObj getCGLContextObj(GLViewRef view);
|
||||
unsigned long getVramSize(GLViewRef view);
|
||||
float getDeviceUnitSize(GLViewRef view);
|
||||
CGPoint getContentViewBoundsPosition(NSWindowRef window);
|
||||
CGSize getContentViewBoundsSize(NSWindowRef window);
|
||||
CGSize getDeviceContentViewSize(NSWindowRef window, GLViewRef view);
|
||||
CGRect getContentViewRect(NSWindowRef window);
|
||||
CGRect getBackingViewRect(NSWindowRef window, GLViewRef view);
|
||||
void getWindowSize(NSWindowRef window, float* size);
|
||||
void setWindowSize(NSWindowRef window, int width, int height);
|
||||
void getCursorPos(NSWindowRef window, float* pos);
|
||||
void makeWindowOrderFront(NSWindowRef window);
|
||||
void convertScreenToWindow(NSWindowRef window, float *coord);
|
||||
void convertWindowToScreen(NSWindowRef window, float *coord);
|
||||
void convertScreenToView(NSWindowRef window, float *coord);
|
||||
void convertRectToScreen(NSWindowRef window, float *coord);
|
||||
void convertRectFromScreen(NSWindowRef window, float *coord);
|
||||
void setWindowPos(NSWindowRef window, float* pos);
|
||||
|
|
|
|||
|
|
@ -259,19 +259,14 @@ float getDeviceUnitSize(GLViewRef view)
|
|||
return [(LLOpenGLView*)view convertSizeToBacking:NSMakeSize(1, 1)].width;
|
||||
}
|
||||
|
||||
CGPoint getContentViewBoundsPosition(NSWindowRef window)
|
||||
CGRect getContentViewRect(NSWindowRef window)
|
||||
{
|
||||
return [[(LLNSWindow*)window contentView] bounds].origin;
|
||||
return [[(LLNSWindow*)window contentView] bounds];
|
||||
}
|
||||
|
||||
CGSize getContentViewBoundsSize(NSWindowRef window)
|
||||
CGRect getBackingViewRect(NSWindowRef window, GLViewRef view)
|
||||
{
|
||||
return [[(LLNSWindow*)window contentView] bounds].size;
|
||||
}
|
||||
|
||||
CGSize getDeviceContentViewSize(NSWindowRef window, GLViewRef view)
|
||||
{
|
||||
return [(NSOpenGLView*)view convertRectToBacking:[[(LLNSWindow*)window contentView] bounds]].size;
|
||||
return [(NSOpenGLView*)view convertRectToBacking:[[(LLNSWindow*)window contentView] bounds]];
|
||||
}
|
||||
|
||||
void getWindowSize(NSWindowRef window, float* size)
|
||||
|
|
@ -314,9 +309,7 @@ void makeWindowOrderFront(NSWindowRef window)
|
|||
|
||||
void convertScreenToWindow(NSWindowRef window, float *coord)
|
||||
{
|
||||
NSRect point;
|
||||
point.origin.x = coord[0];
|
||||
point.origin.y = coord[1];
|
||||
NSRect point = NSMakeRect(coord[0], coord[1], 0,0);
|
||||
point = [(LLNSWindow*)window convertRectFromScreen:point];
|
||||
coord[0] = point.origin.x;
|
||||
coord[1] = point.origin.y;
|
||||
|
|
@ -324,28 +317,18 @@ void convertScreenToWindow(NSWindowRef window, float *coord)
|
|||
|
||||
void convertRectToScreen(NSWindowRef window, float *coord)
|
||||
{
|
||||
NSRect point;
|
||||
point.origin.x = coord[0];
|
||||
point.origin.y = coord[1];
|
||||
point.size.width = coord[2];
|
||||
point.size.height = coord[3];
|
||||
|
||||
point = [(LLNSWindow*)window convertRectToScreen:point];
|
||||
|
||||
coord[0] = point.origin.x;
|
||||
coord[1] = point.origin.y;
|
||||
coord[2] = point.size.width;
|
||||
coord[3] = point.size.height;
|
||||
NSRect rect = NSMakeRect(coord[0], coord[1], coord[2], coord[3]);;
|
||||
rect = [(LLNSWindow*)window convertRectToScreen:rect];
|
||||
|
||||
coord[0] = rect.origin.x;
|
||||
coord[1] = rect.origin.y;
|
||||
coord[2] = rect.size.width;
|
||||
coord[3] = rect.size.height;
|
||||
}
|
||||
|
||||
void convertRectFromScreen(NSWindowRef window, float *coord)
|
||||
{
|
||||
NSRect point;
|
||||
point.origin.x = coord[0];
|
||||
point.origin.y = coord[1];
|
||||
point.size.width = coord[2];
|
||||
point.size.height = coord[3];
|
||||
|
||||
NSRect point = NSMakeRect(coord[0], coord[1], coord[2], coord[3]);
|
||||
point = [(LLNSWindow*)window convertRectFromScreen:point];
|
||||
|
||||
coord[0] = point.origin.x;
|
||||
|
|
@ -354,23 +337,13 @@ void convertRectFromScreen(NSWindowRef window, float *coord)
|
|||
coord[3] = point.size.height;
|
||||
}
|
||||
|
||||
void convertScreenToView(NSWindowRef window, float *coord)
|
||||
{
|
||||
NSRect point;
|
||||
point.origin.x = coord[0];
|
||||
point.origin.y = coord[1];
|
||||
point.origin = [(LLNSWindow*)window convertScreenToBase:point.origin];
|
||||
point.origin = [[(LLNSWindow*)window contentView] convertPoint:point.origin fromView:nil];
|
||||
}
|
||||
|
||||
void convertWindowToScreen(NSWindowRef window, float *coord)
|
||||
{
|
||||
NSPoint point;
|
||||
point.x = coord[0];
|
||||
point.y = coord[1];
|
||||
point = [(LLNSWindow*)window convertToScreenFromLocalPoint:point relativeToView:[(LLNSWindow*)window contentView]];
|
||||
coord[0] = point.x;
|
||||
coord[1] = point.y;
|
||||
NSRect rect = NSMakeRect(coord[0], coord[1], 0, 0);
|
||||
rect = [(LLNSWindow*)window convertRectToScreen:rect];
|
||||
|
||||
coord[0] = rect.origin.x;
|
||||
coord[1] = [[NSScreen screens][0] frame].size.height - rect.origin.y;
|
||||
}
|
||||
|
||||
void closeWindow(NSWindowRef window)
|
||||
|
|
|
|||
|
|
@ -985,7 +985,7 @@ bool LLWindowMacOSX::getPosition(LLCoordScreen *position)
|
|||
}
|
||||
else if(mWindow)
|
||||
{
|
||||
const CGPoint & pos = getContentViewBoundsPosition(mWindow);
|
||||
CGPoint pos = getContentViewRect(mWindow).origin;
|
||||
|
||||
position->mX = pos.x;
|
||||
position->mY = pos.y;
|
||||
|
|
@ -1012,7 +1012,7 @@ bool LLWindowMacOSX::getSize(LLCoordScreen *size)
|
|||
}
|
||||
else if(mWindow)
|
||||
{
|
||||
const CGSize & sz = gHiDPISupport ? getDeviceContentViewSize(mWindow, mGLView) : getContentViewBoundsSize(mWindow);
|
||||
CGSize sz = getBackingViewRect(mWindow, mGLView).size;
|
||||
|
||||
size->mX = sz.width;
|
||||
size->mY = sz.height;
|
||||
|
|
@ -1038,7 +1038,7 @@ bool LLWindowMacOSX::getSize(LLCoordWindow *size)
|
|||
}
|
||||
else if(mWindow)
|
||||
{
|
||||
const CGSize & sz = gHiDPISupport ? getDeviceContentViewSize(mWindow, mGLView) : getContentViewBoundsSize(mWindow);
|
||||
CGSize sz = getBackingViewRect(mWindow, mGLView).size;
|
||||
|
||||
size->mX = sz.width;
|
||||
size->mY = sz.height;
|
||||
|
|
@ -1485,8 +1485,9 @@ bool LLWindowMacOSX::convertCoords(LLCoordScreen from, LLCoordWindow* to)
|
|||
|
||||
convertScreenToWindow(mWindow, mouse_point);
|
||||
|
||||
to->mX = mouse_point[0];
|
||||
to->mY = mouse_point[1];
|
||||
float scale_factor = getSystemUISize();
|
||||
to->mX = mouse_point[0] * scale_factor;
|
||||
to->mY = mouse_point[1] * scale_factor;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1498,9 +1499,9 @@ bool LLWindowMacOSX::convertCoords(LLCoordWindow from, LLCoordScreen *to)
|
|||
if(mWindow)
|
||||
{
|
||||
float mouse_point[2];
|
||||
|
||||
mouse_point[0] = from.mX;
|
||||
mouse_point[1] = from.mY;
|
||||
float scale_factor = getSystemUISize();
|
||||
mouse_point[0] = from.mX / scale_factor;
|
||||
mouse_point[1] = from.mY / scale_factor;
|
||||
|
||||
convertWindowToScreen(mWindow, mouse_point);
|
||||
|
||||
|
|
@ -2637,7 +2638,7 @@ MASK LLWindowMacOSX::modifiersToMask(S16 modifiers)
|
|||
|
||||
F32 LLWindowMacOSX::getSystemUISize()
|
||||
{
|
||||
return gHiDPISupport ? ::getDeviceUnitSize(mGLView) : LLWindow::getSystemUISize();
|
||||
return ::getDeviceUnitSize(mGLView);
|
||||
}
|
||||
|
||||
#if LL_OS_DRAGDROP_ENABLED
|
||||
|
|
|
|||
Loading…
Reference in New Issue