draw only in OnPaint

This commit is contained in:
dickelbeck 2008-03-31 13:46:00 +00:00
parent 4cf118ea0b
commit ec4cbb79ed
3 changed files with 55 additions and 52 deletions

View File

@ -5,6 +5,13 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2008-Mar-31 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+all
Tweaked class MsgPanel so that the screen drawing only happens from
its OnPaint() function.
2008-Mar-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr> 2008-Mar-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================ ================================================================================
+eeschema +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 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 <diemer-at-gmx.de> 2008-Mar-30 UPDATE Jonas Diemer <diemer-at-gmx.de>
================================================================================ ================================================================================
+eeschema +eeschema
@ -50,7 +56,7 @@ email address.
+eeschema +eeschema
Removed an very old bug in onrightclick.cpp which crashes eeschema when Removed an very old bug in onrightclick.cpp which crashes eeschema when
right clicking in a field inside a component. 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 <jean-pierre.charras@inpg.fr> 2008-Mar-20 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>

View File

@ -29,12 +29,12 @@ WinEDA_MsgPanel::WinEDA_MsgPanel( WinEDA_DrawFrame* parent, int id,
{ {
m_Parent = parent; m_Parent = parent;
SetFont( *g_MsgFont ); SetFont( *g_MsgFont );
m_last_x = 0;
} }
WinEDA_MsgPanel::~WinEDA_MsgPanel() WinEDA_MsgPanel::~WinEDA_MsgPanel()
{ {
m_Items.clear();
} }
@ -44,7 +44,7 @@ void WinEDA_MsgPanel::OnPaint( wxPaintEvent& event )
{ {
wxPaintDC dc( this ); wxPaintDC dc( this );
//EraseMsgBox( &dc ); erase( &dc );
dc.SetBackground( *wxBLACK_BRUSH ); dc.SetBackground( *wxBLACK_BRUSH );
dc.SetBackgroundMode( wxSOLID ); dc.SetBackgroundMode( wxSOLID );
@ -77,36 +77,33 @@ void WinEDA_MsgPanel::Affiche_1_Parametre( int pos_X, const wxString& texte_H,
* color = couleur d'affichage * color = couleur d'affichage
*/ */
{ {
static int old_pos_X; wxPoint pos;
wxPoint pos; wxSize drawSize = GetClientSize();
wxSize FontSizeInPixels, DrawSize;
wxClientDC dc( this );
DrawSize = GetClientSize(); // Get size of the font
wxSize fontSizeInPixels;
{
wxClientDC dc( this );
dc.SetBackground( *wxBLACK_BRUSH ); dc.SetFont( *g_MsgFont );
dc.SetBackgroundMode( wxSOLID ); dc.GetTextExtent( wxT( "W" ), &fontSizeInPixels.x, &fontSizeInPixels.y );
dc.SetTextBackground( GetBackgroundColour() );
dc.SetFont( *g_MsgFont );
dc.GetTextExtent( wxT( "W" ), &FontSizeInPixels.x, &FontSizeInPixels.y );
} // destroy wxClientDC ASAP
if( pos_X >= 0 ) if( pos_X >= 0 )
{ {
old_pos_X = pos.x = pos_X * (FontSizeInPixels.x + 2); m_last_x = pos.x = pos_X * (fontSizeInPixels.x + 2);
} }
else else
pos.x = old_pos_X; pos.x = m_last_x;
MsgItem item; MsgItem item;
item.m_X = pos.x; item.m_X = pos.x;
item.m_UpperY = (DrawSize.y / 2) - FontSizeInPixels.y; item.m_UpperY = (drawSize.y / 2) - fontSizeInPixels.y;
item.m_LowerY = DrawSize.y - FontSizeInPixels.y; item.m_LowerY = drawSize.y - fontSizeInPixels.y;
item.m_UpperText = texte_H; item.m_UpperText = texte_H;
item.m_LowerText = texte_L; item.m_LowerText = texte_L;
@ -137,7 +134,7 @@ void WinEDA_MsgPanel::Affiche_1_Parametre( int pos_X, const wxString& texte_H,
m_Items.push_back( item ); m_Items.push_back( item );
} }
showItem( dc, item ); Refresh();
} }
@ -168,29 +165,25 @@ void WinEDA_MsgPanel::showItem( wxDC& dc, const MsgItem& aItem )
/****************************************/ /****************************************/
void WinEDA_MsgPanel::EraseMsgBox() void WinEDA_MsgPanel::EraseMsgBox()
/****************************************/ /****************************************/
/* Effacement de la fenetre d'affichage des messages de bas d'ecran
*/
{ {
wxClientDC dc( this ); m_Items.clear();
m_last_x = 0;
EraseMsgBox( &dc ); Refresh();
} }
/*******************************************/ /*******************************************/
void WinEDA_MsgPanel::EraseMsgBox( wxDC* DC ) void WinEDA_MsgPanel::erase( wxDC* DC )
/*******************************************/ /*******************************************/
{ {
wxSize size;
wxColor color;
wxPen pen; wxPen pen;
wxBrush brush; wxBrush brush;
size = GetClientSize(); wxSize size = GetClientSize();
color = GetBackgroundColour(); wxColor color = GetBackgroundColour();
pen.SetColour( color ); pen.SetColour( color );
brush.SetColour( color ); brush.SetColour( color );
brush.SetStyle( wxSOLID ); brush.SetStyle( wxSOLID );
@ -198,9 +191,8 @@ void WinEDA_MsgPanel::EraseMsgBox( wxDC* DC )
DC->SetBrush( brush ); DC->SetBrush( brush );
DC->DrawRectangle( 0, 0, size.x, size.y ); DC->DrawRectangle( 0, 0, size.x, size.y );
DC->SetBrush( wxNullBrush ); DC->SetBrush( wxNullBrush );
DC->SetPen( wxNullPen ); DC->SetPen( wxNullPen );
m_Items.clear();
} }

View File

@ -192,6 +192,8 @@ public:
class WinEDA_DrawFrame : public WinEDA_BasicFrame class WinEDA_DrawFrame : public WinEDA_BasicFrame
{ {
public: public:
WinEDA_DrawPanel* DrawPanel; // Draw area WinEDA_DrawPanel* DrawPanel; // Draw area
WinEDA_MsgPanel* MsgPanel; // Zone d'affichage de caracteristiques WinEDA_MsgPanel* MsgPanel; // Zone d'affichage de caracteristiques
@ -541,8 +543,12 @@ class WinEDA_MsgPanel : public wxPanel
{ {
protected: protected:
std::vector<MsgItem> m_Items; std::vector<MsgItem> 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: public:
WinEDA_DrawFrame* m_Parent; WinEDA_DrawFrame* m_Parent;
@ -556,7 +562,6 @@ public:
void OnPaint( wxPaintEvent& event ); void OnPaint( wxPaintEvent& event );
void EraseMsgBox(); void EraseMsgBox();
void EraseMsgBox( wxDC* DC );
void Affiche_1_Parametre( int pos_X, const wxString& texte_H, void Affiche_1_Parametre( int pos_X, const wxString& texte_H,
const wxString& texte_L, int color ); const wxString& texte_L, int color );