/xbmc/guilib/GUIBorderedImage.cpp

http://github.com/xbmc/xbmc · C++ · 72 lines · 54 code · 10 blank · 8 comment · 5 complexity · cf962efed6b53aa5a82fa0d346e73f5c MD5 · raw file

  1. /*
  2. * Copyright (C) 2005-2018 Team Kodi
  3. * This file is part of Kodi - https://kodi.tv
  4. *
  5. * SPDX-License-Identifier: GPL-2.0-or-later
  6. * See LICENSES/README.md for more information.
  7. */
  8. #include "GUIBorderedImage.h"
  9. CGUIBorderedImage::CGUIBorderedImage(int parentID, int controlID, float posX, float posY, float width, float height, const CTextureInfo& texture, const CTextureInfo& borderTexture, const CRect &borderSize)
  10. : CGUIImage(parentID, controlID, posX + borderSize.x1, posY + borderSize.y1, width - borderSize.x1 - borderSize.x2, height - borderSize.y1 - borderSize.y2, texture),
  11. m_borderImage(posX, posY, width, height, borderTexture),
  12. m_borderSize(borderSize)
  13. {
  14. ControlType = GUICONTROL_BORDEREDIMAGE;
  15. }
  16. CGUIBorderedImage::CGUIBorderedImage(const CGUIBorderedImage &right)
  17. : CGUIImage(right), m_borderImage(right.m_borderImage), m_borderSize(right.m_borderSize)
  18. {
  19. ControlType = GUICONTROL_BORDEREDIMAGE;
  20. }
  21. CGUIBorderedImage::~CGUIBorderedImage(void) = default;
  22. void CGUIBorderedImage::Process(unsigned int currentTime, CDirtyRegionList &dirtyregions)
  23. {
  24. CGUIImage::Process(currentTime, dirtyregions);
  25. if (!m_borderImage.GetFileName().empty() && m_texture.ReadyToRender())
  26. {
  27. CRect rect = CRect(m_texture.GetXPosition(), m_texture.GetYPosition(), m_texture.GetXPosition() + m_texture.GetWidth(), m_texture.GetYPosition() + m_texture.GetHeight());
  28. rect.Intersect(m_texture.GetRenderRect());
  29. m_borderImage.SetPosition(rect.x1 - m_borderSize.x1, rect.y1 - m_borderSize.y1);
  30. m_borderImage.SetWidth(rect.Width() + m_borderSize.x1 + m_borderSize.x2);
  31. m_borderImage.SetHeight(rect.Height() + m_borderSize.y1 + m_borderSize.y2);
  32. m_borderImage.SetDiffuseColor(m_diffuseColor);
  33. if (m_borderImage.Process(currentTime))
  34. MarkDirtyRegion();
  35. }
  36. }
  37. void CGUIBorderedImage::Render()
  38. {
  39. if (!m_borderImage.GetFileName().empty() && m_texture.ReadyToRender())
  40. m_borderImage.Render();
  41. CGUIImage::Render();
  42. }
  43. CRect CGUIBorderedImage::CalcRenderRegion() const
  44. {
  45. // have to union the image as well as fading images may still exist that are bigger than our current border image
  46. return CGUIImage::CalcRenderRegion().Union(m_borderImage.GetRenderRect());
  47. }
  48. void CGUIBorderedImage::AllocResources()
  49. {
  50. m_borderImage.AllocResources();
  51. CGUIImage::AllocResources();
  52. }
  53. void CGUIBorderedImage::FreeResources(bool immediately)
  54. {
  55. m_borderImage.FreeResources(immediately);
  56. CGUIImage::FreeResources(immediately);
  57. }
  58. void CGUIBorderedImage::DynamicResourceAlloc(bool bOnOff)
  59. {
  60. m_borderImage.DynamicResourceAlloc(bOnOff);
  61. CGUIImage::DynamicResourceAlloc(bOnOff);
  62. }