TGQuartz.h
// @(#)root/graf2d:$Id$
// Author: Olivier Couet and Timur Pocheptsov 23/01/2012
/*************************************************************************
* Copyright (C) 1995-2011, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TGQuartz
#define ROOT_TGQuartz
#include <vector>
#ifndef ROOT_TGCocoa
#include "TGCocoa.h"
#endif
#ifndef ROOT_TPoint
#include "TPoint.h"
#endif
#ifndef ROOT_TTF
#include "TTF.h"
#endif
//////////////////////////////////////////////////////////////////////////
// //
// This is non-GUI part of TVirtualX interface, implemented for //
// MacOS X, using CoreGraphics (Quartz). //
// //
//////////////////////////////////////////////////////////////////////////
class TGQuartz : public TGCocoa {
private:
enum EAlign {kNone, kTLeft, kTCenter, kTRight, kMLeft,
kMCenter, kMRight, kBLeft, kBCenter, kBRight};
FT_Vector fAlign; // alignment vector
public:
TGQuartz();
TGQuartz(const char *name, const char *title);
//Final-overriders for TVirtualX.
virtual void DrawBox(Int_t x1, Int_t y1, Int_t x2, Int_t y2,
EBoxMode mode);
virtual void DrawCellArray(Int_t x1, Int_t y1, Int_t x2, Int_t y2,
Int_t nx, Int_t ny, Int_t *ic);
virtual void DrawFillArea(Int_t n, TPoint *xy);
using TGCocoa::DrawLine;//There is a GUI version of DrawLine.
virtual void DrawLine(Int_t x1, Int_t y1, Int_t x2, Int_t y2);
virtual void DrawPolyLine(Int_t n, TPoint *xy);
virtual void DrawPolyMarker(Int_t n, TPoint *xy);
virtual void DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn,
const char *text, ETextMode mode);
virtual void DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn,
const wchar_t *text, ETextMode mode);
//I have to override these setters, since they are alredy overriden
//in TVirtualX (originally, they are declared in TAttXXX classes)
//and do nothing in TVirtualX (though, they are implemented
//correctly in TAttXXX classes).
virtual void SetFillColor(Color_t cindex);
virtual void SetFillStyle(Style_t style);
virtual void SetLineColor(Color_t cindex);
virtual void SetLineStyle(Style_t linestyle);
virtual void SetLineWidth(Width_t width);
virtual void SetMarkerColor(Color_t cindex);
virtual void SetMarkerSize(Float_t markersize);
virtual void SetMarkerStyle(Style_t markerstyle);
virtual void SetOpacity(Int_t percent);
virtual void SetTextAlign(Short_t talign=11);
virtual void SetTextColor(Color_t cindex);
virtual void SetTextFont(Font_t fontnumber);
virtual Int_t SetTextFont(char *fontname, ETextSetMode mode);
virtual void SetTextSize(Float_t textsize);
virtual void GetTextExtent(UInt_t &w, UInt_t &h, char *text);
virtual Int_t GetFontAscent() const;
virtual Int_t GetFontDescent() const ;
virtual Float_t GetTextMagnitude();
private:
//Unfortunately, I have to convert from
//top-left to bottom-left corner system.
std::vector<TPoint> fConvertedPoints;
//Lines with AA can be quite different
//from what we always had with X11.
//Now this is a switch in our configuration file (system.rootrc),
//so it can be disabled. This flag affects _only_ pad's graphics,
//GUI graphics is special and different.
bool fUseAA;
void AlignTTFString();
Bool_t IsTTFStringVisible(Int_t x, Int_t y, UInt_t w, UInt_t h);
void RenderTTFString(Int_t x, Int_t y, ETextMode mode);
//I have to use void * instead of QuartzPixmap * because of CINT :(
void DrawFTGlyphIntoPixmap(void *pixmap, FT_Bitmap *source, ULong_t fore, ULong_t back, Int_t bx, Int_t by);
void SetAA();
void *GetSelectedDrawableChecked(const char *calledFrom) const;
TGQuartz(const TGQuartz &rhs);
TGQuartz &operator = (const TGQuartz &rhs);
ClassDef(TGQuartz, 0);//2D non-GUI graphics for Mac OSX.
};
#endif