X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Faudio_mapping_view.cc;h=98430da3bddf0cc0123d4bfd627b42113636cfd1;hb=ab0e8cdcafdcb83096012380f674b8280474e851;hp=5702d2ed6a1e20f922319632ff62730eda5d24ae;hpb=a19daa1abebf1a8e9e942387d2319a778187c0d3;p=dcpomatic.git diff --git a/src/wx/audio_mapping_view.cc b/src/wx/audio_mapping_view.cc index 5702d2ed6..98430da3b 100644 --- a/src/wx/audio_mapping_view.cc +++ b/src/wx/audio_mapping_view.cc @@ -75,6 +75,10 @@ AudioMappingView::AudioMappingView (wxWindow* parent) _vertical_scroll = new wxScrollBar (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSB_VERTICAL); _horizontal_scroll = new wxScrollBar (this, wxID_ANY); +#ifndef __WXOSX__ + SetDoubleBuffered (true); +#endif + Bind (wxEVT_SIZE, boost::bind(&AudioMappingView::size, this, _1)); Bind (wxEVT_MENU, boost::bind(&AudioMappingView::off, this), ID_off); Bind (wxEVT_MENU, boost::bind(&AudioMappingView::full, this), ID_full); @@ -207,30 +211,6 @@ AudioMappingView::paint_column_lines (wxGraphicsContext* gc) gc->StrokePath (lines); } -static -void clip (wxDC& dc, wxGraphicsContext* gc, 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) -{ - gc->PushState (); - gc->Translate (-x, -y); - dc.SetLogicalOrigin (x, y); -} - -static -void restore (wxDC& dc, wxGraphicsContext* gc) -{ - dc.SetLogicalOrigin (0, 0); - gc->PopState (); - dc.DestroyClippingRegion (); - gc->ResetClip (); -} - void AudioMappingView::paint_row_labels (wxDC& dc, wxGraphicsContext* gc) { @@ -263,14 +243,29 @@ AudioMappingView::paint_row_labels (wxDC& dc, wxGraphicsContext* gc) if (label_width > height) { label_width = height - 8; } - clip (dc, gc, GRID_SPACING, y + 4, GRID_SPACING, height - 4); - dc.DrawRotatedText ( - std_to_wx(i.name), - GRID_SPACING + (GRID_SPACING - label_height) / 2, - y + (height + label_width) / 2, - 90 - ); - restore (dc, gc); + + { + int yp = y; + if ((yp - 2 * GRID_SPACING) < dc.GetLogicalOrigin().y) { + yp += dc.GetLogicalOrigin().y; + } + + wxCoord old_x, old_y, old_width, old_height; + dc.GetClippingBox (&old_x, &old_y, &old_width, &old_height); + dc.DestroyClippingRegion (); + dc.SetClippingRegion (GRID_SPACING, yp + 4, GRID_SPACING, height - 8); + + dc.DrawRotatedText ( + std_to_wx(i.name), + GRID_SPACING + (GRID_SPACING - label_height) / 2, + y + (height + label_width) / 2, + 90 + ); + + dc.DestroyClippingRegion (); + dc.SetClippingRegion (old_x, old_y, old_width, old_height); + } + lines.MoveToPoint (GRID_SPACING, y); lines.AddLineToPoint (GRID_SPACING * 2, y); y += height; @@ -332,6 +327,30 @@ AudioMappingView::paint_indicators (wxDC& dc) } } +static +void clip (wxDC& dc, wxGraphicsContext* gc, 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) +{ + gc->PushState (); + gc->Translate (-x, -y); + dc.SetLogicalOrigin (x, y); +} + +static +void restore (wxDC& dc, wxGraphicsContext* gc) +{ + dc.SetLogicalOrigin (0, 0); + gc->PopState (); + dc.DestroyClippingRegion (); + gc->ResetClip (); +} + void AudioMappingView::paint () { @@ -492,11 +511,9 @@ AudioMappingView::minus6dB () void AudioMappingView::edit () { - int const d = _menu_output - 1; - - AudioGainDialog* dialog = new AudioGainDialog (this, _menu_input, _menu_output - 1, _map.get(_menu_input, d)); + AudioGainDialog* dialog = new AudioGainDialog (this, _menu_input, _menu_output, _map.get(_menu_input, _menu_output)); if (dialog->ShowModal() == wxID_OK) { - _map.set (_menu_input, d, dialog->value ()); + _map.set (_menu_input, _menu_output, dialog->value ()); map_values_changed (); }