42#include <ApplicationServices/ApplicationServices.h>
43#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");
100#pragma mark - Aux. functions called from GUI-rendering part.
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.);
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] = {};
140 ::Warning(
"SetStrokeDoubleDashFromX11Context",
"Not implemented yet, kick tpochep!");
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);
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 {
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;
209 if (image != fImage) {
211 fImage = [image retain];
216 Int_t fFillStyle = 0;
231bool HasFillTiledStyle(
const GCValues_t &gcVals)
243bool HasFillStippledStyle(
const GCValues_t &gcVals)
255bool HasFillOpaqueStippledStyle(
const GCValues_t &gcVals)
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]]){
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;
289 const Int_t fillStyle = patternContext->fFillStyle;
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");
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);
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);
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");
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);
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);
361 assert(
child != nil &&
"ParentRendersToChild, parameter 'child' is nil");
365class ViewFixer final {
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;
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());
432 : fSelectedDrawable(0),
436 fForegroundProcess(false),
438 fDisplayShapeChanged(true)
441 "TGCocoa, gSystem is eihter null or has a wrong type");
452 CGDisplayRegisterReconfigurationCallback (DisplayReconfigurationCallback, 0);
458 fSelectedDrawable(0),
462 fForegroundProcess(false),
464 fDisplayShapeChanged(true)
467 "TGCocoa, gSystem is eihter null or has a wrong type");
478 CGDisplayRegisterReconfigurationCallback (DisplayReconfigurationCallback, 0);
485 CGDisplayRemoveReconfigurationCallback (DisplayReconfigurationCallback, 0);
504 if (CGMainDisplayID() == kCGNullDirectDisplay)
557 return CGDisplayScreenSize(CGMainDisplayID()).width;
568 NSArray *
const screens = [NSScreen screens];
569 assert(screens != nil &&
"screens array is nil");
571 NSScreen *
const mainScreen = [screens objectAtIndex : 0];
572 assert(mainScreen != nil &&
"screen with index 0 is nil");
574 return NSBitsPerPixelFromDepth([mainScreen depth]);
583 assert(
gClient != 0 &&
"Update, gClient is null");
585 }
else if (
mode > 0) {
604 NSArray *
const screens = [NSScreen screens];
605 assert(screens != nil && screens.count != 0 &&
"GetDisplayGeometry, no screens found");
607 NSRect frame = [(NSScreen *)[screens objectAtIndex : 0] frame];
608 CGFloat xMin = frame.origin.x, xMax = xMin + frame.size.width;
609 CGFloat yMin = frame.origin.y, yMax = yMin + frame.size.height;
611 for (NSUInteger i = 1,
e = screens.count; i <
e; ++i) {
612 frame = [(NSScreen *)[screens objectAtIndex : i] frame];
613 xMin = std::min(xMin, frame.origin.x);
614 xMax = std::max(xMax, frame.origin.x + frame.size.width);
615 yMin = std::min(yMin, frame.origin.y);
616 yMax = std::max(yMax, frame.origin.y + frame.size.height);
630#pragma mark - Window management part.
636 return fPimpl->GetRootWindowID();
652 assert(parentID != 0 &&
"InitWindow, parameter 'parentID' is 0");
656 if (
fPimpl->IsRootWindow(parentID))
659 [
fPimpl->GetWindow(parentID) getAttributes : &
attr];
661 return CreateWindow(parentID, 0, 0,
attr.fWidth,
attr.fHeight, 0,
attr.fDepth,
attr.fClass, 0, 0, 0);
685 "ClearWindow, fSelectedDrawable is invalid");
688 if (drawable.fIsPixmap) {
694 assert(pixmapCtx != 0 &&
"ClearWindow, pixmap's context is null");
699 CGContextClearRect(pixmapCtx, CGRectMake(0, 0, drawable.fWidth, drawable.fHeight));
716 if (windowID < 0 || fPimpl->IsRootWindow(windowID)) {
730 h = drawable.fHeight;
732 if (!drawable.fIsPixmap) {
734 NSPoint srcPoint = {};
737 NSView<X11Window> *
const view = window.fContentView.fParentView ? window.fContentView.fParentView : window.fContentView;
754 assert(!
fPimpl->IsRootWindow(windowID) &&
"MoveWindow, called for root window");
759 [
fPimpl->GetWindow(windowID) setX :
x Y :
y];
779 assert(!
fPimpl->IsRootWindow(windowID) &&
780 "ResizeWindow, parameter 'windowID' is a root window's id");
785 if (window.fBackBuffer) {
805 "UpdateWindow, fSelectedDrawable is not a valid window id");
814 assert([window.fContentView isKindOfClass : [
QuartzView class]] &&
"UpdateWindow, content view is not a QuartzView");
817 if (dstView.fIsOverlapped)
820 if (dstView.fContext) {
822 const X11::Rectangle copyArea(0, 0, pixmap.fWidth, pixmap.fHeight);
823 [dstView copy : pixmap area : copyArea withMask : nil clipOrigin :
X11::Point() toPoint :
X11::Point()];
826 fPimpl->fX11CommandBuffer.AddUpdateWindow(dstView);
872 if (
fPimpl->IsRootWindow(parentID)) {
875 depth, clss, visual,
attr, wtype);
881 [newWindow setAcceptsMouseMovedEvents : YES];
887 assert([parentWin.fContentView isKindOfClass : [
QuartzView class]] &&
888 "CreateWindow, parent view must be QuartzView");
892 x,
y,
w,
h, border, depth, clss, visual,
attr, wtype);
896 [parentWin addChild : childView];
926 BOOL needFocusChange = NO;
931 fPimpl->fX11EventTranslator.CheckUnmappedView(
wid);
933 assert(
fPimpl->GetDrawable(
wid).fIsPixmap == NO &&
934 "DestroyWindow, can not be called for QuartzPixmap or QuartzImage object");
937 if (
fPimpl->fX11CommandBuffer.BufferSize())
938 fPimpl->fX11CommandBuffer.RemoveOperationsForDrawable(
wid);
941 if ((needFocusChange = window == window.fQuartzWindow && window.fQuartzWindow.fHasFocus))
942 window.fHasFocus = NO;
946 fPimpl->fX11EventTranslator.GenerateDestroyNotify(
wid);
977 assert(
fPimpl->GetDrawable(
wid).fIsPixmap == NO &&
978 "DestroySubwindows, can not be called for QuartzPixmap or QuartzImage object");
1015 assert(!
fPimpl->IsRootWindow(
wid) &&
"ChangeWindowAttributes, called for root window");
1016 assert(
attr != 0 &&
"ChangeWindowAttributes, parameter 'attr' is null");
1033 if (windowID <= fPimpl->GetRootWindowID())
1038 window.fEventMask = eventMask;
1047 assert(!
fPimpl->IsRootWindow(
wid) &&
"ReparentChild, can not re-parent root window");
1052 if (
fPimpl->IsRootWindow(pid)) {
1055 [view removeFromSuperview];
1056 view.fParentView = nil;
1058 NSRect frame = view.frame;
1059 frame.origin = NSPoint();
1061 NSUInteger styleMask = kClosableWindowMask | kMiniaturizableWindowMask | kResizableWindowMask;
1062 if (!view.fOverrideRedirect)
1063 styleMask |= kTitledWindowMask;
1066 styleMask : styleMask
1067 backing : NSBackingStoreBuffered
1069 [view setX :
x Y :
y];
1070 [newTopLevel addChild : view];
1072 fPimpl->ReplaceDrawable(
wid, newTopLevel);
1075 [newTopLevel release];
1078 [view removeFromSuperview];
1081 assert(newParent.fIsPixmap == NO &&
"ReparentChild, pixmap can not be a new parent");
1082 [view setX :
x Y :
y];
1083 [newParent addChild : view];
1094 if (
fPimpl->IsRootWindow(pid))
1101 [contentView retain];
1102 [contentView removeFromSuperview];
1103 [topLevel setContentView : nil];
1104 fPimpl->ReplaceDrawable(
wid, contentView);
1105 [contentView setX :
x Y :
y];
1106 [
fPimpl->GetWindow(pid) addChild : contentView];
1107 [contentView release];
1118 assert(!
fPimpl->IsRootWindow(
wid) &&
"ReparentWindow, can not re-parent root window");
1121 if (view.fParentView)
1134 assert(!
fPimpl->IsRootWindow(
wid) &&
"MapWindow, called for root window");
1154 assert(!
fPimpl->IsRootWindow(
wid) &&
"MapSubwindows, called for 'root' window");
1169 assert(!
fPimpl->IsRootWindow(
wid) &&
"MapRaised, called for root window");
1190 assert(!
fPimpl->IsRootWindow(
wid) &&
"UnmapWindow, called for root window");
1195 fPimpl->fX11EventTranslator.CheckUnmappedView(
wid);
1200 if (
win ==
win.fQuartzWindow &&
win.fQuartzWindow.fHasFocus)
1222 assert(!
fPimpl->IsRootWindow(
wid) &&
"RaiseWindow, called for root window");
1224 if (!
fPimpl->GetWindow(
wid).fParentView)
1239 assert(!
fPimpl->IsRootWindow(
wid) &&
"LowerWindow, called for root window");
1241 if (!
fPimpl->GetWindow(
wid).fParentView)
1260 assert(!
fPimpl->IsRootWindow(
wid) &&
"MoveWindow, called for root window");
1279 assert(!
fPimpl->IsRootWindow(
wid) &&
"MoveResizeWindow, called for 'root' window");
1291 assert(!
fPimpl->IsRootWindow(
wid) &&
"ResizeWindow, called for 'root' window");
1296 const UInt_t siMax = std::numeric_limits<Int_t>::max();
1297 if (
w > siMax ||
h > siMax)
1300 NSSize newSize = {};
1304 [
fPimpl->GetWindow(
wid) setDrawableSize : newSize];
1314 assert(!
fPimpl->IsRootWindow(
wid) &&
"IconifyWindow, can not iconify the root window");
1315 assert(
fPimpl->GetWindow(
wid).fIsPixmap == NO &&
"IconifyWindow, invalid window id");
1318 assert(
win.fQuartzWindow ==
win &&
"IconifyWindow, can be called only for a top level window");
1320 fPimpl->fX11EventTranslator.CheckUnmappedView(
wid);
1323 if (
fPimpl->fX11CommandBuffer.BufferSize())
1324 fPimpl->fX11CommandBuffer.RemoveOperationsForDrawable(
wid);
1326 if (window.fQuartzWindow.fHasFocus) {
1328 window.fQuartzWindow.fHasFocus = NO;
1331 [
win.fQuartzWindow miniaturize :
win.fQuartzWindow];
1346 if (!srcWin || !dstWin)
1349 const bool srcIsRoot =
fPimpl->IsRootWindow(srcWin);
1350 const bool dstIsRoot =
fPimpl->IsRootWindow(dstWin);
1352 if (srcIsRoot && dstIsRoot) {
1364 NSPoint srcPoint = {};
1368 NSPoint dstPoint = {};
1374 }
else if (srcIsRoot) {
1378 if ([dstView superview]) {
1382 dstPoint = [[dstView superview] convertPoint : dstPoint fromView : dstView];
1384 if (view != dstView && view.fMapState ==
kIsViewable)
1393 if ([dstView superview]) {
1397 const NSPoint
pt = [[dstView superview] convertPoint : dstPoint fromView : dstView];
1399 if (view != dstView && view.fMapState ==
kIsViewable)
1432 if (!window.fIsPixmap) {
1452 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetWindowBackground, can not set color for root window");
1454 fPimpl->GetWindow(
wid).fBackgroundPixel = color;
1467 assert(!
fPimpl->IsRootWindow(windowID) &&
1468 "SetWindowBackgroundPixmap, can not set background for a root window");
1469 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
1470 "SetWindowBackgroundPixmap, invalid window id");
1473 if (pixmapID ==
kNone) {
1474 window.fBackgroundPixmap = nil;
1478 assert(pixmapID >
fPimpl->GetRootWindowID() &&
1479 "SetWindowBackgroundPixmap, parameter 'pixmapID' is not a valid pixmap id");
1480 assert(
fPimpl->GetDrawable(pixmapID).fIsPixmap == YES &&
1481 "SetWindowBackgroundPixmap, bad drawable");
1488 if ([pixmapOrImage isKindOfClass : [
QuartzPixmap class]]) {
1490 if (backgroundImage.
Get())
1491 window.fBackgroundPixmap = backgroundImage.
Get();
1494 if (backgroundImage.
Get())
1495 window.fBackgroundPixmap = backgroundImage.
Get();
1498 if (!backgroundImage.
Get())
1500 Error(
"SetWindowBackgroundPixmap",
"QuartzImage initialization failed");
1509 if (windowID <= fPimpl->GetRootWindowID())
1513 return view.fParentView ? view.fParentView.fID :
fPimpl->GetRootWindowID();
1527 NSString *
const windowTitle = [NSString stringWithCString :
name encoding : NSASCIIStringEncoding];
1528 [(
NSWindow *)drawable setTitle : windowTitle];
1558 assert(!
fPimpl->IsRootWindow(windowID) &&
1559 "ShapeCombineMask, windowID parameter is a 'root' window");
1560 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
1561 "ShapeCombineMask, windowID parameter is a bad window id");
1563 "ShapeCombineMask, pixmapID parameter must point to QuartzImage object");
1565 if (
fPimpl->GetWindow(windowID).fContentView.fParentView)
1569 assert(srcImage.
fIsStippleMask == YES &&
"ShapeCombineMask, source image is not a stipple mask");
1577 [qw setOpaque : NO];
1578 [qw setBackgroundColor : [NSColor clearColor]];
1582#pragma mark - "Window manager hints" set of functions.
1590 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetMWMHints, called for 'root' window");
1593 NSUInteger newMask = 0;
1595 if ([qw styleMask] & kTitledWindowMask) {
1596 newMask |= kTitledWindowMask;
1597 newMask |= kClosableWindowMask;
1601 newMask |= kMiniaturizableWindowMask | kResizableWindowMask;
1604 newMask |= kMiniaturizableWindowMask;
1606 newMask |= kResizableWindowMask;
1609 [qw setStyleMask : newMask];
1613 [[qw standardWindowButton : NSWindowZoomButton] setEnabled : YES];
1614 [[qw standardWindowButton : NSWindowMiniaturizeButton] setEnabled : YES];
1641 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetWMSizeHints, called for root window");
1643 const NSUInteger styleMask = kTitledWindowMask | kClosableWindowMask | kMiniaturizableWindowMask | kResizableWindowMask;
1644 const NSRect minRect = [
NSWindow frameRectForContentRect : NSMakeRect(0., 0., wMin, hMin) styleMask : styleMask];
1645 const NSRect maxRect = [
NSWindow frameRectForContentRect : NSMakeRect(0., 0., wMax, hMax) styleMask : styleMask];
1648 [qw setMinSize : minRect.size];
1649 [qw setMaxSize : maxRect.size];
1670 assert(
wid >
fPimpl->GetRootWindowID() &&
"SetWMTransientHint, wid parameter is not a valid window id");
1672 if (
fPimpl->IsRootWindow(mainWid))
1677 if (![mainWindow isVisible])
1682 if (mainWindow != transientWindow) {
1685 Error(
"SetWMTransientHint",
"window is already transient for other window");
1687 [[transientWindow standardWindowButton : NSWindowZoomButton] setEnabled : NO];
1688 [mainWindow addTransientWindow : transientWindow];
1691 Warning(
"SetWMTransientHint",
"transient and main windows are the same window");
1694#pragma mark - GUI-rendering part.
1700 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawLineAux, called for root window");
1704 assert(ctx != 0 &&
"DrawLineAux, context is null");
1717 CGContextSetAllowsAntialiasing(ctx,
false);
1719 if (!drawable.fIsPixmap)
1720 CGContextTranslateCTM(ctx, 0.5, 0.5);
1727 SetStrokeParametersFromX11Context(ctx, gcVals);
1728 CGContextBeginPath(ctx);
1729 CGContextMoveToPoint(ctx,
x1,
y1);
1730 CGContextAddLineToPoint(ctx,
x2,
y2);
1731 CGContextStrokePath(ctx);
1733 CGContextSetAllowsAntialiasing(ctx,
true);
1748 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawLine, called for root window");
1749 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"DrawLine, invalid context index");
1754 if (!drawable.fIsPixmap) {
1757 const ViewFixer fixer(view,
wid);
1776 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawSegmentsAux, called for root window");
1777 assert(segments != 0 &&
"DrawSegmentsAux, segments parameter is null");
1778 assert(nSegments > 0 &&
"DrawSegmentsAux, nSegments <= 0");
1780 for (
Int_t i = 0; i < nSegments; ++i)
1781 DrawLineAux(
wid, gcVals, segments[i].fX1, segments[i].fY1 - 3, segments[i].fX2, segments[i].fY2 - 3);
1793 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawSegments, called for root window");
1794 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"DrawSegments, invalid context index");
1795 assert(segments != 0 &&
"DrawSegments, parameter 'segments' is null");
1796 assert(nSegments > 0 &&
"DrawSegments, number of segments <= 0");
1801 if (!drawable.fIsPixmap) {
1803 const ViewFixer fixer(view,
wid);
1807 fPimpl->fX11CommandBuffer.AddDrawSegments(
wid, gcVals, segments, nSegments);
1813 fPimpl->fX11CommandBuffer.AddDrawSegments(
wid, gcVals, segments, nSegments);
1823 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawRectangleAux, called for root window");
1827 if (!drawable.fIsPixmap) {
1840 assert(ctx &&
"DrawRectangleAux, context is null");
1843 CGContextSetAllowsAntialiasing(ctx,
false);
1845 SetStrokeParametersFromX11Context(ctx, gcVals);
1847 const CGRect
rect = CGRectMake(
x,
y,
w,
h);
1848 CGContextStrokeRect(ctx,
rect);
1850 CGContextSetAllowsAntialiasing(ctx,
true);
1862 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawRectangle, called for root window");
1863 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"DrawRectangle, invalid context index");
1869 if (!drawable.fIsPixmap) {
1872 const ViewFixer fixer(view,
wid);
1876 fPimpl->fX11CommandBuffer.AddDrawRectangle(
wid, gcVals,
x,
y,
w,
h);
1882 fPimpl->fX11CommandBuffer.AddDrawRectangle(
wid, gcVals,
x,
y,
w,
h);
1898 assert(!
fPimpl->IsRootWindow(
wid) &&
"FillRectangleAux, called for root window");
1902 CGSize patternPhase = {};
1904 if (drawable.fIsPixmap) {
1909 const CGRect fillRect = CGRectMake(
x,
y,
w,
h);
1911 if (!drawable.fIsPixmap) {
1914 const NSPoint origin = [view.
fParentView convertPoint : view.frame.origin toView : nil];
1915 patternPhase.width = origin.x;
1916 patternPhase.height = origin.y;
1922 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals) || HasFillTiledStyle(gcVals)) {
1923 std::unique_ptr<PatternContext> patternContext(
new PatternContext(gcVals.
fMask, gcVals.
fFillStyle,
1924 0, 0, nil, patternPhase));
1925 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals)) {
1927 "FillRectangleAux, fill_style is FillStippled/FillOpaqueStippled,"
1928 " but no stipple is set in a context");
1933 if (HasFillOpaqueStippledStyle(gcVals))
1937 "FillRectangleAux, fill_style is FillTiled, but not tile is set in a context");
1939 patternContext->SetImage(
fPimpl->GetDrawable(gcVals.
fTile));
1942 SetFillPattern(ctx, patternContext.get());
1943 patternContext.release();
1944 CGContextFillRect(ctx, fillRect);
1949 SetFilledAreaColorFromX11Context(ctx, gcVals);
1950 CGContextFillRect(ctx, fillRect);
1963 assert(!
fPimpl->IsRootWindow(
wid) &&
"FillRectangle, called for root window");
1964 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"FillRectangle, invalid context index");
1969 if (!drawable.fIsPixmap) {
1972 const ViewFixer fixer(view,
wid);
1975 fPimpl->fX11CommandBuffer.AddFillRectangle(
wid, gcVals,
x,
y,
w,
h);
1992 assert(!
fPimpl->IsRootWindow(
wid) &&
"FillPolygonAux, called for root window");
1993 assert(polygon != 0 &&
"FillPolygonAux, parameter 'polygon' is null");
1994 assert(nPoints > 0 &&
"FillPolygonAux, number of points must be positive");
1999 CGSize patternPhase = {};
2001 if (!drawable.fIsPixmap) {
2003 const NSPoint origin = [view convertPoint : view.frame.origin toView : nil];
2004 patternPhase.width = origin.x;
2005 patternPhase.height = origin.y;
2010 CGContextSetAllowsAntialiasing(ctx,
false);
2012 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals) || HasFillTiledStyle(gcVals)) {
2013 std::unique_ptr<PatternContext> patternContext(
new PatternContext(gcVals.
fMask, gcVals.
fFillStyle, 0, 0, nil, patternPhase));
2015 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals)) {
2017 "FillRectangleAux, fill style is FillStippled/FillOpaqueStippled,"
2018 " but no stipple is set in a context");
2023 if (HasFillOpaqueStippledStyle(gcVals))
2027 "FillRectangleAux, fill_style is FillTiled, but not tile is set in a context");
2029 patternContext->SetImage(
fPimpl->GetDrawable(gcVals.
fTile));
2032 SetFillPattern(ctx, patternContext.get());
2033 patternContext.release();
2035 SetFilledAreaColorFromX11Context(ctx, gcVals);
2040 CGContextBeginPath(ctx);
2041 if (!drawable.fIsPixmap) {
2042 CGContextMoveToPoint(ctx, polygon[0].fX, polygon[0].fY - 2);
2043 for (
Int_t i = 1; i < nPoints; ++i)
2044 CGContextAddLineToPoint(ctx, polygon[i].fX, polygon[i].fY - 2);
2047 for (
Int_t i = 1; i < nPoints; ++i)
2051 CGContextFillPath(ctx);
2052 CGContextSetAllowsAntialiasing(ctx,
true);
2075 assert(polygon != 0 &&
"FillPolygon, parameter 'polygon' is null");
2076 assert(nPoints > 0 &&
"FillPolygon, number of points must be positive");
2077 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"FillPolygon, invalid context index");
2082 if (!drawable.fIsPixmap) {
2084 const ViewFixer fixer(view,
wid);
2088 fPimpl->fX11CommandBuffer.AddFillPolygon(
wid, gcVals, polygon, nPoints);
2094 fPimpl->fX11CommandBuffer.AddFillPolygon(
wid, gcVals, polygon, nPoints);
2108 assert(!
fPimpl->IsRootWindow(
src) &&
"CopyAreaAux, src parameter is root window");
2109 assert(!
fPimpl->IsRootWindow(dst) &&
"CopyAreaAux, dst parameter is root window");
2124 "CopyArea, mask is not a pixmap");
2134 [dstDrawable copy : srcDrawable area : copyArea withMask :
mask clipOrigin : clipOrigin toPoint : dstPoint];
2144 assert(!
fPimpl->IsRootWindow(
src) &&
"CopyArea, src parameter is root window");
2145 assert(!
fPimpl->IsRootWindow(dst) &&
"CopyArea, dst parameter is root window");
2146 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"CopyArea, invalid context index");
2151 if (!drawable.fIsPixmap) {
2153 const ViewFixer fixer(view, dst);
2157 fPimpl->fX11CommandBuffer.AddCopyArea(
src, dst, gcVals, srcX, srcY,
width,
height, dstX, dstY);
2162 if (
fPimpl->GetDrawable(
src).fIsPixmap) {
2167 fPimpl->fX11CommandBuffer.AddCopyArea(
src, dst, gcVals, srcX, srcY,
width,
height, dstX, dstY);
2178 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawStringAux, called for root window");
2182 assert(ctx != 0 &&
"DrawStringAux, context is null");
2186 CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);
2189 if (!drawable.fIsPixmap) {
2190 CGContextTranslateCTM(ctx, 0., drawable.fHeight);
2191 CGContextScaleCTM(ctx, 1., -1.);
2195 CGContextSetAllowsAntialiasing(ctx,
true);
2197 assert(gcVals.
fMask &
kGCFont &&
"DrawString, font is not set in a context");
2202 CGFloat textColor[4] = {0., 0., 0., 1.};
2207 CGContextSetRGBFillColor(ctx, textColor[0], textColor[1], textColor[2], textColor[3]);
2212 std::vector<UniChar> unichars((
unsigned char *)
text, (
unsigned char *)
text +
len);
2225 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawString, called for root window");
2226 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"DrawString, invalid context index");
2230 assert(gcVals.
fMask &
kGCFont &&
"DrawString, font is not set in a context");
2232 if (!drawable.fIsPixmap) {
2234 const ViewFixer fixer(view,
wid);
2254 assert(!
fPimpl->IsRootWindow(windowID) &&
"ClearAreaAux, called for root window");
2257 assert(view.
fContext != 0 &&
"ClearAreaAux, view.fContext is null");
2267 CGFloat rgb[3] = {};
2271 CGContextSetRGBFillColor(view.
fContext, rgb[0], rgb[1], rgb[2], 1.);
2272 CGContextFillRect(view.
fContext, CGRectMake(
x,
y,
w,
h));
2274 const CGRect fillRect = CGRectMake(
x,
y,
w,
h);
2276 CGSize patternPhase = {};
2278 const NSPoint origin = [view.
fParentView convertPoint : view.frame.origin toView : nil];
2279 patternPhase.width = origin.x;
2280 patternPhase.height = origin.y;
2284 std::unique_ptr<PatternContext> patternContext(
new PatternContext({}, 0, 0, 0, view.
fBackgroundPixmap, patternPhase));
2285 SetFillPattern(view.
fContext, patternContext.get());
2286 patternContext.release();
2287 CGContextFillRect(view.
fContext, fillRect);
2301 assert(!
fPimpl->IsRootWindow(
wid) &&
"ClearArea, called for root window");
2305 if (ParentRendersToChild(view))
2328#pragma mark - Pixmap management.
2334 NSSize newSize = {};
2339 scaleFactor : [[NSScreen mainScreen] backingScaleFactor]]);
2341 pixmap.
Get().fID =
fPimpl->RegisterDrawable(pixmap.
Get());
2345 Error(
"OpenPixmap",
"QuartzPixmap initialization failed");
2353 assert(!
fPimpl->IsRootWindow(
wid) &&
"ResizePixmap, called for root window");
2356 assert(drawable.fIsPixmap == YES &&
"ResizePixmap, invalid drawable");
2362 if ([pixmap resizeW :
w H :
h scaleFactor : [[NSScreen mainScreen] backingScaleFactor]])
2371 assert(pixmapID > (
Int_t)
fPimpl->GetRootWindowID() &&
2372 "SelectPixmap, parameter 'pixmapID' is not a valid id");
2380 assert(pixmapID > (
Int_t)
fPimpl->GetRootWindowID() &&
2381 "CopyPixmap, parameter 'pixmapID' is not a valid id");
2383 "CopyPixmap, fSelectedDrawable is not a valid window id");
2386 assert([source isKindOfClass : [
QuartzPixmap class]] &&
2387 "CopyPixmap, source is not a pixmap");
2393 if (drawable.fIsPixmap) {
2394 destination = drawable;
2397 if (window.fBackBuffer) {
2398 destination = window.fBackBuffer;
2400 Warning(
"CopyPixmap",
"Operation skipped, since destination"
2401 " window is not double buffered");
2406 const X11::Rectangle copyArea(0, 0, pixmap.fWidth, pixmap.fHeight);
2409 [destination copy : pixmap area : copyArea withMask : nil clipOrigin :
X11::Point() toPoint : dstPoint];
2417 assert(
fPimpl->GetDrawable(
fSelectedDrawable).fIsPixmap == YES &&
"ClosePixmap, selected drawable is not a pixmap");
2423#pragma mark - Different functions to create pixmap from different data sources. Used by GUI.
2424#pragma mark - These functions implement TVirtualX interface, some of them dupilcate others.
2440 assert(
bitmap != 0 &&
"CreatePixmap, parameter 'bitmap' is null");
2441 assert(
width > 0 &&
"CreatePixmap, parameter 'width' is 0");
2442 assert(
height > 0 &&
"CreatePixmap, parameter 'height' is 0");
2447 backgroundPixel, depth, &imageData[0]);
2458 Error(
"CreatePixmap",
"QuartzImage initialization failed");
2462 image.
Get().fID =
fPimpl->RegisterDrawable(image.
Get());
2463 return image.
Get().fID;
2470 assert(bits != 0 &&
"CreatePixmapFromData, data parameter is null");
2471 assert(
width != 0 &&
"CreatePixmapFromData, width parameter is 0");
2472 assert(
height != 0 &&
"CreatePixmapFromData, height parameter is 0");
2476 std::vector<unsigned char> imageData(bits, bits +
width *
height * 4);
2479 unsigned char *
p = &imageData[0];
2481 std::swap(
p[0],
p[2]);
2489 Error(
"CreatePixmapFromData",
"QuartzImage initialziation failed");
2493 image.
Get().fID =
fPimpl->RegisterDrawable(image.
Get());
2494 return image.
Get().fID;
2501 assert(std::numeric_limits<unsigned char>::digits == 8 &&
"CreateBitmap, ASImage requires octets");
2509 std::vector<unsigned char> imageData(
width *
height);
2512 for (
unsigned i = 0, j = 0,
e =
width / 8 *
height; i <
e; ++i) {
2513 for(
unsigned bit = 0; bit < 8; ++bit, ++j) {
2514 if (
bitmap[i] & (1 << bit))
2523 H :
height bitmapMask : &imageData[0]]);
2526 Error(
"CreateBitmap",
"QuartzImage initialization failed");
2530 image.
Get().fID =
fPimpl->RegisterDrawable(image.
Get());
2531 return image.
Get().fID;
2537 fPimpl->DeleteDrawable(pixmapID);
2544 assert(
fPimpl->GetDrawable(pixmapID).fIsPixmap == YES &&
"DeletePixmap, object is not a pixmap");
2545 fPimpl->fX11CommandBuffer.AddDeletePixmap(pixmapID);
2562 Warning(
"GetColorBits",
"Called for root window");
2564 assert(
x >= 0 &&
"GetColorBits, parameter 'x' is negative");
2565 assert(
y >= 0 &&
"GetColorBits, parameter 'y' is negative");
2566 assert(
w != 0 &&
"GetColorBits, parameter 'w' is 0");
2567 assert(
h != 0 &&
"GetColorBits, parameter 'h' is 0");
2570 return [
fPimpl->GetDrawable(
wid) readColorBits : area];
2576#pragma mark - XImage emulation.
2592 assert(
wid >
fPimpl->GetRootWindowID() &&
"GetImageSize, parameter 'wid' is invalid");
2595 width = drawable.fWidth;
2596 height = drawable.fHeight;
2610 "PutPixel, parameter 'imageID' is a bad pixmap id");
2611 assert(
x >= 0 &&
"PutPixel, parameter 'x' is negative");
2612 assert(
y >= 0 &&
"PutPixel, parameter 'y' is negative");
2616 unsigned char rgb[3] = {};
2618 [pixmap putPixel : rgb
X :
x Y :
y];
2637 "DeleteImage, imageID parameter is not a valid image id");
2641#pragma mark - Mouse related code.
2659 assert(!
fPimpl->IsRootWindow(
wid) &&
"GrabButton, called for 'root' window");
2664 widget.fPassiveGrabOwnerEvents = YES;
2665 widget.fPassiveGrabButton =
button;
2666 widget.fPassiveGrabEventMask = eventMask;
2667 widget.fPassiveGrabKeyModifiers = keyModifiers;
2670 widget.fPassiveGrabOwnerEvents = NO;
2671 widget.fPassiveGrabButton = -1;
2672 widget.fPassiveGrabEventMask = 0;
2673 widget.fPassiveGrabKeyModifiers = 0;
2687 assert(!
fPimpl->IsRootWindow(
wid) &&
"GrabPointer, called for 'root' window");
2690 fPimpl->fX11EventTranslator.SetPointerGrab(view, eventMask, ownerEvents);
2694 fPimpl->fX11EventTranslator.CancelPointerGrab();
2745 assert(!
fPimpl->IsRootWindow(
wid) &&
"GrabKey, called for root window");
2751 [view addPassiveKeyGrab : keyCode modifiers : cocoaKeyModifiers];
2753 [view removePassiveKeyGrab : keyCode modifiers : cocoaKeyModifiers];
2772 return fPimpl->fX11EventTranslator.GetInputFocus();
2779 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetInputFocus, called for root window");
2782 fPimpl->fX11EventTranslator.SetInputFocus(nil);
2784 fPimpl->fX11EventTranslator.SetInputFocus(
fPimpl->GetWindow(
wid).fContentView);
2800 assert(buf != 0 &&
"LookupString, parameter 'buf' is null");
2801 assert(
length >= 2 &&
"LookupString, parameter 'length' - not enough memory to return null-terminated ASCII string");
2806#pragma mark - Font management.
2813 assert(fontName != 0 &&
"LoadQueryFont, fontName is null");
2816 if (ParseXLFDName(fontName, xlfd)) {
2822 return fPimpl->fFontManager.LoadFont(xlfd);
2837 fPimpl->fFontManager.UnloadFont(
fs);
2852 return fPimpl->fFontManager.GetTextWidth(font, s,
len);
2859 fPimpl->fFontManager.GetFontProperties(font, maxAscent, maxDescent);
2886 if (fontName && fontName[0]) {
2889 return fPimpl->fFontManager.ListFonts(xlfd, maxNames, count);
2902 fPimpl->fFontManager.FreeFontNames(fontList);
2905#pragma mark - Color management.
2913 return fPimpl->fX11ColorParser.ParseColor(colorName, color);
2919 const unsigned red = unsigned(
double(color.
fRed) / 0xFFFF * 0xFF);
2920 const unsigned green = unsigned(
double(color.
fGreen) / 0xFFFF * 0xFF);
2921 const unsigned blue = unsigned(
double(color.
fBlue) / 0xFFFF * 0xFF);
2922 color.
fPixel = red << 16 | green << 8 | blue;
2930 color.
fRed = (color.
fPixel >> 16 & 0xFF) * 0xFFFF / 0xFF;
2931 color.
fGreen = (color.
fPixel >> 8 & 0xFF) * 0xFFFF / 0xFF;
2932 color.
fBlue = (color.
fPixel & 0xFF) * 0xFFFF / 0xFF;
2946 Float_t red = 0.f, green = 0.f, blue = 0.f;
2947 color->GetRGB(red, green, blue);
2948 pixel = unsigned(red * 255) << 16;
2949 pixel |= unsigned(green * 255) << 8;
2950 pixel |= unsigned(blue * 255);
2984#pragma mark - Graphical context management.
3004 assert(
gc <=
fX11Contexts.size() &&
gc > 0 &&
"ChangeGC, invalid context id");
3015 assert(
gc <=
fX11Contexts.size() &&
gc > 0 &&
"ChangeGC, invalid context id");
3016 assert(
gval != 0 &&
"ChangeGC, gval parameter is null");
3070 const unsigned nDashes =
sizeof x11Context.
fDashes /
sizeof x11Context.
fDashes[0];
3071 for (
unsigned i = 0; i < nDashes; ++i)
3081 assert(dst <=
fX11Contexts.size() && dst > 0 &&
"CopyGC, bad destination context");
3104#pragma mark - Cursor management.
3126 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetCursor, called for root window");
3129 view.fCurrentCursor =
cursor;
3149 const NSPoint screenPoint = [
NSEvent mouseLocation];
3165 rootWinID =
fPimpl->GetRootWindowID();
3167 NSPoint screenPoint = [
NSEvent mouseLocation];
3170 rootX = screenPoint.x;
3171 rootY = screenPoint.y;
3174 if (winID >
fPimpl->GetRootWindowID()) {
3180 winX = screenPoint.x;
3181 winY = screenPoint.y;
3186 childWinID = childWin.fID;
3194#pragma mark - OpenGL management.
3202 return [[NSScreen mainScreen] backingScaleFactor];
3207 const std::vector<std::pair<UInt_t, Int_t> > &formatComponents)
3211 typedef std::pair<UInt_t, Int_t> component_type;
3212 typedef std::vector<component_type>::size_type size_type;
3215 std::vector<NSOpenGLPixelFormatAttribute> attribs;
3216 for (size_type i = 0,
e = formatComponents.size(); i <
e; ++i) {
3217 const component_type &comp = formatComponents[i];
3220 attribs.push_back(NSOpenGLPFADoubleBuffer);
3222 attribs.push_back(NSOpenGLPFADepthSize);
3223 attribs.push_back(comp.second > 0 ? comp.second : 32);
3225 attribs.push_back(NSOpenGLPFAAccumSize);
3226 attribs.push_back(comp.second > 0 ? comp.second : 1);
3228 attribs.push_back(NSOpenGLPFAStencilSize);
3229 attribs.push_back(comp.second > 0 ? comp.second : 8);
3231 attribs.push_back(NSOpenGLPFAMultisample);
3232 attribs.push_back(NSOpenGLPFASampleBuffers);
3233 attribs.push_back(1);
3234 attribs.push_back(NSOpenGLPFASamples);
3235 attribs.push_back(comp.second ? comp.second : 8);
3239 attribs.push_back(0);
3241 NSOpenGLPixelFormat *
const pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes : &attribs[0]];
3245 if (!
fPimpl->IsRootWindow(parentID)) {
3246 parentView =
fPimpl->GetWindow(parentID).fContentView;
3247 assert([parentView isKindOfClass : [
QuartzView class]] &&
3248 "CreateOpenGLWindow, parent view must be QuartzView");
3251 NSRect viewFrame = {};
3252 viewFrame.size.width =
width;
3253 viewFrame.size.height =
height;
3261 [parentView addChild : glView];
3262 glID =
fPimpl->RegisterDrawable(glView);
3272 Error(
"CreateOpenGLWindow",
"QuartzWindow allocation/initialization"
3273 " failed for a top-level GL widget");
3277 glID =
fPimpl->RegisterDrawable(parent);
3287 assert(!
fPimpl->IsRootWindow(windowID) &&
3288 "CreateOpenGLContext, parameter 'windowID' is a root window");
3290 "CreateOpenGLContext, view is not an OpenGL view");
3292 NSOpenGLContext *
const sharedContext =
fPimpl->GetGLContextForHandle(sharedID);
3296 newContext([[NSOpenGLContext alloc] initWithFormat : glView.
pixelFormat shareContext : sharedContext]);
3314 assert(ctxID > 0 &&
"MakeOpenGLContextCurrent, invalid context id");
3316 NSOpenGLContext *
const glContext =
fPimpl->GetGLContextForHandle(ctxID);
3318 Error(
"MakeOpenGLContextCurrent",
"No OpenGL context found for id %d",
int(ctxID));
3326 if ([glContext view] != glView)
3327 [glContext setView : glView];
3335 [glContext makeCurrentContext];
3353 const UInt_t width = std::max(glView.frame.size.width, CGFloat(100));
3354 const UInt_t height = std::max(glView.frame.size.height, CGFloat(100));
3356 NSRect viewFrame = {};
3357 viewFrame.size.width =
width;
3358 viewFrame.size.height =
height;
3360 const NSUInteger styleMask = kTitledWindowMask | kClosableWindowMask |
3361 kMiniaturizableWindowMask | kResizableWindowMask;
3364 fakeWindow = [[
QuartzWindow alloc] initWithContentRect : viewFrame styleMask : styleMask
3365 backing : NSBackingStoreBuffered defer : NO windowAttributes : &
attr];
3369 [fakeView setHidden : NO];
3371 fPimpl->SetFakeGLWindow(fakeWindow);
3375 [fakeView setHidden : NO];
3379 [glContext setView : fakeView];
3380 [glContext makeCurrentContext];
3389 NSOpenGLContext *
const currentContext = [NSOpenGLContext currentContext];
3390 if (!currentContext) {
3391 Error(
"GetCurrentOpenGLContext",
"The current OpenGL context is null");
3395 const Handle_t contextID =
fPimpl->GetHandleForGLContext(currentContext);
3397 Error(
"GetCurrentOpenGLContext",
"The current OpenGL context was"
3398 " not created/registered by TGCocoa");
3406 assert(ctxID > 0 &&
"FlushOpenGLBuffer, invalid context id");
3408 NSOpenGLContext *
const glContext =
fPimpl->GetGLContextForHandle(ctxID);
3409 assert(glContext != nil &&
"FlushOpenGLBuffer, bad context id");
3411 if (glContext != [NSOpenGLContext currentContext])
3415 [glContext flushBuffer];
3424 NSOpenGLContext *
const glContext =
fPimpl->GetGLContextForHandle(ctxID);
3425 if (
NSView *
const v = [glContext view]) {
3429 [glContext clearDrawable];
3432 if (glContext == [NSOpenGLContext currentContext])
3433 [NSOpenGLContext clearCurrentContext];
3435 fPimpl->DeleteGLContext(ctxID);
3438#pragma mark - Off-screen rendering for TPad/TCanvas.
3444 assert(windowID > (
Int_t)
fPimpl->GetRootWindowID() &&
"SetDoubleBuffer called for root window");
3446 if (windowID == 999) {
3447 Warning(
"SetDoubleBuffer",
"called with wid == 999");
3468 "SetDoubleBufferON, called, but no correct window was selected before");
3472 if (!window)
return;
3474 assert(window.fIsPixmap == NO &&
3475 "SetDoubleBufferON, selected drawable is a pixmap, can not attach pixmap to pixmap");
3477 const unsigned currW = window.fWidth;
3478 const unsigned currH = window.fHeight;
3480 if (
QuartzPixmap *
const currentPixmap = window.fBackBuffer) {
3481 if (currH == currentPixmap.fHeight && currW == currentPixmap.fWidth)
3486 H : currH scaleFactor : [[NSScreen mainScreen] backingScaleFactor]]);
3488 window.fBackBuffer = pixmap.
Get();
3491 Error(
"SetDoubleBufferON",
"QuartzPixmap initialization failed");
3502 auto windows = NSApplication.sharedApplication.windows;
3503 for (
NSWindow *candidate : windows) {
3507 fPimpl->fX11CommandBuffer.ClearXOROperations();
3513#pragma mark - Event management part.
3527 fPimpl->fX11EventTranslator.fEventQueue.push_back(newEvent);
3533 assert(
fPimpl->fX11EventTranslator.fEventQueue.size() > 0 &&
"NextEvent, event queue is empty");
3535 event =
fPimpl->fX11EventTranslator.fEventQueue.front();
3536 fPimpl->fX11EventTranslator.fEventQueue.pop_front();
3542 return (
Int_t)
fPimpl->fX11EventTranslator.fEventQueue.size();
3549 typedef X11::EventQueue_t::iterator iterator_type;
3551 iterator_type it =
fPimpl->fX11EventTranslator.fEventQueue.begin();
3552 iterator_type eIt =
fPimpl->fX11EventTranslator.fEventQueue.end();
3554 for (; it != eIt; ++it) {
3555 const Event_t &queuedEvent = *it;
3557 event = queuedEvent;
3558 fPimpl->fX11EventTranslator.fEventQueue.erase(it);
3574#pragma mark - "Drag and drop", "Copy and paste", X11 properties.
3581 assert(
name != 0 &&
"InternAtom, parameter 'name' is null");
3598 assert(!
fPimpl->IsRootWindow(windowID) &&
3599 "SetPrimarySelectionOwner, windowID parameter is a 'root' window");
3600 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3601 "SetPrimarySelectionOwner, windowID parameter is not a valid window");
3603 const Atom_t primarySelectionAtom =
FindAtom(
"XA_PRIMARY",
false);
3604 assert(primarySelectionAtom !=
kNone &&
3605 "SetPrimarySelectionOwner, predefined XA_PRIMARY atom was not found");
3623 assert(!
fPimpl->IsRootWindow(windowID) &&
3624 "SetSelectionOwner, windowID parameter is a 'root' window'");
3625 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3626 "SetSelectionOwner, windowID parameter is not a valid window");
3641 const Atom_t primarySelectionAtom =
FindAtom(
"XA_PRIMARY",
false);
3642 assert(primarySelectionAtom !=
kNone &&
3643 "GetPrimarySelectionOwner, predefined XA_PRIMARY atom was not found");
3666 assert(!
fPimpl->IsRootWindow(windowID) &&
3667 "ConvertPrimarySelection, parameter 'windowID' is root window");
3668 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3669 "ConvertPrimarySelection, parameter windowID parameter is not a window id");
3672 assert(primarySelectionAtom !=
kNone &&
3673 "ConvertPrimarySelection, XA_PRIMARY predefined atom not found");
3676 assert(stringAtom !=
kNone &&
3677 "ConvertPrimarySelection, XA_STRING predefined atom not found");
3695 assert(!
fPimpl->IsRootWindow(windowID) &&
3696 "ConvertSelection, parameter 'windowID' is root window'");
3697 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3698 "ConvertSelection, parameter 'windowID' is not a window id");
3709 newEvent.
fUser[0] = windowID;
3710 newEvent.
fUser[1] = selection;
3720 ULong_t *bytesAfterReturn,
unsigned char **propertyReturn)
3729 if (
fPimpl->IsRootWindow(windowID))
3732 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3733 "GetProperty, parameter 'windowID' is not a valid window id");
3734 assert(propertyID > 0 && propertyID <=
fAtomToName.size() &&
3735 "GetProperty, parameter 'propertyID' is not a valid atom");
3736 assert(actualType != 0 &&
"GetProperty, parameter 'actualType' is null");
3737 assert(actualFormat != 0 &&
"GetProperty, parameter 'actualFormat' is null");
3738 assert(bytesAfterReturn != 0 &&
"GetProperty, parameter 'bytesAfterReturn' is null");
3739 assert(propertyReturn != 0 &&
"GetProperty, parameter 'propertyReturn' is null");
3743 *bytesAfterReturn = 0;
3744 *propertyReturn = 0;
3747 const std::string &atomName =
fAtomToName[propertyID - 1];
3750 if (![window hasProperty : atomName.c_str()]) {
3751 Error(
"GetProperty",
"Unknown property %s requested", atomName.c_str());
3755 unsigned tmpFormat = 0, tmpElements = 0;
3756 *propertyReturn = [window getProperty : atomName.c_str() returnType : actualType
3757 returnFormat : &tmpFormat nElements : &tmpElements];
3758 *actualFormat = (
Int_t)tmpFormat;
3759 *nItems = tmpElements;
3778 assert(!
fPimpl->IsRootWindow(windowID) &&
3779 "GetPasteBuffer, parameter 'windowID' is root window");
3780 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3781 "GetPasteBuffer, parameter 'windowID' is not a valid window");
3782 assert(propertyID && propertyID <=
fAtomToName.size() &&
3783 "GetPasteBuffer, parameter 'propertyID' is not a valid atom");
3787 const std::string &atomString =
fAtomToName[propertyID - 1];
3790 if (![window hasProperty : atomString.c_str()]) {
3791 Error(
"GetPasteBuffer",
"No property %s on a window", atomString.c_str());
3796 unsigned tmpFormat = 0, nElements = 0;
3799 propertyData((
char *)[window getProperty : atomString.c_str()
3800 returnType : &tmpType returnFormat : &tmpFormat
3801 nElements : &nElements]);
3803 assert(tmpFormat == 8 &&
"GetPasteBuffer, property has wrong format");
3805 text.Insert(0, propertyData.
Get(), nElements);
3806 nChars = (
Int_t)nElements;
3811 [window removeProperty : atomString.c_str()];
3842 assert(!
fPimpl->IsRootWindow(windowID) &&
3843 "ChangeProperty, parameter 'windowID' is root window");
3844 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3845 "ChangeProperty, parameter 'windowID' is not a valid window id");
3846 assert(propertyID && propertyID <=
fAtomToName.size() &&
3847 "ChangeProperty, parameter 'propertyID' is not a valid atom");
3851 const std::string &atomString =
fAtomToName[propertyID - 1];
3876 assert(!
fPimpl->IsRootWindow(windowID) &&
3877 "ChangeProperties, parameter 'windowID' is root window");
3878 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3879 "ChangeProperties, parameter 'windowID' is not a valid window id");
3880 assert(propertyID && propertyID <=
fAtomToName.size() &&
3881 "ChangeProperties, parameter 'propertyID' is not a valid atom");
3885 const std::string &atomName =
fAtomToName[propertyID - 1];
3888 [window setProperty : atomName.c_str()
data :
data
3906 assert(!
fPimpl->IsRootWindow(windowID) &&
3907 "DeleteProperty, parameter 'windowID' is root window");
3908 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3909 "DeleteProperty, parameter 'windowID' is not a valid window");
3910 assert(propertyID && propertyID <=
fAtomToName.size() &&
3911 "DeleteProperty, parameter 'propertyID' is not a valid atom");
3913 const std::string &atomString =
fAtomToName[propertyID - 1];
3914 [
fPimpl->GetWindow(windowID) removeProperty : atomString.c_str()];
3930 assert(windowID >
fPimpl->GetRootWindowID() &&
3931 "SetDNDAware, parameter 'windowID' is not a valid window id");
3932 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3933 "SetDNDAware, parameter 'windowID' is not a window");
3938 NSArray *
const supportedTypes = [NSArray arrayWithObjects : NSFilenamesPboardType, nil];
3942 [view registerForDraggedTypes : supportedTypes];
3949 assert(xaAtomAtom == 4 &&
"SetDNDAware, XA_ATOM is not defined");
3954 assert(
sizeof(
unsigned) == 4 &&
"SetDNDAware, sizeof(unsigned) must be 4");
3956 std::vector<unsigned> propertyData;
3957 propertyData.push_back(4);
3960 for (
unsigned i = 0; typeList[i]; ++i)
3961 propertyData.push_back(
unsigned(typeList[i]));
3964 [view setProperty :
"XdndAware" data : (
unsigned char *)&propertyData[0]
3965 size : propertyData.size() forType : xaAtomAtom
format : 32];
3973 if (windowID <= fPimpl->GetRootWindowID())
3976 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3977 "IsDNDAware, windowID parameter is not a window");
3988 ::Warning(
"SetTypeList",
"Not implemented");
4012 fPimpl->IsRootWindow(winID) ? nil :
fPimpl->GetWindow(winID).fContentView,
4013 dragWinID, inputWinID,
x,
y, maxDepth);
4015 return testView.fID;
4020#pragma mark - Noops.
4145 NSPoint newCursorPosition = {};
4146 newCursorPosition.x = ix;
4147 newCursorPosition.y = iy;
4149 if (
fPimpl->GetRootWindowID() == winID) {
4153 assert(
fPimpl->GetDrawable(winID).fIsPixmap == NO &&
4154 "Warp, drawable is not a window");
4159 CGWarpMouseCursorPosition(NSPointToCGPoint(newCursorPosition));
4391#pragma mark - Details and aux. functions.
4396 return &
fPimpl->fX11EventTranslator;
4402 return &
fPimpl->fX11CommandBuffer;
4414 assert(
fCocoaDraw > 0 &&
"CocoaDrawOFF, was already off");
4428 if (!drawable.fIsPixmap) {
4429 Error(
"GetCurrentContext",
"TCanvas/TPad's internal error,"
4430 " selected drawable is not a pixmap!");
4434 return drawable.fContext;
4447 ProcessSerialNumber psn = {0, kCurrentProcess};
4449 const OSStatus res1 = TransformProcessType(&psn, kProcessTransformToForegroundApplication);
4454 if (res1 != noErr && res1 != paramErr) {
4455 Error(
"MakeProcessForeground",
"TransformProcessType failed with code %d",
int(res1));
4458#ifdef MAC_OS_X_VERSION_10_9
4460 [[NSApplication sharedApplication] activateIgnoringOtherApps : YES];
4462 const OSErr res2 = SetFrontProcess(&psn);
4463 if (res2 != noErr) {
4464 Error(
"MakeProcessForeground",
"SetFrontProcess failed with code %d", res2);
4471#ifdef MAC_OS_X_VERSION_10_9
4473 [[NSApplication sharedApplication] activateIgnoringOtherApps : YES];
4475 ProcessSerialNumber psn = {};
4477 OSErr res = GetCurrentProcess(&psn);
4479 Error(
"MakeProcessForeground",
"GetCurrentProcess failed with code %d", res);
4483 res = SetFrontProcess(&psn);
4485 Error(
"MapProcessForeground",
"SetFrontProcess failed with code %d", res);
4497 const std::map<std::string, Atom_t>::const_iterator it =
fNameToAtom.find(atomName);
4501 else if (addIfNotFound) {
4517 if (iconDirectoryPath) {
4519 if (fileName.
Get()) {
4522 NSString *cocoaStr = [NSString stringWithCString : fileName.
Get() encoding : NSASCIIStringEncoding];
4523 NSImage *image = [[[NSImage alloc] initWithContentsOfFile : cocoaStr] autorelease];
4524 [NSApp setApplicationIconImage : image];
Handle_t Region_t
Region handle.
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 Pixmap_t
Pixmap 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
Handle_t Window_t
Window handle.
const Mask_t kGCJoinStyle
Handle_t Display_t
Display handle.
ULong_t Time_t
Event time.
Handle_t GContext_t
Graphics context handle.
EInitialState
Initial window mapping state.
const Mask_t kGCTileStipXOrigin
Handle_t Drawable_t
Drawable handle.
Handle_t Cursor_t
Cursor handle.
const Mask_t kStructureNotifyMask
const Mask_t kGCPlaneMask
const Mask_t kGCGraphicsExposures
const Mask_t kGCClipYOrigin
const Mask_t kGCTileStipYOrigin
EMouseButton
Button names.
Handle_t Colormap_t
Colormap handle.
ULongptr_t Handle_t
Generic resource handle.
Handle_t FontStruct_t
Pointer to font structure.
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
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
winID h TVirtualViewer3D TVirtualGLPainter p
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 chupy
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 pixel
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize wid
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void clipboard
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 target
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize DestroySubwindows
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 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 length
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 value
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void chupx
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t CopyArea
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void foreground
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 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 bitmap
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 funcs
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 SetCursor
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 when
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 fs
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 gval
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 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 ConvertSelection
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void gc
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t button
Option_t Option_t TPoint TPoint const char text
Option_t Option_t TPoint TPoint const char y1
Binding & operator=(OUT(*fun)(void))
R__EXTERN TVirtualMutex * gROOTMutex
R__EXTERN TSystem * gSystem
#define R__LOCKGUARD(mutex)
DerivedType * Get() const
void Reset(NSObject *object)
The color creation and management class.
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
This class implements TVirtualX interface for MacOS X, using Cocoa and Quartz 2D.
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)
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 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".