KiCad PCB EDA Suite
selection_area.cpp
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2013 CERN
5  * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
26 
28 #include <painter.h>
29 #include <view/view.h>
30 
31 using namespace KIGFX::PREVIEW;
32 
34 {
41 };
42 
44  { // dark background
45  COLOR4D( 0.3, 0.3, 0.7, 0.3 ), // Slight blue
46  COLOR4D( 0.3, 0.7, 0.3, 0.3 ), // Slight green
47  COLOR4D( 0.7, 0.3, 0.3, 0.3 ), // Slight red
48  COLOR4D( 0.7, 0.3, 0.3, 0.3 ), // Slight red
49 
50  COLOR4D( 1.0, 1.0, 0.4, 1.0 ), // yellow
51  COLOR4D( 0.4, 0.4, 1.0, 1.0 ) // blue
52  },
53  { // bright background
54  COLOR4D( 0.5, 0.3, 1.0, 0.5 ), // Slight blue
55  COLOR4D( 0.5, 1.0, 0.5, 0.5 ), // Slight green
56  COLOR4D( 1.0, 0.5, 0.5, 0.5 ), // Slight red
57  COLOR4D( 1.0, 0.5, 0.5, 0.5 ), // Slight red
58 
59  COLOR4D( 0.7, 0.7, 0.0, 1.0 ), // yellow
60  COLOR4D( 0.1, 0.1, 1.0, 1.0 ) // blue
61  }
62 };
63 
64 
66  m_additive( false ),
67  m_subtractive( false ),
68  m_exclusiveOr( false )
69 {
70 
71 }
72 
73 
75 {
76  BOX2I tmp;
77 
78  tmp.SetOrigin( m_origin );
79  tmp.SetEnd( m_end );
80  tmp.Normalize();
81  return tmp;
82 }
83 
84 
85 void SELECTION_AREA::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
86 {
87  KIGFX::GAL& gal = *aView->GetGAL();
88  RENDER_SETTINGS* settings = aView->GetPainter()->GetSettings();
89 
90  const SELECTION_COLORS& scheme = settings->IsBackgroundDark() ? selectionColorScheme[0]
92 
93  // Set the fill of the selection rectangle
94  // based on the selection mode
95  if( m_additive )
96  gal.SetFillColor( scheme.additive );
97  else if( m_subtractive )
98  gal.SetFillColor( scheme.subtract );
99  else if( m_exclusiveOr )
100  gal.SetFillColor( scheme.exclusiveOr );
101  else
102  gal.SetFillColor( scheme.normal );
103 
104  gal.SetIsStroke( true );
105  gal.SetIsFill( true );
106 
107  // force 1-pixel-wide line
108  gal.SetLineWidth( 0.0 );
109 
110  // Set the stroke color to indicate window or crossing selection
111  bool windowSelection = ( m_origin.x <= m_end.x ) ? true : false;
112 
113  if( aView->IsMirroredX() )
114  windowSelection = !windowSelection;
115 
116  gal.SetStrokeColor( windowSelection ? scheme.outline_l2r : scheme.outline_r2l );
117  gal.SetIsFill( false );
118  gal.DrawRectangle( m_origin, m_end );
119  gal.SetIsFill( true );
120  // draw the fill as the second object so that Z test will not clamp
121  // the single-pixel-wide rectangle sides
122  gal.DrawRectangle( m_origin, m_end );
123 }
virtual void SetFillColor(const COLOR4D &aColor)
Set the fill color.
virtual void DrawRectangle(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint)
Draw a rectangle.
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
Definition: view.h:189
virtual bool IsBackgroundDark() const
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:207
virtual void SetLineWidth(float aLineWidth)
Set the line width.
static const SELECTION_COLORS selectionColorScheme[2]
virtual void SetIsFill(bool aIsFillEnabled)
Enable/disable fill.
BOX2< Vec > & Normalize()
Function Normalize ensures that the height ant width are positive.
Definition: box2.h:129
const BOX2I ViewBBox() const override
Set the origin of the rectangle (the fixed corner)
bool IsMirroredX() const
Return true if view is flipped across the X axis.
Definition: view.h:237
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:225
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
virtual void SetStrokeColor(const COLOR4D &aColor)
Set the stroke color.
void SetOrigin(const Vec &pos)
Definition: box2.h:210
void ViewDraw(int aLayer, KIGFX::VIEW *aView) const override final
Draw the parts of the object belonging to layer aLayer.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition: view.h:67
virtual void SetIsStroke(bool aIsStrokeEnabled)
Enable/disable stroked outlines.
Abstract interface for drawing on a 2D-surface.
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:98