summaryrefslogtreecommitdiff
path: root/wx+/grid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'wx+/grid.cpp')
-rw-r--r--wx+/grid.cpp59
1 files changed, 8 insertions, 51 deletions
diff --git a/wx+/grid.cpp b/wx+/grid.cpp
index 46c0c406..c8d418ee 100644
--- a/wx+/grid.cpp
+++ b/wx+/grid.cpp
@@ -17,8 +17,9 @@
#include <zen/scope_guard.h>
#include <zen/utf.h>
#include <zen/format_unit.h>
-#include "image_tools.h"
-#include "rtl.h"
+//#include "image_tools.h"
+//#include "rtl.h"
+#include "dc.h"
#ifdef ZEN_LINUX
#include <gtk/gtk.h>
@@ -63,50 +64,6 @@ const wxColor COLOR_LABEL_GRADIENT_TO_FOCUS = COLOR_LABEL_GRADIENT_TO;
wxColor getColorMainWinBackground() { return wxListBox::GetClassDefaultAttributes().colBg; } //cannot be initialized statically on wxGTK!
const wxColor colorGridLine = wxColour(192, 192, 192); //light grey
-
-//------------------------------------------------------------
-
-//another fix for yet another poor wxWidgets implementation (wxDCClipper does *not* stack)
-hash_map<wxDC*, wxRect> clippingAreas; //associate "active" clipping area with each DC
-
-class DcClipper
-{
-public:
- DcClipper(wxDC& dc, const wxRect& r) : dc_(dc)
- {
- auto it = clippingAreas.find(&dc);
- if (it != clippingAreas.end())
- {
- oldRect.reset(new wxRect(it->second));
-
- wxRect tmp = r;
- tmp.Intersect(*oldRect); //better safe than sorry
- dc_.SetClippingRegion(tmp); //
- it->second = tmp;
- }
- else
- {
- dc_.SetClippingRegion(r);
- clippingAreas.insert(std::make_pair(&dc_, r));
- }
- }
-
- ~DcClipper()
- {
- dc_.DestroyClippingRegion();
- if (oldRect.get() != nullptr)
- {
- dc_.SetClippingRegion(*oldRect);
- clippingAreas[&dc_] = *oldRect;
- }
- else
- clippingAreas.erase(&dc_);
- }
-
-private:
- std::unique_ptr<wxRect> oldRect;
- wxDC& dc_;
-};
}
//----------------------------------------------------------------------------------------------------------------
@@ -208,7 +165,7 @@ wxString getTruncatedText(const wxString& text, Function textFits)
void drawTextLabelFitting(wxDC& dc, const wxString& text, const wxRect& rect, int alignment)
{
- DcClipper clip(dc, rect); //wxDC::DrawLabel doesn't care about width, WTF?
+ RecursiveDcClipper clip(dc, rect); //wxDC::DrawLabel doesn't care about width, WTF?
/*
performance notes:
@@ -555,7 +512,7 @@ private:
wxRect textRect = rect;
textRect.Deflate(1);
{
- DcClipper clip(dc, textRect); //wxDC::DrawLabel doesn't care about with, WTF?
+ RecursiveDcClipper clip(dc, textRect); //wxDC::DrawLabel doesn't care about with, WTF?
dc.DrawLabel(formatRow(row), textRect, wxALIGN_CENTRE);
}
@@ -691,7 +648,7 @@ private:
highlight ? col == highlight->first && compPos == highlight->second :
false;
- DcClipper clip(dc, rect);
+ RecursiveDcClipper clip(dc, rect);
dataView->renderColumnLabel(refParent(), dc, rect, colType, isHighlighted);
//draw move target location
@@ -978,7 +935,7 @@ private:
{
//draw background lines
{
- DcClipper dummy2(dc, rect); //solve issues with drawBackground() painting in area outside of rect (which is not also refreshed by renderCell()) -> keep small scope!
+ RecursiveDcClipper dummy2(dc, rect); //solve issues with drawBackground() painting in area outside of rect (which is not also refreshed by renderCell()) -> keep small scope!
for (int row = rowFirst; row < rowLast; ++row)
drawBackground(*prov, dc, wxRect(cellAreaTL + wxPoint(0, row * rowHeight), wxSize(compWidth, rowHeight)), row, compPos);
}
@@ -995,7 +952,7 @@ private:
for (int row = rowFirst; row < rowLast; ++row)
{
const wxRect& cellRect = wxRect(cellAreaTL.x, cellAreaTL.y + row * rowHeight, width, rowHeight);
- DcClipper clip(dc, cellRect);
+ RecursiveDcClipper clip(dc, cellRect);
prov->renderCell(refParent(), dc, cellRect, row, iterCol->type_);
}
cellAreaTL.x += width;
bgstack15