diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /xbmc/guilib/GUIListLabel.cpp | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/guilib/GUIListLabel.cpp')
-rw-r--r-- | xbmc/guilib/GUIListLabel.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/xbmc/guilib/GUIListLabel.cpp b/xbmc/guilib/GUIListLabel.cpp new file mode 100644 index 0000000..b3138eb --- /dev/null +++ b/xbmc/guilib/GUIListLabel.cpp @@ -0,0 +1,106 @@ +/* + * 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 "GUIListLabel.h" + +#include "addons/Skin.h" + +#include <limits> + +using namespace KODI::GUILIB; + +CGUIListLabel::CGUIListLabel(int parentID, int controlID, float posX, float posY, float width, float height, + const CLabelInfo& labelInfo, const GUIINFO::CGUIInfoLabel &info, CGUIControl::GUISCROLLVALUE scroll) + : CGUIControl(parentID, controlID, posX, posY, width, height) + , m_label(posX, posY, width, height, labelInfo, (scroll == CGUIControl::ALWAYS) ? CGUILabel::OVER_FLOW_SCROLL : CGUILabel::OVER_FLOW_TRUNCATE) + , m_info(info) +{ + m_scroll = scroll; + if (m_info.IsConstant()) + SetLabel(m_info.GetLabel(m_parentID, true)); + m_label.SetScrollLoopCount(2); + ControlType = GUICONTROL_LISTLABEL; +} + +CGUIListLabel::~CGUIListLabel(void) = default; + +void CGUIListLabel::SetSelected(bool selected) +{ + if(m_label.SetColor(selected ? CGUILabel::COLOR_SELECTED : CGUILabel::COLOR_TEXT)) + SetInvalid(); +} + +void CGUIListLabel::SetFocus(bool focus) +{ + CGUIControl::SetFocus(focus); + if (m_scroll == CGUIControl::FOCUS) + { + m_label.SetScrolling(focus); + } +} + +CRect CGUIListLabel::CalcRenderRegion() const +{ + return m_label.GetRenderRect(); +} + +bool CGUIListLabel::UpdateColors(const CGUIListItem* item) +{ + bool changed = CGUIControl::UpdateColors(nullptr); + changed |= m_label.UpdateColors(); + + return changed; +} + +void CGUIListLabel::Process(unsigned int currentTime, CDirtyRegionList &dirtyregions) +{ + if (m_label.Process(currentTime)) + MarkDirtyRegion(); + + CGUIControl::Process(currentTime, dirtyregions); +} + +void CGUIListLabel::Render() +{ + m_label.Render(); + CGUIControl::Render(); +} + +void CGUIListLabel::UpdateInfo(const CGUIListItem *item) +{ + if (m_info.IsConstant() && !m_bInvalidated) + return; // nothing to do + + if (item) + SetLabel(m_info.GetItemLabel(item)); + else + SetLabel(m_info.GetLabel(m_parentID, true)); +} + +void CGUIListLabel::SetInvalid() +{ + m_label.SetInvalid(); + CGUIControl::SetInvalid(); +} + +void CGUIListLabel::SetWidth(float width) +{ + m_width = width; + if (m_label.GetLabelInfo().align & XBFONT_RIGHT) + m_label.SetMaxRect(m_posX - m_width, m_posY, m_width, m_height); + else if (m_label.GetLabelInfo().align & XBFONT_CENTER_X) + m_label.SetMaxRect(m_posX - m_width*0.5f, m_posY, m_width, m_height); + else + m_label.SetMaxRect(m_posX, m_posY, m_width, m_height); + CGUIControl::SetWidth(m_width); +} + +void CGUIListLabel::SetLabel(const std::string &label) +{ + m_label.SetText(label); +} |