33#include <unordered_map>
83 static void OnDestroy(
VIEW_ITEM* aItem );
93 virtual void Add(
VIEW_ITEM* aItem,
int aDrawPriority = -1 );
111 int Query(
const BOX2I& aRect, std::vector<LAYER_ITEM_PAIR>& aResult )
const;
118 void Query(
const BOX2I& aRect,
const std::function<
bool(
VIEW_ITEM* )>& aFunc )
const;
126 void SetVisible(
VIEW_ITEM* aItem,
bool aIsVisible =
true );
135 void Hide(
VIEW_ITEM* aItem,
bool aHide =
true,
bool aHideOverlay =
false );
144 bool IsVisible(
const VIEW_ITEM* aItem )
const;
146 bool IsHiddenOnOverlay(
const VIEW_ITEM* aItem )
const;
151 bool HasItem(
const VIEW_ITEM* aItem )
const;
160 virtual void Update(
const VIEW_ITEM* aItem,
int aUpdateFlags )
const;
161 virtual void Update(
const VIEW_ITEM* aItem )
const;
171 void SetRequired(
int aLayerId,
int aRequiredId,
bool aRequired =
true );
178 void CopySettings(
const VIEW* aOtherView );
191 void SetGAL(
GAL* aGal );
208 m_painter = aPainter;
226 void SetViewport(
const BOX2D& aViewport );
233 BOX2D GetViewport()
const;
241 void SetMirror(
bool aMirrorX,
bool aMirrorY );
267 virtual void SetScale(
double aScale,
VECTOR2D aAnchor = { 0, 0 } );
284 m_boundary = aBoundary;
294 m_boundary.SetOrigin( aBoundary.
GetOrigin() );
295 m_boundary.SetEnd( aBoundary.
GetEnd() );
314 wxASSERT_MSG( aMaximum > aMinimum, wxT(
"I guess you passed parameters in wrong order" ) );
316 m_minScale = aMinimum;
317 m_maxScale = aMaximum;
326 void SetCenter(
const VECTOR2D& aCenter );
335 void SetCenter(
const VECTOR2D& aCenter,
const std::vector<BOX2D>& obscuringScreenRects );
361 double ToWorld(
double aSize )
const;
376 double ToScreen(
double aSize )
const;
383 const VECTOR2I& GetScreenPixelSize()
const;
398 auto it = m_layers.find( aLayer );
400 if( it == m_layers.end() )
405 if( layer.
visible != aVisible )
408 MarkTargetDirty( layer.
target );
420 auto it = m_layers.find( aLayer );
422 if( it == m_layers.end() )
425 return it->second.visible;
436 auto it = m_layers.find( aLayer );
438 if( it == m_layers.end() )
446 MarkTargetDirty( layer.
target );
459 auto it = m_layers.find( aLayer );
461 if( it == m_layers.end() )
469 MarkTargetDirty( layer.
target );
479 auto it = m_layers.find( aLayer );
481 if( it == m_layers.end() )
484 it->second.displayOnly = aDisplayOnly;
495 auto it = m_layers.find( aLayer );
497 if( it == m_layers.end() )
500 it->second.target = aTarget;
509 void SetLayerOrder(
int aLayer,
int aRenderingOrder );
517 int GetLayerOrder(
int aLayer )
const;
526 void SortLayers( std::vector<int>& aLayers )
const;
535 void ReorderLayerData( std::unordered_map<int, int> aReorderMap );
543 void UpdateLayerColor(
int aLayer );
550 void UpdateAllLayersColor();
559 virtual void SetTopLayer(
int aLayer,
bool aEnabled =
true );
570 virtual void EnableTopLayer(
bool aEnable );
572 virtual int GetTopLayer()
const;
578 void ClearTopLayers();
585 void UpdateAllLayersOrder();
595 virtual void Redraw();
600 void RecacheAllItems();
611 if( IsTargetDirty( i ) )
627 return m_dirtyTargets[aTarget];
638 m_dirtyTargets[aTarget] =
true;
644 auto it = m_layers.find( aLayer );
646 if( it == m_layers.end() )
658 m_dirtyTargets[i] =
true;
667 m_dirtyTargets[i] =
false;
680 void UpdateAllItems(
int aUpdateFlags );
688 void UpdateAllItemsConditionally(
int aUpdateFlags,
689 std::function<
bool(
VIEW_ITEM* )> aCondition );
696 void UpdateAllItemsConditionally( std::function<
int(
VIEW_ITEM* )> aItemFlagsProvider );
703 return m_useDrawPriority;
711 m_useDrawPriority = aFlag;
721 m_reverseDrawOrder = aFlag;
724 std::shared_ptr<VIEW_OVERLAY> MakeOverlay();
729 void AddToPreview(
VIEW_ITEM* aItem,
bool aTakeOwnership =
true );
731 void ShowPreview(
bool aShow =
true );
738 std::unique_ptr<VIEW> DataReference()
const;
767 return id < aOther.
id;
776 void redrawRect(
const BOX2I& aRect );
781 m_dirtyTargets[aTarget] =
false;
795 void draw(
VIEW_ITEM* aItem,
int aLayer,
bool aImmediate =
false );
804 void draw(
VIEW_ITEM* aItem,
bool aImmediate =
false );
813 void draw(
VIEW_GROUP* aGroup,
bool aImmediate =
false );
816 void sortOrderedLayers();
820 void clearGroupCache();
828 void invalidateItem(
VIEW_ITEM* aItem,
int aUpdateFlags );
831 void updateItemColor(
VIEW_ITEM* aItem,
int aLayer );
834 void updateItemGeometry(
VIEW_ITEM* aItem,
int aLayer );
849 bool areRequiredLayersEnabled(
int aLayerId )
const;
852 struct CLEAR_LAYER_CACHE_VISITOR;
853 struct RECACHE_ITEM_VISITOR;
854 struct DRAW_ITEM_VISITOR;
855 struct UPDATE_COLOR_VISITOR;
856 struct UPDATE_DEPTH_VISITOR;
constexpr const Vec GetEnd() const
constexpr const Vec & GetOrigin() const
Abstract interface for drawing on a 2D-surface.
Contains all the knowledge about how to draw graphical object onto any particular output device.
Extend VIEW_ITEM by possibility of grouping items into a single object.
An abstract base class for deriving all objects that can be added to a VIEW.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
void ReverseDrawOrder(bool aFlag)
Only takes effect if UseDrawPriority is true.
const VECTOR2D & GetCenter() const
Return the center point of this VIEW (in world space coordinates).
VIEW(const VIEW &)=delete
std::vector< VIEW_ITEM * > m_ownedItems
bool m_reverseDrawOrder
Flag to reverse the draw order when using draw priority.
void SetLayerDisplayOnly(int aLayer, bool aDisplayOnly=true)
Set a layer display-only (ie: to be rendered but not returned by hit test queries).
static bool compareRenderingOrder(VIEW_LAYER *aI, VIEW_LAYER *aJ)
Determine rendering order of layers. Used in display order sorting function.
void SetPainter(PAINTER *aPainter)
Set the painter object used by the view for drawing #VIEW_ITEMS.
void SetBoundary(const BOX2D &aBoundary)
Set limits for view area.
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
Flat list of all items.
void SetLayerDiff(int aLayer, bool aDiff=true)
Set the whether the layer should drawn differentially.
void SetLayerTarget(int aLayer, RENDER_TARGET aTarget)
Change the rendering target for a particular layer.
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
PAINTER * m_painter
PAINTER contains information how do draw items.
std::set< unsigned int > m_topLayers
The set of layers that are displayed on the top.
bool m_enableOrderModifier
Whether to use rendering order modifier or not.
void SetLayerHasNegatives(int aLayer, bool aNegatives=true)
Set the status of negatives presense in a particular layer.
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
void MarkClean()
Force redraw of view on the next rendering.
bool IsMirroredX() const
Return true if view is flipped across the X axis.
bool IsTargetDirty(int aTarget) const
Return true if any of layers belonging to the target or the target itself should be redrawn.
void SetBoundary(const BOX2I &aBoundary)
Set limits for view area.
int m_nextDrawPriority
The next sequential drawing priority.
bool m_useDrawPriority
Flag to respect draw priority when drawing items.
bool IsCached(int aLayer) const
Return true if the layer is cached.
std::pair< VIEW_ITEM *, int > LAYER_ITEM_PAIR
bool IsMirroredY() const
Return true if view is flipped across the Y axis.
void UseDrawPriority(bool aFlag)
std::unique_ptr< KIGFX::VIEW_GROUP > m_preview
bool IsUsingDrawPriority() const
GAL * m_gal
Interface to #PAINTER that is used to draw items.
bool IsDirty() const
Return true if any of the VIEW layers needs to be refreshened.
std::map< int, VIEW_LAYER > m_layers
The set of possible displayed layers and its properties.
void markTargetClean(int aTarget)
void MarkDirty()
Force redraw of view on the next rendering.
bool IsLayerVisible(int aLayer) const
Return information about visibility of a particular layer.
const BOX2D & GetBoundary() const
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
void SetScaleLimits(double aMaximum, double aMinimum)
Set minimum and maximum values for scale.
std::vector< VIEW_LAYER * > m_orderedLayers
Sorted list of pointers to members of m_layers.
VECTOR2D m_center
Center point of the VIEW (the point at which we are looking at).
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
#define MAX_LAYERS_FOR_VIEW
bool operator<(const DESIGN_BLOCK_INFO &lhs, const DESIGN_BLOCK_INFO &rhs)
The Cairo implementation of the graphics abstraction layer.
RENDER_TARGET
RENDER_TARGET: Possible rendering targets.
@ TARGET_CACHED
Main rendering target (cached)
@ TARGETS_NUMBER
Number of available rendering targets.
std::set< int > requiredLayers
bool diffLayer
Layer should be drawn differentially over lower layers.
int renderingOrder
Rendering order of this layer.
bool hasNegatives
Layer should be drawn separately to not delete lower layers.
bool visible
Is the layer to be rendered?
bool displayOnly
Is the layer display only?
std::shared_ptr< VIEW_RTREE > items
R-tree indexing all items on this layer.
RENDER_TARGET target
Where the layer should be rendered.