From b579262869791d894b49f40d631d6a6c3741735c Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Mon, 16 Sep 2013 11:00:59 +0200 Subject: [PATCH] Better way of marking 'brightened' mode for items. --- common/painter.cpp | 22 ---------------------- common/view/view.cpp | 6 ------ include/base_struct.h | 4 ++-- include/painter.h | 7 ------- pcbnew/CMakeLists.txt | 1 + pcbnew/tools/selection_tool.cpp | 20 +++++++++++++++----- 6 files changed, 18 insertions(+), 42 deletions(-) diff --git a/common/painter.cpp b/common/painter.cpp index ddff0c9820..b6181c4210 100644 --- a/common/painter.cpp +++ b/common/painter.cpp @@ -79,25 +79,3 @@ void PAINTER::SetGAL( GAL* aGal ) { m_gal = aGal; } - - -void PAINTER::DrawBrightened( const VIEW_ITEM* aItem ) -{ - BOX2I box = aItem->ViewBBox(); - - RenderTarget oldTarget = m_gal->GetTarget(); - m_gal->SetTarget( TARGET_OVERLAY ); - - m_gal->PushDepth(); - m_gal->SetLayerDepth( -1.0 ); - - // Draw an outline that marks items as brightened - m_gal->SetIsStroke( true ); - m_gal->SetLineWidth( 100000.0 ); - m_gal->SetStrokeColor( m_brightenedColor ); - - m_gal->DrawRectangle( box.GetOrigin(), box.GetOrigin() + box.GetSize() ); - m_gal->PopDepth(); - - m_gal->SetTarget( oldTarget ); -} diff --git a/common/view/view.cpp b/common/view/view.cpp index 4409806c3c..1aa45473d2 100644 --- a/common/view/view.cpp +++ b/common/view/view.cpp @@ -596,12 +596,6 @@ void VIEW::draw( VIEW_ITEM* aItem, int aLayer, bool aImmediate ) const if( !m_painter->Draw( aItem, aLayer ) ) aItem->ViewDraw( aLayer, m_gal ); // Alternative drawing method } - - // Draws a bright contour around the item - if( static_cast( aItem )->IsBrightened() ) - { - m_painter->DrawBrightened( aItem ); - } } diff --git a/include/base_struct.h b/include/base_struct.h index b61368e0d1..5843fc52fd 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -474,11 +474,11 @@ public: inline void SetSelected() { SetFlags( SELECTED ); ViewUpdate( COLOR ); } inline void SetHighlighted() { SetFlags( HIGHLIGHTED ); ViewUpdate( COLOR ); } - inline void SetBrightened() { SetFlags( BRIGHTENED ); ViewUpdate( COLOR ); } + inline void SetBrightened() { SetFlags( BRIGHTENED ); } inline void ClearSelected() { ClearFlags( SELECTED ); ViewUpdate( COLOR ); } inline void ClearHighlighted() { ClearFlags( HIGHLIGHTED ); ViewUpdate( COLOR ); } - inline void ClearBrightened() { ClearFlags( BRIGHTENED ); ViewUpdate( COLOR ); } + inline void ClearBrightened() { ClearFlags( BRIGHTENED ); } void SetModified(); diff --git a/include/painter.h b/include/painter.h index 1cbd2df94b..43b0363c2b 100644 --- a/include/painter.h +++ b/include/painter.h @@ -224,13 +224,6 @@ public: */ virtual bool Draw( const VIEW_ITEM* aItem, int aLayer ) = 0; - /** - * Function DrawBrightened - * Draws a special marking for the item. - * @param aItem is the item that is going to be marked. - */ - virtual void DrawBrightened( const VIEW_ITEM* aItem ); - protected: /// Instance of graphic abstraction layer that gives an interface to call /// commands used to draw (eg. DrawLine, DrawCircle, etc.) diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 02c943d0d9..bce6beeaa3 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -221,6 +221,7 @@ set(PCBNEW_CLASS_SRCS tools/selection_tool.cpp tools/selection_area.cpp + tools/bright_box.cpp tools/move_tool.cpp tools/pcb_tools.cpp ) diff --git a/pcbnew/tools/selection_tool.cpp b/pcbnew/tools/selection_tool.cpp index d9045a3b02..b64eebbe00 100644 --- a/pcbnew/tools/selection_tool.cpp +++ b/pcbnew/tools/selection_tool.cpp @@ -41,6 +41,7 @@ #include "selection_tool.h" #include "selection_area.h" +#include "bright_box.h" using namespace KiGfx; using boost::optional; @@ -334,8 +335,8 @@ bool SELECTION_TOOL::selectMultiple() BOARD_ITEM* SELECTION_TOOL::disambiguationMenu( GENERAL_COLLECTOR* aCollector ) { - OPT_TOOL_EVENT evt; BOARD_ITEM* current = NULL; + boost::shared_ptr brightBox; m_menu.reset( new CONTEXT_MENU() ); m_menu->SetTitle( _( "Clarify selection" ) ); @@ -352,10 +353,13 @@ BOARD_ITEM* SELECTION_TOOL::disambiguationMenu( GENERAL_COLLECTOR* aCollector ) SetContextMenu( m_menu.get(), CMENU_NOW ); - while( evt = Wait() ) + while( OPT_TOOL_EVENT evt = Wait() ) { + wxLogDebug( wxT( "disambiguation menu event") ); + if( evt->Action() == TA_ContextMenuUpdate ) { + // User has pointed an item, so show it in a different way if( current ) current->ClearBrightened(); @@ -380,14 +384,20 @@ BOARD_ITEM* SELECTION_TOOL::disambiguationMenu( GENERAL_COLLECTOR* aCollector ) { current = ( *aCollector )[*id]; current->SetSelected(); - return current; } - return NULL; + break; + } + + if( current && current->IsBrightened() ) + { + brightBox.reset( new BRIGHT_BOX( current ) ); + getView()->Add( brightBox.get() ); } } - return NULL; + getView()->MarkTargetDirty( TARGET_OVERLAY ); + return current; }