You.i Engine
YiSceneView.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_SCENE_VIEW_H_
3 #define _YI_SCENE_VIEW_H_
4 
6 #include "event/YiEventHandler.h"
7 #include "framework/YiPredef.h"
10 #include "utility/YiFocus.h"
11 #include "view/YiAnchor.h"
12 
13 class CYIActionEvent;
14 
23 class CYILayout;
24 class CYISceneViewPriv;
25 class CYITimeline;
26 class CYITimelineGroup;
28 
48 {
49  friend class CYISceneViewPriv;
50 
51 public:
52 
64  {
66  glm::vec3 vOriginalScale;
67 
69  pAnchor(nullptr)
70  {
71  }
72  };
73 
78  {
81  };
82 
86  typedef struct
87  {
89  const char *pRequiredName;
91 
93 
98  {
103  };
104 
105  CYISceneView();
106  virtual ~CYISceneView();
107 
113  bool BuildFromTemplate(CYISceneManager *pSceneManager, const std::shared_ptr<CYIAssetViewTemplate> &pAssetViewTemplate, CYISceneManager::MISSING_CLASS_HANDLING_MODE eMissingHandlingMode = CYISceneManager::ABORT);
114 
120  virtual bool Init() override;
121 
125  bool IsInitialized() const;
126 
130  void SetClippingAreaNode(CYISceneNode *pClippingNode);
131 
137  virtual bool GetProperty(const CYIString &propertyName, CYIString *pValue) const override;
138 
145  void EnableDefaultHitZone();
146 
155  bool IsResponsiveLayoutEnabled() const;
156 
162  void EnableResponsiveLayout();
163 
170 
174  void AddAnchor(YI_ANCHOR_TYPE anchorType);
175 
179  YI_ANCHOR_DATA GetAnchor(YI_ANCHOR_TYPE anchorType) const;
180 
184  static void RegisterAllViews();
185 
189  virtual const CYISceneView::AssetRequirement *GetAssetRequirements(uint32_t *pRequirementCount);
190 
196 
202 
208 
214 
225  virtual bool HandlesFocusInDescendants() const;
226 
241 
245  bool HasFocus() const;
246 
252  void SetFocusable(bool bFocusable);
253 
259  bool IsFocusable() const;
260 
264  bool CanBeFocused() const;
265 
279  void SetNextFocus(CYISceneView *pView, CYIFocus::FOCUS_DIRECTION eDirection);
280 
290 
297 
305 
322 
328  CYISceneView *FindNextFocus(CYIFocus::FOCUS_DIRECTION eDirection, CYIAABB &screenSpaceFocusRegion, const CYIFocusSearchOptions &options = CYIFocusSearchOptions()) const;
329 
338  virtual CYISceneView *FindNextFocusInDescendants(const CYISceneView *pCurrentFocusView, CYIFocus::FOCUS_DIRECTION eDirection, CYIAABB &screenSpaceFocusRegion, const CYIFocusSearchOptions &options = CYIFocusSearchOptions()) const;
339 
345  const CYISceneNode *GetFocusRoot() const;
346 
352  CYISceneView *GetFocusHandler() const;
353 
359  virtual void OnFocusGained();
360 
365  virtual void FocusGained();
366 
372  virtual void OnFocusLost();
373 
378  virtual void FocusLost();
379 
387  const std::shared_ptr<CYIAssetViewTemplate> &GetViewTemplate() const;
388 
392  const std::vector<CYIString> &GetChildTemplateNames();
393 
399  virtual CYIAbstractTimeline *GetTimeline(const CYIString &rMarkerName, TIMELINE_GET_MODE eMode = GET_DEFAULT);
400 
407 
415  std::map<CYIString, CYITimeline *> GetTimelines() const;
416 
424  bool FindTimeline(CYIAbstractTimeline *&pTimeline, const CYIString &markerName, FETCH_TYPE eType, const CYIString &tag = "", TIMELINE_GET_MODE eMode = GET_DEFAULT);
425 
439  CYITimelineGroup *GetTimelineGroup(const CYIString &markerName);
440 
453  std::unique_ptr<CYITimelineGroup> BuildTimelineGroup(const CYIString &markerName);
454 
458  void BuildAnchorList();
459 
465  virtual void Reset() {}
466 
472  void SetLayout(std::unique_ptr<CYILayout> pLayout);
473 
477  const CYILayout *GetLayout() const;
478 
482  CYILayout *GetLayout();
483 
484  virtual void Measure(const MeasureSpec &widthSpec, const MeasureSpec &heightSpec, const MeasureSpec &depthSpec) override;
485 
486  virtual void ApplyMeasurements() override;
487 
488  virtual void BuildDrawList(std::vector<IYIRenderer::Command> &children, CYIAbstractCameraSceneNode *pCameraToDrawWith = nullptr) override;
489 
492 
493 protected:
497  void UpdateClipping();
498 
499  virtual void WorldScaleUpdated() override;
500  virtual void WorldBoundingBoxUpdated() override;
501 
505  virtual void OnViewReflowed(const glm::vec3 &worldScale);
506 
511  virtual void ViewReflowed(const glm::vec3 &worldScale);
512 
513  virtual bool HandleEvent(const std::shared_ptr<CYIEventDispatcher> &pDispatcher, CYIEvent *pEvent) override;
514  virtual bool ProcessEvent(const std::shared_ptr<CYIEventDispatcher> &pDispatcher, CYIEvent *pEvent) override;
515 
522 
523  virtual void SizeChanged() override;
524 
525  virtual void ChildNeedsLayout() override;
526 
527  virtual void LayoutDirtied() override;
528 
529  virtual void ChildAdded(CYISceneNode *pChild) override;
530 
531  virtual void ChildRemoved(CYISceneNode *pChild) override;
532 
533  virtual void ChildVisibilityChanged(CYISceneNode *pChild) override;
534 
539 
540  /*
541  \copydoc OnViewIsInAnimatedPosition()
542  */
544 
551  void SetInTimeline(CYIAbstractTimeline *pTimeline);
552 
559  void SetOutTimeline(CYIAbstractTimeline *pTimeline);
560 
564  virtual void OnInit();
565 
575 
583  std::unique_ptr<CYILayout> m_pLayout;
584  std::shared_ptr<CYIAssetViewTemplate> m_pAssetViewTemplate;
585  std::shared_ptr<CYISceneNodeProxy> m_pInitiallyFocusedView;
586 
587  std::multimap<YI_ANCHOR_TYPE, YI_ANCHOR_DATA> m_anchors;
588  std::map<CYIString, std::unique_ptr<CYITimeline>> m_timelines;
589  std::map<CYIString, std::unique_ptr<CYIParallelTimelineGroup>> m_timelineGroups;
590 
591 private:
592  static void RecursivelyAddTimelinesToGroup(CYISceneNode *pNode, CYITimelineGroup *pTimelineGroup, const CYIString &markerName);
593 
594  void SetLayout(std::unique_ptr<CYILayout> pLayout, bool bConfigureFromProperties);
595 
596  void DescendantAdded(CYISceneNode *pDescendant);
597  void DescendantRemoved(CYISceneNode *pDescendant);
598 
599  std::unique_ptr<CYISceneViewPriv> m_pPriv;
600 
601  CYIAbstractTimeline *m_pInTimeline;
602  CYIAbstractTimeline *m_pOutTimeline;
603 
604  std::shared_ptr<CYISceneNodeProxy> m_pNextFocusView[CYIFocus::FOCUS_MAX];
605  bool m_bFocusable;
606 
607  bool m_bInitCalled;
608 
611 };
612 
616 #ifdef YI_FUNCTION_SPECIALIZATION_FULLY_SUPPORTED
617 template<>
618 inline const CYISceneView *YiDynamicCast<CYISceneView>(const CYISceneNode *pObject)
619 {
620  return pObject ? (pObject->CanCastTo<CYISceneView>() ? static_cast<const CYISceneView *>(pObject) : nullptr) : nullptr;
621 }
622 #endif
623 
624 #endif // _YI_SCENE_VIEW_H_
625 
bool IsResponsiveLayoutEnabled() const
bool FindTimeline(CYIAbstractTimeline *&pTimeline, const CYIString &markerName, FETCH_TYPE eType, const CYIString &tag="", TIMELINE_GET_MODE eMode=GET_DEFAULT)
const char * pRequiredName
Definition: YiSceneView.h:89
The base class for the timeline framework.
Definition: YiAbstractTimeline.h:29
FETCH_TYPE
Definition: YiSceneNode.h:341
const CYISceneNode * GetFocusRoot() const
Definition: YiSceneNode.h:356
#define YI_DISALLOW_COPY_AND_ASSIGN(TypeName)
Delete the copy constructor and assignment operator (and consequently the move constructor as well) ...
Definition: YiPredef.h:114
virtual void LayoutDirtied() override
std::map< CYIString, std::unique_ptr< CYITimeline > > m_timelines
Definition: YiSceneView.h:588
CYIAbstractTimeline * GetFocusOutTimeline() const
friend class CYISceneViewPriv
Definition: YiSceneView.h:49
A class containing focus search options.
Definition: YiFocusSearchOptions.h:23
std::map< CYIString, std::unique_ptr< CYIParallelTimelineGroup > > m_timelineGroups
Definition: YiSceneView.h:589
Allows registering of event filters which can be used to perform processing on an event before and af...
Definition: YiEventHandler.h:25
Scene trees composed of CYISceneNode objects are registered with the scene manager in order for them ...
Definition: YiSceneManager.h:73
TIMELINE_GET_MODE
Definition: YiSceneView.h:97
virtual void Reset()
Definition: YiSceneView.h:465
A timeline which sources its data from a backing store.
Definition: YiTimeline.h:54
Base class for events.
Definition: YiEvent.h:489
The base class for all view types. Views are containers of renderable elements that often define inte...
Definition: YiSceneView.h:47
bool TryRequestFocusOnInitiallyFocusedView()
void EnableDefaultHitZone()
bool IsFocusable() const
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
CYIMarkerData::MARKER_ID requiredMarkerID
Definition: YiSceneView.h:90
Always returns a CYITimeline instance (e.g. never returns a timeline group). Returns null if the give...
Definition: YiSceneView.h:100
virtual bool HandlesFocusInDescendants() const
The base class for types of timeline groups.
Definition: YiTimelineGroup.h:25
virtual CYISceneView * FindNextFocusInDescendants(const CYISceneView *pCurrentFocusView, CYIFocus::FOCUS_DIRECTION eDirection, CYIAABB &screenSpaceFocusRegion, const CYIFocusSearchOptions &options=CYIFocusSearchOptions()) const
virtual void OnViewReflowed(const glm::vec3 &worldScale)
virtual bool HandleEvent(const std::shared_ptr< CYIEventDispatcher > &pDispatcher, CYIEvent *pEvent) override
Provides a base for the definition of camera objects.
Definition: YiAbstractCameraSceneNode.h:30
void SetClippingAreaNode(CYISceneNode *pClippingNode)
#define YI_TYPE_BASES(...)
Definition: YiRtti.h:350
void DisableResponsiveLayout()
CYISceneView * GetInitiallyFocusedView() const
virtual bool GetProperty(const CYIString &propertyName, CYIString *pValue) const override
virtual void ViewReflowed(const glm::vec3 &worldScale)
virtual void WorldScaleUpdated() override
bool IsInitialized() const
virtual CYIAbstractTimeline * GetTimeline(const CYIString &rMarkerName, TIMELINE_GET_MODE eMode=GET_DEFAULT)
Definition: YiSceneView.h:86
CYISceneNode * m_pClippingNode
Definition: YiSceneView.h:580
std::shared_ptr< CYISceneNodeProxy > m_pInitiallyFocusedView
Definition: YiSceneView.h:585
CYIAbstractTimeline * GetInTimeline() const
virtual ~CYISceneView()
const std::shared_ptr< CYIAssetViewTemplate > & GetViewTemplate() const
const std::vector< CYIString > & GetChildTemplateNames()
virtual void ChildRemoved(CYISceneNode *pChild) override
void AddAnchor(YI_ANCHOR_TYPE anchorType)
void SetLayout(std::unique_ptr< CYILayout > pLayout)
void EnableResponsiveLayout()
ASSET_REQUIREMENT_TYPE assetRequirementType
Definition: YiSceneView.h:88
std::multimap< YI_ANCHOR_TYPE, YI_ANCHOR_DATA > m_anchors
Definition: YiSceneView.h:587
CYIAbstractTimeline * GetFocusInTimeline() const
CYISceneView * FindNextFocus(CYIFocus::FOCUS_DIRECTION eDirection, const CYIFocusSearchOptions &options=CYIFocusSearchOptions()) const
glm::vec3 vOriginalScale
Definition: YiSceneView.h:66
void OnViewIsInAnimatedPosition()
static void RegisterAllViews()
CYISignal< CYISceneView * > GainedFocus
Emitted when focus has entered this view.
Definition: YiSceneView.h:490
bool CanBeFocused() const
bool HasFocus() const
virtual bool RequestFocus(CYIFocus::FOCUS_DIRECTION eDirection=CYIFocus::FOCUS_FORWARD, CYIFocus::FOCUS_ROOT_RULE eFocusRootRule=CYIFocus::FOCUS_ROOT_DESCENDANTS_UPDATE_CONTEXT, const CYIAABB &previousFocusRect=CYIAABB(), const CYIFocusSearchOptions &options=CYIFocusSearchOptions())
ASSET_REQUIREMENT_TYPE
Definition: YiSceneView.h:77
Returns a timeline group component. This is used internally when generating timeline groups...
Definition: YiSceneView.h:102
CYISceneNode * pAnchor
Definition: YiSceneView.h:65
void SetInTimeline(CYIAbstractTimeline *pTimeline)
MARKER_ID
Definition: YiMarkerData.h:36
virtual void ChildNeedsLayout() override
bool BuildFromTemplate(CYISceneManager *pSceneManager, const std::shared_ptr< CYIAssetViewTemplate > &pAssetViewTemplate, CYISceneManager::MISSING_CLASS_HANDLING_MODE eMissingHandlingMode=CYISceneManager::ABORT)
virtual void ApplyMeasurements() override
virtual bool ProcessEvent(const std::shared_ptr< CYIEventDispatcher > &pDispatcher, CYIEvent *pEvent) override
const CYILayout * GetLayout() const
Definition: YiSceneView.h:79
virtual void Measure(const MeasureSpec &widthSpec, const MeasureSpec &heightSpec, const MeasureSpec &depthSpec) override
FOCUS_ROOT_RULE
Definition: YiFocus.h:60
void OnViewIsGoingOutOfAnimatedPosition()
A scene node is the base type for all nodes which are used by the scene manager; it is an integral pa...
Definition: YiSceneNode.h:114
ViewTemplate asset. Wrapper around a CYIViewTemplate.
Definition: YiAssetViewTemplate.h:21
virtual void ChildAdded(CYISceneNode *pChild) override
virtual void ChildVisibilityChanged(CYISceneNode *pChild) override
Always returns a timeline group (which will recursively be created). Never returns null...
Definition: YiSceneView.h:101
Definition: YiFocus.h:50
virtual void OnInit()
void UpdateResponsiveLayoutAnchors()
CYIAbstractTimeline * m_pFocusOutTimeline
Definition: YiSceneView.h:582
Definition: YiFocus.h:52
std::map< CYIString, CYITimeline * > GetTimelines() const
CYIAbstractTimeline * m_pFocusInTimeline
Definition: YiSceneView.h:581
Anchors are used to apply scaling rules.
Definition: YiSceneView.h:63
CYISceneView * GetFocusHandler() const
virtual const CYISceneView::AssetRequirement * GetAssetRequirements(uint32_t *pRequirementCount)
void SetInitiallyFocusedView(CYISceneView *pView)
virtual void SizeChanged() override
virtual void OnFocusGained()
Definition: YiSceneManager.h:144
Automatically picks between the other modes depending on how the given timeline marker is configured...
Definition: YiSceneView.h:99
This class defines a layout that can be applied to a scene view. The layout class determines how obje...
Definition: YiLayout.h:159
FOCUS_DIRECTION
Definition: YiFocus.h:44
This class represents an Axis-Aligned Bounding Box.
Definition: YiAABB.h:24
virtual void FocusGained()
virtual void BuildDrawList(std::vector< IYIRenderer::Command > &children, CYIAbstractCameraSceneNode *pCameraToDrawWith=nullptr) override
This kind of timeline group will play its children in parallel, possibly with specified offsets (dela...
Definition: YiParallelTimelineGroup.h:21
virtual void WorldBoundingBoxUpdated() override
void SetFocusable(bool bFocusable)
YI_ANCHOR_TYPE
Definition: YiAnchor.h:8
CYITimelineGroup * GetTimelineGroup(const CYIString &markerName)
Definition: YiSceneView.h:80
YI_ANCHOR_DATA()
Definition: YiSceneView.h:68
bool m_bStopEventPropagation
Definition: YiSceneView.h:576
CYIAbstractTimeline * GetOutTimeline() const
virtual bool Init() override
void BuildAnchorList()
bool m_bResponsiveLayoutEnabled
Definition: YiSceneView.h:577
bool m_bInAnimatedPosition
Definition: YiSceneView.h:579
CYISignal< CYISceneView * > LostFocus
Emitted when focus has left this view.
Definition: YiSceneView.h:491
virtual void OnFocusLost()
std::unique_ptr< CYILayout > m_pLayout
Definition: YiSceneView.h:583
MISSING_CLASS_HANDLING_MODE
Optional fallback rules for missing view types during scene loading.
Definition: YiSceneManager.h:142
YI_ANCHOR_DATA GetAnchor(YI_ANCHOR_TYPE anchorType) const
CYISceneView * GetNextFocus(CYIFocus::FOCUS_DIRECTION eDirection) const
Stores data related to a user Action event.
Definition: YiActionEvent.h:18
void SetOutTimeline(CYIAbstractTimeline *pTimeline)
virtual void FocusLost()
bool m_bSceneTreeBuilt
Definition: YiSceneView.h:578
std::shared_ptr< CYIAssetViewTemplate > m_pAssetViewTemplate
Definition: YiSceneView.h:584
void SetNextFocus(CYISceneView *pView, CYIFocus::FOCUS_DIRECTION eDirection)
std::unique_ptr< CYITimelineGroup > BuildTimelineGroup(const CYIString &markerName)
void UpdateClipping()