41#include <ApplicationServices/ApplicationServices.h>
42#include <OpenGL/OpenGL.h>
44#include <Cocoa/Cocoa.h>
84#pragma mark - Display configuration management.
87void DisplayReconfigurationCallback(CGDirectDisplayID , CGDisplayChangeSummaryFlags flags,
void * )
89 if (flags & kCGDisplayBeginConfigurationFlag)
92 if (flags & kCGDisplayDesktopShapeChangedFlag) {
93 assert(
dynamic_cast<TGCocoa *
>(
gVirtualX) != 0 &&
"DisplayReconfigurationCallback, gVirtualX"
94 " is either null or has a wrong type");
95 TGCocoa *
const gCocoa =
static_cast<TGCocoa *
>(
gVirtualX);
100#pragma mark - Aux. functions called from GUI-rendering part.
103void SetStrokeForegroundColorFromX11Context(CGContextRef ctx,
const GCValues_t &gcVals)
105 assert(ctx != 0 &&
"SetStrokeForegroundColorFromX11Context, parameter 'ctx' is null");
111 ::Warning(
"SetStrokeForegroundColorFromX11Context",
112 "x11 context does not have line color information");
114 CGContextSetRGBStrokeColor(ctx, rgb[0], rgb[1], rgb[2], 1.);
118void SetStrokeDashFromX11Context(CGContextRef ctx,
const GCValues_t &gcVals)
121 assert(ctx != 0 &&
"SetStrokeDashFromX11Context, ctx parameter is null");
123 SetStrokeForegroundColorFromX11Context(ctx, gcVals);
125 static const std::size_t maxLength =
sizeof gcVals.
fDashes /
sizeof gcVals.
fDashes[0];
126 assert(maxLength >= std::size_t(gcVals.
fDashLen) &&
127 "SetStrokeDashFromX11Context, x11 context has bad dash length > sizeof(fDashes)");
129 CGFloat dashes[maxLength] = {};
137void SetStrokeDoubleDashFromX11Context(CGContextRef ,
const GCValues_t & )
140 ::Warning(
"SetStrokeDoubleDashFromX11Context",
"Not implemented yet, kick tpochep!");
144void SetStrokeParametersFromX11Context(CGContextRef ctx,
const GCValues_t &gcVals)
148 assert(ctx != 0 &&
"SetStrokeParametersFromX11Context, parameter 'ctx' is null");
152 CGContextSetLineWidth(ctx, gcVals.
fLineWidth);
154 CGContextSetLineWidth(ctx, 1.);
156 CGContextSetLineDash(ctx, 0., 0, 0);
160 SetStrokeForegroundColorFromX11Context(ctx, gcVals);
162 SetStrokeDashFromX11Context(ctx, gcVals);
164 SetStrokeDoubleDashFromX11Context(ctx ,gcVals);
166 ::Warning(
"SetStrokeParametersFromX11Context",
"line style bit is set,"
167 " but line style is unknown");
168 SetStrokeForegroundColorFromX11Context(ctx, gcVals);
171 SetStrokeForegroundColorFromX11Context(ctx, gcVals);
175void SetFilledAreaColorFromX11Context(CGContextRef ctx,
const GCValues_t &gcVals)
179 assert(ctx != 0 &&
"SetFilledAreaColorFromX11Context, parameter 'ctx' is null");
185 ::Warning(
"SetFilledAreaColorFromX11Context",
"no fill color found in x11 context");
187 CGContextSetRGBFillColor(ctx, rgb[0], rgb[1], rgb[2], 1.);
190struct PatternContext {
192 NSObject<X11Drawable> *image = nil, CGSize phase = {})
193 : fMask(mask), fFillStyle(fillStyle), fForeground(foreground), fBackground(background), fPhase(phase)
195 fImage = [image retain];
202 PatternContext(
const PatternContext &) =
delete;
203 PatternContext(PatternContext &&) =
delete;
204 PatternContext &
operator = (
const PatternContext &) =
delete;
205 PatternContext &
operator = (PatternContext &&) =
delete;
207 void SetImage(NSObject<X11Drawable> *image)
209 if (image != fImage) {
211 fImage = [image retain];
216 Int_t fFillStyle = 0;
219 NSObject<X11Drawable> *fImage = nil;
225bool HasFillTiledStyle(
Mask_t mask,
Int_t fillStyle)
231bool HasFillTiledStyle(
const GCValues_t &gcVals)
237bool HasFillStippledStyle(
Mask_t mask,
Int_t fillStyle)
243bool HasFillStippledStyle(
const GCValues_t &gcVals)
249bool HasFillOpaqueStippledStyle(
Mask_t mask,
Int_t fillStyle)
255bool HasFillOpaqueStippledStyle(
const GCValues_t &gcVals)
261void DrawTile(NSObject<X11Drawable> *patternImage, CGContextRef ctx)
263 assert(patternImage != nil &&
"DrawTile, parameter 'patternImage' is nil");
264 assert(ctx != 0 &&
"DrawTile, ctx parameter is null");
266 const CGRect patternRect = CGRectMake(0, 0, patternImage.fWidth, patternImage.fHeight);
267 if ([patternImage isKindOfClass : [QuartzImage
class]]) {
268 CGContextDrawImage(ctx, patternRect, ((QuartzImage *)patternImage).fImage);
269 }
else if ([patternImage isKindOfClass : [QuartzPixmap
class]]){
270 const Util::CFScopeGuard<CGImageRef> imageFromPixmap([((QuartzPixmap *)patternImage) createImageFromPixmap]);
271 assert(imageFromPixmap.Get() != 0 &&
"DrawTile, createImageFromPixmap failed");
272 CGContextDrawImage(ctx, patternRect, imageFromPixmap.Get());
274 assert(0 &&
"DrawTile, pattern is neither a QuartzImage, nor a QuartzPixmap");
284 assert(info != 0 &&
"DrawPattern, parameter 'info' is null");
285 assert(ctx != 0 &&
"DrawPattern, parameter 'ctx' is null");
287 const PatternContext *
const patternContext = (PatternContext *)info;
288 const Mask_t mask = patternContext->fMask;
289 const Int_t fillStyle = patternContext->fFillStyle;
291 NSObject<X11Drawable> *
const patternImage = patternContext->fImage;
292 assert(patternImage != nil &&
"DrawPattern, pattern (stipple) image is nil");
293 const CGRect patternRect = CGRectMake(0, 0, patternImage.fWidth, patternImage.fHeight);
295 if (HasFillTiledStyle(mask, fillStyle)) {
296 DrawTile(patternImage, ctx);
297 }
else if (HasFillStippledStyle(mask, fillStyle) || HasFillOpaqueStippledStyle(mask, fillStyle)) {
298 assert([patternImage isKindOfClass : [QuartzImage
class]] &&
299 "DrawPattern, stipple must be a QuartzImage object");
300 QuartzImage *
const image = (QuartzImage *)patternImage;
301 assert(image.
fIsStippleMask == YES &&
"DrawPattern, image is not a stipple mask");
305 if (HasFillOpaqueStippledStyle(mask,fillStyle)) {
308 "DrawPattern, fill style is FillOpaqueStippled, but background color is not set in a context");
310 CGContextSetRGBFillColor(ctx, rgb[0], rgb[1], rgb[2], 1.);
311 CGContextFillRect(ctx, patternRect);
315 assert((mask &
kGCForeground) &&
"DrawPattern, foreground color is not set");
317 CGContextSetRGBFillColor(ctx, rgb[0], rgb[1], rgb[2], 1.);
318 CGContextClipToMask(ctx, patternRect, image.
fImage);
319 CGContextFillRect(ctx, patternRect);
322 DrawTile(patternImage, ctx);
327void PatternRelease(
void *info)
329 delete static_cast<PatternContext *
>(info);
333void SetFillPattern(CGContextRef ctx,
const PatternContext *patternContext)
339 assert(ctx != 0 &&
"SetFillPattern, parameter 'ctx' is null");
340 assert(patternContext != 0 &&
"SetFillPattern, parameter 'patternContext' is null");
341 assert(patternContext->fImage != nil &&
"SetFillPattern, pattern image is nil");
343 const Util::CFScopeGuard<CGColorSpaceRef> patternColorSpace(CGColorSpaceCreatePattern(0));
344 CGContextSetFillColorSpace(ctx, patternColorSpace.Get());
346 CGPatternCallbacks callbacks = {};
348 callbacks.releaseInfo = PatternRelease;
349 const CGRect patternRect = CGRectMake(0, 0, patternContext->fImage.fWidth, patternContext->fImage.fHeight);
350 const Util::CFScopeGuard<CGPatternRef> pattern(CGPatternCreate((
void *)patternContext, patternRect, CGAffineTransformIdentity,
351 patternContext->fImage.fWidth, patternContext->fImage.fHeight,
352 kCGPatternTilingNoDistortion,
true, &callbacks));
353 const CGFloat alpha = 1.;
354 CGContextSetFillPattern(ctx, pattern.Get(), &alpha);
355 CGContextSetPatternPhase(ctx, patternContext->fPhase);
359bool ParentRendersToChild(NSView<X11Window> *child)
361 assert(child != nil &&
"ParentRendersToChild, parameter 'child' is nil");
365class ViewFixer final {
367 ViewFixer(QuartzView *&viewToFix,
Drawable_t &widToFix)
369 if (ParentRendersToChild(viewToFix) && [viewToFix.
fParentView isKindOfClass:[QuartzView
class]]) {
370 const auto origin = viewToFix.frame.origin;
372 widToFix = viewToFix.
fID;
373 if ((context = viewToFix.
fContext)) {
374 CGContextSaveGState(context);
375 CGContextTranslateCTM(context, origin.x, origin.y);
382 CGContextRestoreGState(context);
384 ViewFixer(
const ViewFixer &rhs) =
delete;
385 ViewFixer &
operator = (
const ViewFixer &) =
delete;
388 CGContextRef context =
nullptr;
392bool IsNonPrintableAsciiCharacter(UniChar
c)
394 if (
c == 9 || (
c >= 32 &&
c < 127))
401void FixAscii(std::vector<UniChar> &
text)
418 std::replace(
text.begin(),
text.end(), UniChar(16), UniChar(
' '));
421 text.erase(std::remove_if(
text.begin(),
text.end(), IsNonPrintableAsciiCharacter),
text.end());
440 "TGCocoa, gSystem is eihter null or has a wrong type");
451 CGDisplayRegisterReconfigurationCallback (DisplayReconfigurationCallback, 0);
466 "TGCocoa, gSystem is eihter null or has a wrong type");
477 CGDisplayRegisterReconfigurationCallback (DisplayReconfigurationCallback, 0);
484 CGDisplayRemoveReconfigurationCallback (DisplayReconfigurationCallback, 0);
503 if (CGMainDisplayID() == kCGNullDirectDisplay)
556 return CGDisplayScreenSize(CGMainDisplayID()).width;
567 NSArray *
const screens = [NSScreen screens];
568 assert(screens != nil &&
"screens array is nil");
570 NSScreen *
const mainScreen = [screens objectAtIndex : 0];
571 assert(mainScreen != nil &&
"screen with index 0 is nil");
573 return NSBitsPerPixelFromDepth([mainScreen depth]);
582 assert(
gClient != 0 &&
"Update, gClient is null");
584 }
else if (mode > 0) {
607 NSArray *
const screens = [NSScreen screens];
608 assert(screens != nil && screens.count != 0 &&
"GetDisplayGeometry, no screens found");
610 NSRect frame = [(NSScreen *)[screens objectAtIndex : 0] frame];
611 CGFloat xMin = frame.origin.x, xMax = xMin + frame.size.width;
612 CGFloat yMin = frame.origin.y, yMax = yMin + frame.size.height;
614 for (NSUInteger i = 1,
e = screens.count; i <
e; ++i) {
615 frame = [(NSScreen *)[screens objectAtIndex : i] frame];
616 xMin = std::min(xMin, frame.origin.x);
617 xMax = std::max(xMax, frame.origin.x + frame.size.width);
618 yMin = std::min(yMin, frame.origin.y);
619 yMax = std::max(yMax, frame.origin.y + frame.size.height);
633#pragma mark - Window management part.
639 return fPimpl->GetRootWindowID();
655 assert(parentID != 0 &&
"InitWindow, parameter 'parentID' is 0");
659 if (
fPimpl->IsRootWindow(parentID))
662 [
fPimpl->GetWindow(parentID) getAttributes : &attr];
664 return CreateWindow(parentID, 0, 0, attr.
fWidth, attr.
fHeight, 0, attr.
fDepth, attr.
fClass, 0, 0, 0);
688 auto drawable =
fPimpl->GetDrawable(wid);
704 [drawable setDrawMode : mode];
712 return [drawable getDrawMode];
720 if (drawable.fIsPixmap) {
726 assert(pixmapCtx != 0 &&
"ClearWindow, pixmap's context is null");
731 CGContextClearRect(pixmapCtx, CGRectMake(0, 0, drawable.fWidth, drawable.fHeight));
744 if (window.fIsPixmap == YES)
748 assert([window.fContentView isKindOfClass : [
QuartzView class]] &&
"UpdateWindow, content view is not a QuartzView");
756 const X11::Rectangle copyArea(0, 0, pixmap.fWidth, pixmap.fHeight);
757 [dstView copy : pixmap area : copyArea withMask : nil clipOrigin :
X11::Point() toPoint :
X11::Point()];
760 fPimpl->fX11CommandBuffer.AddUpdateWindow(dstView);
773 "ClearWindow, fSelectedDrawable is invalid");
788 if (windowID < 0 || fPimpl->IsRootWindow(windowID)) {
802 h = drawable.fHeight;
804 if (!drawable.fIsPixmap) {
806 NSPoint srcPoint = {};
809 NSView<X11Window> *
const view = window.fContentView.fParentView ? window.fContentView.fParentView : window.fContentView;
826 assert(!
fPimpl->IsRootWindow(windowID) &&
"MoveWindow, called for root window");
831 [
fPimpl->GetWindow(windowID) setX :
x Y :
y];
851 assert(!
fPimpl->IsRootWindow(windowID) &&
852 "ResizeWindow, parameter 'windowID' is a root window's id");
857 if (window.fBackBuffer) {
877 "UpdateWindow, fSelectedDrawable is not a valid window id");
926 if (
fPimpl->IsRootWindow(parentID)) {
929 depth, clss, visual, attr, wtype);
934 newWindow.
fID = result;
935 [newWindow setAcceptsMouseMovedEvents : YES];
941 assert([parentWin.fContentView isKindOfClass : [
QuartzView class]] &&
942 "CreateWindow, parent view must be QuartzView");
946 x,
y, w,
h, border, depth, clss, visual, attr, wtype);
949 childView.
fID = result;
950 [parentWin addChild : childView];
977 if (
fPimpl->IsRootWindow(wid))
980 BOOL needFocusChange = NO;
985 fPimpl->fX11EventTranslator.CheckUnmappedView(wid);
987 assert(
fPimpl->GetDrawable(wid).fIsPixmap == NO &&
988 "DestroyWindow, can not be called for QuartzPixmap or QuartzImage object");
991 if (
fPimpl->fX11CommandBuffer.BufferSize())
992 fPimpl->fX11CommandBuffer.RemoveOperationsForDrawable(wid);
995 if ((needFocusChange = window == window.fQuartzWindow && window.fQuartzWindow.fHasFocus))
996 window.fHasFocus = NO;
1000 fPimpl->fX11EventTranslator.GenerateDestroyNotify(wid);
1006 fPimpl->DeleteDrawable(wid);
1010 if (needFocusChange)
1026 if (
fPimpl->IsRootWindow(wid))
1031 assert(
fPimpl->GetDrawable(wid).fIsPixmap == NO &&
1032 "DestroySubwindows, can not be called for QuartzPixmap or QuartzImage object");
1053 if (
fPimpl->IsRootWindow(wid))
1056 [
fPimpl->GetWindow(wid) getAttributes : &attr];
1069 assert(!
fPimpl->IsRootWindow(wid) &&
"ChangeWindowAttributes, called for root window");
1070 assert(attr != 0 &&
"ChangeWindowAttributes, parameter 'attr' is null");
1072 [
fPimpl->GetWindow(wid) setAttributes : attr];
1087 if (windowID <= fPimpl->GetRootWindowID())
1092 window.fEventMask = eventMask;
1101 assert(!
fPimpl->IsRootWindow(wid) &&
"ReparentChild, can not re-parent root window");
1106 if (
fPimpl->IsRootWindow(pid)) {
1109 [view removeFromSuperview];
1110 view.fParentView = nil;
1112 NSRect frame = view.frame;
1113 frame.origin = NSPoint();
1115 NSUInteger styleMask = kClosableWindowMask | kMiniaturizableWindowMask | kResizableWindowMask;
1116 if (!view.fOverrideRedirect)
1117 styleMask |= kTitledWindowMask;
1120 styleMask : styleMask
1121 backing : NSBackingStoreBuffered
1123 [view setX :
x Y :
y];
1124 [newTopLevel addChild : view];
1126 fPimpl->ReplaceDrawable(wid, newTopLevel);
1129 [newTopLevel release];
1132 [view removeFromSuperview];
1135 assert(newParent.fIsPixmap == NO &&
"ReparentChild, pixmap can not be a new parent");
1136 [view setX :
x Y :
y];
1137 [newParent addChild : view];
1148 if (
fPimpl->IsRootWindow(pid))
1155 [contentView retain];
1156 [contentView removeFromSuperview];
1157 [topLevel setContentView : nil];
1158 fPimpl->ReplaceDrawable(wid, contentView);
1159 [contentView setX :
x Y :
y];
1160 [
fPimpl->GetWindow(pid) addChild : contentView];
1161 [contentView release];
1172 assert(!
fPimpl->IsRootWindow(wid) &&
"ReparentWindow, can not re-parent root window");
1175 if (view.fParentView)
1188 assert(!
fPimpl->IsRootWindow(wid) &&
"MapWindow, called for root window");
1193 [
fPimpl->GetWindow(wid) mapWindow];
1208 assert(!
fPimpl->IsRootWindow(wid) &&
"MapSubwindows, called for 'root' window");
1213 [
fPimpl->GetWindow(wid) mapSubwindows];
1223 assert(!
fPimpl->IsRootWindow(wid) &&
"MapRaised, called for root window");
1228 [
fPimpl->GetWindow(wid) mapRaised];
1244 assert(!
fPimpl->IsRootWindow(wid) &&
"UnmapWindow, called for root window");
1249 fPimpl->fX11EventTranslator.CheckUnmappedView(wid);
1254 if (win == win.fQuartzWindow && win.fQuartzWindow.fHasFocus)
1276 assert(!
fPimpl->IsRootWindow(wid) &&
"RaiseWindow, called for root window");
1278 if (!
fPimpl->GetWindow(wid).fParentView)
1281 [
fPimpl->GetWindow(wid) raiseWindow];
1293 assert(!
fPimpl->IsRootWindow(wid) &&
"LowerWindow, called for root window");
1295 if (!
fPimpl->GetWindow(wid).fParentView)
1298 [
fPimpl->GetWindow(wid) lowerWindow];
1314 assert(!
fPimpl->IsRootWindow(wid) &&
"MoveWindow, called for root window");
1316 [
fPimpl->GetWindow(wid) setX :
x Y :
y];
1333 assert(!
fPimpl->IsRootWindow(wid) &&
"MoveResizeWindow, called for 'root' window");
1336 [
fPimpl->GetWindow(wid) setX :
x Y :
y width : w height :
h];
1345 assert(!
fPimpl->IsRootWindow(wid) &&
"ResizeWindow, called for 'root' window");
1350 const UInt_t siMax = std::numeric_limits<Int_t>::max();
1351 if (w > siMax ||
h > siMax)
1354 NSSize newSize = {};
1358 [
fPimpl->GetWindow(wid) setDrawableSize : newSize];
1368 assert(!
fPimpl->IsRootWindow(wid) &&
"IconifyWindow, can not iconify the root window");
1369 assert(
fPimpl->GetWindow(wid).fIsPixmap == NO &&
"IconifyWindow, invalid window id");
1372 assert(win.fQuartzWindow == win &&
"IconifyWindow, can be called only for a top level window");
1374 fPimpl->fX11EventTranslator.CheckUnmappedView(wid);
1377 if (
fPimpl->fX11CommandBuffer.BufferSize())
1378 fPimpl->fX11CommandBuffer.RemoveOperationsForDrawable(wid);
1380 if (window.fQuartzWindow.fHasFocus) {
1382 window.fQuartzWindow.fHasFocus = NO;
1385 [win.fQuartzWindow miniaturize : win.fQuartzWindow];
1400 if (!srcWin || !dstWin)
1403 const bool srcIsRoot =
fPimpl->IsRootWindow(srcWin);
1404 const bool dstIsRoot =
fPimpl->IsRootWindow(dstWin);
1406 if (srcIsRoot && dstIsRoot) {
1418 NSPoint srcPoint = {};
1422 NSPoint dstPoint = {};
1428 }
else if (srcIsRoot) {
1432 if ([dstView superview]) {
1436 dstPoint = [[dstView superview] convertPoint : dstPoint fromView : dstView];
1438 if (view != dstView && view.fMapState ==
kIsViewable)
1447 if ([dstView superview]) {
1451 const NSPoint
pt = [[dstView superview] convertPoint : dstPoint fromView : dstView];
1453 if (view != dstView && view.fMapState ==
kIsViewable)
1476 if (
fPimpl->IsRootWindow(wid)) {
1486 if (!window.fIsPixmap) {
1506 assert(!
fPimpl->IsRootWindow(wid) &&
"SetWindowBackground, can not set color for root window");
1508 fPimpl->GetWindow(wid).fBackgroundPixel = color;
1521 assert(!
fPimpl->IsRootWindow(windowID) &&
1522 "SetWindowBackgroundPixmap, can not set background for a root window");
1523 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
1524 "SetWindowBackgroundPixmap, invalid window id");
1527 if (pixmapID ==
kNone) {
1528 window.fBackgroundPixmap = nil;
1532 assert(pixmapID >
fPimpl->GetRootWindowID() &&
1533 "SetWindowBackgroundPixmap, parameter 'pixmapID' is not a valid pixmap id");
1534 assert(
fPimpl->GetDrawable(pixmapID).fIsPixmap == YES &&
1535 "SetWindowBackgroundPixmap, bad drawable");
1542 if ([pixmapOrImage isKindOfClass : [
QuartzPixmap class]]) {
1544 if (backgroundImage.
Get())
1545 window.fBackgroundPixmap = backgroundImage.
Get();
1548 if (backgroundImage.
Get())
1549 window.fBackgroundPixmap = backgroundImage.
Get();
1552 if (!backgroundImage.
Get())
1554 Error(
"SetWindowBackgroundPixmap",
"QuartzImage initialization failed");
1563 if (windowID <= fPimpl->GetRootWindowID())
1567 return view.fParentView ? view.fParentView.fID :
fPimpl->GetRootWindowID();
1581 NSString *
const windowTitle = [NSString stringWithCString :
name encoding : NSASCIIStringEncoding];
1582 [(
NSWindow *)drawable setTitle : windowTitle];
1612 assert(!
fPimpl->IsRootWindow(windowID) &&
1613 "ShapeCombineMask, windowID parameter is a 'root' window");
1614 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
1615 "ShapeCombineMask, windowID parameter is a bad window id");
1617 "ShapeCombineMask, pixmapID parameter must point to QuartzImage object");
1619 if (
fPimpl->GetWindow(windowID).fContentView.fParentView)
1623 assert(srcImage.
fIsStippleMask == YES &&
"ShapeCombineMask, source image is not a stipple mask");
1631 [qw setOpaque : NO];
1632 [qw setBackgroundColor : [NSColor clearColor]];
1636#pragma mark - "Window manager hints" set of functions.
1644 assert(!
fPimpl->IsRootWindow(wid) &&
"SetMWMHints, called for 'root' window");
1647 NSUInteger newMask = 0;
1649 if ([qw styleMask] & kTitledWindowMask) {
1650 newMask |= kTitledWindowMask;
1651 newMask |= kClosableWindowMask;
1655 newMask |= kMiniaturizableWindowMask | kResizableWindowMask;
1658 newMask |= kMiniaturizableWindowMask;
1660 newMask |= kResizableWindowMask;
1663 [qw setStyleMask : newMask];
1667 [[qw standardWindowButton : NSWindowZoomButton] setEnabled : YES];
1668 [[qw standardWindowButton : NSWindowMiniaturizeButton] setEnabled : YES];
1672 [[qw standardWindowButton : NSWindowZoomButton] setEnabled : funcs &
kMWMDecorMaximize];
1673 [[qw standardWindowButton : NSWindowMiniaturizeButton] setEnabled : funcs &
kMWMDecorMinimize];
1695 assert(!
fPimpl->IsRootWindow(wid) &&
"SetWMSizeHints, called for root window");
1697 const NSUInteger styleMask = kTitledWindowMask | kClosableWindowMask | kMiniaturizableWindowMask | kResizableWindowMask;
1698 const NSRect minRect = [
NSWindow frameRectForContentRect : NSMakeRect(0., 0., wMin, hMin) styleMask : styleMask];
1699 const NSRect maxRect = [
NSWindow frameRectForContentRect : NSMakeRect(0., 0., wMax, hMax) styleMask : styleMask];
1702 [qw setMinSize : minRect.size];
1703 [qw setMaxSize : maxRect.size];
1724 assert(wid >
fPimpl->GetRootWindowID() &&
"SetWMTransientHint, wid parameter is not a valid window id");
1726 if (
fPimpl->IsRootWindow(mainWid))
1731 if (![mainWindow isVisible])
1736 if (mainWindow != transientWindow) {
1739 Error(
"SetWMTransientHint",
"window is already transient for other window");
1741 [[transientWindow standardWindowButton : NSWindowZoomButton] setEnabled : NO];
1742 [mainWindow addTransientWindow : transientWindow];
1745 Warning(
"SetWMTransientHint",
"transient and main windows are the same window");
1748#pragma mark - GUI-rendering part.
1754 assert(!
fPimpl->IsRootWindow(wid) &&
"DrawLineAux, called for root window");
1758 assert(ctx != 0 &&
"DrawLineAux, context is null");
1771 CGContextSetAllowsAntialiasing(ctx,
false);
1773 if (!drawable.fIsPixmap)
1774 CGContextTranslateCTM(ctx, 0.5, 0.5);
1781 SetStrokeParametersFromX11Context(ctx, gcVals);
1782 CGContextBeginPath(ctx);
1783 CGContextMoveToPoint(ctx, x1, y1);
1784 CGContextAddLineToPoint(ctx, x2, y2);
1785 CGContextStrokePath(ctx);
1787 CGContextSetAllowsAntialiasing(ctx,
true);
1802 assert(!
fPimpl->IsRootWindow(wid) &&
"DrawLine, called for root window");
1803 assert(gc > 0 && gc <=
fX11Contexts.size() &&
"DrawLine, invalid context index");
1808 if (!drawable.fIsPixmap) {
1811 const ViewFixer fixer(view, wid);
1814 fPimpl->fX11CommandBuffer.AddDrawLine(wid, gcVals, x1, y1, x2, y2);
1820 fPimpl->fX11CommandBuffer.AddDrawLine(wid, gcVals, x1, y1, x2, y2);
1830 assert(!
fPimpl->IsRootWindow(wid) &&
"DrawSegmentsAux, called for root window");
1831 assert(segments != 0 &&
"DrawSegmentsAux, segments parameter is null");
1832 assert(nSegments > 0 &&
"DrawSegmentsAux, nSegments <= 0");
1834 for (
Int_t i = 0; i < nSegments; ++i)
1835 DrawLineAux(wid, gcVals, segments[i].fX1, segments[i].fY1 - 3, segments[i].fX2, segments[i].fY2 - 3);
1847 assert(!
fPimpl->IsRootWindow(wid) &&
"DrawSegments, called for root window");
1848 assert(gc > 0 && gc <=
fX11Contexts.size() &&
"DrawSegments, invalid context index");
1849 assert(segments != 0 &&
"DrawSegments, parameter 'segments' is null");
1850 assert(nSegments > 0 &&
"DrawSegments, number of segments <= 0");
1855 if (!drawable.fIsPixmap) {
1857 const ViewFixer fixer(view, wid);
1861 fPimpl->fX11CommandBuffer.AddDrawSegments(wid, gcVals, segments, nSegments);
1867 fPimpl->fX11CommandBuffer.AddDrawSegments(wid, gcVals, segments, nSegments);
1877 assert(!
fPimpl->IsRootWindow(wid) &&
"DrawRectangleAux, called for root window");
1881 if (!drawable.fIsPixmap) {
1894 assert(ctx &&
"DrawRectangleAux, context is null");
1897 CGContextSetAllowsAntialiasing(ctx,
false);
1899 SetStrokeParametersFromX11Context(ctx, gcVals);
1901 const CGRect rect = CGRectMake(
x,
y, w,
h);
1902 CGContextStrokeRect(ctx, rect);
1904 CGContextSetAllowsAntialiasing(ctx,
true);
1916 assert(!
fPimpl->IsRootWindow(wid) &&
"DrawRectangle, called for root window");
1917 assert(gc > 0 && gc <=
fX11Contexts.size() &&
"DrawRectangle, invalid context index");
1923 if (!drawable.fIsPixmap) {
1926 const ViewFixer fixer(view, wid);
1930 fPimpl->fX11CommandBuffer.AddDrawRectangle(wid, gcVals,
x,
y, w,
h);
1936 fPimpl->fX11CommandBuffer.AddDrawRectangle(wid, gcVals,
x,
y, w,
h);
1952 assert(!
fPimpl->IsRootWindow(wid) &&
"FillRectangleAux, called for root window");
1956 CGSize patternPhase = {};
1958 if (drawable.fIsPixmap) {
1963 const CGRect fillRect = CGRectMake(
x,
y, w,
h);
1965 if (!drawable.fIsPixmap) {
1968 const NSPoint origin = [view.
fParentView convertPoint : view.frame.origin toView : nil];
1969 patternPhase.width = origin.x;
1970 patternPhase.height = origin.y;
1976 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals) || HasFillTiledStyle(gcVals)) {
1977 std::unique_ptr<PatternContext> patternContext(
new PatternContext(gcVals.
fMask, gcVals.
fFillStyle,
1978 0, 0, nil, patternPhase));
1979 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals)) {
1981 "FillRectangleAux, fill_style is FillStippled/FillOpaqueStippled,"
1982 " but no stipple is set in a context");
1987 if (HasFillOpaqueStippledStyle(gcVals))
1991 "FillRectangleAux, fill_style is FillTiled, but not tile is set in a context");
1993 patternContext->SetImage(
fPimpl->GetDrawable(gcVals.
fTile));
1996 SetFillPattern(ctx, patternContext.get());
1997 patternContext.release();
1998 CGContextFillRect(ctx, fillRect);
2003 SetFilledAreaColorFromX11Context(ctx, gcVals);
2004 CGContextFillRect(ctx, fillRect);
2017 assert(!
fPimpl->IsRootWindow(wid) &&
"FillRectangle, called for root window");
2018 assert(gc > 0 && gc <=
fX11Contexts.size() &&
"FillRectangle, invalid context index");
2023 if (!drawable.fIsPixmap) {
2026 const ViewFixer fixer(view, wid);
2029 fPimpl->fX11CommandBuffer.AddFillRectangle(wid, gcVals,
x,
y, w,
h);
2046 assert(!
fPimpl->IsRootWindow(wid) &&
"FillPolygonAux, called for root window");
2047 assert(polygon != 0 &&
"FillPolygonAux, parameter 'polygon' is null");
2048 assert(nPoints > 0 &&
"FillPolygonAux, number of points must be positive");
2053 CGSize patternPhase = {};
2055 if (!drawable.fIsPixmap) {
2057 const NSPoint origin = [view convertPoint : view.frame.origin toView : nil];
2058 patternPhase.width = origin.x;
2059 patternPhase.height = origin.y;
2064 CGContextSetAllowsAntialiasing(ctx,
false);
2066 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals) || HasFillTiledStyle(gcVals)) {
2067 std::unique_ptr<PatternContext> patternContext(
new PatternContext(gcVals.
fMask, gcVals.
fFillStyle, 0, 0, nil, patternPhase));
2069 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals)) {
2071 "FillRectangleAux, fill style is FillStippled/FillOpaqueStippled,"
2072 " but no stipple is set in a context");
2077 if (HasFillOpaqueStippledStyle(gcVals))
2081 "FillRectangleAux, fill_style is FillTiled, but not tile is set in a context");
2083 patternContext->SetImage(
fPimpl->GetDrawable(gcVals.
fTile));
2086 SetFillPattern(ctx, patternContext.get());
2087 patternContext.release();
2089 SetFilledAreaColorFromX11Context(ctx, gcVals);
2094 CGContextBeginPath(ctx);
2095 if (!drawable.fIsPixmap) {
2096 CGContextMoveToPoint(ctx, polygon[0].fX, polygon[0].fY - 2);
2097 for (
Int_t i = 1; i < nPoints; ++i)
2098 CGContextAddLineToPoint(ctx, polygon[i].fX, polygon[i].fY - 2);
2101 for (
Int_t i = 1; i < nPoints; ++i)
2105 CGContextFillPath(ctx);
2106 CGContextSetAllowsAntialiasing(ctx,
true);
2129 assert(polygon != 0 &&
"FillPolygon, parameter 'polygon' is null");
2130 assert(nPoints > 0 &&
"FillPolygon, number of points must be positive");
2131 assert(gc > 0 && gc <=
fX11Contexts.size() &&
"FillPolygon, invalid context index");
2136 if (!drawable.fIsPixmap) {
2138 const ViewFixer fixer(view, wid);
2142 fPimpl->fX11CommandBuffer.AddFillPolygon(wid, gcVals, polygon, nPoints);
2148 fPimpl->fX11CommandBuffer.AddFillPolygon(wid, gcVals, polygon, nPoints);
2162 assert(!
fPimpl->IsRootWindow(src) &&
"CopyAreaAux, src parameter is root window");
2163 assert(!
fPimpl->IsRootWindow(dst) &&
"CopyAreaAux, dst parameter is root window");
2178 "CopyArea, mask is not a pixmap");
2188 [dstDrawable copy : srcDrawable area : copyArea withMask : mask clipOrigin : clipOrigin toPoint : dstPoint];
2198 assert(!
fPimpl->IsRootWindow(src) &&
"CopyArea, src parameter is root window");
2199 assert(!
fPimpl->IsRootWindow(dst) &&
"CopyArea, dst parameter is root window");
2200 assert(gc > 0 && gc <=
fX11Contexts.size() &&
"CopyArea, invalid context index");
2205 if (!drawable.fIsPixmap) {
2207 const ViewFixer fixer(view, dst);
2211 fPimpl->fX11CommandBuffer.AddCopyArea(src, dst, gcVals, srcX, srcY, width, height, dstX, dstY);
2213 CopyAreaAux(src, dst, gcVals, srcX, srcY, width, height, dstX, dstY);
2216 if (
fPimpl->GetDrawable(src).fIsPixmap) {
2218 CopyAreaAux(src, dst, gcVals, srcX, srcY, width, height, dstX, dstY);
2221 fPimpl->fX11CommandBuffer.AddCopyArea(src, dst, gcVals, srcX, srcY, width, height, dstX, dstY);
2223 CopyAreaAux(src, dst, gcVals, srcX, srcY, width, height, dstX, dstY);
2232 assert(!
fPimpl->IsRootWindow(wid) &&
"DrawStringAux, called for root window");
2236 assert(ctx != 0 &&
"DrawStringAux, context is null");
2240 CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);
2243 if (!drawable.fIsPixmap) {
2244 CGContextTranslateCTM(ctx, 0., drawable.fHeight);
2245 CGContextScaleCTM(ctx, 1., -1.);
2249 CGContextSetAllowsAntialiasing(ctx,
true);
2251 assert(gcVals.
fMask &
kGCFont &&
"DrawString, font is not set in a context");
2254 len = std::strlen(
text);
2256 CGFloat textColor[4] = {0., 0., 0., 1.};
2261 CGContextSetRGBFillColor(ctx, textColor[0], textColor[1], textColor[2], textColor[3]);
2266 std::vector<UniChar> unichars((
unsigned char *)
text, (
unsigned char *)
text + len);
2279 assert(!
fPimpl->IsRootWindow(wid) &&
"DrawString, called for root window");
2280 assert(gc > 0 && gc <=
fX11Contexts.size() &&
"DrawString, invalid context index");
2284 assert(gcVals.
fMask &
kGCFont &&
"DrawString, font is not set in a context");
2286 if (!drawable.fIsPixmap) {
2288 const ViewFixer fixer(view, wid);
2292 fPimpl->fX11CommandBuffer.AddDrawString(wid, gcVals,
x,
y,
text, len);
2299 fPimpl->fX11CommandBuffer.AddDrawString(wid, gcVals,
x,
y,
text, len);
2308 assert(!
fPimpl->IsRootWindow(windowID) &&
"ClearAreaAux, called for root window");
2311 assert(view.
fContext != 0 &&
"ClearAreaAux, view.fContext is null");
2321 CGFloat rgb[3] = {};
2325 CGContextSetRGBFillColor(view.
fContext, rgb[0], rgb[1], rgb[2], 1.);
2326 CGContextFillRect(view.
fContext, CGRectMake(
x,
y, w,
h));
2328 const CGRect fillRect = CGRectMake(
x,
y, w,
h);
2330 CGSize patternPhase = {};
2332 const NSPoint origin = [view.
fParentView convertPoint : view.frame.origin toView : nil];
2333 patternPhase.width = origin.x;
2334 patternPhase.height = origin.y;
2338 std::unique_ptr<PatternContext> patternContext(
new PatternContext({}, 0, 0, 0, view.
fBackgroundPixmap, patternPhase));
2339 SetFillPattern(view.
fContext, patternContext.get());
2340 patternContext.release();
2341 CGContextFillRect(view.
fContext, fillRect);
2355 assert(!
fPimpl->IsRootWindow(wid) &&
"ClearArea, called for root window");
2359 if (ParentRendersToChild(view))
2364 fPimpl->fX11CommandBuffer.AddClearArea(wid,
x,
y, w,
h);
2382#pragma mark - Pixmap management.
2388 NSSize newSize = {};
2393 scaleFactor : [[NSScreen mainScreen] backingScaleFactor]]);
2395 pixmap.
Get().fID =
fPimpl->RegisterDrawable(pixmap.
Get());
2399 Error(
"OpenPixmap",
"QuartzPixmap initialization failed");
2407 assert(!
fPimpl->IsRootWindow(wid) &&
"ResizePixmap, called for root window");
2410 assert(drawable.fIsPixmap == YES &&
"ResizePixmap, invalid drawable");
2416 if ([pixmap resizeW : w
H :
h scaleFactor : [[NSScreen mainScreen] backingScaleFactor]])
2425 assert(pixmapID > (
Int_t)
fPimpl->GetRootWindowID() &&
2426 "SelectPixmap, parameter 'pixmapID' is not a valid id");
2435 "CopyPixmap, fSelectedDrawable is not a valid window id");
2443 assert(pixmapID > (
Int_t)
fPimpl->GetRootWindowID() &&
2444 "CopyPixmapW, parameter 'pixmapID' is not a valid id");
2447 assert([source isKindOfClass : [
QuartzPixmap class]] &&
2448 "CopyPixmap, source is not a pixmap");
2454 if (drawable.fIsPixmap) {
2455 destination = drawable;
2458 if (window.fBackBuffer) {
2459 destination = window.fBackBuffer;
2461 Warning(
"CopyPixmapW",
"Operation skipped, since destination"
2462 " window is not double buffered");
2470 [destination copy : pixmap area : copyArea withMask : nil clipOrigin :
X11::Point() toPoint : dstPoint];
2478 assert(
fPimpl->GetDrawable(
fSelectedDrawable).fIsPixmap == YES &&
"ClosePixmap, selected drawable is not a pixmap");
2484#pragma mark - Different functions to create pixmap from different data sources. Used by GUI.
2485#pragma mark - These functions implement TVirtualX interface, some of them dupilcate others.
2501 assert(bitmap != 0 &&
"CreatePixmap, parameter 'bitmap' is null");
2502 assert(width > 0 &&
"CreatePixmap, parameter 'width' is 0");
2503 assert(height > 0 &&
"CreatePixmap, parameter 'height' is 0");
2505 std::vector<unsigned char> imageData (depth > 1 ? width * height * 4 : width * height);
2508 backgroundPixel, depth, &imageData[0]);
2514 image.
Reset([[
QuartzImage alloc] initWithW : width
H : height data: &imageData[0]]);
2516 image.
Reset([[
QuartzImage alloc] initMaskWithW : width
H : height bitmapMask : &imageData[0]]);
2519 Error(
"CreatePixmap",
"QuartzImage initialization failed");
2523 image.
Get().fID =
fPimpl->RegisterDrawable(image.
Get());
2524 return image.
Get().fID;
2531 assert(bits != 0 &&
"CreatePixmapFromData, data parameter is null");
2532 assert(width != 0 &&
"CreatePixmapFromData, width parameter is 0");
2533 assert(height != 0 &&
"CreatePixmapFromData, height parameter is 0");
2537 std::vector<unsigned char> imageData(bits, bits + width * height * 4);
2540 unsigned char *p = &imageData[0];
2541 for (
unsigned i = 0,
e = width * height; i <
e; ++i, p += 4)
2542 std::swap(p[0], p[2]);
2546 H : height data : &imageData[0]]);
2550 Error(
"CreatePixmapFromData",
"QuartzImage initialziation failed");
2554 image.
Get().fID =
fPimpl->RegisterDrawable(image.
Get());
2555 return image.
Get().fID;
2562 assert(std::numeric_limits<unsigned char>::digits == 8 &&
"CreateBitmap, ASImage requires octets");
2570 std::vector<unsigned char> imageData(width * height);
2573 for (
unsigned i = 0, j = 0,
e = width / 8 * height; i <
e; ++i) {
2574 for(
unsigned bit = 0; bit < 8; ++bit, ++j) {
2575 if (bitmap[i] & (1 << bit))
2584 H : height bitmapMask : &imageData[0]]);
2587 Error(
"CreateBitmap",
"QuartzImage initialization failed");
2591 image.
Get().fID =
fPimpl->RegisterDrawable(image.
Get());
2592 return image.
Get().fID;
2598 fPimpl->DeleteDrawable(pixmapID);
2605 assert(
fPimpl->GetDrawable(pixmapID).fIsPixmap == YES &&
"DeletePixmap, object is not a pixmap");
2606 fPimpl->fX11CommandBuffer.AddDeletePixmap(pixmapID);
2622 if (
fPimpl->IsRootWindow(wid)) {
2623 Warning(
"GetColorBits",
"Called for root window");
2625 assert(
x >= 0 &&
"GetColorBits, parameter 'x' is negative");
2626 assert(
y >= 0 &&
"GetColorBits, parameter 'y' is negative");
2627 assert(w != 0 &&
"GetColorBits, parameter 'w' is 0");
2628 assert(
h != 0 &&
"GetColorBits, parameter 'h' is 0");
2631 return [
fPimpl->GetDrawable(wid) readColorBits : area];
2637#pragma mark - XImage emulation.
2653 assert(wid >
fPimpl->GetRootWindowID() &&
"GetImageSize, parameter 'wid' is invalid");
2656 width = drawable.fWidth;
2657 height = drawable.fHeight;
2671 "PutPixel, parameter 'imageID' is a bad pixmap id");
2672 assert(
x >= 0 &&
"PutPixel, parameter 'x' is negative");
2673 assert(
y >= 0 &&
"PutPixel, parameter 'y' is negative");
2677 unsigned char rgb[3] = {};
2679 [pixmap putPixel : rgb
X :
x Y :
y];
2690 CopyArea(imageID, drawableID, gc, srcX, srcY, width, height, dstX, dstY);
2698 "DeleteImage, imageID parameter is not a valid image id");
2702#pragma mark - Mouse related code.
2720 assert(!
fPimpl->IsRootWindow(wid) &&
"GrabButton, called for 'root' window");
2725 widget.fPassiveGrabOwnerEvents = YES;
2726 widget.fPassiveGrabButton = button;
2727 widget.fPassiveGrabEventMask = eventMask;
2728 widget.fPassiveGrabKeyModifiers = keyModifiers;
2731 widget.fPassiveGrabOwnerEvents = NO;
2732 widget.fPassiveGrabButton = -1;
2733 widget.fPassiveGrabEventMask = 0;
2734 widget.fPassiveGrabKeyModifiers = 0;
2748 assert(!
fPimpl->IsRootWindow(wid) &&
"GrabPointer, called for 'root' window");
2751 fPimpl->fX11EventTranslator.SetPointerGrab(view, eventMask, ownerEvents);
2755 fPimpl->fX11EventTranslator.CancelPointerGrab();
2806 assert(!
fPimpl->IsRootWindow(wid) &&
"GrabKey, called for root window");
2812 [view addPassiveKeyGrab : keyCode modifiers : cocoaKeyModifiers];
2814 [view removePassiveKeyGrab : keyCode modifiers : cocoaKeyModifiers];
2833 return fPimpl->fX11EventTranslator.GetInputFocus();
2840 assert(!
fPimpl->IsRootWindow(wid) &&
"SetInputFocus, called for root window");
2843 fPimpl->fX11EventTranslator.SetInputFocus(nil);
2845 fPimpl->fX11EventTranslator.SetInputFocus(
fPimpl->GetWindow(wid).fContentView);
2861 assert(buf != 0 &&
"LookupString, parameter 'buf' is null");
2862 assert(length >= 2 &&
"LookupString, parameter 'length' - not enough memory to return null-terminated ASCII string");
2867#pragma mark - Font management.
2874 assert(fontName != 0 &&
"LoadQueryFont, fontName is null");
2877 if (ParseXLFDName(fontName, xlfd)) {
2883 return fPimpl->fFontManager.LoadFont(xlfd);
2898 fPimpl->fFontManager.UnloadFont(fs);
2913 return fPimpl->fFontManager.GetTextWidth(font, s, len);
2920 fPimpl->fFontManager.GetFontProperties(font, maxAscent, maxDescent);
2947 if (fontName && fontName[0]) {
2950 return fPimpl->fFontManager.ListFonts(xlfd, maxNames, count);
2963 fPimpl->fFontManager.FreeFontNames(fontList);
2966#pragma mark - Color management.
2974 return fPimpl->fX11ColorParser.ParseColor(colorName, color);
2980 const unsigned red = unsigned(
double(color.fRed) / 0xFFFF * 0xFF);
2981 const unsigned green = unsigned(
double(color.fGreen) / 0xFFFF * 0xFF);
2982 const unsigned blue = unsigned(
double(color.fBlue) / 0xFFFF * 0xFF);
2983 color.fPixel = red << 16 | green << 8 | blue;
2991 color.fRed = (color.fPixel >> 16 & 0xFF) * 0xFFFF / 0xFF;
2992 color.fGreen = (color.fPixel >> 8 & 0xFF) * 0xFFFF / 0xFF;
2993 color.fBlue = (color.fPixel & 0xFF) * 0xFFFF / 0xFF;
3006 if (
const TColor *
const color =
gROOT->GetColor(rootColorIndex)) {
3007 Float_t red = 0.f, green = 0.f, blue = 0.f;
3008 color->GetRGB(red, green, blue);
3009 pixel = unsigned(red * 255) << 16;
3010 pixel |= unsigned(green * 255) << 8;
3011 pixel |= unsigned(blue * 255);
3045#pragma mark - Graphical context management.
3065 assert(gc <=
fX11Contexts.size() && gc > 0 &&
"ChangeGC, invalid context id");
3076 assert(gc <=
fX11Contexts.size() && gc > 0 &&
"ChangeGC, invalid context id");
3077 assert(gval != 0 &&
"ChangeGC, gval parameter is null");
3081 x11Context.
fMask |= mask;
3131 const unsigned nDashes =
sizeof x11Context.
fDashes /
sizeof x11Context.
fDashes[0];
3132 for (
unsigned i = 0; i < nDashes; ++i)
3141 assert(src <=
fX11Contexts.size() && src > 0 &&
"CopyGC, bad source context");
3142 assert(dst <=
fX11Contexts.size() && dst > 0 &&
"CopyGC, bad destination context");
3145 srcContext.
fMask = mask;
3165#pragma mark - Cursor management.
3187 assert(!
fPimpl->IsRootWindow(wid) &&
"SetCursor, called for root window");
3190 view.fCurrentCursor = cursor;
3210 const NSPoint screenPoint = [
NSEvent mouseLocation];
3226 rootWinID =
fPimpl->GetRootWindowID();
3228 NSPoint screenPoint = [
NSEvent mouseLocation];
3231 rootX = screenPoint.x;
3232 rootY = screenPoint.y;
3235 if (winID >
fPimpl->GetRootWindowID()) {
3241 winX = screenPoint.x;
3242 winY = screenPoint.y;
3247 childWinID = childWin.fID;
3255#pragma mark - OpenGL management.
3263 return [[NSScreen mainScreen] backingScaleFactor];
3268 const std::vector<std::pair<UInt_t, Int_t> > &formatComponents)
3272 typedef std::pair<UInt_t, Int_t> component_type;
3273 typedef std::vector<component_type>::size_type size_type;
3276 std::vector<NSOpenGLPixelFormatAttribute> attribs;
3277 for (size_type i = 0,
e = formatComponents.size(); i <
e; ++i) {
3278 const component_type &comp = formatComponents[i];
3281 attribs.push_back(NSOpenGLPFADoubleBuffer);
3283 attribs.push_back(NSOpenGLPFADepthSize);
3284 attribs.push_back(comp.second > 0 ? comp.second : 32);
3286 attribs.push_back(NSOpenGLPFAAccumSize);
3287 attribs.push_back(comp.second > 0 ? comp.second : 1);
3289 attribs.push_back(NSOpenGLPFAStencilSize);
3290 attribs.push_back(comp.second > 0 ? comp.second : 8);
3292 attribs.push_back(NSOpenGLPFAMultisample);
3293 attribs.push_back(NSOpenGLPFASampleBuffers);
3294 attribs.push_back(1);
3295 attribs.push_back(NSOpenGLPFASamples);
3296 attribs.push_back(comp.second ? comp.second : 8);
3300 attribs.push_back(0);
3302 NSOpenGLPixelFormat *
const pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes : &attribs[0]];
3306 if (!
fPimpl->IsRootWindow(parentID)) {
3307 parentView =
fPimpl->GetWindow(parentID).fContentView;
3308 assert([parentView isKindOfClass : [
QuartzView class]] &&
3309 "CreateOpenGLWindow, parent view must be QuartzView");
3312 NSRect viewFrame = {};
3313 viewFrame.size.width = width;
3314 viewFrame.size.height = height;
3322 [parentView addChild : glView];
3323 glID =
fPimpl->RegisterDrawable(glView);
3333 Error(
"CreateOpenGLWindow",
"QuartzWindow allocation/initialization"
3334 " failed for a top-level GL widget");
3338 glID =
fPimpl->RegisterDrawable(parent);
3348 assert(!
fPimpl->IsRootWindow(windowID) &&
3349 "CreateOpenGLContext, parameter 'windowID' is a root window");
3351 "CreateOpenGLContext, view is not an OpenGL view");
3353 NSOpenGLContext *
const sharedContext =
fPimpl->GetGLContextForHandle(sharedID);
3357 newContext([[NSOpenGLContext alloc] initWithFormat : glView.
pixelFormat shareContext : sharedContext]);
3375 assert(ctxID > 0 &&
"MakeOpenGLContextCurrent, invalid context id");
3377 NSOpenGLContext *
const glContext =
fPimpl->GetGLContextForHandle(ctxID);
3379 Error(
"MakeOpenGLContextCurrent",
"No OpenGL context found for id %d",
int(ctxID));
3387 if ([glContext view] != glView)
3388 [glContext setView : glView];
3396 [glContext makeCurrentContext];
3414 const UInt_t width = std::max(glView.frame.size.width, CGFloat(100));
3415 const UInt_t height = std::max(glView.frame.size.height, CGFloat(100));
3417 NSRect viewFrame = {};
3418 viewFrame.size.width = width;
3419 viewFrame.size.height = height;
3421 const NSUInteger styleMask = kTitledWindowMask | kClosableWindowMask |
3422 kMiniaturizableWindowMask | kResizableWindowMask;
3425 fakeWindow = [[
QuartzWindow alloc] initWithContentRect : viewFrame styleMask : styleMask
3426 backing : NSBackingStoreBuffered defer : NO windowAttributes : &attr];
3430 [fakeView setHidden : NO];
3432 fPimpl->SetFakeGLWindow(fakeWindow);
3436 [fakeView setHidden : NO];
3440 [glContext setView : fakeView];
3441 [glContext makeCurrentContext];
3450 NSOpenGLContext *
const currentContext = [NSOpenGLContext currentContext];
3451 if (!currentContext) {
3452 Error(
"GetCurrentOpenGLContext",
"The current OpenGL context is null");
3456 const Handle_t contextID =
fPimpl->GetHandleForGLContext(currentContext);
3458 Error(
"GetCurrentOpenGLContext",
"The current OpenGL context was"
3459 " not created/registered by TGCocoa");
3467 assert(ctxID > 0 &&
"FlushOpenGLBuffer, invalid context id");
3469 NSOpenGLContext *
const glContext =
fPimpl->GetGLContextForHandle(ctxID);
3470 assert(glContext != nil &&
"FlushOpenGLBuffer, bad context id");
3472 if (glContext != [NSOpenGLContext currentContext])
3476 [glContext flushBuffer];
3485 NSOpenGLContext *
const glContext =
fPimpl->GetGLContextForHandle(ctxID);
3486 if (
NSView *
const v = [glContext view]) {
3490 [glContext clearDrawable];
3493 if (glContext == [NSOpenGLContext currentContext])
3494 [NSOpenGLContext clearCurrentContext];
3496 fPimpl->DeleteGLContext(ctxID);
3499#pragma mark - Off-screen rendering for TPad/TCanvas.
3505 assert(windowID > (
Int_t)
fPimpl->GetRootWindowID() &&
"SetDoubleBuffer called for root window");
3507 if (windowID == 999) {
3508 Warning(
"SetDoubleBuffer",
"called with wid == 999");
3522 "SetDoubleBufferON, called, but no correct window was selected before");
3525 if (!window)
return;
3527 assert(window.fIsPixmap == NO &&
3528 "SetDoubleBufferON, selected drawable is a pixmap, can not attach pixmap to pixmap");
3530 [window setDirectDraw : YES];
3540 "SetDoubleBufferON, called, but no correct window was selected before");
3543 if (!window)
return;
3545 assert(window.fIsPixmap == NO &&
3546 "SetDoubleBufferON, selected drawable is a pixmap, can not attach pixmap to pixmap");
3548 [window setDirectDraw : NO];
3550 const unsigned currW = window.fWidth;
3551 const unsigned currH = window.fHeight;
3553 if (
QuartzPixmap *
const currentPixmap = window.fBackBuffer) {
3554 if (currH == currentPixmap.fHeight && currW == currentPixmap.fWidth)
3559 H : currH scaleFactor : [[NSScreen mainScreen] backingScaleFactor]]);
3561 window.fBackBuffer = pixmap.
Get();
3564 Error(
"SetDoubleBufferON",
"QuartzPixmap initialization failed");
3572 auto windows = NSApplication.sharedApplication.windows;
3573 for (
NSWindow *candidate : windows) {
3581#pragma mark - Event management part.
3586 if (
fPimpl->IsRootWindow(wid))
3595 fPimpl->fX11EventTranslator.fEventQueue.push_back(newEvent);
3601 assert(
fPimpl->fX11EventTranslator.fEventQueue.size() > 0 &&
"NextEvent, event queue is empty");
3603 event =
fPimpl->fX11EventTranslator.fEventQueue.front();
3604 fPimpl->fX11EventTranslator.fEventQueue.pop_front();
3610 return (
Int_t)
fPimpl->fX11EventTranslator.fEventQueue.size();
3617 typedef X11::EventQueue_t::iterator iterator_type;
3619 iterator_type it =
fPimpl->fX11EventTranslator.fEventQueue.begin();
3620 iterator_type eIt =
fPimpl->fX11EventTranslator.fEventQueue.end();
3622 for (; it != eIt; ++it) {
3623 const Event_t &queuedEvent = *it;
3624 if (queuedEvent.
fWindow == windowID && queuedEvent.
fType == type) {
3625 event = queuedEvent;
3626 fPimpl->fX11EventTranslator.fEventQueue.erase(it);
3642#pragma mark - "Drag and drop", "Copy and paste", X11 properties.
3649 assert(
name != 0 &&
"InternAtom, parameter 'name' is null");
3666 assert(!
fPimpl->IsRootWindow(windowID) &&
3667 "SetPrimarySelectionOwner, windowID parameter is a 'root' window");
3668 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3669 "SetPrimarySelectionOwner, windowID parameter is not a valid window");
3671 const Atom_t primarySelectionAtom =
FindAtom(
"XA_PRIMARY",
false);
3672 assert(primarySelectionAtom !=
kNone &&
3673 "SetPrimarySelectionOwner, predefined XA_PRIMARY atom was not found");
3691 assert(!
fPimpl->IsRootWindow(windowID) &&
3692 "SetSelectionOwner, windowID parameter is a 'root' window'");
3693 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3694 "SetSelectionOwner, windowID parameter is not a valid window");
3709 const Atom_t primarySelectionAtom =
FindAtom(
"XA_PRIMARY",
false);
3710 assert(primarySelectionAtom !=
kNone &&
3711 "GetPrimarySelectionOwner, predefined XA_PRIMARY atom was not found");
3734 assert(!
fPimpl->IsRootWindow(windowID) &&
3735 "ConvertPrimarySelection, parameter 'windowID' is root window");
3736 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3737 "ConvertPrimarySelection, parameter windowID parameter is not a window id");
3740 assert(primarySelectionAtom !=
kNone &&
3741 "ConvertPrimarySelection, XA_PRIMARY predefined atom not found");
3744 assert(stringAtom !=
kNone &&
3745 "ConvertPrimarySelection, XA_STRING predefined atom not found");
3747 ConvertSelection(windowID, primarySelectionAtom, stringAtom, clipboard, when);
3763 assert(!
fPimpl->IsRootWindow(windowID) &&
3764 "ConvertSelection, parameter 'windowID' is root window'");
3765 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3766 "ConvertSelection, parameter 'windowID' is not a window id");
3777 newEvent.
fUser[0] = windowID;
3778 newEvent.
fUser[1] = selection;
3779 newEvent.
fUser[2] = target;
3780 newEvent.
fUser[3] = property;
3788 ULong_t *bytesAfterReturn,
unsigned char **propertyReturn)
3797 if (
fPimpl->IsRootWindow(windowID))
3800 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3801 "GetProperty, parameter 'windowID' is not a valid window id");
3802 assert(propertyID > 0 && propertyID <=
fAtomToName.size() &&
3803 "GetProperty, parameter 'propertyID' is not a valid atom");
3804 assert(actualType != 0 &&
"GetProperty, parameter 'actualType' is null");
3805 assert(actualFormat != 0 &&
"GetProperty, parameter 'actualFormat' is null");
3806 assert(bytesAfterReturn != 0 &&
"GetProperty, parameter 'bytesAfterReturn' is null");
3807 assert(propertyReturn != 0 &&
"GetProperty, parameter 'propertyReturn' is null");
3811 *bytesAfterReturn = 0;
3812 *propertyReturn = 0;
3815 const std::string &atomName =
fAtomToName[propertyID - 1];
3818 if (![window hasProperty : atomName.c_str()]) {
3819 Error(
"GetProperty",
"Unknown property %s requested", atomName.c_str());
3823 unsigned tmpFormat = 0, tmpElements = 0;
3824 *propertyReturn = [window getProperty : atomName.c_str() returnType : actualType
3825 returnFormat : &tmpFormat nElements : &tmpElements];
3826 *actualFormat = (
Int_t)tmpFormat;
3827 *nItems = tmpElements;
3846 assert(!
fPimpl->IsRootWindow(windowID) &&
3847 "GetPasteBuffer, parameter 'windowID' is root window");
3848 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3849 "GetPasteBuffer, parameter 'windowID' is not a valid window");
3850 assert(propertyID && propertyID <=
fAtomToName.size() &&
3851 "GetPasteBuffer, parameter 'propertyID' is not a valid atom");
3855 const std::string &atomString =
fAtomToName[propertyID - 1];
3858 if (![window hasProperty : atomString.c_str()]) {
3859 Error(
"GetPasteBuffer",
"No property %s on a window", atomString.c_str());
3864 unsigned tmpFormat = 0, nElements = 0;
3867 propertyData((
char *)[window getProperty : atomString.c_str()
3868 returnType : &tmpType returnFormat : &tmpFormat
3869 nElements : &nElements]);
3871 assert(tmpFormat == 8 &&
"GetPasteBuffer, property has wrong format");
3873 text.Insert(0, propertyData.
Get(), nElements);
3874 nChars = (
Int_t)nElements;
3879 [window removeProperty : atomString.c_str()];
3910 assert(!
fPimpl->IsRootWindow(windowID) &&
3911 "ChangeProperty, parameter 'windowID' is root window");
3912 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3913 "ChangeProperty, parameter 'windowID' is not a valid window id");
3914 assert(propertyID && propertyID <=
fAtomToName.size() &&
3915 "ChangeProperty, parameter 'propertyID' is not a valid atom");
3919 const std::string &atomString =
fAtomToName[propertyID - 1];
3922 [window setProperty : atomString.c_str() data : data
size : len forType : type format : 8];
3944 assert(!
fPimpl->IsRootWindow(windowID) &&
3945 "ChangeProperties, parameter 'windowID' is root window");
3946 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3947 "ChangeProperties, parameter 'windowID' is not a valid window id");
3948 assert(propertyID && propertyID <=
fAtomToName.size() &&
3949 "ChangeProperties, parameter 'propertyID' is not a valid atom");
3953 const std::string &atomName =
fAtomToName[propertyID - 1];
3956 [window setProperty : atomName.c_str() data : data
3957 size : len forType : type format : format];
3974 assert(!
fPimpl->IsRootWindow(windowID) &&
3975 "DeleteProperty, parameter 'windowID' is root window");
3976 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3977 "DeleteProperty, parameter 'windowID' is not a valid window");
3978 assert(propertyID && propertyID <=
fAtomToName.size() &&
3979 "DeleteProperty, parameter 'propertyID' is not a valid atom");
3981 const std::string &atomString =
fAtomToName[propertyID - 1];
3982 [
fPimpl->GetWindow(windowID) removeProperty : atomString.c_str()];
3998 assert(windowID >
fPimpl->GetRootWindowID() &&
3999 "SetDNDAware, parameter 'windowID' is not a valid window id");
4000 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
4001 "SetDNDAware, parameter 'windowID' is not a window");
4006 NSArray *
const supportedTypes = [NSArray arrayWithObjects : NSFilenamesPboardType, nil];
4010 [view registerForDraggedTypes : supportedTypes];
4017 assert(xaAtomAtom == 4 &&
"SetDNDAware, XA_ATOM is not defined");
4022 assert(
sizeof(
unsigned) == 4 &&
"SetDNDAware, sizeof(unsigned) must be 4");
4024 std::vector<unsigned> propertyData;
4025 propertyData.push_back(4);
4028 for (
unsigned i = 0; typeList[i]; ++i)
4029 propertyData.push_back(
unsigned(typeList[i]));
4032 [view setProperty :
"XdndAware" data : (
unsigned char *)&propertyData[0]
4033 size : propertyData.size() forType : xaAtomAtom format : 32];
4041 if (windowID <= fPimpl->GetRootWindowID())
4044 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
4045 "IsDNDAware, windowID parameter is not a window");
4056 ::Warning(
"SetTypeList",
"Not implemented");
4080 fPimpl->IsRootWindow(winID) ? nil :
fPimpl->GetWindow(winID).fContentView,
4081 dragWinID, inputWinID,
x,
y, maxDepth);
4083 return testView.fID;
4088#pragma mark - Noops.
4108 chupx = chupy = 0.f;
4213 NSPoint newCursorPosition = {};
4214 newCursorPosition.x = ix;
4215 newCursorPosition.y = iy;
4217 if (
fPimpl->GetRootWindowID() == winID) {
4221 assert(
fPimpl->GetDrawable(winID).fIsPixmap == NO &&
4222 "Warp, drawable is not a window");
4227 CGWarpMouseCursorPosition(NSPointToCGPoint(newCursorPosition));
4459#pragma mark - Details and aux. functions.
4464 return &
fPimpl->fX11EventTranslator;
4470 return &
fPimpl->fX11CommandBuffer;
4482 assert(
fCocoaDraw > 0 &&
"CocoaDrawOFF, was already off");
4496 if (!drawable.fIsPixmap) {
4497 Error(
"GetCurrentContext",
"TCanvas/TPad's internal error,"
4498 " selected drawable is not a pixmap!");
4502 return drawable.fContext;
4515 ProcessSerialNumber psn = {0, kCurrentProcess};
4517 const OSStatus res1 = TransformProcessType(&psn, kProcessTransformToForegroundApplication);
4522 if (res1 != noErr && res1 != paramErr) {
4523 Error(
"MakeProcessForeground",
"TransformProcessType failed with code %d",
int(res1));
4526#ifdef MAC_OS_X_VERSION_10_9
4528 [[NSApplication sharedApplication] activateIgnoringOtherApps : YES];
4530 const OSErr res2 = SetFrontProcess(&psn);
4531 if (res2 != noErr) {
4532 Error(
"MakeProcessForeground",
"SetFrontProcess failed with code %d", res2);
4539#ifdef MAC_OS_X_VERSION_10_9
4541 [[NSApplication sharedApplication] activateIgnoringOtherApps : YES];
4543 ProcessSerialNumber psn = {};
4545 OSErr res = GetCurrentProcess(&psn);
4547 Error(
"MakeProcessForeground",
"GetCurrentProcess failed with code %d", res);
4551 res = SetFrontProcess(&psn);
4553 Error(
"MapProcessForeground",
"SetFrontProcess failed with code %d", res);
4565 const std::map<std::string, Atom_t>::const_iterator it =
fNameToAtom.find(atomName);
4569 else if (addIfNotFound) {
4584 const char *
const iconDirectoryPath =
gEnv->GetValue(
"Gui.IconPath",TROOT::GetIconPath());
4585 if (iconDirectoryPath) {
4587 if (fileName.
Get()) {
4590 NSString *cocoaStr = [NSString stringWithCString : fileName.
Get() encoding : NSASCIIStringEncoding];
4591 NSImage *image = [[[NSImage alloc] initWithContentsOfFile : cocoaStr] autorelease];
4592 [NSApp setApplicationIconImage : image];
Handle_t WinContext_t
Window drawing context.
const Mask_t kGCDashOffset
const Mask_t kGCBackground
const Mask_t kGCForeground
const Mask_t kGCLineStyle
const Mask_t kGCSubwindowMode
const Mask_t kGCLineWidth
Handle_t Cursor_t
Cursor handle.
const Mask_t kGCClipXOrigin
Handle_t FontH_t
Font handle (as opposed to Font_t which is an index).
Handle_t Visual_t
Visual handle.
const Mask_t kGCFillStyle
const Mask_t kGCJoinStyle
Handle_t Display_t
Display handle.
Handle_t Pixmap_t
Pixmap handle.
ULong_t Time_t
Event time.
EInitialState
Initial window mapping state.
const Mask_t kGCTileStipXOrigin
Handle_t Drawable_t
Drawable handle.
Handle_t Colormap_t
Colormap handle.
const Mask_t kStructureNotifyMask
Handle_t GContext_t
Graphics context handle.
const Mask_t kGCPlaneMask
UInt_t Mask_t
Structure mask type.
const Mask_t kGCGraphicsExposures
const Mask_t kGCClipYOrigin
Handle_t Region_t
Region handle.
Handle_t FontStruct_t
Pointer to font structure.
const Mask_t kGCTileStipYOrigin
EMouseButton
Button names.
Handle_t Window_t
Window handle.
ULongptr_t Handle_t
Generic resource handle.
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
int Int_t
Signed integer 4 bytes (int).
unsigned char UChar_t
Unsigned Character 1 byte (unsigned char).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
bool Bool_t
Boolean (0=false, 1=true) (bool).
double Double_t
Double 8 bytes.
short Color_t
Color number (short).
float Float_t
Float 4 bytes (float).
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
Binding & operator=(OUT(*fun)(void))
externTVirtualMutex * gROOTMutex
#define R__LOCKGUARD(mutex)
DerivedType * Get() const
void Reset(NSObject *object)
void DeleteFont(FontStruct_t fs) override
Explicitly deletes the font structure "fs" obtained via LoadQueryFont().
Int_t WriteGIF(char *name) override
Writes the current window into GIF file.
void SetCharacterUp(Float_t chupx, Float_t chupy) override
Sets character up vector.
Bool_t IsDNDAware(Window_t win, Atom_t *typelist) override
Checks if the Window is DND aware, and knows any of the DND formats passed in argument.
Pixmap_t CreatePixmap(Drawable_t wid, UInt_t w, UInt_t h) override
Creates a pixmap of the specified width and height and returns a pixmap ID that identifies it.
void TranslateCoordinates(Window_t src, Window_t dest, Int_t src_x, Int_t src_y, Int_t &dest_x, Int_t &dest_y, Window_t &child) override
Translates coordinates in one window to the coordinate space of another window.
void GetRegionBox(Region_t reg, Rectangle_t *rect) override
Returns smallest enclosing rectangle.
Window_t GetParent(Window_t wid) const override
Returns the parent of the window "id".
Double_t GetOpenGLScalingFactor() override
On a HiDPI resolution it can be > 1., this means glViewport should use scaled width and height.
void GetCharacterUp(Float_t &chupx, Float_t &chupy) override
Returns character up vector.
UInt_t ScreenWidthMM() const override
Returns the width of the screen in millimeters.
std::vector< GCValues_t > fX11Contexts
void GrabPointer(Window_t wid, UInt_t evmask, Window_t confine, Cursor_t cursor, Bool_t grab=kTRUE, Bool_t owner_events=kTRUE) override
Establishes an active pointer grab.
void DrawLineAux(Drawable_t wid, const GCValues_t &gcVals, Int_t x1, Int_t y1, Int_t x2, Int_t y2)
EDrawMode GetDrawModeW(WinContext_t wctxt) override
Returns window draw mode.
Int_t GetProperty(Window_t, Atom_t, Long_t, Long_t, Bool_t, Atom_t, Atom_t *, Int_t *, ULong_t *, ULong_t *, unsigned char **) override
Returns the actual type of the property; the actual format of the property; the number of 8-bit,...
void ReparentTopLevel(Window_t wid, Window_t pid, Int_t x, Int_t y)
void SetDoubleBufferON() override
Turns double buffer mode on.
void PutPixel(Drawable_t wid, Int_t x, Int_t y, ULong_t pixel) override
Overwrites the pixel in the image with the specified pixel value.
Bool_t IsCocoaDraw() const
void GetWindowSize(Drawable_t wid, Int_t &x, Int_t &y, UInt_t &w, UInt_t &h) override
Returns the location and the size of window "id".
void SetApplicationIcon()
void SetWindowBackgroundPixmap(Window_t wid, Pixmap_t pxm) override
Sets the background pixmap of the window "id" to the specified pixmap "pxm".
bool fDisplayShapeChanged
void DeleteOpenGLContext(Int_t ctxID) override
Deletes OpenGL context for window "wid".
Bool_t AllocColor(Colormap_t cmap, ColorStruct_t &color) override
Allocates a read-only colormap entry corresponding to the closest RGB value supported by the hardware...
Bool_t EqualRegion(Region_t rega, Region_t regb) override
Returns kTRUE if the two regions have the same offset, size, and shape.
void CopyPixmap(Int_t wid, Int_t xpos, Int_t ypos) override
Copies the pixmap "wid" at the position [xpos,ypos] in the current window.
void FreeFontStruct(FontStruct_t fs) override
Frees the font structure "fs".
void DestroySubwindows(Window_t wid) override
The DestroySubwindows function destroys all inferior windows of the specified window,...
Int_t OpenPixmap(UInt_t w, UInt_t h) override
Creates a pixmap of the width "w" and height "h" you specified.
Int_t TextWidth(FontStruct_t font, const char *s, Int_t len) override
Return length of the string "s" in pixels. Size depends on font.
void ResizeWindow(Int_t wid) override
Resizes the window "wid" if necessary.
void UpdateWindowW(WinContext_t wctxt, Int_t mode) override
Update specified window.
void FillRectangleAux(Drawable_t wid, const GCValues_t &gcVals, Int_t x, Int_t y, UInt_t w, UInt_t h)
Atom_t FindAtom(const std::string &atomName, bool addIfNotFound)
ROOT::MacOSX::X11::CommandBuffer * GetCommandBuffer() const
void ChangeGC(GContext_t gc, GCValues_t *gval) override
Changes the components specified by the mask in gval for the specified GC.
void CopyAreaAux(Drawable_t src, Drawable_t dst, const GCValues_t &gc, Int_t srcX, Int_t srcY, UInt_t width, UInt_t height, Int_t dstX, Int_t dstY)
void SetDoubleBufferOFF() override
Turns double buffer mode off.
void DrawRectangleAux(Drawable_t wid, const GCValues_t &gcVals, Int_t x, Int_t y, UInt_t w, UInt_t h)
void Bell(Int_t percent) override
Sets the sound bell. Percent is loudness from -100% to 100%.
void SetWMState(Window_t winID, EInitialState state) override
Sets the initial state of the window "id": either kNormalState or kIconicState.
Window_t GetWindowID(Int_t wid) override
Returns the X11 window identifier.
void SetWMSizeHints(Window_t winID, UInt_t wMin, UInt_t hMin, UInt_t wMax, UInt_t hMax, UInt_t wInc, UInt_t hInc) override
Gives the window manager minimum and maximum size hints of the window "id".
void LookupString(Event_t *event, char *buf, Int_t buflen, UInt_t &keysym) override
Converts the keycode from the event structure to a key symbol (according to the modifiers specified i...
Cursor_t CreateCursor(ECursor cursor) override
Creates the specified cursor.
Window_t GetCurrentWindow() const override
pointer to the current internal window used in canvas graphics
void IntersectRegion(Region_t rega, Region_t regb, Region_t result) override
Computes the intersection of two regions.
std::unique_ptr< ROOT::MacOSX::Details::CocoaPrivate > fPimpl
!
void SetWindowName(Window_t wid, char *name) override
Sets the window name.
void Warp(Int_t ix, Int_t iy, Window_t wid) override
Sets the pointer position.
void IconifyWindow(Window_t wid) override
Iconifies the window "id".
Int_t ResizePixmap(Int_t wid, UInt_t w, UInt_t h) override
Resizes the specified pixmap "wid".
void * GetCurrentContext()
Window_t GetInputFocus() override
Returns the window id of the window having the input focus.
Colormap_t GetColormap() const override
Returns handle to colormap.
void DrawRectangle(Drawable_t wid, GContext_t gc, Int_t x, Int_t y, UInt_t w, UInt_t h) override
Draws rectangle outlines of [x,y] [x+w,y] [x+w,y+h] [x,y+h].
void FreeColor(Colormap_t cmap, ULong_t pixel) override
Frees color cell with specified pixel value.
Bool_t NeedRedraw(ULong_t tgwindow, Bool_t force) override
Notify the low level GUI layer ROOT requires "tgwindow" to be updated.
void DeleteGC(GContext_t gc) override
Deletes the specified GC "gc".
void ClearWindowW(WinContext_t wctxt) override
Clear specified window.
void SetDNDAware(Window_t, Atom_t *) override
Add XdndAware property and the list of drag and drop types to the Window win.
Int_t AddPixmap(ULong_t pixid, UInt_t w, UInt_t h) override
Registers a pixmap created by TGLManager as a ROOT pixmap.
void DestroyWindow(Window_t wid) override
Destroys the window "id" as well as all of its subwindows.
void ShapeCombineMask(Window_t wid, Int_t x, Int_t y, Pixmap_t mask) override
The Non-rectangular Window Shape Extension adds non-rectangular windows to the System.
void GetPlanes(Int_t &nplanes) override
Returns the maximum number of planes.
void UpdateWindow(Int_t mode) override
Updates or synchronises client and server once (not permanent).
Int_t SupportsExtension(const char *extensionName) const override
Returns 1 if window system server supports extension given by the argument, returns 0 in case extensi...
Int_t GetScreen() const override
Returns screen number.
Bool_t HasTTFonts() const override
Returns True when TrueType fonts are used.
void SetWindowBackground(Window_t wid, ULong_t color) override
Sets the background of the window "id" to the specified color value "color".
Bool_t ReadPictureDataFromFile(const char *filename, char ***ret_data) override
Reads picture data from file "filename" and store it in "ret_data".
void DestroyRegion(Region_t reg) override
Destroys the region "reg".
void GetRGB(Int_t index, Float_t &r, Float_t &g, Float_t &b) override
Returns RGB values for color "index".
void CopyPixmapW(WinContext_t wctxt, Int_t wid, Int_t xpos, Int_t ypos) override
Copy pixmap to specified window.
unsigned char * GetColorBits(Drawable_t wid, Int_t x, Int_t y, UInt_t w, UInt_t h) override
Returns an array of pixels created from a part of drawable (defined by x, y, w, h) in format:
void SendEvent(Window_t wid, Event_t *ev) override
Specifies the event "ev" is to be sent to the window "id".
Int_t KeysymToKeycode(UInt_t keysym) override
Converts the "keysym" to the appropriate keycode.
void QueryColor(Colormap_t cmap, ColorStruct_t &color) override
Returns the current RGB value for the pixel in the "color" structure.
void MoveWindow(Int_t wid, Int_t x, Int_t y) override
Moves the window "wid" to the specified x and y coordinates.
void SelectInput(Window_t wid, UInt_t evmask) override
Defines which input events the window is interested in.
void ClearWindow() override
Clears the entire area of the current window.
void SetClipRectangles(GContext_t gc, Int_t x, Int_t y, Rectangle_t *recs, Int_t n) override
Sets clipping rectangles in graphics context.
Bool_t CreatePictureFromData(Drawable_t wid, char **data, Pixmap_t &pict, Pixmap_t &pict_mask, PictureAttributes_t &attr) override
Creates a picture pict from data in bitmap format.
void DrawString(Drawable_t wid, GContext_t gc, Int_t x, Int_t y, const char *s, Int_t len) override
Each character image, as defined by the font in the GC, is treated as an additional mask for a fill o...
std::vector< std::string > fAtomToName
void XorRegion(Region_t rega, Region_t regb, Region_t result) override
Calculates the difference between the union and intersection of two regions.
void SetTextMagnitude(Float_t mgn) override
Sets the current text magnification factor to "mgn".
FontStruct_t GetFontStruct(FontH_t fh) override
Retrieves the associated font structure of the font specified font handle "fh".
void SetMWMHints(Window_t winID, UInt_t value, UInt_t decorators, UInt_t inputMode) override
Sets decoration style.
Handle_t GetCurrentOpenGLContext() override
Asks OpenGL subsystem about the current OpenGL context.
Bool_t MakeOpenGLContextCurrent(Handle_t ctx, Window_t windowID) override
Makes context ctx current OpenGL context.
void SetPrimarySelectionOwner(Window_t wid) override
Makes the window "id" the current owner of the primary selection.
void GetGCValues(GContext_t gc, GCValues_t &gval) override
Returns the components specified by the mask in "gval" for the specified GC "gc" (see also the GCValu...
void SetRGB(Int_t cindex, Float_t r, Float_t g, Float_t b) override
Sets color intensities the specified color index "cindex".
void MapRaised(Window_t wid) override
Maps the window "id" and all of its subwindows that have had map requests on the screen and put this ...
Pixmap_t CreatePixmapFromData(unsigned char *bits, UInt_t width, UInt_t height) override
create pixmap from RGB data.
void SetClipOFF(Int_t wid) override
Turns off the clipping for the window "wid".
void GetWindowAttributes(Window_t wid, WindowAttributes_t &attr) override
The WindowAttributes_t structure is set to default.
Int_t RequestString(Int_t x, Int_t y, char *text) override
Requests string: text is displayed and can be edited with Emacs-like keybinding.
void ChangeActivePointerGrab(Window_t, UInt_t, Cursor_t) override
Changes the specified dynamic parameters if the pointer is actively grabbed by the client and if the ...
Bool_t CheckEvent(Window_t wid, EGEventType type, Event_t &ev) override
Check if there is for window "id" an event of type "type".
Int_t OpenDisplay(const char *displayName) override
Opens connection to display server (if such a thing exist on the current platform).
static Atom_t fgDeleteWindowAtom
void QueryPointer(Int_t &x, Int_t &y) override
Returns the pointer position.
void SetDrawMode(EDrawMode mode) override
Sets the drawing mode.
Bool_t ParseColor(Colormap_t cmap, const char *cname, ColorStruct_t &color) override
Looks up the string name of a color "cname" with respect to the screen associated with the specified ...
void GetImageSize(Drawable_t wid, UInt_t &width, UInt_t &height) override
Returns the width and height of the image id.
Int_t InitWindow(ULong_t window) override
Creates a new window and return window number.
void CloseDisplay() override
Closes connection to display server and destroys all windows.
void ClearArea(Window_t wid, Int_t x, Int_t y, UInt_t w, UInt_t h) override
Paints a rectangular area in the specified window "id" according to the specified dimensions with the...
void DeletePixmap(Pixmap_t pixmapID) override
Explicitly deletes the pixmap resource "pmap".
void MapSubwindows(Window_t wid) override
Maps all subwindows for the specified window "id" in top-to-bottom stacking order.
void ReparentWindow(Window_t wid, Window_t pid, Int_t x, Int_t y) override
If the specified window is mapped, ReparentWindow automatically performs an UnmapWindow request on it...
Window_t GetDefaultRootWindow() const override
Returns handle to the default root window created when calling XOpenDisplay().
void SetDoubleBuffer(Int_t wid, Int_t mode) override
Sets the double buffer on/off on the window "wid".
void GetGeometry(Int_t wid, Int_t &x, Int_t &y, UInt_t &w, UInt_t &h) override
Returns position and size of window "wid".
WinContext_t GetWindowContext(Int_t wid) override
Get window drawing context Should remain valid until window exists.
void RemoveWindow(ULong_t qwid) override
Removes the created by Qt window "qwid".
Bool_t CreatePictureFromFile(Drawable_t wid, const char *filename, Pixmap_t &pict, Pixmap_t &pict_mask, PictureAttributes_t &attr) override
Creates a picture pict from data in file "filename".
void DrawStringAux(Drawable_t wid, const GCValues_t &gc, Int_t x, Int_t y, const char *s, Int_t len)
void GetPasteBuffer(Window_t wid, Atom_t atom, TString &text, Int_t &nchar, Bool_t del) override
Gets contents of the paste buffer "atom" into the string "text".
Drawable_t CreateImage(UInt_t width, UInt_t height) override
Allocates the memory needed for an drawable.
void Update(Int_t mode) override
Flushes (mode = 0, default) or synchronizes (mode = 1) X output buffer.
Atom_t InternAtom(const char *atom_name, Bool_t only_if_exist) override
Returns the atom identifier associated with the specified "atom_name" string.
Handle_t CreateOpenGLContext(Window_t windowID, Handle_t sharedContext) override
Creates OpenGL context for window "windowID".
void ChangeWindowAttributes(Window_t wid, SetWindowAttributes_t *attr) override
Changes the attributes of the specified window "id" according the values provided in "attr".
GContext_t CreateGC(Drawable_t wid, GCValues_t *gval) override
Creates a graphics context using the provided GCValues_t *gval structure.
Int_t AddWindow(ULong_t qwid, UInt_t w, UInt_t h) override
Registers a window created by Qt as a ROOT window.
void UnmapWindow(Window_t wid) override
Unmaps the specified window "id".
void ClearAreaAux(Window_t wid, Int_t x, Int_t y, UInt_t w, UInt_t h)
void GrabButton(Window_t wid, EMouseButton button, UInt_t modifier, UInt_t evmask, Window_t confine, Cursor_t cursor, Bool_t grab=kTRUE) override
Establishes a passive grab on a certain mouse button.
Bool_t EmptyRegion(Region_t reg) override
Returns kTRUE if the region reg is empty.
void ConvertSelection(Window_t, Atom_t &, Atom_t &, Atom_t &, Time_t &) override
Requests that the specified selection be converted to the specified target type.
void ReconfigureDisplay()
void RaiseWindow(Window_t wid) override
Raises the specified window to the top of the stack so that no sibling window obscures it.
void DrawSegments(Drawable_t wid, GContext_t gc, Segment_t *segments, Int_t nSegments) override
Draws multiple line segments.
ROOT::MacOSX::X11::Rectangle GetDisplayGeometry() const
void MapWindow(Window_t wid) override
Maps the window "id" and all of its subwindows that have had map requests.
void SetWMSize(Window_t winID, UInt_t w, UInt_t h) override
Tells window manager the desired size of window "id".
WinContext_t GetSelectedContext()
void SetDashes(GContext_t gc, Int_t offset, const char *dash_list, Int_t n) override
Sets the dash-offset and dash-list attributes for dashed line styles in the specified GC.
void SetClipRegion(Int_t wid, Int_t x, Int_t y, UInt_t w, UInt_t h) override
Sets clipping region for the window "wid".
Bool_t PointInRegion(Int_t x, Int_t y, Region_t reg) override
Returns kTRUE if the point [x, y] is contained in the region reg.
Window_t FindRWindow(Window_t win, Window_t dragwin, Window_t input, int x, int y, int maxd) override
Recursively search in the children of Window for a Window which is at location x, y and is DND aware,...
void RescaleWindow(Int_t wid, UInt_t w, UInt_t h) override
Rescales the window "wid".
char ** ListFonts(const char *fontname, Int_t max, Int_t &count) override
Returns list of font names matching fontname regexp, like "-*-times-*".
void WritePixmap(Int_t wid, UInt_t w, UInt_t h, char *pxname) override
Writes the pixmap "wid" in the bitmap file "pxname".
void CopyGC(GContext_t org, GContext_t dest, Mask_t mask) override
Copies the specified components from the source GC "org" to the destination GC "dest".
ROOT::MacOSX::X11::EventTranslator * GetEventTranslator() const
void ReparentChild(Window_t wid, Window_t pid, Int_t x, Int_t y)
void DrawSegmentsAux(Drawable_t wid, const GCValues_t &gcVals, const Segment_t *segments, Int_t nSegments)
void GrabKey(Window_t wid, Int_t keycode, UInt_t modifier, Bool_t grab=kTRUE) override
Establishes a passive grab on the keyboard.
void DeletePictureData(void *data) override
Delete picture data created by the function ReadPictureDataFromFile.
Int_t EventsPending() override
Returns the number of events that have been received from the X server but have not been removed from...
void SelectWindow(Int_t wid) override
Selects the window "wid" to which subsequent output is directed.
void UnionRectWithRegion(Rectangle_t *rect, Region_t src, Region_t dest) override
Updates the destination region from a union of the specified rectangle and the specified source regio...
Display_t GetDisplay() const override
Returns handle to display (might be useful in some cases where direct X11 manipulation outside of TVi...
void FlushOpenGLBuffer(Handle_t ctxID) override
Flushes OpenGL buffer.
void NextEvent(Event_t &event) override
The "event" is set to default event.
void SetIconName(Window_t wid, char *name) override
Sets the window icon name.
Bool_t Init(void *display) override
Initializes the X system.
void DeletePixmapAux(Pixmap_t pixmapID)
void ClosePixmap() override
Deletes current pixmap.
Pixmap_t CreateBitmap(Drawable_t wid, const char *bitmap, UInt_t width, UInt_t height) override
Creates a bitmap (i.e.
void SetKeyAutoRepeat(Bool_t on=kTRUE) override
Turns key auto repeat on (kTRUE) or off (kFALSE).
void FreeFontNames(char **fontlist) override
Frees the specified the array of strings "fontlist".
void UnionRegion(Region_t rega, Region_t regb, Region_t result) override
Computes the union of two regions.
Window_t GetPrimarySelectionOwner() override
Returns the window id of the current owner of the primary selection.
void SetWMPosition(Window_t winID, Int_t x, Int_t y) override
Tells the window manager the desired position [x,y] of window "id".
void SetWMTransientHint(Window_t winID, Window_t mainWinID) override
Tells window manager that the window "id" is a transient window of the window "main_id".
void SetIconPixmap(Window_t wid, Pixmap_t pix) override
Sets the icon name pixmap.
Pixmap_t ReadGIF(Int_t x0, Int_t y0, const char *file, Window_t wid) override
If id is NULL - loads the specified gif file at position [x0,y0] in the current window.
void LowerWindow(Window_t wid) override
Lowers the specified window "id" to the bottom of the stack so that it does not obscure any sibling w...
Bool_t SetSelectionOwner(Window_t windowID, Atom_t &selectionID) override
Changes the owner and last-change time for the specified selection.
Handle_t GetNativeEvent() const override
Returns the current native event handle.
void SubtractRegion(Region_t rega, Region_t regb, Region_t result) override
Subtracts regb from rega and stores the results in result.
void FillRectangle(Drawable_t wid, GContext_t gc, Int_t x, Int_t y, UInt_t w, UInt_t h) override
Fills the specified rectangle defined by [x,y] [x+w,y] [x+w,y+h] [x,y+h].
Region_t CreateRegion() override
Creates a new empty region.
void SelectPixmap(Int_t qpixid) override
Selects the pixmap "qpixid".
void ConvertPrimarySelection(Window_t wid, Atom_t clipboard, Time_t when) override
Causes a SelectionRequest event to be sent to the current primary selection owner.
void GetFontProperties(FontStruct_t font, Int_t &max_ascent, Int_t &max_descent) override
Returns the font properties.
void DrawLine(Drawable_t wid, GContext_t gc, Int_t x1, Int_t y1, Int_t x2, Int_t y2) override
Uses the components of the specified GC to draw a line between the specified set of points (x1,...
void ChangeProperty(Window_t wid, Atom_t property, Atom_t type, UChar_t *data, Int_t len) override
Alters the property for the specified window and causes the X server to generate a PropertyNotify eve...
void SetTypeList(Window_t win, Atom_t prop, Atom_t *typelist) override
Add the list of drag and drop types to the Window win.
Region_t PolygonRegion(Point_t *points, Int_t np, Bool_t winding) override
Returns a region for the polygon defined by the points array.
Int_t GetDoubleBuffer(Int_t wid) override
Queries the double buffer value for the window "wid".
void SetClassHints(Window_t wid, char *className, char *resourceName) override
Sets the windows class and resource name.
Window_t CreateWindow(Window_t 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) override
Creates an unmapped subwindow for a specified parent window and returns the created window.
Int_t RequestLocator(Int_t mode, Int_t ctyp, Int_t &x, Int_t &y) override
Requests Locator position.
void SetInputFocus(Window_t wid) override
Changes the input focus to specified window "id".
Visual_t GetVisual() const override
Returns handle to visual.
void MoveResizeWindow(Window_t wid, Int_t x, Int_t y, UInt_t w, UInt_t h) override
Changes the size and location of the specified window "id" without raising it.
void FillPolygonAux(Window_t wid, const GCValues_t &gcVals, const Point_t *polygon, Int_t nPoints)
Int_t GetDepth() const override
Returns depth of screen (number of bit planes).
FontStruct_t LoadQueryFont(const char *font_name) override
Provides the most common way for accessing a font: opens (loads) the specified font and returns a poi...
bool MakeProcessForeground()
Window_t CreateOpenGLWindow(Window_t parentID, UInt_t width, UInt_t height, const std::vector< std::pair< UInt_t, Int_t > > &format) override
Create window with special pixel format. Noop everywhere except Cocoa.
std::map< Atom_t, Window_t > fSelectionOwners
void DeleteProperty(Window_t, Atom_t &) override
Deletes the specified property only if the property was defined on the specified window and causes th...
std::map< std::string, Atom_t > fNameToAtom
UInt_t ExecCommand(TGWin32Command *code) override
Executes the command "code" coming from the other threads (Win32).
void SetCursor(Window_t wid, Cursor_t curid) override
Sets the cursor "curid" to be used when the pointer is in the window "id".
void SetForeground(GContext_t gc, ULong_t foreground) override
Sets the foreground color for the specified GC (shortcut for ChangeGC with only foreground mask set).
FontH_t GetFontHandle(FontStruct_t fs) override
Returns the font handle of the specified font structure "fs".
void DeleteImage(Drawable_t img) override
Deallocates the memory associated with the image img.
Drawable_t fSelectedDrawable
void SetDrawModeW(WinContext_t wctxt, EDrawMode mode) override
Set window draw mode.
void CloseWindow() override
Deletes current window.
void FillPolygon(Window_t wid, GContext_t gc, Point_t *polygon, Int_t nPoints) override
Fills the region closed by the specified path.
ROOT::MacOSX::X11::Rectangle fDisplayRect
void WMDeleteNotify(Window_t wid) override
Tells WM to send message when window is closed via WM.
void PutImage(Drawable_t wid, GContext_t gc, Drawable_t img, Int_t dx, Int_t dy, Int_t x, Int_t y, UInt_t w, UInt_t h) override
Combines an image with a rectangle of the specified drawable.
void CopyArea(Drawable_t src, Drawable_t dst, GContext_t gc, Int_t srcX, Int_t srcY, UInt_t width, UInt_t height, Int_t dstX, Int_t dstY) override
Combines the specified rectangle of "src" with the specified rectangle of "dest" according to the "gc...
void Sync(Int_t mode) override
Set synchronisation on or off.
ULong_t GetPixel(Color_t cindex) override
Returns pixel value associated to specified ROOT color number "cindex".
std::map< Atom_t, Window_t >::iterator selection_iterator
const char * DisplayName(const char *) override
Returns hostname on which the display is opened.
void ChangeProperties(Window_t wid, Atom_t property, Atom_t type, Int_t format, UChar_t *data, Int_t len) override
Alters the property for the specified window and causes the X server to generate a PropertyNotify eve...
bool CocoaInitialized() const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
ROOT::MacOSX::Util::CFScopeGuard< CGImageRef > fImage
QuartzImage * fBackgroundPixmap
unsigned long fBackgroundPixel
NSView< X11Window > * fContentView
QuartzWindow * fMainWindow
QuartzView * fContentView
QuartzImage * fShapeCombineMask
NSOpenGLContext * fOpenGLContext
NSOpenGLPixelFormat * pixelFormat()
bool GLViewIsValidDrawable(ROOTOpenGLView *glView)
Int_t MapKeySymToKeyCode(Int_t keySym)
bool ViewIsHtmlViewFrame(NSView< X11Window > *view, bool checkParent)
int GlobalYCocoaToROOT(CGFloat yCocoa)
void PixelToRGB(Pixel_t pixelColor, CGFloat *rgb)
void MapUnicharToKeySym(unichar key, char *buf, Int_t len, UInt_t &rootKeySym)
void FillPixmapBuffer(const unsigned char *bitmap, unsigned width, unsigned height, ULong_t foregroundPixel, ULong_t backgroundPixel, unsigned depth, unsigned char *imageData)
NSPoint TranslateToScreen(NSView< X11Window > *from, NSPoint point)
NSView< X11Window > * FindDNDAwareViewInPoint(NSView *parentView, Window_t dragWinID, Window_t inputWinID, Int_t x, Int_t y, Int_t maxDepth)
QuartzWindow * FindWindowInPoint(Int_t x, Int_t y)
int GlobalXCocoaToROOT(CGFloat xCocoa)
void WindowLostFocus(Window_t winID)
int LocalYROOTToCocoa(NSView< X11Window > *parentView, CGFloat yROOT)
bool ParseXLFDName(const std::string &xlfdName, XLFDName &dst)
NSPoint TranslateCoordinates(NSView< X11Window > *fromView, NSView< X11Window > *toView, NSPoint sourcePoint)
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)
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)
void GetRootWindowAttributes(WindowAttributes_t *attr)
void InitWithPredefinedAtoms(std::map< std::string, Atom_t > &nameToAtom, std::vector< std::string > &atomNames)
bool ViewIsTextViewFrame(NSView< X11Window > *view, bool checkParent)
NSPoint TranslateFromScreen(NSPoint point, NSView< X11Window > *to)
NSUInteger GetCocoaKeyModifiersFromROOTKeyModifiers(UInt_t rootKeyModifiers)
void DrawTextLineNoKerning(CGContextRef ctx, CTFontRef font, const std::vector< UniChar > &text, Int_t x, Int_t y)
void DrawPattern(void *data, CGContextRef ctx)
bool SetFillPattern(CGContextRef ctx, const unsigned *patternIndex, Color_t attrFillColor)
EGEventType fType
of event (see EGEventType)
Window_t fWindow
window reported event is relative to
UInt_t fCode
key or button code
Longptr_t fUser[5]
5 longs can be used by client message events NOTE: only [0], [1] and [2] may be used.
Graphics context structure.
ULong_t fBackground
background pixel
Int_t fFillRule
kEvenOddRule, kWindingRule
Pixmap_t fClipMask
bitmap clipping; other calls for rects
Int_t fDashOffset
patterned/dashed line information
Int_t fClipXOrigin
origin for clipping
Int_t fLineWidth
line width
Pixmap_t fStipple
stipple 1 plane pixmap for stippling
Mask_t fMask
bit mask specifying which fields are valid
Int_t fLineStyle
kLineSolid, kLineOnOffDash, kLineDoubleDash
Pixmap_t fTile
tile pixmap for tiling operations
Bool_t fGraphicsExposures
boolean, should exposures be generated
Int_t fJoinStyle
kJoinMiter, kJoinRound, kJoinBevel
Char_t fDashes[8]
dash pattern list (dash length per byte)
ULong_t fForeground
foreground pixel
ULong_t fPlaneMask
plane mask
Int_t fFillStyle
kFillSolid, kFillTiled, kFillStippled, kFillOpaeueStippled
FontH_t fFont
default text font for text operations
Int_t fTsXOrigin
offset for tile or stipple operations
EGraphicsFunction fFunction
logical operation
Int_t fDashLen
number of dashes in fDashes
Int_t fCapStyle
kCapNotLast, kCapButt, kCapRound, kCapProjecting
Int_t fArcMode
kArcChord, kArcPieSlice
Int_t fSubwindowMode
kClipByChildren, kIncludeInferiors
Point structure (maps to the X11 XPoint structure).
Rectangle structure (maps to the X11 XRectangle structure).
Used for drawing line segments (maps to the X11 XSegments structure).
Attributes that can be used when creating or changing a window.
Window attributes that can be inquired.
Int_t fHeight
width and height of window
Int_t fClass
kInputOutput, kInputOnly
Int_t fY
location of window
Int_t fDepth
depth of window