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