void TimeLogChart::DrawLegends(wxPaintDC &dc) { const int LEGEND_LENGTH = 10; if (m_chartCollection == NULL && m_chartCollection->GetCount() == 0) return; dc.SetFont(*m_valueFont); wxSize ext = dc.GetTextExtent("H"); int dy = GetClientRect().GetBottom() - ext.GetHeight(); int dx = m_axisBounds.GetLeft(); for (int i = 0; i < m_chartCollection->GetCount(); i++) { ChartValueList *list = m_chartCollection->Item(i)->GetData(); dc.SetPen(wxPen(list->GetColour(), 5)); // draw legend with latest value wxString label = list->GetTitle(); if (list->GetCount() > 0) { // get the latest value double value = *list->GetLast()->GetData()/m_valueAxisScale; label += " (" + wxString::Format(m_valueAxisFormat, value) + ")"; } ext = dc.GetTextExtent(label); dc.DrawLine(dx, dy, dx + LEGEND_LENGTH, dy); dx += LEGEND_LENGTH + 5; dc.DrawText(label, dx, dy - ext.GetHeight()/2); dx += ext.GetWidth() + 20; } }
void TimeLogChart::DrawAxis(wxPaintDC &dc) { const int MARKER_OFFSET = 5; dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(*wxWHITE_BRUSH); dc.DrawRectangle(m_axisBounds); dc.SetPen(wxPen(wxColour(*wxBLACK), 1, wxPENSTYLE_DOT)); int topBound = m_axisBounds.GetTop(); int leftBound = m_axisBounds.GetLeft(); int rightBound = m_axisBounds.GetRight(); int bottomBound = m_axisBounds.GetBottom(); int dx = leftBound; wxFont savedFont = dc.GetFont(); dc.SetFont(*m_valueFont); int n = m_logDuration -1; for (int i = 0; i <= n; i++) { dx = leftBound + (int)floor(i*m_axisBounds.GetWidth() / (double)n); if (i % m_logTickFrequency == 0) { dc.DrawLine(dx, topBound, dx, bottomBound); if (i % (m_logTickFrequency*2) == 0) { // draw axis marker wxString s = wxString::Format(wxT("%d secs"), (m_logDuration-i)); wxSize ext = dc.GetTextExtent(s); dc.DrawText(s, dx - ext.GetWidth()/2, bottomBound + MARKER_OFFSET); } } } dc.DrawLine(dx, topBound, dx, bottomBound); int yValue = m_maxValue; int yValueSteps = (m_minValue-m_maxValue)/m_valueDivisions; int ySteps = ValueToPixel((m_maxValue - m_minValue)/m_valueDivisions); int dy = topBound; for (int n = 0; n < m_valueDivisions; n++) { dc.DrawLine(leftBound, dy, rightBound, dy); wxString s = wxString::Format(m_valueAxisFormat, (double)yValue/m_valueAxisScale); wxSize ext = dc.GetTextExtent(s); dc.DrawText(s, m_axisBounds.GetLeft()-ext.GetWidth() - MARKER_OFFSET, dy - ext.GetHeight()/2); dy += ySteps; yValue += yValueSteps; } dc.DrawLine(leftBound, bottomBound, rightBound, bottomBound); dc.SetFont(savedFont); }
//----------------------------------------------------------------------------- void LineProfileCanvas::OnPaintCustom( wxPaintDC& dc ) //----------------------------------------------------------------------------- { wxCoord yOffset( 1 ), w( 0 ), h( 0 ); dc.GetSize( &w, &h ); const double scaleX = static_cast<double>( w - 2 * GetBorderWidth() ) / static_cast<double>( ( GetDataCount() == 0 ) ? 1 : GetDataCount() - 1 ); const double scaleY = GetScaleY( h ); DrawMarkerLines( dc, w, h, scaleX ); unsigned int from, to; GetDrawRange( &from, &to ); const int borderWidth = GetBorderWidth(); const wxString YMarkerString( wxString::Format( wxT( "Draw Range(absolute): %d / %d, " ), from, to ) ); wxCoord xOffset; dc.GetTextExtent( YMarkerString, &xOffset, 0 ); xOffset += borderWidth / 2; dc.DrawText( YMarkerString, borderWidth / 2, yOffset ); if( m_boUnsupportedPixelFormat ) { dc.SetTextForeground( *wxRED ); dc.DrawText( wxString( wxT( "Unsupported pixel format" ) ), xOffset, yOffset ); dc.SetTextForeground( *wxBLACK ); } else if( m_ppData ) { for( int channel = 0; channel < m_ChannelCount; channel++ ) { DrawProfileLine( dc, h, borderWidth + 1, scaleX, scaleY, from, to, m_ppData[channel], GetDataCount(), *m_Pens[channel].pColour_ ); DrawInfoString( dc, wxString::Format( wxT( "%s%s: " ), ( channel != 0 ) ? wxT( ", " ) : wxT( "" ), m_Pens[channel].description_.c_str() ), xOffset, yOffset, *( m_Pens[channel].pColour_ ) ); } } }
static int DrawText(wxPaintDC& arDC, const wxString& arString, int aStartPosition, wxFont& arFont) { int Width = 0; int Height = 0; if (arString.Length() > 0) { arDC.SetFont(arFont); arDC.GetTextExtent(arString, &Width, &Height); arDC.DrawText(arString, aStartPosition, 0); } return aStartPosition+Width; }
void MyVideoCaptureWindow::DoPaint( wxPaintDC& dc ) { wxVideoCaptureWindowBase::DoPaint(dc); if (!IsDeviceConnected()) { // The window is blank when disconnected so we might as well // give a hint to people that they need to connect first. wxBitmap bmp = wxArtProvider::GetBitmap(wxART_MISSING_IMAGE, wxART_OTHER, wxSize(32, 32)); wxSize clientSize(GetClientSize()); wxString txt(wxT("Please select a capture device")); wxSize txtSize = dc.GetTextExtent(txt); dc.DrawText(txt, clientSize.GetWidth()/2 - txtSize.GetWidth()/2, clientSize.GetHeight()/2 - txtSize.GetHeight()); dc.DrawBitmap(bmp, clientSize.GetWidth()/2 - bmp.GetWidth()/2, clientSize.GetHeight()/2 + 4); } }