Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
a9cfb83
[x11] change management of window handles
linev Mar 10, 2026
ed2cd60
[x11] introduce new methods in TVirtualX interface
linev Mar 11, 2026
a68110e
[tgx11] provide independent list of GC objects per window
linev Mar 11, 2026
d220b49
[tgx11] move XWindow_t declaration to source file
linev Mar 11, 2026
3d515c0
[tgx11] remove unused RemovePixmap/ClearPixmap methods
linev Mar 11, 2026
4c8d013
[tcanvas] change draw mode after select drawable
linev Mar 11, 2026
474ddef
[tgx11] use in all places window GCs for pixmap operation
linev Mar 11, 2026
15da0a4
[tgx11] fully exclude global gGCpxmp context
linev Mar 11, 2026
f5ae822
[tgx11] provide per-window line and fill attributes management
linev Mar 11, 2026
5b4c930
[tgx11] use new line/fill styles method for generic methods
linev Mar 11, 2026
70bd1bb
[tgx11] change marker attributes handling
linev Mar 11, 2026
eda8185
[tgx11] use segments for markers
linev Mar 11, 2026
fa74205
[tgx11] adjust text attributes handling in plain TGX11
linev Mar 12, 2026
929a150
[tgx11ttf] use new methods for text attributes
linev Mar 12, 2026
63bceba
[tgx11] exclude usage of gGCline context
linev Mar 12, 2026
146cb1c
[tgx11] fully exclude global context list usage
linev Mar 12, 2026
1963853
[x11] provide move constructor signature for TGX11
linev Mar 12, 2026
c6541f5
[x11] introduce draw methods with window context arg
linev Mar 13, 2026
5e0e978
[tgx11] implement draw methods with window handle
linev Mar 13, 2026
6c8620a
[pad painter] add methods to set complete attributes at once
linev Mar 13, 2026
d2f16d8
[pad painter] use new virtualX methods for painting
linev Mar 13, 2026
06b0ab5
[tgx11ttf] implement new text drawing methods with TTF
linev Mar 13, 2026
d75e2ee
[tgx11] use context for TTF text drawing
linev Mar 13, 2026
b0bf5d3
[padpainter] use new pad painter methods to set attributes
linev Mar 13, 2026
0716980
[tgx11] implement several attributes getters
linev Mar 13, 2026
d84aa7c
[pad painter] remember some attributes used in drawing
linev Mar 13, 2026
e9c0a76
[x11] rename method to SetDrawModeW
linev Mar 13, 2026
2946f76
[pad painter] provide direct access to PS pointer
linev Mar 17, 2026
1ced44e
[pad painter] use PS directly in ASImage
linev Mar 17, 2026
93a9d53
[pad painter] use in TArrow
linev Mar 17, 2026
a29c361
[pad painter] use in TLatex and TMathText
linev Mar 17, 2026
ccabda1
[ps] let create ps pad painter in non batch mode
linev Mar 17, 2026
0d9081e
[gl painter] now text align is identical on both platforms
linev Mar 17, 2026
058361f
[tgx11] correctly implement fallback methods for attr
linev Mar 17, 2026
e0db29a
[pad painter] use for TWbox painting
linev Mar 17, 2026
e50a949
[pad painter] use TWbox methods to paint pad border
linev Mar 17, 2026
71398df
[stressGraphics] adjust ref files for quarks tests
linev Mar 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions core/base/inc/TVirtualPadPainter.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
#include "Rtypes.h"

class TVirtualPad;
class TVirtualPS;
class TAttFill;
class TAttLine;
class TAttMarker;
class TAttText;

class TVirtualPadPainter {
public:
Expand Down Expand Up @@ -75,6 +80,11 @@ class TVirtualPadPainter {
virtual void SetMarkerStyle(Style_t /* mstyle */ = 1) {}
virtual void SetMarkerSize(Size_t /* msize */ = 1) {}

virtual void SetAttFill(const TAttFill &att);
virtual void SetAttLine(const TAttLine &att);
virtual void SetAttMarker(const TAttMarker &att);
virtual void SetAttText(const TAttText &att);

//This part is an interface to X11 pixmap management and to save sub-pads off-screens for OpenGL.
//Currently, must be implemented only for X11/GDI
virtual Int_t CreateDrawable(UInt_t w, UInt_t h) = 0;//gVirtualX->OpenPixmap
Expand Down Expand Up @@ -127,6 +137,7 @@ class TVirtualPadPainter {

virtual Bool_t IsNative() const { return kFALSE; }
virtual Bool_t IsCocoa() const { return kFALSE; }
virtual TVirtualPS *GetPS() const { return nullptr; }

static TVirtualPadPainter *PadPainter(Option_t *opt = "");

Expand Down
72 changes: 48 additions & 24 deletions core/base/inc/TVirtualX.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,26 @@ class TVirtualX : public TNamed, public TAttLine, public TAttFill, public TAttTe
virtual void CreateOpenGLContext(Int_t wid=0);
virtual void DeleteOpenGLContext(Int_t wid=0);

//---- OpenGL related stuff, required only with R__HAS_COCOA ----
virtual Double_t GetOpenGLScalingFactor();
virtual Window_t CreateOpenGLWindow(Window_t parentID, UInt_t width, UInt_t height, const std::vector<std::pair<UInt_t, Int_t> > &format);
virtual Handle_t CreateOpenGLContext(Window_t windowID, Handle_t sharedContext);
virtual Bool_t MakeOpenGLContextCurrent(Handle_t ctx, Window_t windowID);
virtual Handle_t GetCurrentOpenGLContext();
virtual void FlushOpenGLBuffer(Handle_t ctx);

//---- Old graphics interface -----

void SetFillColor(Color_t cindex) override;
void SetFillStyle(Style_t style) override;
void SetLineColor(Color_t cindex) override;
virtual void SetLineType(Int_t n, Int_t *dash);
void SetLineStyle(Style_t linestyle) override;
void SetLineWidth(Width_t width) override;
void SetMarkerColor(Color_t cindex) override;
void SetMarkerSize(Float_t markersize) override;
void SetMarkerStyle(Style_t markerstyle) override;
virtual void SetOpacity(Int_t percent);
virtual void SetRGB(Int_t cindex, Float_t r, Float_t g, Float_t b);
void SetTextAlign(Short_t talign=11) override;
void SetTextColor(Color_t cindex) override;
virtual Int_t SetTextFont(char *fontname, ETextSetMode mode);
void SetTextFont(Font_t fontnumber) override;
virtual void SetTextMagnitude(Float_t mgn);
void SetTextSize(Float_t textsize) override;

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,
Expand All @@ -87,6 +100,34 @@ class TVirtualX : public TNamed, public TAttLine, public TAttFill, public TAttTe
ETextMode mode);
virtual void DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn, const wchar_t *text,
ETextMode mode);

//---- New graphics interface -----

virtual WinContext_t GetWindowContext(Int_t wid);
virtual void SetAttFill(WinContext_t wctxt, const TAttFill &att);
virtual void SetAttLine(WinContext_t wctxt, const TAttLine &att);
virtual void SetAttMarker(WinContext_t wctxt, const TAttMarker &att);
virtual void SetAttText(WinContext_t wctxt, const TAttText &att);
virtual void SetDrawModeW(WinContext_t wctxt, EDrawMode mode);

virtual void DrawBoxW(WinContext_t wctxt, Int_t x1, Int_t y1, Int_t x2, Int_t y2, EBoxMode mode);
virtual void DrawFillAreaW(WinContext_t wctxt, Int_t n, TPoint *xy);
virtual void DrawLineW(WinContext_t wctxt, Int_t x1, Int_t y1, Int_t x2, Int_t y2);
virtual void DrawPolyLineW(WinContext_t wctxt, Int_t n, TPoint *xy);
virtual void DrawLinesSegmentsW(WinContext_t wctxt, Int_t n, TPoint *xy);
virtual void DrawPolyMarkerW(WinContext_t wctxt, Int_t n, TPoint *xy);
virtual void DrawTextW(WinContext_t wctxt, Int_t x, Int_t y, Float_t angle, Float_t mgn, const char *text, ETextMode mode);
virtual void DrawTextW(WinContext_t wctxt, Int_t x, Int_t y, Float_t angle, Float_t mgn, const wchar_t *text, ETextMode mode);


//---- OpenGL related stuff, required only with R__HAS_COCOA ----
virtual Double_t GetOpenGLScalingFactor();
virtual Window_t CreateOpenGLWindow(Window_t parentID, UInt_t width, UInt_t height, const std::vector<std::pair<UInt_t, Int_t> > &format);
virtual Handle_t CreateOpenGLContext(Window_t windowID, Handle_t sharedContext);
virtual Bool_t MakeOpenGLContextCurrent(Handle_t ctx, Window_t windowID);
virtual Handle_t GetCurrentOpenGLContext();
virtual void FlushOpenGLBuffer(Handle_t ctx);

virtual UInt_t ExecCommand(TGWin32Command *code);
virtual void GetCharacterUp(Float_t &chupx, Float_t &chupy);
EDrawMode GetDrawMode() { return fDrawMode; }
Expand Down Expand Up @@ -129,23 +170,6 @@ class TVirtualX : public TNamed, public TAttLine, public TAttFill, public TAttTe
virtual void SetDoubleBufferOFF();
virtual void SetDoubleBufferON();
virtual void SetDrawMode(EDrawMode mode);
void SetFillColor(Color_t cindex) override;
void SetFillStyle(Style_t style) override;
void SetLineColor(Color_t cindex) override;
virtual void SetLineType(Int_t n, Int_t *dash);
void SetLineStyle(Style_t linestyle) override;
void SetLineWidth(Width_t width) override;
void SetMarkerColor(Color_t cindex) override;
void SetMarkerSize(Float_t markersize) override;
void SetMarkerStyle(Style_t markerstyle) override;
virtual void SetOpacity(Int_t percent);
virtual void SetRGB(Int_t cindex, Float_t r, Float_t g, Float_t b);
void SetTextAlign(Short_t talign=11) override;
void SetTextColor(Color_t cindex) override;
virtual Int_t SetTextFont(char *fontname, ETextSetMode mode);
void SetTextFont(Font_t fontnumber) override;
virtual void SetTextMagnitude(Float_t mgn);
void SetTextSize(Float_t textsize) override;
virtual void Sync(Int_t mode);
virtual void UpdateWindow(Int_t mode);
virtual void Warp(Int_t ix, Int_t iy, Window_t id = 0);
Expand Down
6 changes: 2 additions & 4 deletions core/base/src/TAttFill.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,8 @@ void TAttFill::Modify()
void TAttFill::ModifyOn(TVirtualPad *pad)
{
auto pp = pad ? pad->GetPainter() : nullptr;
if (!pp)
return;
pp->SetFillColor(fFillColor);
pp->SetFillStyle(fFillStyle);
if (pp)
pp->SetAttFill(*this);
}

////////////////////////////////////////////////////////////////////////////////
Expand Down
18 changes: 14 additions & 4 deletions core/base/src/TAttLine.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -256,11 +256,21 @@ void TAttLine::ModifyOn(TVirtualPad *pad)
auto pp = pad ? pad->GetPainter() : nullptr;
if (!pp)
return;
pp->SetLineColor(fLineColor);
pp->SetLineStyle((fLineStyle > 0 && fLineStyle < 30) ? fLineStyle : 1);
pp->SetLineWidth(std::abs(fLineWidth % 100));
}

Bool_t normal_style = (fLineStyle > 0) && (fLineStyle < 30);
Bool_t normal_width = (fLineWidth >= 0) && (fLineWidth < 100);

if (normal_style && normal_width)
pp->SetAttLine(*this);
else {
TAttLine att1(*this);
if (!normal_style)
att1.SetLineStyle(1);
if (!normal_width)
att1.SetLineWidth(std::abs(fLineWidth % 100));
pp->SetAttLine(att1);
}
}

////////////////////////////////////////////////////////////////////////////////
/// Reset this line attributes to default values.
Expand Down
8 changes: 2 additions & 6 deletions core/base/src/TAttMarker.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -330,12 +330,8 @@ void TAttMarker::Modify()
void TAttMarker::ModifyOn(TVirtualPad *pad)
{
auto pp = pad ? pad->GetPainter() : nullptr;
if (!pp)
return;

pp->SetMarkerColor(fMarkerColor);
pp->SetMarkerSize (fMarkerSize);
pp->SetMarkerStyle(fMarkerStyle);
if (pp)
pp->SetAttMarker(*this);
}


Expand Down
17 changes: 7 additions & 10 deletions core/base/src/TAttText.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,6 @@ void TAttText::Modify()
ModifyOn(gPad);
}


////////////////////////////////////////////////////////////////////////////////
/// Change current text attributes if necessary on specified pad.

Expand All @@ -339,6 +338,7 @@ void TAttText::ModifyOn(TVirtualPad *pad)
if (!pp)
return;

Float_t tsize0 = fTextSize;
Float_t tsize = fTextSize;

// there was difference in text size handling, keep it in one place
Expand All @@ -362,15 +362,12 @@ void TAttText::ModifyOn(TVirtualPad *pad)
}
}
}
pp->SetTextAngle(fTextAngle);
if (pp->GetTextFont() != fTextFont) {
pp->SetTextFont(fTextFont);
pp->SetTextSize(tsize);
} else if (pp->GetTextSize() != tsize) {
pp->SetTextSize(tsize);
}
pp->SetTextAlign(fTextAlign);
pp->SetTextColor(fTextColor);

fTextSize = tsize;

pp->SetAttText(*this);

fTextSize = tsize0;
}


Expand Down
45 changes: 45 additions & 0 deletions core/base/src/TVirtualPadPainter.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@

#include "TVirtualPadPainter.h"
#include "TPluginManager.h"
#include "TAttFill.h"
#include "TAttLine.h"
#include "TAttMarker.h"
#include "TAttText.h"


/** \class TVirtualPadPainter
Expand Down Expand Up @@ -96,3 +100,44 @@ void TVirtualPadPainter::DrawTextUrl(Double_t x, Double_t y, const char *text, c
{
DrawText(x, y, text, kClear);
}

////////////////////////////////////////////////////////////////////////////////
/// Set fill attributes

void TVirtualPadPainter::SetAttFill(const TAttFill &att)
{
SetFillColor(att.GetFillColor());
SetFillStyle(att.GetFillStyle());
}

////////////////////////////////////////////////////////////////////////////////
/// Set line attributes

void TVirtualPadPainter::SetAttLine(const TAttLine &att)
{
SetLineColor(att.GetLineColor());
SetLineStyle(att.GetLineStyle());
SetLineWidth(att.GetLineWidth());
}

////////////////////////////////////////////////////////////////////////////////
/// Set marker attributes

void TVirtualPadPainter::SetAttMarker(const TAttMarker &att)
{
SetMarkerColor(att.GetMarkerColor());
SetMarkerSize(att.GetMarkerSize());
SetMarkerStyle(att.GetMarkerStyle());
}

////////////////////////////////////////////////////////////////////////////////
/// Set text attributes

void TVirtualPadPainter::SetAttText(const TAttText &att)
{
SetTextAlign(att.GetTextAlign());
SetTextAngle(att.GetTextAngle());
SetTextColor(att.GetTextColor());
SetTextSize(att.GetTextSize());
SetTextFont(att.GetTextFont());
}
Loading
Loading