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; }
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; }
void AudioView::FixScrollbars() { if (!hsbar || !vsbar) return; AudioDoc *doc = ((AudioDoc *)GetDocument()); if (!doc) return; bool rescroll = false; TrackList *tracks = GetTracks(); int totalHeight = (tracks->GetHeight() + 32); int panelWidth, panelHeight; trackPanel->GetSize(&panelWidth, &panelHeight); sinfo.total = tracks->GetMaxLen() + 1.0; sinfo.screen = ((double)panelWidth) / sinfo.zoom; if (sinfo.h > sinfo.total - sinfo.screen) { sinfo.h = sinfo.total - sinfo.screen; rescroll = true; } if (sinfo.h < 0.0) { sinfo.h = 0.0; rescroll = true; } sinfo.sbarTotal = (int)(sinfo.total * sinfo.zoom) / sinfo.scrollStep; sinfo.sbarScreen = (int)(sinfo.screen * sinfo.zoom) / sinfo.scrollStep; sinfo.sbarH = (int)(sinfo.h * sinfo.zoom) / sinfo.scrollStep; vpos = vsbar->GetThumbPosition() * sinfo.scrollStep; if (vpos >= totalHeight) vpos = totalHeight-1; if (vpos < 0) vpos = 0; hsbar->Show(sinfo.screen < sinfo.total); vsbar->Show(panelHeight < totalHeight); if (panelHeight >= totalHeight && vpos != 0) { vpos = 0; REDRAW(trackPanel); REDRAW(rulerPanel); rescroll = false; } if (sinfo.screen >= sinfo.total && sinfo.sbarH != 0) { sinfo.sbarH = 0; REDRAW(trackPanel); REDRAW(rulerPanel); rescroll = false; } hsbar->SetScrollbar(sinfo.sbarH, sinfo.sbarScreen, sinfo.sbarTotal, sinfo.sbarScreen, TRUE); vsbar->SetScrollbar(vpos / sinfo.scrollStep, panelHeight / sinfo.scrollStep, totalHeight / sinfo.scrollStep, panelHeight / sinfo.scrollStep, TRUE); sinfo.lastZoom = sinfo.zoom; if (rescroll && sinfo.screen < sinfo.total) { REDRAW(trackPanel); REDRAW(rulerPanel); } }