diff --git a/graf2d/cocoa/inc/QuartzPixmap.h b/graf2d/cocoa/inc/QuartzPixmap.h index c37c70a84e7ae..0b49a2bac6a09 100644 --- a/graf2d/cocoa/inc/QuartzPixmap.h +++ b/graf2d/cocoa/inc/QuartzPixmap.h @@ -91,8 +91,6 @@ // // ///////////////////////////////////////////////////////// -//TODO: split image and mask image? - @interface QuartzImage : NSObject { @private //32-bit Obj-C requires i-var to be declared (for a synthesized prop.). diff --git a/graf2d/cocoa/inc/TGOSXGL.h b/graf2d/cocoa/inc/TGOSXGL.h index 5c7854b80dcaf..5c53491a82f23 100644 --- a/graf2d/cocoa/inc/TGOSXGL.h +++ b/graf2d/cocoa/inc/TGOSXGL.h @@ -12,8 +12,6 @@ //at some point we had to use OpenGL in our TCanvas/TPad classes which do not //have direct access to low-level APIs + on Windows we had quite tricky //mt-problems to deal with. -//TODO: in principle, we can get rid of gl-managers and work with TGLWidget, -//as it was demonstrated in glpad dev-branch 5 years ago. // class TGOSXGLManager : public TGLManager { diff --git a/graf2d/cocoa/inc/X11Events.h b/graf2d/cocoa/inc/X11Events.h index f53b0717fe88b..f2fd24df3b172 100644 --- a/graf2d/cocoa/inc/X11Events.h +++ b/graf2d/cocoa/inc/X11Events.h @@ -62,7 +62,6 @@ class EventTranslator { void GenerateCrossingEvent(NSEvent *theEvent); void GeneratePointerMotionEvent(NSEvent *theEvent); - //TODO: instead of passing EMouseButton, use info from NSEvent??? void GenerateButtonPressEvent(NSView *eventView, NSEvent *theEvent, EMouseButton btn); void GenerateButtonReleaseEvent(NSView *eventView, NSEvent *theEvent, EMouseButton btn); diff --git a/graf2d/cocoa/src/FontCache.mm b/graf2d/cocoa/src/FontCache.mm index 9c70ea59fa944..8f684aa54f5ce 100644 --- a/graf2d/cocoa/src/FontCache.mm +++ b/graf2d/cocoa/src/FontCache.mm @@ -224,7 +224,7 @@ void CreateXLFDString(const X11::XLFDName &xlfd, std::string &xlfdString) } else xlfdString += "-*"; - xlfdString += "-*-*-*-*-*-*-*-";//TODO: something more reasonable? + xlfdString += "-*-*-*-*-*-*-*-"; } } diff --git a/graf2d/cocoa/src/QuartzPixmap.mm b/graf2d/cocoa/src/QuartzPixmap.mm index bccd14875eb70..01e77691c2f13 100644 --- a/graf2d/cocoa/src/QuartzPixmap.mm +++ b/graf2d/cocoa/src/QuartzPixmap.mm @@ -59,10 +59,6 @@ @implementation QuartzPixmap @synthesize fID; -// TODO: std::vector can be an i-var in Objective-C++, -// this will simplify and clear the error handling and -// memory management: fData does not have to be a raw pointer. - //______________________________________________________________________________ - (id) initWithW : (unsigned) width H : (unsigned) height scaleFactor : (CGFloat) scaleFactor { @@ -99,7 +95,6 @@ - (BOOL) resizeW : (unsigned) width H : (unsigned) height scaleFactor : (CGFloat return NO; } - //TODO: device RGB? should it be generic? const Util::CFScopeGuard colorSpace(CGColorSpaceCreateDeviceRGB());//[1] if (!colorSpace.Get()) { NSLog(@"QuartzPixmap: -resizeW:H:, CGColorSpaceCreateDeviceRGB failed"); @@ -119,7 +114,6 @@ - (BOOL) resizeW : (unsigned) width H : (unsigned) height scaleFactor : (CGFloat if (fScaleFactor > 1) CGContextScaleCTM(ctx.Get(), fScaleFactor, fScaleFactor); - // TODO: something like move would be better. fContext.Reset(ctx.Release()); @@ -144,7 +138,6 @@ - (CGImageRef) createImageFromPixmap : (X11::Rectangle) cropArea //This function is incorrect in a general case, it does not care about //cropArea.fX and cropArea.fY, very sloppy implementation. - //TODO: either fix it or remove completely. assert(cropArea.fX >= 0 && "createImageFromPixmap:, cropArea.fX is negative"); assert(cropArea.fY >= 0 && "createImageFromPixmap:, cropArea.fY is negative"); @@ -448,9 +441,6 @@ @implementation QuartzImage @synthesize fIsStippleMask; @synthesize fID; -//TODO: all these "ctors" were added at different times, not from the beginnning. -//Refactor them to reduce code duplication, where possible. - //______________________________________________________________________________ - (id) initWithW : (unsigned) width H : (unsigned) height data : (unsigned char *) data { diff --git a/graf2d/cocoa/src/QuartzWindow.mm b/graf2d/cocoa/src/QuartzWindow.mm index 9d8fe3981428e..9a4f6044a439e 100644 --- a/graf2d/cocoa/src/QuartzWindow.mm +++ b/graf2d/cocoa/src/QuartzWindow.mm @@ -431,7 +431,6 @@ bool ScreenPointIsInView(NSView *view, Int_t x, Int_t y) //______________________________________________________________________________ NSView *FindViewUnderPointer() { - //TODO: call FindViewInPoint using cursor screen coordiantes. const Util::AutoreleasePool pool; if (QuartzWindow *topLevel = FindWindowUnderPointer()) { @@ -528,12 +527,10 @@ bool ScreenPointIsInView(NSView *view, Int_t x, Int_t y) try { result.resize(w * h * 4); } catch (const std::bad_alloc &) { - //TODO: check that 'resize' has no side effects in case of exception. NSLog(@"DownscaledImageData, memory allocation failed"); return result; } - //TODO: device RGB? should it be generic? const Util::CFScopeGuard colorSpace(CGColorSpaceCreateDeviceRGB());//[1] if (!colorSpace.Get()) { NSLog(@"DownscaledImageData, CGColorSpaceCreateDeviceRGB failed"); @@ -649,11 +646,7 @@ void SetWindowAttributes(const SetWindowAttributes_t *attr, NSObject if (mask & kWAWinGravity) window.fWinGravity = attr->fWinGravity; - //TODO: More attributes to set - - //cursor for example, etc. if (mask & kWAOverrideRedirect) { - //This is quite a special case. - //TODO: Must be checked yet, if I understand this correctly! if ([(NSObject *)window isKindOfClass : [QuartzWindow class]]) { QuartzWindow * const qw = (QuartzWindow *)window; [qw setStyleMask : Details::kBorderlessWindowMask]; @@ -898,10 +891,6 @@ NSPoint GetCursorHotStop(NSImage *image, ECursor cursor) //QuartzView -drawRect/TGCocoa. So I need a trick to identify //this special window. -//TODO: possibly refactor these functions in a more generic way - not -//to have two separate versions for text and html. - - #pragma mark - Workarounds for a text view and its descendants. //______________________________________________________________________________ @@ -1147,8 +1136,6 @@ - (id) initWithContentRect : (NSRect) contentRect styleMask : (NSUInteger) windo contentViewRect.origin.x = 0.f; contentViewRect.origin.y = 0.f; - //TODO: OpenGL view can not be content of our QuartzWindow, check if - //this is a problem for ROOT. fContentView = [[QuartzView alloc] initWithFrame : contentViewRect windowAttributes : 0]; [self setContentView : fContentView]; @@ -1314,7 +1301,6 @@ - (void) setFShapeCombineMask : (QuartzImage *) mask [fShapeCombineMask release]; if (mask) { fShapeCombineMask = [mask retain]; - //TODO: Check window's shadow??? } } @@ -1651,11 +1637,6 @@ - (BOOL) windowShouldClose : (id) sender if (!fContentView) return NO; - //TODO: check this!!! Children are - //transient windows and ROOT does not handle - //such a deletion properly, noop then: - //you can not close some window, if there is a - //modal dialog above. if ([[self childWindows] count]) return NO; @@ -2088,8 +2069,6 @@ - (void) copyView : (QuartzView *) srcView area : (X11::Rectangle) area toPoint //To copy one "window" to another "window", I have to ask source QuartzView to draw intself into //bitmap, and copy this bitmap into the destination view. - //TODO: this code must be tested, with all possible cases. - assert(srcView != nil && "-copyView:area:toPoint:, parameter 'srcView' is nil"); const NSRect frame = [srcView frame]; @@ -2290,7 +2269,7 @@ - (unsigned char *) readColorBits : (X11::Rectangle) area self.fContext = ctx; //Restore old context. // const NSInteger bitsPerPixel = [imageRep bitsPerPixel]; - //TODO: ohhh :((( + assert(bitsPerPixel == 32 && "-readColorBits:, no alpha channel???"); const NSInteger bytesPerRow = [imageRep bytesPerRow]; unsigned dataWidth = bytesPerRow / (bitsPerPixel / 8);//assume an octet :( @@ -2594,7 +2573,6 @@ - (void) lowerWindow if (sibling == self) continue; - //TODO: equal test is not good :) I have a baaad feeling about this ;) if (NSEqualRects(sibling.frame, self.frame)) { [sibling setOverlapped : NO]; // @@ -2947,7 +2925,7 @@ - (void) mouseMoved : (NSEvent *) theEvent assert(fID != 0 && "-mouseMoved:, fID is 0"); if (fParentView)//Suppress events in all views, except the top-level one. - return; //TODO: check, that it does not create additional problems. + return; assert(dynamic_cast(gVirtualX) != 0 && "-mouseMoved:, gVirtualX is null or not of TGCocoa type"); diff --git a/graf2d/cocoa/src/TGCocoa.mm b/graf2d/cocoa/src/TGCocoa.mm index a7cf3784b9441..69b489fc18ed4 100644 --- a/graf2d/cocoa/src/TGCocoa.mm +++ b/graf2d/cocoa/src/TGCocoa.mm @@ -1503,19 +1503,14 @@ void FixAscii(std::vector &text) assert([fPimpl->GetDrawable(pixmapID) isKindOfClass : [QuartzImage class]] && "ShapeCombineMask, pixmapID parameter must point to QuartzImage object"); - //TODO: nonrectangular window can be only NSWindow object, - //not NSView (and mask is attached to a window). - //This means, if some nonrectangular window is created as a child - //first, and detached later (becoming top-level), the shape will be lost. - //Find a better way to fix it. if (fPimpl->GetWindow(windowID).fContentView.fParentView) return; QuartzImage * const srcImage = (QuartzImage *)fPimpl->GetDrawable(pixmapID); assert(srcImage.fIsStippleMask == YES && "ShapeCombineMask, source image is not a stipple mask"); - //TODO: there is some kind of problems with shape masks and - //flipped views, I have to do an image flip here - check this! + // There is some kind of problems with shape masks and + // flipped views, I have to do an image flip here. const Util::NSScopeGuard image([[QuartzImage alloc] initFromImageFlipped : srcImage]); if (image.Get()) { QuartzWindow * const qw = fPimpl->GetWindow(windowID).fQuartzWindow; @@ -1666,7 +1661,6 @@ void FixAscii(std::vector &text) CGContextTranslateCTM(ctx, 0.5, 0.5); else { //Pixmap uses native Cocoa's left-low-corner system. - //TODO: check the line on the edge. y1 = Int_t(X11::LocalYROOTToCocoa(drawable, y1)); y2 = Int_t(X11::LocalYROOTToCocoa(drawable, y2)); } @@ -1794,7 +1788,6 @@ void FixAscii(std::vector &text) h -= 1; } } else { - //TODO: check the line on the edge. //Pixmap has native Cocoa's low-left-corner system. y = Int_t(X11::LocalYROOTToCocoa(drawable, y + h)); } @@ -1873,7 +1866,6 @@ void FixAscii(std::vector &text) if (drawable.fIsPixmap) { //Pixmap has low-left-corner based system. - //TODO: check how pixmap works with pattern fill. y = Int_t(X11::LocalYROOTToCocoa(drawable, y + h)); } @@ -2345,7 +2337,6 @@ void FixAscii(std::vector &text) newSize.width = w; newSize.height = h; - //TODO: what about multi-head setup and scaling factor? Util::NSScopeGuard pixmap([[QuartzPixmap alloc] initWithW : w H : h scaleFactor : [[NSScreen mainScreen] backingScaleFactor]]); if (pixmap.Get()) { @@ -2370,7 +2361,6 @@ void FixAscii(std::vector &text) if (w == pixmap.fWidth && h == pixmap.fHeight) return 1; - //TODO: what about multi-head setup and scale factor? if ([pixmap resizeW : w H : h scaleFactor : [[NSScreen mainScreen] backingScaleFactor]]) return 1; @@ -3206,7 +3196,6 @@ void FixAscii(std::vector &text) //Scaling factor to let our OpenGL code know, that we probably //work on a retina display. - //TODO: what about multi-head setup? return [[NSScreen mainScreen] backingScaleFactor]; } @@ -3351,8 +3340,6 @@ void FixAscii(std::vector &text) //Funny enough, but if you have invisible window with visible view, //this trick works. - //TODO: this code is a total mess, refactor. - NSView *fakeView = nil; QuartzWindow *fakeWindow = fPimpl->GetFakeGLWindow(); @@ -3490,7 +3477,6 @@ void FixAscii(std::vector &text) return; } - //TODO: what about multi-head setup? Util::NSScopeGuard pixmap([[QuartzPixmap alloc] initWithW : currW H : currH scaleFactor : [[NSScreen mainScreen] backingScaleFactor]]); if (pixmap.Get()) @@ -3576,8 +3562,6 @@ void FixAscii(std::vector &text) Atom_t TGCocoa::InternAtom(const char *name, Bool_t onlyIfExist) { //X11 properties emulation. - //TODO: this is a temporary hack to make - //client message (close window) work. assert(name != 0 && "InternAtom, parameter 'name' is null"); return FindAtom(name, !onlyIfExist); @@ -3596,7 +3580,6 @@ void FixAscii(std::vector &text) if (!windowID)//From TGWin32. return; - //TODO: check, if this really happens and probably remove assert. assert(!fPimpl->IsRootWindow(windowID) && "SetPrimarySelectionOwner, windowID parameter is a 'root' window"); assert(fPimpl->GetDrawable(windowID).fIsPixmap == NO && @@ -3728,8 +3711,6 @@ void FixAscii(std::vector &text) // actually returned. //End of comment. - //TODO: actually, property can be set for root window. - //I have to save this data somehow. if (fPimpl->IsRootWindow(windowID)) return 0; @@ -3907,7 +3888,6 @@ void FixAscii(std::vector &text) return; //Strange signature - why propertyID is a reference? - //TODO: check, if ROOT sets/deletes properties on a 'root' window. assert(!fPimpl->IsRootWindow(windowID) && "DeleteProperty, parameter 'windowID' is root window"); assert(fPimpl->GetDrawable(windowID).fIsPixmap == NO && @@ -3957,7 +3937,6 @@ void FixAscii(std::vector &text) //While calling XChangeProperty, it passes the address of this typelist //and format is ... 32. I have to pack data into unsigned and force the size: assert(sizeof(unsigned) == 4 && "SetDNDAware, sizeof(unsigned) must be 4"); - //TODO: find fixed-width integer type (I do not have cstdint header at the moment?) std::vector propertyData; propertyData.push_back(4);//This '4' is from TGX11 (is it XA_ATOM???) diff --git a/graf2d/cocoa/src/TGOSXGL.mm b/graf2d/cocoa/src/TGOSXGL.mm index 1ad918b772cdc..fbafb5bee11f5 100644 --- a/graf2d/cocoa/src/TGOSXGL.mm +++ b/graf2d/cocoa/src/TGOSXGL.mm @@ -27,7 +27,6 @@ assert(gGLManager == 0 && "TGOSXGLManager, gGLManager is initialized"); gGLManager = this; - //TODO: do we really need this? if (gROOT && gROOT->GetListOfSpecials()) gROOT->GetListOfSpecials()->Add(this); } @@ -38,7 +37,6 @@ { //Destructor. - //TODO: do we really need this and does ROOT ever deletes 'this'? if (gROOT && gROOT->GetListOfSpecials()) gROOT->GetListOfSpecials()->Remove(this); } @@ -51,9 +49,6 @@ std::vector format;//Where is the hummer when you need one??? (I mean C++11 initializers '{xxx}'). - //TODO: this values actually are quite random, as it was in TX11GLManager/TGWin32GLManager, - //find something better! - format.push_back(component_type(Rgl::kDoubleBuffer, 1));//1 means nothing, kDoubleBuffer is enough :) format.push_back(component_type(Rgl::kStencil, 8)); format.push_back(component_type(Rgl::kDepth, 32)); diff --git a/graf2d/cocoa/src/TGQuartz.mm b/graf2d/cocoa/src/TGQuartz.mm index 265c3e1f2fd94..0721e23cce130 100644 --- a/graf2d/cocoa/src/TGQuartz.mm +++ b/graf2d/cocoa/src/TGQuartz.mm @@ -822,7 +822,7 @@ void ConvertPointsROOTToCocoa(Int_t nPoints, const TPoint *xy, std::vectorGetValue("Cocoa.EnableAntiAliasing", "auto")).Strip()); if (value == "auto") { - //TODO: what about multi-head setup? [[NSScreen mainScreen] backingScaleFactor] > 1. ? fUseAA = true : fUseAA = false; } else if (value == "no") fUseAA = false; diff --git a/graf2d/cocoa/src/X11Buffer.mm b/graf2d/cocoa/src/X11Buffer.mm index 5e28dd6862fd9..5247aab935a0c 100644 --- a/graf2d/cocoa/src/X11Buffer.mm +++ b/graf2d/cocoa/src/X11Buffer.mm @@ -607,7 +607,6 @@ //I assume here, that all XOR ops in one iteration (one Update call) must //be for the same window (if not, there is no normal way to implement this at all). - //TODO: verify and check this condition. NSObject *drawable = impl->GetDrawable(fXorOps[0]->fID); @@ -912,7 +911,7 @@ int_iterator BinarySearchRight(int_iterator first, int_iterator last, int value) //This is quite straightforward implementation - I'm calculation rectangles, which are part of //a widget's rect, not hidden by any of fRectsToClip. - //TODO: find a better algorithm. + typedef std::vector::const_iterator rect_const_iterator; typedef std::vector::size_type size_type; diff --git a/graf2d/cocoa/src/X11Events.mm b/graf2d/cocoa/src/X11Events.mm index 0ad2bd02276bc..802360ba561fc 100644 --- a/graf2d/cocoa/src/X11Events.mm +++ b/graf2d/cocoa/src/X11Events.mm @@ -99,9 +99,6 @@ void MapUnicharToKeySym(unichar key, char *buf, Int_t /*len*/, UInt_t &rootKeySy { assert(buf != 0 && "MapUnicharToKeySym, parameter 'buf' is null"); - //TODO: something really weird :) - //read how XLookupString actually works? ;) - static const KeySymPair keyMap[] = { {NSEnterCharacter, kKey_Enter}, {NSTabCharacter, kKey_Tab}, @@ -324,7 +321,7 @@ Time_t TimeForCocoaEvent(NSEvent *theEvent) //1. Event is not nil. assert(theEvent != nil && "TimeForCocoaEvent, parameter 'theEvent' is nil"); - return [theEvent timestamp] * 1000;//TODO: check this! + return [theEvent timestamp] * 1000; } //______________________________________________________________________________ @@ -350,7 +347,6 @@ void ConvertEventLocationToROOTXY(NSEvent *cocoaEvent, NSView *eventV assert(eventView != nil && "ConvertEventLocationToROOTXY, parameter 'eventView' is nil"); assert(rootEvent != 0 && "ConvertEventLocationToROOTXY, parameter 'rootEvent' is null"); - //TODO: can [event window] be nil? (this can probably happen with mouse grabs). if (![cocoaEvent window]) NSLog(@"Error in ConvertEventLocationToROOTXY, window property" " of event is nil, can not convert coordinates correctly"); @@ -1198,7 +1194,6 @@ void GenerateCrossingEventForGrabView(EventQueue_t &queue, NSView *fr void EventTranslator::GenerateCrossingEvent(NSEvent *theEvent) { //View parameter can be nil. - //TODO: change interface, it looks like I do not need the 'view' parameter. assert(theEvent != nil && "GenerateCrossingEvent, parameter 'event' is nil"); fPointerGrabType == kPGNoGrab ? GenerateCrossingEventNoGrab(theEvent) : @@ -1350,7 +1345,6 @@ void GenerateCrossingEventForGrabView(EventQueue_t &queue, NSView *fr if (fButtonGrabView) { //This can happen with X11, does this happen with ROOT's GUI? //Hm, should I send leave notify to the previous grab??? - //TODO: check this! [fButtonGrabView cancelGrab]; } @@ -1484,9 +1478,6 @@ void ClearPointerIfViewIsRelated(NSView *&view, Window_t winID) //Window was unmapped, check, if it's the same window as the current grab, //or focus window, or key grabbing window and if so - do cleanup. - //TODO: This is quite rough implementation - not sure, if this also has to - //generate some additional events. - if (fButtonGrabView) { for (NSView *view = fButtonGrabView; view; view = view.fParentView) { if (view.fID == winID) { @@ -1521,8 +1512,8 @@ void ClearPointerIfViewIsRelated(NSView *&view, Window_t winID) } } - ClearPointerIfViewIsRelated(fFocusView, winID);//TODO: send event to this view first? - ClearPointerIfViewIsRelated(fKeyGrabView, winID);//TODO: send event to this view first?? + ClearPointerIfViewIsRelated(fFocusView, winID); + ClearPointerIfViewIsRelated(fKeyGrabView, winID); } //______________________________________________________________________________ @@ -1552,8 +1543,6 @@ void ClearPointerIfViewIsRelated(NSView *&view, Window_t winID) //Cocoa has it's own grab, so view (and window) can be not under cursor (but still //it receives events). So I can not simple use eventView here. - //TODO: change interface? - remove eventView parameter declaration. - if (!fButtonGrabView)//Implicit grab when nobody has PressButtonMask return; @@ -1624,8 +1613,6 @@ void ClearPointerIfViewIsRelated(NSView *&view, Window_t winID) { //Generate button press event in the presence of activated pointer grab. - //TODO: change interface? remove view parameter from declaration. - //assert(view != nil && "GenerateButtonPressEventActiveGrab, view parameter is nil"); assert(theEvent != nil && "GenerateButtonPressEventActiveGrab, parameter 'theEvent' is nil"); @@ -1722,14 +1709,12 @@ void ClearPointerIfViewIsRelated(NSView *&view, Window_t winID) if (!fKeyGrabView) { NSView *candidateView = fFocusView; if (Detail::IsParent(fFocusView, eventView)) { - //TODO: test theEvent.type? Can it be neither NSKeyDown nor NSKeyUp? NSView * const testView = Detail::FindViewToPropagateEvent(eventView, kKeyPressMask); if (testView && (testView == fFocusView || Detail::IsParent(fFocusView, testView))) candidateView = testView; } - //TODO: test if focus (if it's chosen) want the event? GenerateKeyEventForView(candidateView, theEvent); } else GenerateKeyEventForView(fKeyGrabView, theEvent); @@ -1742,7 +1727,6 @@ void ClearPointerIfViewIsRelated(NSView *&view, Window_t winID) assert(theEvent != nil && "GenerateKeyEventActiveGrab, parameter 'theEvent' is nil"); assert(fFocusView != nil && "GenerateKeyEventActiveGrab, fFocusView is nil"); - //TODO: assert on possible event types? const Mask_t eventMask = theEvent.type == Details::kKeyDown ? kKeyPressMask : kKeyReleaseMask; if (Detail::IsParent(fFocusView, eventView) || fFocusView == eventView) { @@ -1783,7 +1767,6 @@ void ClearPointerIfViewIsRelated(NSView *&view, Window_t winID) candidateView = testView; } - //TODO: do I have to check if focus (if it was chosen) has a corresponding mask? GenerateKeyEventForView(candidateView, theEvent); } @@ -1798,7 +1781,6 @@ void ClearPointerIfViewIsRelated(NSView *&view, Window_t winID) const Mask_t eventType = theEvent.type == Details::kKeyDown ? kKeyPressMask : kKeyReleaseMask; - //TODO: this is not implemented, do I need it? (can require interface changes then). NSView *childView = nil; NSPoint mousePosition = {}; diff --git a/graf2d/cocoa/src/XLFDParser.mm b/graf2d/cocoa/src/XLFDParser.mm index 90449fd815a28..51d4a512ebde9 100644 --- a/graf2d/cocoa/src/XLFDParser.mm +++ b/graf2d/cocoa/src/XLFDParser.mm @@ -26,7 +26,6 @@ // ROOT's GUI for some time, I noticed that ROOT can use font name like // *, "fixed", "-*-" or something like this. In this case I have to set // some "default" or "wildcard" names. -// TODO: what does X11 epxected to do, if XLFD name is bad? // namespace ROOT {