TreeInspectorPreview.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include "TreeInspectorPreview.h"
  2. #include "TreeInspector.h"
  3. #include "Stage.h"
  4. #include "TextField.h"
  5. #include "res/Resources.h"
  6. #include "RenderState.h"
  7. namespace oxygine
  8. {
  9. TreeInspectorPreview::TreeInspectorPreview(TreeInspector *tree): _tree(tree), _prevParent(0), _drawChildren(false)
  10. {
  11. setTouchEnabled(false);
  12. }
  13. TreeInspectorPreview::~TreeInspectorPreview()
  14. {
  15. }
  16. Vector2 fitSize(const Vector2 &destSize, const Vector2 &src)
  17. {
  18. Vector2 srcSize = src;
  19. if (srcSize.x < 1)
  20. srcSize.x = 1;
  21. if (srcSize.y < 1)
  22. srcSize.y = 1;
  23. float scaleX = srcSize.x / destSize.x;
  24. float scaleY = srcSize.y / destSize.y;
  25. scaleX = 1.0f / scaleX;
  26. scaleY = 1.0f / scaleY;
  27. float scale = scaleX < scaleY ? scaleX : scaleY;
  28. return Vector2(srcSize.x * scale, srcSize.y * scale);
  29. }
  30. void TreeInspectorPreview::init(spActor item)
  31. {
  32. //_item = item;
  33. Renderer r(&_videoCache);
  34. RenderState rs;
  35. rs.renderer = &r;
  36. rs.transform = item->getTransform();
  37. r.begin(0, Rect(0,0,0,0), 0);
  38. r.setTransform(rs.transform);
  39. item->doRender(rs);
  40. r.end();
  41. r.drawBatch();
  42. setSize(30, 30);
  43. RectF itemRect = _videoCache._bounds;
  44. if (itemRect.isEmpty())
  45. {
  46. itemRect = item->getDestRect();
  47. if (itemRect.isEmpty())
  48. itemRect.setSize(Vector2(10,4));
  49. }
  50. Vector2 ns = fitSize(Vector2(50.0f, 50.0f), itemRect.size);
  51. float scale = ns.x / itemRect.size.x;
  52. _cacheTransform.identity();
  53. _cacheTransform.scale(Vector2(scale, scale));
  54. _cacheTransform.translate(-itemRect.pos);
  55. AnimationFrame fr = _tree->_resSystem->getResAnim("checker")->getFrame(0,0);
  56. //Point itemSize(30, 30);// = _getItemRect().size;
  57. RectF srcRect = fr.getSrcRect();
  58. const Diffuse &df = fr.getDiffuse();
  59. srcRect.size.x = ns.x / (float)df.base->getWidth();
  60. srcRect.size.y = ns.y / (float)df.base->getHeight();
  61. RectF destRect = fr.getDestRect();
  62. destRect.size = ns;
  63. AnimationFrame cfr;
  64. cfr.init(0, df, srcRect, destRect, ns);
  65. setAnimFrame(cfr);
  66. /*
  67. spEventHandler bh = new EventHandler();
  68. bh->setCallbackEnter(CLOSURE(this, &TreeInspectorPreview::_onEvent));
  69. bh->setCallbackExit(CLOSURE(this, &TreeInspectorPreview::_onEvent));
  70. bh->setCallbackPressDown(CLOSURE(this, &TreeInspectorPreview::_onEvent));
  71. bh->setCallbackPressUp(CLOSURE(this, &TreeInspectorPreview::_onEvent));
  72. addEventHandler(bh);
  73. */
  74. }
  75. void TreeInspectorPreview::doRender(RenderState const& parentRenderState)
  76. {
  77. Sprite::doRender(parentRenderState);
  78. parentRenderState.renderer->drawBatch();
  79. _videoCache.render(_cacheTransform * parentRenderState.transform);
  80. parentRenderState.renderer->drawBatch();
  81. parentRenderState.renderer->resetSettings();
  82. /*
  83. bool rel = _item->getChildrenRelative();
  84. AffineTransform tr;
  85. tr.identity();
  86. Rect rect = _getItemRect();
  87. float scale = (float)getWidth() / rect.size.x;
  88. tr.scale(Vector2(scale, scale));
  89. tr.translate(-rect.pos);
  90. AffineTransform res = tr * parentRenderState.transform;
  91. _item->setChildrenRelative(true);
  92. parentRenderState.renderer->setTransform(res);
  93. _item->doRender(parentRenderState);
  94. _item->setChildrenRelative(rel);
  95. */
  96. }
  97. }