15 namespace Experimental {
25 class RPad:
public RPadBase {
28 RPadBase *fParent{
nullptr};
33 RAttrLine fAttrLine{
this,
"border_"};
37 std::unique_ptr<RDisplayItem> Display() const final;
45 RPad(RPadBase *parent, const RPadPos &pos, const RPadExtent &size): fParent(parent) { fPos = pos; fSize = size; }
51 const RPadBase *GetParent()
const {
return fParent; }
54 RPadBase *GetParent() {
return fParent; }
57 const RCanvas *GetCanvas()
const override {
return fParent ? fParent->GetCanvas() :
nullptr; }
60 RCanvas *GetCanvas()
override {
return fParent ? fParent->GetCanvas() :
nullptr; }
63 const RPadPos &GetPos()
const {
return fPos; }
66 const RPadExtent &GetSize()
const {
return fSize; }
69 void SetSize(
const RPadExtent &sz) { fSize = sz; }
72 void SetPos(
const RPadPos &p) { fPos = p; }
74 const RAttrLine &GetAttrLine()
const {
return fAttrLine; }
75 RPad &SetAttrLine(
const RAttrLine &attr) { fAttrLine = attr;
return *
this; }
76 RAttrLine &AttrLine() {
return fAttrLine; }
79 std::array<RPadLength::Normal, 2> PixelsToNormal(
const std::array<RPadLength::Pixel, 2> &pos)
const override
81 std::array<RPadLength::Normal, 2> posInParentNormal = fParent->PixelsToNormal(pos);
82 std::array<RPadLength::Normal, 2> myPixelInNormal =
83 fParent->PixelsToNormal({{fSize.Horiz().GetPixel(), fSize.Vert().GetPixel()}});
84 std::array<RPadLength::Normal, 2> myUserInNormal =
85 fParent->UserToNormal({{fSize.Horiz().GetUser(), fSize.Vert().GetUser()}});
88 return {{posInParentNormal[0] / (fSize.Horiz().GetNormal() + myPixelInNormal[0] + myUserInNormal[0]),
89 posInParentNormal[1] / (fSize.Vert().GetNormal() + myPixelInNormal[1] + myUserInNormal[1])}};
93 std::array<RPadLength::Normal, 2> ToNormal(
const RPadPos &pos)
const
95 std::array<RPadLength::Normal, 2> pixelsInNormal = PixelsToNormal({{pos.Horiz().GetPixel(), pos.Vert().GetPixel()}});
96 std::array<RPadLength::Normal, 2> userInNormal = UserToNormal({{pos.Horiz().GetUser(), pos.Vert().GetUser()}});
97 return {{pos.Horiz().GetNormal() + pixelsInNormal[0] + userInNormal[0],
98 pos.Vert().GetNormal() + pixelsInNormal[1] + userInNormal[1]}};