mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 21:34:08 -07:00
Some checks failed
checkrefs / lfscheck (push) Has been cancelled
checkrefs / checkrefs (push) Has been cancelled
lint / cppcheck (push) Has been cancelled
lint / copyright (push) Has been cancelled
lint / jenkinsfiles (push) Has been cancelled
pre-commit / build (push) Has been cancelled
This shifts the responsibility of updating the actual size more towards IGUIObject, and enables only ever doing it when the value is actually needed. This allows us to remove the delay of size changed notifications, since the value is now already recalculated as infrequently as possible anyways. All of that ensures that the actual size (returned by GetActualSize) is always up-to-date e.g. when reading it from the parent, which was previously broken. Fixes #8200
99 lines
2.3 KiB
C++
99 lines
2.3 KiB
C++
/* Copyright (C) 2026 Wildfire Games.
|
|
* This file is part of 0 A.D.
|
|
*
|
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* 0 A.D. is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef INCLUDED_IGUISCROLLBAROWNER
|
|
#define INCLUDED_IGUISCROLLBAROWNER
|
|
|
|
#include "lib/code_annotation.h"
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
class CCanvas2D;
|
|
class CStr8;
|
|
class IGUIObject;
|
|
class IGUIScrollBar;
|
|
struct SGUIMessage;
|
|
struct SGUIScrollBarStyle;
|
|
|
|
/**
|
|
* Base-class this if you want an object to contain
|
|
* one, or several, scroll-bars.
|
|
*/
|
|
class IGUIScrollBarOwner
|
|
{
|
|
NONCOPYABLE(IGUIScrollBarOwner);
|
|
|
|
friend class IGUIScrollBar;
|
|
|
|
public:
|
|
IGUIScrollBarOwner(IGUIObject& m_pObject);
|
|
virtual ~IGUIScrollBarOwner();
|
|
|
|
virtual void Draw(CCanvas2D& canvas);
|
|
|
|
/**
|
|
* @see IGUIObject#HandleMessage()
|
|
*/
|
|
virtual void HandleMessage(SGUIMessage& Message);
|
|
|
|
/**
|
|
* @see IGUIObject#ResetStates()
|
|
*/
|
|
virtual void ResetStates();
|
|
|
|
/**
|
|
* Interface for the m_ScrollBar to use.
|
|
*/
|
|
virtual const SGUIScrollBarStyle* GetScrollBarStyle(const CStr8& style) const;
|
|
|
|
/**
|
|
* Add a scroll-bar
|
|
*/
|
|
virtual void AddScrollBar(std::unique_ptr<IGUIScrollBar> scrollbar);
|
|
|
|
/**
|
|
* Get Scroll Bar reference (it should be transparent it's actually
|
|
* pointers).
|
|
*/
|
|
virtual IGUIScrollBar& GetScrollBar(const int& index) const
|
|
{
|
|
return *m_ScrollBars[index];
|
|
}
|
|
|
|
/**
|
|
* Get the position of the scroll bar at @param index.
|
|
* Equivalent to GetScrollbar(index).GetPos().
|
|
*/
|
|
virtual float GetScrollBarPos(const int index) const;
|
|
|
|
protected:
|
|
/**
|
|
* Predominately you will only have one, but you can have
|
|
* as many as you like.
|
|
*/
|
|
std::vector<std::unique_ptr<IGUIScrollBar>> m_ScrollBars;
|
|
|
|
private:
|
|
/**
|
|
* Reference to the IGUIObject.
|
|
* Private, because we don't want to inherit it in multiple classes.
|
|
*/
|
|
IGUIObject& m_pObject;
|
|
};
|
|
|
|
#endif // INCLUDED_IGUISCROLLBAROWNER
|