From c13cdb0964226d115244a68dd23291f53526ae85 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Mon, 1 Sep 2014 13:48:51 +0200 Subject: [PATCH] Fixed line width settings in the module editor (GAL). --- pcbnew/tools/drawing_tool.cpp | 71 +++++++++++++++++++++++------------ pcbnew/tools/drawing_tool.h | 6 +++ 2 files changed, 53 insertions(+), 24 deletions(-) diff --git a/pcbnew/tools/drawing_tool.cpp b/pcbnew/tools/drawing_tool.cpp index 56313dd8a6..2fab15c7d7 100644 --- a/pcbnew/tools/drawing_tool.cpp +++ b/pcbnew/tools/drawing_tool.cpp @@ -289,19 +289,23 @@ int DRAWING_TOOL::DrawDimension( TOOL_EVENT& aEvent ) break; } - else if( evt->IsKeyPressed() && step != SET_ORIGIN ) + else if( evt->IsAction( &COMMON_ACTIONS::incWidth ) && step != SET_ORIGIN ) { - width = dimension->GetWidth(); - - // Modify the new item width - if( evt->KeyCode() == '-' && width > WIDTH_STEP ) - dimension->SetWidth( width - WIDTH_STEP ); - else if( evt->KeyCode() == '=' ) - dimension->SetWidth( width + WIDTH_STEP ); - + dimension->SetWidth( dimension->GetWidth() + WIDTH_STEP ); preview.ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); } + else if( evt->IsAction( &COMMON_ACTIONS::decWidth ) && step != SET_ORIGIN ) + { + int width = dimension->GetWidth(); + + if( width > WIDTH_STEP ) + { + dimension->SetWidth( width - WIDTH_STEP ); + preview.ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); + } + } + else if( evt->IsClick( BUT_LEFT ) ) { switch( step ) @@ -465,17 +469,21 @@ int DRAWING_TOOL::PlaceTarget( TOOL_EVENT& aEvent ) if( evt->IsCancel() || evt->IsActivate() ) break; - else if( evt->IsKeyPressed() ) + else if( evt->IsAction( &COMMON_ACTIONS::incWidth ) ) + { + target->SetWidth( target->GetWidth() + WIDTH_STEP ); + preview.ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); + } + + else if( evt->IsAction( &COMMON_ACTIONS::decWidth ) ) { int width = target->GetWidth(); - // Modify the new item width - if( evt->KeyCode() == '-' && width > WIDTH_STEP ) + if( width > WIDTH_STEP ) + { target->SetWidth( width - WIDTH_STEP ); - else if( evt->KeyCode() == '=' ) - target->SetWidth( width + WIDTH_STEP ); - - preview.ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); + preview.ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); + } } else if( evt->IsClick( BUT_LEFT ) ) @@ -893,7 +901,7 @@ bool DRAWING_TOOL::drawSegment( int aShape, DRAWSEGMENT*& aGraphic, // Init the new item attributes aGraphic->SetShape( (STROKE_T) aShape ); - aGraphic->SetWidth( m_board->GetDesignSettings().m_DrawSegmentWidth ); + aGraphic->SetWidth( lineWidth ); aGraphic->SetStart( wxPoint( aStartingPoint->x, aStartingPoint->y ) ); aGraphic->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) ); aGraphic->SetLayer( layer ); @@ -955,7 +963,8 @@ bool DRAWING_TOOL::drawSegment( int aShape, DRAWSEGMENT*& aGraphic, { // Init the new item attributes aGraphic->SetShape( (STROKE_T) aShape ); - aGraphic->SetWidth( m_board->GetDesignSettings().m_DrawSegmentWidth ); + lineWidth = getSegmentWidth( layer ); + aGraphic->SetWidth( lineWidth ); aGraphic->SetStart( wxPoint( cursorPos.x, cursorPos.y ) ); aGraphic->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) ); aGraphic->SetLayer( layer ); @@ -1003,17 +1012,17 @@ bool DRAWING_TOOL::drawSegment( int aShape, DRAWSEGMENT*& aGraphic, else if( evt->IsAction( &COMMON_ACTIONS::incWidth ) ) { - aGraphic->SetWidth( aGraphic->GetWidth() + WIDTH_STEP ); + lineWidth += WIDTH_STEP; + aGraphic->SetWidth( lineWidth ); updatePreview = true; } else if( evt->IsAction( &COMMON_ACTIONS::decWidth ) ) { - int width = aGraphic->GetWidth(); - - if( width > WIDTH_STEP ) + if( lineWidth > WIDTH_STEP ) { - aGraphic->SetWidth( width - WIDTH_STEP ); + lineWidth -= WIDTH_STEP; + aGraphic->SetWidth( lineWidth ); updatePreview = true; } } @@ -1093,7 +1102,7 @@ bool DRAWING_TOOL::drawArc( DRAWSEGMENT*& aGraphic ) // Init the new item attributes aGraphic->SetShape( S_ARC ); aGraphic->SetAngle( 0.0 ); - aGraphic->SetWidth( m_board->GetDesignSettings().m_DrawSegmentWidth ); + aGraphic->SetWidth( getSegmentWidth( layer ) ); aGraphic->SetCenter( wxPoint( cursorPos.x, cursorPos.y ) ); aGraphic->SetLayer( layer ); @@ -1685,3 +1694,17 @@ void DRAWING_TOOL::setTransitions() Go( &DRAWING_TOOL::PlaceDXF, COMMON_ACTIONS::placeDXF.MakeEvent() ); Go( &DRAWING_TOOL::SetAnchor, COMMON_ACTIONS::setAnchor.MakeEvent() ); } + + +int DRAWING_TOOL::getSegmentWidth( unsigned int aLayer ) const +{ + assert( m_board ); + + if( aLayer == Edge_Cuts ) + return m_board->GetDesignSettings().m_EdgeSegmentWidth; + else if( m_editModules ) + return m_board->GetDesignSettings().m_ModuleSegmentWidth; + else + return m_board->GetDesignSettings().m_DrawSegmentWidth; +} + diff --git a/pcbnew/tools/drawing_tool.h b/pcbnew/tools/drawing_tool.h index 178d751a8f..a417594fa6 100644 --- a/pcbnew/tools/drawing_tool.h +++ b/pcbnew/tools/drawing_tool.h @@ -191,6 +191,9 @@ private: ///> Sets up handlers for various events. void setTransitions(); + ///> Returns the appropriate width for a segment depending on the settings. + int getSegmentWidth( unsigned int aLayer ) const; + KIGFX::VIEW* m_view; KIGFX::VIEW_CONTROLS* m_controls; BOARD* m_board; @@ -199,6 +202,9 @@ private: /// Edit module mode flag bool m_editModules; + /// Stores the current line width for multisegment drawing. + unsigned int lineWidth; + // How does line width change after one -/+ key press. static const int WIDTH_STEP = 100000; };