mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 03:56:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef OPENMW_LUAUI_LAYERS
 | 
						|
#define OPENMW_LUAUI_LAYERS
 | 
						|
 | 
						|
#include <string>
 | 
						|
#include <string_view>
 | 
						|
 | 
						|
#include <MyGUI_LayerManager.h>
 | 
						|
#include <MyGUI_OverlappedLayer.h>
 | 
						|
#include <osg/Vec2f>
 | 
						|
 | 
						|
namespace LuaUi
 | 
						|
{
 | 
						|
    // this wrapper is necessary, because the MyGUI LayerManager
 | 
						|
    // stores layers in a vector and their indices could change
 | 
						|
    class Layer
 | 
						|
    {
 | 
						|
    public:
 | 
						|
        Layer(size_t index)
 | 
						|
            : mName(at(index)->getName())
 | 
						|
            , mCachedIndex(index)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        const std::string& name() const noexcept { return mName; }
 | 
						|
        const osg::Vec2f size()
 | 
						|
        {
 | 
						|
            MyGUI::ILayer* p = refresh();
 | 
						|
            MyGUI::IntSize size = p->getSize();
 | 
						|
            return osg::Vec2f(size.width, size.height);
 | 
						|
        }
 | 
						|
 | 
						|
        struct Options
 | 
						|
        {
 | 
						|
            bool mInteractive;
 | 
						|
        };
 | 
						|
 | 
						|
        static size_t count() { return MyGUI::LayerManager::getInstance().getLayerCount(); }
 | 
						|
 | 
						|
        static size_t indexOf(std::string_view name);
 | 
						|
 | 
						|
        static void insert(size_t index, std::string_view name, Options options);
 | 
						|
 | 
						|
    private:
 | 
						|
        static MyGUI::ILayer* at(size_t index)
 | 
						|
        {
 | 
						|
            if (index >= count())
 | 
						|
                throw std::logic_error("Invalid layer index");
 | 
						|
            return MyGUI::LayerManager::getInstance().getLayer(index);
 | 
						|
        }
 | 
						|
 | 
						|
        MyGUI::ILayer* refresh()
 | 
						|
        {
 | 
						|
            MyGUI::ILayer* p = at(mCachedIndex);
 | 
						|
            if (p->getName() != mName)
 | 
						|
            {
 | 
						|
                mCachedIndex = indexOf(mName);
 | 
						|
                p = at(mCachedIndex);
 | 
						|
            }
 | 
						|
            return p;
 | 
						|
        }
 | 
						|
        std::string mName;
 | 
						|
        size_t mCachedIndex;
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
#endif // OPENMW_LUAUI_LAYERS
 |