From ec4cbb79ed66499605f3b3ba29dc5f3c595f6990 Mon Sep 17 00:00:00 2001 From: dickelbeck Date: Mon, 31 Mar 2008 13:46:00 +0000 Subject: [PATCH] draw only in OnPaint --- change_log.txt | 10 ++++-- common/msgpanel.cpp | 88 +++++++++++++++++++++------------------------ include/wxstruct.h | 9 +++-- 3 files changed, 55 insertions(+), 52 deletions(-) diff --git a/change_log.txt b/change_log.txt index 8e2304528c..6de793d14e 100644 --- a/change_log.txt +++ b/change_log.txt @@ -5,6 +5,13 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2008-Mar-31 UPDATE Dick Hollenbeck +================================================================================ ++all + Tweaked class MsgPanel so that the screen drawing only happens from + its OnPaint() function. + + 2008-Mar-30 UPDATE Jean-Pierre Charras ================================================================================ +eeschema @@ -16,7 +23,6 @@ email address. Added comments in gestfich.cpp to explain the default paths used by kicad to find help files and lib files - 2008-Mar-30 UPDATE Jonas Diemer ================================================================================ +eeschema @@ -50,7 +56,7 @@ email address. +eeschema Removed an very old bug in onrightclick.cpp which crashes eeschema when right clicking in a field inside a component. - Old code should never works, but ... + Old code should never works, but ... 2008-Mar-20 UPDATE Jean-Pierre Charras diff --git a/common/msgpanel.cpp b/common/msgpanel.cpp index 504ef76894..aa48ddc59f 100644 --- a/common/msgpanel.cpp +++ b/common/msgpanel.cpp @@ -29,12 +29,12 @@ WinEDA_MsgPanel::WinEDA_MsgPanel( WinEDA_DrawFrame* parent, int id, { m_Parent = parent; SetFont( *g_MsgFont ); + m_last_x = 0; } WinEDA_MsgPanel::~WinEDA_MsgPanel() { - m_Items.clear(); } @@ -44,18 +44,18 @@ void WinEDA_MsgPanel::OnPaint( wxPaintEvent& event ) { wxPaintDC dc( this ); - //EraseMsgBox( &dc ); + erase( &dc ); dc.SetBackground( *wxBLACK_BRUSH ); dc.SetBackgroundMode( wxSOLID ); dc.SetTextBackground( GetBackgroundColour() ); - + dc.SetFont( *g_MsgFont ); - + for( unsigned i=0; i= 0 ) { - old_pos_X = pos.x = pos_X * (FontSizeInPixels.x + 2); + m_last_x = pos.x = pos_X * (fontSizeInPixels.x + 2); } else - pos.x = old_pos_X; + pos.x = m_last_x; MsgItem item; - + item.m_X = pos.x; - - item.m_UpperY = (DrawSize.y / 2) - FontSizeInPixels.y; - item.m_LowerY = DrawSize.y - FontSizeInPixels.y; - + + item.m_UpperY = (drawSize.y / 2) - fontSizeInPixels.y; + item.m_LowerY = drawSize.y - fontSizeInPixels.y; + item.m_UpperText = texte_H; item.m_LowerText = texte_L; item.m_Color = color; - + int ndx; - // update the vector, which is sorted by m_X + // update the vector, which is sorted by m_X int limit = m_Items.size(); for( ndx=0; ndx item.m_X ) { m_Items.insert( m_Items.begin()+ndx, item ); break; } } - + if( ndx==limit ) // mutually exclusive with two above if tests { m_Items.push_back( item ); } - - showItem( dc, item ); + + Refresh(); } void WinEDA_MsgPanel::showItem( wxDC& dc, const MsgItem& aItem ) { int color = aItem.m_Color; - + if( color >= 0 ) { color &= MASKCOLOR; - dc.SetTextForeground( wxColour( ColorRefs[color].m_Red, + dc.SetTextForeground( wxColour( ColorRefs[color].m_Red, ColorRefs[color].m_Green, ColorRefs[color].m_Blue ) ); } @@ -157,7 +154,7 @@ void WinEDA_MsgPanel::showItem( wxDC& dc, const MsgItem& aItem ) { dc.DrawText( aItem.m_UpperText.GetData(), aItem.m_X, aItem.m_UpperY ); } - + if( !aItem.m_LowerText.IsEmpty() ) { dc.DrawText( aItem.m_LowerText.GetData(), aItem.m_X, aItem.m_LowerY ); @@ -168,39 +165,34 @@ void WinEDA_MsgPanel::showItem( wxDC& dc, const MsgItem& aItem ) /****************************************/ void WinEDA_MsgPanel::EraseMsgBox() /****************************************/ - -/* Effacement de la fenetre d'affichage des messages de bas d'ecran - */ { - wxClientDC dc( this ); - - EraseMsgBox( &dc ); + m_Items.clear(); + m_last_x = 0; + Refresh(); } /*******************************************/ -void WinEDA_MsgPanel::EraseMsgBox( wxDC* DC ) +void WinEDA_MsgPanel::erase( wxDC* DC ) /*******************************************/ { - wxSize size; - wxColor color; wxPen pen; wxBrush brush; - size = GetClientSize(); - color = GetBackgroundColour(); - + wxSize size = GetClientSize(); + wxColor color = GetBackgroundColour(); + pen.SetColour( color ); + brush.SetColour( color ); brush.SetStyle( wxSOLID ); - + DC->SetPen( pen ); DC->SetBrush( brush ); DC->DrawRectangle( 0, 0, size.x, size.y ); + DC->SetBrush( wxNullBrush ); DC->SetPen( wxNullPen ); - - m_Items.clear(); } diff --git a/include/wxstruct.h b/include/wxstruct.h index e9f11eda21..c917660420 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -192,6 +192,8 @@ public: class WinEDA_DrawFrame : public WinEDA_BasicFrame { + + public: WinEDA_DrawPanel* DrawPanel; // Draw area WinEDA_MsgPanel* MsgPanel; // Zone d'affichage de caracteristiques @@ -541,8 +543,12 @@ class WinEDA_MsgPanel : public wxPanel { protected: std::vector m_Items; + int m_last_x; ///< the last used x coordinate - void showItem( wxDC& dc, const MsgItem& aItem ); + + void showItem( wxDC& dc, const MsgItem& aItem ); + + void erase( wxDC* DC ); public: WinEDA_DrawFrame* m_Parent; @@ -556,7 +562,6 @@ public: void OnPaint( wxPaintEvent& event ); void EraseMsgBox(); - void EraseMsgBox( wxDC* DC ); void Affiche_1_Parametre( int pos_X, const wxString& texte_H, const wxString& texte_L, int color );