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  auto& gal = *aView->GetGAL();
88  auto rs = aView->GetPainter()->GetSettings();
89 
90  const auto& scheme = rs->IsBackgroundDark() ? selectionColorScheme[0] : selectionColorScheme[1];
91 
92  // Set the fill of the selection rectangle
93  // based on the selection mode
94  if( m_additive )
95  gal.SetFillColor( scheme.additive );
96  else if( m_subtractive )
97  gal.SetFillColor( scheme.subtract );
98  else if( m_exclusiveOr )
99  gal.SetFillColor( scheme.exclusiveOr );
100  else
101  gal.SetFillColor( scheme.normal );
102 
103  gal.SetIsStroke( true );
104  gal.SetIsFill( true );
105 
106  // force 1-pixel-wide line
107  gal.SetLineWidth( 0.0 );
108 
109  // Set the stroke color to indicate window or crossing selection
110  bool windowSelection = ( m_origin.x <= m_end.x ) ? true : false;
111 
112  if( aView->IsMirroredX() )
113  windowSelection = !windowSelection;
114 
115  gal.SetStrokeColor( windowSelection ? scheme.outline_l2r : scheme.outline_r2l );
116  gal.SetIsFill( false );
117  gal.DrawRectangle( m_origin, m_end );
118  gal.SetIsFill( true );
119  // draw the fill as the second object so that Z test will not clamp
120  // the single-pixel-wide rectangle sides
121  gal.DrawRectangle( m_origin, m_end );
122 }
GAL * GetGAL() const
Function GetGAL() Returns the GAL this view is using to draw graphical primitives.
Definition: view.h:180
virtual bool IsBackgroundDark() const
Definition: painter.h:239
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:199
static const SELECTION_COLORS selectionColorScheme[2]
BOX2< Vec > & Normalize()
Function Normalize ensures that the height ant width are positive.
Definition: box2.h:127
const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers.
bool IsMirroredX() const
Function IsMirroredX() Returns true if view is flipped across the X axis.
Definition: view.h:230
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:223
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
void SetOrigin(const Vec &pos)
Definition: box2.h:208
void ViewDraw(int aLayer, KIGFX::VIEW *aView) const override final
Function ViewDraw() Draws the parts of the object belonging to layer aLayer.
Class VIEW.
Definition: view.h:61
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39