Better way of marking 'brightened' mode for items.

This commit is contained in:
Maciej Suminski 2013-09-16 11:00:59 +02:00
parent 86f520f76e
commit 573f9841df
6 changed files with 18 additions and 42 deletions

View File

@ -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 );
}

View File

@ -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<const EDA_ITEM*>( aItem )->IsBrightened() )
{
m_painter->DrawBrightened( aItem );
}
}

View File

@ -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();

View File

@ -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.)

View File

@ -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
)

View File

@ -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<BRIGHT_BOX> 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;
}