bool SelectBoxState::touchRuler(Editor* editor, Ruler& ruler, int x, int y) { int u, v; editor->editorToScreen(ruler.getPosition(), ruler.getPosition(), &u, &v); switch (ruler.getOrientation()) { case Ruler::Horizontal: return (y >= v-2 && y <= v+2); case Ruler::Vertical: return (x >= u-2 && x <= u+2); } return false; }
bool SelectBoxState::touchRuler(Editor* editor, Ruler& ruler, int x, int y) { gfx::Point pt = editor->editorToScreen( gfx::Point(ruler.getPosition(), ruler.getPosition())); switch (ruler.getOrientation()) { case Ruler::Horizontal: return (y >= pt.y-2 && y <= pt.y+2); case Ruler::Vertical: return (x >= pt.x-2 && x <= pt.x+2); } return false; }
void EqualizationPanel::OnPaint(wxPaintEvent & evt) { wxPaintDC dc(this); int width, height; GetSize(&width, &height); if (!mBitmap || mWidth!=width || mHeight!=height) { if (mBitmap) delete mBitmap; mWidth = width; mHeight = height; mBitmap = new wxBitmap(mWidth, mHeight); } wxColour bkgnd = GetBackgroundColour(); wxBrush bkgndBrush(bkgnd, wxSOLID); wxMemoryDC memDC; memDC.SelectObject(*mBitmap); wxRect bkgndRect; bkgndRect.x = 0; bkgndRect.y = 0; bkgndRect.width = 40; bkgndRect.height = mHeight; memDC.SetBrush(bkgndBrush); memDC.SetPen(*wxTRANSPARENT_PEN); memDC.DrawRectangle(bkgndRect); bkgndRect.y = mHeight - 20; bkgndRect.width = mWidth; bkgndRect.height = 20; memDC.DrawRectangle(bkgndRect); wxRect border; border.x = 40; border.y = 0; border.width = mWidth; border.height = mHeight - 20; memDC.SetBrush(*wxWHITE_BRUSH); memDC.SetPen(*wxBLACK_PEN); memDC.DrawRectangle(border); mEnvRect.x = 44; mEnvRect.width = mWidth - 50; mEnvRect.y = 3; mEnvRect.height = mHeight - 26; // Pure blue x-axis line memDC.SetPen(wxPen(wxColour(0, 0, 255), 1, wxSOLID)); int center = mEnvRect.height/2; memDC.DrawLine(mEnvRect.x, mEnvRect.y + center, mEnvRect.x + mEnvRect.width, mEnvRect.y + center); // Med-blue envelope line memDC.SetPen(wxPen(wxColour(110, 110, 220), 3, wxSOLID)); // Draw envelope double *values = new double[mEnvRect.width]; mEnvelope->GetValues(values, mEnvRect.width, 0.0, 1.0/mEnvRect.width); int x, y, xlast = 0, ylast = 0; for(int i=0; i<mEnvRect.width; i++) { x = mEnvRect.x + i; y = (int)(mEnvRect.height-mEnvRect.height*values[i]); if (i != 0) { memDC.DrawLine(xlast, ylast, x, mEnvRect.y + y); } xlast = x; ylast = y; } delete[] values; memDC.SetPen(*wxBLACK_PEN); mEnvRect.y -= 5; mEnvelope->Draw(memDC, mEnvRect, 0.0, mEnvRect.width, false, 0.0, 1.0); mEnvRect.y += 5; // Paint border again memDC.SetBrush(*wxTRANSPARENT_BRUSH); memDC.SetPen(*wxBLACK_PEN); memDC.DrawRectangle(border); // Ruler Ruler dbRuler; dbRuler.SetBounds(0, 0, 40, mHeight-21); dbRuler.SetOrientation(wxVERTICAL); dbRuler.SetRange(30, -30); dbRuler.SetFormat(Ruler::LinearDBFormat); dbRuler.SetUnits("dB"); dbRuler.Draw(memDC); Ruler freqRuler; freqRuler.SetBounds(41, mHeight-20, mWidth, mHeight); freqRuler.SetOrientation(wxHORIZONTAL); freqRuler.SetLog(true); freqRuler.SetRange(mLoFreq, mHiFreq); freqRuler.SetFormat(Ruler::IntFormat); freqRuler.SetUnits("Hz"); freqRuler.SetFlip(true); freqRuler.Draw(memDC); dc.Blit(0, 0, mWidth, mHeight, &memDC, 0, 0, wxCOPY, FALSE); }
bool AudacityPrintout::OnPrintPage(int page) { wxDC *dc = GetDC(); if (!dc) return false; int width, height; dc->GetSize(&width, &height); int rulerScreenHeight = 40; int screenTotalHeight = mTracks->GetHeight() + rulerScreenHeight; double scale = height / (double)screenTotalHeight; int rulerPageHeight = (int)(rulerScreenHeight * scale); Ruler ruler; ruler.SetBounds(0, 0, width, rulerPageHeight); ruler.SetOrientation(wxHORIZONTAL); ruler.SetRange(0.0, mTracks->GetEndTime()); ruler.SetFormat(Ruler::TimeFormat); ruler.SetLabelEdges(true); ruler.Draw(*dc); TrackArtist artist; artist.SetBackgroundBrushes(*wxWHITE_BRUSH, *wxWHITE_BRUSH, *wxWHITE_PEN, *wxWHITE_PEN); ViewInfo viewInfo; viewInfo.sel0 = viewInfo.sel1 = 0; viewInfo.vpos = 0; viewInfo.h = 0.0; viewInfo.screen = mTracks->GetEndTime() - viewInfo.h; viewInfo.total = viewInfo.screen; viewInfo.zoom = viewInfo.lastZoom = width / viewInfo.screen; int y = rulerPageHeight; TrackListIterator iter(mTracks); Track *n = iter.First(); while (n) { wxRect r; r.x = 0; r.y = y; r.width = width; r.height = (int)(n->GetHeight() * scale); switch(n->GetKind()) { case Track::Wave: switch (((WaveTrack *)n)->GetDisplay()) { case WaveTrack::WaveformDisplay: artist.DrawWaveform((WaveTrack *)n, *dc, r, &viewInfo, false, false, false, false, false); break; case WaveTrack::WaveformDBDisplay: artist.DrawWaveform((WaveTrack *)n, *dc, r, &viewInfo, false, false, false, true, false); break; case WaveTrack::SpectrumDisplay: artist.DrawSpectrum((WaveTrack *)n, *dc, r, &viewInfo, false); break; case WaveTrack::PitchDisplay: artist.DrawSpectrum((WaveTrack *)n, *dc, r, &viewInfo, true); break; } break; case Track::Note: artist.DrawNoteTrack((NoteTrack *)n, *dc, r, &viewInfo); break; case Track::Label: artist.DrawLabelTrack((LabelTrack *)n, *dc, r, &viewInfo); break; case Track::Time: artist.DrawTimeTrack((TimeTrack *)n, *dc, r, &viewInfo); break; } dc->SetPen(*wxBLACK_PEN); dc->DrawLine(0, r.y, width, r.y); n = iter.Next(); y += r.height; }; return true; }
bool AudacityPrintout::OnPrintPage(int WXUNUSED(page)) { wxDC *dc = GetDC(); if (!dc) return false; int width, height; dc->GetSize(&width, &height); int rulerScreenHeight = 40; int screenTotalHeight = mTracks->GetHeight() + rulerScreenHeight; double scale = height / (double)screenTotalHeight; int rulerPageHeight = (int)(rulerScreenHeight * scale); Ruler ruler; ruler.SetBounds(0, 0, width, rulerPageHeight); ruler.SetOrientation(wxHORIZONTAL); ruler.SetRange(0.0, mTracks->GetEndTime()); ruler.SetFormat(Ruler::TimeFormat); ruler.SetLabelEdges(true); ruler.Draw(*dc); TrackArtist artist; artist.SetBackgroundBrushes(*wxWHITE_BRUSH, *wxWHITE_BRUSH, *wxWHITE_PEN, *wxWHITE_PEN); const double screenDuration = mTracks->GetEndTime(); ZoomInfo zoomInfo(0.0, width / screenDuration); int y = rulerPageHeight; TrackListIterator iter(mTracks); Track *n = iter.First(); while (n) { wxRect r; r.x = 0; r.y = y; r.width = width; r.height = (int)(n->GetHeight() * scale); artist.DrawTrack(n, *dc, r, SelectedRegion(), zoomInfo, false, false, false, false); dc->SetPen(*wxBLACK_PEN); AColor::Line(*dc, 0, r.y, width, r.y); #ifdef EXPERIMENTAL_OUTPUT_DISPLAY if(MONO_WAVE_PAN(n)){ y += r.height; r.x = 0; r.y = y; r.width = width; r.height = (int)(n->GetHeight(true) * scale); artist.DrawTrack( n, *dc, r, SelectedRegion{}, zoomInfo, false, false, false, false); dc->SetPen(*wxBLACK_PEN); AColor::Line(*dc, 0, r.y, width, r.y); } #endif n = iter.Next(); y += r.height; }; return true; }
void EffectCompressorPanel::OnPaint(wxPaintEvent & WXUNUSED(evt)) { wxPaintDC dc(this); int width, height; GetSize(&width, &height); double rangeDB = 60; // Ruler int w = 0; int h = 0; Ruler vRuler; vRuler.SetBounds(0, 0, width, height); vRuler.SetOrientation(wxVERTICAL); vRuler.SetRange(0, -rangeDB); vRuler.SetFormat(Ruler::LinearDBFormat); vRuler.SetUnits(_("dB")); vRuler.GetMaxSize(&w, NULL); Ruler hRuler; hRuler.SetBounds(0, 0, width, height); hRuler.SetOrientation(wxHORIZONTAL); hRuler.SetRange(-rangeDB, 0); hRuler.SetFormat(Ruler::LinearDBFormat); hRuler.SetUnits(_("dB")); hRuler.SetFlip(true); hRuler.GetMaxSize(NULL, &h); vRuler.SetBounds(0, 0, w, height - h); hRuler.SetBounds(w, height - h, width, height); #if defined(__WXMSW__) dc.Clear(); #endif wxRect border; border.x = w; border.y = 0; border.width = width - w; border.height = height - h + 1; dc.SetBrush(*wxWHITE_BRUSH); dc.SetPen(*wxBLACK_PEN); dc.DrawRectangle(border); wxRect envRect = border; envRect.Deflate( 2, 2 ); int kneeX = lrint((rangeDB+threshold)*envRect.width/rangeDB); int kneeY = lrint((rangeDB+threshold/ratio)*envRect.height/rangeDB); int finalY = envRect.height; int startY = lrint((threshold*(1.0/ratio-1.0))*envRect.height/rangeDB); // Yellow line for threshold /* dc.SetPen(wxPen(wxColour(220, 220, 0), 1, wxSOLID)); AColor::Line(dc, envRect.x, envRect.y + envRect.height - kneeY, envRect.x + envRect.width - 1, envRect.y + envRect.height - kneeY);*/ // Was: Nice dark red line for the compression diagram // dc.SetPen(wxPen(wxColour(180, 40, 40), 3, wxSOLID)); // Nice blue line for compressor, same color as used in the waveform envelope. dc.SetPen( AColor::WideEnvelopePen) ; AColor::Line(dc, envRect.x, envRect.y + envRect.height - startY, envRect.x + kneeX - 1, envRect.y + envRect.height - kneeY); AColor::Line(dc, envRect.x + kneeX, envRect.y + envRect.height - kneeY, envRect.x + envRect.width - 1, envRect.y + envRect.height - finalY); // Paint border again dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.SetPen(*wxBLACK_PEN); dc.DrawRectangle(border); vRuler.Draw(dc); hRuler.Draw(dc); }