mirror of https://github.com/AxioDL/metaforce.git
Icon integration
This commit is contained in:
parent
334a7875c1
commit
9f08984d1f
|
@ -1,6 +1,7 @@
|
|||
#include "Space.hpp"
|
||||
#include "ViewManager.hpp"
|
||||
#include "ResourceBrowser.hpp"
|
||||
#include "icons/icons.hpp"
|
||||
|
||||
namespace URDE
|
||||
{
|
||||
|
@ -19,8 +20,11 @@ Specter::View* Space::buildSpaceView(Specter::ViewResources& res)
|
|||
m_spaceView->setContentView(sview);
|
||||
Specter::Toolbar& tb = *m_spaceView->toolbar();
|
||||
const std::string* classStr = SpaceMenuNode::lookupClassString(m_class);
|
||||
m_spaceSelectButton.reset(new Specter::Button(res, tb, &m_spaceSelectBind,
|
||||
classStr?*classStr:"Unknown Class"));
|
||||
Specter::Icon* classIcon = SpaceMenuNode::lookupClassIcon(m_class);
|
||||
const Zeus::CColor* classColor = SpaceMenuNode::lookupClassColor(m_class);
|
||||
m_spaceSelectButton.reset(new Specter::Button(res, tb, &m_spaceSelectBind, "", classIcon,
|
||||
Specter::Button::Style::Block,
|
||||
classColor?*classColor:Zeus::CColor::skWhite));
|
||||
tb.push_back(m_spaceSelectButton.get());
|
||||
buildToolbarView(res, tb);
|
||||
return m_spaceView.get();
|
||||
|
@ -36,7 +40,7 @@ Specter::View* Space::buildSpaceView(Specter::ViewResources& res)
|
|||
|
||||
std::vector<Space::SpaceMenuNode::SubNodeData> Space::SpaceMenuNode::s_subNodeDats =
|
||||
{
|
||||
{Class::ResourceBrowser, "resource_browser", "Resource Browser"}
|
||||
{Class::ResourceBrowser, "resource_browser", "Resource Browser", GetIcon(SpaceIcon::ResourceBrowser), {0.0,1.0,0.0,1.0}}
|
||||
};
|
||||
std::string Space::SpaceMenuNode::s_text = "Space Types";
|
||||
|
||||
|
|
|
@ -46,11 +46,13 @@ public:
|
|||
Class m_cls;
|
||||
std::string m_key;
|
||||
std::string m_text;
|
||||
Specter::Icon& m_icon;
|
||||
Zeus::CColor m_color;
|
||||
const std::string* text() const {return &m_text;}
|
||||
void activated(const boo::SWindowCoord& coord) {}
|
||||
|
||||
SubNodeData(Class cls, const char* key, const char* text)
|
||||
: m_cls(cls), m_key(key), m_text(text) {}
|
||||
SubNodeData(Class cls, const char* key, const char* text, Specter::Icon& icon, const Zeus::CColor& color)
|
||||
: m_cls(cls), m_key(key), m_text(text), m_icon(icon), m_color(color) {}
|
||||
};
|
||||
static std::vector<SubNodeData> s_subNodeDats;
|
||||
|
||||
|
@ -86,6 +88,20 @@ public:
|
|||
return &sn.m_text;
|
||||
return nullptr;
|
||||
}
|
||||
static Specter::Icon* lookupClassIcon(Class cls)
|
||||
{
|
||||
for (SubNodeData& sn : s_subNodeDats)
|
||||
if (sn.m_cls == cls)
|
||||
return &sn.m_icon;
|
||||
return nullptr;
|
||||
}
|
||||
static const Zeus::CColor* lookupClassColor(Class cls)
|
||||
{
|
||||
for (SubNodeData& sn : s_subNodeDats)
|
||||
if (sn.m_cls == cls)
|
||||
return &sn.m_color;
|
||||
return nullptr;
|
||||
}
|
||||
} m_spaceMenuNode;
|
||||
|
||||
struct SpaceSelectBind : Specter::IButtonBinding
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "SplashScreen.hpp"
|
||||
#include "locale/locale.hpp"
|
||||
#include "ResourceBrowser.hpp"
|
||||
#include "icons/icons.hpp"
|
||||
#include <cstdio>
|
||||
|
||||
using YAMLNode = Athena::io::YAMLNode;
|
||||
|
@ -158,6 +159,7 @@ void ViewManager::init(boo::IApplication* app)
|
|||
|
||||
boo::IGraphicsDataFactory* gf = m_mainWindow->getMainContextDataFactory();
|
||||
m_viewResources.init(gf, &m_fontCache, &m_themeData, pixelFactor);
|
||||
m_iconsToken = InitializeIcons(m_viewResources);
|
||||
m_viewResources.prepFontCacheAsync(m_mainWindow.get());
|
||||
Specter::RootView* root = SetupRootView();
|
||||
m_showSplash = true;
|
||||
|
|
|
@ -21,6 +21,7 @@ class ViewManager : public Specter::IViewManager
|
|||
Specter::FontCache m_fontCache;
|
||||
Specter::DefaultThemeData m_themeData;
|
||||
Specter::ViewResources m_viewResources;
|
||||
boo::GraphicsDataToken m_iconsToken;
|
||||
Specter::Translator m_translator;
|
||||
std::unique_ptr<boo::IWindow> m_mainWindow;
|
||||
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
#include "icons.hpp"
|
||||
#include "Athena/MemoryReader.hpp"
|
||||
#include <zlib.h>
|
||||
|
||||
extern "C" uint8_t URDE_ICONS[];
|
||||
extern "C" size_t URDE_ICONS_SZ;
|
||||
|
||||
namespace URDE
|
||||
{
|
||||
static LogVisor::LogModule Log("URDE::icons");
|
||||
|
||||
Specter::IconAtlas<8,8> g_IconAtlas;
|
||||
|
||||
boo::GraphicsDataToken InitializeIcons(Specter::ViewResources& viewRes)
|
||||
{
|
||||
Athena::io::MemoryReader r(URDE_ICONS, URDE_ICONS_SZ);
|
||||
size_t fmt = r.readUint32Big();
|
||||
if (fmt != 16)
|
||||
Log.report(LogVisor::FatalError, "incorrect icon texture format");
|
||||
size_t width = r.readUint16Big();
|
||||
size_t height = r.readUint16Big();
|
||||
size_t mips = r.readUint32Big();
|
||||
size_t decompSz = r.readUint32Big();
|
||||
|
||||
std::unique_ptr<uint8_t[]> texels(new uint8_t[decompSz]);
|
||||
uLongf destSz = decompSz;
|
||||
size_t pos = r.position();
|
||||
if (uncompress(texels.get(), &destSz, URDE_ICONS + pos, URDE_ICONS_SZ - pos) != Z_OK)
|
||||
Log.report(LogVisor::FatalError, "unable to decompress icons");
|
||||
|
||||
g_IconAtlas.initializeAtlas(viewRes.m_factory->newStaticTexture(width, height, mips, boo::TextureFormat::RGBA8,
|
||||
std::move(texels), destSz));
|
||||
return viewRes.m_factory->commit();
|
||||
}
|
||||
|
||||
Specter::Icon& GetIcon(SpaceIcon icon)
|
||||
{
|
||||
switch (icon)
|
||||
{
|
||||
case SpaceIcon::ResourceBrowser:
|
||||
return g_IconAtlas.getIcon(0, 0);
|
||||
case SpaceIcon::ParticleEditor:
|
||||
return g_IconAtlas.getIcon(0, 1);
|
||||
case SpaceIcon::WorldEditor:
|
||||
return g_IconAtlas.getIcon(0, 2);
|
||||
case SpaceIcon::InformationCenter:
|
||||
return g_IconAtlas.getIcon(0, 3);
|
||||
}
|
||||
}
|
||||
|
||||
Specter::Icon& GetIcon(MonoIcon icon)
|
||||
{
|
||||
switch (icon)
|
||||
{
|
||||
case MonoIcon::Sync:
|
||||
return g_IconAtlas.getIcon(7, 0);
|
||||
case MonoIcon::Edit:
|
||||
return g_IconAtlas.getIcon(7, 1);
|
||||
case MonoIcon::Caution:
|
||||
return g_IconAtlas.getIcon(7, 2);
|
||||
case MonoIcon::Save:
|
||||
return g_IconAtlas.getIcon(7, 3);
|
||||
case MonoIcon::Filter:
|
||||
return g_IconAtlas.getIcon(7, 4);
|
||||
case MonoIcon::Document:
|
||||
return g_IconAtlas.getIcon(7, 5);
|
||||
case MonoIcon::ZoomOut:
|
||||
return g_IconAtlas.getIcon(7, 6);
|
||||
case MonoIcon::ZoomIn:
|
||||
return g_IconAtlas.getIcon(7, 7);
|
||||
case MonoIcon::Exclaim:
|
||||
return g_IconAtlas.getIcon(6, 0);
|
||||
case MonoIcon::Clock:
|
||||
return g_IconAtlas.getIcon(6, 1);
|
||||
case MonoIcon::Gamepad:
|
||||
return g_IconAtlas.getIcon(6, 2);
|
||||
case MonoIcon::Unlink:
|
||||
return g_IconAtlas.getIcon(6, 3);
|
||||
case MonoIcon::Link:
|
||||
return g_IconAtlas.getIcon(6, 4);
|
||||
case MonoIcon::Folder:
|
||||
return g_IconAtlas.getIcon(6, 5);
|
||||
case MonoIcon::Info:
|
||||
return g_IconAtlas.getIcon(6, 6);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
#ifndef URDE_ICONS_HPP
|
||||
#define URDE_ICONS_HPP
|
||||
|
||||
#include "Specter/Icon.hpp"
|
||||
#include "Specter/ViewResources.hpp"
|
||||
|
||||
namespace URDE
|
||||
{
|
||||
boo::GraphicsDataToken InitializeIcons(Specter::ViewResources& viewRes);
|
||||
|
||||
enum class SpaceIcon
|
||||
{
|
||||
ResourceBrowser,
|
||||
ParticleEditor,
|
||||
WorldEditor,
|
||||
InformationCenter
|
||||
};
|
||||
Specter::Icon& GetIcon(SpaceIcon icon);
|
||||
|
||||
enum class MonoIcon
|
||||
{
|
||||
Sync,
|
||||
Edit,
|
||||
Caution,
|
||||
Save,
|
||||
Filter,
|
||||
Document,
|
||||
ZoomOut,
|
||||
ZoomIn,
|
||||
|
||||
Exclaim,
|
||||
Clock,
|
||||
Gamepad,
|
||||
Unlink,
|
||||
Link,
|
||||
Folder,
|
||||
Info
|
||||
};
|
||||
Specter::Icon& GetIcon(MonoIcon icon);
|
||||
|
||||
}
|
||||
|
||||
#endif // URDE_ICONS_HPP
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 42 KiB |
|
@ -137,9 +137,13 @@ int main(int argc, char* argv[])
|
|||
return 1;
|
||||
}
|
||||
|
||||
size_t decompSz = 0;
|
||||
int numMips = 0;
|
||||
for (int i=512 ; i>=1 ; i/=2)
|
||||
{
|
||||
decompSz += i*i*4;
|
||||
++numMips;
|
||||
}
|
||||
|
||||
z_stream z = {0};
|
||||
size_t rowSz = 0;
|
||||
|
@ -282,10 +286,12 @@ int main(int argc, char* argv[])
|
|||
uint16_t w = _bswap16(width);
|
||||
uint16_t h = _bswap16(height);
|
||||
uint32_t mips = _bswap32(numMips);
|
||||
uint32_t dsz = _bswap32(decompSz);
|
||||
fwrite(&fmt, 1, 4, ofp);
|
||||
fwrite(&w, 1, 2, ofp);
|
||||
fwrite(&h, 1, 2, ofp);
|
||||
fwrite(&mips, 1, 4, ofp);
|
||||
fwrite(&dsz, 1, 4, ofp);
|
||||
|
||||
rowSz = width*4;
|
||||
rowSzC = compressBound(rowSz);
|
||||
|
@ -299,12 +305,15 @@ int main(int argc, char* argv[])
|
|||
png_read_row(pngRead, row, NULL);
|
||||
z.next_in = row;
|
||||
z.avail_in = rowSz;
|
||||
while (z.avail_in)
|
||||
{
|
||||
z.next_out = rowC;
|
||||
z.avail_out = rowSzC;
|
||||
z.total_out = 0;
|
||||
deflate(&z, Z_NO_FLUSH);
|
||||
fwrite(rowC, 1, z.total_out, ofp);
|
||||
}
|
||||
}
|
||||
rowSz /= 2;
|
||||
|
||||
png_destroy_read_struct(&pngRead, &info, NULL);
|
||||
|
|
2
hecl
2
hecl
|
@ -1 +1 @@
|
|||
Subproject commit 7978e31e6fbbbd45915c2684ee0fb1a376020255
|
||||
Subproject commit 30dd74476e59bcba3717dddb9ead6a26523d3a39
|
|
@ -1 +1 @@
|
|||
Subproject commit cd54225b2af5cd2978b0ad3fab10561693fc54b2
|
||||
Subproject commit 5ee63587e2f7c2b7b015ff9e1752606b3f5fe3cd
|
Loading…
Reference in New Issue