diff --git a/change_log.txt b/change_log.txt index 03eab0722d..6e5c48c7c9 100644 --- a/change_log.txt +++ b/change_log.txt @@ -5,30 +5,43 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2008-Mar-14 UPDATE Dick Hollenbeck +================================================================================ ++eeschema + * cleaned up some xor artifacts, see eeschema/getpart.cpp's comment: + // switch from normal mode to xor mode for the duration of the move, first + // by erasing fully any "normal drawing mode" primitives with the PostDirtyRect(), + // then by drawing the first time in xor mode so that subsequent xor + // drawing will fully erase this first copy and then the previous copy. + * redraw the entire screen at end of a component move. + * added many calls to Refresh() to eeschema/onleftclick.cpp and in such cases + I now pass a NULL DC to TestDanglingEnds() + + 2008-Mar-14 UPDATE Jean-Pierre Charras ================================================================================ - some code cleaning and comment translations. - added: - /** EDA_Rect::Merge( EDA_Rect & aRect ) - * Modify Position and Size of this in order to contains the given rect - * mainly used to calculate bouding boxes - * @param aRect = given rect to merge with this - */ + some code cleaning and comment translations. + added: + /** EDA_Rect::Merge( EDA_Rect & aRect ) + * Modify Position and Size of this in order to contains the given rect + * mainly used to calculate bouding boxes + * @param aRect = given rect to merge with this + */ 2008-Mar-14 UPDATE Jean-Pierre Charras ================================================================================ +pcbnew - Added a tool to the upper toolbar which gives and easy access to freeroute - Solved a bug in plot postscript format when drawing oblong pads: - Bad oblong pad size after drawing a round pad + Added a tool to the upper toolbar which gives and easy access to freeroute + Solved a bug in plot postscript format when drawing oblong pads: + Bad oblong pad size after drawing a round pad 2008-Mar-13 UPDATE Jean-Pierre Charras ================================================================================ +pcbnew - Dirty rect used in footprint rotation, flip and delete. - Better calculation of the footprint dirty rect. + Dirty rect used in footprint rotation, flip and delete. + Better calculation of the footprint dirty rect. 2008-Mar-13 UPDATE Dick Hollenbeck diff --git a/common/base_struct.cpp b/common/base_struct.cpp index 3737833b12..8124539e6a 100644 --- a/common/base_struct.cpp +++ b/common/base_struct.cpp @@ -767,7 +767,7 @@ EDA_Rect& EDA_Rect::Inflate( wxCoord dx, wxCoord dy ) * mainly used to calculate bounding boxes * @param aRect = given rect to merge with this */ -void EDA_Rect::Merge( EDA_Rect& aRect ) +void EDA_Rect::Merge( const EDA_Rect& aRect ) { Normalize(); // ensure width and height >= 0 EDA_Rect rect = aRect; @@ -775,8 +775,8 @@ void EDA_Rect::Merge( EDA_Rect& aRect ) wxPoint end = GetEnd(); wxPoint rect_end = rect.GetEnd(); - // Change origin and size in order to contain the given rect - m_Pos.x = MIN( m_Pos.x, rect.m_Pos.x ); + // Change origin and size in order to contain the given rect + m_Pos.x = MIN( m_Pos.x, rect.m_Pos.x ); m_Pos.y = MIN( m_Pos.y, rect.m_Pos.y ); end.x = MAX( end.x, rect_end.x ); end.y = MAX( end.y, rect_end.y ); diff --git a/eeschema/cmpclass.cpp b/eeschema/cmpclass.cpp index 6e9f0f3200..99b870606a 100644 --- a/eeschema/cmpclass.cpp +++ b/eeschema/cmpclass.cpp @@ -272,32 +272,23 @@ EDA_Rect DrawJunctionStruct::GetBoundingBox() EDA_Rect EDA_SchComponentStruct::GetBoundingBox() { const int PADDING = 40; - int xmin, xmax, ymin, ymax; // This gives a reasonable approximation (but some things are missing so... EDA_Rect ret = GetBoundaryBox(); - xmin = ret.m_Pos.x; - ymin = ret.m_Pos.y; - xmax = ret.m_Pos.x + ret.m_Size.x; - ymax = ret.m_Pos.y + ret.m_Size.y; // Include BoundingBoxes of fields for( int i = REFERENCE; i < NUMBER_OF_FIELDS; i++ ) { - EDA_Rect box = m_Field[i].GetBoundaryBox(); - xmin = MIN( xmin, box.m_Pos.x); - ymin = MIN( ymin, box.m_Pos.y); - xmax = MAX( xmax, box.m_Pos.x + box.m_Size.x); - ymax = MAX( ymax, box.m_Pos.y + box.m_Size.y); + ret.Merge( m_Field[i].GetBoundaryBox() ); } // ... add padding TODO: improve this - ret.m_Pos.x = xmin - PADDING; - ret.m_Pos.y = ymin - PADDING; - ret.m_Size.x = xmax - xmin + 2*PADDING; - ret.m_Size.y = ymax - ymin + 2*PADDING; + ret.m_Pos.x -= PADDING; + ret.m_Pos.y -= PADDING; + ret.m_Size.x += 2*PADDING; + ret.m_Size.y += 2*PADDING; - D( printf("final box: %d,%d, %d,%d\n", ret.m_Pos.x, ret.m_Pos.y, ret.m_Size.x, ret.m_Size.y); ) +// D( printf("final box: %d,%d, %d,%d\n", ret.m_Pos.x, ret.m_Pos.y, ret.m_Size.x, ret.m_Size.y); ) return ret; } diff --git a/eeschema/getpart.cpp b/eeschema/getpart.cpp index 5292c48de0..218dd55f6b 100644 --- a/eeschema/getpart.cpp +++ b/eeschema/getpart.cpp @@ -184,7 +184,7 @@ EDA_SchComponentStruct* WinEDA_SchematicFrame::Load_Component( wxDC* DC, DrawLibItem->m_Multi = 1;/* Selection de l'unite 1 dans le boitier */ DrawLibItem->m_Convert = 1; DrawLibItem->m_ChipName = Name; - DrawLibItem->m_TimeStamp = GetTimeStamp(); + DrawLibItem->m_TimeStamp = GetTimeStamp(); DrawLibItem->m_Flags = IS_NEW | IS_MOVED; /* Init champ Valeur */ @@ -203,8 +203,9 @@ EDA_SchComponentStruct* WinEDA_SchematicFrame::Load_Component( wxDC* DC, if( msg.IsEmpty() ) msg = wxT( "U" ); msg += wxT( "?" ); - //update the reference -- just the prefix for now. - DrawLibItem->SetRef(GetSheet(), msg ); + + //update the reference -- just the prefix for now. + DrawLibItem->SetRef(GetSheet(), msg ); /* Init champ Reference */ DrawLibItem->m_Field[REFERENCE].m_Pos.x = @@ -213,7 +214,7 @@ EDA_SchComponentStruct* WinEDA_SchematicFrame::Load_Component( wxDC* DC, Entry->m_Prefix.m_Pos.y + DrawLibItem->m_Pos.y; DrawLibItem->m_Field[REFERENCE].m_Orient = Entry->m_Prefix.m_Orient; DrawLibItem->m_Field[REFERENCE].m_Size = Entry->m_Prefix.m_Size; - DrawLibItem->m_PrefixString = Entry->m_Prefix.m_Text; + DrawLibItem->m_PrefixString = Entry->m_Prefix.m_Text; DrawLibItem->m_Field[REFERENCE].m_Attributs = Entry->m_Prefix.m_Attributs; DrawLibItem->m_Field[REFERENCE].m_HJustify = Entry->m_Prefix.m_HJustify; DrawLibItem->m_Field[REFERENCE].m_VJustify = Entry->m_Prefix.m_VJustify; @@ -239,8 +240,8 @@ EDA_SchComponentStruct* WinEDA_SchematicFrame::Load_Component( wxDC* DC, DrawLibItem->m_Field[ii].m_VJustify = Field->m_VJustify; } - /* Trace du composant */ DrawStructsInGhost( DrawPanel, DC, DrawLibItem, 0, 0 ); + MsgPanel->EraseMsgBox(); DrawLibItem->Display_Infos( this ); @@ -257,14 +258,16 @@ static void ShowWhileMoving( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) wxPoint move_vector; EDA_SchComponentStruct* DrawLibItem = (EDA_SchComponentStruct*) - panel->m_Parent->GetScreen()->GetCurItem(); + panel->m_Parent->GetScreen()->GetCurItem(); /* Effacement du composant */ if( erase ) + { DrawStructsInGhost( panel, DC, DrawLibItem, 0, 0 ); + } - move_vector.x = panel->m_Parent->GetScreen()->m_Curseur.x - DrawLibItem->m_Pos.x; - move_vector.y = panel->m_Parent->GetScreen()->m_Curseur.y - DrawLibItem->m_Pos.y; + move_vector.x = panel->m_Parent->GetScreen()->m_Curseur.x - DrawLibItem->m_Pos.x; + move_vector.y = panel->m_Parent->GetScreen()->m_Curseur.y - DrawLibItem->m_Pos.y; MoveOneStruct( DrawLibItem, move_vector ); DrawStructsInGhost( panel, DC, DrawLibItem, 0, 0 ); @@ -305,7 +308,7 @@ void WinEDA_SchematicFrame::CmpRotationMiroir( DrawPanel->CursorOn( DC ); } - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, DC ); GetScreen()->SetModify(); } @@ -318,18 +321,16 @@ static void ExitPlaceCmp( WinEDA_DrawPanel* Panel, wxDC* DC ) */ { EDA_SchComponentStruct* DrawLibItem = (EDA_SchComponentStruct*) - Panel->m_Parent->GetScreen()->GetCurItem(); + Panel->m_Parent->GetScreen()->GetCurItem(); if( DrawLibItem->m_Flags & IS_NEW ) /* Nouveau Placement en cours, on l'efface */ { - DrawStructsInGhost( Panel, DC, DrawLibItem, 0, 0 ); - DrawLibItem->m_Flags = 0; - SAFE_DELETE( DrawLibItem ); + DrawLibItem->m_Flags = 0; + SAFE_DELETE( DrawLibItem ); } else if( DrawLibItem ) /* Deplacement ancien composant en cours */ { wxPoint move_vector; - DrawStructsInGhost( Panel, DC, DrawLibItem, 0, 0 ); move_vector.x = OldPos.x - DrawLibItem->m_Pos.x; move_vector.y = OldPos.y - DrawLibItem->m_Pos.y; @@ -337,13 +338,16 @@ static void ExitPlaceCmp( WinEDA_DrawPanel* Panel, wxDC* DC ) MoveOneStruct( DrawLibItem, move_vector ); memcpy( DrawLibItem->m_Transform, OldTransMat, sizeof(OldTransMat) ); - DrawLibItem->Draw( Panel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); - DrawLibItem->m_Flags = 0; + + DrawLibItem->m_Flags = 0; } + D(printf("refresh\n");) + Panel->Refresh( TRUE ); + Panel->ManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL; - Panel->m_Parent->GetScreen()->SetCurItem( NULL ); + Panel->m_Parent->GetScreen()->SetCurItem( NULL ); } @@ -390,7 +394,7 @@ void WinEDA_SchematicFrame::SelPartUnit( EDA_SchComponentStruct* DrawComponent, else DrawComponent->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, DC ); GetScreen()->SetModify(); } @@ -431,7 +435,7 @@ void WinEDA_SchematicFrame::ConvertPart( EDA_SchComponentStruct* DrawComponent, else DrawComponent->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, DC ); GetScreen()->SetModify(); } @@ -477,24 +481,41 @@ void WinEDA_SchematicFrame::StartMovePart( EDA_SchComponentStruct* Component, if( Component->m_Flags == 0 ) { if( g_ItemToUndoCopy ){ - SAFE_DELETE( g_ItemToUndoCopy ); - } + SAFE_DELETE( g_ItemToUndoCopy ); + } g_ItemToUndoCopy = Component->GenCopy(); } DrawPanel->CursorOff( DC ); - GetScreen()->m_Curseur = Component->m_Pos; + GetScreen()->m_Curseur = Component->m_Pos; DrawPanel->MouseToCursorSchema(); DrawPanel->ManageCurseur = ShowWhileMoving; DrawPanel->ForceCloseManageCurseur = ExitPlaceCmp; - GetScreen()->SetCurItem( Component ); + GetScreen()->SetCurItem( Component ); OldPos = Component->m_Pos; memcpy( OldTransMat, Component->m_Transform, sizeof(OldTransMat) ); +#if 1 + // switch from normal mode to xor mode for the duration of the move, first + // by erasing fully any "normal drawing mode" primitives with the PostDirtyRect(), + // then by drawing the first time in xor mode so that subsequent xor + // drawing modes will fully erase this first copy. + + Component->m_Flags |= IS_MOVED; // omit redrawing the component, erase only + DrawPanel->PostDirtyRect( Component->GetBoundingBox() ); + + DrawStructsInGhost( DrawPanel, DC, Component, 0, 0 ); + +#else + RedrawOneStruct( DrawPanel, DC, Component, g_XorMode ); + Component->m_Flags |= IS_MOVED; + DrawPanel->ManageCurseur( DrawPanel, DC, FALSE ); +#endif + DrawPanel->m_AutoPAN_Request = TRUE; DrawPanel->CursorOn( DC ); diff --git a/eeschema/onleftclick.cpp b/eeschema/onleftclick.cpp index 527dc046e9..9b5acf8205 100644 --- a/eeschema/onleftclick.cpp +++ b/eeschema/onleftclick.cpp @@ -28,7 +28,7 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) * quand un outil est deja selectionn� */ { - EDA_BaseStruct* DrawStruct = GetScreen()->GetCurItem(); + EDA_BaseStruct* DrawStruct = GetScreen()->GetCurItem(); if( (m_ID_current_state == 0) || ( DrawStruct && DrawStruct->m_Flags ) ) { @@ -41,7 +41,7 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) { case DRAW_LABEL_STRUCT_TYPE: case DRAW_GLOBAL_LABEL_STRUCT_TYPE: - case DRAW_HIER_LABEL_STRUCT_TYPE: + case DRAW_HIER_LABEL_STRUCT_TYPE: case DRAW_TEXT_STRUCT_TYPE: case DRAW_SHEETLABEL_STRUCT_TYPE: case DRAW_SHEET_STRUCT_TYPE: @@ -50,8 +50,9 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) case DRAW_LIB_ITEM_STRUCT_TYPE: case DRAW_PART_TEXT_STRUCT_TYPE: DrawStruct->Place( this, DC ); - GetScreen()->SetCurItem( NULL ); - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + GetScreen()->SetCurItem( NULL ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); // don't draw here + DrawPanel->Refresh( TRUE ); return; case SCREEN_STRUCT_TYPE: @@ -101,7 +102,7 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) { g_ItemToRepeat = CreateNewNoConnectStruct( DC ); - GetScreen()->SetCurItem( g_ItemToRepeat ); + GetScreen()->SetCurItem( g_ItemToRepeat ); DrawPanel->m_AutoPAN_Request = TRUE; } else @@ -109,14 +110,15 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) DrawStruct->Place( this, DC ); DrawPanel->m_AutoPAN_Request = FALSE; } - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); break; case ID_JUNCTION_BUTT: if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) { - g_ItemToRepeat = CreateNewJunctionStruct( DC, GetScreen()->m_Curseur, TRUE ); - GetScreen()->SetCurItem( g_ItemToRepeat ); + g_ItemToRepeat = CreateNewJunctionStruct( DC, GetScreen()->m_Curseur, TRUE ); + GetScreen()->SetCurItem( g_ItemToRepeat ); DrawPanel->m_AutoPAN_Request = TRUE; } else @@ -124,7 +126,8 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) DrawStruct->Place( this, DC ); DrawPanel->m_AutoPAN_Request = FALSE; } - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); break; case ID_WIRETOBUS_ENTRY_BUTT: @@ -135,23 +138,25 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) CreateBusEntry( DC, (m_ID_current_state == ID_WIRETOBUS_ENTRY_BUTT) ? WIRE_TO_BUS : BUS_TO_BUS ); - GetScreen()->SetCurItem( DrawStruct ); + GetScreen()->SetCurItem( DrawStruct ); DrawPanel->m_AutoPAN_Request = TRUE; } else { DrawStruct->Place( this, DC ); - GetScreen()->SetCurItem( NULL ); - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + GetScreen()->SetCurItem( NULL ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); DrawPanel->m_AutoPAN_Request = FALSE; } break; case ID_SCHEMATIC_DELETE_ITEM_BUTT: LocateAndDeleteItem( this, DC ); - GetScreen()->SetModify(); - GetScreen()->SetCurItem( NULL ); - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + GetScreen()->SetModify(); + GetScreen()->SetCurItem( NULL ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); break; case ID_WIRE_BUTT: @@ -172,7 +177,7 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) case ID_TEXT_COMMENT_BUTT: if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) { - GetScreen()->SetCurItem( CreateNewText( DC, LAYER_NOTES ) ); + GetScreen()->SetCurItem( CreateNewText( DC, LAYER_NOTES ) ); DrawPanel->m_AutoPAN_Request = TRUE; } else @@ -185,59 +190,63 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) case ID_LABEL_BUTT: if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) { - GetScreen()->SetCurItem( CreateNewText( DC, LAYER_LOCLABEL ) ); + GetScreen()->SetCurItem( CreateNewText( DC, LAYER_LOCLABEL ) ); DrawPanel->m_AutoPAN_Request = TRUE; } else { DrawStruct->Place( this, DC ); DrawPanel->m_AutoPAN_Request = FALSE; - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); } break; case ID_GLABEL_BUTT: - case ID_HIERLABEL_BUTT: + case ID_HIERLABEL_BUTT: if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) { - if(m_ID_current_state == ID_GLABEL_BUTT) - GetScreen()->SetCurItem( CreateNewText( DC, LAYER_GLOBLABEL ) ); - if(m_ID_current_state == ID_HIERLABEL_BUTT) - GetScreen()->SetCurItem( CreateNewText( DC, LAYER_HIERLABEL ) ); + if(m_ID_current_state == ID_GLABEL_BUTT) + GetScreen()->SetCurItem( CreateNewText( DC, LAYER_GLOBLABEL ) ); + if(m_ID_current_state == ID_HIERLABEL_BUTT) + GetScreen()->SetCurItem( CreateNewText( DC, LAYER_HIERLABEL ) ); DrawPanel->m_AutoPAN_Request = TRUE; } else { DrawStruct->Place( this, DC ); DrawPanel->m_AutoPAN_Request = FALSE; - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); + } + break; + + if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) + { + GetScreen()->SetCurItem( CreateNewText( DC, LAYER_HIERLABEL ) ); + DrawPanel->m_AutoPAN_Request = TRUE; + } + else + { + DrawStruct->Place( this, DC ); + DrawPanel->m_AutoPAN_Request = FALSE; + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); } break; - - if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) - { - GetScreen()->SetCurItem( CreateNewText( DC, LAYER_HIERLABEL ) ); - DrawPanel->m_AutoPAN_Request = TRUE; - } - else - { - DrawStruct->Place( this, DC ); - DrawPanel->m_AutoPAN_Request = FALSE; - TestDanglingEnds( GetScreen()->EEDrawList, DC ); - } - break; case ID_SHEET_SYMBOL_BUTT: if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) { - GetScreen()->SetCurItem( CreateSheet( DC ) ); + GetScreen()->SetCurItem( CreateSheet( DC ) ); DrawPanel->m_AutoPAN_Request = TRUE; } else { DrawStruct->Place( this, DC ); DrawPanel->m_AutoPAN_Request = FALSE; - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); } break; @@ -253,24 +262,25 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) && (DrawStruct->m_Flags == 0) ) { if( m_ID_current_state == ID_IMPORT_GLABEL_BUTT ) - GetScreen()->SetCurItem( + GetScreen()->SetCurItem( Import_PinSheet( (DrawSheetStruct*) DrawStruct, DC ) ); else - GetScreen()->SetCurItem( + GetScreen()->SetCurItem( Create_PinSheet( (DrawSheetStruct*) DrawStruct, DC ) ); } else if( (DrawStruct->Type() == DRAW_SHEETLABEL_STRUCT_TYPE) && (DrawStruct->m_Flags != 0) ) { DrawStruct->Place( this, DC ); - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); } break; case ID_COMPONENT_BUTT: if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) { - GetScreen()->SetCurItem( Load_Component( DC, wxEmptyString, + GetScreen()->SetCurItem( Load_Component( DC, wxEmptyString, s_CmpNameList, TRUE ) ); DrawPanel->m_AutoPAN_Request = TRUE; } @@ -278,14 +288,15 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) { DrawStruct->Place( this, DC ); DrawPanel->m_AutoPAN_Request = FALSE; - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); } break; case ID_PLACE_POWER_BUTT: if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) { - GetScreen()->SetCurItem( + GetScreen()->SetCurItem( Load_Component( DC, wxT( "power" ), s_PowerNameList, FALSE ) ); DrawPanel->m_AutoPAN_Request = TRUE; } @@ -293,7 +304,8 @@ void WinEDA_SchematicFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) { DrawStruct->Place( this, DC ); DrawPanel->m_AutoPAN_Request = FALSE; - TestDanglingEnds( GetScreen()->EEDrawList, DC ); + TestDanglingEnds( GetScreen()->EEDrawList, NULL ); + DrawPanel->Refresh( TRUE ); } break; @@ -321,7 +333,7 @@ void WinEDA_SchematicFrame::OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) * termine la connexion */ { - EDA_BaseStruct* DrawStruct = GetScreen()->GetCurItem(); + EDA_BaseStruct* DrawStruct = GetScreen()->GetCurItem(); wxPoint pos = GetPosition(); switch( m_ID_current_state ) @@ -350,7 +362,7 @@ void WinEDA_SchematicFrame::OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) case DRAW_TEXT_STRUCT_TYPE: case DRAW_LABEL_STRUCT_TYPE: case DRAW_GLOBAL_LABEL_STRUCT_TYPE: - case DRAW_HIER_LABEL_STRUCT_TYPE: + case DRAW_HIER_LABEL_STRUCT_TYPE: EditSchematicText( (DrawTextStruct*) DrawStruct, DC ); break; diff --git a/include/base_struct.h b/include/base_struct.h index fa46858aef..1705644412 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -200,7 +200,7 @@ public: * mainly used to calculate bounding boxes * @param aRect = given rect to merge with this */ - void Merge( EDA_Rect & aRect ); + void Merge( const EDA_Rect & aRect ); };