16#ifdef DEBUG_ROOT_COCOA
28#include <Availability.h>
36#include "RConfigure.h"
53#pragma mark - Create a window or a view.
64 winRect.size.width =
w;
65 winRect.size.height =
h;
67 const NSUInteger styleMask = kTitledWindowMask | kClosableWindowMask |
68 kMiniaturizableWindowMask | kResizableWindowMask;
72 backing : NSBackingStoreBuffered
74 windowAttributes :
attr];
76 throw std::runtime_error(
"CreateTopLevelWindow failed");
89 viewRect.origin.x =
x;
90 viewRect.origin.y =
y;
91 viewRect.size.width =
w;
92 viewRect.size.height =
h;
96 throw std::runtime_error(
"CreateChildView failed");
101#pragma mark - root window (does not really exist, it's our desktop built of all screens).
107 assert(
attr != 0 &&
"GetRootWindowAttributes, parameter 'attr' is null");
110 NSArray *
const screens = [NSScreen screens];
111 assert(screens != nil &&
"screens array is nil");
112 NSScreen *
const mainScreen = [screens objectAtIndex : 0];
113 assert(mainScreen != nil &&
"screen with index 0 is nil");
118 "GetRootWindowAttributes, gVirtualX is either null or has a wrong type");
128 attr->fBorderWidth = 0;
129 attr->fYourEventMask = 0;
130 attr->fAllEventMasks = 0;
132 attr->fDepth = NSBitsPerPixelFromDepth([mainScreen depth]);
138#pragma mark - Coordinate conversions.
143 assert(window != nil &&
"ConvertPointFromBaseToScreen, parameter 'window' is nil");
149 tmpRect.origin = windowPoint;
150 tmpRect.size = NSMakeSize(1., 1.);
151 tmpRect = [window convertRectToScreen : tmpRect];
153 return tmpRect.origin;
159 assert(window != nil &&
"ConvertPointFromScreenToBase, parameter 'window' is nil");
165 tmpRect.origin = screenPoint;
166 tmpRect.size = NSMakeSize(1., 1.);
167 tmpRect = [window convertRectFromScreen : tmpRect];
169 return tmpRect.origin;
180 "GlobalYCocoaToROOT, gVirtualX is either nul or has a wrong type");
191 "GlobalXCocoaToROOT, gVirtualX is either nul or has a wrong type");
194 return int(xCocoa - frame.
fX);
201 "GlobalYROOTToCocoa, gVirtualX is either nul or has a wrong type");
211 "GlobalXROOTToCocoa, gVirtualX is either nul or has a wrong type");
214 return int(frame.
fX + xROOT);
220 assert(parentView != nil &&
"LocalYCocoaToROOT, parent view is nil");
222 return int(parentView.frame.size.height - yCocoa);
229 assert(parentView != nil &&
"LocalYROOTToCocoa, parent view is nil");
231 return int(parentView.frame.size.height - yROOT);
239 assert(drawable != nil &&
"LocalYROOTToCocoa, drawable is nil");
241 return int(drawable.fHeight - yROOT);
247 assert(from != nil &&
"TranslateToScreen, parameter 'from' is nil");
249 const NSPoint winPoint = [from convertPoint : point toView : nil];
261 assert(to != nil &&
"TranslateFromScreen, parameter 'to' is nil");
267 return [to convertPoint : point fromView : nil];
274 assert(from != nil &&
"TranslateCoordinates, parameter 'from' is nil");
275 assert(to != nil &&
"TranslateCoordinates, parameter 'to' is nil");
277 if ([from window] == [to window]) {
279 return [to convertPoint : sourcePoint fromView : from];
287 const NSPoint win1Point = [from convertPoint : sourcePoint toView : nil];
291 return [to convertPoint : win2Point fromView : nil];
298 assert(view != nil &&
"ScreenPointIsInView, parameter 'view' is nil");
301 point.x =
x, point.y =
y;
303 const NSRect viewFrame = view.frame;
305 if (point.x < 0 || point.x > viewFrame.size.width)
307 if (point.y < 0 || point.y > viewFrame.size.height)
313#pragma mark - Different FindView/Window functions iterating on the ROOT's windows/views.
321 NSArray *
const orderedWindows = [NSApp orderedWindows];
322 for (
NSWindow *window in orderedWindows) {
340 assert(children != nil &&
"FindDNDAwareViewInPoint, parameter 'children' is nil");
345 NSEnumerator *
const reverseEnumerator = [children reverseObjectEnumerator];
349 if (
child.fIsDNDAware &&
child.fID != dragWinID &&
child.fID != inputWinID)
353 inputWinID,
x,
y, maxDepth - 1);
372 NSArray *
const orderedWindows = [NSApp orderedWindows];
373 for (
NSWindow *window in orderedWindows) {
389 if (testView.fIsDNDAware && testView.fID != dragWinID && testView.fID != inputWinID)
393 NSArray *
const children = [testView subviews];
412 NSArray *
const orderedWindows = [NSApp orderedWindows];
413 for (
NSWindow *nsWindow in orderedWindows) {
425 const NSPoint mousePosition = [qWindow mouseLocationOutsideOfEventStream];
426 const NSSize windowSize = qWindow.frame.size;
427 if (mousePosition.x >= 0 && mousePosition.x <= windowSize.width &&
428 mousePosition.y >= 0 && mousePosition.y <= windowSize.height)
441 const NSPoint mousePosition = [topLevel mouseLocationOutsideOfEventStream];
455 assert(pointerEvent != nil &&
456 "FindWindowForPointerEvent, parameter 'pointerEvent' is nil");
460 NSArray *
const orderedWindows = [NSApp orderedWindows];
461 for (
NSWindow *nsWindow in orderedWindows) {
474 NSPoint mousePosition = [pointerEvent locationInWindow];
477 if ([pointerEvent window]) {
487 const NSSize windowSize = qWindow.frame.size;
488 if (mousePosition.x >= 0 && mousePosition.x <= windowSize.width &&
489 mousePosition.y >= 0 && mousePosition.y <= windowSize.height)
502 assert(pointerEvent != nil &&
503 "FindViewForPointerEvent, parameter 'pointerEvent' is nil");
508 NSPoint mousePosition = [pointerEvent locationInWindow];
509 if ([pointerEvent window])
522#pragma mark - Downscale image ("reading color bits" on retina macs).
527 assert(
w != 0 &&
h != 0 &&
"DownscaledImageData, invalid geometry");
528 assert(image !=
nullptr &&
"DonwscaledImageData, invalid parameter 'image'");
530 std::vector<unsigned char>
result;
533 }
catch (
const std::bad_alloc &) {
534 NSLog(
@"DownscaledImageData, memory allocation failed");
539 if (!colorSpace.
Get()) {
540 NSLog(
@"DownscaledImageData, CGColorSpaceCreateDeviceRGB failed");
545 w * 4, colorSpace.
Get(),
546 kCGImageAlphaPremultipliedLast, NULL, 0));
548 NSLog(
@"DownscaledImageData, CGBitmapContextCreateWithData failed");
552 CGContextDrawImage(ctx.
Get(), CGRectMake(0, 0,
w,
h), image);
557#pragma mark - "Focus management" - just make another window key window.
563 if (![NSApp isActive])
568 NSArray *
const orderedWindows = [NSApp orderedWindows];
569 for (
NSWindow *nsWindow in orderedWindows) {
581 [qWindow makeKeyAndOrderFront : qWindow];
586#pragma mark - 'shape mask' - to create a window with arbitrary (probably non-rectangle) shape.
591 assert(view != nil &&
"ClipToShapeMask, parameter 'view' is nil");
592 assert(ctx != 0 &&
"ClipToShapeMask, parameter 'ctx' is null");
594 QuartzWindow *
const topLevelParent = view.fQuartzWindow;
596 "ClipToShapeMask, fShapeCombineMask is nil on a top-level window");
598 "ClipToShapeMask, shape mask is null");
604 if (!view.fParentView) {
610 NSRect clipRect = view.frame;
612 clipRect.origin = [view.fParentView convertPoint : clipRect.origin
613 toView : [view window].contentView];
615 clipRect.origin.y + clipRect.size.height);
620 NSRectToCGRect(clipRect)));
621 clipRect.origin = NSPoint();
622 CGContextClipToMask(ctx, NSRectToCGRect(clipRect), clipImageGuard.
Get());
626 CGContextClipToRect(ctx,
rect);
631#pragma mark - Window's geometry and attributes.
636 assert(
attr != 0 &&
"SetWindowAttributes, parameter 'attr' is null");
637 assert(window != nil &&
"SetWindowAttributes, parameter 'window' is nil");
642 window.fBackgroundPixel =
attr->fBackgroundPixel;
645 window.fEventMask =
attr->fEventMask;
648 window.fBitGravity =
attr->fBitGravity;
651 window.fWinGravity =
attr->fWinGravity;
657 [qw setAlphaValue : 0.95];
660 window.fOverrideRedirect = YES;
667 assert(
win != nil &&
"GetWindowGeometry, parameter 'win' is nil");
668 assert(dst != 0 &&
"GetWindowGeometry, parameter 'dst' is null");
680 assert(window != nil &&
"GetWindowAttributes, parameter 'window' is nil");
681 assert(dst != 0 &&
"GetWindowAttributes, parameter 'attr' is null");
690 dst->
fDepth = window.fDepth;
695 dst->
fClass = window.fClass;
729#pragma mark - Comparators (I need them when changing a window's z-order).
733#ifdef MAC_OS_X_VERSION_10_11
739 id topView = (
id)context;
740 if (view1 == topView)
741 return NSOrderedAscending;
742 if (view2 == topView)
743 return NSOrderedDescending;
745 return NSOrderedSame;
750#ifdef MAC_OS_X_VERSION_10_11
756 id topView = (
id)context;
757 if (view1 == topView)
758 return NSOrderedDescending;
759 if (view2 == topView)
760 return NSOrderedAscending;
762 return NSOrderedSame;
765#pragma mark - Cursor's area.
770 assert(image != nil &&
"CursroHotSpot, parameter 'image' is nil");
772 const NSSize imageSize = image.size;
775 return NSMakePoint(imageSize.width, imageSize.height / 2);
777 return NSMakePoint(imageSize.width / 2, imageSize.height / 2);
784 const char *pngFileName = 0;
786 switch (currentCursor) {
788 pngFileName =
"move_cursor.png";
791 pngFileName =
"hor_arrow_cursor.png";
794 pngFileName =
"ver_arrow_cursor.png";
797 pngFileName =
"right_arrow_cursor.png";
800 pngFileName =
"rotate.png";
804 pngFileName =
"top_right_cursor.png";
808 pngFileName =
"top_left_cursor.png";
817 if (!path || path[0] == 0) {
822 NSString *nsPath = [NSString stringWithFormat :
@"%s", path];
823 NSImage *
const cursorImage = [[NSImage alloc] initWithContentsOfFile : nsPath];
829 NSCursor *
const customCursor = [[[NSCursor alloc] initWithImage : cursorImage
830 hotSpot : hotSpot] autorelease];
832 [cursorImage release];
853 switch (currentCursor) {
855 cursor = [NSCursor crosshairCursor];
858 cursor = [NSCursor arrowCursor];
861 cursor = [NSCursor openHandCursor];
864 cursor = [NSCursor resizeLeftCursor];
867 cursor = [NSCursor resizeRightCursor];
870 cursor = [NSCursor resizeUpCursor];
873 cursor = [NSCursor resizeDownCursor];
876 cursor = [NSCursor IBeamCursor];
894#pragma mark - Workarounds for a text view and its descendants.
905 return dynamic_cast<const TGTextView*
>(window);
911 assert(view != nil &&
"ViewIsTextView, parameter 'view' is nil");
919 assert(view != nil &&
"ViewIsTextViewFrame, parameter 'view' is nil");
934 if (!view.fParentView)
955 assert(view != nil &&
"ViewIsHtmlView, parameter 'view' is nil");
964 assert(view != nil &&
"ViewIsHtmlViewFrame, parameter 'view' is nil");
979 if (!view.fParentView)
988 assert(textView != nil &&
"FrameForTextView, parameter 'textView' is nil");
1001 assert(htmlView != nil &&
"FrameForHtmlView, parameter 'htmlView' is nil");
1011#pragma mark - Workarounds for 'paint out of paint events'.
1016 assert(view != nil &&
"LockFocus, parameter 'view' is nil");
1017 assert([view isKindOfClass : [
QuartzView class]] &&
1018 "LockFocus, QuartzView is expected");
1020 if ([view lockFocusIfCanDraw]) {
1021 NSGraphicsContext *nsContext = [NSGraphicsContext currentContext];
1022 assert(nsContext != nil &&
"LockFocus, currentContext is nil");
1024 assert(currContext != 0 &&
"LockFocus, graphicsPort is null");
1037 assert(view != nil &&
"UnlockFocus, parameter 'view' is nil");
1038 assert([view isKindOfClass : [
QuartzView class]] &&
1039 "UnlockFocus, QuartzView is expected");
1054#ifdef DEBUG_ROOT_COCOA
1056#pragma mark - 'loggers'.
1061void log_attributes(
const SetWindowAttributes_t *
attr,
unsigned winID)
1066 static std::ofstream logfile(
"win_attr.txt");
1070 logfile<<
"win "<<winID<<
": BackPixmap\n";
1072 logfile<<
"win "<<winID<<
": BackPixel\n";
1074 logfile<<
"win "<<winID<<
": BorderPixmap\n";
1076 logfile<<
"win "<<winID<<
": BorderPixel\n";
1078 logfile<<
"win "<<winID<<
": BorderWidth\n";
1080 logfile<<
"win "<<winID<<
": BitGravity\n";
1082 logfile<<
"win "<<winID<<
": WinGravity\n";
1084 logfile<<
"win "<<winID<<
": BackingStore\n";
1086 logfile<<
"win "<<winID<<
": BackingPlanes\n";
1088 logfile<<
"win "<<winID<<
": BackingPixel\n";
1090 logfile<<
"win "<<winID<<
": OverrideRedirect\n";
1092 logfile<<
"win "<<winID<<
": SaveUnder\n";
1094 logfile<<
"win "<<winID<<
": EventMask\n";
1096 logfile<<
"win "<<winID<<
": DontPropagate\n";
1098 logfile<<
"win "<<winID<<
": Colormap\n";
1100 logfile<<
"win "<<winID<<
": Cursor\n";
1107 NSLog(
@"button press mask");
1109 NSLog(
@"button release mask");
1111 NSLog(
@"exposure mask");
1113 NSLog(
@"pointer motion mask");
1115 NSLog(
@"button motion mask");
1117 NSLog(
@"enter notify mask");
1119 NSLog(
@"leave notify mask");
1127 std::vector<ROOT::MacOSX::X11::Command *> xorOps;
1130- (void) addXorCommand : (
ROOT::MacOSX::
X11::Command *) cmd
1132 xorOps.push_back(cmd);
1135- (void) drawRect : (NSRect) dirtyRect
1137 [
super drawRect:dirtyRect];
1138 NSGraphicsContext *nsContext = [NSGraphicsContext currentContext];
1148 CGContextSetRGBStrokeColor(cgContext, 0., 0., 0., 1.);
1149 CGContextSetLineWidth(cgContext, 1.);
1151 for (
auto *command : xorOps) {
1152 command->Execute(cgContext);
1165 if (self = [super
init])
1167 self.styleMask = NSWindowStyleMaskBorderless;
1169 self.hasShadow = NO;
1170 self.backgroundColor = NSColor.clearColor;
1171 self.ignoresMouseEvents = YES;
1177#pragma mark - suppress the normal window behavior.
1178- (BOOL)canBecomeKeyWindow
1182- (BOOL)canBecomeMainWindow
1195#pragma mark - QuartzWindow's life cycle.
1198- (
id) initWithContentRect : (NSRect) contentRect styleMask : (NSUInteger) windowStyle
1199 backing : (NSBackingStoreType) bufferingType defer : (BOOL) deferCreation
1202 self = [
super initWithContentRect : contentRect styleMask : windowStyle
1203 backing : bufferingType defer : deferCreation];
1207 [
self setAllowsConcurrentViewDrawing : NO];
1209 self.delegate = self;
1211 NSRect contentViewRect = contentRect;
1212 contentViewRect.origin.x = 0.f;
1213 contentViewRect.origin.y = 0.f;
1217 [
self setContentView : fContentView];
1238 assert(glView != nil &&
"-initWithGLView, parameter 'glView' is nil");
1240 const NSUInteger styleMask = kTitledWindowMask | kClosableWindowMask |
1241 kMiniaturizableWindowMask | kResizableWindowMask;
1243 NSRect contentRect = glView.frame;
1244 contentRect.origin = NSPoint();
1246 self = [
super initWithContentRect : contentRect styleMask : styleMask
1247 backing : NSBackingStoreBuffered defer : NO];
1251 [
self setAllowsConcurrentViewDrawing : NO];
1252 self.delegate = self;
1254 [
self setContentView : fContentView];
1278- (void) setContentView:(
NSView *)cv
1280 [
super setContentView:cv];
1288- (void) setFIsDeleted : (BOOL) deleted
1293#pragma mark - Forwaring: I want to forward a lot of property setters/getters to the content view.
1296- (void) forwardInvocation : (NSInvocation *) anInvocation
1301 if ([
fContentView respondsToSelector : [anInvocation selector]]) {
1304 [
super forwardInvocation : anInvocation];
1309- (NSMethodSignature*) methodSignatureForSelector : (
SEL) selector
1311 NSMethodSignature *signature = [
super methodSignatureForSelector : selector];
1315 signature = [
fContentView methodSignatureForSelector : selector];
1330 assert(window != nil &&
"-addTransientWindow:, parameter 'window' is nil");
1339 [
self addChildWindow : window ordered : NSWindowAbove];
1345- (void) makeKeyAndOrderFront : (
id) sender
1347#pragma unused(sender)
1352#ifdef MAC_OS_X_VERSION_10_9
1353 [
self setCollectionBehavior : NSWindowCollectionBehaviorMoveToActiveSpace];
1355 [
self setCollectionBehavior : NSWindowCollectionBehaviorCanJoinAllSpaces];
1358 [
super makeKeyAndOrderFront :
self];
1360 [
self setCollectionBehavior : NSWindowCollectionBehaviorDefault];
1364- (void) setFDelayedTransient : (BOOL) d
1376- (void) setFShapeCombineMask : (
QuartzImage *) mask
1379 [fShapeCombineMask release];
1387#pragma mark - X11Drawable's protocol.
1408 return self.screen.backingScaleFactor;
1426 return self.frame.size.width;
1435 assert(
fContentView != nil &&
"-fHeight:, content view is nil");
1441- (void) setDrawableSize : (NSSize) newSize
1444 assert(!(newSize.width < 0) &&
"-setDrawableSize:, width is negative");
1445 assert(!(newSize.height < 0) &&
"-setDrawableSize:, height is negative");
1447 NSRect frame = self.frame;
1449 if (frame.origin.x < -100000. || frame.origin.x > 100000.) {
1451 NSLog(
@"Attempting to set a frame with X: %g", frame.origin.x);
1452 frame.origin.x = 0.;
1457 frame.origin.y = frame.origin.y + frame.size.height - newSize.height - dY;
1458 frame.size = newSize;
1459 frame.size.height += dY;
1460 [
self setFrame : frame display : YES];
1464- (void) setX : (
int) x Y : (
int) y width : (
unsigned) w height : (
unsigned) h
1466 NSSize newSize = {};
1469 [
self setContentSize : newSize];
1472 NSPoint topLeft = {};
1476 [
self setFrameTopLeftPoint : topLeft];
1480- (void) setX : (
int) x Y : (
int) y
1482 NSPoint topLeft = {};
1486 [
self setFrameTopLeftPoint : topLeft];
1491 clipOrigin : (
X11::Point) clipXY toPoint : (
X11::Point) dstPoint
1500- (
unsigned char *) readColorBits : (
X11::Rectangle) area
1508#pragma mark - XorDrawinWindow/View
1520 [
self addChildWindow : special ordered : NSWindowAbove];
1528 assert(
win &&
"invalid (nil) parameter 'win'");
1529 auto frame = self.contentView.frame;
1530 frame = [
self convertRectToScreen:frame];
1531 [
win setFrame:frame display:NO];
1541 [
self removeChildWindow : win];
1548 auto children = [
self childWindows];
1566 [
cv addXorCommand : cmd.get()];
1568 [
cv setNeedsDisplay : YES];
1570 }
catch (
const std::exception &) {
1585 [
cv addXorCommand : cmd.get()];
1587 [
cv setNeedsDisplay : YES];
1588 }
catch (
const std::exception &) {
1599 auto cmd = std::make_unique<ROOT::MacOSX::X11::DrawPolyLineXor>(-1, att);
1601 cmd->setPoints(
n, pnts);
1604 [
cv addXorCommand : cmd.get()];
1606 [
cv setNeedsDisplay : YES];
1608 }
catch (
const std::exception &) {
1619 auto cmd = std::make_unique<ROOT::MacOSX::X11::DrawMarkerXor>(-1, att);
1621 cmd->setPoints(
n, pnts);
1624 [
cv addXorCommand : cmd.get()];
1626 [
cv setNeedsDisplay : YES];
1628 }
catch (
const std::exception &) {
1649#pragma mark - X11Window protocol's implementation.
1658- (void) setFParentView : (
QuartzView *) parent
1660#pragma unused(parent)
1678- (void) setFBackgroundPixel : (
unsigned long) backgroundColor
1684 CGFloat rgba[] = {0., 0., 0., 1.};
1687 [
self setBackgroundColor : [NSColor colorWithColorSpace : [NSColorSpace deviceRGBColorSpace] components : rgba count : 4]];
1716- (void) addChild : (
NSView<X11Window> *) child
1718 assert(
child != nil &&
"-addChild:, parameter 'child' is nil");
1723 "-addChild: gl view in a top-level window as content view is not supported");
1726 [
self setContentView : child];
1738 assert(
attr &&
"-getAttributes:, parameter 'attr' is nil");
1746 assert(
attr != 0 &&
"-setAttributes:, parameter 'attr' is null");
1748#ifdef DEBUG_ROOT_COCOA
1749 log_attributes(
attr, self.fID);
1764 [
self makeKeyAndOrderFront :
self];
1769 [
fMainWindow addChildWindow :
self ordered : NSWindowAbove];
1782 [
self makeKeyAndOrderFront :
self];
1787 [
fMainWindow addChildWindow :
self ordered : NSWindowAbove];
1810 [
self orderOut :
self];
1818#pragma mark - Events.
1821- (void) sendEvent : (
NSEvent *) theEvent
1831 bool generateFakeRelease =
false;
1833 const NSPoint windowPoint = [theEvent locationInWindow];
1835 if (windowPoint.x <= 4 || windowPoint.x >= self.fWidth - 4)
1836 generateFakeRelease =
true;
1838 if (windowPoint.y <= 4 || windowPoint.y >= self.fHeight - 4)
1839 generateFakeRelease =
true;
1841 const NSPoint viewPoint = [fContentView convertPoint : windowPoint fromView : nil];
1843 if (viewPoint.y <= 0 && windowPoint.y >= 0)
1844 generateFakeRelease =
true;
1847 "-sendEvent:, gVirtualX is either null or not of TGCocoa type");
1861 [
super sendEvent : theEvent];
1864#pragma mark - NSWindowDelegate's methods.
1867- (BOOL) windowShouldClose : (
id) sender
1869#pragma unused(sender)
1873 if ([[self childWindows] count])
1877 Event_t closeEvent = {};
1884 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
1885 "-windowShouldClose:, gVirtualX is either null or has a type different from TGCocoa");
1894- (void) windowDidBecomeKey : (NSNotification *) aNotification
1896#pragma unused(aNotification)
1904 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
1905 "-windowDidBecomeKey:, gVirtualX is null or not of TGCocoa type");
1906 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
1913- (void) windowDidResignKey : (NSNotification *) aNotification
1915#pragma unused(aNotification)
1921#pragma mark - Passive key grab info.
1926- (
id) initWithKey : (unichar) keyCode modifiers : (NSUInteger) modifiers
1928 if (self = [super init]) {
1937- (BOOL) matchKey : (unichar) keyCode modifiers : (NSUInteger) modifiers
1943- (BOOL) matchKey : (unichar) keyCode
1962#pragma mark - X11 property emulation.
1970@property (nonatomic, readonly)
Atom_t fType;
1979- (
id) initWithData : (
unsigned char *) data size : (
unsigned) dataSize type : (
Atom_t) type format : (
unsigned) format
1981 if (self = [super init]) {
1987 [
self resetPropertyData : data size : dataSize type : type format : format];
1996 [fPropertyData release];
2002- (void) resetPropertyData : (
unsigned char *) data size : (
unsigned) dataSize
2003 type : (
Atom_t) type format : (
unsigned) format
2005 [fPropertyData release];
2013 fPropertyData = [[NSData dataWithBytes : data length : dataSize] retain];
2032#pragma mark - QuartzView.
2065#pragma mark - Lifetime.
2070 if (self = [super initWithFrame : frame]) {
2084 [
self setCanDrawConcurrently : NO];
2086 [
self setHidden : YES];
2106 [fBackBuffer release];
2107 [fPassiveKeyGrabs release];
2108 [fX11Properties release];
2109 [fBackgroundPixmap release];
2113#pragma mark - Tracking area.
2118- (void) updateTrackingAreas
2120 [
super updateTrackingAreas];
2125 const Util::AutoreleasePool pool;
2127 if (NSArray *trackingArray = [self trackingAreas]) {
2128 const NSUInteger
size = [trackingArray count];
2129 for (NSUInteger i = 0; i <
size; ++i) {
2130 NSTrackingArea *
const t = [trackingArray objectAtIndex : i];
2131 [
self removeTrackingArea : t];
2135 const NSUInteger trackerOptions = NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited |
2136 NSTrackingActiveInActiveApp | NSTrackingInVisibleRect |
2137 NSTrackingEnabledDuringMouseDrag | NSTrackingCursorUpdate;
2140 frame.size.width = self.fWidth;
2141 frame.size.height = self.fHeight;
2143 NSTrackingArea *
const tracker = [[NSTrackingArea alloc] initWithRect : frame
2144 options : trackerOptions owner :
self userInfo : nil];
2145 [
self addTrackingArea : tracker];
2150- (void) updateTrackingAreasAfterRaise
2152 [
self updateTrackingAreas];
2154 for (QuartzView *childView in [self subviews])
2155 [childView updateTrackingAreasAfterRaise];
2158#pragma mark - X11Drawable protocol.
2175 return self.fQuartzWindow.fScaleFactor;
2181 return self.frame.origin.x;
2187 return self.frame.origin.y;
2193 return self.frame.size.width;
2199 return self.frame.size.height;
2203- (void) setDrawableSize : (NSSize) newSize
2205 assert(!(newSize.width < 0) &&
"-setDrawableSize, width is negative");
2206 assert(!(newSize.height < 0) &&
"-setDrawableSize, height is negative");
2212 NSRect frame = self.frame;
2213 frame.size = newSize;
2255- (void) setDirectDraw : (BOOL) mode
2271- (void) setX : (
int) x Y : (
int) y width : (
unsigned) w height : (
unsigned) h
2273 NSRect newFrame = {};
2274 newFrame.origin.x =
x;
2275 newFrame.origin.y =
y;
2276 newFrame.size.width =
w;
2277 newFrame.size.height =
h;
2279 self.frame = newFrame;
2283- (void) setX : (
int) x Y : (
int) y
2285 NSRect newFrame = self.frame;
2286 newFrame.origin.x =
x;
2287 newFrame.origin.y =
y;
2289 self.frame = newFrame;
2293- (void) copyImage : (
QuartzImage *) srcImage area : (
X11::Rectangle) area
2295 toPoint : (
X11::Point) dstPoint
2298 assert(srcImage != nil &&
2299 "-copyImage:area:withMask:clipOrigin:toPoint:, parameter 'srcImage' is nil");
2300 assert(srcImage.
fImage != nil &&
2301 "-copyImage:area:withMask:clipOrigin:toPoint:, srcImage.fImage is nil");
2304 assert(self.fContext != 0 &&
2305 "-copyImage:area:withMask:clipOrigin:toPoint:, self.fContext is null");
2308 NSLog(
@"QuartzView: -copyImage:area:withMask:clipOrigin:toPoint:,"
2309 " srcRect and copyRect do not intersect");
2315 CGImageRef subImage = 0;
2316 bool needSubImage =
false;
2317 if (area.fX || area.fY || area.fWidth != srcImage.
fWidth || area.fHeight != srcImage.
fHeight) {
2318 needSubImage =
true;
2321 NSLog(
@"QuartzView: -copyImage:area:withMask:clipOrigin:toPoint:,"
2322 " subimage creation failed");
2326 subImage = srcImage.
fImage;
2329 const Quartz::CGStateGuard ctxGuard(self.fContext);
2332 CGContextTranslateCTM(self.fContext, 0., self.fHeight);
2333 CGContextScaleCTM(self.fContext, 1., -1.);
2337 assert(
mask.fImage != nil &&
2338 "-copyImage:area:withMask:clipOrigin:toPoint:, mask.fImage is nil");
2339 assert(CGImageIsMask(
mask.fImage) ==
true &&
2340 "-copyImage:area:withMask:clipOrigin:toPoint:, mask.fImage is not a mask");
2344 const CGRect clipRect = CGRectMake(clipXY.fX, clipY,
mask.fWidth,
mask.fHeight);
2345 CGContextClipToMask(self.fContext, clipRect,
mask.fImage);
2352 const CGRect imageRect = CGRectMake(dstPoint.fX, dstY, area.fWidth, area.fHeight);
2353 CGContextDrawImage(self.fContext, imageRect, subImage);
2356 CGImageRelease(subImage);
2360- (void) copyView : (
QuartzView *) srcView area : (
X11::Rectangle) area toPoint : (
X11::Point) dstPoint
2365 assert(srcView != nil &&
"-copyView:area:toPoint:, parameter 'srcView' is nil");
2367 const NSRect frame = [srcView frame];
2369 NSBitmapImageRep *
const imageRep = [srcView bitmapImageRepForCachingDisplayInRect : frame];
2371 NSLog(
@"QuartzView: -copyView:area:toPoint failed");
2375 assert(srcView != nil &&
"-copyView:area:toPoint:, parameter 'srcView' is nil");
2376 assert(self.fContext != 0 &&
"-copyView:area:toPoint, self.fContext is null");
2381 CGContextRef ctx = srcView.
fContext;
2383 [srcView cacheDisplayInRect : frame toBitmapImageRep : imageRep];
2387 const CGRect subImageRect = CGRectMake(area.fX, area.fY, area.fWidth, area.fHeight);
2388 const Util::CFScopeGuard<CGImageRef> subImage(CGImageCreateWithImageInRect(imageRep.CGImage, subImageRect));
2390 if (!subImage.Get()) {
2391 NSLog(
@"QuartzView: -copyView:area:toPoint, CGImageCreateWithImageInRect failed");
2395 const Quartz::CGStateGuard ctxGuard(self.fContext);
2396 const CGRect imageRect = CGRectMake(dstPoint.fX,
2397 [self visibleRect].size.height - (CGFloat(dstPoint.fY) + area.fHeight),
2398 area.fWidth, area.fHeight);
2400 CGContextTranslateCTM(self.fContext, 0., [self visibleRect].size.height);
2401 CGContextScaleCTM(self.fContext, 1., -1.);
2403 CGContextDrawImage(self.fContext, imageRect, subImage.Get());
2407- (void) copyPixmap : (
QuartzPixmap *) srcPixmap area : (
X11::Rectangle) area
2408 withMask : (
QuartzImage *) mask clipOrigin : (
X11::Point) clipXY toPoint : (
X11::Point) dstPoint
2411 assert(srcPixmap != nil &&
"-copyPixmap:area:withMask:clipOrigin:toPoint:, parameter 'srcPixmap' is nil");
2414 NSLog(
@"QuartzView: -copyPixmap:area:withMask:clipOrigin:toPoint,"
2415 " no intersection between pixmap rectangle and cropArea");
2420 assert(self.fContext != 0 &&
2421 "-copyPixmap:area:withMask:clipOrigin:toPoint:, self.fContext is null");
2424 const Quartz::CGStateGuard ctxGuard(self.fContext);
2426 CGContextTranslateCTM(self.fContext, 0., self.frame.size.height);
2427 CGContextScaleCTM(self.fContext, 1., -1.);
2429 const Util::CFScopeGuard<CGImageRef> imageFromPixmap([srcPixmap createImageFromPixmap]);
2430 assert(imageFromPixmap.Get() != 0 &&
2431 "-copyPixmap:area:withMask:clipOrigin:toPoint:, createImageFromPixmap failed");
2433 CGImageRef subImage = 0;
2434 bool needSubImage =
false;
2435 if (area.fX || area.fY || area.fWidth != srcPixmap.
fWidth || area.fHeight != srcPixmap.
fHeight) {
2436 needSubImage =
true;
2437 const CGRect subImageRect = CGRectMake(area.fX, area.fY, area.fHeight, area.fWidth);
2438 subImage = CGImageCreateWithImageInRect(imageFromPixmap.Get(), subImageRect);
2440 NSLog(
@"QuartzView: -copyImage:area:withMask:clipOrigin:toPoint:,"
2441 " subimage creation failed");
2445 subImage = imageFromPixmap.Get();
2448 assert(
mask.fImage != nil &&
2449 "-copyPixmap:area:withMask:clipOrigin:toPoint:, mask.fImage is nil");
2450 assert(CGImageIsMask(
mask.fImage) ==
true &&
2451 "-copyPixmap:area:withMask:clipOrigin:toPoint:, mask.fImage is not a mask");
2456 const CGRect clipRect = CGRectMake(clipXY.fX, clipY,
mask.fWidth,
mask.fHeight);
2457 CGContextClipToMask(self.fContext, clipRect,
mask.fImage);
2462 const CGRect imageRect = CGRectMake(dstPoint.fX, dstY, area.fWidth, area.fHeight);
2463 CGContextDrawImage(self.fContext, imageRect, imageFromPixmap.Get());
2466 CGImageRelease(subImage);
2471- (void) copyImage : (
QuartzImage *) srcImage area : (
X11::Rectangle) area
2472 toPoint : (
X11::Point) dstPoint
2474 assert(srcImage != nil &&
"-copyImage:area:toPoint:, parameter 'srcImage' is nil");
2475 assert(srcImage.
fImage != nil &&
"-copyImage:area:toPoint:, srcImage.fImage is nil");
2476 assert(self.fContext != 0 &&
"-copyImage:area:toPoint:, fContext is null");
2479 NSLog(
@"QuartzView: -copyImage:area:toPoint, image and copy area do not intersect");
2483 CGImageRef subImage = 0;
2484 bool needSubImage =
false;
2485 if (area.fX || area.fY || area.fWidth != srcImage.
fWidth || area.fHeight != srcImage.
fHeight) {
2486 needSubImage =
true;
2489 NSLog(
@"QuartzView: -copyImage:area:toPoint:, subimage creation failed");
2493 subImage = srcImage.
fImage;
2495 const Quartz::CGStateGuard ctxGuard(self.fContext);
2497 CGContextTranslateCTM(self.fContext, 0., self.fHeight);
2498 CGContextScaleCTM(self.fContext, 1., -1.);
2503 const CGRect imageRect = CGRectMake(dstPoint.fX, dstY, area.fWidth, area.fHeight);
2504 CGContextDrawImage(self.fContext, imageRect, subImage);
2507 CGImageRelease(subImage);
2511- (void) copy : (
NSObject<X11Drawable> *) src area : (
X11::Rectangle) area
2512 withMask : (
QuartzImage *)mask clipOrigin : (
X11::Point) clipXY toPoint : (
X11::Point) dstPoint
2514 assert(
src != nil &&
"-copy:area:withMask:clipOrigin:toPoint:, parameter 'src' is nil");
2515 assert(area.fWidth && area.fHeight &&
"-copy:area:withMask:clipOrigin:toPoint:, area to copy is empty");
2521 [
self copyView : (QuartzView *)qw.fContentView area : area toPoint : dstPoint];
2524 [
self copyView : (QuartzView *)src area : area toPoint : dstPoint];
2526 [
self copyPixmap : (QuartzPixmap *)src area : area withMask : mask clipOrigin : clipXY toPoint : dstPoint];
2528 [
self copyImage : (QuartzImage *)src area : area withMask : mask clipOrigin : clipXY toPoint : dstPoint];
2530 assert(0 &&
"-copy:area:withMask:clipOrigin:toPoint:, src is of unknown type");
2535- (
unsigned char *) readColorBits : (
X11::Rectangle) area
2541 assert(area.fWidth && area.fHeight &&
"-readColorBits:, area to copy is empty");
2544 NSRect visRect = [
self visibleRect];
2549 if (visRect.origin.y < 0) {
2550 visRect.size.height += visRect.origin.y;
2551 visRect.origin.y = 0.;
2553 if (visRect.origin.x < 0) {
2554 visRect.size.width += visRect.origin.x;
2555 visRect.origin.x = 0.;
2558 const X11::Rectangle srcRect(
int(visRect.origin.x),
int(visRect.origin.y),
2559 unsigned(visRect.size.width),
unsigned(visRect.size.height));
2562 NSLog(
@"QuartzView: -readColorBits:, visible rect of view and copy area do not intersect");
2567 NSBitmapImageRep *
const imageRep = [
self bitmapImageRepForCachingDisplayInRect : visRect];
2569 NSLog(
@"QuartzView: -readColorBits:, bitmapImageRepForCachingDisplayInRect failed");
2574 [
self cacheDisplayInRect : visRect toBitmapImageRep : imageRep];
2575 self.fContext = ctx;
2577 const NSInteger bitsPerPixel = [
imageRep bitsPerPixel];
2579 assert(bitsPerPixel == 32 &&
"-readColorBits:, no alpha channel???");
2580 const NSInteger bytesPerRow = [
imageRep bytesPerRow];
2581 unsigned dataWidth = bytesPerRow / (bitsPerPixel / 8);
2583 unsigned char *srcData =
nullptr;
2584 std::vector<unsigned char> downscaled;
2585 if ([self.window.screen backingScaleFactor] > 1 && imageRep.CGImage) {
2587 if (downscaled.size())
2588 srcData = &downscaled[0];
2589 dataWidth = area.fWidth;
2594 NSLog(
@"QuartzView: -readColorBits:, failed to obtain backing store contents");
2599 unsigned char *
data =
nullptr;
2603 }
catch (
const std::bad_alloc &) {
2604 NSLog(
@"QuartzView: -readColorBits:, memory allocation failed");
2608 unsigned char *dstPixel =
data;
2609 const unsigned char *
line = srcData + area.fY * dataWidth * 4;
2610 const unsigned char *srcPixel =
line + area.fX * 4;
2612 for (
unsigned i = 0; i < area.fHeight; ++i) {
2613 for (
unsigned j = 0; j < area.fWidth; ++j, srcPixel += 4, dstPixel += 4) {
2614 dstPixel[0] = srcPixel[2];
2615 dstPixel[1] = srcPixel[1];
2616 dstPixel[2] = srcPixel[0];
2617 dstPixel[3] = srcPixel[3];
2620 line += dataWidth * 4;
2621 srcPixel =
line + area.fX * 4;
2628- (void) setFBackgroundPixmap : (
QuartzImage *) pixmap
2631 [fBackgroundPixmap release];
2650 if ([self isHidden])
2654 if ([parent isHidden])
2672- (void) setFHasFocus : (BOOL) focus
2674#pragma unused(focus)
2691 [fBackBuffer release];
2725- (void) activateGrab : (
unsigned) eventMask ownerEvents : (BOOL) ownerEvents
2741- (BOOL) acceptsCrossingEvents : (
unsigned) eventMask
2760- (void)didAddSubview:(
NSView *)subview
2762 [
super didAddSubview:subview];
2763 self.wantsLayer = YES;
2764 self.layer.masksToBounds = YES;
2768- (void)willRemoveSubview:(
NSView *)subview
2770 [
super willRemoveSubview:subview];
2771 self.wantsLayer = YES;
2772 self.layer.masksToBounds = self.subviews.count > 1;
2776- (void) addChild : (
NSView<X11Window> *) child
2778 assert(
child != nil &&
"-addChild:, parameter 'child' is nil");
2780 [
self addSubview : child];
2781 child.fParentView = self;
2787 assert(
attr != 0 &&
"-getAttributes:, parameter 'attr' is null");
2795 assert(
attr != 0 &&
"-setAttributes:, parameter 'attr' is null");
2797#ifdef DEBUG_ROOT_COCOA
2809 [
self removeFromSuperview];
2810 [
parent addSubview :
self];
2811 [
self setHidden : NO];
2817 [
self setHidden : NO];
2830 [
self setHidden : YES];
2840- (void) setOverlapped : (BOOL) overlap
2844 [
child setOverlapped : overlap];
2861 using namespace X11;
2864 if (self == sibling)
2866 if ([sibling isHidden])
2869 if (NSEqualRects(sibling.frame, self.frame)) {
2870 [
sibling setOverlapped : YES];
2877 [
self setHidden : NO];
2879 [
fParentView sortSubviewsUsingFunction : CompareViewsToRaise context : (void *)
self];
2881 [
self updateTrackingAreasAfterRaise];
2883 [
self setNeedsDisplay : YES];
2891 using namespace X11;
2893 NSEnumerator *
const reverseEnumerator = [[
fParentView subviews] reverseObjectEnumerator];
2894 for (
QuartzView *sibling in reverseEnumerator) {
2895 if (sibling == self)
2898 if (NSEqualRects(sibling.frame, self.frame)) {
2903 [
sibling setNeedsDisplay : YES];
2906 [
self setHidden : YES];
2912 [
fParentView sortSubviewsUsingFunction : CompareViewsToLower context : (void*)
self];
2929 "-configureNotifyTree, gVirtualX is either null or has type different from TGCocoa");
2935 [v configureNotifyTree];
2939#pragma mark - Key grabs.
2942- (void) addPassiveKeyGrab : (unichar) keyCode modifiers : (NSUInteger) modifiers
2946 modifiers : modifiers];
2947 [fPassiveKeyGrabs addObject : newGrab];
2952- (void) removePassiveKeyGrab : (unichar) keyCode modifiers : (NSUInteger) modifiers
2954 const NSUInteger count = [fPassiveKeyGrabs count];
2955 for (NSUInteger i = 0; i < count; ++i) {
2957 if ([
grab matchKey : keyCode modifiers : modifiers]) {
2958 [fPassiveKeyGrabs removeObjectAtIndex : i];
2965- (
PassiveKeyGrab *) findPassiveKeyGrab : (unichar) keyCode modifiers : (NSUInteger) modifiers
2967 NSEnumerator *
const enumerator = [fPassiveKeyGrabs objectEnumerator];
2969 if ([
grab matchKey : keyCode modifiers : modifiers])
2980 NSEnumerator *
const enumerator = [fPassiveKeyGrabs objectEnumerator];
2982 if ([
grab matchKey : keyCode])
2989#pragma mark - Painting mechanics.
2992- (void) drawRect : (NSRect) dirtyRect
2994#pragma unused(dirtyRect)
2996 using namespace X11;
3001 if (ViewIsTextViewFrame(self,
true) ||ViewIsHtmlViewFrame(self,
true))
3004 NSGraphicsContext *
const nsContext = [NSGraphicsContext currentContext];
3005 assert(nsContext != nil &&
"-drawRect:, currentContext returned nil");
3011 assert(
fContext != 0 &&
"-drawRect:, graphicsPort returned null");
3016 if (self.fQuartzWindow.fShapeCombineMask)
3026 if (ViewIsTextView(self)) {
3028 [NSColor.whiteColor setFill];
3029 NSRect frame = self.frame;
3049 gClient->CancelRedraw(window);
3057 [
self copy : fBackBuffer area : copyArea withMask : nil
3058 clipOrigin : X11::Point() toPoint : X11::Point()];
3062#ifdef DEBUG_ROOT_COCOA
3063 CGContextSetRGBStrokeColor(
fContext, 1., 0., 0., 1.);
3064 CGContextStrokeRect(
fContext, dirtyRect);
3069#ifdef DEBUG_ROOT_COCOA
3070 NSLog(
@"QuartzView: -drawRect: method, no window for id %u was found",
fID);
3076#pragma mark - Geometry.
3079- (void) setFrame : (NSRect) newFrame
3084 if (NSEqualRects(newFrame, self.frame))
3087 [
super setFrame : newFrame];
3091- (void) setFrameSize : (NSSize) newSize
3095 [
super setFrameSize : newSize];
3098 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3099 "setFrameSize:, gVirtualX is either null or has a type, different from TGCocoa");
3100 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3104 [
self setNeedsDisplay : YES];
3107#pragma mark - Event handling.
3110- (void) mouseDown : (
NSEvent *) theEvent
3112 assert(
fID != 0 &&
"-mouseDown:, fID is 0");
3114 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3115 "-mouseDown:, gVirtualX is either null or has a type, different from TGCocoa");
3116 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3121- (void) scrollWheel : (
NSEvent*) theEvent
3123 assert(
fID != 0 &&
"-scrollWheel:, fID is 0");
3126 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3127 "-scrollWheel:, gVirtualX is either null or has a type, different from TGCocoa");
3129 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3130 const CGFloat deltaY = [theEvent deltaY];
3134 }
else if (deltaY > 0) {
3140#ifdef DEBUG_ROOT_COCOA
3142- (void) printViewInformation
3144 assert(
fID != 0 &&
"-printWindowInformation, fID is 0");
3145 const TGWindow *
const window =
gClient->GetWindowById(
fID);
3146 assert(window != 0 &&
"printWindowInformation, window not found");
3148 NSLog(
@"-----------------View %u info:---------------------",
fID);
3149 NSLog(
@"ROOT's window class is %s", window->
IsA()->
GetName());
3150 NSLog(
@"event mask is:");
3152 NSLog(
@"grab mask is:");
3154 NSLog(
@"view's geometry: x == %g, y == %g, w == %g, h == %g", self.frame.origin.x,
3155 self.frame.origin.y, self.frame.size.width, self.frame.size.height);
3156 NSLog(
@"----------------End of view info------------------");
3161- (void) rightMouseDown : (
NSEvent *) theEvent
3163 assert(
fID != 0 &&
"-rightMouseDown:, fID is 0");
3165#ifdef DEBUG_ROOT_COCOA
3166 [
self printViewInformation];
3169 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3170 "-rightMouseDown:, gVirtualX is either null or has type different from TGCocoa");
3171 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3176- (void) otherMouseDown : (
NSEvent *) theEvent
3178 assert(
fID != 0 &&
"-otherMouseDown:, fID is 0");
3182 if ([theEvent buttonNumber] == 2) {
3185 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3186 "-otherMouseDown:, gVirtualX is either null or has type different from TGCocoa");
3187 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3193- (void) mouseUp : (
NSEvent *) theEvent
3195 assert(
fID != 0 &&
"-mouseUp:, fID is 0");
3197 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) &&
3198 "-mouseUp:, gVirtualX is either null or has type different from TGCocoa");
3199 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3204- (void) rightMouseUp : (
NSEvent *) theEvent
3207 assert(
fID != 0 &&
"-rightMouseUp:, fID is 0");
3209 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3210 "-rightMouseUp:, gVirtualX is either null or has type different from TGCocoa");
3212 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3217- (void) otherMouseUp : (
NSEvent *) theEvent
3219 assert(
fID != 0 &&
"-otherMouseUp:, fID is 0");
3222 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3223 "-otherMouseUp:, gVirtualX is either null or has type different from TGCocoa");
3224 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3229- (void) mouseEntered : (
NSEvent *) theEvent
3231 assert(
fID != 0 &&
"-mouseEntered:, fID is 0");
3232 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3233 "-mouseEntered:, gVirtualX is null or not of TGCocoa type");
3235 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3240- (void) mouseExited : (
NSEvent *) theEvent
3242 assert(
fID != 0 &&
"-mouseExited:, fID is 0");
3244 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3245 "-mouseExited:, gVirtualX is null or not of TGCocoa type");
3247 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3252- (void) mouseMoved : (
NSEvent *) theEvent
3254 assert(
fID != 0 &&
"-mouseMoved:, fID is 0");
3259 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3260 "-mouseMoved:, gVirtualX is null or not of TGCocoa type");
3262 TGCocoa *vx =
static_cast<TGCocoa *
>(
gVirtualX);
3267- (void) mouseDragged : (
NSEvent *) theEvent
3269 assert(
fID != 0 &&
"-mouseDragged:, fID is 0");
3271 TGCocoa *
const vx =
dynamic_cast<TGCocoa *
>(
gVirtualX);
3272 assert(vx != 0 &&
"-mouseDragged:, gVirtualX is null or not of TGCocoa type");
3278- (void) rightMouseDragged : (
NSEvent *) theEvent
3280 assert(
fID != 0 &&
"-rightMouseDragged:, fID is 0");
3282 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3283 "-rightMouseDragged:, gVirtualX is null or not of TGCocoa type");
3285 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3290- (void) otherMouseDragged : (
NSEvent *) theEvent
3292 assert(
fID != 0 &&
"-otherMouseDragged:, fID is 0");
3294 if ([theEvent buttonNumber] == 2) {
3295 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3296 "-otherMouseDragged:, gVirtualX is null or not of TGCocoa type");
3297 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3303- (void) keyDown : (
NSEvent *) theEvent
3305 assert(
fID != 0 &&
"-keyDown:, fID is 0");
3307 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3308 "-keyDown:, gVirtualX is null or not of TGCocoa type");
3310 NSView<X11Window> *eventView = self;
3312 eventView = pointerView;
3314 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3319- (void) keyUp : (
NSEvent *) theEvent
3321 assert(
fID != 0 &&
"-keyUp:, fID is 0");
3323 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
3324 "-keyUp:, gVirtualX is null or not of TGCocoa type");
3326 TGCocoa *
const vx =
static_cast<TGCocoa *
>(
gVirtualX);
3327 NSView<X11Window> *eventView = self;
3329 eventView = pointerView;
3334#pragma mark - First responder stuff.
3337- (BOOL) acceptsFirstMouse : (
NSEvent *) theEvent
3339#pragma unused(theEvent)
3344- (BOOL) acceptsFirstResponder
3349#pragma mark - Cursors.
3352- (void) setFCurrentCursor : (
ECursor) cursor
3356 [
self.fQuartzWindow invalidateCursorRectsForView :
self];
3361- (NSCursor *) createCustomCursor
3363 const char *pngFileName = 0;
3367 pngFileName =
"move_cursor.png";
3370 pngFileName =
"hor_arrow_cursor.png";
3373 pngFileName =
"ver_arrow_cursor.png";
3376 pngFileName =
"right_arrow_cursor.png";
3379 pngFileName =
"rotate.png";
3383 pngFileName =
"top_right_cursor.png";
3387 pngFileName =
"top_left_cursor.png";
3394 const Util::ScopedArray<const char> arrayGuard(path);
3396 if (!path || path[0] == 0) {
3401 NSString *nsPath = [NSString stringWithFormat : @"%s", path];
3402 NSImage *
const cursorImage = [[NSImage alloc] initWithContentsOfFile : nsPath];
3408 NSCursor *
const customCursor = [[[NSCursor alloc] initWithImage : cursorImage
3409 hotSpot : hotSpot] autorelease];
3411 [cursorImage release];
3413 return customCursor;
3420- (void) resetCursorRects
3423 [
self addCursorRect :
self.visibleRect cursor : cursor];
3427- (void) cursorUpdate
3437- (void) cursorUpdate : (
NSEvent *) event
3439#pragma unused(event)
3451 [
self performSelector : @selector(cursorUpdate) withObject : nil afterDelay : 0.05f];
3454#pragma mark - Emulated X11 properties.
3457- (void) setProperty : (const
char *) propName data : (
unsigned char *) propData
3458 size : (
unsigned) dataSize forType : (
Atom_t) dataType format : (
unsigned) format
3460 assert(propName != 0 &&
"-setProperty:data:size:forType:, parameter 'propName' is null");
3461 assert(propData != 0 &&
"-setProperty:data:size:forType:, parameter 'propData' is null");
3462 assert(dataSize != 0 &&
"-setProperty:data:size:forType:, parameter 'dataSize' is 0");
3464 NSString *
const key = [
NSString stringWithCString : propName encoding : NSASCIIStringEncoding];
3469 [
property resetPropertyData : propData size : dataSize type : dataType format : format];
3473 type : dataType format : format];
3474 [fX11Properties setObject : property forKey : key];
3480- (BOOL) hasProperty : (const
char *) propName
3482 assert(propName != 0 &&
"-hasProperty:, propName parameter is null");
3484 NSString *
const key = [
NSString stringWithCString : propName encoding : NSASCIIStringEncoding];
3487 return property != nil;
3491- (
unsigned char *) getProperty : (const
char *) propName returnType : (
Atom_t *) type
3492 returnFormat : (
unsigned *) format nElements : (
unsigned *) nElements
3494 assert(propName != 0 &&
3495 "-getProperty:returnType:returnFormat:nElements:, parameter 'propName' is null");
3497 "-getProperty:returnType:returnFormat:nElements:, parameter 'type' is null");
3499 "-getProperty:returnType:returnFormat:nElements:, parameter 'format' is null");
3500 assert(nElements != 0 &&
3501 "-getProperty:returnType:returnFormat:nElements:, parameter 'nElements' is null");
3503 NSString *
const key = [
NSString stringWithCString : propName encoding : NSASCIIStringEncoding];
3506 "-getProperty:returnType:returnFormat:nElements, property not found");
3508 NSData *
const propData =
property.fPropertyData;
3510 const NSUInteger dataSize = [
propData length];
3511 unsigned char *buff = 0;
3513 buff =
new unsigned char[
dataSize]();
3514 }
catch (
const std::bad_alloc &) {
3516 NSLog(
@"QuartzWindow: -getProperty:returnType:returnFormat:nElements:,"
3517 " memory allocation failed");
3521 [
propData getBytes : buff length : dataSize];
3522 *
format =
property.fFormat;
3524 *nElements = dataSize;
3527 *nElements= dataSize / 2;
3529 *nElements = dataSize / 4;
3531 *
type =
property.fType;
3537- (void) removeProperty : (const
char *) propName
3539 assert(propName != 0 &&
"-removeProperty:, parameter 'propName' is null");
3541 NSString *
const key = [
NSString stringWithCString : propName
3542 encoding : NSASCIIStringEncoding];
3543 [fX11Properties removeObjectForKey : key];
3548- (NSDragOperation) draggingEntered : (
id<NSDraggingInfo>) sender
3550 NSPasteboard *
const pasteBoard = [
sender draggingPasteboard];
3551 const NSDragOperation sourceDragMask = [
sender draggingSourceOperationMask];
3553 if ([[pasteBoard types] containsObject : NSFilenamesPboardType] && (sourceDragMask & NSDragOperationCopy))
3554 return NSDragOperationCopy;
3556 return NSDragOperationNone;
3560- (BOOL) performDragOperation : (
id<NSDraggingInfo>) sender
3571 NSPasteboard *
const pasteBoard = [
sender draggingPasteboard];
3572 const NSDragOperation sourceDragMask = [
sender draggingSourceOperationMask];
3574 if ([[pasteBoard types] containsObject : NSFilenamesPboardType] && (sourceDragMask & NSDragOperationCopy)) {
3580 NSArray *
const files = [
pasteBoard propertyListForType : NSFilenamesPboardType];
3581 for (NSString *path in files) {
3585 const NSUInteger
len = [
item lengthOfBytesUsingEncoding : NSASCIIStringEncoding] + 1;
3587 std::vector<unsigned char> propertyData(
len);
3588 [
item getCString : (char *)&propertyData[0] maxLength : propertyData.size()
3589 encoding : NSASCIIStringEncoding];
3592 [
targetView setProperty : "_XC_DND_DATA" data : &propertyData[0]
3593 size : propertyData.size() forType : textUriAtom format : 8];
3594 }
catch (
const std::bad_alloc &) {
3596 NSLog(
@"QuartzView: -performDragOperation:, memory allocation failed");
3612 event1.
fUser[2] = textUriAtom;
3622 event2.
fUser[2] = 0;
3623 NSPoint dropPoint = [
sender draggingLocation];
3626 dropPoint = [
self convertPoint : dropPoint fromView : nil];
const Mask_t kWABorderPixel
const Mask_t kWAOverrideRedirect
const Mask_t kWABitGravity
const Mask_t kWADontPropagate
const Mask_t kButtonMotionMask
const Mask_t kWABackingStore
const Mask_t kButtonPressMask
const Mask_t kExposureMask
const Mask_t kWAEventMask
Handle_t Window_t
Window handle.
const Mask_t kWASaveUnder
const Mask_t kWABackPixel
const Mask_t kWAWinGravity
const Mask_t kWABackingPixel
const Mask_t kPointerMotionMask
const Mask_t kLeaveWindowMask
const Mask_t kStructureNotifyMask
UInt_t Mask_t
Structure mask type.
const Mask_t kButtonReleaseMask
const Mask_t kWABorderPixmap
const Mask_t kEnterWindowMask
const Mask_t kWABackPixmap
const Mask_t kWABorderWidth
const Mask_t kWABackingPlanes
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
unsigned short UShort_t
Unsigned Short integer 2 bytes (unsigned short)
int Int_t
Signed integer 4 bytes (int)
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t mask
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t cursor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t TranslateCoordinates
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void w
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t GetWindowAttributes
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t rect
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t child
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t win
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t attr
Option_t Option_t TPoint TPoint const char mode
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t format
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name CreateCursor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t grab
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t property
Option_t Option_t TPoint TPoint const char y1
R__EXTERN TSystem * gSystem
void RemoveGraphicsOperationsForWindow(Window_t wid)
void GenerateFocusChangeEvent(NSView< X11Window > *eventView)
void GenerateExposeEvent(NSView< X11Window > *view, const NSRect &exposedRect)
void GenerateConfigureNotifyEvent(NSView< X11Window > *view, const NSRect &newFrame)
void GenerateCrossingEvent(NSEvent *theEvent)
bool HasPointerGrab() const
void GenerateKeyReleaseEvent(NSView< X11Window > *eventView, NSEvent *theEvent)
void GenerateKeyPressEvent(NSView< X11Window > *eventView, NSEvent *theEvent)
void GenerateButtonPressEvent(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
void GeneratePointerMotionEvent(NSEvent *theEvent)
void GenerateButtonReleaseEvent(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
Fill Area Attributes class.
This class implements TVirtualX interface for MacOS X, using Cocoa and Quartz 2D.
ROOT::MacOSX::X11::CommandBuffer * GetCommandBuffer() const
static Atom_t fgDeleteWindowAtom
ROOT::MacOSX::X11::Rectangle GetDisplayGeometry() const
ROOT::MacOSX::X11::EventTranslator * GetEventTranslator() const
A TGTextView is a text viewer widget.
ROOT GUI Window base class.
TClass * IsA() const override
const char * GetName() const override
Returns name of object.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
Semi-Abstract base class defining a generic interface to the underlying, low level,...
ROOT::MacOSX::Util::CFScopeGuard< CGImageRef > fImage
void setDirectDraw:(BOOL mode)
QuartzPixmap * fBackBuffer
unsigned char * readColorBits:(ROOT::MacOSX::X11::Rectangle area)
unsigned fPassiveGrabKeyModifiers
void activateImplicitGrab()
NSMutableArray * fPassiveKeyGrabs
TAttFill fAttFill
current fill attributes
BOOL fActiveGrabOwnerEvents
TAttText fAttText
current text attribute
QuartzWindow * fQuartzWindow
void setOverlapped:(BOOL overlap)
void configureNotifyTree()
void activatePassiveGrab()
NSMutableDictionary * fX11Properties
BOOL fPassiveGrabOwnerEvents
void removePassiveKeyGrab:modifiers:(unichar keyCode,[modifiers] NSUInteger modifiers)
TAttMarker fAttMarker
current marker attribute
unsigned fPassiveGrabEventMask
QuartzImage * fBackgroundPixmap
ROOT::MacOSX::X11::PointerGrab fCurrentGrabType
unsigned long fBackgroundPixel
unsigned fActiveGrabEventMask
void addChild:(NSView< X11Window > *child)
NSView< X11Window > * fContentView
void copy:area:withMask:clipOrigin:toPoint:(NSObject< X11Drawable > *src,[area] ROOT::MacOSX::X11::Rectangle area,[withMask] QuartzImage *mask,[clipOrigin] ROOT::MacOSX::X11::Point origin,[toPoint] ROOT::MacOSX::X11::Point dstPoint)
TAttLine fAttLine
current line attributes
unsigned long fBackgroundPixel
QuartzWindow * fQuartzWindow
XorDrawingWindow * findXorWindow()
TVirtualX::EDrawMode getDrawMode()
XorDrawingWindow * addXorWindow()
QuartzWindow * fMainWindow
void setDrawMode:(TVirtualX::EDrawMode newMode)
TVirtualX::EDrawMode fDrawMode
void adjustXorWindowGeometry:(XorDrawingWindow *win)
QuartzView * fContentView
QuartzImage * fShapeCombineMask
const NSEventType kLeftMouseDown
const NSEventType kRightMouseDown
const NSUInteger kBorderlessWindowMask
NSCursor * CreateCustomCursor(ECursor currentCursor)
int GlobalYROOTToCocoa(CGFloat yROOT)
NSPoint ConvertPointFromScreenToBase(NSPoint screenPoint, NSWindow *window)
bool ViewIsHtmlViewFrame(NSView< X11Window > *view, bool checkParent)
int GlobalYCocoaToROOT(CGFloat yCocoa)
void PixelToRGB(Pixel_t pixelColor, CGFloat *rgb)
NSPoint ConvertPointFromBaseToScreen(NSWindow *window, NSPoint windowPoint)
NSPoint TranslateToScreen(NSView< X11Window > *from, NSPoint point)
CGImageRef CreateSubImage(QuartzImage *image, const Rectangle &area)
bool ScreenPointIsInView(NSView< X11Window > *view, Int_t x, Int_t y)
NSPoint GetCursorHotStop(NSImage *image, ECursor cursor)
void GetWindowGeometry(NSObject< X11Window > *win, WindowAttributes_t *dst)
void GetWindowAttributes(NSObject< X11Window > *window, WindowAttributes_t *dst)
NSView< X11Window > * FindDNDAwareViewInPoint(NSView *parentView, Window_t dragWinID, Window_t inputWinID, Int_t x, Int_t y, Int_t maxDepth)
NSView< X11Window > * FrameForHtmlView(NSView< X11Window > *htmlView)
QuartzWindow * FindWindowInPoint(Int_t x, Int_t y)
int GlobalXCocoaToROOT(CGFloat xCocoa)
void WindowLostFocus(Window_t winID)
int LocalYROOTToCocoa(NSView< X11Window > *parentView, CGFloat yROOT)
NSView< X11Window > * FindViewForPointerEvent(NSEvent *pointerEvent)
NSView< X11Window > * FrameForTextView(NSView< X11Window > *textView)
NSComparisonResult CompareViewsToLower(id view1, id view2, void *context)
int LocalYCocoaToROOT(NSView< X11Window > *parentView, CGFloat yCocoa)
QuartzWindow * CreateTopLevelWindow(Int_t x, Int_t y, UInt_t w, UInt_t h, UInt_t border, Int_t depth, UInt_t clss, void *visual, SetWindowAttributes_t *attr, UInt_t)
NSView< X11Window > * FindViewUnderPointer()
void UnlockFocus(NSView< X11Window > *view)
int GlobalXROOTToCocoa(CGFloat xROOT)
QuartzView * CreateChildView(QuartzView *parent, Int_t x, Int_t y, UInt_t w, UInt_t h, UInt_t border, Int_t depth, UInt_t clss, void *visual, SetWindowAttributes_t *attr, UInt_t wtype)
bool AdjustCropArea(const Rectangle &srcRect, Rectangle &cropArea)
QuartzWindow * FindWindowForPointerEvent(NSEvent *pointerEvent)
bool ViewIsTextView(unsigned viewID)
void GetRootWindowAttributes(WindowAttributes_t *attr)
bool ViewIsHtmlView(unsigned viewID)
QuartzWindow * FindWindowUnderPointer()
bool ViewIsTextViewFrame(NSView< X11Window > *view, bool checkParent)
NSPoint TranslateFromScreen(NSPoint point, NSView< X11Window > *to)
void ClipToShapeMask(NSView< X11Window > *view, CGContextRef ctx)
void SetWindowAttributes(const SetWindowAttributes_t *attr, NSObject< X11Window > *window)
NSCursor * CreateCursor(ECursor currentCursor)
bool LockFocus(NSView< X11Window > *view)
NSComparisonResult CompareViewsToRaise(id view1, id view2, void *context)
std::vector< unsigned char > DownscaledImageData(unsigned w, unsigned h, CGImageRef image)
EGEventType fType
of event (see EGEventType)
Handle_t fHandle
general resource handle (used for atoms or windows)
Int_t fFormat
Next fields only used by kClientMessageEvent.
Window_t fWindow
window reported event is relative to
Longptr_t fUser[5]
5 longs can be used by client message events NOTE: only [0], [1] and [2] may be used.
Attributes that can be used when creating or changing a window.
Window attributes that can be inquired.
Window_t fRoot
root of screen containing window
Int_t fMapState
kIsUnmapped, kIsUnviewable, kIsViewable
ULong_t fBackingPlanes
planes to be preserved if possible
Long_t fAllEventMasks
set of events all people have interest in
ULong_t fBackingPixel
value to be used when restoring planes
Long_t fYourEventMask
my event mask
Int_t fHeight
width and height of window
Bool_t fMapInstalled
boolean, is color map currently installed
Int_t fBorderWidth
border width of window
Int_t fWinGravity
one of the window gravity values
void * fScreen
back pointer to correct screen
Colormap_t fColormap
color map to be associated with window
Int_t fClass
kInputOutput, kInputOnly
Int_t fBitGravity
one of bit gravity values
void * fVisual
the associated visual structure
Int_t fBackingStore
kNotUseful, kWhenMapped, kAlways
Int_t fY
location of window
Int_t fDepth
depth of window
Bool_t fOverrideRedirect
boolean value for override-redirect
Bool_t fSaveUnder
boolean, should bits under be saved?