Initial icon API additions

This commit is contained in:
Jack Andersen 2016-01-17 14:37:13 -10:00
parent 17c036e78f
commit 9230ccdabd
6 changed files with 56 additions and 41 deletions

View File

@ -22,6 +22,7 @@ private:
Zeus::CColor m_textColor; Zeus::CColor m_textColor;
std::string m_textStr; std::string m_textStr;
std::unique_ptr<TextView> m_text; std::unique_ptr<TextView> m_text;
boo::ITexture* m_icon = nullptr;
SolidShaderVert m_verts[40]; SolidShaderVert m_verts[40];
VertexBufferBinding m_vertsBinding; VertexBufferBinding m_vertsBinding;
@ -83,11 +84,11 @@ public:
~Button() {closeMenu({});} ~Button() {closeMenu({});}
Button(ViewResources& res, View& parentView, Button(ViewResources& res, View& parentView,
IButtonBinding* controlBinding, const std::string& text, IButtonBinding* controlBinding, const std::string& text, boo::ITexture* icon=nullptr,
Style style=Style::Block, RectangleConstraint constraint=RectangleConstraint()); Style style=Style::Block, RectangleConstraint constraint=RectangleConstraint());
Button(ViewResources& res, View& parentView, Button(ViewResources& res, View& parentView,
IButtonBinding* controlBinding, const std::string& text, IButtonBinding* controlBinding, const std::string& text, const Zeus::CColor& textColor,
const Zeus::CColor& textColor, Style style=Style::Block, boo::ITexture* icon=nullptr, Style style=Style::Block,
RectangleConstraint constraint=RectangleConstraint()); RectangleConstraint constraint=RectangleConstraint());
void mouseDown(const boo::SWindowCoord&, boo::EMouseButton, boo::EModifierKey); void mouseDown(const boo::SWindowCoord&, boo::EMouseButton, boo::EModifierKey);
void mouseUp(const boo::SWindowCoord&, boo::EMouseButton, boo::EModifierKey); void mouseUp(const boo::SWindowCoord&, boo::EMouseButton, boo::EModifierKey);
@ -99,6 +100,7 @@ public:
void setText(const std::string& text, const Zeus::CColor& textColor); void setText(const std::string& text, const Zeus::CColor& textColor);
void setText(const std::string& text); void setText(const std::string& text);
void setIcon(boo::ITexture* icon);
const std::string& getText() const {return m_textStr;} const std::string& getText() const {return m_textStr;}
void colorGlyphs(const Zeus::CColor& newColor); void colorGlyphs(const Zeus::CColor& newColor);
int nominalWidth() const {return m_nomWidth;} int nominalWidth() const {return m_nomWidth;}

View File

@ -63,7 +63,7 @@ private:
OKButton(FileBrowser& fb, ViewResources& res, const std::string& text) OKButton(FileBrowser& fb, ViewResources& res, const std::string& text)
: m_fb(fb), m_text(text) : m_fb(fb), m_text(text)
{ {
m_button.m_view.reset(new Button(res, fb, this, text, Button::Style::Block, m_button.m_view.reset(new Button(res, fb, this, text, nullptr, Button::Style::Block,
RectangleConstraint(100 * res.pixelFactor(), -1, RectangleConstraint::Test::Minimum))); RectangleConstraint(100 * res.pixelFactor(), -1, RectangleConstraint::Test::Minimum)));
} }
const char* name(const Control* control) const {return m_text.c_str();} const char* name(const Control* control) const {return m_text.c_str();}
@ -79,7 +79,7 @@ private:
CancelButton(FileBrowser& fb, ViewResources& res, const std::string& text) CancelButton(FileBrowser& fb, ViewResources& res, const std::string& text)
: m_fb(fb), m_text(text) : m_fb(fb), m_text(text)
{ {
m_button.m_view.reset(new Button(res, fb, this, text, Button::Style::Block, m_button.m_view.reset(new Button(res, fb, this, text, nullptr, Button::Style::Block,
RectangleConstraint(m_fb.m_ok.m_button.m_view->nominalWidth(), -1, RectangleConstraint::Test::Minimum))); RectangleConstraint(m_fb.m_ok.m_button.m_view->nominalWidth(), -1, RectangleConstraint::Test::Minimum)));
} }
const char* name(const Control* control) const {return m_text.c_str();} const char* name(const Control* control) const {return m_text.c_str();}

View File

@ -147,20 +147,9 @@ public:
} }
}; };
static FCharFilter const AllCharFilter = extern const FCharFilter AllCharFilter;
std::make_pair("all-glyphs", [](uint32_t)->bool extern const FCharFilter LatinCharFilter;
{return true;}); extern const FCharFilter LatinAndJapaneseCharFilter;
static FCharFilter const LatinCharFilter =
std::make_pair("latin-glyphs", [](uint32_t c)->bool
{return c <= 0xff || ((c - 0x2200) <= (0x23FF - 0x2200));});
static FCharFilter const LatinAndJapaneseCharFilter =
std::make_pair("latin-and-jp-glyphs", [](uint32_t c)->bool
{return LatinCharFilter.second(c) ||
((c - 0x2E00) <= (0x30FF - 0x2E00)) ||
((c - 0x4E00) <= (0x9FFF - 0x4E00)) ||
((c - 0xFF00) <= (0xFFEF - 0xFF00));});
class FontCache class FontCache
{ {

View File

@ -12,16 +12,15 @@ void Button::Resources::init(boo::IGraphicsDataFactory* factory, const IThemeDat
} }
Button::Button(ViewResources& res, View& parentView, Button::Button(ViewResources& res, View& parentView,
IButtonBinding* controlBinding, const std::string& text, IButtonBinding* controlBinding, const std::string& text, boo::ITexture* icon,
Style style, RectangleConstraint constraint) Style style, RectangleConstraint constraint)
: Button(res, parentView, controlBinding, text, res.themeData().uiText(), style, constraint) {} : Button(res, parentView, controlBinding, text, res.themeData().uiText(), icon, style, constraint) {}
Button::Button(ViewResources& res, View& parentView, Button::Button(ViewResources& res, View& parentView,
IButtonBinding* controlBinding, const std::string& text, IButtonBinding* controlBinding, const std::string& text, const Zeus::CColor& textColor,
const Zeus::CColor& textColor, Style style, boo::ITexture* icon, Style style, RectangleConstraint constraint)
RectangleConstraint constraint)
: Control(res, parentView, controlBinding), : Control(res, parentView, controlBinding),
m_style(style), m_textColor(textColor), m_textStr(text), m_constraint(constraint) m_style(style), m_textColor(textColor), m_textStr(text), m_icon(icon), m_constraint(constraint)
{ {
m_vertsBinding.initSolid(res, 40, m_viewVertBlockBuf); m_vertsBinding.initSolid(res, 40, m_viewVertBlockBuf);
commitResources(res); commitResources(res);
@ -89,7 +88,9 @@ void Button::setText(const std::string& text, const Zeus::CColor& textColor)
m_verts[4].m_pos.assign(width+1, 1, 0); m_verts[4].m_pos.assign(width+1, 1, 0);
m_textWidth = width; m_textWidth = width;
if (m_menuStyle != IButtonBinding::MenuStyle::None) if (m_menuStyle == IButtonBinding::MenuStyle::Primary)
width += 12*pf;
else if (m_menuStyle == IButtonBinding::MenuStyle::Auxiliary)
width += 16*pf; width += 16*pf;
m_verts[5].m_pos.assign(1, height+1, 0); m_verts[5].m_pos.assign(1, height+1, 0);
@ -121,12 +122,19 @@ void Button::setText(const std::string& text, const Zeus::CColor& textColor)
int arrowX = m_textWidth + 5*pf; int arrowX = m_textWidth + 5*pf;
int arrowY = 7*pf; int arrowY = 7*pf;
int menuBgX = m_textWidth;
if (m_menuStyle == IButtonBinding::MenuStyle::Primary)
{
menuBgX = 0;
arrowX -= 5*pf;
}
m_verts[28].m_pos.assign(arrowX + 4*pf, arrowY + 1*pf, 0); m_verts[28].m_pos.assign(arrowX + 4*pf, arrowY + 1*pf, 0);
m_verts[29].m_pos.assign(arrowX, arrowY + 5*pf, 0); m_verts[29].m_pos.assign(arrowX, arrowY + 5*pf, 0);
m_verts[30].m_pos.assign(arrowX + 8*pf, arrowY + 5*pf, 0); m_verts[30].m_pos.assign(arrowX + 8*pf, arrowY + 5*pf, 0);
m_verts[31].m_pos.assign(m_textWidth+1, height+1, 0); m_verts[31].m_pos.assign(menuBgX+1, height+1, 0);
m_verts[32].m_pos.assign(m_textWidth+1, 1, 0); m_verts[32].m_pos.assign(menuBgX+1, 1, 0);
m_verts[33].m_pos.assign(width+1, height+1, 0); m_verts[33].m_pos.assign(width+1, height+1, 0);
m_verts[34].m_pos.assign(width+1, 1, 0); m_verts[34].m_pos.assign(width+1, 1, 0);
@ -547,6 +555,7 @@ void Button::draw(boo::IGraphicsCommandQueue* gfxQ)
{ {
gfxQ->draw(31, 4); gfxQ->draw(31, 4);
gfxQ->draw(28, 3); gfxQ->draw(28, 3);
if (m_menuStyle == IButtonBinding::MenuStyle::Auxiliary)
gfxQ->draw(35, 4); gfxQ->draw(35, 4);
} }
} }

View File

@ -30,6 +30,21 @@ namespace Specter
{ {
static LogVisor::LogModule Log("Specter::FontCache"); static LogVisor::LogModule Log("Specter::FontCache");
const FCharFilter AllCharFilter =
std::make_pair("all-glyphs", [](uint32_t)->bool
{return true;});
const FCharFilter LatinCharFilter =
std::make_pair("latin-glyphs", [](uint32_t c)->bool
{return c <= 0xff || ((c - 0x2200) <= (0x23FF - 0x2200));});
const FCharFilter LatinAndJapaneseCharFilter =
std::make_pair("latin-and-jp-glyphs", [](uint32_t c)->bool
{return LatinCharFilter.second(c) ||
((c - 0x2E00) <= (0x30FF - 0x2E00)) ||
((c - 0x4E00) <= (0x9FFF - 0x4E00)) ||
((c - 0xFF00) <= (0xFFEF - 0xFF00));});
FontTag::FontTag(const std::string& name, bool subpixel, float points, uint32_t dpi) FontTag::FontTag(const std::string& name, bool subpixel, float points, uint32_t dpi)
{ {
XXH64_state_t st; XXH64_state_t st;

View File

@ -21,10 +21,10 @@ MessageWindow::MessageWindow(ViewResources& res, View& parentView,
m_text->typesetGlyphs(message, res.themeData().uiText(), 380 * res.pixelFactor()); m_text->typesetGlyphs(message, res.themeData().uiText(), 380 * res.pixelFactor());
constraint() = RectangleConstraint(400 * res.pixelFactor(), 80 * res.pixelFactor() + m_text->nominalHeight()); constraint() = RectangleConstraint(400 * res.pixelFactor(), 80 * res.pixelFactor() + m_text->nominalHeight());
m_ok.m_view.reset(new Button(res, *this, &m_okBind, m_okBind.m_name, m_ok.m_view.reset(new Button(res, *this, &m_okBind, m_okBind.m_name, nullptr,
Button::Style::Block, RectangleConstraint(150 * res.pixelFactor()))); Button::Style::Block, RectangleConstraint(150 * res.pixelFactor())));
if (type == Type::ConfirmOkCancel) if (type == Type::ConfirmOkCancel)
m_cancel.m_view.reset(new Button(res, *this, &m_cancelBind, m_cancelBind.m_name, m_cancel.m_view.reset(new Button(res, *this, &m_cancelBind, m_cancelBind.m_name, nullptr,
Button::Style::Block, RectangleConstraint(150 * res.pixelFactor()))); Button::Style::Block, RectangleConstraint(150 * res.pixelFactor())));
updateContentOpacity(0.0); updateContentOpacity(0.0);