summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-05-24 14:20:43 +0200
committerCarl Hetherington <cth@carlh.net>2020-10-26 12:42:07 +0100
commit428ced8015bca308c34d109b5244b08a8287d5a0 (patch)
tree3a560b2745c806b1b8a4840879423d595a951a5f
parent171c5b69beb10e709d6b8f67e45a11196bf7ce91 (diff)
Use wxDC for all drawing of the audio mapping view, removing
use of wxGraphicsContext. This seems to fix strange rendering problems on Windows. Backported-from-commit: 3e4f6d59b46e3c09c9d0aba907ff0633bf0bc2e5 Backported-from-branch: v2.15.x
-rw-r--r--src/wx/audio_mapping_view.cc124
-rw-r--r--src/wx/audio_mapping_view.h10
2 files changed, 59 insertions, 75 deletions
diff --git a/src/wx/audio_mapping_view.cc b/src/wx/audio_mapping_view.cc
index 32f423380..d189b1982 100644
--- a/src/wx/audio_mapping_view.cc
+++ b/src/wx/audio_mapping_view.cc
@@ -151,9 +151,8 @@ AudioMappingView::scroll ()
}
void
-AudioMappingView::paint_static (wxDC& dc, wxGraphicsContext* gc)
+AudioMappingView::paint_static (wxDC& dc)
{
- gc->SetAntialiasMode (wxANTIALIAS_DEFAULT);
dc.SetFont (wxSWISS_FONT->Bold());
wxCoord label_width;
wxCoord label_height;
@@ -174,11 +173,10 @@ AudioMappingView::paint_static (wxDC& dc, wxGraphicsContext* gc)
);
dc.SetFont (*wxSWISS_FONT);
- gc->SetPen (*wxBLACK_PEN);
}
void
-AudioMappingView::paint_column_labels (wxDC& dc, wxGraphicsContext* gc)
+AudioMappingView::paint_column_labels (wxDC& dc)
{
wxCoord label_width;
wxCoord label_height;
@@ -189,33 +187,31 @@ AudioMappingView::paint_column_labels (wxDC& dc, wxGraphicsContext* gc)
++N;
}
- wxGraphicsPath lines = gc->CreatePath ();
- lines.MoveToPoint (LEFT_WIDTH, GRID_SPACING);
- lines.AddLineToPoint (LEFT_WIDTH + _output_channels.size() * GRID_SPACING, GRID_SPACING);
- lines.MoveToPoint (LEFT_WIDTH, GRID_SPACING * 2);
- lines.AddLineToPoint (LEFT_WIDTH + _output_channels.size() * GRID_SPACING, GRID_SPACING * 2);
- gc->StrokePath (lines);
+ dc.DrawLine(wxPoint(LEFT_WIDTH, GRID_SPACING), wxPoint(LEFT_WIDTH + _output_channels.size() * GRID_SPACING, GRID_SPACING));
+ dc.DrawLine(wxPoint(LEFT_WIDTH, GRID_SPACING * 2), wxPoint(LEFT_WIDTH + _output_channels.size() * GRID_SPACING, GRID_SPACING * 2));
}
void
-AudioMappingView::paint_column_lines (wxGraphicsContext* gc)
+AudioMappingView::paint_column_lines (wxDC& dc)
{
- wxGraphicsPath lines = gc->CreatePath ();
for (size_t i = 0; i < _output_channels.size(); ++i) {
- lines.MoveToPoint (LEFT_WIDTH + GRID_SPACING * i, GRID_SPACING);
- lines.AddLineToPoint (LEFT_WIDTH + GRID_SPACING * i, TOP_HEIGHT + _input_channels.size() * GRID_SPACING);
+ dc.DrawLine (
+ wxPoint(LEFT_WIDTH + GRID_SPACING * i, GRID_SPACING),
+ wxPoint(LEFT_WIDTH + GRID_SPACING * i, TOP_HEIGHT + _input_channels.size() * GRID_SPACING)
+ );
}
- lines.MoveToPoint (LEFT_WIDTH + GRID_SPACING * _output_channels.size(), GRID_SPACING);
- lines.AddLineToPoint (LEFT_WIDTH + GRID_SPACING * _output_channels.size(), TOP_HEIGHT + _input_channels.size() * GRID_SPACING);
- gc->StrokePath (lines);
+
+ dc.DrawLine (
+ wxPoint(LEFT_WIDTH + GRID_SPACING * _output_channels.size(), GRID_SPACING),
+ wxPoint(LEFT_WIDTH + GRID_SPACING * _output_channels.size(), TOP_HEIGHT + _input_channels.size() * GRID_SPACING)
+ );
}
void
-AudioMappingView::paint_row_labels (wxDC& dc, wxGraphicsContext* gc)
+AudioMappingView::paint_row_labels (wxDC& dc)
{
wxCoord label_width;
wxCoord label_height;
- wxGraphicsPath lines = gc->CreatePath ();
/* Row channel labels */
@@ -229,8 +225,10 @@ AudioMappingView::paint_row_labels (wxDC& dc, wxGraphicsContext* gc)
/* Vertical lines on the left */
for (int i = 1; i < 3; ++i) {
- lines.MoveToPoint (GRID_SPACING * i, TOP_HEIGHT);
- lines.AddLineToPoint (GRID_SPACING * i, TOP_HEIGHT + _input_channels.size() * GRID_SPACING);
+ dc.DrawLine (
+ wxPoint(GRID_SPACING * i, TOP_HEIGHT),
+ wxPoint(GRID_SPACING * i, TOP_HEIGHT + _input_channels.size() * GRID_SPACING)
+ );
}
/* Group labels and lines */
@@ -265,28 +263,26 @@ AudioMappingView::paint_row_labels (wxDC& dc, wxGraphicsContext* gc)
dc.SetClippingRegion (old_x, old_y, old_width, old_height);
}
- lines.MoveToPoint (GRID_SPACING, y);
- lines.AddLineToPoint (GRID_SPACING * 2, y);
+ dc.DrawLine (wxPoint(GRID_SPACING, y), wxPoint(GRID_SPACING * 2, y));
y += height;
}
- lines.MoveToPoint (GRID_SPACING, y);
- lines.AddLineToPoint (GRID_SPACING * 2, y);
-
- gc->StrokePath (lines);
-}
+ dc.DrawLine (wxPoint(GRID_SPACING, y), wxPoint(GRID_SPACING * 2, y));
+ }
void
-AudioMappingView::paint_row_lines (wxGraphicsContext* gc)
+AudioMappingView::paint_row_lines (wxDC& dc)
{
- wxGraphicsPath lines = gc->CreatePath ();
for (size_t i = 0; i < _input_channels.size(); ++i) {
- lines.MoveToPoint (GRID_SPACING * 2, TOP_HEIGHT + GRID_SPACING * i);
- lines.AddLineToPoint (LEFT_WIDTH + _output_channels.size() * GRID_SPACING, TOP_HEIGHT + GRID_SPACING * i);
+ dc.DrawLine (
+ wxPoint(GRID_SPACING * 2, TOP_HEIGHT + GRID_SPACING * i),
+ wxPoint(LEFT_WIDTH + _output_channels.size() * GRID_SPACING, TOP_HEIGHT + GRID_SPACING * i)
+ );
}
- lines.MoveToPoint (GRID_SPACING * 2, TOP_HEIGHT + GRID_SPACING * _input_channels.size());
- lines.AddLineToPoint (LEFT_WIDTH + _output_channels.size() * GRID_SPACING, TOP_HEIGHT + GRID_SPACING * _input_channels.size());
- gc->StrokePath (lines);
+ dc.DrawLine (
+ wxPoint(GRID_SPACING * 2, TOP_HEIGHT + GRID_SPACING * _input_channels.size()),
+ wxPoint(LEFT_WIDTH + _output_channels.size() * GRID_SPACING, TOP_HEIGHT + GRID_SPACING * _input_channels.size())
+ );
}
void
@@ -327,27 +323,22 @@ AudioMappingView::paint_indicators (wxDC& dc)
}
static
-void clip (wxDC& dc, wxGraphicsContext* gc, int x, int y, int w, int h)
+void clip (wxDC& dc, int x, int y, int w, int h)
{
dc.SetClippingRegion (x, y, w, h);
- gc->Clip (x, y, w, h);
}
static
-void translate (wxDC& dc, wxGraphicsContext* gc, int x, int y)
+void translate (wxDC& dc, int x, int y)
{
- gc->PushState ();
- gc->Translate (-x, -y);
dc.SetLogicalOrigin (x, y);
}
static
-void restore (wxDC& dc, wxGraphicsContext* gc)
+void restore (wxDC& dc)
{
dc.SetLogicalOrigin (0, 0);
- gc->PopState ();
dc.DestroyClippingRegion ();
- gc->ResetClip ();
}
void
@@ -355,42 +346,35 @@ AudioMappingView::paint ()
{
wxPaintDC dc (_body);
- wxGraphicsContext* gc = wxGraphicsContext::Create (dc);
- if (!gc) {
- return;
- }
-
int const hs = _horizontal_scroll->GetThumbPosition ();
int const vs = _vertical_scroll->GetThumbPosition ();
- paint_static (dc, gc);
+ paint_static (dc);
- clip (dc, gc, LEFT_WIDTH, 0, GRID_SPACING * _output_channels.size(), GRID_SPACING * (2 + _input_channels.size()));
- translate (dc, gc, hs, 0);
- paint_column_labels (dc, gc);
- restore (dc, gc);
+ clip (dc, LEFT_WIDTH, 0, GRID_SPACING * _output_channels.size(), GRID_SPACING * (2 + _input_channels.size()));
+ translate (dc, hs, 0);
+ paint_column_labels (dc);
+ restore (dc);
- clip (dc, gc, 0, TOP_HEIGHT, GRID_SPACING * (3 + _output_channels.size()), GRID_SPACING * _input_channels.size() + 1);
- translate (dc, gc, 0, vs);
- paint_row_labels (dc, gc);
- restore (dc, gc);
+ clip (dc, 0, TOP_HEIGHT, GRID_SPACING * (3 + _output_channels.size()), GRID_SPACING * _input_channels.size() + 1);
+ translate (dc, 0, vs);
+ paint_row_labels (dc);
+ restore (dc);
- clip (dc, gc, GRID_SPACING * 2, TOP_HEIGHT, GRID_SPACING * (1 + _output_channels.size()), GRID_SPACING * _input_channels.size() + 1);
- translate (dc, gc, hs, vs);
- paint_row_lines (gc);
- restore (dc, gc);
+ clip (dc, GRID_SPACING * 2, TOP_HEIGHT, GRID_SPACING * (1 + _output_channels.size()), GRID_SPACING * _input_channels.size() + 1);
+ translate (dc, hs, vs);
+ paint_row_lines (dc);
+ restore (dc);
- clip (dc, gc, LEFT_WIDTH, GRID_SPACING, GRID_SPACING * (1 + _output_channels.size()), GRID_SPACING * (1 + _input_channels.size()));
- translate (dc, gc, hs, vs);
- paint_column_lines (gc);
- restore (dc, gc);
+ clip (dc, LEFT_WIDTH, GRID_SPACING, GRID_SPACING * (1 + _output_channels.size()), GRID_SPACING * (1 + _input_channels.size()));
+ translate (dc, hs, vs);
+ paint_column_lines (dc);
+ restore (dc);
- clip (dc, gc, LEFT_WIDTH, TOP_HEIGHT, GRID_SPACING * _output_channels.size(), GRID_SPACING * _input_channels.size());
- translate (dc, gc, hs, vs);
+ clip (dc, LEFT_WIDTH, TOP_HEIGHT, GRID_SPACING * _output_channels.size(), GRID_SPACING * _input_channels.size());
+ translate (dc, hs, vs);
paint_indicators (dc);
- restore (dc, gc);
-
- delete gc;
+ restore (dc);
}
optional<pair<int, int> >
diff --git a/src/wx/audio_mapping_view.h b/src/wx/audio_mapping_view.h
index a96757b5c..ffb8c9ed9 100644
--- a/src/wx/audio_mapping_view.h
+++ b/src/wx/audio_mapping_view.h
@@ -75,11 +75,11 @@ private:
void map_values_changed ();
void setup_sizes ();
void paint ();
- void paint_static (wxDC& dc, wxGraphicsContext* gc);
- void paint_column_labels (wxDC& dc, wxGraphicsContext* gc);
- void paint_column_lines (wxGraphicsContext* gc);
- void paint_row_labels (wxDC& dc, wxGraphicsContext* gc);
- void paint_row_lines (wxGraphicsContext* gc);
+ void paint_static (wxDC& dc);
+ void paint_column_labels (wxDC& dc);
+ void paint_column_lines (wxDC& dc);
+ void paint_row_labels (wxDC& dc);
+ void paint_row_lines (wxDC& dc);
void paint_indicators (wxDC& dc);
void size (wxSizeEvent &);
void scroll ();