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");
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());
431 : fSelectedDrawable(0),
435 fForegroundProcess(false),
437 fDisplayShapeChanged(true)
440 "TGCocoa, gSystem is eihter null or has a wrong type");
451 CGDisplayRegisterReconfigurationCallback (DisplayReconfigurationCallback, 0);
457 fSelectedDrawable(0),
461 fForegroundProcess(false),
463 fDisplayShapeChanged(true)
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]);
587 }
else if (
mode > 0) {
610 NSArray *
const screens = [NSScreen screens];
611 assert(screens != nil && screens.count != 0 &&
"GetDisplayGeometry, no screens found");
613 NSRect frame = [(NSScreen *)[screens objectAtIndex : 0] frame];
614 CGFloat xMin = frame.origin.x, xMax = xMin + frame.size.width;
615 CGFloat yMin = frame.origin.y, yMax = yMin + frame.size.height;
617 for (NSUInteger i = 1,
e = screens.count; i <
e; ++i) {
618 frame = [(NSScreen *)[screens objectAtIndex : i] frame];
619 xMin = std::min(xMin, frame.origin.x);
620 xMax = std::max(xMax, frame.origin.x + frame.size.width);
621 yMin = std::min(yMin, frame.origin.y);
622 yMax = std::max(yMax, frame.origin.y + frame.size.height);
636#pragma mark - Window management part.
642 return fPimpl->GetRootWindowID();
658 assert(parentID != 0 &&
"InitWindow, parameter 'parentID' is 0");
662 if (
fPimpl->IsRootWindow(parentID))
665 [
fPimpl->GetWindow(parentID) getAttributes : &
attr];
667 return CreateWindow(parentID, 0, 0,
attr.fWidth,
attr.fHeight, 0,
attr.fDepth,
attr.fClass, 0, 0, 0);
691 auto drawable =
fPimpl->GetDrawable(
wid);
707 [drawable setDrawMode :
mode];
715 return [drawable getDrawMode];
723 if (drawable.fIsPixmap) {
729 assert(pixmapCtx != 0 &&
"ClearWindow, pixmap's context is null");
734 CGContextClearRect(pixmapCtx, CGRectMake(0, 0, drawable.fWidth, drawable.fHeight));
747 if (window.fIsPixmap == YES)
751 assert([window.fContentView isKindOfClass : [
QuartzView class]] &&
"UpdateWindow, content view is not a QuartzView");
754 if (dstView.fIsOverlapped)
757 if (dstView.fContext) {
759 const X11::Rectangle copyArea(0, 0, pixmap.fWidth, pixmap.fHeight);
760 [dstView copy : pixmap area : copyArea withMask : nil clipOrigin :
X11::Point() toPoint :
X11::Point()];
763 fPimpl->fX11CommandBuffer.AddUpdateWindow(dstView);
776 "ClearWindow, fSelectedDrawable is invalid");
791 if (windowID < 0 || fPimpl->IsRootWindow(windowID)) {
805 h = drawable.fHeight;
807 if (!drawable.fIsPixmap) {
809 NSPoint srcPoint = {};
812 NSView<X11Window> *
const view = window.fContentView.fParentView ? window.fContentView.fParentView : window.fContentView;
829 assert(!
fPimpl->IsRootWindow(windowID) &&
"MoveWindow, called for root window");
834 [
fPimpl->GetWindow(windowID) setX :
x Y :
y];
854 assert(!
fPimpl->IsRootWindow(windowID) &&
855 "ResizeWindow, parameter 'windowID' is a root window's id");
860 if (window.fBackBuffer) {
880 "UpdateWindow, fSelectedDrawable is not a valid window id");
929 if (
fPimpl->IsRootWindow(parentID)) {
932 depth, clss, visual,
attr, wtype);
938 [newWindow setAcceptsMouseMovedEvents : YES];
944 assert([parentWin.fContentView isKindOfClass : [
QuartzView class]] &&
945 "CreateWindow, parent view must be QuartzView");
949 x,
y,
w,
h, border, depth, clss, visual,
attr, wtype);
953 [parentWin addChild : childView];
983 BOOL needFocusChange = NO;
988 fPimpl->fX11EventTranslator.CheckUnmappedView(
wid);
990 assert(
fPimpl->GetDrawable(
wid).fIsPixmap == NO &&
991 "DestroyWindow, can not be called for QuartzPixmap or QuartzImage object");
994 if (
fPimpl->fX11CommandBuffer.BufferSize())
995 fPimpl->fX11CommandBuffer.RemoveOperationsForDrawable(
wid);
998 if ((needFocusChange = window == window.fQuartzWindow && window.fQuartzWindow.fHasFocus))
999 window.fHasFocus = NO;
1003 fPimpl->fX11EventTranslator.GenerateDestroyNotify(
wid);
1013 if (needFocusChange)
1034 assert(
fPimpl->GetDrawable(
wid).fIsPixmap == NO &&
1035 "DestroySubwindows, can not be called for QuartzPixmap or QuartzImage object");
1072 assert(!
fPimpl->IsRootWindow(
wid) &&
"ChangeWindowAttributes, called for root window");
1073 assert(
attr != 0 &&
"ChangeWindowAttributes, parameter 'attr' is null");
1090 if (windowID <= fPimpl->GetRootWindowID())
1095 window.fEventMask = eventMask;
1104 assert(!
fPimpl->IsRootWindow(
wid) &&
"ReparentChild, can not re-parent root window");
1109 if (
fPimpl->IsRootWindow(pid)) {
1112 [view removeFromSuperview];
1113 view.fParentView = nil;
1115 NSRect frame = view.frame;
1116 frame.origin = NSPoint();
1118 NSUInteger styleMask = kClosableWindowMask | kMiniaturizableWindowMask | kResizableWindowMask;
1119 if (!view.fOverrideRedirect)
1120 styleMask |= kTitledWindowMask;
1123 styleMask : styleMask
1124 backing : NSBackingStoreBuffered
1126 [view setX :
x Y :
y];
1127 [newTopLevel addChild : view];
1129 fPimpl->ReplaceDrawable(
wid, newTopLevel);
1132 [newTopLevel release];
1135 [view removeFromSuperview];
1138 assert(newParent.fIsPixmap == NO &&
"ReparentChild, pixmap can not be a new parent");
1139 [view setX :
x Y :
y];
1140 [newParent addChild : view];
1151 if (
fPimpl->IsRootWindow(pid))
1158 [contentView retain];
1159 [contentView removeFromSuperview];
1160 [topLevel setContentView : nil];
1161 fPimpl->ReplaceDrawable(
wid, contentView);
1162 [contentView setX :
x Y :
y];
1163 [
fPimpl->GetWindow(pid) addChild : contentView];
1164 [contentView release];
1175 assert(!
fPimpl->IsRootWindow(
wid) &&
"ReparentWindow, can not re-parent root window");
1178 if (view.fParentView)
1191 assert(!
fPimpl->IsRootWindow(
wid) &&
"MapWindow, called for root window");
1211 assert(!
fPimpl->IsRootWindow(
wid) &&
"MapSubwindows, called for 'root' window");
1226 assert(!
fPimpl->IsRootWindow(
wid) &&
"MapRaised, called for root window");
1247 assert(!
fPimpl->IsRootWindow(
wid) &&
"UnmapWindow, called for root window");
1252 fPimpl->fX11EventTranslator.CheckUnmappedView(
wid);
1257 if (
win ==
win.fQuartzWindow &&
win.fQuartzWindow.fHasFocus)
1279 assert(!
fPimpl->IsRootWindow(
wid) &&
"RaiseWindow, called for root window");
1281 if (!
fPimpl->GetWindow(
wid).fParentView)
1296 assert(!
fPimpl->IsRootWindow(
wid) &&
"LowerWindow, called for root window");
1298 if (!
fPimpl->GetWindow(
wid).fParentView)
1317 assert(!
fPimpl->IsRootWindow(
wid) &&
"MoveWindow, called for root window");
1336 assert(!
fPimpl->IsRootWindow(
wid) &&
"MoveResizeWindow, called for 'root' window");
1348 assert(!
fPimpl->IsRootWindow(
wid) &&
"ResizeWindow, called for 'root' window");
1353 const UInt_t siMax = std::numeric_limits<Int_t>::max();
1354 if (
w > siMax ||
h > siMax)
1357 NSSize newSize = {};
1361 [
fPimpl->GetWindow(
wid) setDrawableSize : newSize];
1371 assert(!
fPimpl->IsRootWindow(
wid) &&
"IconifyWindow, can not iconify the root window");
1372 assert(
fPimpl->GetWindow(
wid).fIsPixmap == NO &&
"IconifyWindow, invalid window id");
1375 assert(
win.fQuartzWindow ==
win &&
"IconifyWindow, can be called only for a top level window");
1377 fPimpl->fX11EventTranslator.CheckUnmappedView(
wid);
1380 if (
fPimpl->fX11CommandBuffer.BufferSize())
1381 fPimpl->fX11CommandBuffer.RemoveOperationsForDrawable(
wid);
1383 if (window.fQuartzWindow.fHasFocus) {
1385 window.fQuartzWindow.fHasFocus = NO;
1388 [
win.fQuartzWindow miniaturize :
win.fQuartzWindow];
1403 if (!srcWin || !dstWin)
1406 const bool srcIsRoot =
fPimpl->IsRootWindow(srcWin);
1407 const bool dstIsRoot =
fPimpl->IsRootWindow(dstWin);
1409 if (srcIsRoot && dstIsRoot) {
1421 NSPoint srcPoint = {};
1425 NSPoint dstPoint = {};
1431 }
else if (srcIsRoot) {
1435 if ([dstView superview]) {
1439 dstPoint = [[dstView superview] convertPoint : dstPoint fromView : dstView];
1441 if (view != dstView && view.fMapState ==
kIsViewable)
1450 if ([dstView superview]) {
1454 const NSPoint
pt = [[dstView superview] convertPoint : dstPoint fromView : dstView];
1456 if (view != dstView && view.fMapState ==
kIsViewable)
1489 if (!window.fIsPixmap) {
1509 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetWindowBackground, can not set color for root window");
1511 fPimpl->GetWindow(
wid).fBackgroundPixel = color;
1524 assert(!
fPimpl->IsRootWindow(windowID) &&
1525 "SetWindowBackgroundPixmap, can not set background for a root window");
1526 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
1527 "SetWindowBackgroundPixmap, invalid window id");
1530 if (pixmapID ==
kNone) {
1531 window.fBackgroundPixmap = nil;
1535 assert(pixmapID >
fPimpl->GetRootWindowID() &&
1536 "SetWindowBackgroundPixmap, parameter 'pixmapID' is not a valid pixmap id");
1537 assert(
fPimpl->GetDrawable(pixmapID).fIsPixmap == YES &&
1538 "SetWindowBackgroundPixmap, bad drawable");
1545 if ([pixmapOrImage isKindOfClass : [
QuartzPixmap class]]) {
1547 if (backgroundImage.
Get())
1548 window.fBackgroundPixmap = backgroundImage.
Get();
1551 if (backgroundImage.
Get())
1552 window.fBackgroundPixmap = backgroundImage.
Get();
1555 if (!backgroundImage.
Get())
1557 Error(
"SetWindowBackgroundPixmap",
"QuartzImage initialization failed");
1566 if (windowID <= fPimpl->GetRootWindowID())
1570 return view.fParentView ? view.fParentView.fID :
fPimpl->GetRootWindowID();
1584 NSString *
const windowTitle = [NSString stringWithCString :
name encoding : NSASCIIStringEncoding];
1585 [(
NSWindow *)drawable setTitle : windowTitle];
1615 assert(!
fPimpl->IsRootWindow(windowID) &&
1616 "ShapeCombineMask, windowID parameter is a 'root' window");
1617 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
1618 "ShapeCombineMask, windowID parameter is a bad window id");
1620 "ShapeCombineMask, pixmapID parameter must point to QuartzImage object");
1622 if (
fPimpl->GetWindow(windowID).fContentView.fParentView)
1626 assert(srcImage.
fIsStippleMask == YES &&
"ShapeCombineMask, source image is not a stipple mask");
1634 [qw setOpaque : NO];
1635 [qw setBackgroundColor : [NSColor clearColor]];
1639#pragma mark - "Window manager hints" set of functions.
1647 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetMWMHints, called for 'root' window");
1650 NSUInteger newMask = 0;
1652 if ([qw styleMask] & kTitledWindowMask) {
1653 newMask |= kTitledWindowMask;
1654 newMask |= kClosableWindowMask;
1658 newMask |= kMiniaturizableWindowMask | kResizableWindowMask;
1661 newMask |= kMiniaturizableWindowMask;
1663 newMask |= kResizableWindowMask;
1666 [qw setStyleMask : newMask];
1670 [[qw standardWindowButton : NSWindowZoomButton] setEnabled : YES];
1671 [[qw standardWindowButton : NSWindowMiniaturizeButton] setEnabled : YES];
1698 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetWMSizeHints, called for root window");
1700 const NSUInteger styleMask = kTitledWindowMask | kClosableWindowMask | kMiniaturizableWindowMask | kResizableWindowMask;
1701 const NSRect minRect = [
NSWindow frameRectForContentRect : NSMakeRect(0., 0., wMin, hMin) styleMask : styleMask];
1702 const NSRect maxRect = [
NSWindow frameRectForContentRect : NSMakeRect(0., 0., wMax, hMax) styleMask : styleMask];
1705 [qw setMinSize : minRect.size];
1706 [qw setMaxSize : maxRect.size];
1727 assert(
wid >
fPimpl->GetRootWindowID() &&
"SetWMTransientHint, wid parameter is not a valid window id");
1729 if (
fPimpl->IsRootWindow(mainWid))
1734 if (![mainWindow isVisible])
1739 if (mainWindow != transientWindow) {
1742 Error(
"SetWMTransientHint",
"window is already transient for other window");
1744 [[transientWindow standardWindowButton : NSWindowZoomButton] setEnabled : NO];
1745 [mainWindow addTransientWindow : transientWindow];
1748 Warning(
"SetWMTransientHint",
"transient and main windows are the same window");
1751#pragma mark - GUI-rendering part.
1757 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawLineAux, called for root window");
1761 assert(ctx != 0 &&
"DrawLineAux, context is null");
1774 CGContextSetAllowsAntialiasing(ctx,
false);
1776 if (!drawable.fIsPixmap)
1777 CGContextTranslateCTM(ctx, 0.5, 0.5);
1784 SetStrokeParametersFromX11Context(ctx, gcVals);
1785 CGContextBeginPath(ctx);
1786 CGContextMoveToPoint(ctx,
x1,
y1);
1787 CGContextAddLineToPoint(ctx,
x2,
y2);
1788 CGContextStrokePath(ctx);
1790 CGContextSetAllowsAntialiasing(ctx,
true);
1805 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawLine, called for root window");
1806 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"DrawLine, invalid context index");
1811 if (!drawable.fIsPixmap) {
1814 const ViewFixer fixer(view,
wid);
1833 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawSegmentsAux, called for root window");
1834 assert(segments != 0 &&
"DrawSegmentsAux, segments parameter is null");
1835 assert(nSegments > 0 &&
"DrawSegmentsAux, nSegments <= 0");
1837 for (
Int_t i = 0; i < nSegments; ++i)
1838 DrawLineAux(
wid, gcVals, segments[i].fX1, segments[i].fY1 - 3, segments[i].fX2, segments[i].fY2 - 3);
1850 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawSegments, called for root window");
1851 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"DrawSegments, invalid context index");
1852 assert(segments != 0 &&
"DrawSegments, parameter 'segments' is null");
1853 assert(nSegments > 0 &&
"DrawSegments, number of segments <= 0");
1858 if (!drawable.fIsPixmap) {
1860 const ViewFixer fixer(view,
wid);
1864 fPimpl->fX11CommandBuffer.AddDrawSegments(
wid, gcVals, segments, nSegments);
1870 fPimpl->fX11CommandBuffer.AddDrawSegments(
wid, gcVals, segments, nSegments);
1880 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawRectangleAux, called for root window");
1884 if (!drawable.fIsPixmap) {
1897 assert(ctx &&
"DrawRectangleAux, context is null");
1900 CGContextSetAllowsAntialiasing(ctx,
false);
1902 SetStrokeParametersFromX11Context(ctx, gcVals);
1904 const CGRect
rect = CGRectMake(
x,
y,
w,
h);
1905 CGContextStrokeRect(ctx,
rect);
1907 CGContextSetAllowsAntialiasing(ctx,
true);
1919 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawRectangle, called for root window");
1920 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"DrawRectangle, invalid context index");
1926 if (!drawable.fIsPixmap) {
1929 const ViewFixer fixer(view,
wid);
1933 fPimpl->fX11CommandBuffer.AddDrawRectangle(
wid, gcVals,
x,
y,
w,
h);
1939 fPimpl->fX11CommandBuffer.AddDrawRectangle(
wid, gcVals,
x,
y,
w,
h);
1955 assert(!
fPimpl->IsRootWindow(
wid) &&
"FillRectangleAux, called for root window");
1959 CGSize patternPhase = {};
1961 if (drawable.fIsPixmap) {
1966 const CGRect fillRect = CGRectMake(
x,
y,
w,
h);
1968 if (!drawable.fIsPixmap) {
1971 const NSPoint origin = [view.
fParentView convertPoint : view.frame.origin toView : nil];
1972 patternPhase.width = origin.x;
1973 patternPhase.height = origin.y;
1979 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals) || HasFillTiledStyle(gcVals)) {
1980 std::unique_ptr<PatternContext> patternContext(
new PatternContext(gcVals.
fMask, gcVals.
fFillStyle,
1981 0, 0, nil, patternPhase));
1982 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals)) {
1984 "FillRectangleAux, fill_style is FillStippled/FillOpaqueStippled,"
1985 " but no stipple is set in a context");
1990 if (HasFillOpaqueStippledStyle(gcVals))
1994 "FillRectangleAux, fill_style is FillTiled, but not tile is set in a context");
1996 patternContext->SetImage(
fPimpl->GetDrawable(gcVals.
fTile));
1999 SetFillPattern(ctx, patternContext.get());
2000 patternContext.release();
2001 CGContextFillRect(ctx, fillRect);
2006 SetFilledAreaColorFromX11Context(ctx, gcVals);
2007 CGContextFillRect(ctx, fillRect);
2020 assert(!
fPimpl->IsRootWindow(
wid) &&
"FillRectangle, called for root window");
2021 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"FillRectangle, invalid context index");
2026 if (!drawable.fIsPixmap) {
2029 const ViewFixer fixer(view,
wid);
2032 fPimpl->fX11CommandBuffer.AddFillRectangle(
wid, gcVals,
x,
y,
w,
h);
2049 assert(!
fPimpl->IsRootWindow(
wid) &&
"FillPolygonAux, called for root window");
2050 assert(polygon != 0 &&
"FillPolygonAux, parameter 'polygon' is null");
2051 assert(nPoints > 0 &&
"FillPolygonAux, number of points must be positive");
2056 CGSize patternPhase = {};
2058 if (!drawable.fIsPixmap) {
2060 const NSPoint origin = [view convertPoint : view.frame.origin toView : nil];
2061 patternPhase.width = origin.x;
2062 patternPhase.height = origin.y;
2067 CGContextSetAllowsAntialiasing(ctx,
false);
2069 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals) || HasFillTiledStyle(gcVals)) {
2070 std::unique_ptr<PatternContext> patternContext(
new PatternContext(gcVals.
fMask, gcVals.
fFillStyle, 0, 0, nil, patternPhase));
2072 if (HasFillStippledStyle(gcVals) || HasFillOpaqueStippledStyle(gcVals)) {
2074 "FillRectangleAux, fill style is FillStippled/FillOpaqueStippled,"
2075 " but no stipple is set in a context");
2080 if (HasFillOpaqueStippledStyle(gcVals))
2084 "FillRectangleAux, fill_style is FillTiled, but not tile is set in a context");
2086 patternContext->SetImage(
fPimpl->GetDrawable(gcVals.
fTile));
2089 SetFillPattern(ctx, patternContext.get());
2090 patternContext.release();
2092 SetFilledAreaColorFromX11Context(ctx, gcVals);
2097 CGContextBeginPath(ctx);
2098 if (!drawable.fIsPixmap) {
2099 CGContextMoveToPoint(ctx, polygon[0].fX, polygon[0].fY - 2);
2100 for (
Int_t i = 1; i < nPoints; ++i)
2101 CGContextAddLineToPoint(ctx, polygon[i].fX, polygon[i].fY - 2);
2104 for (
Int_t i = 1; i < nPoints; ++i)
2108 CGContextFillPath(ctx);
2109 CGContextSetAllowsAntialiasing(ctx,
true);
2132 assert(polygon != 0 &&
"FillPolygon, parameter 'polygon' is null");
2133 assert(nPoints > 0 &&
"FillPolygon, number of points must be positive");
2134 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"FillPolygon, invalid context index");
2139 if (!drawable.fIsPixmap) {
2141 const ViewFixer fixer(view,
wid);
2145 fPimpl->fX11CommandBuffer.AddFillPolygon(
wid, gcVals, polygon, nPoints);
2151 fPimpl->fX11CommandBuffer.AddFillPolygon(
wid, gcVals, polygon, nPoints);
2165 assert(!
fPimpl->IsRootWindow(
src) &&
"CopyAreaAux, src parameter is root window");
2166 assert(!
fPimpl->IsRootWindow(
dst) &&
"CopyAreaAux, dst parameter is root window");
2181 "CopyArea, mask is not a pixmap");
2191 [dstDrawable copy : srcDrawable area : copyArea withMask :
mask clipOrigin : clipOrigin toPoint : dstPoint];
2201 assert(!
fPimpl->IsRootWindow(
src) &&
"CopyArea, src parameter is root window");
2202 assert(!
fPimpl->IsRootWindow(
dst) &&
"CopyArea, dst parameter is root window");
2203 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"CopyArea, invalid context index");
2208 if (!drawable.fIsPixmap) {
2210 const ViewFixer fixer(view,
dst);
2219 if (
fPimpl->GetDrawable(
src).fIsPixmap) {
2235 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawStringAux, called for root window");
2239 assert(ctx != 0 &&
"DrawStringAux, context is null");
2243 CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);
2246 if (!drawable.fIsPixmap) {
2247 CGContextTranslateCTM(ctx, 0., drawable.fHeight);
2248 CGContextScaleCTM(ctx, 1., -1.);
2252 CGContextSetAllowsAntialiasing(ctx,
true);
2254 assert(gcVals.
fMask &
kGCFont &&
"DrawString, font is not set in a context");
2259 CGFloat textColor[4] = {0., 0., 0., 1.};
2264 CGContextSetRGBFillColor(ctx, textColor[0], textColor[1], textColor[2], textColor[3]);
2269 std::vector<UniChar> unichars((
unsigned char *)
text, (
unsigned char *)
text +
len);
2282 assert(!
fPimpl->IsRootWindow(
wid) &&
"DrawString, called for root window");
2283 assert(
gc > 0 &&
gc <=
fX11Contexts.size() &&
"DrawString, invalid context index");
2287 assert(gcVals.
fMask &
kGCFont &&
"DrawString, font is not set in a context");
2289 if (!drawable.fIsPixmap) {
2291 const ViewFixer fixer(view,
wid);
2311 assert(!
fPimpl->IsRootWindow(windowID) &&
"ClearAreaAux, called for root window");
2314 assert(view.
fContext != 0 &&
"ClearAreaAux, view.fContext is null");
2324 CGFloat rgb[3] = {};
2328 CGContextSetRGBFillColor(view.
fContext, rgb[0], rgb[1], rgb[2], 1.);
2329 CGContextFillRect(view.
fContext, CGRectMake(
x,
y,
w,
h));
2331 const CGRect fillRect = CGRectMake(
x,
y,
w,
h);
2333 CGSize patternPhase = {};
2335 const NSPoint origin = [view.
fParentView convertPoint : view.frame.origin toView : nil];
2336 patternPhase.width = origin.x;
2337 patternPhase.height = origin.y;
2341 std::unique_ptr<PatternContext> patternContext(
new PatternContext({}, 0, 0, 0, view.
fBackgroundPixmap, patternPhase));
2342 SetFillPattern(view.
fContext, patternContext.get());
2343 patternContext.release();
2344 CGContextFillRect(view.
fContext, fillRect);
2358 assert(!
fPimpl->IsRootWindow(
wid) &&
"ClearArea, called for root window");
2362 if (ParentRendersToChild(view))
2385#pragma mark - Pixmap management.
2391 NSSize newSize = {};
2396 scaleFactor : [[NSScreen mainScreen] backingScaleFactor]]);
2398 pixmap.
Get().fID =
fPimpl->RegisterDrawable(pixmap.
Get());
2402 Error(
"OpenPixmap",
"QuartzPixmap initialization failed");
2410 assert(!
fPimpl->IsRootWindow(
wid) &&
"ResizePixmap, called for root window");
2413 assert(drawable.fIsPixmap == YES &&
"ResizePixmap, invalid drawable");
2419 if ([pixmap resizeW :
w H :
h scaleFactor : [[NSScreen mainScreen] backingScaleFactor]])
2428 assert(pixmapID > (
Int_t)
fPimpl->GetRootWindowID() &&
2429 "SelectPixmap, parameter 'pixmapID' is not a valid id");
2438 "CopyPixmap, fSelectedDrawable is not a valid window id");
2446 assert(pixmapID > (
Int_t)
fPimpl->GetRootWindowID() &&
2447 "CopyPixmapW, parameter 'pixmapID' is not a valid id");
2450 assert([source isKindOfClass : [
QuartzPixmap class]] &&
2451 "CopyPixmap, source is not a pixmap");
2457 if (drawable.fIsPixmap) {
2458 destination = drawable;
2461 if (window.fBackBuffer) {
2462 destination = window.fBackBuffer;
2464 Warning(
"CopyPixmapW",
"Operation skipped, since destination"
2465 " window is not double buffered");
2470 const X11::Rectangle copyArea(0, 0, pixmap.fWidth, pixmap.fHeight);
2473 [destination copy : pixmap area : copyArea withMask : nil clipOrigin :
X11::Point() toPoint : dstPoint];
2481 assert(
fPimpl->GetDrawable(
fSelectedDrawable).fIsPixmap == YES &&
"ClosePixmap, selected drawable is not a pixmap");
2487#pragma mark - Different functions to create pixmap from different data sources. Used by GUI.
2488#pragma mark - These functions implement TVirtualX interface, some of them dupilcate others.
2504 assert(
bitmap != 0 &&
"CreatePixmap, parameter 'bitmap' is null");
2505 assert(
width > 0 &&
"CreatePixmap, parameter 'width' is 0");
2506 assert(
height > 0 &&
"CreatePixmap, parameter 'height' is 0");
2511 backgroundPixel, depth, &imageData[0]);
2522 Error(
"CreatePixmap",
"QuartzImage initialization failed");
2526 image.
Get().fID =
fPimpl->RegisterDrawable(image.
Get());
2527 return image.
Get().fID;
2534 assert(bits != 0 &&
"CreatePixmapFromData, data parameter is null");
2535 assert(
width != 0 &&
"CreatePixmapFromData, width parameter is 0");
2536 assert(
height != 0 &&
"CreatePixmapFromData, height parameter is 0");
2540 std::vector<unsigned char> imageData(bits, bits +
width *
height * 4);
2543 unsigned char *
p = &imageData[0];
2545 std::swap(
p[0],
p[2]);
2553 Error(
"CreatePixmapFromData",
"QuartzImage initialziation failed");
2557 image.
Get().fID =
fPimpl->RegisterDrawable(image.
Get());
2558 return image.
Get().fID;
2565 assert(std::numeric_limits<unsigned char>::digits == 8 &&
"CreateBitmap, ASImage requires octets");
2573 std::vector<unsigned char> imageData(
width *
height);
2576 for (
unsigned i = 0, j = 0,
e =
width / 8 *
height; i <
e; ++i) {
2577 for(
unsigned bit = 0; bit < 8; ++bit, ++j) {
2578 if (
bitmap[i] & (1 << bit))
2587 H :
height bitmapMask : &imageData[0]]);
2590 Error(
"CreateBitmap",
"QuartzImage initialization failed");
2594 image.
Get().fID =
fPimpl->RegisterDrawable(image.
Get());
2595 return image.
Get().fID;
2601 fPimpl->DeleteDrawable(pixmapID);
2608 assert(
fPimpl->GetDrawable(pixmapID).fIsPixmap == YES &&
"DeletePixmap, object is not a pixmap");
2609 fPimpl->fX11CommandBuffer.AddDeletePixmap(pixmapID);
2626 Warning(
"GetColorBits",
"Called for root window");
2628 assert(
x >= 0 &&
"GetColorBits, parameter 'x' is negative");
2629 assert(
y >= 0 &&
"GetColorBits, parameter 'y' is negative");
2630 assert(
w != 0 &&
"GetColorBits, parameter 'w' is 0");
2631 assert(
h != 0 &&
"GetColorBits, parameter 'h' is 0");
2634 return [
fPimpl->GetDrawable(
wid) readColorBits : area];
2640#pragma mark - XImage emulation.
2656 assert(
wid >
fPimpl->GetRootWindowID() &&
"GetImageSize, parameter 'wid' is invalid");
2659 width = drawable.fWidth;
2660 height = drawable.fHeight;
2674 "PutPixel, parameter 'imageID' is a bad pixmap id");
2675 assert(
x >= 0 &&
"PutPixel, parameter 'x' is negative");
2676 assert(
y >= 0 &&
"PutPixel, parameter 'y' is negative");
2680 unsigned char rgb[3] = {};
2682 [pixmap putPixel : rgb
X :
x Y :
y];
2701 "DeleteImage, imageID parameter is not a valid image id");
2705#pragma mark - Mouse related code.
2723 assert(!
fPimpl->IsRootWindow(
wid) &&
"GrabButton, called for 'root' window");
2728 widget.fPassiveGrabOwnerEvents = YES;
2729 widget.fPassiveGrabButton =
button;
2730 widget.fPassiveGrabEventMask = eventMask;
2731 widget.fPassiveGrabKeyModifiers = keyModifiers;
2734 widget.fPassiveGrabOwnerEvents = NO;
2735 widget.fPassiveGrabButton = -1;
2736 widget.fPassiveGrabEventMask = 0;
2737 widget.fPassiveGrabKeyModifiers = 0;
2751 assert(!
fPimpl->IsRootWindow(
wid) &&
"GrabPointer, called for 'root' window");
2754 fPimpl->fX11EventTranslator.SetPointerGrab(view, eventMask, ownerEvents);
2758 fPimpl->fX11EventTranslator.CancelPointerGrab();
2809 assert(!
fPimpl->IsRootWindow(
wid) &&
"GrabKey, called for root window");
2815 [view addPassiveKeyGrab : keyCode modifiers : cocoaKeyModifiers];
2817 [view removePassiveKeyGrab : keyCode modifiers : cocoaKeyModifiers];
2836 return fPimpl->fX11EventTranslator.GetInputFocus();
2843 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetInputFocus, called for root window");
2846 fPimpl->fX11EventTranslator.SetInputFocus(nil);
2848 fPimpl->fX11EventTranslator.SetInputFocus(
fPimpl->GetWindow(
wid).fContentView);
2864 assert(buf != 0 &&
"LookupString, parameter 'buf' is null");
2865 assert(
length >= 2 &&
"LookupString, parameter 'length' - not enough memory to return null-terminated ASCII string");
2870#pragma mark - Font management.
2877 assert(fontName != 0 &&
"LoadQueryFont, fontName is null");
2880 if (ParseXLFDName(fontName, xlfd)) {
2886 return fPimpl->fFontManager.LoadFont(xlfd);
2901 fPimpl->fFontManager.UnloadFont(
fs);
2915 return fPimpl->fFontManager.GetTextWidth(font, s,
len);
2922 fPimpl->fFontManager.GetFontProperties(font, maxAscent, maxDescent);
2949 if (fontName && fontName[0]) {
2952 return fPimpl->fFontManager.ListFonts(xlfd, maxNames, count);
2965 fPimpl->fFontManager.FreeFontNames(fontList);
2968#pragma mark - Color management.
2976 return fPimpl->fX11ColorParser.ParseColor(colorName, color);
2982 const unsigned red = unsigned(
double(color.
fRed) / 0xFFFF * 0xFF);
2983 const unsigned green = unsigned(
double(color.
fGreen) / 0xFFFF * 0xFF);
2984 const unsigned blue = unsigned(
double(color.
fBlue) / 0xFFFF * 0xFF);
2985 color.
fPixel = red << 16 | green << 8 | blue;
2993 color.
fRed = (color.
fPixel >> 16 & 0xFF) * 0xFFFF / 0xFF;
2994 color.
fGreen = (color.
fPixel >> 8 & 0xFF) * 0xFFFF / 0xFF;
2995 color.
fBlue = (color.
fPixel & 0xFF) * 0xFFFF / 0xFF;
3009 Float_t red = 0.f, green = 0.f, blue = 0.f;
3010 color->GetRGB(red, green, blue);
3011 pixel = unsigned(red * 255) << 16;
3012 pixel |= unsigned(green * 255) << 8;
3013 pixel |= unsigned(blue * 255);
3047#pragma mark - Graphical context management.
3067 assert(
gc <=
fX11Contexts.size() &&
gc > 0 &&
"ChangeGC, invalid context id");
3078 assert(
gc <=
fX11Contexts.size() &&
gc > 0 &&
"ChangeGC, invalid context id");
3079 assert(
gval != 0 &&
"ChangeGC, gval parameter is null");
3133 const unsigned nDashes =
sizeof x11Context.
fDashes /
sizeof x11Context.
fDashes[0];
3134 for (
unsigned i = 0; i < nDashes; ++i)
3167#pragma mark - Cursor management.
3189 assert(!
fPimpl->IsRootWindow(
wid) &&
"SetCursor, called for root window");
3192 view.fCurrentCursor =
cursor;
3212 const NSPoint screenPoint = [
NSEvent mouseLocation];
3228 rootWinID =
fPimpl->GetRootWindowID();
3230 NSPoint screenPoint = [
NSEvent mouseLocation];
3233 rootX = screenPoint.x;
3234 rootY = screenPoint.y;
3237 if (winID >
fPimpl->GetRootWindowID()) {
3243 winX = screenPoint.x;
3244 winY = screenPoint.y;
3249 childWinID = childWin.fID;
3257#pragma mark - OpenGL management.
3265 return [[NSScreen mainScreen] backingScaleFactor];
3270 const std::vector<std::pair<UInt_t, Int_t> > &formatComponents)
3274 typedef std::pair<UInt_t, Int_t> component_type;
3275 typedef std::vector<component_type>::size_type size_type;
3278 std::vector<NSOpenGLPixelFormatAttribute> attribs;
3279 for (size_type i = 0,
e = formatComponents.size(); i <
e; ++i) {
3280 const component_type &comp = formatComponents[i];
3283 attribs.push_back(NSOpenGLPFADoubleBuffer);
3285 attribs.push_back(NSOpenGLPFADepthSize);
3286 attribs.push_back(comp.second > 0 ? comp.second : 32);
3288 attribs.push_back(NSOpenGLPFAAccumSize);
3289 attribs.push_back(comp.second > 0 ? comp.second : 1);
3291 attribs.push_back(NSOpenGLPFAStencilSize);
3292 attribs.push_back(comp.second > 0 ? comp.second : 8);
3294 attribs.push_back(NSOpenGLPFAMultisample);
3295 attribs.push_back(NSOpenGLPFASampleBuffers);
3296 attribs.push_back(1);
3297 attribs.push_back(NSOpenGLPFASamples);
3298 attribs.push_back(comp.second ? comp.second : 8);
3302 attribs.push_back(0);
3304 NSOpenGLPixelFormat *
const pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes : &attribs[0]];
3308 if (!
fPimpl->IsRootWindow(parentID)) {
3309 parentView =
fPimpl->GetWindow(parentID).fContentView;
3310 assert([parentView isKindOfClass : [
QuartzView class]] &&
3311 "CreateOpenGLWindow, parent view must be QuartzView");
3314 NSRect viewFrame = {};
3315 viewFrame.size.width =
width;
3316 viewFrame.size.height =
height;
3324 [parentView addChild : glView];
3325 glID =
fPimpl->RegisterDrawable(glView);
3335 Error(
"CreateOpenGLWindow",
"QuartzWindow allocation/initialization"
3336 " failed for a top-level GL widget");
3340 glID =
fPimpl->RegisterDrawable(parent);
3350 assert(!
fPimpl->IsRootWindow(windowID) &&
3351 "CreateOpenGLContext, parameter 'windowID' is a root window");
3353 "CreateOpenGLContext, view is not an OpenGL view");
3355 NSOpenGLContext *
const sharedContext =
fPimpl->GetGLContextForHandle(sharedID);
3359 newContext([[NSOpenGLContext alloc] initWithFormat : glView.
pixelFormat shareContext : sharedContext]);
3377 assert(ctxID > 0 &&
"MakeOpenGLContextCurrent, invalid context id");
3379 NSOpenGLContext *
const glContext =
fPimpl->GetGLContextForHandle(ctxID);
3381 Error(
"MakeOpenGLContextCurrent",
"No OpenGL context found for id %d",
int(ctxID));
3389 if ([glContext view] != glView)
3390 [glContext setView : glView];
3398 [glContext makeCurrentContext];
3416 const UInt_t width = std::max(glView.frame.size.width, CGFloat(100));
3417 const UInt_t height = std::max(glView.frame.size.height, CGFloat(100));
3419 NSRect viewFrame = {};
3420 viewFrame.size.width =
width;
3421 viewFrame.size.height =
height;
3423 const NSUInteger styleMask = kTitledWindowMask | kClosableWindowMask |
3424 kMiniaturizableWindowMask | kResizableWindowMask;
3427 fakeWindow = [[
QuartzWindow alloc] initWithContentRect : viewFrame styleMask : styleMask
3428 backing : NSBackingStoreBuffered defer : NO windowAttributes : &
attr];
3432 [fakeView setHidden : NO];
3434 fPimpl->SetFakeGLWindow(fakeWindow);
3438 [fakeView setHidden : NO];
3442 [glContext setView : fakeView];
3443 [glContext makeCurrentContext];
3452 NSOpenGLContext *
const currentContext = [NSOpenGLContext currentContext];
3453 if (!currentContext) {
3454 Error(
"GetCurrentOpenGLContext",
"The current OpenGL context is null");
3458 const Handle_t contextID =
fPimpl->GetHandleForGLContext(currentContext);
3460 Error(
"GetCurrentOpenGLContext",
"The current OpenGL context was"
3461 " not created/registered by TGCocoa");
3469 assert(ctxID > 0 &&
"FlushOpenGLBuffer, invalid context id");
3471 NSOpenGLContext *
const glContext =
fPimpl->GetGLContextForHandle(ctxID);
3472 assert(glContext != nil &&
"FlushOpenGLBuffer, bad context id");
3474 if (glContext != [NSOpenGLContext currentContext])
3478 [glContext flushBuffer];
3487 NSOpenGLContext *
const glContext =
fPimpl->GetGLContextForHandle(ctxID);
3488 if (
NSView *
const v = [glContext view]) {
3492 [glContext clearDrawable];
3495 if (glContext == [NSOpenGLContext currentContext])
3496 [NSOpenGLContext clearCurrentContext];
3498 fPimpl->DeleteGLContext(ctxID);
3501#pragma mark - Off-screen rendering for TPad/TCanvas.
3507 assert(windowID > (
Int_t)
fPimpl->GetRootWindowID() &&
"SetDoubleBuffer called for root window");
3509 if (windowID == 999) {
3510 Warning(
"SetDoubleBuffer",
"called with wid == 999");
3524 "SetDoubleBufferON, called, but no correct window was selected before");
3527 if (!window)
return;
3529 assert(window.fIsPixmap == NO &&
3530 "SetDoubleBufferON, selected drawable is a pixmap, can not attach pixmap to pixmap");
3532 [window setDirectDraw : YES];
3542 "SetDoubleBufferON, called, but no correct window was selected before");
3545 if (!window)
return;
3547 assert(window.fIsPixmap == NO &&
3548 "SetDoubleBufferON, selected drawable is a pixmap, can not attach pixmap to pixmap");
3550 [window setDirectDraw : NO];
3552 const unsigned currW = window.fWidth;
3553 const unsigned currH = window.fHeight;
3555 if (
QuartzPixmap *
const currentPixmap = window.fBackBuffer) {
3556 if (currH == currentPixmap.fHeight && currW == currentPixmap.fWidth)
3561 H : currH scaleFactor : [[NSScreen mainScreen] backingScaleFactor]]);
3563 window.fBackBuffer = pixmap.
Get();
3566 Error(
"SetDoubleBufferON",
"QuartzPixmap initialization failed");
3574 auto windows = NSApplication.sharedApplication.windows;
3575 for (
NSWindow *candidate : windows) {
3583#pragma mark - Event management part.
3597 fPimpl->fX11EventTranslator.fEventQueue.push_back(newEvent);
3603 assert(
fPimpl->fX11EventTranslator.fEventQueue.size() > 0 &&
"NextEvent, event queue is empty");
3605 event =
fPimpl->fX11EventTranslator.fEventQueue.front();
3606 fPimpl->fX11EventTranslator.fEventQueue.pop_front();
3612 return (
Int_t)
fPimpl->fX11EventTranslator.fEventQueue.size();
3619 typedef X11::EventQueue_t::iterator iterator_type;
3621 iterator_type it =
fPimpl->fX11EventTranslator.fEventQueue.begin();
3622 iterator_type eIt =
fPimpl->fX11EventTranslator.fEventQueue.end();
3624 for (; it != eIt; ++it) {
3625 const Event_t &queuedEvent = *it;
3627 event = queuedEvent;
3628 fPimpl->fX11EventTranslator.fEventQueue.erase(it);
3644#pragma mark - "Drag and drop", "Copy and paste", X11 properties.
3651 assert(
name != 0 &&
"InternAtom, parameter 'name' is null");
3668 assert(!
fPimpl->IsRootWindow(windowID) &&
3669 "SetPrimarySelectionOwner, windowID parameter is a 'root' window");
3670 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3671 "SetPrimarySelectionOwner, windowID parameter is not a valid window");
3673 const Atom_t primarySelectionAtom =
FindAtom(
"XA_PRIMARY",
false);
3674 assert(primarySelectionAtom !=
kNone &&
3675 "SetPrimarySelectionOwner, predefined XA_PRIMARY atom was not found");
3693 assert(!
fPimpl->IsRootWindow(windowID) &&
3694 "SetSelectionOwner, windowID parameter is a 'root' window'");
3695 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3696 "SetSelectionOwner, windowID parameter is not a valid window");
3711 const Atom_t primarySelectionAtom =
FindAtom(
"XA_PRIMARY",
false);
3712 assert(primarySelectionAtom !=
kNone &&
3713 "GetPrimarySelectionOwner, predefined XA_PRIMARY atom was not found");
3736 assert(!
fPimpl->IsRootWindow(windowID) &&
3737 "ConvertPrimarySelection, parameter 'windowID' is root window");
3738 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3739 "ConvertPrimarySelection, parameter windowID parameter is not a window id");
3742 assert(primarySelectionAtom !=
kNone &&
3743 "ConvertPrimarySelection, XA_PRIMARY predefined atom not found");
3746 assert(stringAtom !=
kNone &&
3747 "ConvertPrimarySelection, XA_STRING predefined atom not found");
3765 assert(!
fPimpl->IsRootWindow(windowID) &&
3766 "ConvertSelection, parameter 'windowID' is root window'");
3767 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3768 "ConvertSelection, parameter 'windowID' is not a window id");
3779 newEvent.
fUser[0] = windowID;
3780 newEvent.
fUser[1] = selection;
3790 ULong_t *bytesAfterReturn,
unsigned char **propertyReturn)
3799 if (
fPimpl->IsRootWindow(windowID))
3802 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3803 "GetProperty, parameter 'windowID' is not a valid window id");
3804 assert(propertyID > 0 && propertyID <=
fAtomToName.size() &&
3805 "GetProperty, parameter 'propertyID' is not a valid atom");
3806 assert(actualType != 0 &&
"GetProperty, parameter 'actualType' is null");
3807 assert(actualFormat != 0 &&
"GetProperty, parameter 'actualFormat' is null");
3808 assert(bytesAfterReturn != 0 &&
"GetProperty, parameter 'bytesAfterReturn' is null");
3809 assert(propertyReturn != 0 &&
"GetProperty, parameter 'propertyReturn' is null");
3813 *bytesAfterReturn = 0;
3814 *propertyReturn = 0;
3817 const std::string &atomName =
fAtomToName[propertyID - 1];
3820 if (![window hasProperty : atomName.c_str()]) {
3821 Error(
"GetProperty",
"Unknown property %s requested", atomName.c_str());
3825 unsigned tmpFormat = 0, tmpElements = 0;
3826 *propertyReturn = [window getProperty : atomName.c_str() returnType : actualType
3827 returnFormat : &tmpFormat nElements : &tmpElements];
3828 *actualFormat = (
Int_t)tmpFormat;
3829 *nItems = tmpElements;
3848 assert(!
fPimpl->IsRootWindow(windowID) &&
3849 "GetPasteBuffer, parameter 'windowID' is root window");
3850 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3851 "GetPasteBuffer, parameter 'windowID' is not a valid window");
3852 assert(propertyID && propertyID <=
fAtomToName.size() &&
3853 "GetPasteBuffer, parameter 'propertyID' is not a valid atom");
3857 const std::string &atomString =
fAtomToName[propertyID - 1];
3860 if (![window hasProperty : atomString.c_str()]) {
3861 Error(
"GetPasteBuffer",
"No property %s on a window", atomString.c_str());
3866 unsigned tmpFormat = 0, nElements = 0;
3869 propertyData((
char *)[window getProperty : atomString.c_str()
3870 returnType : &tmpType returnFormat : &tmpFormat
3871 nElements : &nElements]);
3873 assert(tmpFormat == 8 &&
"GetPasteBuffer, property has wrong format");
3875 text.Insert(0, propertyData.
Get(), nElements);
3876 nChars = (
Int_t)nElements;
3881 [window removeProperty : atomString.c_str()];
3912 assert(!
fPimpl->IsRootWindow(windowID) &&
3913 "ChangeProperty, parameter 'windowID' is root window");
3914 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3915 "ChangeProperty, parameter 'windowID' is not a valid window id");
3916 assert(propertyID && propertyID <=
fAtomToName.size() &&
3917 "ChangeProperty, parameter 'propertyID' is not a valid atom");
3921 const std::string &atomString =
fAtomToName[propertyID - 1];
3946 assert(!
fPimpl->IsRootWindow(windowID) &&
3947 "ChangeProperties, parameter 'windowID' is root window");
3948 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3949 "ChangeProperties, parameter 'windowID' is not a valid window id");
3950 assert(propertyID && propertyID <=
fAtomToName.size() &&
3951 "ChangeProperties, parameter 'propertyID' is not a valid atom");
3955 const std::string &atomName =
fAtomToName[propertyID - 1];
3958 [window setProperty : atomName.c_str()
data :
data
3976 assert(!
fPimpl->IsRootWindow(windowID) &&
3977 "DeleteProperty, parameter 'windowID' is root window");
3978 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
3979 "DeleteProperty, parameter 'windowID' is not a valid window");
3980 assert(propertyID && propertyID <=
fAtomToName.size() &&
3981 "DeleteProperty, parameter 'propertyID' is not a valid atom");
3983 const std::string &atomString =
fAtomToName[propertyID - 1];
3984 [
fPimpl->GetWindow(windowID) removeProperty : atomString.c_str()];
4000 assert(windowID >
fPimpl->GetRootWindowID() &&
4001 "SetDNDAware, parameter 'windowID' is not a valid window id");
4002 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
4003 "SetDNDAware, parameter 'windowID' is not a window");
4008 NSArray *
const supportedTypes = [NSArray arrayWithObjects : NSFilenamesPboardType, nil];
4012 [view registerForDraggedTypes : supportedTypes];
4019 assert(xaAtomAtom == 4 &&
"SetDNDAware, XA_ATOM is not defined");
4024 assert(
sizeof(
unsigned) == 4 &&
"SetDNDAware, sizeof(unsigned) must be 4");
4026 std::vector<unsigned> propertyData;
4027 propertyData.push_back(4);
4030 for (
unsigned i = 0; typeList[i]; ++i)
4031 propertyData.push_back(
unsigned(typeList[i]));
4034 [view setProperty :
"XdndAware" data : (
unsigned char *)&propertyData[0]
4035 size : propertyData.size() forType : xaAtomAtom
format : 32];
4043 if (windowID <= fPimpl->GetRootWindowID())
4046 assert(
fPimpl->GetDrawable(windowID).fIsPixmap == NO &&
4047 "IsDNDAware, windowID parameter is not a window");
4058 ::Warning(
"SetTypeList",
"Not implemented");
4082 fPimpl->IsRootWindow(winID) ? nil :
fPimpl->GetWindow(winID).fContentView,
4083 dragWinID, inputWinID,
x,
y, maxDepth);
4085 return testView.fID;
4090#pragma mark - Noops.
4215 NSPoint newCursorPosition = {};
4216 newCursorPosition.x = ix;
4217 newCursorPosition.y = iy;
4219 if (
fPimpl->GetRootWindowID() == winID) {
4223 assert(
fPimpl->GetDrawable(winID).fIsPixmap == NO &&
4224 "Warp, drawable is not a window");
4229 CGWarpMouseCursorPosition(NSPointToCGPoint(newCursorPosition));
4461#pragma mark - Details and aux. functions.
4466 return &
fPimpl->fX11EventTranslator;
4472 return &
fPimpl->fX11CommandBuffer;
4484 assert(
fCocoaDraw > 0 &&
"CocoaDrawOFF, was already off");
4498 if (!drawable.fIsPixmap) {
4499 Error(
"GetCurrentContext",
"TCanvas/TPad's internal error,"
4500 " selected drawable is not a pixmap!");
4504 return drawable.fContext;
4517 ProcessSerialNumber psn = {0, kCurrentProcess};
4519 const OSStatus res1 = TransformProcessType(&psn, kProcessTransformToForegroundApplication);
4524 if (res1 != noErr && res1 != paramErr) {
4525 Error(
"MakeProcessForeground",
"TransformProcessType failed with code %d",
int(res1));
4528#ifdef MAC_OS_X_VERSION_10_9
4530 [[NSApplication sharedApplication] activateIgnoringOtherApps : YES];
4532 const OSErr res2 = SetFrontProcess(&psn);
4533 if (res2 != noErr) {
4534 Error(
"MakeProcessForeground",
"SetFrontProcess failed with code %d", res2);
4541#ifdef MAC_OS_X_VERSION_10_9
4543 [[NSApplication sharedApplication] activateIgnoringOtherApps : YES];
4545 ProcessSerialNumber psn = {};
4547 OSErr res = GetCurrentProcess(&psn);
4549 Error(
"MakeProcessForeground",
"GetCurrentProcess failed with code %d", res);
4553 res = SetFrontProcess(&psn);
4555 Error(
"MapProcessForeground",
"SetFrontProcess failed with code %d", res);
4567 const std::map<std::string, Atom_t>::const_iterator it =
fNameToAtom.find(atomName);
4571 else if (addIfNotFound) {
4587 if (iconDirectoryPath) {
4589 if (fileName.
Get()) {
4592 NSString *cocoaStr = [NSString stringWithCString : fileName.
Get() encoding : NSASCIIStringEncoding];
4593 NSImage *image = [[[NSImage alloc] initWithContentsOfFile : cocoaStr] autorelease];
4594 [NSApp setApplicationIconImage : image];
Handle_t Region_t
Region handle.
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 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
int Int_t
Signed integer 4 bytes (int)
short Color_t
Color number (short)
unsigned char UChar_t
Unsigned Character 1 byte (unsigned char)
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.
float Float_t
Float 4 bytes (float)
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
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)
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.
static const TString & GetIconPath()
Get the icon path in the installation. Static utility function.
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
Semi-Abstract base class defining a generic interface to the underlying, low level,...
ROOT::MacOSX::Util::CFScopeGuard< CGImageRef > fImage
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)
ULong_t fPixel
color pixel value (index in color table)
UShort_t fRed
red component (0..65535)
UShort_t fGreen
green component (0..65535)
UShort_t fBlue
blue component (0..65535)
EGEventType fType
of event (see EGEventType)
Window_t fWindow
window reported event is relative to
Longptr_t fUser[5]
5 longs can be used by client message events NOTE: only [0], [1] and [2] may be used.
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.