KiCad PCB EDA Suite
view.h
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-2016 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 
25 #ifndef __VIEW_H
26 #define __VIEW_H
27 
28 #include <vector>
29 #include <set>
30 #include <unordered_map>
31 #include <memory>
32 
33 #include <math/box2.h>
34 #include <gal/definitions.h>
35 
36 #include <view/view_overlay.h>
37 
38 namespace KIGFX
39 {
40 class PAINTER;
41 class GAL;
42 class VIEW_ITEM;
43 class VIEW_GROUP;
44 class VIEW_RTREE;
45 
61 class VIEW
62 {
63 public:
64  friend class VIEW_ITEM;
65 
66  typedef std::pair<VIEW_ITEM*, int> LAYER_ITEM_PAIR;
67 
72  VIEW( bool aIsDynamic = true );
73 
74  virtual ~VIEW();
75 
76  // nasty hack, invoked by the destructor of VIEW_ITEM to auto-remove the item
77  // from the owning VIEW if there is any. Kicad relies too much on this mechanism.
78  // this is the only linking dependency now between EDA_ITEM and VIEW class. In near future
79  // I'll replace it with observers.
80  static void OnDestroy( VIEW_ITEM* aItem );
81 
89  virtual void Add( VIEW_ITEM* aItem, int aDrawPriority = -1 );
90 
96  virtual void Remove( VIEW_ITEM* aItem );
97 
98 
108  virtual int Query( const BOX2I& aRect, std::vector<LAYER_ITEM_PAIR>& aResult ) const;
109 
116  void SetVisible( VIEW_ITEM* aItem, bool aIsVisible = true );
117 
124  void Hide( VIEW_ITEM* aItem, bool aHide = true );
125 
133  bool IsVisible( const VIEW_ITEM* aItem ) const;
134 
142  virtual void Update( VIEW_ITEM* aItem, int aUpdateFlags );
143  virtual void Update( VIEW_ITEM* aItem );
144 
153  void SetRequired( int aLayerId, int aRequiredId, bool aRequired = true );
154 
160  void CopySettings( const VIEW* aOtherView );
161 
162  /*
163  * Convenience wrappers for adding multiple items
164  * template <class T> void AddItems( const T& aItems );
165  * template <class T> void RemoveItems( const T& aItems );
166  */
167 
173  void SetGAL( GAL* aGal );
174 
180  inline GAL* GetGAL() const
181  {
182  return m_gal;
183  }
184 
189  inline void SetPainter( PAINTER* aPainter )
190  {
191  m_painter = aPainter;
192  }
193 
199  inline PAINTER* GetPainter() const
200  {
201  return m_painter;
202  }
203 
209  void SetViewport( const BOX2D& aViewport );
210 
216  BOX2D GetViewport() const;
217 
224  void SetMirror( bool aMirrorX, bool aMirrorY );
225 
230  bool IsMirroredX() const
231  {
232  return m_mirrorX;
233  }
234 
239  bool IsMirroredY() const
240  {
241  return m_mirrorY;
242  }
243 
251  virtual void SetScale( double aScale, VECTOR2D aAnchor = { 0, 0 } );
252 
257  inline double GetScale() const
258  {
259  return m_scale;
260  }
261 
267  inline void SetBoundary( const BOX2D& aBoundary )
268  {
269  m_boundary = aBoundary;
270  }
271 
277  inline void SetBoundary( const BOX2I& aBoundary )
278  {
279  m_boundary.SetOrigin( aBoundary.GetOrigin() );
280  m_boundary.SetEnd( aBoundary.GetEnd() );
281  }
282 
287  inline const BOX2D& GetBoundary() const
288  {
289  return m_boundary;
290  }
291 
298  void SetScaleLimits( double aMaximum, double aMinimum )
299  {
300  wxASSERT_MSG( aMaximum > aMinimum, wxT( "I guess you passed parameters in wrong order" ) );
301 
302  m_minScale = aMinimum;
303  m_maxScale = aMaximum;
304  }
305 
312  void SetCenter( const VECTOR2D& aCenter );
313 
321  void SetCenter( VECTOR2D aCenter, const BOX2D& occultingScreenRect );
322 
328  const VECTOR2D& GetCenter() const
329  {
330  return m_center;
331  }
332 
339  VECTOR2D ToWorld( const VECTOR2D& aCoord, bool aAbsolute = true ) const;
340 
347  double ToWorld( double aSize ) const;
348 
355  VECTOR2D ToScreen( const VECTOR2D& aCoord, bool aAbsolute = true ) const;
356 
362  double ToScreen( double aSize ) const;
363 
369  const VECTOR2I& GetScreenPixelSize() const;
370 
378  void AddLayer( int aLayer, bool aDisplayOnly = false );
379 
385  void ClearLayer( int aLayer );
386 
391  void Clear();
392 
399  inline void SetLayerVisible( int aLayer, bool aVisible = true )
400  {
401  wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
402 
403  if( m_layers[aLayer].visible != aVisible )
404  {
405  // Target has to be redrawn after changing its visibility
406  MarkTargetDirty( m_layers[aLayer].target );
407  m_layers[aLayer].visible = aVisible;
408  }
409  }
410 
416  inline bool IsLayerVisible( int aLayer ) const
417  {
418  wxCHECK( aLayer < (int) m_layers.size(), false );
419  return m_layers.at( aLayer ).visible;
420  }
421 
422  inline void SetLayerDisplayOnly( int aLayer, bool aDisplayOnly = true )
423  {
424  wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
425  m_layers[aLayer].displayOnly = aDisplayOnly;
426  }
427 
434  inline void SetLayerTarget( int aLayer, RENDER_TARGET aTarget )
435  {
436  wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
437  m_layers[aLayer].target = aTarget;
438  }
439 
446  void SetLayerOrder( int aLayer, int aRenderingOrder );
447 
454  int GetLayerOrder( int aLayer ) const;
455 
464  void SortLayers( int aLayers[], int& aCount ) const;
465 
473  void ReorderLayerData( std::unordered_map<int, int> aReorderMap );
474 
481  void UpdateLayerColor( int aLayer );
482 
488  void UpdateAllLayersColor();
489 
497  virtual void SetTopLayer( int aLayer, bool aEnabled = true );
498 
506  virtual void EnableTopLayer( bool aEnable );
507 
508  virtual int GetTopLayer() const;
509 
515  void ClearTopLayers();
516 
522  void UpdateAllLayersOrder();
523 
528  void ClearTargets();
529 
534  virtual void Redraw();
535 
540  void RecacheAllItems();
541 
547  bool IsDynamic() const
548  {
549  return m_dynamic;
550  }
551 
557  bool IsDirty() const
558  {
559  for( int i = 0; i < TARGETS_NUMBER; ++i )
560  {
561  if( IsTargetDirty( i ) )
562  return true;
563  }
564 
565  return false;
566  }
567 
574  bool IsTargetDirty( int aTarget ) const
575  {
576  wxCHECK( aTarget < TARGETS_NUMBER, false );
577  return m_dirtyTargets[aTarget];
578  }
579 
585  inline void MarkTargetDirty( int aTarget )
586  {
587  wxCHECK( aTarget < TARGETS_NUMBER, /* void */ );
588  m_dirtyTargets[aTarget] = true;
589  }
590 
592  inline bool IsCached( int aLayer ) const
593  {
594  wxCHECK( aLayer < (int) m_layers.size(), false );
595 
596  try
597  {
598  return m_layers.at( aLayer ).target == TARGET_CACHED;
599  }
600  catch( const std::out_of_range& )
601  {
602  return false;
603  }
604  }
605 
610  void MarkDirty()
611  {
612  for( int i = 0; i < TARGETS_NUMBER; ++i )
613  m_dirtyTargets[i] = true;
614  }
615 
621  void MarkForUpdate( VIEW_ITEM* aItem );
622 
627  void UpdateItems();
628 
633  void UpdateAllItems( int aUpdateFlags );
634 
640  void UpdateAllItemsConditionally( int aUpdateFlags,
641  std::function<bool( VIEW_ITEM* )> aCondition );
642 
647  bool IsUsingDrawPriority() const
648  {
649  return m_useDrawPriority;
650  }
651 
656  void UseDrawPriority( bool aFlag )
657  {
658  m_useDrawPriority = aFlag;
659  }
660 
665  bool IsDrawOrderReversed() const
666  {
667  return m_reverseDrawOrder;
668  }
669 
675  void ReverseDrawOrder( bool aFlag )
676  {
677  m_reverseDrawOrder = aFlag;
678  }
679 
680  std::shared_ptr<VIEW_OVERLAY> MakeOverlay();
681 
686  std::unique_ptr<VIEW> DataReference() const;
687 
692  int GetPrintMode() { return m_printMode; }
693 
699  void SetPrintMode( int aPrintMode ) { m_printMode = aPrintMode; }
700 
701  static constexpr int VIEW_MAX_LAYERS = 512;
702 
703 protected:
704  struct VIEW_LAYER
705  {
706  bool visible;
707  bool displayOnly;
708  std::shared_ptr<VIEW_RTREE> items;
710  int id;
712  std::set<int> requiredLayers;
713  };
714 
715  // Convenience typedefs
716  typedef std::unordered_map<int, VIEW_LAYER> LAYER_MAP;
717  typedef LAYER_MAP::iterator LAYER_MAP_ITER;
718  typedef std::vector<VIEW_LAYER*> LAYER_ORDER;
719  typedef std::vector<VIEW_LAYER*>::iterator LAYER_ORDER_ITER;
720 
721  // Function objects that need to access VIEW/VIEW_ITEM private/protected members
722  struct clearLayerCache;
723  struct recacheItem;
724  struct drawItem;
725  struct unlinkItem;
726  struct updateItemsColor;
727  struct changeItemsDepth;
728  struct extentsVisitor;
729 
730 
732  void redrawRect( const BOX2I& aRect );
733 
734  inline void markTargetClean( int aTarget )
735  {
736  wxCHECK( aTarget < TARGETS_NUMBER, /* void */ );
737  m_dirtyTargets[aTarget] = false;
738  }
739 
750  void draw( VIEW_ITEM* aItem, int aLayer, bool aImmediate = false );
751 
760  void draw( VIEW_ITEM* aItem, bool aImmediate = false );
761 
770  void draw( VIEW_GROUP* aGroup, bool aImmediate = false );
771 
773  void sortLayers();
774 
777  void clearGroupCache();
778 
785  void invalidateItem( VIEW_ITEM* aItem, int aUpdateFlags );
786 
788  void updateItemColor( VIEW_ITEM* aItem, int aLayer );
789 
791  void updateItemGeometry( VIEW_ITEM* aItem, int aLayer );
792 
794  void updateBbox( VIEW_ITEM* aItem );
795 
797  void updateLayers( VIEW_ITEM* aItem );
798 
801  {
802  return aI->renderingOrder > aJ->renderingOrder;
803  }
804 
806  bool areRequiredLayersEnabled( int aLayerId ) const;
807 
810 
813 
815  std::shared_ptr<std::vector<VIEW_ITEM*>> m_allItems;
816 
819 
821  std::set<unsigned int> m_topLayers;
822 
825 
827  double m_scale;
828 
831 
833  double m_minScale;
834 
836  double m_maxScale;
837 
839  bool m_mirrorX;
840 
842  bool m_mirrorY;
843 
846 
849 
852  bool m_dynamic;
853 
856 
858  static const int TOP_LAYER_MODIFIER;
859 
863 
866 
869 
873 
874  VIEW( const VIEW& ) = delete;
875 };
876 } // namespace KIGFX
877 
878 #endif
void MarkForUpdate(VIEW_ITEM *aItem)
Function MarkForUpdate() Adds an item to a list of items that are going to be refreshed upon the next...
void SetScaleLimits(double aMaximum, double aMinimum)
Function SetScaleLimits() Sets minimum and maximum values for scale.
Definition: view.h:298
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Temporarily hides the item in the view (e.g.
Definition: view.cpp:1507
Number of available rendering targets.
Definition: definitions.h:51
bool IsDrawOrderReversed() const
Function IsDrawOrderReversed()
Definition: view.h:665
BOX2D GetViewport() const
Function GetViewport() Returns the current viewport visible area rectangle.
Definition: view.cpp:538
void SetViewport(const BOX2D &aViewport)
Function SetViewport() Sets the visible area of the VIEW.
Definition: view.cpp:550
void updateLayers(VIEW_ITEM *aItem)
Updates set of layers that an item occupies.
Definition: view.cpp:1341
void AddLayer(int aLayer, bool aDisplayOnly=false)
Function AddLayer() Adds a new layer to the view.
Definition: view.cpp:331
void UpdateAllItemsConditionally(int aUpdateFlags, std::function< bool(VIEW_ITEM *)> aCondition)
Updates items in the view according to the given flags and condition.
Definition: view.cpp:1458
void ReverseDrawOrder(bool aFlag)
Function ReverseDrawOrder() Only takes effect if UseDrawPriority is true.
Definition: view.h:675
void SetLayerOrder(int aLayer, int aRenderingOrder)
Function SetLayerOrder() Sets rendering order of a particular layer.
Definition: view.cpp:664
void SetRequired(int aLayerId, int aRequiredId, bool aRequired=true)
Function SetRequired() Marks the aRequiredId layer as required for the aLayerId layer.
Definition: view.cpp:416
void updateItemColor(VIEW_ITEM *aItem, int aLayer)
Updates colors that are used for an item to be drawn.
Definition: view.cpp:1276
bool m_useDrawPriority
Flat list of all items Flag to respect draw priority when drawing items.
Definition: view.h:862
Class CAIRO_GAL is the cairo implementation of the graphics abstraction layer.
Definition: class_module.h:57
const BOX2D & GetBoundary() const
Function GetBoundary()
Definition: view.h:287
virtual void SetTopLayer(int aLayer, bool aEnabled=true)
Function SetTopLayer() Sets given layer to be displayed on the top or sets back the default order of ...
Definition: view.cpp:860
static const int TOP_LAYER_MODIFIER
Rendering order modifier for layers that are marked as top layers.
Definition: view.h:858
const Vec GetEnd() const
Definition: box2.h:193
void sortLayers()
Definition: view.cpp:1261
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToWorld() Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:475
const VECTOR2D & GetCenter() const
Function GetCenter() Returns the center point of this VIEW (in world space coordinates)
Definition: view.h:328
void UseDrawPriority(bool aFlag)
Function UseDrawPriority()
Definition: view.h:656
void RecacheAllItems()
Function RecacheAllItems() Rebuilds GAL display lists.
Definition: view.cpp:1402
void UpdateAllItems(int aUpdateFlags)
Updates all items in the view according to the given flags.
Definition: view.cpp:1444
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:376
GAL * m_gal
Gives interface to PAINTER, that is used to draw items.
Definition: view.h:848
bool areRequiredLayersEnabled(int aLayerId) const
Checks if every layer required by the aLayerId layer is enabled.
Definition: view.cpp:1384
GAL * GetGAL() const
Function GetGAL() Returns the GAL this view is using to draw graphical primitives.
Definition: view.h:180
std::set< unsigned int > m_topLayers
Stores set of layers that are displayed on the top.
Definition: view.h:821
void UpdateAllLayersOrder()
Function UpdateLayerOrder() Does everything that is needed to apply the rendering order of layers.
Definition: view.cpp:927
void SetMirror(bool aMirrorX, bool aMirrorY)
Function SetMirror() Controls the mirroring of the VIEW.
Definition: view.cpp:565
Class VIEW_ITEM - is an abstract base class for deriving all objects that can be added to a VIEW.
Definition: view_item.h:84
std::shared_ptr< VIEW_OVERLAY > MakeOverlay()
Definition: view.cpp:1554
std::vector< VIEW_LAYER * > LAYER_ORDER
Definition: view.h:718
virtual void EnableTopLayer(bool aEnable)
Function EnableTopLayer() Enables or disables display of the top layer.
Definition: view.cpp:887
VECTOR2D m_center
Center point of the VIEW (the point at which we are looking at)
Definition: view.h:824
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:199
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:701
bool IsUsingDrawPriority() const
Function IsUsingDrawPriority()
Definition: view.h:647
void SetBoundary(const BOX2I &aBoundary)
Function SetBoundary() Sets limits for view area.
Definition: view.h:277
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
Flat list of all items.
Definition: view.h:815
void SortLayers(int aLayers[], int &aCount) const
Function SortLayers() Changes the order of given layer ids, so after sorting the order corresponds to...
Definition: view.cpp:678
double m_minScale
Scale lower limit.
Definition: view.h:833
void SetLayerTarget(int aLayer, RENDER_TARGET aTarget)
Function SetLayerTarget() Changes the rendering target for a particular layer.
Definition: view.h:434
void SetPrintMode(int aPrintMode)
Set the printing mode.
Definition: view.h:699
Class PAINTER contains all the knowledge about how to draw graphical object onto any particular outpu...
Definition: painter.h:313
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:604
virtual void Redraw()
Function Redraw() Immediately redraws the whole view.
Definition: view.cpp:1145
void MarkTargetDirty(int aTarget)
Function MarkTargetDirty() Sets or clears target 'dirty' flag.
Definition: view.h:585
bool IsTargetDirty(int aTarget) const
Function IsTargetDirty() Returns true if any of layers belonging to the target or the target itself s...
Definition: view.h:574
void Clear()
Function Clear() Removes all items from the view.
Definition: view.cpp:1111
bool IsVisible(const VIEW_ITEM *aItem) const
Returns information if the item is visible (or not).
Definition: view.cpp:1526
bool visible
is the layer to be rendered?
Definition: view.h:706
virtual int GetTopLayer() const
Definition: view.cpp:851
void SetLayerDisplayOnly(int aLayer, bool aDisplayOnly=true)
Definition: view.h:422
std::unordered_map< int, VIEW_LAYER > LAYER_MAP
Definition: view.h:716
bool m_mirrorX
Horizontal flip flag
Definition: view.h:839
void invalidateItem(VIEW_ITEM *aItem, int aUpdateFlags)
Function invalidateItem() Manages dirty flags & redraw queueing when updating an item.
Definition: view.cpp:1216
const VECTOR2I & GetScreenPixelSize() const
Function GetScreenPixelSize() Returns the size of the our rendering area, in pixels.
Definition: view.cpp:1177
bool m_dynamic
Dynamic VIEW (eg.
Definition: view.h:852
int id
layer ID
Definition: view.h:710
LAYER_ORDER m_orderedLayers
Sorted list of pointers to members of m_layers.
Definition: view.h:818
void SetLayerVisible(int aLayer, bool aVisible=true)
Function SetLayerVisible() Controls the visibility of a particular layer.
Definition: view.h:399
void ReorderLayerData(std::unordered_map< int, int > aReorderMap)
Remaps the data between layer ids without invalidating that data.
Definition: view.cpp:706
void UpdateItems()
Function UpdateItems() Iterates through the list of items that asked for updating and updates them.
Definition: view.cpp:1421
void markTargetClean(int aTarget)
Definition: view.h:734
void updateBbox(VIEW_ITEM *aItem)
Updates bounding box of an item.
Definition: view.cpp:1325
PAINTER * m_painter
PAINTER contains information how do draw items.
Definition: view.h:845
bool IsDynamic() const
Function IsDynamic() Tells if the VIEW is dynamic (ie.
Definition: view.h:547
bool m_reverseDrawOrder
Flag to reverse the draw order when using draw priority.
Definition: view.h:868
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1540
int m_nextDrawPriority
The next sequential drawing priority.
Definition: view.h:865
VECTOR2D ToScreen(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToScreen() Converts a world space point/vector to a point/vector in screen space coordinates...
Definition: view.cpp:494
void ClearTopLayers()
Function ClearTopLayers() Removes all layers from the on-the-top set (they are no longer displayed ov...
Definition: view.cpp:912
bool IsMirroredX() const
Function IsMirroredX() Returns true if view is flipped across the X axis.
Definition: view.h:230
LAYER_MAP::iterator LAYER_MAP_ITER
Definition: view.h:717
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:223
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Function SetScale() Sets the scaling factor, zooming around a given anchor point.
Definition: view.cpp:578
void clearGroupCache()
Definition: view.cpp:1201
double m_maxScale
Scale upper limit.
Definition: view.h:836
void UpdateLayerColor(int aLayer)
Function UpdateLayerColor() Applies the new coloring scheme held by RENDER_SETTINGS in case that it h...
Definition: view.cpp:777
std::unique_ptr< VIEW > DataReference() const
Returns a new VIEW object that shares the same set of VIEW_ITEMs and LAYERs.
Definition: view.cpp:1476
int GetPrintMode()
Definition: view.h:692
bool m_dirtyTargets[TARGETS_NUMBER]
Flags to mark targets as dirty, so they have to be redrawn on the next refresh event.
Definition: view.h:855
void redrawRect(const BOX2I &aRect)
Definition: view.cpp:1010
void updateItemGeometry(VIEW_ITEM *aItem, int aLayer)
Updates all informations needed to draw an item.
Definition: view.cpp:1295
Main rendering target (cached)
Definition: definitions.h:48
bool m_enableOrderModifier
Definition: view.h:809
static void OnDestroy(VIEW_ITEM *aItem)
Definition: view.cpp:271
BOX2D m_boundary
View boundaries.
Definition: view.h:830
std::pair< VIEW_ITEM *, int > LAYER_ITEM_PAIR
Definition: view.h:66
int GetLayerOrder(int aLayer) const
Function GetLayerOrder() Returns rendering order of a particular layer.
Definition: view.cpp:672
size_t i
Definition: json11.cpp:597
void draw(VIEW_ITEM *aItem, int aLayer, bool aImmediate=false)
Function draw() Draws an item, but on a specified layers.
Definition: view.cpp:1029
bool IsCached(int aLayer) const
Returns true if the layer is cached.
Definition: view.h:592
void SetOrigin(const Vec &pos)
Definition: box2.h:208
bool m_mirrorY
Vertical flip flag
Definition: view.h:842
void ClearTargets()
Function ClearTargets() Clears targets that are marked as dirty.
Definition: view.cpp:1126
std::vector< VIEW_LAYER * >::iterator LAYER_ORDER_ITER
Definition: view.h:719
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1486
void CopySettings(const VIEW *aOtherView)
Function CopySettings() Copies layers and visibility settings from another view.
Definition: view.cpp:513
void SetPainter(PAINTER *aPainter)
Function SetPainter() Sets the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:189
LAYER_MAP m_layers
Contains set of possible displayed layers and its properties.
Definition: view.h:812
double m_scale
Scale of displayed VIEW_ITEMs.
Definition: view.h:827
int renderingOrder
rendering order of this layer
Definition: view.h:709
bool displayOnly
is the layer display only?
Definition: view.h:707
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:346
virtual int Query(const BOX2I &aRect, std::vector< LAYER_ITEM_PAIR > &aResult) const
Function Query() Finds all visible items that touch or are within the rectangle aRect.
Definition: view.cpp:452
bool IsMirroredY() const
Function IsMirroredX() Returns true if view is flipped across the Y axis.
Definition: view.h:239
virtual ~VIEW()
Definition: view.cpp:326
const Vec & GetOrigin() const
Definition: box2.h:191
RENDER_TARGET
RENDER_TARGET: Possible rendering targets.
Definition: definitions.h:46
VIEW(bool aIsDynamic=true)
Constructor.
Definition: view.cpp:286
Class VIEW.
Definition: view.h:61
void SetBoundary(const BOX2D &aBoundary)
Function SetBoundary() Sets limits for view area.
Definition: view.h:267
void UpdateAllLayersColor()
Function UpdateAllLayersColor() Applies the new coloring scheme to all layers.
Definition: view.cpp:798
double GetScale() const
Function GetScale()
Definition: view.h:257
void SetGAL(GAL *aGal)
Function SetGAL() Assigns a rendering device for the VIEW.
Definition: view.cpp:519
int m_printMode
A control for printing: m_printMode <= 0 means no printing mode (normal draw mode m_printMode > 0 is ...
Definition: view.h:872
void ClearLayer(int aLayer)
Function ClearLayer() Removes all items from a given layer.
static bool compareRenderingOrder(VIEW_LAYER *aI, VIEW_LAYER *aJ)
Determines rendering order of layers. Used in display order sorting function.
Definition: view.h:800
void MarkDirty()
Function MarkDirty() Forces redraw of view on the next rendering.
Definition: view.h:610
std::set< int > requiredLayers
layers that have to be enabled to show the layer
Definition: view.h:712
bool IsDirty() const
Function IsDirty() Returns true if any of the VIEW layers needs to be refreshened.
Definition: view.h:557
Class GAL is the abstract interface for drawing on a 2D-surface.
bool IsLayerVisible(int aLayer) const
Function IsLayerVisible() Returns information about visibility of a particular layer.
Definition: view.h:416
RENDER_TARGET target
where the layer should be rendered
Definition: view.h:711
std::shared_ptr< VIEW_RTREE > items
R-tree indexing all items on this layer.
Definition: view.h:708