mirror of https://github.com/AxioDL/metaforce.git
Humungous refactor
This commit is contained in:
parent
2c9dcbd50f
commit
f467cf019c
|
@ -1,7 +1,7 @@
|
||||||
add_subdirectory(freetype2)
|
add_subdirectory(freetype2)
|
||||||
add_definitions("-DZE_ATHENA_TYPES=1")
|
add_definitions("-DZE_ATHENA_TYPES=1")
|
||||||
add_subdirectory(MathLib)
|
add_subdirectory(zeus)
|
||||||
set(MATHLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MathLib/include)
|
set(ZEUS_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zeus/include)
|
||||||
|
|
||||||
if(NOT DEFINED HECL_INCLUDE_DIR)
|
if(NOT DEFINED HECL_INCLUDE_DIR)
|
||||||
message(FATAL_ERROR "Specter may only be built as a sub-project containing hecl with
|
message(FATAL_ERROR "Specter may only be built as a sub-project containing hecl with
|
||||||
|
@ -18,55 +18,55 @@ if(NOT DEFINED ATHENA_INCLUDE_DIR)
|
||||||
ATHENA_INCLUDE_DIR set")
|
ATHENA_INCLUDE_DIR set")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT DEFINED LOG_VISOR_INCLUDE_DIR)
|
if(NOT DEFINED LOGVISOR_INCLUDE_DIR)
|
||||||
message(FATAL_ERROR "Specter may only be built as a sub-project containing LogVisor with
|
message(FATAL_ERROR "Specter may only be built as a sub-project containing logvisor with
|
||||||
LOG_VISOR_INCLUDE_DIR set")
|
LOGVISOR_INCLUDE_DIR set")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(resources/fonts)
|
add_subdirectory(resources/fonts)
|
||||||
|
|
||||||
include_directories(include ${HECL_INCLUDE_DIR} ${BOO_INCLUDE_DIR}
|
include_directories(include ${HECL_INCLUDE_DIR} ${BOO_INCLUDE_DIR}
|
||||||
${LOG_VISOR_INCLUDE_DIR} ${ATHENA_INCLUDE_DIR}
|
${LOGVISOR_INCLUDE_DIR} ${ATHENA_INCLUDE_DIR}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/freetype2/include
|
${CMAKE_CURRENT_SOURCE_DIR}/freetype2/include
|
||||||
${MATHLIB_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
|
${ZEUS_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
|
||||||
|
|
||||||
list(APPEND SPECTER_HEADERS
|
list(APPEND SPECTER_HEADERS
|
||||||
include/Specter/Specter.hpp
|
include/specter/specter.hpp
|
||||||
include/Specter/ViewResources.hpp
|
include/specter/ViewResources.hpp
|
||||||
include/Specter/IViewManager.hpp
|
include/specter/IViewManager.hpp
|
||||||
include/Specter/DeferredWindowEvents.hpp
|
include/specter/DeferredWindowEvents.hpp
|
||||||
include/Specter/View.hpp
|
include/specter/View.hpp
|
||||||
include/Specter/RootView.hpp
|
include/specter/RootView.hpp
|
||||||
include/Specter/ModalWindow.hpp
|
include/specter/ModalWindow.hpp
|
||||||
include/Specter/MessageWindow.hpp
|
include/specter/MessageWindow.hpp
|
||||||
include/Specter/Tooltip.hpp
|
include/specter/Tooltip.hpp
|
||||||
include/Specter/SplitView.hpp
|
include/specter/SplitView.hpp
|
||||||
include/Specter/ScrollView.hpp
|
include/specter/ScrollView.hpp
|
||||||
include/Specter/TextView.hpp
|
include/specter/TextView.hpp
|
||||||
include/Specter/MultiLineTextView.hpp
|
include/specter/MultiLineTextView.hpp
|
||||||
include/Specter/Space.hpp
|
include/specter/Space.hpp
|
||||||
include/Specter/Toolbar.hpp
|
include/specter/Toolbar.hpp
|
||||||
include/Specter/Table.hpp
|
include/specter/Table.hpp
|
||||||
include/Specter/Outliner.hpp
|
include/specter/Outliner.hpp
|
||||||
include/Specter/Panel.hpp
|
include/specter/Panel.hpp
|
||||||
include/Specter/Control.hpp
|
include/specter/Control.hpp
|
||||||
include/Specter/Button.hpp
|
include/specter/Button.hpp
|
||||||
include/Specter/TextField.hpp
|
include/specter/TextField.hpp
|
||||||
include/Specter/NumericField.hpp
|
include/specter/NumericField.hpp
|
||||||
include/Specter/Menu.hpp
|
include/specter/Menu.hpp
|
||||||
include/Specter/IMenuNode.hpp
|
include/specter/IMenuNode.hpp
|
||||||
include/Specter/Node.hpp
|
include/specter/Node.hpp
|
||||||
include/Specter/NodeSocket.hpp
|
include/specter/NodeSocket.hpp
|
||||||
include/Specter/PathButtons.hpp
|
include/specter/PathButtons.hpp
|
||||||
include/Specter/FileBrowser.hpp
|
include/specter/FileBrowser.hpp
|
||||||
include/Specter/Icon.hpp
|
include/specter/Icon.hpp
|
||||||
include/Specter/FontCache.hpp
|
include/specter/FontCache.hpp
|
||||||
include/Specter/Translator.hpp)
|
include/specter/Translator.hpp)
|
||||||
|
|
||||||
atdna(atdna_FontCache.cpp include/Specter/FontCache.hpp)
|
atdna(atdna_FontCache.cpp include/specter/FontCache.hpp)
|
||||||
|
|
||||||
list(APPEND SPECTER_SOURCES
|
list(APPEND SPECTER_SOURCES
|
||||||
lib/Specter.cpp
|
lib/specter.cpp
|
||||||
lib/ViewResources.cpp
|
lib/ViewResources.cpp
|
||||||
lib/View.cpp
|
lib/View.cpp
|
||||||
lib/RootView.cpp
|
lib/RootView.cpp
|
||||||
|
@ -96,4 +96,4 @@ list(APPEND SPECTER_SOURCES
|
||||||
lib/Translator.cpp
|
lib/Translator.cpp
|
||||||
atdna_FontCache.cpp)
|
atdna_FontCache.cpp)
|
||||||
|
|
||||||
add_library(Specter ${SPECTER_SOURCES} ${SPECTER_HEADERS})
|
add_library(specter ${SPECTER_SOURCES} ${SPECTER_HEADERS})
|
||||||
|
|
|
@ -1,220 +0,0 @@
|
||||||
#ifndef SPECTER_VIEWRESOURCES_HPP
|
|
||||||
#define SPECTER_VIEWRESOURCES_HPP
|
|
||||||
|
|
||||||
#include "TextView.hpp"
|
|
||||||
#include "SplitView.hpp"
|
|
||||||
#include "Toolbar.hpp"
|
|
||||||
#include "Button.hpp"
|
|
||||||
|
|
||||||
#include <thread>
|
|
||||||
|
|
||||||
namespace Specter
|
|
||||||
{
|
|
||||||
class IThemeData
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual const Zeus::CColor& uiText() const=0;
|
|
||||||
virtual const Zeus::CColor& uiAltText() const=0;
|
|
||||||
virtual const Zeus::CColor& fieldText() const=0;
|
|
||||||
virtual const Zeus::CColor& fieldMarkedText() const=0;
|
|
||||||
virtual const Zeus::CColor& selectedFieldText() const=0;
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& viewportBackground() const=0;
|
|
||||||
virtual const Zeus::CColor& toolbarBackground() const=0;
|
|
||||||
virtual const Zeus::CColor& tooltipBackground() const=0;
|
|
||||||
virtual const Zeus::CColor& spaceBackground() const=0;
|
|
||||||
virtual const Zeus::CColor& splashBackground() const=0;
|
|
||||||
virtual const Zeus::CColor& splashErrorBackground() const=0;
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& splash1() const=0;
|
|
||||||
virtual const Zeus::CColor& splash2() const=0;
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& button1Inactive() const=0;
|
|
||||||
virtual const Zeus::CColor& button2Inactive() const=0;
|
|
||||||
virtual const Zeus::CColor& button1Hover() const=0;
|
|
||||||
virtual const Zeus::CColor& button2Hover() const=0;
|
|
||||||
virtual const Zeus::CColor& button1Press() const=0;
|
|
||||||
virtual const Zeus::CColor& button2Press() const=0;
|
|
||||||
virtual const Zeus::CColor& button1Disabled() const=0;
|
|
||||||
virtual const Zeus::CColor& button2Disabled() const=0;
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& textfield1Inactive() const=0;
|
|
||||||
virtual const Zeus::CColor& textfield2Inactive() const=0;
|
|
||||||
virtual const Zeus::CColor& textfield1Hover() const=0;
|
|
||||||
virtual const Zeus::CColor& textfield2Hover() const=0;
|
|
||||||
virtual const Zeus::CColor& textfield1Disabled() const=0;
|
|
||||||
virtual const Zeus::CColor& textfield2Disabled() const=0;
|
|
||||||
virtual const Zeus::CColor& textfieldSelection() const=0;
|
|
||||||
virtual const Zeus::CColor& textfieldMarkSelection() const=0;
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& tableCellBg1() const=0;
|
|
||||||
virtual const Zeus::CColor& tableCellBg2() const=0;
|
|
||||||
virtual const Zeus::CColor& tableCellBgSelected() const=0;
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& scrollIndicator() const=0;
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& spaceTriangleShading1() const=0;
|
|
||||||
virtual const Zeus::CColor& spaceTriangleShading2() const=0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class DefaultThemeData : public IThemeData
|
|
||||||
{
|
|
||||||
Zeus::CColor m_uiText = Zeus::CColor::skWhite;
|
|
||||||
Zeus::CColor m_uiAltText = Zeus::CColor::skGrey;
|
|
||||||
Zeus::CColor m_fieldText = Zeus::CColor::skBlack;
|
|
||||||
Zeus::CColor m_fieldMarkedText = {0.25, 0.25, 0.25, 1.0};
|
|
||||||
Zeus::CColor m_selectedFieldText = Zeus::CColor::skWhite;
|
|
||||||
|
|
||||||
Zeus::CColor m_vpBg = {0.2, 0.2, 0.2, 1.0};
|
|
||||||
Zeus::CColor m_tbBg = {0.2, 0.2, 0.2, 0.9};
|
|
||||||
Zeus::CColor m_tooltipBg = {0.1, 0.1, 0.1, 0.85};
|
|
||||||
Zeus::CColor m_spaceBg = {0.075, 0.075, 0.075, 0.85};
|
|
||||||
Zeus::CColor m_splashBg = {0.075, 0.075, 0.075, 0.85};
|
|
||||||
Zeus::CColor m_splashErrorBg = {0.1, 0.01, 0.01, 0.85};
|
|
||||||
|
|
||||||
Zeus::CColor m_splash1 = {1.0, 1.0, 1.0, 1.0};
|
|
||||||
Zeus::CColor m_splash2 = {0.3, 0.3, 0.3, 1.0};
|
|
||||||
|
|
||||||
Zeus::CColor m_button1Inactive = {0.2823, 0.2823, 0.2823, 1.0};
|
|
||||||
Zeus::CColor m_button2Inactive = {0.1725, 0.1725, 0.1725, 1.0};
|
|
||||||
Zeus::CColor m_button1Hover = {0.3523, 0.3523, 0.3523, 1.0};
|
|
||||||
Zeus::CColor m_button2Hover = {0.2425, 0.2425, 0.2425, 1.0};
|
|
||||||
Zeus::CColor m_button1Press = {0.1725, 0.1725, 0.1725, 1.0};
|
|
||||||
Zeus::CColor m_button2Press = {0.2823, 0.2823, 0.2823, 1.0};
|
|
||||||
Zeus::CColor m_button1Disabled = {0.2823, 0.2823, 0.2823, 0.5};
|
|
||||||
Zeus::CColor m_button2Disabled = {0.1725, 0.1725, 0.1725, 0.5};
|
|
||||||
|
|
||||||
Zeus::CColor m_textfield2Inactive = {0.7823, 0.7823, 0.7823, 1.0};
|
|
||||||
Zeus::CColor m_textfield1Inactive = {0.5725, 0.5725, 0.5725, 1.0};
|
|
||||||
Zeus::CColor m_textfield2Hover = {0.8523, 0.8523, 0.8523, 1.0};
|
|
||||||
Zeus::CColor m_textfield1Hover = {0.6425, 0.6425, 0.6425, 1.0};
|
|
||||||
Zeus::CColor m_textfield2Disabled = {0.7823, 0.7823, 0.7823, 0.5};
|
|
||||||
Zeus::CColor m_textfield1Disabled = {0.5725, 0.5725, 0.5725, 0.5};
|
|
||||||
Zeus::CColor m_textfieldSelection = {0.2725, 0.2725, 0.2725, 1.0};
|
|
||||||
Zeus::CColor m_textfieldMarkSelection = {1.0, 1.0, 0.2725, 1.0};
|
|
||||||
|
|
||||||
Zeus::CColor m_tableCellBg1 = {0.1725, 0.1725, 0.1725, 0.75};
|
|
||||||
Zeus::CColor m_tableCellBg2 = {0.2425, 0.2425, 0.2425, 0.75};
|
|
||||||
Zeus::CColor m_tableCellBgSelected = {0.6425, 0.6425, 0.6425, 1.0};
|
|
||||||
|
|
||||||
Zeus::CColor m_scrollIndicator = {0.2823, 0.2823, 0.2823, 1.0};
|
|
||||||
|
|
||||||
Zeus::CColor m_spaceTriangleShading1 = {0.6425, 0.6425, 0.6425, 1.0};
|
|
||||||
Zeus::CColor m_spaceTriangleShading2 = {0.5725, 0.5725, 0.5725, 1.0};
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual const Zeus::CColor& uiText() const {return m_uiText;}
|
|
||||||
virtual const Zeus::CColor& uiAltText() const {return m_uiAltText;}
|
|
||||||
virtual const Zeus::CColor& fieldText() const {return m_fieldText;}
|
|
||||||
virtual const Zeus::CColor& fieldMarkedText() const {return m_fieldMarkedText;}
|
|
||||||
virtual const Zeus::CColor& selectedFieldText() const {return m_selectedFieldText;}
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& viewportBackground() const {return m_vpBg;}
|
|
||||||
virtual const Zeus::CColor& toolbarBackground() const {return m_tbBg;}
|
|
||||||
virtual const Zeus::CColor& tooltipBackground() const {return m_tooltipBg;}
|
|
||||||
virtual const Zeus::CColor& spaceBackground() const {return m_spaceBg;}
|
|
||||||
virtual const Zeus::CColor& splashBackground() const {return m_splashBg;}
|
|
||||||
virtual const Zeus::CColor& splashErrorBackground() const {return m_splashErrorBg;}
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& splash1() const {return m_splash1;}
|
|
||||||
virtual const Zeus::CColor& splash2() const {return m_splash2;}
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& button1Inactive() const {return m_button1Inactive;}
|
|
||||||
virtual const Zeus::CColor& button2Inactive() const {return m_button2Inactive;}
|
|
||||||
virtual const Zeus::CColor& button1Hover() const {return m_button1Hover;}
|
|
||||||
virtual const Zeus::CColor& button2Hover() const {return m_button2Hover;}
|
|
||||||
virtual const Zeus::CColor& button1Press() const {return m_button1Press;}
|
|
||||||
virtual const Zeus::CColor& button2Press() const {return m_button2Press;}
|
|
||||||
virtual const Zeus::CColor& button1Disabled() const {return m_button1Disabled;}
|
|
||||||
virtual const Zeus::CColor& button2Disabled() const {return m_button2Disabled;}
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& textfield1Inactive() const {return m_textfield1Inactive;}
|
|
||||||
virtual const Zeus::CColor& textfield2Inactive() const {return m_textfield2Inactive;}
|
|
||||||
virtual const Zeus::CColor& textfield1Hover() const {return m_textfield1Hover;}
|
|
||||||
virtual const Zeus::CColor& textfield2Hover() const {return m_textfield2Hover;}
|
|
||||||
virtual const Zeus::CColor& textfield1Disabled() const {return m_textfield1Disabled;}
|
|
||||||
virtual const Zeus::CColor& textfield2Disabled() const {return m_textfield2Disabled;}
|
|
||||||
virtual const Zeus::CColor& textfieldSelection() const {return m_textfieldSelection;}
|
|
||||||
virtual const Zeus::CColor& textfieldMarkSelection() const {return m_textfieldMarkSelection;}
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& tableCellBg1() const {return m_tableCellBg1;}
|
|
||||||
virtual const Zeus::CColor& tableCellBg2() const {return m_tableCellBg2;}
|
|
||||||
virtual const Zeus::CColor& tableCellBgSelected() const {return m_tableCellBgSelected;}
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& scrollIndicator() const {return m_scrollIndicator;}
|
|
||||||
|
|
||||||
virtual const Zeus::CColor& spaceTriangleShading1() const {return m_spaceTriangleShading1;}
|
|
||||||
virtual const Zeus::CColor& spaceTriangleShading2() const {return m_spaceTriangleShading2;}
|
|
||||||
};
|
|
||||||
|
|
||||||
class ViewResources
|
|
||||||
{
|
|
||||||
template <class Factory>
|
|
||||||
void init(Factory* factory, const IThemeData& theme, FontCache* fcache)
|
|
||||||
{
|
|
||||||
m_viewRes.init(factory, theme);
|
|
||||||
m_textRes.init(factory, fcache);
|
|
||||||
m_splitRes.init(factory, theme);
|
|
||||||
m_toolbarRes.init(factory, theme);
|
|
||||||
m_buttonRes.init(factory, theme);
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
boo::IGraphicsDataFactory* m_factory = nullptr;
|
|
||||||
FontCache* m_fcache = nullptr;
|
|
||||||
View::Resources m_viewRes;
|
|
||||||
TextView::Resources m_textRes;
|
|
||||||
SplitView::Resources m_splitRes;
|
|
||||||
Toolbar::Resources m_toolbarRes;
|
|
||||||
Button::Resources m_buttonRes;
|
|
||||||
boo::GraphicsDataToken m_resData;
|
|
||||||
|
|
||||||
Specter::FontTag m_mainFont;
|
|
||||||
Specter::FontTag m_monoFont;
|
|
||||||
|
|
||||||
Specter::FontTag m_heading14;
|
|
||||||
Specter::FontTag m_heading18;
|
|
||||||
|
|
||||||
Specter::FontTag m_titleFont;
|
|
||||||
Specter::FontTag m_curveFont;
|
|
||||||
|
|
||||||
std::thread m_fcacheThread;
|
|
||||||
bool m_fcacheInterrupt = false;
|
|
||||||
bool m_fcacheReady = false;
|
|
||||||
|
|
||||||
ViewResources() = default;
|
|
||||||
ViewResources(const ViewResources& other) = delete;
|
|
||||||
ViewResources(ViewResources&& other) = default;
|
|
||||||
ViewResources& operator=(const ViewResources& other) = delete;
|
|
||||||
ViewResources& operator=(ViewResources&& other) = default;
|
|
||||||
|
|
||||||
void destroyResData()
|
|
||||||
{
|
|
||||||
m_resData.doDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
~ViewResources()
|
|
||||||
{
|
|
||||||
if (m_fcacheThread.joinable())
|
|
||||||
{
|
|
||||||
m_fcacheInterrupt = true;
|
|
||||||
m_fcacheThread.join();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void init(boo::IGraphicsDataFactory* factory, FontCache* fcache, const IThemeData* theme, float pixelFactor);
|
|
||||||
void prepFontCacheSync();
|
|
||||||
void prepFontCacheAsync(boo::IWindow* window);
|
|
||||||
bool fontCacheReady() const {return m_fcacheReady;}
|
|
||||||
void resetPixelFactor(float pixelFactor);
|
|
||||||
void resetTheme(const IThemeData* theme);
|
|
||||||
|
|
||||||
float m_pixelFactor = 0;
|
|
||||||
float pixelFactor() const {return m_pixelFactor;}
|
|
||||||
|
|
||||||
const IThemeData* m_theme;
|
|
||||||
const IThemeData& themeData() const {return *m_theme;}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // SPECTER_VIEWRESOURCES_HPP
|
|
|
@ -1,11 +1,11 @@
|
||||||
#ifndef SPECTER_BUTTON_HPP
|
#ifndef SPECTER_BUTTON_HPP
|
||||||
#define SPECTER_BUTTON_HPP
|
#define SPECTER_BUTTON_HPP
|
||||||
|
|
||||||
#include "Specter/TextView.hpp"
|
#include "specter/TextView.hpp"
|
||||||
#include "Specter/Control.hpp"
|
#include "specter/Control.hpp"
|
||||||
#include "Specter/Icon.hpp"
|
#include "specter/Icon.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class Button : public Control
|
class Button : public Control
|
||||||
|
@ -20,8 +20,8 @@ public:
|
||||||
private:
|
private:
|
||||||
Style m_style;
|
Style m_style;
|
||||||
IButtonBinding::MenuStyle m_menuStyle = IButtonBinding::MenuStyle::None;
|
IButtonBinding::MenuStyle m_menuStyle = IButtonBinding::MenuStyle::None;
|
||||||
Zeus::CColor m_textColor;
|
zeus::CColor m_textColor;
|
||||||
Zeus::CColor m_bgColor;
|
zeus::CColor m_bgColor;
|
||||||
std::string m_textStr;
|
std::string m_textStr;
|
||||||
std::unique_ptr<TextView> m_text;
|
std::unique_ptr<TextView> m_text;
|
||||||
std::unique_ptr<IconView> m_icon;
|
std::unique_ptr<IconView> m_icon;
|
||||||
|
@ -87,11 +87,11 @@ public:
|
||||||
~Button() {closeMenu({});}
|
~Button() {closeMenu({});}
|
||||||
Button(ViewResources& res, View& parentView,
|
Button(ViewResources& res, View& parentView,
|
||||||
IButtonBinding* controlBinding, const std::string& text, Icon* icon=nullptr,
|
IButtonBinding* controlBinding, const std::string& text, Icon* icon=nullptr,
|
||||||
Style style=Style::Block, const Zeus::CColor& bgColor=Zeus::CColor::skWhite,
|
Style style=Style::Block, const zeus::CColor& bgColor=zeus::CColor::skWhite,
|
||||||
RectangleConstraint constraint=RectangleConstraint());
|
RectangleConstraint constraint=RectangleConstraint());
|
||||||
Button(ViewResources& res, View& parentView,
|
Button(ViewResources& res, View& parentView,
|
||||||
IButtonBinding* controlBinding, const std::string& text, const Zeus::CColor& textColor,
|
IButtonBinding* controlBinding, const std::string& text, const zeus::CColor& textColor,
|
||||||
Icon* icon=nullptr, Style style=Style::Block, const Zeus::CColor& bgColor=Zeus::CColor::skWhite,
|
Icon* icon=nullptr, Style style=Style::Block, const zeus::CColor& bgColor=zeus::CColor::skWhite,
|
||||||
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);
|
||||||
|
@ -101,18 +101,18 @@ public:
|
||||||
void resized(const boo::SWindowRect& root, const boo::SWindowRect& sub);
|
void resized(const boo::SWindowRect& root, const boo::SWindowRect& sub);
|
||||||
void draw(boo::IGraphicsCommandQueue* gfxQ);
|
void draw(boo::IGraphicsCommandQueue* gfxQ);
|
||||||
|
|
||||||
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(Icon* icon=nullptr);
|
void setIcon(Icon* icon=nullptr);
|
||||||
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;}
|
||||||
int nominalHeight() const {return m_nomHeight;}
|
int nominalHeight() const {return m_nomHeight;}
|
||||||
|
|
||||||
void closeMenu(const boo::SWindowCoord& coord);
|
void closeMenu(const boo::SWindowCoord& coord);
|
||||||
ViewChild<std::unique_ptr<View>>& getMenu() {return m_modalMenu;}
|
ViewChild<std::unique_ptr<View>>& getMenu() {return m_modalMenu;}
|
||||||
|
|
||||||
void setMultiplyColor(const Zeus::CColor& color)
|
void setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
View::setMultiplyColor(color);
|
View::setMultiplyColor(color);
|
||||||
m_viewVertBlock.m_color = color;
|
m_viewVertBlock.m_color = color;
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include "View.hpp"
|
#include "View.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
class Control;
|
class Control;
|
||||||
class Button;
|
class Button;
|
||||||
|
@ -35,10 +35,10 @@ struct IButtonBinding : IControlBinding
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Informs button which MenuStyle to present to user */
|
/** Informs button which MenuStyle to present to user */
|
||||||
virtual MenuStyle menuStyle(const Specter::Button* button) const {return MenuStyle::None;}
|
virtual MenuStyle menuStyle(const specter::Button* button) const {return MenuStyle::None;}
|
||||||
|
|
||||||
/** Called when user requests menu, Button assumes modal ownership */
|
/** Called when user requests menu, Button assumes modal ownership */
|
||||||
virtual std::unique_ptr<View> buildMenu(const Specter::Button* button) {return std::unique_ptr<View>();}
|
virtual std::unique_ptr<View> buildMenu(const specter::Button* button) {return std::unique_ptr<View>();}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IFloatBinding : IControlBinding
|
struct IFloatBinding : IControlBinding
|
||||||
|
@ -63,8 +63,8 @@ struct IStringBinding : IControlBinding
|
||||||
|
|
||||||
struct CVarControlBinding : IControlBinding
|
struct CVarControlBinding : IControlBinding
|
||||||
{
|
{
|
||||||
HECL::CVar* m_cvar;
|
hecl::CVar* m_cvar;
|
||||||
CVarControlBinding(HECL::CVar* cvar)
|
CVarControlBinding(hecl::CVar* cvar)
|
||||||
: m_cvar(cvar) {}
|
: m_cvar(cvar) {}
|
||||||
const char* name(const Control* control) const {return m_cvar->name().c_str();}
|
const char* name(const Control* control) const {return m_cvar->name().c_str();}
|
||||||
const char* help(const Control* control) const {return m_cvar->rawHelp().c_str();}
|
const char* help(const Control* control) const {return m_cvar->rawHelp().c_str();}
|
|
@ -5,7 +5,7 @@
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
template <class Receiver>
|
template <class Receiver>
|
|
@ -11,9 +11,9 @@
|
||||||
#include "IViewManager.hpp"
|
#include "IViewManager.hpp"
|
||||||
#include "MessageWindow.hpp"
|
#include "MessageWindow.hpp"
|
||||||
#include "PathButtons.hpp"
|
#include "PathButtons.hpp"
|
||||||
#include <HECL/HECL.hpp>
|
#include <hecl/hecl.hpp>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class FileBrowser : public ModalWindow, public IPathButtonsBinding
|
class FileBrowser : public ModalWindow, public IPathButtonsBinding
|
||||||
|
@ -30,8 +30,8 @@ public:
|
||||||
};
|
};
|
||||||
private:
|
private:
|
||||||
Type m_type;
|
Type m_type;
|
||||||
HECL::SystemString m_path;
|
hecl::SystemString m_path;
|
||||||
std::vector<HECL::SystemString> m_comps;
|
std::vector<hecl::SystemString> m_comps;
|
||||||
bool m_showingHidden = false;
|
bool m_showingHidden = false;
|
||||||
|
|
||||||
class LeftSide : public View
|
class LeftSide : public View
|
||||||
|
@ -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, nullptr, Button::Style::Block, Zeus::CColor::skWhite,
|
m_button.m_view.reset(new Button(res, fb, this, text, nullptr, Button::Style::Block, zeus::CColor::skWhite,
|
||||||
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, nullptr, Button::Style::Block, Zeus::CColor::skWhite,
|
m_button.m_view.reset(new Button(res, fb, this, text, nullptr, Button::Style::Block, zeus::CColor::skWhite,
|
||||||
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();}
|
||||||
|
@ -110,7 +110,7 @@ private:
|
||||||
|
|
||||||
struct Entry
|
struct Entry
|
||||||
{
|
{
|
||||||
HECL::SystemString m_path;
|
hecl::SystemString m_path;
|
||||||
std::string m_name;
|
std::string m_name;
|
||||||
std::string m_type;
|
std::string m_type;
|
||||||
std::string m_size;
|
std::string m_size;
|
||||||
|
@ -172,21 +172,21 @@ private:
|
||||||
m_columnSplits[cIdx] = split;
|
m_columnSplits[cIdx] = split;
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateListing(const HECL::DirectoryEnumerator& dEnum)
|
void updateListing(const hecl::DirectoryEnumerator& dEnum)
|
||||||
{
|
{
|
||||||
m_entries.clear();
|
m_entries.clear();
|
||||||
m_entries.reserve(dEnum.size());
|
m_entries.reserve(dEnum.size());
|
||||||
|
|
||||||
for (const HECL::DirectoryEnumerator::Entry& d : dEnum)
|
for (const hecl::DirectoryEnumerator::Entry& d : dEnum)
|
||||||
{
|
{
|
||||||
m_entries.emplace_back();
|
m_entries.emplace_back();
|
||||||
Entry& ent = m_entries.back();
|
Entry& ent = m_entries.back();
|
||||||
ent.m_path = d.m_path;
|
ent.m_path = d.m_path;
|
||||||
HECL::SystemUTF8View nameUtf8(d.m_name);
|
hecl::SystemUTF8View nameUtf8(d.m_name);
|
||||||
ent.m_name = nameUtf8.str();
|
ent.m_name = nameUtf8.str();
|
||||||
if (d.m_isDir)
|
if (d.m_isDir)
|
||||||
{
|
{
|
||||||
if (HECL::SearchForProject(d.m_path))
|
if (hecl::SearchForProject(d.m_path))
|
||||||
ent.m_type = m_projStr;
|
ent.m_type = m_projStr;
|
||||||
else
|
else
|
||||||
ent.m_type = m_dirStr;
|
ent.m_type = m_dirStr;
|
||||||
|
@ -194,8 +194,8 @@ private:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ent.m_type = m_fileStr;
|
ent.m_type = m_fileStr;
|
||||||
ent.m_size = HECL::HumanizeNumber(d.m_fileSz, 7, nullptr, int(HECL::HNScale::AutoScale),
|
ent.m_size = hecl::HumanizeNumber(d.m_fileSz, 7, nullptr, int(hecl::HNScale::AutoScale),
|
||||||
HECL::HNFlags::B | HECL::HNFlags::Decimal);
|
hecl::HNFlags::B | hecl::HNFlags::Decimal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,16 +256,16 @@ private:
|
||||||
|
|
||||||
struct Entry
|
struct Entry
|
||||||
{
|
{
|
||||||
HECL::SystemString m_path;
|
hecl::SystemString m_path;
|
||||||
std::string m_name;
|
std::string m_name;
|
||||||
|
|
||||||
Entry(std::pair<HECL::SystemString, std::string>&& path)
|
Entry(std::pair<hecl::SystemString, std::string>&& path)
|
||||||
: m_path(std::move(path.first)), m_name(std::move(path.second)) {}
|
: m_path(std::move(path.first)), m_name(std::move(path.second)) {}
|
||||||
|
|
||||||
Entry(const HECL::SystemString& path)
|
Entry(const hecl::SystemString& path)
|
||||||
: m_path(path)
|
: m_path(path)
|
||||||
{
|
{
|
||||||
HECL::SystemUTF8View utf8(path);
|
hecl::SystemUTF8View utf8(path);
|
||||||
if (utf8.str().size() == 1 && utf8.str()[0] == '/')
|
if (utf8.str().size() == 1 && utf8.str()[0] == '/')
|
||||||
{
|
{
|
||||||
m_name = "/";
|
m_name = "/";
|
||||||
|
@ -307,21 +307,21 @@ private:
|
||||||
std::unique_ptr<TextView> m_recentBookmarksLabel;
|
std::unique_ptr<TextView> m_recentBookmarksLabel;
|
||||||
ViewChild<std::unique_ptr<Table>> m_recentBookmarks;
|
ViewChild<std::unique_ptr<Table>> m_recentBookmarks;
|
||||||
|
|
||||||
std::function<void(bool, const HECL::SystemString&)> m_returnFunc;
|
std::function<void(bool, const hecl::SystemString&)> m_returnFunc;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FileBrowser(ViewResources& res, View& parentView, const std::string& title, Type type,
|
FileBrowser(ViewResources& res, View& parentView, const std::string& title, Type type,
|
||||||
std::function<void(bool, const HECL::SystemString&)> returnFunc)
|
std::function<void(bool, const hecl::SystemString&)> returnFunc)
|
||||||
: FileBrowser(res, parentView, title, type, HECL::GetcwdStr(), returnFunc) {}
|
: FileBrowser(res, parentView, title, type, hecl::GetcwdStr(), returnFunc) {}
|
||||||
FileBrowser(ViewResources& res, View& parentView, const std::string& title, Type type,
|
FileBrowser(ViewResources& res, View& parentView, const std::string& title, Type type,
|
||||||
const HECL::SystemString& initialPath,
|
const hecl::SystemString& initialPath,
|
||||||
std::function<void(bool, const HECL::SystemString&)> returnFunc);
|
std::function<void(bool, const hecl::SystemString&)> returnFunc);
|
||||||
|
|
||||||
static std::vector<HECL::SystemString> PathComponents(const HECL::SystemString& path);
|
static std::vector<hecl::SystemString> PathComponents(const hecl::SystemString& path);
|
||||||
static void SyncBookmarkSelections(Table& table, BookmarkDataBind& binding,
|
static void SyncBookmarkSelections(Table& table, BookmarkDataBind& binding,
|
||||||
const HECL::SystemString& sel);
|
const hecl::SystemString& sel);
|
||||||
|
|
||||||
void navigateToPath(const HECL::SystemString& path);
|
void navigateToPath(const hecl::SystemString& path);
|
||||||
bool showingHidden() const {return m_showingHidden;}
|
bool showingHidden() const {return m_showingHidden;}
|
||||||
void setShowingHidden(bool showingHidden)
|
void setShowingHidden(bool showingHidden)
|
||||||
{
|
{
|
|
@ -5,11 +5,11 @@
|
||||||
#include FT_FREETYPE_H
|
#include FT_FREETYPE_H
|
||||||
|
|
||||||
#include <boo/boo.hpp>
|
#include <boo/boo.hpp>
|
||||||
#include <HECL/Runtime.hpp>
|
#include <hecl/Runtime.hpp>
|
||||||
#include <Athena/FileReader.hpp>
|
#include <athena/FileReader.hpp>
|
||||||
#include <Athena/FileWriter.hpp>
|
#include <athena/FileWriter.hpp>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
class FontTag
|
class FontTag
|
||||||
{
|
{
|
||||||
|
@ -26,14 +26,14 @@ public:
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
template <> struct hash<Specter::FontTag>
|
template <> struct hash<specter::FontTag>
|
||||||
{
|
{
|
||||||
size_t operator() (const Specter::FontTag& handle) const NOEXCEPT
|
size_t operator() (const specter::FontTag& handle) const NOEXCEPT
|
||||||
{return size_t(handle.hash());}
|
{return size_t(handle.hash());}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class FreeTypeGZipMemFace
|
class FreeTypeGZipMemFace
|
||||||
|
@ -85,14 +85,14 @@ private:
|
||||||
std::vector<Glyph> m_glyphs;
|
std::vector<Glyph> m_glyphs;
|
||||||
std::unordered_map<atUint16, std::vector<std::pair<atUint16, atInt16>>> m_kernAdjs;
|
std::unordered_map<atUint16, std::vector<std::pair<atUint16, atInt16>>> m_kernAdjs;
|
||||||
|
|
||||||
struct TT_KernHead : Athena::io::DNA<Athena::BigEndian>
|
struct TT_KernHead : athena::io::DNA<athena::BigEndian>
|
||||||
{
|
{
|
||||||
DECL_DNA
|
DECL_DNA
|
||||||
Value<atUint32> length;
|
Value<atUint32> length;
|
||||||
Value<atUint16> coverage;
|
Value<atUint16> coverage;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TT_KernSubHead : Athena::io::DNA<Athena::BigEndian>
|
struct TT_KernSubHead : athena::io::DNA<athena::BigEndian>
|
||||||
{
|
{
|
||||||
DECL_DNA
|
DECL_DNA
|
||||||
Value<atUint16> nPairs;
|
Value<atUint16> nPairs;
|
||||||
|
@ -101,7 +101,7 @@ private:
|
||||||
Value<atUint16> rangeShift;
|
Value<atUint16> rangeShift;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TT_KernPair : Athena::io::DNA<Athena::BigEndian>
|
struct TT_KernPair : athena::io::DNA<athena::BigEndian>
|
||||||
{
|
{
|
||||||
DECL_DNA
|
DECL_DNA
|
||||||
Value<atUint16> left;
|
Value<atUint16> left;
|
||||||
|
@ -115,9 +115,9 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FontAtlas(boo::IGraphicsDataFactory* gf, FT_Face face, uint32_t dpi,
|
FontAtlas(boo::IGraphicsDataFactory* gf, FT_Face face, uint32_t dpi,
|
||||||
bool subpixel, FCharFilter& filter, Athena::io::FileWriter& writer);
|
bool subpixel, FCharFilter& filter, athena::io::FileWriter& writer);
|
||||||
FontAtlas(boo::IGraphicsDataFactory* gf, FT_Face face, uint32_t dpi,
|
FontAtlas(boo::IGraphicsDataFactory* gf, FT_Face face, uint32_t dpi,
|
||||||
bool subpixel, FCharFilter& filter, Athena::io::FileReader& reader);
|
bool subpixel, FCharFilter& filter, athena::io::FileReader& reader);
|
||||||
FontAtlas(const FontAtlas& other) = delete;
|
FontAtlas(const FontAtlas& other) = delete;
|
||||||
FontAtlas& operator=(const FontAtlas& other) = delete;
|
FontAtlas& operator=(const FontAtlas& other) = delete;
|
||||||
|
|
||||||
|
@ -153,8 +153,8 @@ extern const FCharFilter LatinAndJapaneseCharFilter;
|
||||||
|
|
||||||
class FontCache
|
class FontCache
|
||||||
{
|
{
|
||||||
const HECL::Runtime::FileStoreManager& m_fileMgr;
|
const hecl::Runtime::FileStoreManager& m_fileMgr;
|
||||||
HECL::SystemString m_cacheRoot;
|
hecl::SystemString m_cacheRoot;
|
||||||
struct Library
|
struct Library
|
||||||
{
|
{
|
||||||
FT_Library m_lib;
|
FT_Library m_lib;
|
||||||
|
@ -168,7 +168,7 @@ class FontCache
|
||||||
|
|
||||||
std::unordered_map<FontTag, std::unique_ptr<FontAtlas>> m_cachedAtlases;
|
std::unordered_map<FontTag, std::unique_ptr<FontAtlas>> m_cachedAtlases;
|
||||||
public:
|
public:
|
||||||
FontCache(const HECL::Runtime::FileStoreManager& fileMgr);
|
FontCache(const hecl::Runtime::FileStoreManager& fileMgr);
|
||||||
FontCache(const FontCache& other) = delete;
|
FontCache(const FontCache& other) = delete;
|
||||||
FontCache& operator=(const FontCache& other) = delete;
|
FontCache& operator=(const FontCache& other) = delete;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include "View.hpp"
|
#include "View.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
struct IMenuNode
|
struct IMenuNode
|
|
@ -3,9 +3,9 @@
|
||||||
|
|
||||||
#include "Translator.hpp"
|
#include "Translator.hpp"
|
||||||
#include "SplitView.hpp"
|
#include "SplitView.hpp"
|
||||||
#include <HECL/HECL.hpp>
|
#include <hecl/hecl.hpp>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
struct ISpaceController;
|
struct ISpaceController;
|
||||||
|
|
||||||
|
@ -24,11 +24,11 @@ public:
|
||||||
virtual void deferSpaceSplit(ISpaceController* split, SplitView::Axis axis, int thisSlot,
|
virtual void deferSpaceSplit(ISpaceController* split, SplitView::Axis axis, int thisSlot,
|
||||||
const boo::SWindowCoord& coord) {}
|
const boo::SWindowCoord& coord) {}
|
||||||
|
|
||||||
virtual const std::vector<HECL::SystemString>* recentProjects() const {return nullptr;}
|
virtual const std::vector<hecl::SystemString>* recentProjects() const {return nullptr;}
|
||||||
virtual void pushRecentProject(const HECL::SystemString& path) {}
|
virtual void pushRecentProject(const hecl::SystemString& path) {}
|
||||||
|
|
||||||
virtual const std::vector<HECL::SystemString>* recentFiles() const {return nullptr;}
|
virtual const std::vector<hecl::SystemString>* recentFiles() const {return nullptr;}
|
||||||
virtual void pushRecentFile(const HECL::SystemString& path) {}
|
virtual void pushRecentFile(const hecl::SystemString& path) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -3,13 +3,13 @@
|
||||||
|
|
||||||
#include "View.hpp"
|
#include "View.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
struct Icon
|
struct Icon
|
||||||
{
|
{
|
||||||
boo::ITexture* m_tex = nullptr;
|
boo::ITexture* m_tex = nullptr;
|
||||||
Zeus::CVector2f m_uvCoords[4];
|
zeus::CVector2f m_uvCoords[4];
|
||||||
Icon() = default;
|
Icon() = default;
|
||||||
Icon(boo::ITexture* tex, float rect[4])
|
Icon(boo::ITexture* tex, float rect[4])
|
||||||
: m_tex(tex)
|
: m_tex(tex)
|
|
@ -6,7 +6,7 @@
|
||||||
#include "ScrollView.hpp"
|
#include "ScrollView.hpp"
|
||||||
#include "IMenuNode.hpp"
|
#include "IMenuNode.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class Menu : public View
|
class Menu : public View
|
|
@ -5,7 +5,7 @@
|
||||||
#include "MultiLineTextView.hpp"
|
#include "MultiLineTextView.hpp"
|
||||||
#include "Button.hpp"
|
#include "Button.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class MessageWindow : public ModalWindow
|
class MessageWindow : public ModalWindow
|
||||||
|
@ -56,7 +56,7 @@ public:
|
||||||
|
|
||||||
void updateContentOpacity(float opacity)
|
void updateContentOpacity(float opacity)
|
||||||
{
|
{
|
||||||
Zeus::CColor color = Zeus::CColor::lerp({1,1,1,0}, {1,1,1,1}, opacity);
|
zeus::CColor color = zeus::CColor::lerp({1,1,1,0}, {1,1,1,1}, opacity);
|
||||||
ModalWindow::setMultiplyColor(color);
|
ModalWindow::setMultiplyColor(color);
|
||||||
m_text->setMultiplyColor(color);
|
m_text->setMultiplyColor(color);
|
||||||
m_ok.m_view->setMultiplyColor(color);
|
m_ok.m_view->setMultiplyColor(color);
|
|
@ -1,10 +1,10 @@
|
||||||
#ifndef SPECTER_MODAL_WINDOW_HPP
|
#ifndef SPECTER_MODAL_WINDOW_HPP
|
||||||
#define SPECTER_MODAL_WINDOW_HPP
|
#define SPECTER_MODAL_WINDOW_HPP
|
||||||
|
|
||||||
#include <Specter/View.hpp>
|
#include <specter/View.hpp>
|
||||||
#include <Specter/MultiLineTextView.hpp>
|
#include <specter/MultiLineTextView.hpp>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
class ModalWindow : public View
|
class ModalWindow : public View
|
||||||
{
|
{
|
||||||
|
@ -29,11 +29,11 @@ private:
|
||||||
int m_height = 0;
|
int m_height = 0;
|
||||||
RectangleConstraint m_constraint;
|
RectangleConstraint m_constraint;
|
||||||
|
|
||||||
Zeus::CColor m_windowBg;
|
zeus::CColor m_windowBg;
|
||||||
Zeus::CColor m_windowBgClear;
|
zeus::CColor m_windowBgClear;
|
||||||
Zeus::CColor m_line1;
|
zeus::CColor m_line1;
|
||||||
Zeus::CColor m_line2;
|
zeus::CColor m_line2;
|
||||||
Zeus::CColor m_line2Clear;
|
zeus::CColor m_line2Clear;
|
||||||
|
|
||||||
ViewBlock m_viewBlock;
|
ViewBlock m_viewBlock;
|
||||||
boo::IGraphicsBufferD* m_viewBlockBuf;
|
boo::IGraphicsBufferD* m_viewBlockBuf;
|
||||||
|
@ -62,7 +62,7 @@ protected:
|
||||||
RectangleConstraint& constraint() {return m_constraint;}
|
RectangleConstraint& constraint() {return m_constraint;}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint, const Zeus::CColor& bgColor);
|
ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint, const zeus::CColor& bgColor);
|
||||||
ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint);
|
ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint);
|
||||||
void think();
|
void think();
|
||||||
bool skipBuildInAnimation();
|
bool skipBuildInAnimation();
|
|
@ -5,7 +5,7 @@
|
||||||
#include "TextView.hpp"
|
#include "TextView.hpp"
|
||||||
#include "FontCache.hpp"
|
#include "FontCache.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class MultiLineTextView : public View
|
class MultiLineTextView : public View
|
||||||
|
@ -29,15 +29,15 @@ public:
|
||||||
size_t lineCapacity=256, float lineHeight=1.0);
|
size_t lineCapacity=256, float lineHeight=1.0);
|
||||||
|
|
||||||
void typesetGlyphs(const std::string& str,
|
void typesetGlyphs(const std::string& str,
|
||||||
const Zeus::CColor& defaultColor=Zeus::CColor::skWhite,
|
const zeus::CColor& defaultColor=zeus::CColor::skWhite,
|
||||||
unsigned wrap=0);
|
unsigned wrap=0);
|
||||||
void typesetGlyphs(const std::wstring& str,
|
void typesetGlyphs(const std::wstring& str,
|
||||||
const Zeus::CColor& defaultColor=Zeus::CColor::skWhite,
|
const zeus::CColor& defaultColor=zeus::CColor::skWhite,
|
||||||
unsigned wrap=0);
|
unsigned wrap=0);
|
||||||
|
|
||||||
void colorGlyphs(const Zeus::CColor& newColor);
|
void colorGlyphs(const zeus::CColor& newColor);
|
||||||
|
|
||||||
void setMultiplyColor(const Zeus::CColor& color)
|
void setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
for (std::unique_ptr<TextView>& l : m_lines)
|
for (std::unique_ptr<TextView>& l : m_lines)
|
||||||
l->setMultiplyColor(color);
|
l->setMultiplyColor(color);
|
|
@ -1,9 +1,9 @@
|
||||||
#ifndef SPECTER_NUMERICFIELD_HPP
|
#ifndef SPECTER_NUMERICFIELD_HPP
|
||||||
#define SPECTER_NUMERICFIELD_HPP
|
#define SPECTER_NUMERICFIELD_HPP
|
||||||
|
|
||||||
#include "Specter/TextView.hpp"
|
#include "specter/TextView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
class ViewResources;
|
class ViewResources;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef SPECTER_OUTLINER_HPP
|
#ifndef SPECTER_OUTLINER_HPP
|
||||||
#define SPECTER_OUTLINER_HPP
|
#define SPECTER_OUTLINER_HPP
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
class Outliner
|
class Outliner
|
||||||
{
|
{
|
|
@ -4,7 +4,7 @@
|
||||||
#include "Button.hpp"
|
#include "Button.hpp"
|
||||||
#include "ScrollView.hpp"
|
#include "ScrollView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
struct IPathButtonsBinding
|
struct IPathButtonsBinding
|
||||||
|
@ -52,10 +52,10 @@ class PathButtons : public ScrollView
|
||||||
PathButtons& m_pb;
|
PathButtons& m_pb;
|
||||||
size_t m_idx;
|
size_t m_idx;
|
||||||
ViewChild<std::unique_ptr<Button>> m_button;
|
ViewChild<std::unique_ptr<Button>> m_button;
|
||||||
PathButton(PathButtons& pb, ViewResources& res, size_t idx, const HECL::SystemString& str)
|
PathButton(PathButtons& pb, ViewResources& res, size_t idx, const hecl::SystemString& str)
|
||||||
: m_pb(pb), m_idx(idx)
|
: m_pb(pb), m_idx(idx)
|
||||||
{
|
{
|
||||||
m_button.m_view.reset(new Button(res, pb, this, HECL::SystemUTF8View(str).str()));
|
m_button.m_view.reset(new Button(res, pb, this, hecl::SystemUTF8View(str).str()));
|
||||||
}
|
}
|
||||||
const char* name(const Control* control) const {return m_button.m_view->getText().c_str();}
|
const char* name(const Control* control) const {return m_button.m_view->getText().c_str();}
|
||||||
void activated(const Button* button, const boo::SWindowCoord&) {m_pb.m_pathButtonPending = m_idx;}
|
void activated(const Button* button, const boo::SWindowCoord&) {m_pb.m_pathButtonPending = m_idx;}
|
||||||
|
@ -66,8 +66,8 @@ class PathButtons : public ScrollView
|
||||||
public:
|
public:
|
||||||
PathButtons(ViewResources& res, View& parentView, IPathButtonsBinding& binding, bool fillContainer=false);
|
PathButtons(ViewResources& res, View& parentView, IPathButtonsBinding& binding, bool fillContainer=false);
|
||||||
|
|
||||||
void setButtons(const std::vector<HECL::SystemString>& comps);
|
void setButtons(const std::vector<hecl::SystemString>& comps);
|
||||||
void setMultiplyColor(const Zeus::CColor& color);
|
void setMultiplyColor(const zeus::CColor& color);
|
||||||
|
|
||||||
/* Fill all available space in container when requested */
|
/* Fill all available space in container when requested */
|
||||||
void containerResized(const boo::SWindowRect& root, const boo::SWindowRect& sub);
|
void containerResized(const boo::SWindowRect& root, const boo::SWindowRect& sub);
|
|
@ -13,7 +13,7 @@
|
||||||
#include "IViewManager.hpp"
|
#include "IViewManager.hpp"
|
||||||
#include <boo/boo.hpp>
|
#include <boo/boo.hpp>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class RootView : public View
|
class RootView : public View
|
|
@ -4,7 +4,7 @@
|
||||||
#include "Button.hpp"
|
#include "Button.hpp"
|
||||||
#include "IViewManager.hpp"
|
#include "IViewManager.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
class ViewResources;
|
class ViewResources;
|
||||||
class Button;
|
class Button;
|
||||||
|
@ -90,7 +90,7 @@ public:
|
||||||
int nominalWidth() const {return subRect().size[0];}
|
int nominalWidth() const {return subRect().size[0];}
|
||||||
int nominalHeight() const {return subRect().size[1];}
|
int nominalHeight() const {return subRect().size[1];}
|
||||||
|
|
||||||
void setMultiplyColor(const Zeus::CColor& color);
|
void setMultiplyColor(const zeus::CColor& color);
|
||||||
|
|
||||||
void think();
|
void think();
|
||||||
void resized(const boo::SWindowRect& root, const boo::SWindowRect& sub);
|
void resized(const boo::SWindowRect& root, const boo::SWindowRect& sub);
|
|
@ -5,7 +5,7 @@
|
||||||
#include "Toolbar.hpp"
|
#include "Toolbar.hpp"
|
||||||
#include "SplitView.hpp"
|
#include "SplitView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
class Space;
|
class Space;
|
||||||
struct ISplitSpaceController;
|
struct ISplitSpaceController;
|
||||||
|
@ -39,7 +39,7 @@ class Space : public View
|
||||||
Space& m_space;
|
Space& m_space;
|
||||||
VertexBufferBinding m_vertexBinding;
|
VertexBufferBinding m_vertexBinding;
|
||||||
bool m_flip;
|
bool m_flip;
|
||||||
CornerView(ViewResources& res, Space& space, const Zeus::CColor& triColor);
|
CornerView(ViewResources& res, Space& space, const zeus::CColor& triColor);
|
||||||
void mouseEnter(const boo::SWindowCoord&);
|
void mouseEnter(const boo::SWindowCoord&);
|
||||||
void mouseLeave(const boo::SWindowCoord&);
|
void mouseLeave(const boo::SWindowCoord&);
|
||||||
void mouseDown(const boo::SWindowCoord&, boo::EMouseButton, boo::EModifierKey);
|
void mouseDown(const boo::SWindowCoord&, boo::EMouseButton, boo::EModifierKey);
|
||||||
|
@ -65,7 +65,7 @@ public:
|
||||||
|
|
||||||
SplitView* findSplitViewOnSide(SplitView::Axis axis, int side);
|
SplitView* findSplitViewOnSide(SplitView::Axis axis, int side);
|
||||||
|
|
||||||
void setMultiplyColor(const Zeus::CColor& color)
|
void setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
View::setMultiplyColor(color);
|
View::setMultiplyColor(color);
|
||||||
if (m_contentView.m_view)
|
if (m_contentView.m_view)
|
|
@ -1,9 +1,9 @@
|
||||||
#ifndef SPECTER_SPLITVIEW_HPP
|
#ifndef SPECTER_SPLITVIEW_HPP
|
||||||
#define SPECTER_SPLITVIEW_HPP
|
#define SPECTER_SPLITVIEW_HPP
|
||||||
|
|
||||||
#include "Specter/View.hpp"
|
#include "specter/View.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
struct ISplitSpaceController;
|
struct ISplitSpaceController;
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ public:
|
||||||
void resized(const boo::SWindowRect& rootView, const boo::SWindowRect& sub);
|
void resized(const boo::SWindowRect& rootView, const boo::SWindowRect& sub);
|
||||||
void draw(boo::IGraphicsCommandQueue* gfxQ);
|
void draw(boo::IGraphicsCommandQueue* gfxQ);
|
||||||
|
|
||||||
void setMultiplyColor(const Zeus::CColor& color)
|
void setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
View::setMultiplyColor(color);
|
View::setMultiplyColor(color);
|
||||||
m_splitBlock.m_color = color;
|
m_splitBlock.m_color = color;
|
|
@ -6,7 +6,7 @@
|
||||||
#include "TextView.hpp"
|
#include "TextView.hpp"
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
#define SPECTER_TABLE_MAX_ROWS 128ul
|
#define SPECTER_TABLE_MAX_ROWS 128ul
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ public:
|
||||||
|
|
||||||
void cycleSortColumn(size_t c);
|
void cycleSortColumn(size_t c);
|
||||||
void selectRow(size_t r);
|
void selectRow(size_t r);
|
||||||
void setMultiplyColor(const Zeus::CColor& color);
|
void setMultiplyColor(const zeus::CColor& color);
|
||||||
|
|
||||||
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);
|
|
@ -5,7 +5,7 @@
|
||||||
#include "TextView.hpp"
|
#include "TextView.hpp"
|
||||||
#include <boo/IWindow.hpp>
|
#include <boo/IWindow.hpp>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class TextField : public ITextInputView
|
class TextField : public ITextInputView
|
||||||
|
@ -113,7 +113,7 @@ public:
|
||||||
void setSelectionRange(size_t start, size_t count);
|
void setSelectionRange(size_t start, size_t count);
|
||||||
void clearSelectionRange();
|
void clearSelectionRange();
|
||||||
|
|
||||||
void setMultiplyColor(const Zeus::CColor& color)
|
void setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
View::setMultiplyColor(color);
|
View::setMultiplyColor(color);
|
||||||
m_viewVertBlock.m_color = color;
|
m_viewVertBlock.m_color = color;
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#include "FontCache.hpp"
|
#include "FontCache.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
class ViewResources;
|
class ViewResources;
|
||||||
|
|
||||||
|
@ -64,12 +64,12 @@ public:
|
||||||
|
|
||||||
struct RenderGlyph
|
struct RenderGlyph
|
||||||
{
|
{
|
||||||
Zeus::CVector3f m_pos[4];
|
zeus::CVector3f m_pos[4];
|
||||||
Zeus::CMatrix4f m_mv;
|
zeus::CMatrix4f m_mv;
|
||||||
Zeus::CVector3f m_uv[4];
|
zeus::CVector3f m_uv[4];
|
||||||
Zeus::CColor m_color;
|
zeus::CColor m_color;
|
||||||
|
|
||||||
RenderGlyph(int& adv, const FontAtlas::Glyph& glyph, const Zeus::CColor& defaultColor);
|
RenderGlyph(int& adv, const FontAtlas::Glyph& glyph, const zeus::CColor& defaultColor);
|
||||||
};
|
};
|
||||||
struct RenderGlyphInfo
|
struct RenderGlyphInfo
|
||||||
{
|
{
|
||||||
|
@ -86,12 +86,12 @@ public:
|
||||||
void updateGlyphs() {m_valid = false;}
|
void updateGlyphs() {m_valid = false;}
|
||||||
|
|
||||||
void typesetGlyphs(const std::string& str,
|
void typesetGlyphs(const std::string& str,
|
||||||
const Zeus::CColor& defaultColor=Zeus::CColor::skWhite);
|
const zeus::CColor& defaultColor=zeus::CColor::skWhite);
|
||||||
void typesetGlyphs(const std::wstring& str,
|
void typesetGlyphs(const std::wstring& str,
|
||||||
const Zeus::CColor& defaultColor=Zeus::CColor::skWhite);
|
const zeus::CColor& defaultColor=zeus::CColor::skWhite);
|
||||||
|
|
||||||
void colorGlyphs(const Zeus::CColor& newColor);
|
void colorGlyphs(const zeus::CColor& newColor);
|
||||||
void colorGlyphsTypeOn(const Zeus::CColor& newColor, float startInterval=0.2, float fadeTime=0.5);
|
void colorGlyphsTypeOn(const zeus::CColor& newColor, float startInterval=0.2, float fadeTime=0.5);
|
||||||
void think();
|
void think();
|
||||||
|
|
||||||
void resized(const boo::SWindowRect& root, const boo::SWindowRect& sub);
|
void resized(const boo::SWindowRect& root, const boo::SWindowRect& sub);
|
|
@ -1,9 +1,9 @@
|
||||||
#ifndef SPECTER_TOOLBAR_HPP
|
#ifndef SPECTER_TOOLBAR_HPP
|
||||||
#define SPECTER_TOOLBAR_HPP
|
#define SPECTER_TOOLBAR_HPP
|
||||||
|
|
||||||
#include "Specter/View.hpp"
|
#include "specter/View.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
#define SPECTER_TOOLBAR_GAUGE 28
|
#define SPECTER_TOOLBAR_GAUGE 28
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ public:
|
||||||
}
|
}
|
||||||
void push_back(View* v, unsigned unit);
|
void push_back(View* v, unsigned unit);
|
||||||
|
|
||||||
void setMultiplyColor(const Zeus::CColor& color)
|
void setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
View::setMultiplyColor(color);
|
View::setMultiplyColor(color);
|
||||||
for (std::vector<ViewChild<View*>>& u : m_children)
|
for (std::vector<ViewChild<View*>>& u : m_children)
|
|
@ -1,10 +1,10 @@
|
||||||
#ifndef SPECTER_TOOLTIP_HPP
|
#ifndef SPECTER_TOOLTIP_HPP
|
||||||
#define SPECTER_TOOLTIP_HPP
|
#define SPECTER_TOOLTIP_HPP
|
||||||
|
|
||||||
#include "Specter/View.hpp"
|
#include "specter/View.hpp"
|
||||||
#include "Specter/MultiLineTextView.hpp"
|
#include "specter/MultiLineTextView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class Tooltip : public View
|
class Tooltip : public View
|
|
@ -2,23 +2,23 @@
|
||||||
#define SPECTER_TRANSLATOR_HPP
|
#define SPECTER_TRANSLATOR_HPP
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <Athena/DNAYaml.hpp>
|
#include <athena/DNAYaml.hpp>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
class Locale
|
class Locale
|
||||||
{
|
{
|
||||||
std::string m_name;
|
std::string m_name;
|
||||||
std::string m_fullName;
|
std::string m_fullName;
|
||||||
std::unique_ptr<Athena::io::YAMLNode> m_rootNode;
|
std::unique_ptr<athena::io::YAMLNode> m_rootNode;
|
||||||
const Athena::io::YAMLNode* m_langNode;
|
const athena::io::YAMLNode* m_langNode;
|
||||||
public:
|
public:
|
||||||
Locale(const std::string& name, const std::string& fullName,
|
Locale(const std::string& name, const std::string& fullName,
|
||||||
const unsigned char* yamlSource, size_t yamlLength);
|
const unsigned char* yamlSource, size_t yamlLength);
|
||||||
const std::string& name() const {return m_name;}
|
const std::string& name() const {return m_name;}
|
||||||
const std::string& fullName() const {return m_fullName;}
|
const std::string& fullName() const {return m_fullName;}
|
||||||
const Athena::io::YAMLNode* rootNode() const {return m_langNode;}
|
const athena::io::YAMLNode* rootNode() const {return m_langNode;}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Translator
|
class Translator
|
|
@ -2,18 +2,18 @@
|
||||||
#define SPECTER_VIEW_HPP
|
#define SPECTER_VIEW_HPP
|
||||||
|
|
||||||
#include <boo/boo.hpp>
|
#include <boo/boo.hpp>
|
||||||
#include "CVector3f.hpp"
|
#include "zeus/CVector3f.hpp"
|
||||||
#include "CMatrix4f.hpp"
|
#include "zeus/CMatrix4f.hpp"
|
||||||
#include "CTransform.hpp"
|
#include "zeus/CTransform.hpp"
|
||||||
#include "CColor.hpp"
|
#include "zeus/CColor.hpp"
|
||||||
#include "HECL/CVar.hpp"
|
#include "hecl/CVar.hpp"
|
||||||
|
|
||||||
#include <boo/graphicsdev/GL.hpp>
|
#include <boo/graphicsdev/GL.hpp>
|
||||||
#include <boo/graphicsdev/D3D.hpp>
|
#include <boo/graphicsdev/D3D.hpp>
|
||||||
#include <boo/graphicsdev/Metal.hpp>
|
#include <boo/graphicsdev/Metal.hpp>
|
||||||
#include <boo/graphicsdev/Vulkan.hpp>
|
#include <boo/graphicsdev/Vulkan.hpp>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
class IThemeData;
|
class IThemeData;
|
||||||
class ViewResources;
|
class ViewResources;
|
||||||
|
@ -83,13 +83,13 @@ class View
|
||||||
public:
|
public:
|
||||||
struct SolidShaderVert
|
struct SolidShaderVert
|
||||||
{
|
{
|
||||||
Zeus::CVector3f m_pos;
|
zeus::CVector3f m_pos;
|
||||||
Zeus::CColor m_color = Zeus::CColor::skClear;
|
zeus::CColor m_color = zeus::CColor::skClear;
|
||||||
};
|
};
|
||||||
struct TexShaderVert
|
struct TexShaderVert
|
||||||
{
|
{
|
||||||
Zeus::CVector3f m_pos;
|
zeus::CVector3f m_pos;
|
||||||
Zeus::CVector2f m_uv;
|
zeus::CVector2f m_uv;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VertexBufferBinding
|
struct VertexBufferBinding
|
||||||
|
@ -119,8 +119,8 @@ private:
|
||||||
protected:
|
protected:
|
||||||
struct ViewBlock
|
struct ViewBlock
|
||||||
{
|
{
|
||||||
Zeus::CMatrix4f m_mv;
|
zeus::CMatrix4f m_mv;
|
||||||
Zeus::CColor m_color = Zeus::CColor::skWhite;
|
zeus::CColor m_color = zeus::CColor::skWhite;
|
||||||
void setViewRect(const boo::SWindowRect& root, const boo::SWindowRect& sub)
|
void setViewRect(const boo::SWindowRect& root, const boo::SWindowRect& sub)
|
||||||
{
|
{
|
||||||
m_mv[0][0] = 2.0f / root.size[0];
|
m_mv[0][0] = 2.0f / root.size[0];
|
||||||
|
@ -188,14 +188,14 @@ public:
|
||||||
int height() const {return m_subRect.size[1];}
|
int height() const {return m_subRect.size[1];}
|
||||||
void updateSize();
|
void updateSize();
|
||||||
|
|
||||||
void setBackground(const Zeus::CColor& color)
|
void setBackground(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
for (int i=0 ; i<4 ; ++i)
|
for (int i=0 ; i<4 ; ++i)
|
||||||
m_bgRect[i].m_color = color;
|
m_bgRect[i].m_color = color;
|
||||||
m_bgVertsBinding.load(m_bgRect, sizeof(m_bgRect));
|
m_bgVertsBinding.load(m_bgRect, sizeof(m_bgRect));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setMultiplyColor(const Zeus::CColor& color)
|
virtual void setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
m_viewVertBlock.m_color = color;
|
m_viewVertBlock.m_color = color;
|
||||||
m_viewVertBlockBuf->load(&m_viewVertBlock, sizeof(ViewBlock));
|
m_viewVertBlockBuf->load(&m_viewVertBlock, sizeof(ViewBlock));
|
|
@ -0,0 +1,220 @@
|
||||||
|
#ifndef SPECTER_VIEWRESOURCES_HPP
|
||||||
|
#define SPECTER_VIEWRESOURCES_HPP
|
||||||
|
|
||||||
|
#include "TextView.hpp"
|
||||||
|
#include "SplitView.hpp"
|
||||||
|
#include "Toolbar.hpp"
|
||||||
|
#include "Button.hpp"
|
||||||
|
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
namespace specter
|
||||||
|
{
|
||||||
|
class IThemeData
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual const zeus::CColor& uiText() const=0;
|
||||||
|
virtual const zeus::CColor& uiAltText() const=0;
|
||||||
|
virtual const zeus::CColor& fieldText() const=0;
|
||||||
|
virtual const zeus::CColor& fieldMarkedText() const=0;
|
||||||
|
virtual const zeus::CColor& selectedFieldText() const=0;
|
||||||
|
|
||||||
|
virtual const zeus::CColor& viewportBackground() const=0;
|
||||||
|
virtual const zeus::CColor& toolbarBackground() const=0;
|
||||||
|
virtual const zeus::CColor& tooltipBackground() const=0;
|
||||||
|
virtual const zeus::CColor& spaceBackground() const=0;
|
||||||
|
virtual const zeus::CColor& splashBackground() const=0;
|
||||||
|
virtual const zeus::CColor& splashErrorBackground() const=0;
|
||||||
|
|
||||||
|
virtual const zeus::CColor& splash1() const=0;
|
||||||
|
virtual const zeus::CColor& splash2() const=0;
|
||||||
|
|
||||||
|
virtual const zeus::CColor& button1Inactive() const=0;
|
||||||
|
virtual const zeus::CColor& button2Inactive() const=0;
|
||||||
|
virtual const zeus::CColor& button1Hover() const=0;
|
||||||
|
virtual const zeus::CColor& button2Hover() const=0;
|
||||||
|
virtual const zeus::CColor& button1Press() const=0;
|
||||||
|
virtual const zeus::CColor& button2Press() const=0;
|
||||||
|
virtual const zeus::CColor& button1Disabled() const=0;
|
||||||
|
virtual const zeus::CColor& button2Disabled() const=0;
|
||||||
|
|
||||||
|
virtual const zeus::CColor& textfield1Inactive() const=0;
|
||||||
|
virtual const zeus::CColor& textfield2Inactive() const=0;
|
||||||
|
virtual const zeus::CColor& textfield1Hover() const=0;
|
||||||
|
virtual const zeus::CColor& textfield2Hover() const=0;
|
||||||
|
virtual const zeus::CColor& textfield1Disabled() const=0;
|
||||||
|
virtual const zeus::CColor& textfield2Disabled() const=0;
|
||||||
|
virtual const zeus::CColor& textfieldSelection() const=0;
|
||||||
|
virtual const zeus::CColor& textfieldMarkSelection() const=0;
|
||||||
|
|
||||||
|
virtual const zeus::CColor& tableCellBg1() const=0;
|
||||||
|
virtual const zeus::CColor& tableCellBg2() const=0;
|
||||||
|
virtual const zeus::CColor& tableCellBgSelected() const=0;
|
||||||
|
|
||||||
|
virtual const zeus::CColor& scrollIndicator() const=0;
|
||||||
|
|
||||||
|
virtual const zeus::CColor& spaceTriangleShading1() const=0;
|
||||||
|
virtual const zeus::CColor& spaceTriangleShading2() const=0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class DefaultThemeData : public IThemeData
|
||||||
|
{
|
||||||
|
zeus::CColor m_uiText = zeus::CColor::skWhite;
|
||||||
|
zeus::CColor m_uiAltText = zeus::CColor::skGrey;
|
||||||
|
zeus::CColor m_fieldText = zeus::CColor::skBlack;
|
||||||
|
zeus::CColor m_fieldMarkedText = {0.25, 0.25, 0.25, 1.0};
|
||||||
|
zeus::CColor m_selectedFieldText = zeus::CColor::skWhite;
|
||||||
|
|
||||||
|
zeus::CColor m_vpBg = {0.2, 0.2, 0.2, 1.0};
|
||||||
|
zeus::CColor m_tbBg = {0.2, 0.2, 0.2, 0.9};
|
||||||
|
zeus::CColor m_tooltipBg = {0.1, 0.1, 0.1, 0.85};
|
||||||
|
zeus::CColor m_spaceBg = {0.075, 0.075, 0.075, 0.85};
|
||||||
|
zeus::CColor m_splashBg = {0.075, 0.075, 0.075, 0.85};
|
||||||
|
zeus::CColor m_splashErrorBg = {0.1, 0.01, 0.01, 0.85};
|
||||||
|
|
||||||
|
zeus::CColor m_splash1 = {1.0, 1.0, 1.0, 1.0};
|
||||||
|
zeus::CColor m_splash2 = {0.3, 0.3, 0.3, 1.0};
|
||||||
|
|
||||||
|
zeus::CColor m_button1Inactive = {0.2823, 0.2823, 0.2823, 1.0};
|
||||||
|
zeus::CColor m_button2Inactive = {0.1725, 0.1725, 0.1725, 1.0};
|
||||||
|
zeus::CColor m_button1Hover = {0.3523, 0.3523, 0.3523, 1.0};
|
||||||
|
zeus::CColor m_button2Hover = {0.2425, 0.2425, 0.2425, 1.0};
|
||||||
|
zeus::CColor m_button1Press = {0.1725, 0.1725, 0.1725, 1.0};
|
||||||
|
zeus::CColor m_button2Press = {0.2823, 0.2823, 0.2823, 1.0};
|
||||||
|
zeus::CColor m_button1Disabled = {0.2823, 0.2823, 0.2823, 0.5};
|
||||||
|
zeus::CColor m_button2Disabled = {0.1725, 0.1725, 0.1725, 0.5};
|
||||||
|
|
||||||
|
zeus::CColor m_textfield2Inactive = {0.7823, 0.7823, 0.7823, 1.0};
|
||||||
|
zeus::CColor m_textfield1Inactive = {0.5725, 0.5725, 0.5725, 1.0};
|
||||||
|
zeus::CColor m_textfield2Hover = {0.8523, 0.8523, 0.8523, 1.0};
|
||||||
|
zeus::CColor m_textfield1Hover = {0.6425, 0.6425, 0.6425, 1.0};
|
||||||
|
zeus::CColor m_textfield2Disabled = {0.7823, 0.7823, 0.7823, 0.5};
|
||||||
|
zeus::CColor m_textfield1Disabled = {0.5725, 0.5725, 0.5725, 0.5};
|
||||||
|
zeus::CColor m_textfieldSelection = {0.2725, 0.2725, 0.2725, 1.0};
|
||||||
|
zeus::CColor m_textfieldMarkSelection = {1.0, 1.0, 0.2725, 1.0};
|
||||||
|
|
||||||
|
zeus::CColor m_tableCellBg1 = {0.1725, 0.1725, 0.1725, 0.75};
|
||||||
|
zeus::CColor m_tableCellBg2 = {0.2425, 0.2425, 0.2425, 0.75};
|
||||||
|
zeus::CColor m_tableCellBgSelected = {0.6425, 0.6425, 0.6425, 1.0};
|
||||||
|
|
||||||
|
zeus::CColor m_scrollIndicator = {0.2823, 0.2823, 0.2823, 1.0};
|
||||||
|
|
||||||
|
zeus::CColor m_spaceTriangleShading1 = {0.6425, 0.6425, 0.6425, 1.0};
|
||||||
|
zeus::CColor m_spaceTriangleShading2 = {0.5725, 0.5725, 0.5725, 1.0};
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual const zeus::CColor& uiText() const {return m_uiText;}
|
||||||
|
virtual const zeus::CColor& uiAltText() const {return m_uiAltText;}
|
||||||
|
virtual const zeus::CColor& fieldText() const {return m_fieldText;}
|
||||||
|
virtual const zeus::CColor& fieldMarkedText() const {return m_fieldMarkedText;}
|
||||||
|
virtual const zeus::CColor& selectedFieldText() const {return m_selectedFieldText;}
|
||||||
|
|
||||||
|
virtual const zeus::CColor& viewportBackground() const {return m_vpBg;}
|
||||||
|
virtual const zeus::CColor& toolbarBackground() const {return m_tbBg;}
|
||||||
|
virtual const zeus::CColor& tooltipBackground() const {return m_tooltipBg;}
|
||||||
|
virtual const zeus::CColor& spaceBackground() const {return m_spaceBg;}
|
||||||
|
virtual const zeus::CColor& splashBackground() const {return m_splashBg;}
|
||||||
|
virtual const zeus::CColor& splashErrorBackground() const {return m_splashErrorBg;}
|
||||||
|
|
||||||
|
virtual const zeus::CColor& splash1() const {return m_splash1;}
|
||||||
|
virtual const zeus::CColor& splash2() const {return m_splash2;}
|
||||||
|
|
||||||
|
virtual const zeus::CColor& button1Inactive() const {return m_button1Inactive;}
|
||||||
|
virtual const zeus::CColor& button2Inactive() const {return m_button2Inactive;}
|
||||||
|
virtual const zeus::CColor& button1Hover() const {return m_button1Hover;}
|
||||||
|
virtual const zeus::CColor& button2Hover() const {return m_button2Hover;}
|
||||||
|
virtual const zeus::CColor& button1Press() const {return m_button1Press;}
|
||||||
|
virtual const zeus::CColor& button2Press() const {return m_button2Press;}
|
||||||
|
virtual const zeus::CColor& button1Disabled() const {return m_button1Disabled;}
|
||||||
|
virtual const zeus::CColor& button2Disabled() const {return m_button2Disabled;}
|
||||||
|
|
||||||
|
virtual const zeus::CColor& textfield1Inactive() const {return m_textfield1Inactive;}
|
||||||
|
virtual const zeus::CColor& textfield2Inactive() const {return m_textfield2Inactive;}
|
||||||
|
virtual const zeus::CColor& textfield1Hover() const {return m_textfield1Hover;}
|
||||||
|
virtual const zeus::CColor& textfield2Hover() const {return m_textfield2Hover;}
|
||||||
|
virtual const zeus::CColor& textfield1Disabled() const {return m_textfield1Disabled;}
|
||||||
|
virtual const zeus::CColor& textfield2Disabled() const {return m_textfield2Disabled;}
|
||||||
|
virtual const zeus::CColor& textfieldSelection() const {return m_textfieldSelection;}
|
||||||
|
virtual const zeus::CColor& textfieldMarkSelection() const {return m_textfieldMarkSelection;}
|
||||||
|
|
||||||
|
virtual const zeus::CColor& tableCellBg1() const {return m_tableCellBg1;}
|
||||||
|
virtual const zeus::CColor& tableCellBg2() const {return m_tableCellBg2;}
|
||||||
|
virtual const zeus::CColor& tableCellBgSelected() const {return m_tableCellBgSelected;}
|
||||||
|
|
||||||
|
virtual const zeus::CColor& scrollIndicator() const {return m_scrollIndicator;}
|
||||||
|
|
||||||
|
virtual const zeus::CColor& spaceTriangleShading1() const {return m_spaceTriangleShading1;}
|
||||||
|
virtual const zeus::CColor& spaceTriangleShading2() const {return m_spaceTriangleShading2;}
|
||||||
|
};
|
||||||
|
|
||||||
|
class ViewResources
|
||||||
|
{
|
||||||
|
template <class Factory>
|
||||||
|
void init(Factory* factory, const IThemeData& theme, FontCache* fcache)
|
||||||
|
{
|
||||||
|
m_viewRes.init(factory, theme);
|
||||||
|
m_textRes.init(factory, fcache);
|
||||||
|
m_splitRes.init(factory, theme);
|
||||||
|
m_toolbarRes.init(factory, theme);
|
||||||
|
m_buttonRes.init(factory, theme);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
boo::IGraphicsDataFactory* m_factory = nullptr;
|
||||||
|
FontCache* m_fcache = nullptr;
|
||||||
|
View::Resources m_viewRes;
|
||||||
|
TextView::Resources m_textRes;
|
||||||
|
SplitView::Resources m_splitRes;
|
||||||
|
Toolbar::Resources m_toolbarRes;
|
||||||
|
Button::Resources m_buttonRes;
|
||||||
|
boo::GraphicsDataToken m_resData;
|
||||||
|
|
||||||
|
specter::FontTag m_mainFont;
|
||||||
|
specter::FontTag m_monoFont;
|
||||||
|
|
||||||
|
specter::FontTag m_heading14;
|
||||||
|
specter::FontTag m_heading18;
|
||||||
|
|
||||||
|
specter::FontTag m_titleFont;
|
||||||
|
specter::FontTag m_curveFont;
|
||||||
|
|
||||||
|
std::thread m_fcacheThread;
|
||||||
|
bool m_fcacheInterrupt = false;
|
||||||
|
bool m_fcacheReady = false;
|
||||||
|
|
||||||
|
ViewResources() = default;
|
||||||
|
ViewResources(const ViewResources& other) = delete;
|
||||||
|
ViewResources(ViewResources&& other) = default;
|
||||||
|
ViewResources& operator=(const ViewResources& other) = delete;
|
||||||
|
ViewResources& operator=(ViewResources&& other) = default;
|
||||||
|
|
||||||
|
void destroyResData()
|
||||||
|
{
|
||||||
|
m_resData.doDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
~ViewResources()
|
||||||
|
{
|
||||||
|
if (m_fcacheThread.joinable())
|
||||||
|
{
|
||||||
|
m_fcacheInterrupt = true;
|
||||||
|
m_fcacheThread.join();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void init(boo::IGraphicsDataFactory* factory, FontCache* fcache, const IThemeData* theme, float pixelFactor);
|
||||||
|
void prepFontCacheSync();
|
||||||
|
void prepFontCacheAsync(boo::IWindow* window);
|
||||||
|
bool fontCacheReady() const {return m_fcacheReady;}
|
||||||
|
void resetPixelFactor(float pixelFactor);
|
||||||
|
void resetTheme(const IThemeData* theme);
|
||||||
|
|
||||||
|
float m_pixelFactor = 0;
|
||||||
|
float pixelFactor() const {return m_pixelFactor;}
|
||||||
|
|
||||||
|
const IThemeData* m_theme;
|
||||||
|
const IThemeData& themeData() const {return *m_theme;}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // SPECTER_VIEWRESOURCES_HPP
|
|
@ -1,11 +1,11 @@
|
||||||
#include <LogVisor/LogVisor.hpp>
|
#include "logvisor/logvisor.hpp"
|
||||||
#include "Specter/Button.hpp"
|
#include "specter/Button.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::Button");
|
static logvisor::Module Log("specter::Button");
|
||||||
|
|
||||||
void Button::Resources::init(boo::IGraphicsDataFactory* factory, const IThemeData& theme)
|
void Button::Resources::init(boo::IGraphicsDataFactory* factory, const IThemeData& theme)
|
||||||
{
|
{
|
||||||
|
@ -13,12 +13,12 @@ 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, Icon* icon,
|
IButtonBinding* controlBinding, const std::string& text, Icon* icon,
|
||||||
Style style, const Zeus::CColor& bgColor, RectangleConstraint constraint)
|
Style style, const zeus::CColor& bgColor, RectangleConstraint constraint)
|
||||||
: Button(res, parentView, controlBinding, text, res.themeData().uiText(), icon, style, bgColor, constraint) {}
|
: Button(res, parentView, controlBinding, text, res.themeData().uiText(), icon, style, bgColor, constraint) {}
|
||||||
|
|
||||||
Button::Button(ViewResources& res, View& parentView,
|
Button::Button(ViewResources& res, View& parentView,
|
||||||
IButtonBinding* controlBinding, const std::string& text, const Zeus::CColor& textColor,
|
IButtonBinding* controlBinding, const std::string& text, const zeus::CColor& textColor,
|
||||||
Icon* icon, Style style, const Zeus::CColor& bgColor, RectangleConstraint constraint)
|
Icon* icon, Style style, const zeus::CColor& bgColor, RectangleConstraint constraint)
|
||||||
: Control(res, parentView, controlBinding),
|
: Control(res, parentView, controlBinding),
|
||||||
m_style(style), m_textColor(textColor), m_bgColor(bgColor), m_textStr(text), m_constraint(constraint)
|
m_style(style), m_textColor(textColor), m_bgColor(bgColor), m_textStr(text), m_constraint(constraint)
|
||||||
{
|
{
|
||||||
|
@ -30,8 +30,8 @@ Button::Button(ViewResources& res, View& parentView,
|
||||||
|
|
||||||
if (style == Style::Block)
|
if (style == Style::Block)
|
||||||
{
|
{
|
||||||
Zeus::CColor c1 = res.themeData().button1Inactive() * bgColor;
|
zeus::CColor c1 = res.themeData().button1Inactive() * bgColor;
|
||||||
Zeus::CColor c2 = res.themeData().button2Inactive() * bgColor;
|
zeus::CColor c2 = res.themeData().button2Inactive() * bgColor;
|
||||||
m_verts[0].m_color = c1;
|
m_verts[0].m_color = c1;
|
||||||
m_verts[1].m_color = c2;
|
m_verts[1].m_color = c2;
|
||||||
m_verts[2].m_color = c1;
|
m_verts[2].m_color = c1;
|
||||||
|
@ -49,9 +49,9 @@ Button::Button(ViewResources& res, View& parentView,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i=0 ; i<4 ; ++i)
|
for (int i=0 ; i<4 ; ++i)
|
||||||
m_verts[i].m_color = Zeus::CColor::skClear;
|
m_verts[i].m_color = zeus::CColor::skClear;
|
||||||
for (int i=31 ; i<35 ; ++i)
|
for (int i=31 ; i<35 ; ++i)
|
||||||
m_verts[i].m_color = Zeus::CColor::skClear;
|
m_verts[i].m_color = zeus::CColor::skClear;
|
||||||
}
|
}
|
||||||
for (int i=28 ; i<31 ; ++i)
|
for (int i=28 ; i<31 ; ++i)
|
||||||
m_verts[i].m_color = m_textColor;
|
m_verts[i].m_color = m_textColor;
|
||||||
|
@ -72,7 +72,7 @@ void Button::setText(const std::string& text)
|
||||||
setText(text, m_textColor);
|
setText(text, m_textColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::setText(const std::string& text, const Zeus::CColor& textColor)
|
void Button::setText(const std::string& text, const zeus::CColor& textColor)
|
||||||
{
|
{
|
||||||
m_textStr = text;
|
m_textStr = text;
|
||||||
m_textColor = textColor;
|
m_textColor = textColor;
|
||||||
|
@ -204,7 +204,7 @@ void Button::setIcon(Icon* icon)
|
||||||
updateSize();
|
updateSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::colorGlyphs(const Zeus::CColor& newColor)
|
void Button::colorGlyphs(const zeus::CColor& newColor)
|
||||||
{
|
{
|
||||||
m_textColor = newColor;
|
m_textColor = newColor;
|
||||||
m_text->colorGlyphs(newColor);
|
m_text->colorGlyphs(newColor);
|
||||||
|
@ -217,8 +217,8 @@ void Button::ButtonTarget::setInactive()
|
||||||
{
|
{
|
||||||
if (m_button.m_style == Style::Block)
|
if (m_button.m_style == Style::Block)
|
||||||
{
|
{
|
||||||
Zeus::CColor c1 = rootView().themeData().button1Inactive() * m_button.m_bgColor;
|
zeus::CColor c1 = rootView().themeData().button1Inactive() * m_button.m_bgColor;
|
||||||
Zeus::CColor c2 = rootView().themeData().button2Inactive() * m_button.m_bgColor;
|
zeus::CColor c2 = rootView().themeData().button2Inactive() * m_button.m_bgColor;
|
||||||
m_button.m_verts[0].m_color = c1;
|
m_button.m_verts[0].m_color = c1;
|
||||||
m_button.m_verts[1].m_color = c2;
|
m_button.m_verts[1].m_color = c2;
|
||||||
m_button.m_verts[2].m_color = c1;
|
m_button.m_verts[2].m_color = c1;
|
||||||
|
@ -229,7 +229,7 @@ void Button::ButtonTarget::setInactive()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i=0 ; i<4 ; ++i)
|
for (int i=0 ; i<4 ; ++i)
|
||||||
m_button.m_verts[i].m_color = Zeus::CColor::skClear;
|
m_button.m_verts[i].m_color = zeus::CColor::skClear;
|
||||||
m_button.m_vertsBinding.load(m_button.m_verts, sizeof(m_button.m_verts));
|
m_button.m_vertsBinding.load(m_button.m_verts, sizeof(m_button.m_verts));
|
||||||
m_button.m_text->colorGlyphs(m_button.m_textColor);
|
m_button.m_text->colorGlyphs(m_button.m_textColor);
|
||||||
}
|
}
|
||||||
|
@ -239,8 +239,8 @@ void Button::MenuTarget::setInactive()
|
||||||
{
|
{
|
||||||
if (m_button.m_style == Style::Block)
|
if (m_button.m_style == Style::Block)
|
||||||
{
|
{
|
||||||
Zeus::CColor c1 = rootView().themeData().button1Inactive() * m_button.m_bgColor;
|
zeus::CColor c1 = rootView().themeData().button1Inactive() * m_button.m_bgColor;
|
||||||
Zeus::CColor c2 = rootView().themeData().button2Inactive() * m_button.m_bgColor;
|
zeus::CColor c2 = rootView().themeData().button2Inactive() * m_button.m_bgColor;
|
||||||
m_button.m_verts[31].m_color = c1;
|
m_button.m_verts[31].m_color = c1;
|
||||||
m_button.m_verts[32].m_color = c2;
|
m_button.m_verts[32].m_color = c2;
|
||||||
m_button.m_verts[33].m_color = c1;
|
m_button.m_verts[33].m_color = c1;
|
||||||
|
@ -252,7 +252,7 @@ void Button::MenuTarget::setInactive()
|
||||||
for (int i=28 ; i<31 ; ++i)
|
for (int i=28 ; i<31 ; ++i)
|
||||||
m_button.m_verts[i].m_color = m_button.m_textColor;
|
m_button.m_verts[i].m_color = m_button.m_textColor;
|
||||||
for (int i=31 ; i<35 ; ++i)
|
for (int i=31 ; i<35 ; ++i)
|
||||||
m_button.m_verts[i].m_color = Zeus::CColor::skClear;
|
m_button.m_verts[i].m_color = zeus::CColor::skClear;
|
||||||
m_button.m_vertsBinding.load(m_button.m_verts, sizeof(m_button.m_verts));
|
m_button.m_vertsBinding.load(m_button.m_verts, sizeof(m_button.m_verts));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -261,8 +261,8 @@ void Button::ButtonTarget::setHover()
|
||||||
{
|
{
|
||||||
if (m_button.m_style == Style::Block)
|
if (m_button.m_style == Style::Block)
|
||||||
{
|
{
|
||||||
Zeus::CColor c1 = rootView().themeData().button1Hover() * m_button.m_bgColor;
|
zeus::CColor c1 = rootView().themeData().button1Hover() * m_button.m_bgColor;
|
||||||
Zeus::CColor c2 = rootView().themeData().button2Hover() * m_button.m_bgColor;
|
zeus::CColor c2 = rootView().themeData().button2Hover() * m_button.m_bgColor;
|
||||||
m_button.m_verts[0].m_color = c1;
|
m_button.m_verts[0].m_color = c1;
|
||||||
m_button.m_verts[1].m_color = c2;
|
m_button.m_verts[1].m_color = c2;
|
||||||
m_button.m_verts[2].m_color = c1;
|
m_button.m_verts[2].m_color = c1;
|
||||||
|
@ -283,8 +283,8 @@ void Button::MenuTarget::setHover()
|
||||||
{
|
{
|
||||||
if (m_button.m_style == Style::Block)
|
if (m_button.m_style == Style::Block)
|
||||||
{
|
{
|
||||||
Zeus::CColor c1 = rootView().themeData().button1Hover() * m_button.m_bgColor;
|
zeus::CColor c1 = rootView().themeData().button1Hover() * m_button.m_bgColor;
|
||||||
Zeus::CColor c2 = rootView().themeData().button2Hover() * m_button.m_bgColor;
|
zeus::CColor c2 = rootView().themeData().button2Hover() * m_button.m_bgColor;
|
||||||
m_button.m_verts[31].m_color = c1;
|
m_button.m_verts[31].m_color = c1;
|
||||||
m_button.m_verts[32].m_color = c2;
|
m_button.m_verts[32].m_color = c2;
|
||||||
m_button.m_verts[33].m_color = c1;
|
m_button.m_verts[33].m_color = c1;
|
||||||
|
@ -305,8 +305,8 @@ void Button::ButtonTarget::setPressed()
|
||||||
{
|
{
|
||||||
if (m_button.m_style == Style::Block)
|
if (m_button.m_style == Style::Block)
|
||||||
{
|
{
|
||||||
Zeus::CColor c1 = rootView().themeData().button1Press() * m_button.m_bgColor;
|
zeus::CColor c1 = rootView().themeData().button1Press() * m_button.m_bgColor;
|
||||||
Zeus::CColor c2 = rootView().themeData().button2Press() * m_button.m_bgColor;
|
zeus::CColor c2 = rootView().themeData().button2Press() * m_button.m_bgColor;
|
||||||
m_button.m_verts[0].m_color = c1;
|
m_button.m_verts[0].m_color = c1;
|
||||||
m_button.m_verts[1].m_color = c2;
|
m_button.m_verts[1].m_color = c2;
|
||||||
m_button.m_verts[2].m_color = c1;
|
m_button.m_verts[2].m_color = c1;
|
||||||
|
@ -327,8 +327,8 @@ void Button::MenuTarget::setPressed()
|
||||||
{
|
{
|
||||||
if (m_button.m_style == Style::Block)
|
if (m_button.m_style == Style::Block)
|
||||||
{
|
{
|
||||||
Zeus::CColor c1 = rootView().themeData().button1Press() * m_button.m_bgColor;
|
zeus::CColor c1 = rootView().themeData().button1Press() * m_button.m_bgColor;
|
||||||
Zeus::CColor c2 = rootView().themeData().button2Press() * m_button.m_bgColor;
|
zeus::CColor c2 = rootView().themeData().button2Press() * m_button.m_bgColor;
|
||||||
m_button.m_verts[31].m_color = c1;
|
m_button.m_verts[31].m_color = c1;
|
||||||
m_button.m_verts[32].m_color = c2;
|
m_button.m_verts[32].m_color = c2;
|
||||||
m_button.m_verts[33].m_color = c1;
|
m_button.m_verts[33].m_color = c1;
|
||||||
|
@ -349,8 +349,8 @@ void Button::ButtonTarget::setDisabled()
|
||||||
{
|
{
|
||||||
if (m_button.m_style == Style::Block)
|
if (m_button.m_style == Style::Block)
|
||||||
{
|
{
|
||||||
Zeus::CColor c1 = rootView().themeData().button1Disabled() * m_button.m_bgColor;
|
zeus::CColor c1 = rootView().themeData().button1Disabled() * m_button.m_bgColor;
|
||||||
Zeus::CColor c2 = rootView().themeData().button2Disabled() * m_button.m_bgColor;
|
zeus::CColor c2 = rootView().themeData().button2Disabled() * m_button.m_bgColor;
|
||||||
m_button.m_verts[0].m_color = c1;
|
m_button.m_verts[0].m_color = c1;
|
||||||
m_button.m_verts[1].m_color = c2;
|
m_button.m_verts[1].m_color = c2;
|
||||||
m_button.m_verts[2].m_color = c1;
|
m_button.m_verts[2].m_color = c1;
|
||||||
|
@ -361,9 +361,9 @@ void Button::ButtonTarget::setDisabled()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i=0 ; i<4 ; ++i)
|
for (int i=0 ; i<4 ; ++i)
|
||||||
m_button.m_verts[i].m_color = Zeus::CColor::skClear;
|
m_button.m_verts[i].m_color = zeus::CColor::skClear;
|
||||||
m_button.m_vertsBinding.load(m_button.m_verts, sizeof(m_button.m_verts));
|
m_button.m_vertsBinding.load(m_button.m_verts, sizeof(m_button.m_verts));
|
||||||
Zeus::CColor dimText = m_button.m_textColor;
|
zeus::CColor dimText = m_button.m_textColor;
|
||||||
dimText[3] *= 0.5;
|
dimText[3] *= 0.5;
|
||||||
m_button.m_text->colorGlyphs(dimText);
|
m_button.m_text->colorGlyphs(dimText);
|
||||||
}
|
}
|
||||||
|
@ -373,8 +373,8 @@ void Button::MenuTarget::setDisabled()
|
||||||
{
|
{
|
||||||
if (m_button.m_style == Style::Block)
|
if (m_button.m_style == Style::Block)
|
||||||
{
|
{
|
||||||
Zeus::CColor c1 = rootView().themeData().button1Disabled() * m_button.m_bgColor;
|
zeus::CColor c1 = rootView().themeData().button1Disabled() * m_button.m_bgColor;
|
||||||
Zeus::CColor c2 = rootView().themeData().button2Disabled() * m_button.m_bgColor;
|
zeus::CColor c2 = rootView().themeData().button2Disabled() * m_button.m_bgColor;
|
||||||
m_button.m_verts[31].m_color = c1;
|
m_button.m_verts[31].m_color = c1;
|
||||||
m_button.m_verts[32].m_color = c2;
|
m_button.m_verts[32].m_color = c2;
|
||||||
m_button.m_verts[33].m_color = c1;
|
m_button.m_verts[33].m_color = c1;
|
||||||
|
@ -383,12 +383,12 @@ void Button::MenuTarget::setDisabled()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Zeus::CColor dimText = m_button.m_textColor;
|
zeus::CColor dimText = m_button.m_textColor;
|
||||||
dimText[3] *= 0.5;
|
dimText[3] *= 0.5;
|
||||||
for (int i=28 ; i<31 ; ++i)
|
for (int i=28 ; i<31 ; ++i)
|
||||||
m_button.m_verts[i].m_color = dimText;
|
m_button.m_verts[i].m_color = dimText;
|
||||||
for (int i=31 ; i<35 ; ++i)
|
for (int i=31 ; i<35 ; ++i)
|
||||||
m_button.m_verts[i].m_color = Zeus::CColor::skClear;
|
m_button.m_verts[i].m_color = zeus::CColor::skClear;
|
||||||
m_button.m_vertsBinding.load(m_button.m_verts, sizeof(m_button.m_verts));
|
m_button.m_vertsBinding.load(m_button.m_verts, sizeof(m_button.m_verts));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -414,7 +414,7 @@ void Button::MenuTarget::mouseDown(const boo::SWindowCoord& coord, boo::EMouseBu
|
||||||
setPressed();
|
setPressed();
|
||||||
if (m_hovered)
|
if (m_hovered)
|
||||||
{
|
{
|
||||||
Log.report(LogVisor::Info, "button menu '%s' activated", m_button.m_textStr.c_str());
|
Log.report(logvisor::Info, "button menu '%s' activated", m_button.m_textStr.c_str());
|
||||||
if (m_button.m_controlBinding)
|
if (m_button.m_controlBinding)
|
||||||
{
|
{
|
||||||
m_button.m_modalMenu.m_view = static_cast<IButtonBinding&>(*m_button.m_controlBinding).buildMenu(&m_button);
|
m_button.m_modalMenu.m_view = static_cast<IButtonBinding&>(*m_button.m_controlBinding).buildMenu(&m_button);
|
||||||
|
@ -439,7 +439,7 @@ void Button::ButtonTarget::mouseUp(const boo::SWindowCoord& coord, boo::EMouseBu
|
||||||
static_cast<IButtonBinding&>(*m_button.m_controlBinding).up(&m_button, coord);
|
static_cast<IButtonBinding&>(*m_button.m_controlBinding).up(&m_button, coord);
|
||||||
if (m_hovered)
|
if (m_hovered)
|
||||||
{
|
{
|
||||||
Log.report(LogVisor::Info, "button '%s' activated", m_button.m_textStr.c_str());
|
Log.report(logvisor::Info, "button '%s' activated", m_button.m_textStr.c_str());
|
||||||
if (m_button.m_controlBinding)
|
if (m_button.m_controlBinding)
|
||||||
static_cast<IButtonBinding&>(*m_button.m_controlBinding).activated(&m_button, coord);
|
static_cast<IButtonBinding&>(*m_button.m_controlBinding).activated(&m_button, coord);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "Specter/Control.hpp"
|
#include "specter/Control.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
Control::Control(ViewResources& res, View& parentView,
|
Control::Control(ViewResources& res, View& parentView,
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
#include "Specter/FileBrowser.hpp"
|
#include "specter/FileBrowser.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
#include "Specter/MessageWindow.hpp"
|
#include "specter/MessageWindow.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::FileBrowser");
|
static logvisor::Module Log("specter::FileBrowser");
|
||||||
|
|
||||||
#define BROWSER_MARGIN 8
|
#define BROWSER_MARGIN 8
|
||||||
#define BROWSER_MIN_WIDTH 600
|
#define BROWSER_MIN_WIDTH 600
|
||||||
#define BROWSER_MIN_HEIGHT 300
|
#define BROWSER_MIN_HEIGHT 300
|
||||||
|
|
||||||
std::vector<HECL::SystemString> FileBrowser::PathComponents(const HECL::SystemString& path)
|
std::vector<hecl::SystemString> FileBrowser::PathComponents(const hecl::SystemString& path)
|
||||||
{
|
{
|
||||||
std::vector<HECL::SystemString> ret;
|
std::vector<hecl::SystemString> ret;
|
||||||
HECL::SystemString sPath = path;
|
hecl::SystemString sPath = path;
|
||||||
HECL::SanitizePath(sPath);
|
hecl::SanitizePath(sPath);
|
||||||
if (sPath.empty())
|
if (sPath.empty())
|
||||||
return ret;
|
return ret;
|
||||||
auto it = sPath.cbegin();
|
auto it = sPath.cbegin();
|
||||||
|
@ -23,7 +23,7 @@ std::vector<HECL::SystemString> FileBrowser::PathComponents(const HECL::SystemSt
|
||||||
ret.push_back(_S("/"));
|
ret.push_back(_S("/"));
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
HECL::SystemString comp;
|
hecl::SystemString comp;
|
||||||
for (; it != sPath.cend() ; ++it)
|
for (; it != sPath.cend() ; ++it)
|
||||||
{
|
{
|
||||||
if (*it == _S('/'))
|
if (*it == _S('/'))
|
||||||
|
@ -42,8 +42,8 @@ std::vector<HECL::SystemString> FileBrowser::PathComponents(const HECL::SystemSt
|
||||||
}
|
}
|
||||||
|
|
||||||
FileBrowser::FileBrowser(ViewResources& res, View& parentView, const std::string& title,
|
FileBrowser::FileBrowser(ViewResources& res, View& parentView, const std::string& title,
|
||||||
Type type, const HECL::SystemString& initialPath,
|
Type type, const hecl::SystemString& initialPath,
|
||||||
std::function<void(bool, const HECL::SystemString&)> returnFunc)
|
std::function<void(bool, const hecl::SystemString&)> returnFunc)
|
||||||
: ModalWindow(res, parentView, RectangleConstraint(BROWSER_MIN_WIDTH * res.pixelFactor(),
|
: ModalWindow(res, parentView, RectangleConstraint(BROWSER_MIN_WIDTH * res.pixelFactor(),
|
||||||
BROWSER_MIN_HEIGHT * res.pixelFactor(),
|
BROWSER_MIN_HEIGHT * res.pixelFactor(),
|
||||||
RectangleConstraint::Test::Minimum,
|
RectangleConstraint::Test::Minimum,
|
||||||
|
@ -78,18 +78,18 @@ FileBrowser::FileBrowser(ViewResources& res, View& parentView, const std::string
|
||||||
m_recentBookmarksLabel->typesetGlyphs(vm.translateOr("recent_files", "Recent Files"), res.themeData().uiText());
|
m_recentBookmarksLabel->typesetGlyphs(vm.translateOr("recent_files", "Recent Files"), res.themeData().uiText());
|
||||||
|
|
||||||
/* Populate system bookmarks */
|
/* Populate system bookmarks */
|
||||||
std::vector<std::pair<HECL::SystemString, std::string>> systemLocs = HECL::GetSystemLocations();
|
std::vector<std::pair<hecl::SystemString, std::string>> systemLocs = hecl::GetSystemLocations();
|
||||||
for (auto& loc : systemLocs)
|
for (auto& loc : systemLocs)
|
||||||
m_systemBookmarkBind.m_entries.emplace_back(std::move(loc));
|
m_systemBookmarkBind.m_entries.emplace_back(std::move(loc));
|
||||||
m_systemBookmarks.m_view->updateData();
|
m_systemBookmarks.m_view->updateData();
|
||||||
|
|
||||||
const std::vector<HECL::SystemString>* recentProjects = vm.recentProjects();
|
const std::vector<hecl::SystemString>* recentProjects = vm.recentProjects();
|
||||||
|
|
||||||
for (auto& proj : *recentProjects)
|
for (auto& proj : *recentProjects)
|
||||||
m_projectBookmarkBind.m_entries.emplace_back(proj);
|
m_projectBookmarkBind.m_entries.emplace_back(proj);
|
||||||
m_projectBookmarks.m_view->updateData();
|
m_projectBookmarks.m_view->updateData();
|
||||||
|
|
||||||
const std::vector<HECL::SystemString>* recentFiles = vm.recentFiles();
|
const std::vector<hecl::SystemString>* recentFiles = vm.recentFiles();
|
||||||
|
|
||||||
for (auto& file : *recentFiles)
|
for (auto& file : *recentFiles)
|
||||||
m_recentBookmarkBind.m_entries.emplace_back(file);
|
m_recentBookmarkBind.m_entries.emplace_back(file);
|
||||||
|
@ -106,7 +106,7 @@ FileBrowser::FileBrowser(ViewResources& res, View& parentView, const std::string
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileBrowser::SyncBookmarkSelections(Table& table, BookmarkDataBind& binding,
|
void FileBrowser::SyncBookmarkSelections(Table& table, BookmarkDataBind& binding,
|
||||||
const HECL::SystemString& sel)
|
const hecl::SystemString& sel)
|
||||||
{
|
{
|
||||||
size_t idx = 0;
|
size_t idx = 0;
|
||||||
for (const BookmarkDataBind::Entry& e : binding.m_entries)
|
for (const BookmarkDataBind::Entry& e : binding.m_entries)
|
||||||
|
@ -122,25 +122,25 @@ void FileBrowser::SyncBookmarkSelections(Table& table, BookmarkDataBind& binding
|
||||||
table.selectRow(-1);
|
table.selectRow(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileBrowser::navigateToPath(const HECL::SystemString& path)
|
void FileBrowser::navigateToPath(const hecl::SystemString& path)
|
||||||
{
|
{
|
||||||
HECL::Sstat theStat;
|
hecl::Sstat theStat;
|
||||||
if (HECL::Stat(path.c_str(), &theStat))
|
if (hecl::Stat(path.c_str(), &theStat))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_path = path;
|
m_path = path;
|
||||||
m_comps = PathComponents(m_path);
|
m_comps = PathComponents(m_path);
|
||||||
if (S_ISREG(theStat.st_mode))
|
if (S_ISREG(theStat.st_mode))
|
||||||
{
|
{
|
||||||
HECL::SystemUTF8View utf8(m_comps.back());
|
hecl::SystemUTF8View utf8(m_comps.back());
|
||||||
m_fileField.m_view->setText(utf8);
|
m_fileField.m_view->setText(utf8);
|
||||||
m_fileField.m_view->clearErrorState();
|
m_fileField.m_view->clearErrorState();
|
||||||
m_comps.pop_back();
|
m_comps.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
HECL::SystemString dir;
|
hecl::SystemString dir;
|
||||||
bool needSlash = false;
|
bool needSlash = false;
|
||||||
for (const HECL::SystemString& d : m_comps)
|
for (const hecl::SystemString& d : m_comps)
|
||||||
{
|
{
|
||||||
if (needSlash)
|
if (needSlash)
|
||||||
dir += _S('/');
|
dir += _S('/');
|
||||||
|
@ -153,7 +153,7 @@ void FileBrowser::navigateToPath(const HECL::SystemString& path)
|
||||||
SyncBookmarkSelections(*m_projectBookmarks.m_view, m_projectBookmarkBind, dir);
|
SyncBookmarkSelections(*m_projectBookmarks.m_view, m_projectBookmarkBind, dir);
|
||||||
SyncBookmarkSelections(*m_recentBookmarks.m_view, m_recentBookmarkBind, dir);
|
SyncBookmarkSelections(*m_recentBookmarks.m_view, m_recentBookmarkBind, dir);
|
||||||
|
|
||||||
HECL::DirectoryEnumerator dEnum(dir, HECL::DirectoryEnumerator::Mode::DirsThenFilesSorted,
|
hecl::DirectoryEnumerator dEnum(dir, hecl::DirectoryEnumerator::Mode::DirsThenFilesSorted,
|
||||||
m_fileListingBind.m_sizeSort,
|
m_fileListingBind.m_sizeSort,
|
||||||
m_fileListingBind.m_sortDir==SortDirection::Descending,
|
m_fileListingBind.m_sortDir==SortDirection::Descending,
|
||||||
!m_showingHidden);
|
!m_showingHidden);
|
||||||
|
@ -168,7 +168,7 @@ void FileBrowser::navigateToPath(const HECL::SystemString& path)
|
||||||
|
|
||||||
void FileBrowser::updateContentOpacity(float opacity)
|
void FileBrowser::updateContentOpacity(float opacity)
|
||||||
{
|
{
|
||||||
Zeus::CColor color = Zeus::CColor::lerp({1,1,1,0}, {1,1,1,1}, opacity);
|
zeus::CColor color = zeus::CColor::lerp({1,1,1,0}, {1,1,1,1}, opacity);
|
||||||
m_split.m_view->setMultiplyColor(color);
|
m_split.m_view->setMultiplyColor(color);
|
||||||
m_pathButtons.m_view->setMultiplyColor(color);
|
m_pathButtons.m_view->setMultiplyColor(color);
|
||||||
m_fileField.m_view->setMultiplyColor(color);
|
m_fileField.m_view->setMultiplyColor(color);
|
||||||
|
@ -187,9 +187,9 @@ void FileBrowser::okActivated(bool viaButton)
|
||||||
{
|
{
|
||||||
IViewManager& vm = rootView().viewManager();
|
IViewManager& vm = rootView().viewManager();
|
||||||
|
|
||||||
HECL::SystemString path;
|
hecl::SystemString path;
|
||||||
bool needSlash = false;
|
bool needSlash = false;
|
||||||
for (const HECL::SystemString& d : m_comps)
|
for (const hecl::SystemString& d : m_comps)
|
||||||
{
|
{
|
||||||
if (needSlash)
|
if (needSlash)
|
||||||
path += _S('/');
|
path += _S('/');
|
||||||
|
@ -198,20 +198,20 @@ void FileBrowser::okActivated(bool viaButton)
|
||||||
path += d;
|
path += d;
|
||||||
}
|
}
|
||||||
|
|
||||||
HECL::Sstat theStat;
|
hecl::Sstat theStat;
|
||||||
if (HECL::Stat(path.c_str(), &theStat) || !S_ISDIR(theStat.st_mode))
|
if (hecl::Stat(path.c_str(), &theStat) || !S_ISDIR(theStat.st_mode))
|
||||||
{
|
{
|
||||||
HECL::SystemUTF8View utf8(path);
|
hecl::SystemUTF8View utf8(path);
|
||||||
m_fileField.m_view->setErrorState(
|
m_fileField.m_view->setErrorState(
|
||||||
HECL::Format(vm.translateOr("no_access_as_dir", "Unable to access '%s' as directory").c_str(),
|
hecl::Format(vm.translateOr("no_access_as_dir", "Unable to access '%s' as directory").c_str(),
|
||||||
utf8.c_str()));
|
utf8.c_str()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
path += _S('/');
|
path += _S('/');
|
||||||
path += HECL::SystemStringView(m_fileField.m_view->getText()).sys_str();
|
path += hecl::SystemStringView(m_fileField.m_view->getText()).sys_str();
|
||||||
|
|
||||||
int err = HECL::Stat(path.c_str(), &theStat);
|
int err = hecl::Stat(path.c_str(), &theStat);
|
||||||
if (m_type == Type::SaveFile)
|
if (m_type == Type::SaveFile)
|
||||||
{
|
{
|
||||||
if (m_fileField.m_view->getText().empty())
|
if (m_fileField.m_view->getText().empty())
|
||||||
|
@ -224,7 +224,7 @@ void FileBrowser::okActivated(bool viaButton)
|
||||||
{
|
{
|
||||||
m_confirmWindow.reset(new MessageWindow(rootView().viewRes(), *this,
|
m_confirmWindow.reset(new MessageWindow(rootView().viewRes(), *this,
|
||||||
MessageWindow::Type::ConfirmOkCancel,
|
MessageWindow::Type::ConfirmOkCancel,
|
||||||
HECL::Format(vm.translateOr("overwrite_confirm", "Overwrite '%s'?").c_str(), path.c_str()),
|
hecl::Format(vm.translateOr("overwrite_confirm", "Overwrite '%s'?").c_str(), path.c_str()),
|
||||||
[&,path](bool ok)
|
[&,path](bool ok)
|
||||||
{
|
{
|
||||||
if (ok)
|
if (ok)
|
||||||
|
@ -266,7 +266,7 @@ void FileBrowser::okActivated(bool viaButton)
|
||||||
{
|
{
|
||||||
if (m_type == Type::NewHECLProject)
|
if (m_type == Type::NewHECLProject)
|
||||||
{
|
{
|
||||||
HECL::ProjectRootPath projRoot = HECL::SearchForProject(path);
|
hecl::ProjectRootPath projRoot = hecl::SearchForProject(path);
|
||||||
if (projRoot)
|
if (projRoot)
|
||||||
{
|
{
|
||||||
m_fileField.m_view->setErrorState(
|
m_fileField.m_view->setErrorState(
|
||||||
|
@ -291,9 +291,9 @@ void FileBrowser::okActivated(bool viaButton)
|
||||||
}
|
}
|
||||||
else if (err || !S_ISREG(theStat.st_mode))
|
else if (err || !S_ISREG(theStat.st_mode))
|
||||||
{
|
{
|
||||||
HECL::SystemUTF8View utf8(path);
|
hecl::SystemUTF8View utf8(path);
|
||||||
m_fileField.m_view->setErrorState(
|
m_fileField.m_view->setErrorState(
|
||||||
HECL::Format(vm.translateOr("no_access_as_file", "Unable to access '%s' as file").c_str(),
|
hecl::Format(vm.translateOr("no_access_as_file", "Unable to access '%s' as file").c_str(),
|
||||||
utf8.c_str()));
|
utf8.c_str()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -307,7 +307,7 @@ void FileBrowser::okActivated(bool viaButton)
|
||||||
{
|
{
|
||||||
if (m_type == Type::OpenHECLProject)
|
if (m_type == Type::OpenHECLProject)
|
||||||
{
|
{
|
||||||
HECL::ProjectRootPath projRoot = HECL::SearchForProject(path);
|
hecl::ProjectRootPath projRoot = hecl::SearchForProject(path);
|
||||||
if (projRoot)
|
if (projRoot)
|
||||||
{
|
{
|
||||||
m_returnFunc(true, projRoot.getAbsolutePath());
|
m_returnFunc(true, projRoot.getAbsolutePath());
|
||||||
|
@ -320,9 +320,9 @@ void FileBrowser::okActivated(bool viaButton)
|
||||||
}
|
}
|
||||||
if (err || !S_ISDIR(theStat.st_mode))
|
if (err || !S_ISDIR(theStat.st_mode))
|
||||||
{
|
{
|
||||||
HECL::SystemUTF8View utf8(path);
|
hecl::SystemUTF8View utf8(path);
|
||||||
m_fileField.m_view->setErrorState(
|
m_fileField.m_view->setErrorState(
|
||||||
HECL::Format(vm.translateOr("no_access_as_dir", "Unable to access '%s' as directory").c_str(),
|
hecl::Format(vm.translateOr("no_access_as_dir", "Unable to access '%s' as directory").c_str(),
|
||||||
utf8.c_str()));
|
utf8.c_str()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -334,9 +334,9 @@ void FileBrowser::okActivated(bool viaButton)
|
||||||
|
|
||||||
void FileBrowser::cancelActivated()
|
void FileBrowser::cancelActivated()
|
||||||
{
|
{
|
||||||
HECL::SystemString path;
|
hecl::SystemString path;
|
||||||
bool needSlash = false;
|
bool needSlash = false;
|
||||||
for (const HECL::SystemString& d : m_comps)
|
for (const hecl::SystemString& d : m_comps)
|
||||||
{
|
{
|
||||||
if (needSlash)
|
if (needSlash)
|
||||||
path += _S('/');
|
path += _S('/');
|
||||||
|
@ -346,7 +346,7 @@ void FileBrowser::cancelActivated()
|
||||||
}
|
}
|
||||||
|
|
||||||
path += _S('/');
|
path += _S('/');
|
||||||
path += HECL::SystemStringView(m_fileField.m_view->getText()).sys_str();
|
path += hecl::SystemStringView(m_fileField.m_view->getText()).sys_str();
|
||||||
|
|
||||||
m_returnFunc(false, path);
|
m_returnFunc(false, path);
|
||||||
close();
|
close();
|
||||||
|
@ -357,10 +357,10 @@ void FileBrowser::pathButtonActivated(size_t idx)
|
||||||
if (idx >= m_comps.size())
|
if (idx >= m_comps.size())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
HECL::SystemString dir;
|
hecl::SystemString dir;
|
||||||
bool needSlash = false;
|
bool needSlash = false;
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
for (const HECL::SystemString& d : m_comps)
|
for (const hecl::SystemString& d : m_comps)
|
||||||
{
|
{
|
||||||
if (needSlash)
|
if (needSlash)
|
||||||
dir += _S('/');
|
dir += _S('/');
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
#define NOMINMAX 1
|
#define NOMINMAX 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "Specter/FontCache.hpp"
|
#include "specter/FontCache.hpp"
|
||||||
#include <LogVisor/LogVisor.hpp>
|
#include "logvisor/logvisor.hpp"
|
||||||
#include <Athena/MemoryReader.hpp>
|
#include <athena/MemoryReader.hpp>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
|
||||||
|
@ -26,9 +26,9 @@ extern "C" size_t SPECTERCURVES_SZ;
|
||||||
|
|
||||||
extern "C" const FT_Driver_ClassRec tt_driver_class;
|
extern "C" const FT_Driver_ClassRec tt_driver_class;
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::FontCache");
|
static logvisor::Module Log("specter::FontCache");
|
||||||
|
|
||||||
const FCharFilter AllCharFilter =
|
const FCharFilter AllCharFilter =
|
||||||
std::make_pair("all-glyphs", [](uint32_t)->bool
|
std::make_pair("all-glyphs", [](uint32_t)->bool
|
||||||
|
@ -70,7 +70,7 @@ void FreeTypeGZipMemFace::open()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (FT_Stream_OpenGzip(&m_decomp, &m_comp))
|
if (FT_Stream_OpenGzip(&m_decomp, &m_comp))
|
||||||
Log.report(LogVisor::FatalError, "unable to open FreeType gzip stream");
|
Log.report(logvisor::Fatal, "unable to open FreeType gzip stream");
|
||||||
|
|
||||||
FT_Open_Args args =
|
FT_Open_Args args =
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@ void FreeTypeGZipMemFace::open()
|
||||||
};
|
};
|
||||||
|
|
||||||
if (FT_Open_Face(m_lib, &args, 0, &m_face))
|
if (FT_Open_Face(m_lib, &args, 0, &m_face))
|
||||||
Log.report(LogVisor::FatalError, "unable to open FreeType gzip face");
|
Log.report(logvisor::Fatal, "unable to open FreeType gzip face");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FreeTypeGZipMemFace::close()
|
void FreeTypeGZipMemFace::close()
|
||||||
|
@ -155,7 +155,7 @@ void FontAtlas::buildKernTable(FT_Face face)
|
||||||
TT_Face ttface = reinterpret_cast<TT_Face>(face);
|
TT_Face ttface = reinterpret_cast<TT_Face>(face);
|
||||||
if (!ttface->kern_table)
|
if (!ttface->kern_table)
|
||||||
return;
|
return;
|
||||||
Athena::io::MemoryReader r(ttface->kern_table, ttface->kern_table_size);
|
athena::io::MemoryReader r(ttface->kern_table, ttface->kern_table_size);
|
||||||
auto it = m_kernAdjs.end();
|
auto it = m_kernAdjs.end();
|
||||||
atUint32 nSubs = r.readUint32Big();
|
atUint32 nSubs = r.readUint32Big();
|
||||||
for (atUint32 i=0 ; i<nSubs ; ++i)
|
for (atUint32 i=0 ; i<nSubs ; ++i)
|
||||||
|
@ -164,7 +164,7 @@ void FontAtlas::buildKernTable(FT_Face face)
|
||||||
kernHead.read(r);
|
kernHead.read(r);
|
||||||
if (kernHead.coverage >> 8 != 0)
|
if (kernHead.coverage >> 8 != 0)
|
||||||
{
|
{
|
||||||
r.seek(kernHead.length - 6, Athena::Current);
|
r.seek(kernHead.length - 6, athena::Current);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ void FontAtlas::buildKernTable(FT_Face face)
|
||||||
#define NO_ZLIB 0
|
#define NO_ZLIB 0
|
||||||
#define ZLIB_BUF_SZ 32768
|
#define ZLIB_BUF_SZ 32768
|
||||||
|
|
||||||
static void WriteCompressed(Athena::io::FileWriter& writer, const atUint8* data, size_t sz)
|
static void WriteCompressed(athena::io::FileWriter& writer, const atUint8* data, size_t sz)
|
||||||
{
|
{
|
||||||
#if NO_ZLIB
|
#if NO_ZLIB
|
||||||
writer.writeUBytes(data, sz);
|
writer.writeUBytes(data, sz);
|
||||||
|
@ -219,13 +219,13 @@ static void WriteCompressed(Athena::io::FileWriter& writer, const atUint8* data,
|
||||||
writer.writeUBytes(compBuf, ZLIB_BUF_SZ - z.avail_out);
|
writer.writeUBytes(compBuf, ZLIB_BUF_SZ - z.avail_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.seek(adlerPos, Athena::Begin);
|
writer.seek(adlerPos, athena::Begin);
|
||||||
writer.writeUint32Big(z.adler);
|
writer.writeUint32Big(z.adler);
|
||||||
|
|
||||||
deflateEnd(&z);
|
deflateEnd(&z);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ReadDecompressed(Athena::io::FileReader& reader, atUint8* data, size_t sz)
|
static bool ReadDecompressed(athena::io::FileReader& reader, atUint8* data, size_t sz)
|
||||||
{
|
{
|
||||||
#if NO_ZLIB
|
#if NO_ZLIB
|
||||||
reader.readUBytesToBuf(data, sz);
|
reader.readUBytesToBuf(data, sz);
|
||||||
|
@ -253,7 +253,7 @@ static bool ReadDecompressed(Athena::io::FileReader& reader, atUint8* data, size
|
||||||
}
|
}
|
||||||
|
|
||||||
FontAtlas::FontAtlas(boo::IGraphicsDataFactory* gf, FT_Face face, uint32_t dpi,
|
FontAtlas::FontAtlas(boo::IGraphicsDataFactory* gf, FT_Face face, uint32_t dpi,
|
||||||
bool subpixel, FCharFilter& filter, Athena::io::FileWriter& writer)
|
bool subpixel, FCharFilter& filter, athena::io::FileWriter& writer)
|
||||||
: m_dpi(dpi),
|
: m_dpi(dpi),
|
||||||
m_ftXscale(face->size->metrics.x_scale),
|
m_ftXscale(face->size->metrics.x_scale),
|
||||||
m_ftXPpem(face->size->metrics.x_ppem),
|
m_ftXPpem(face->size->metrics.x_ppem),
|
||||||
|
@ -481,7 +481,7 @@ FontAtlas::FontAtlas(boo::IGraphicsDataFactory* gf, FT_Face face, uint32_t dpi,
|
||||||
}
|
}
|
||||||
|
|
||||||
FontAtlas::FontAtlas(boo::IGraphicsDataFactory* gf, FT_Face face, uint32_t dpi,
|
FontAtlas::FontAtlas(boo::IGraphicsDataFactory* gf, FT_Face face, uint32_t dpi,
|
||||||
bool subpixel, FCharFilter& filter, Athena::io::FileReader& reader)
|
bool subpixel, FCharFilter& filter, athena::io::FileReader& reader)
|
||||||
: m_dpi(dpi),
|
: m_dpi(dpi),
|
||||||
m_ftXscale(face->size->metrics.x_scale),
|
m_ftXscale(face->size->metrics.x_scale),
|
||||||
m_ftXPpem(face->size->metrics.x_ppem),
|
m_ftXPpem(face->size->metrics.x_ppem),
|
||||||
|
@ -685,7 +685,7 @@ FontCache::Library::Library()
|
||||||
{
|
{
|
||||||
FT_Error err = FT_Init_FreeType(&m_lib);
|
FT_Error err = FT_Init_FreeType(&m_lib);
|
||||||
if (err)
|
if (err)
|
||||||
Log.report(LogVisor::FatalError, "unable to FT_Init_FreeType");
|
Log.report(logvisor::Fatal, "unable to FT_Init_FreeType");
|
||||||
}
|
}
|
||||||
|
|
||||||
FontCache::Library::~Library()
|
FontCache::Library::~Library()
|
||||||
|
@ -693,13 +693,13 @@ FontCache::Library::~Library()
|
||||||
FT_Done_FreeType(m_lib);
|
FT_Done_FreeType(m_lib);
|
||||||
}
|
}
|
||||||
|
|
||||||
FontCache::FontCache(const HECL::Runtime::FileStoreManager& fileMgr)
|
FontCache::FontCache(const hecl::Runtime::FileStoreManager& fileMgr)
|
||||||
: m_fileMgr(fileMgr),
|
: m_fileMgr(fileMgr),
|
||||||
m_cacheRoot(m_fileMgr.getStoreRoot() + _S("/fontcache")),
|
m_cacheRoot(m_fileMgr.getStoreRoot() + _S("/fontcache")),
|
||||||
m_regFace(m_fontLib, DROIDSANS_PERMISSIVE, DROIDSANS_PERMISSIVE_SZ),
|
m_regFace(m_fontLib, DROIDSANS_PERMISSIVE, DROIDSANS_PERMISSIVE_SZ),
|
||||||
m_monoFace(m_fontLib, BMONOFONT, BMONOFONT_SZ),
|
m_monoFace(m_fontLib, BMONOFONT, BMONOFONT_SZ),
|
||||||
m_curvesFace(m_fontLib, SPECTERCURVES, SPECTERCURVES_SZ)
|
m_curvesFace(m_fontLib, SPECTERCURVES, SPECTERCURVES_SZ)
|
||||||
{HECL::MakeDir(m_cacheRoot.c_str());}
|
{hecl::MakeDir(m_cacheRoot.c_str());}
|
||||||
|
|
||||||
FontTag FontCache::prepCustomFont(boo::IGraphicsDataFactory* gf, const std::string& name, FT_Face face,
|
FontTag FontCache::prepCustomFont(boo::IGraphicsDataFactory* gf, const std::string& name, FT_Face face,
|
||||||
FCharFilter filter, bool subpixel,
|
FCharFilter filter, bool subpixel,
|
||||||
|
@ -707,10 +707,10 @@ FontTag FontCache::prepCustomFont(boo::IGraphicsDataFactory* gf, const std::stri
|
||||||
{
|
{
|
||||||
/* Quick validation */
|
/* Quick validation */
|
||||||
if (!face)
|
if (!face)
|
||||||
Log.report(LogVisor::FatalError, "invalid freetype face");
|
Log.report(logvisor::Fatal, "invalid freetype face");
|
||||||
|
|
||||||
if (!face->charmap || face->charmap->encoding != FT_ENCODING_UNICODE)
|
if (!face->charmap || face->charmap->encoding != FT_ENCODING_UNICODE)
|
||||||
Log.report(LogVisor::FatalError, "font does not contain a unicode char map");
|
Log.report(logvisor::Fatal, "font does not contain a unicode char map");
|
||||||
|
|
||||||
/* Set size with FreeType */
|
/* Set size with FreeType */
|
||||||
FT_Set_Char_Size(face, 0, points * 64.0, 0, dpi);
|
FT_Set_Char_Size(face, 0, points * 64.0, 0, dpi);
|
||||||
|
@ -722,11 +722,11 @@ FontTag FontCache::prepCustomFont(boo::IGraphicsDataFactory* gf, const std::stri
|
||||||
return tag;
|
return tag;
|
||||||
|
|
||||||
/* Now check filesystem cache */
|
/* Now check filesystem cache */
|
||||||
HECL::SystemString cachePath = m_cacheRoot + _S('/') + HECL::SysFormat(_S("%" PRIx64), tag.hash());
|
hecl::SystemString cachePath = m_cacheRoot + _S('/') + hecl::SysFormat(_S("%" PRIx64), tag.hash());
|
||||||
HECL::Sstat st;
|
hecl::Sstat st;
|
||||||
if (!HECL::Stat(cachePath.c_str(), &st) && S_ISREG(st.st_mode))
|
if (!hecl::Stat(cachePath.c_str(), &st) && S_ISREG(st.st_mode))
|
||||||
{
|
{
|
||||||
Athena::io::FileReader r(cachePath);
|
athena::io::FileReader r(cachePath);
|
||||||
if (!r.hasError())
|
if (!r.hasError())
|
||||||
{
|
{
|
||||||
atUint32 magic = r.readUint32Big();
|
atUint32 magic = r.readUint32Big();
|
||||||
|
@ -743,9 +743,9 @@ FontTag FontCache::prepCustomFont(boo::IGraphicsDataFactory* gf, const std::stri
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Nada, build and cache now */
|
/* Nada, build and cache now */
|
||||||
Athena::io::FileWriter w(cachePath);
|
athena::io::FileWriter w(cachePath);
|
||||||
if (w.hasError())
|
if (w.hasError())
|
||||||
Log.report(LogVisor::FatalError, "unable to open '%s' for writing", cachePath.c_str());
|
Log.report(logvisor::Fatal, "unable to open '%s' for writing", cachePath.c_str());
|
||||||
w.writeUint32Big('FONT');
|
w.writeUint32Big('FONT');
|
||||||
m_cachedAtlases.emplace(tag, std::make_unique<FontAtlas>(gf, face, dpi, subpixel, filter, w));
|
m_cachedAtlases.emplace(tag, std::make_unique<FontAtlas>(gf, face, dpi, subpixel, filter, w));
|
||||||
return tag;
|
return tag;
|
||||||
|
@ -755,7 +755,7 @@ const FontAtlas& FontCache::lookupAtlas(FontTag tag) const
|
||||||
{
|
{
|
||||||
auto search = m_cachedAtlases.find(tag);
|
auto search = m_cachedAtlases.find(tag);
|
||||||
if (search == m_cachedAtlases.cend())
|
if (search == m_cachedAtlases.cend())
|
||||||
Log.report(LogVisor::FatalError, "invalid font");
|
Log.report(logvisor::Fatal, "invalid font");
|
||||||
return *search->second.get();
|
return *search->second.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "Specter/Icon.hpp"
|
#include "specter/Icon.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
IconView::IconView(ViewResources& res, View& parentView, Icon& icon)
|
IconView::IconView(ViewResources& res, View& parentView, Icon& icon)
|
||||||
|
@ -17,7 +17,7 @@ IconView::IconView(ViewResources& res, View& parentView, Icon& icon)
|
||||||
{{1, 0, 0}, icon.m_uvCoords[3]},
|
{{1, 0, 0}, icon.m_uvCoords[3]},
|
||||||
};
|
};
|
||||||
m_vertexBinding.load(verts, sizeof(verts));
|
m_vertexBinding.load(verts, sizeof(verts));
|
||||||
setBackground(Zeus::CColor::skBlue);
|
setBackground(zeus::CColor::skBlue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IconView::resized(const boo::SWindowRect& root, const boo::SWindowRect& sub)
|
void IconView::resized(const boo::SWindowRect& root, const boo::SWindowRect& sub)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#include "Specter/Menu.hpp"
|
#include "specter/Menu.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
|
|
||||||
#define ROW_HEIGHT 18
|
#define ROW_HEIGHT 18
|
||||||
#define ITEM_MARGIN 1
|
#define ITEM_MARGIN 1
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
Menu::Menu(ViewResources& res, View& parentView, IMenuNode* rootNode)
|
Menu::Menu(ViewResources& res, View& parentView, IMenuNode* rootNode)
|
||||||
|
@ -92,7 +92,7 @@ Menu::ItemView::ItemView(ViewResources& res, Menu& menu, const std::string& text
|
||||||
: View(res, menu), m_menu(menu), m_idx(idx), m_node(node)
|
: View(res, menu), m_menu(menu), m_idx(idx), m_node(node)
|
||||||
{
|
{
|
||||||
commitResources(res);
|
commitResources(res);
|
||||||
m_textView.reset(new Specter::TextView(res, *this, res.m_mainFont));
|
m_textView.reset(new specter::TextView(res, *this, res.m_mainFont));
|
||||||
m_textView->typesetGlyphs(text, res.themeData().uiText());
|
m_textView->typesetGlyphs(text, res.themeData().uiText());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#include "Specter/MessageWindow.hpp"
|
#include "specter/MessageWindow.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
#include "Specter/Menu.hpp"
|
#include "specter/Menu.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
MessageWindow::MessageWindow(ViewResources& res, View& parentView,
|
MessageWindow::MessageWindow(ViewResources& res, View& parentView,
|
||||||
|
@ -22,11 +22,11 @@ MessageWindow::MessageWindow(ViewResources& res, View& parentView,
|
||||||
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, nullptr,
|
m_ok.m_view.reset(new Button(res, *this, &m_okBind, m_okBind.m_name, nullptr,
|
||||||
Button::Style::Block, Zeus::CColor::skWhite,
|
Button::Style::Block, zeus::CColor::skWhite,
|
||||||
RectangleConstraint(150 * res.pixelFactor())));
|
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, nullptr,
|
m_cancel.m_view.reset(new Button(res, *this, &m_cancelBind, m_cancelBind.m_name, nullptr,
|
||||||
Button::Style::Block, Zeus::CColor::skWhite,
|
Button::Style::Block, zeus::CColor::skWhite,
|
||||||
RectangleConstraint(150 * res.pixelFactor())));
|
RectangleConstraint(150 * res.pixelFactor())));
|
||||||
|
|
||||||
updateContentOpacity(0.0);
|
updateContentOpacity(0.0);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "Specter/ModalWindow.hpp"
|
#include "specter/ModalWindow.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
#define WIRE_START 0
|
#define WIRE_START 0
|
||||||
|
@ -19,17 +19,17 @@ namespace Specter
|
||||||
void ModalWindow::setLineVerts(int width, int height, float pf, float t)
|
void ModalWindow::setLineVerts(int width, int height, float pf, float t)
|
||||||
{
|
{
|
||||||
std::pair<int,int> margin = m_cornersOutline[0]->queryGlyphDimensions(0);
|
std::pair<int,int> margin = m_cornersOutline[0]->queryGlyphDimensions(0);
|
||||||
float t1 = Zeus::Math::clamp(0.f, t * 2.f, 1.f);
|
float t1 = zeus::clamp(0.f, t * 2.f, 1.f);
|
||||||
float t2 = Zeus::Math::clamp(0.f, t * 2.f - 1.f, 1.f);
|
float t2 = zeus::clamp(0.f, t * 2.f - 1.f, 1.f);
|
||||||
|
|
||||||
float lineLeft = 0;
|
float lineLeft = 0;
|
||||||
float lineRight = pf*LINE_WIDTH;
|
float lineRight = pf*LINE_WIDTH;
|
||||||
float lineTop = height-margin.second;
|
float lineTop = height-margin.second;
|
||||||
float lineBottom = margin.second;
|
float lineBottom = margin.second;
|
||||||
m_verts.lineVerts[0].m_pos.assign(lineLeft, lineTop, 0);
|
m_verts.lineVerts[0].m_pos.assign(lineLeft, lineTop, 0);
|
||||||
m_verts.lineVerts[1].m_pos = Zeus::CVector3f::lerp({lineLeft, lineTop, 0}, {lineLeft, lineBottom, 0}, t1);
|
m_verts.lineVerts[1].m_pos = zeus::CVector3f::lerp({lineLeft, lineTop, 0}, {lineLeft, lineBottom, 0}, t1);
|
||||||
m_verts.lineVerts[2].m_pos.assign(lineRight, lineTop, 0);
|
m_verts.lineVerts[2].m_pos.assign(lineRight, lineTop, 0);
|
||||||
m_verts.lineVerts[3].m_pos = Zeus::CVector3f::lerp({lineRight, lineTop, 0}, {lineRight, lineBottom, 0}, t1);
|
m_verts.lineVerts[3].m_pos = zeus::CVector3f::lerp({lineRight, lineTop, 0}, {lineRight, lineBottom, 0}, t1);
|
||||||
m_verts.lineVerts[4].m_pos = m_verts.lineVerts[3].m_pos;
|
m_verts.lineVerts[4].m_pos = m_verts.lineVerts[3].m_pos;
|
||||||
|
|
||||||
lineLeft = margin.first;
|
lineLeft = margin.first;
|
||||||
|
@ -39,8 +39,8 @@ void ModalWindow::setLineVerts(int width, int height, float pf, float t)
|
||||||
m_verts.lineVerts[5].m_pos.assign(lineLeft, lineTop, 0);
|
m_verts.lineVerts[5].m_pos.assign(lineLeft, lineTop, 0);
|
||||||
m_verts.lineVerts[6].m_pos = m_verts.lineVerts[5].m_pos;
|
m_verts.lineVerts[6].m_pos = m_verts.lineVerts[5].m_pos;
|
||||||
m_verts.lineVerts[7].m_pos.assign(lineLeft, lineBottom, 0);
|
m_verts.lineVerts[7].m_pos.assign(lineLeft, lineBottom, 0);
|
||||||
m_verts.lineVerts[8].m_pos = Zeus::CVector3f::lerp({lineLeft, lineTop, 0}, {lineRight, lineTop, 0}, t1);
|
m_verts.lineVerts[8].m_pos = zeus::CVector3f::lerp({lineLeft, lineTop, 0}, {lineRight, lineTop, 0}, t1);
|
||||||
m_verts.lineVerts[9].m_pos = Zeus::CVector3f::lerp({lineLeft, lineBottom, 0}, {lineRight, lineBottom, 0}, t1);
|
m_verts.lineVerts[9].m_pos = zeus::CVector3f::lerp({lineLeft, lineBottom, 0}, {lineRight, lineBottom, 0}, t1);
|
||||||
m_verts.lineVerts[10].m_pos = m_verts.lineVerts[9].m_pos;
|
m_verts.lineVerts[10].m_pos = m_verts.lineVerts[9].m_pos;
|
||||||
|
|
||||||
lineLeft = width-pf*LINE_WIDTH;
|
lineLeft = width-pf*LINE_WIDTH;
|
||||||
|
@ -49,9 +49,9 @@ void ModalWindow::setLineVerts(int width, int height, float pf, float t)
|
||||||
lineBottom = margin.second;
|
lineBottom = margin.second;
|
||||||
m_verts.lineVerts[11].m_pos.assign(lineLeft, lineTop, 0);
|
m_verts.lineVerts[11].m_pos.assign(lineLeft, lineTop, 0);
|
||||||
m_verts.lineVerts[12].m_pos = m_verts.lineVerts[11].m_pos;
|
m_verts.lineVerts[12].m_pos = m_verts.lineVerts[11].m_pos;
|
||||||
m_verts.lineVerts[13].m_pos = Zeus::CVector3f::lerp({lineLeft, lineTop, 0}, {lineLeft, lineBottom, 0}, t2);
|
m_verts.lineVerts[13].m_pos = zeus::CVector3f::lerp({lineLeft, lineTop, 0}, {lineLeft, lineBottom, 0}, t2);
|
||||||
m_verts.lineVerts[14].m_pos.assign(lineRight, lineTop, 0);
|
m_verts.lineVerts[14].m_pos.assign(lineRight, lineTop, 0);
|
||||||
m_verts.lineVerts[15].m_pos = Zeus::CVector3f::lerp({lineRight, lineTop, 0}, {lineRight, lineBottom, 0}, t2);
|
m_verts.lineVerts[15].m_pos = zeus::CVector3f::lerp({lineRight, lineTop, 0}, {lineRight, lineBottom, 0}, t2);
|
||||||
m_verts.lineVerts[16].m_pos = m_verts.lineVerts[15].m_pos;
|
m_verts.lineVerts[16].m_pos = m_verts.lineVerts[15].m_pos;
|
||||||
|
|
||||||
lineLeft = margin.first;
|
lineLeft = margin.first;
|
||||||
|
@ -61,23 +61,23 @@ void ModalWindow::setLineVerts(int width, int height, float pf, float t)
|
||||||
m_verts.lineVerts[17].m_pos.assign(lineLeft, lineTop, 0);
|
m_verts.lineVerts[17].m_pos.assign(lineLeft, lineTop, 0);
|
||||||
m_verts.lineVerts[18].m_pos = m_verts.lineVerts[17].m_pos;
|
m_verts.lineVerts[18].m_pos = m_verts.lineVerts[17].m_pos;
|
||||||
m_verts.lineVerts[19].m_pos.assign(lineLeft, lineBottom, 0);
|
m_verts.lineVerts[19].m_pos.assign(lineLeft, lineBottom, 0);
|
||||||
m_verts.lineVerts[20].m_pos = Zeus::CVector3f::lerp({lineLeft, lineTop, 0}, {lineRight, lineTop, 0}, t2);
|
m_verts.lineVerts[20].m_pos = zeus::CVector3f::lerp({lineLeft, lineTop, 0}, {lineRight, lineTop, 0}, t2);
|
||||||
m_verts.lineVerts[21].m_pos = Zeus::CVector3f::lerp({lineLeft, lineBottom, 0}, {lineRight, lineBottom, 0}, t2);
|
m_verts.lineVerts[21].m_pos = zeus::CVector3f::lerp({lineLeft, lineBottom, 0}, {lineRight, lineBottom, 0}, t2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModalWindow::setLineVertsOut(int width, int height, float pf, float t)
|
void ModalWindow::setLineVertsOut(int width, int height, float pf, float t)
|
||||||
{
|
{
|
||||||
std::pair<int,int> margin = m_cornersOutline[0]->queryGlyphDimensions(0);
|
std::pair<int,int> margin = m_cornersOutline[0]->queryGlyphDimensions(0);
|
||||||
float t1 = Zeus::Math::clamp(0.f, t * 2.f - 1.f, 1.f);
|
float t1 = zeus::clamp(0.f, t * 2.f - 1.f, 1.f);
|
||||||
float t2 = Zeus::Math::clamp(0.f, t * 2.f, 1.f);
|
float t2 = zeus::clamp(0.f, t * 2.f, 1.f);
|
||||||
|
|
||||||
float lineLeft = 0;
|
float lineLeft = 0;
|
||||||
float lineRight = pf*LINE_WIDTH;
|
float lineRight = pf*LINE_WIDTH;
|
||||||
float lineTop = height-margin.second;
|
float lineTop = height-margin.second;
|
||||||
float lineBottom = margin.second;
|
float lineBottom = margin.second;
|
||||||
m_verts.lineVerts[0].m_pos = Zeus::CVector3f::lerp({lineLeft, lineBottom, 0}, {lineLeft, lineTop, 0}, t1);
|
m_verts.lineVerts[0].m_pos = zeus::CVector3f::lerp({lineLeft, lineBottom, 0}, {lineLeft, lineTop, 0}, t1);
|
||||||
m_verts.lineVerts[1].m_pos.assign(lineLeft, lineBottom, 0);
|
m_verts.lineVerts[1].m_pos.assign(lineLeft, lineBottom, 0);
|
||||||
m_verts.lineVerts[2].m_pos = Zeus::CVector3f::lerp({lineRight, lineBottom, 0}, {lineRight, lineTop, 0}, t1);
|
m_verts.lineVerts[2].m_pos = zeus::CVector3f::lerp({lineRight, lineBottom, 0}, {lineRight, lineTop, 0}, t1);
|
||||||
m_verts.lineVerts[3].m_pos.assign(lineRight, lineBottom, 0);
|
m_verts.lineVerts[3].m_pos.assign(lineRight, lineBottom, 0);
|
||||||
m_verts.lineVerts[4].m_pos = m_verts.lineVerts[3].m_pos;
|
m_verts.lineVerts[4].m_pos = m_verts.lineVerts[3].m_pos;
|
||||||
|
|
||||||
|
@ -85,9 +85,9 @@ void ModalWindow::setLineVertsOut(int width, int height, float pf, float t)
|
||||||
lineRight = width-margin.first;
|
lineRight = width-margin.first;
|
||||||
lineTop = height;
|
lineTop = height;
|
||||||
lineBottom = height-pf*LINE_WIDTH;
|
lineBottom = height-pf*LINE_WIDTH;
|
||||||
m_verts.lineVerts[5].m_pos = Zeus::CVector3f::lerp({lineRight, lineTop, 0}, {lineLeft, lineTop, 0}, t1);
|
m_verts.lineVerts[5].m_pos = zeus::CVector3f::lerp({lineRight, lineTop, 0}, {lineLeft, lineTop, 0}, t1);
|
||||||
m_verts.lineVerts[6].m_pos = m_verts.lineVerts[5].m_pos;
|
m_verts.lineVerts[6].m_pos = m_verts.lineVerts[5].m_pos;
|
||||||
m_verts.lineVerts[7].m_pos = Zeus::CVector3f::lerp({lineRight, lineBottom, 0}, {lineLeft, lineBottom, 0}, t1);
|
m_verts.lineVerts[7].m_pos = zeus::CVector3f::lerp({lineRight, lineBottom, 0}, {lineLeft, lineBottom, 0}, t1);
|
||||||
m_verts.lineVerts[8].m_pos.assign(lineRight, lineTop, 0);
|
m_verts.lineVerts[8].m_pos.assign(lineRight, lineTop, 0);
|
||||||
m_verts.lineVerts[9].m_pos.assign(lineRight, lineBottom, 0);
|
m_verts.lineVerts[9].m_pos.assign(lineRight, lineBottom, 0);
|
||||||
m_verts.lineVerts[10].m_pos = m_verts.lineVerts[9].m_pos;
|
m_verts.lineVerts[10].m_pos = m_verts.lineVerts[9].m_pos;
|
||||||
|
@ -96,10 +96,10 @@ void ModalWindow::setLineVertsOut(int width, int height, float pf, float t)
|
||||||
lineRight = width;
|
lineRight = width;
|
||||||
lineTop = height-margin.second;
|
lineTop = height-margin.second;
|
||||||
lineBottom = margin.second;
|
lineBottom = margin.second;
|
||||||
m_verts.lineVerts[11].m_pos = Zeus::CVector3f::lerp({lineLeft, lineBottom, 0}, {lineLeft, lineTop, 0}, t2);
|
m_verts.lineVerts[11].m_pos = zeus::CVector3f::lerp({lineLeft, lineBottom, 0}, {lineLeft, lineTop, 0}, t2);
|
||||||
m_verts.lineVerts[12].m_pos = m_verts.lineVerts[11].m_pos;
|
m_verts.lineVerts[12].m_pos = m_verts.lineVerts[11].m_pos;
|
||||||
m_verts.lineVerts[13].m_pos.assign(lineLeft, lineBottom, 0);
|
m_verts.lineVerts[13].m_pos.assign(lineLeft, lineBottom, 0);
|
||||||
m_verts.lineVerts[14].m_pos = Zeus::CVector3f::lerp({lineRight, lineBottom, 0}, {lineRight, lineTop, 0}, t2);
|
m_verts.lineVerts[14].m_pos = zeus::CVector3f::lerp({lineRight, lineBottom, 0}, {lineRight, lineTop, 0}, t2);
|
||||||
m_verts.lineVerts[15].m_pos.assign(lineRight, lineBottom, 0);
|
m_verts.lineVerts[15].m_pos.assign(lineRight, lineBottom, 0);
|
||||||
m_verts.lineVerts[16].m_pos = m_verts.lineVerts[15].m_pos;
|
m_verts.lineVerts[16].m_pos = m_verts.lineVerts[15].m_pos;
|
||||||
|
|
||||||
|
@ -107,34 +107,34 @@ void ModalWindow::setLineVertsOut(int width, int height, float pf, float t)
|
||||||
lineRight = width-margin.first;
|
lineRight = width-margin.first;
|
||||||
lineTop = pf*LINE_WIDTH;
|
lineTop = pf*LINE_WIDTH;
|
||||||
lineBottom = 0;
|
lineBottom = 0;
|
||||||
m_verts.lineVerts[17].m_pos = Zeus::CVector3f::lerp({lineRight, lineTop, 0}, {lineLeft, lineTop, 0}, t2);
|
m_verts.lineVerts[17].m_pos = zeus::CVector3f::lerp({lineRight, lineTop, 0}, {lineLeft, lineTop, 0}, t2);
|
||||||
m_verts.lineVerts[18].m_pos = m_verts.lineVerts[17].m_pos;
|
m_verts.lineVerts[18].m_pos = m_verts.lineVerts[17].m_pos;
|
||||||
m_verts.lineVerts[19].m_pos = Zeus::CVector3f::lerp({lineRight, lineBottom, 0}, {lineLeft, lineBottom, 0}, t2);
|
m_verts.lineVerts[19].m_pos = zeus::CVector3f::lerp({lineRight, lineBottom, 0}, {lineLeft, lineBottom, 0}, t2);
|
||||||
m_verts.lineVerts[20].m_pos.assign(lineRight, lineTop, 0);
|
m_verts.lineVerts[20].m_pos.assign(lineRight, lineTop, 0);
|
||||||
m_verts.lineVerts[21].m_pos.assign(lineRight, lineBottom, 0);
|
m_verts.lineVerts[21].m_pos.assign(lineRight, lineBottom, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModalWindow::setLineColors(float t)
|
void ModalWindow::setLineColors(float t)
|
||||||
{
|
{
|
||||||
float t1 = Zeus::Math::clamp(0.f, t * 2.f, 1.f);
|
float t1 = zeus::clamp(0.f, t * 2.f, 1.f);
|
||||||
float t2 = Zeus::Math::clamp(0.f, t * 2.f - 1.f, 1.f);
|
float t2 = zeus::clamp(0.f, t * 2.f - 1.f, 1.f);
|
||||||
float t3 = Zeus::Math::clamp(0.f, t * 2.f - 2.f, 1.f);
|
float t3 = zeus::clamp(0.f, t * 2.f - 2.f, 1.f);
|
||||||
|
|
||||||
Zeus::CColor c1 = Zeus::CColor::lerp(m_line1, m_line2, t1);
|
zeus::CColor c1 = zeus::CColor::lerp(m_line1, m_line2, t1);
|
||||||
Zeus::CColor c2 = Zeus::CColor::lerp(m_line1, m_line2, t2);
|
zeus::CColor c2 = zeus::CColor::lerp(m_line1, m_line2, t2);
|
||||||
Zeus::CColor c3 = Zeus::CColor::lerp(m_line1, m_line2, t3);
|
zeus::CColor c3 = zeus::CColor::lerp(m_line1, m_line2, t3);
|
||||||
|
|
||||||
m_cornersOutline[0]->colorGlyphs(c1);
|
m_cornersOutline[0]->colorGlyphs(c1);
|
||||||
if (t < 0.5)
|
if (t < 0.5)
|
||||||
{
|
{
|
||||||
m_cornersOutline[1]->colorGlyphs(Zeus::CColor::skClear);
|
m_cornersOutline[1]->colorGlyphs(zeus::CColor::skClear);
|
||||||
m_cornersOutline[2]->colorGlyphs(Zeus::CColor::skClear);
|
m_cornersOutline[2]->colorGlyphs(zeus::CColor::skClear);
|
||||||
m_cornersOutline[3]->colorGlyphs(Zeus::CColor::skClear);
|
m_cornersOutline[3]->colorGlyphs(zeus::CColor::skClear);
|
||||||
}
|
}
|
||||||
else if (t < 1.0)
|
else if (t < 1.0)
|
||||||
{
|
{
|
||||||
m_cornersOutline[1]->colorGlyphs(c2);
|
m_cornersOutline[1]->colorGlyphs(c2);
|
||||||
m_cornersOutline[2]->colorGlyphs(Zeus::CColor::skClear);
|
m_cornersOutline[2]->colorGlyphs(zeus::CColor::skClear);
|
||||||
m_cornersOutline[3]->colorGlyphs(c2);
|
m_cornersOutline[3]->colorGlyphs(c2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -173,25 +173,25 @@ void ModalWindow::setLineColors(float t)
|
||||||
|
|
||||||
void ModalWindow::setLineColorsOut(float t)
|
void ModalWindow::setLineColorsOut(float t)
|
||||||
{
|
{
|
||||||
float t1 = Zeus::Math::clamp(0.f, t * 2.f, 1.f);
|
float t1 = zeus::clamp(0.f, t * 2.f, 1.f);
|
||||||
float t2 = Zeus::Math::clamp(0.f, t * 2.f - 1.f, 1.f);
|
float t2 = zeus::clamp(0.f, t * 2.f - 1.f, 1.f);
|
||||||
float t3 = Zeus::Math::clamp(0.f, t * 2.f - 2.f, 1.f);
|
float t3 = zeus::clamp(0.f, t * 2.f - 2.f, 1.f);
|
||||||
|
|
||||||
Zeus::CColor c1 = Zeus::CColor::lerp(m_line2Clear, m_line2, t1);
|
zeus::CColor c1 = zeus::CColor::lerp(m_line2Clear, m_line2, t1);
|
||||||
Zeus::CColor c2 = Zeus::CColor::lerp(m_line2Clear, m_line2, t2);
|
zeus::CColor c2 = zeus::CColor::lerp(m_line2Clear, m_line2, t2);
|
||||||
Zeus::CColor c3 = Zeus::CColor::lerp(m_line2Clear, m_line2, t3);
|
zeus::CColor c3 = zeus::CColor::lerp(m_line2Clear, m_line2, t3);
|
||||||
|
|
||||||
m_cornersOutline[2]->colorGlyphs(c1);
|
m_cornersOutline[2]->colorGlyphs(c1);
|
||||||
if (t < 0.5)
|
if (t < 0.5)
|
||||||
{
|
{
|
||||||
m_cornersOutline[1]->colorGlyphs(Zeus::CColor::skClear);
|
m_cornersOutline[1]->colorGlyphs(zeus::CColor::skClear);
|
||||||
m_cornersOutline[0]->colorGlyphs(Zeus::CColor::skClear);
|
m_cornersOutline[0]->colorGlyphs(zeus::CColor::skClear);
|
||||||
m_cornersOutline[3]->colorGlyphs(Zeus::CColor::skClear);
|
m_cornersOutline[3]->colorGlyphs(zeus::CColor::skClear);
|
||||||
}
|
}
|
||||||
else if (t < 1.0)
|
else if (t < 1.0)
|
||||||
{
|
{
|
||||||
m_cornersOutline[1]->colorGlyphs(c2);
|
m_cornersOutline[1]->colorGlyphs(c2);
|
||||||
m_cornersOutline[0]->colorGlyphs(Zeus::CColor::skClear);
|
m_cornersOutline[0]->colorGlyphs(zeus::CColor::skClear);
|
||||||
m_cornersOutline[3]->colorGlyphs(c2);
|
m_cornersOutline[3]->colorGlyphs(c2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -266,8 +266,8 @@ void ModalWindow::setFillVerts(int width, int height, float pf)
|
||||||
|
|
||||||
void ModalWindow::setFillColors(float t)
|
void ModalWindow::setFillColors(float t)
|
||||||
{
|
{
|
||||||
t = Zeus::Math::clamp(0.f, t, 1.f);
|
t = zeus::clamp(0.f, t, 1.f);
|
||||||
Zeus::CColor color = Zeus::CColor::lerp(m_windowBgClear, m_windowBg, t);
|
zeus::CColor color = zeus::CColor::lerp(m_windowBgClear, m_windowBg, t);
|
||||||
|
|
||||||
for (int i=0 ; i<16 ; ++i)
|
for (int i=0 ; i<16 ; ++i)
|
||||||
m_verts.fillVerts[i].m_color = color;
|
m_verts.fillVerts[i].m_color = color;
|
||||||
|
@ -278,7 +278,7 @@ void ModalWindow::setFillColors(float t)
|
||||||
ModalWindow::ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint)
|
ModalWindow::ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint)
|
||||||
: ModalWindow(res, parentView, constraint, res.themeData().splashBackground()) {}
|
: ModalWindow(res, parentView, constraint, res.themeData().splashBackground()) {}
|
||||||
|
|
||||||
ModalWindow::ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint, const Zeus::CColor& bgColor)
|
ModalWindow::ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint, const zeus::CColor& bgColor)
|
||||||
: View(res, parentView),
|
: View(res, parentView),
|
||||||
m_constraint(constraint),
|
m_constraint(constraint),
|
||||||
m_windowBg(bgColor),
|
m_windowBg(bgColor),
|
||||||
|
@ -297,8 +297,8 @@ ModalWindow::ModalWindow(ViewResources& res, View& parentView, const RectangleCo
|
||||||
|
|
||||||
for (int i=0 ; i<4 ; ++i)
|
for (int i=0 ; i<4 ; ++i)
|
||||||
{
|
{
|
||||||
m_cornersOutline[i].reset(new Specter::TextView(res, *this, res.m_curveFont, Specter::TextView::Alignment::Left, 1));
|
m_cornersOutline[i].reset(new specter::TextView(res, *this, res.m_curveFont, specter::TextView::Alignment::Left, 1));
|
||||||
m_cornersFilled[i].reset(new Specter::TextView(res, *this, res.m_curveFont, Specter::TextView::Alignment::Left, 1));
|
m_cornersFilled[i].reset(new specter::TextView(res, *this, res.m_curveFont, specter::TextView::Alignment::Left, 1));
|
||||||
}
|
}
|
||||||
m_cornersOutline[0]->typesetGlyphs(L"\xF4F0");
|
m_cornersOutline[0]->typesetGlyphs(L"\xF4F0");
|
||||||
m_cornersFilled[0]->typesetGlyphs(L"\xF4F1", res.themeData().splashBackground());
|
m_cornersFilled[0]->typesetGlyphs(L"\xF4F1", res.themeData().splashBackground());
|
||||||
|
@ -325,7 +325,7 @@ static float CubicEase(float t)
|
||||||
|
|
||||||
void ModalWindow::think()
|
void ModalWindow::think()
|
||||||
{
|
{
|
||||||
Specter::ViewResources& res = rootView().viewRes();
|
specter::ViewResources& res = rootView().viewRes();
|
||||||
float pf = res.pixelFactor();
|
float pf = res.pixelFactor();
|
||||||
|
|
||||||
switch (m_phase)
|
switch (m_phase)
|
||||||
|
@ -337,7 +337,7 @@ void ModalWindow::think()
|
||||||
if (m_frame > WIRE_START)
|
if (m_frame > WIRE_START)
|
||||||
{
|
{
|
||||||
float wt = (m_frame-WIRE_START) / float(WIRE_FRAMES);
|
float wt = (m_frame-WIRE_START) / float(WIRE_FRAMES);
|
||||||
wt = Zeus::Math::clamp(0.f, wt, 2.f);
|
wt = zeus::clamp(0.f, wt, 2.f);
|
||||||
m_lineTime = CubicEase(wt);
|
m_lineTime = CubicEase(wt);
|
||||||
setLineVerts(m_width, m_height, pf, m_lineTime);
|
setLineVerts(m_width, m_height, pf, m_lineTime);
|
||||||
setLineColors(wt);
|
setLineColors(wt);
|
||||||
|
@ -348,7 +348,7 @@ void ModalWindow::think()
|
||||||
if (m_frame > SOLID_START)
|
if (m_frame > SOLID_START)
|
||||||
{
|
{
|
||||||
float ft = (m_frame-SOLID_START) / float(SOLID_FRAMES);
|
float ft = (m_frame-SOLID_START) / float(SOLID_FRAMES);
|
||||||
ft = Zeus::Math::clamp(0.f, ft, 2.f);
|
ft = zeus::clamp(0.f, ft, 2.f);
|
||||||
setFillColors(ft);
|
setFillColors(ft);
|
||||||
if (ft == 2.f)
|
if (ft == 2.f)
|
||||||
++doneCount;
|
++doneCount;
|
||||||
|
@ -359,7 +359,7 @@ void ModalWindow::think()
|
||||||
if (!m_contentStartFrame)
|
if (!m_contentStartFrame)
|
||||||
m_contentStartFrame = m_frame;
|
m_contentStartFrame = m_frame;
|
||||||
float tt = (m_frame-m_contentStartFrame) / float(CONTENT_FRAMES);
|
float tt = (m_frame-m_contentStartFrame) / float(CONTENT_FRAMES);
|
||||||
tt = Zeus::Math::clamp(0.f, tt, 1.f);
|
tt = zeus::clamp(0.f, tt, 1.f);
|
||||||
updateContentOpacity(tt);
|
updateContentOpacity(tt);
|
||||||
if (tt == 1.f)
|
if (tt == 1.f)
|
||||||
++doneCount;
|
++doneCount;
|
||||||
|
@ -384,7 +384,7 @@ void ModalWindow::think()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
float wt = (WIRE_FRAMES - m_frame) / float(WIRE_FRAMES);
|
float wt = (WIRE_FRAMES - m_frame) / float(WIRE_FRAMES);
|
||||||
wt = Zeus::Math::clamp(0.f, wt, 1.f);
|
wt = zeus::clamp(0.f, wt, 1.f);
|
||||||
m_lineTime = CubicEase(wt);
|
m_lineTime = CubicEase(wt);
|
||||||
setLineVertsOut(m_width, m_height, pf, m_lineTime);
|
setLineVertsOut(m_width, m_height, pf, m_lineTime);
|
||||||
setLineColorsOut(wt);
|
setLineColorsOut(wt);
|
||||||
|
@ -393,13 +393,13 @@ void ModalWindow::think()
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
float ft = (SOLID_FRAMES - m_frame) / float(SOLID_FRAMES);
|
float ft = (SOLID_FRAMES - m_frame) / float(SOLID_FRAMES);
|
||||||
ft = Zeus::Math::clamp(0.f, ft, 1.f);
|
ft = zeus::clamp(0.f, ft, 1.f);
|
||||||
setFillColors(ft);
|
setFillColors(ft);
|
||||||
}
|
}
|
||||||
if (res.fontCacheReady())
|
if (res.fontCacheReady())
|
||||||
{
|
{
|
||||||
float tt = (CONTENT_FRAMES - m_frame) / float(CONTENT_FRAMES);
|
float tt = (CONTENT_FRAMES - m_frame) / float(CONTENT_FRAMES);
|
||||||
tt = Zeus::Math::clamp(0.f, tt, 1.f);
|
tt = zeus::clamp(0.f, tt, 1.f);
|
||||||
updateContentOpacity(tt);
|
updateContentOpacity(tt);
|
||||||
}
|
}
|
||||||
m_vertsBinding.load(&m_verts, sizeof(m_verts));
|
m_vertsBinding.load(&m_verts, sizeof(m_verts));
|
||||||
|
@ -415,7 +415,7 @@ bool ModalWindow::skipBuildInAnimation()
|
||||||
if (m_phase != Phase::BuildIn)
|
if (m_phase != Phase::BuildIn)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
Specter::ViewResources& res = rootView().viewRes();
|
specter::ViewResources& res = rootView().viewRes();
|
||||||
float pf = res.pixelFactor();
|
float pf = res.pixelFactor();
|
||||||
|
|
||||||
m_lineTime = 1.0;
|
m_lineTime = 1.0;
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#include "Specter/MultiLineTextView.hpp"
|
#include "specter/MultiLineTextView.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::MultiLineTextView");
|
static logvisor::Module Log("specter::MultiLineTextView");
|
||||||
|
|
||||||
std::string MultiLineTextView::LineWrap(const std::string& str, int wrap)
|
std::string MultiLineTextView::LineWrap(const std::string& str, int wrap)
|
||||||
{
|
{
|
||||||
|
@ -22,7 +22,7 @@ std::string MultiLineTextView::LineWrap(const std::string& str, int wrap)
|
||||||
utf8proc_int32_t ch;
|
utf8proc_int32_t ch;
|
||||||
utf8proc_ssize_t sz = utf8proc_iterate(it, -1, &ch);
|
utf8proc_ssize_t sz = utf8proc_iterate(it, -1, &ch);
|
||||||
if (sz < 0)
|
if (sz < 0)
|
||||||
Log.report(LogVisor::FatalError, "invalid UTF-8 char");
|
Log.report(logvisor::Fatal, "invalid UTF-8 char");
|
||||||
if (ch == '\n')
|
if (ch == '\n')
|
||||||
{
|
{
|
||||||
ret += '\n';
|
ret += '\n';
|
||||||
|
@ -156,7 +156,7 @@ MultiLineTextView::MultiLineTextView(ViewResources& res,
|
||||||
lineHeight) {}
|
lineHeight) {}
|
||||||
|
|
||||||
void MultiLineTextView::typesetGlyphs(const std::string& str,
|
void MultiLineTextView::typesetGlyphs(const std::string& str,
|
||||||
const Zeus::CColor& defaultColor,
|
const zeus::CColor& defaultColor,
|
||||||
unsigned wrap)
|
unsigned wrap)
|
||||||
{
|
{
|
||||||
if (wrap)
|
if (wrap)
|
||||||
|
@ -176,7 +176,7 @@ void MultiLineTextView::typesetGlyphs(const std::string& str,
|
||||||
utf8proc_int32_t ch;
|
utf8proc_int32_t ch;
|
||||||
utf8proc_ssize_t sz = utf8proc_iterate(it, -1, &ch);
|
utf8proc_ssize_t sz = utf8proc_iterate(it, -1, &ch);
|
||||||
if (sz < 0)
|
if (sz < 0)
|
||||||
Log.report(LogVisor::FatalError, "invalid UTF-8 char");
|
Log.report(logvisor::Fatal, "invalid UTF-8 char");
|
||||||
if (ch == '\n' || ch == '\0')
|
if (ch == '\n' || ch == '\0')
|
||||||
++lineCount;
|
++lineCount;
|
||||||
rem -= sz;
|
rem -= sz;
|
||||||
|
@ -207,7 +207,7 @@ void MultiLineTextView::typesetGlyphs(const std::string& str,
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiLineTextView::typesetGlyphs(const std::wstring& str,
|
void MultiLineTextView::typesetGlyphs(const std::wstring& str,
|
||||||
const Zeus::CColor& defaultColor,
|
const zeus::CColor& defaultColor,
|
||||||
unsigned wrap)
|
unsigned wrap)
|
||||||
{
|
{
|
||||||
if (wrap)
|
if (wrap)
|
||||||
|
@ -251,7 +251,7 @@ void MultiLineTextView::typesetGlyphs(const std::wstring& str,
|
||||||
updateSize();
|
updateSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiLineTextView::colorGlyphs(const Zeus::CColor& newColor)
|
void MultiLineTextView::colorGlyphs(const zeus::CColor& newColor)
|
||||||
{
|
{
|
||||||
for (std::unique_ptr<TextView>& tv : m_lines)
|
for (std::unique_ptr<TextView>& tv : m_lines)
|
||||||
tv->colorGlyphs(newColor);
|
tv->colorGlyphs(newColor);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "Specter/PathButtons.hpp"
|
#include "specter/PathButtons.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
PathButtons::PathButtons(ViewResources& res, View& parentView, IPathButtonsBinding& binding, bool fillContainer)
|
PathButtons::PathButtons(ViewResources& res, View& parentView, IPathButtonsBinding& binding, bool fillContainer)
|
||||||
|
@ -12,17 +12,17 @@ PathButtons::PathButtons(ViewResources& res, View& parentView, IPathButtonsBindi
|
||||||
setContentView(m_contentView.m_view.get());
|
setContentView(m_contentView.m_view.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PathButtons::setButtons(const std::vector<HECL::SystemString>& comps)
|
void PathButtons::setButtons(const std::vector<hecl::SystemString>& comps)
|
||||||
{
|
{
|
||||||
m_pathButtons.clear();
|
m_pathButtons.clear();
|
||||||
m_pathButtons.reserve(comps.size());
|
m_pathButtons.reserve(comps.size());
|
||||||
size_t idx = 0;
|
size_t idx = 0;
|
||||||
ViewResources& res = rootView().viewRes();
|
ViewResources& res = rootView().viewRes();
|
||||||
for (const HECL::SystemString& c : comps)
|
for (const hecl::SystemString& c : comps)
|
||||||
m_pathButtons.emplace_back(*this, res, idx++, c);
|
m_pathButtons.emplace_back(*this, res, idx++, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PathButtons::setMultiplyColor(const Zeus::CColor& color)
|
void PathButtons::setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
ScrollView::setMultiplyColor(color);
|
ScrollView::setMultiplyColor(color);
|
||||||
for (PathButton& b : m_pathButtons)
|
for (PathButton& b : m_pathButtons)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/Space.hpp"
|
#include "specter/Space.hpp"
|
||||||
#include "Specter/Menu.hpp"
|
#include "specter/Menu.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::RootView");
|
static logvisor::Module Log("specter::RootView");
|
||||||
|
|
||||||
RootView::RootView(IViewManager& viewMan, ViewResources& res, boo::IWindow* window)
|
RootView::RootView(IViewManager& viewMan, ViewResources& res, boo::IWindow* window)
|
||||||
: View(res), m_window(window), m_viewMan(viewMan), m_viewRes(&res), m_events(*this),
|
: View(res), m_window(window), m_viewMan(viewMan), m_viewRes(&res), m_events(*this),
|
||||||
|
@ -25,7 +25,7 @@ RootView::SplitMenuSystem::SplitMenuSystem(RootView& rv)
|
||||||
m_viewVertBlockBuf = rv.m_viewRes->m_factory->newDynamicBuffer(boo::BufferUse::Vertex, sizeof(View::ViewBlock), 1);
|
m_viewVertBlockBuf = rv.m_viewRes->m_factory->newDynamicBuffer(boo::BufferUse::Vertex, sizeof(View::ViewBlock), 1);
|
||||||
m_vertsBinding.initSolid(*rv.m_viewRes, 32, m_viewVertBlockBuf);
|
m_vertsBinding.initSolid(*rv.m_viewRes, 32, m_viewVertBlockBuf);
|
||||||
|
|
||||||
Zeus::CColor col = {0.0,0.0,0.0,0.5};
|
zeus::CColor col = {0.0,0.0,0.0,0.5};
|
||||||
for (int i=0 ; i<32 ; ++i)
|
for (int i=0 ; i<32 ; ++i)
|
||||||
m_verts[i].m_color = col;
|
m_verts[i].m_color = col;
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ void RootView::mouseDown(const boo::SWindowCoord& coord, boo::EMouseButton butto
|
||||||
else if (button == boo::EMouseButton::Secondary)
|
else if (button == boo::EMouseButton::Secondary)
|
||||||
{
|
{
|
||||||
m_splitMenuSystem.m_splitView = m_hoverSplitDragView;
|
m_splitMenuSystem.m_splitView = m_hoverSplitDragView;
|
||||||
adoptRightClickMenu(std::make_unique<Specter::Menu>(*m_viewRes, *this, &m_splitMenuSystem), coord);
|
adoptRightClickMenu(std::make_unique<specter::Menu>(*m_viewRes, *this, &m_splitMenuSystem), coord);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#include "Specter/ScrollView.hpp"
|
#include "specter/ScrollView.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
#include "Specter/Button.hpp"
|
#include "specter/Button.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
#define MAX_SCROLL_SPEED 100
|
#define MAX_SCROLL_SPEED 100
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ void ScrollView::scroll(const boo::SWindowCoord& coord, const boo::SScrollDelta&
|
||||||
updateSize();
|
updateSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScrollView::setMultiplyColor(const Zeus::CColor& color)
|
void ScrollView::setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
View::setMultiplyColor(color);
|
View::setMultiplyColor(color);
|
||||||
if (m_style == Style::SideButtons)
|
if (m_style == Style::SideButtons)
|
||||||
|
@ -270,7 +270,7 @@ void ScrollView::resized(const boo::SWindowRect& root, const boo::SWindowRect& s
|
||||||
m_verts[1].m_pos.assign(x, y-barHeight, 0);
|
m_verts[1].m_pos.assign(x, y-barHeight, 0);
|
||||||
m_verts[2].m_pos.assign(x+2*pf, y, 0);
|
m_verts[2].m_pos.assign(x+2*pf, y, 0);
|
||||||
m_verts[3].m_pos.assign(x+2*pf, y-barHeight, 0);
|
m_verts[3].m_pos.assign(x+2*pf, y-barHeight, 0);
|
||||||
const Zeus::CColor& color = rootView().themeData().scrollIndicator();
|
const zeus::CColor& color = rootView().themeData().scrollIndicator();
|
||||||
for (int i=0 ; i<4 ; ++i)
|
for (int i=0 ; i<4 ; ++i)
|
||||||
m_verts[i].m_color = color;
|
m_verts[i].m_color = color;
|
||||||
m_vertsBinding.load(m_verts, sizeof(m_verts));
|
m_vertsBinding.load(m_verts, sizeof(m_verts));
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#include <LogVisor/LogVisor.hpp>
|
#include "logvisor/logvisor.hpp"
|
||||||
#include "Specter/Space.hpp"
|
#include "specter/Space.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::Space");
|
static logvisor::Module Log("specter::Space");
|
||||||
|
|
||||||
#define TRIANGLE_DIM 12
|
#define TRIANGLE_DIM 12
|
||||||
#define TRIANGLE_DIM1 10
|
#define TRIANGLE_DIM1 10
|
||||||
|
@ -22,21 +22,21 @@ Space::Space(ViewResources& res, View& parentView, ISpaceController& controller,
|
||||||
{
|
{
|
||||||
commitResources(res);
|
commitResources(res);
|
||||||
setBackground(res.themeData().spaceBackground());
|
setBackground(res.themeData().spaceBackground());
|
||||||
static const Zeus::CColor triColor = {0.75, 0.75, 0.75, 1.0};
|
static const zeus::CColor triColor = {0.75, 0.75, 0.75, 1.0};
|
||||||
if (controller.spaceSplitAllowed())
|
if (controller.spaceSplitAllowed())
|
||||||
m_cornerView.m_view.reset(new CornerView(res, *this, triColor));
|
m_cornerView.m_view.reset(new CornerView(res, *this, triColor));
|
||||||
if (tbPos != Toolbar::Position::None)
|
if (tbPos != Toolbar::Position::None)
|
||||||
m_toolbar.m_view.reset(new Toolbar(res, *this, tbPos, tbUnits));
|
m_toolbar.m_view.reset(new Toolbar(res, *this, tbPos, tbUnits));
|
||||||
}
|
}
|
||||||
|
|
||||||
Space::CornerView::CornerView(ViewResources& res, Space& space, const Zeus::CColor& triColor)
|
Space::CornerView::CornerView(ViewResources& res, Space& space, const zeus::CColor& triColor)
|
||||||
: View(res, space), m_space(space)
|
: View(res, space), m_space(space)
|
||||||
{
|
{
|
||||||
m_vertexBinding.initSolid(res, 34, m_viewVertBlockBuf);
|
m_vertexBinding.initSolid(res, 34, m_viewVertBlockBuf);
|
||||||
float pf = res.pixelFactor();
|
float pf = res.pixelFactor();
|
||||||
|
|
||||||
Zeus::CColor edgeColor1 = triColor * res.themeData().spaceTriangleShading1();
|
zeus::CColor edgeColor1 = triColor * res.themeData().spaceTriangleShading1();
|
||||||
Zeus::CColor edgeColor2 = triColor * res.themeData().spaceTriangleShading2();
|
zeus::CColor edgeColor2 = triColor * res.themeData().spaceTriangleShading2();
|
||||||
View::SolidShaderVert verts[34];
|
View::SolidShaderVert verts[34];
|
||||||
|
|
||||||
verts[0].m_pos.assign(0, TRIANGLE_DIM * pf, 0);
|
verts[0].m_pos.assign(0, TRIANGLE_DIM * pf, 0);
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
#include <LogVisor/LogVisor.hpp>
|
|
||||||
|
|
||||||
namespace Specter
|
|
||||||
{
|
|
||||||
static LogVisor::LogModule Log("Specter");
|
|
||||||
}
|
|
|
@ -1,16 +1,16 @@
|
||||||
#include <LogVisor/LogVisor.hpp>
|
#include "logvisor/logvisor.hpp"
|
||||||
#include "Specter/SplitView.hpp"
|
#include "specter/SplitView.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/Space.hpp"
|
#include "specter/Space.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::SplitView");
|
static logvisor::Module Log("specter::SplitView");
|
||||||
|
|
||||||
void SplitView::Resources::init(boo::IGraphicsDataFactory* factory, const IThemeData& theme)
|
void SplitView::Resources::init(boo::IGraphicsDataFactory* factory, const IThemeData& theme)
|
||||||
{
|
{
|
||||||
static const Zeus::RGBA32 tex[3] =
|
static const zeus::RGBA32 tex[3] =
|
||||||
{
|
{
|
||||||
{0,0,0,64},
|
{0,0,0,64},
|
||||||
{0,0,0,255},
|
{0,0,0,255},
|
||||||
|
@ -32,7 +32,7 @@ SplitView::SplitView(ViewResources& res, View& parentView, ISplitSpaceController
|
||||||
View* SplitView::setContentView(int slot, View* view)
|
View* SplitView::setContentView(int slot, View* view)
|
||||||
{
|
{
|
||||||
if (slot < 0 || slot > 1)
|
if (slot < 0 || slot > 1)
|
||||||
Log.report(LogVisor::FatalError, "out-of-range slot to RootView::SplitView::setContentView");
|
Log.report(logvisor::Fatal, "out-of-range slot to RootView::SplitView::setContentView");
|
||||||
View* ret = m_views[slot].m_view;
|
View* ret = m_views[slot].m_view;
|
||||||
m_views[slot].m_view = view;
|
m_views[slot].m_view = view;
|
||||||
m_views[slot].m_mouseDown = 0;
|
m_views[slot].m_mouseDown = 0;
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#include "Specter/Table.hpp"
|
#include "specter/Table.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
#include "Specter/ScrollView.hpp"
|
#include "specter/ScrollView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::Table");
|
static logvisor::Module Log("specter::Table");
|
||||||
#define ROW_HEIGHT 18
|
#define ROW_HEIGHT 18
|
||||||
#define CELL_MARGIN 1
|
#define CELL_MARGIN 1
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ Table::Table(ViewResources& res, View& parentView, ITableDataBinding* data,
|
||||||
m_hVerts(new SolidShaderVert[maxColumns * 6]), m_rowsView(*this, res)
|
m_hVerts(new SolidShaderVert[maxColumns * 6]), m_rowsView(*this, res)
|
||||||
{
|
{
|
||||||
if (!maxColumns)
|
if (!maxColumns)
|
||||||
Log.report(LogVisor::FatalError, "0-column tables not supported");
|
Log.report(logvisor::Fatal, "0-column tables not supported");
|
||||||
|
|
||||||
m_vertsBinding.initSolid(res, maxColumns * 6, m_viewVertBlockBuf);
|
m_vertsBinding.initSolid(res, maxColumns * 6, m_viewVertBlockBuf);
|
||||||
commitResources(res);
|
commitResources(res);
|
||||||
|
@ -64,8 +64,8 @@ void Table::_setHeaderVerts(const boo::SWindowRect& sub)
|
||||||
for (c=0 ; c<std::min(m_maxColumns, m_columns) ; ++c)
|
for (c=0 ; c<std::min(m_maxColumns, m_columns) ; ++c)
|
||||||
{
|
{
|
||||||
const ViewChild<std::unique_ptr<CellView>>& hv = *it;
|
const ViewChild<std::unique_ptr<CellView>>& hv = *it;
|
||||||
const Zeus::CColor* c1 = &theme.button1Inactive();
|
const zeus::CColor* c1 = &theme.button1Inactive();
|
||||||
const Zeus::CColor* c2 = &theme.button2Inactive();
|
const zeus::CColor* c2 = &theme.button2Inactive();
|
||||||
if (hv.m_mouseDown && hv.m_mouseIn)
|
if (hv.m_mouseDown && hv.m_mouseIn)
|
||||||
{
|
{
|
||||||
c1 = &theme.button1Press();
|
c1 = &theme.button1Press();
|
||||||
|
@ -77,19 +77,19 @@ void Table::_setHeaderVerts(const boo::SWindowRect& sub)
|
||||||
c2 = &theme.button2Hover();
|
c2 = &theme.button2Hover();
|
||||||
}
|
}
|
||||||
|
|
||||||
Zeus::CColor cm1 = *c1;
|
zeus::CColor cm1 = *c1;
|
||||||
Zeus::CColor cm2 = *c2;
|
zeus::CColor cm2 = *c2;
|
||||||
if (sCol == c)
|
if (sCol == c)
|
||||||
{
|
{
|
||||||
if (sDir == SortDirection::Ascending)
|
if (sDir == SortDirection::Ascending)
|
||||||
{
|
{
|
||||||
cm1 *= Zeus::CColor::skGreen;
|
cm1 *= zeus::CColor::skGreen;
|
||||||
cm2 *= Zeus::CColor::skGreen;
|
cm2 *= zeus::CColor::skGreen;
|
||||||
}
|
}
|
||||||
else if (sDir == SortDirection::Descending)
|
else if (sDir == SortDirection::Descending)
|
||||||
{
|
{
|
||||||
cm1 *= Zeus::CColor::skRed;
|
cm1 *= zeus::CColor::skRed;
|
||||||
cm2 *= Zeus::CColor::skRed;
|
cm2 *= zeus::CColor::skRed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ void Table::RowsView::_setRowVerts(const boo::SWindowRect& sub, const boo::SWind
|
||||||
for (r=0, c=0 ; r<SPECTER_TABLE_MAX_ROWS &&
|
for (r=0, c=0 ; r<SPECTER_TABLE_MAX_ROWS &&
|
||||||
(sub.location[1] + yOff + spacing) >= scissor.location[1] ; ++r)
|
(sub.location[1] + yOff + spacing) >= scissor.location[1] ; ++r)
|
||||||
{
|
{
|
||||||
const Zeus::CColor& color = (startIdx+r==m_t.m_selectedRow) ? theme.tableCellBgSelected() :
|
const zeus::CColor& color = (startIdx+r==m_t.m_selectedRow) ? theme.tableCellBgSelected() :
|
||||||
((r&1) ? theme.tableCellBg1() : theme.tableCellBg2());
|
((r&1) ? theme.tableCellBg1() : theme.tableCellBg2());
|
||||||
int xOff = 0;
|
int xOff = 0;
|
||||||
auto cellRectsIt = cellRects.begin();
|
auto cellRectsIt = cellRects.begin();
|
||||||
|
@ -175,7 +175,7 @@ void Table::RowsView::_setRowVerts(const boo::SWindowRect& sub, const boo::SWind
|
||||||
void Table::cycleSortColumn(size_t c)
|
void Table::cycleSortColumn(size_t c)
|
||||||
{
|
{
|
||||||
if (c >= m_columns)
|
if (c >= m_columns)
|
||||||
Log.report(LogVisor::FatalError, "cycleSortColumn out of bounds (%" PRISize ", %" PRISize ")",
|
Log.report(logvisor::Fatal, "cycleSortColumn out of bounds (%" PRISize ", %" PRISize ")",
|
||||||
c, m_columns);
|
c, m_columns);
|
||||||
if (m_state)
|
if (m_state)
|
||||||
{
|
{
|
||||||
|
@ -195,7 +195,7 @@ void Table::selectRow(size_t r)
|
||||||
if (m_inSelectRow)
|
if (m_inSelectRow)
|
||||||
return;
|
return;
|
||||||
if (r >= m_rows && r != -1)
|
if (r >= m_rows && r != -1)
|
||||||
Log.report(LogVisor::FatalError, "selectRow out of bounds (%" PRISize ", %" PRISize ")",
|
Log.report(logvisor::Fatal, "selectRow out of bounds (%" PRISize ", %" PRISize ")",
|
||||||
r, m_rows);
|
r, m_rows);
|
||||||
if (r == m_selectedRow)
|
if (r == m_selectedRow)
|
||||||
{
|
{
|
||||||
|
@ -270,7 +270,7 @@ void Table::selectRow(size_t r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Table::setMultiplyColor(const Zeus::CColor& color)
|
void Table::setMultiplyColor(const zeus::CColor& color)
|
||||||
{
|
{
|
||||||
View::setMultiplyColor(color);
|
View::setMultiplyColor(color);
|
||||||
if (m_scroll.m_view)
|
if (m_scroll.m_view)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "Specter/TextField.hpp"
|
#include "specter/TextField.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
TextField::TextField(ViewResources& res, View& parentView, IStringBinding* strBind)
|
TextField::TextField(ViewResources& res, View& parentView, IStringBinding* strBind)
|
||||||
|
@ -109,13 +109,13 @@ void TextField::setInactive()
|
||||||
const IThemeData& theme = rootView().themeData();
|
const IThemeData& theme = rootView().themeData();
|
||||||
if (m_error)
|
if (m_error)
|
||||||
{
|
{
|
||||||
m_verts[0].m_color = theme.textfield1Inactive() * Zeus::CColor::skRed;
|
m_verts[0].m_color = theme.textfield1Inactive() * zeus::CColor::skRed;
|
||||||
m_verts[1].m_color = theme.textfield2Inactive() * Zeus::CColor::skRed;
|
m_verts[1].m_color = theme.textfield2Inactive() * zeus::CColor::skRed;
|
||||||
m_verts[2].m_color = theme.textfield1Inactive() * Zeus::CColor::skRed;
|
m_verts[2].m_color = theme.textfield1Inactive() * zeus::CColor::skRed;
|
||||||
m_verts[3].m_color = theme.textfield2Inactive() * Zeus::CColor::skRed;
|
m_verts[3].m_color = theme.textfield2Inactive() * zeus::CColor::skRed;
|
||||||
m_verts[4].m_color = theme.textfield2Inactive() * Zeus::CColor::skRed;
|
m_verts[4].m_color = theme.textfield2Inactive() * zeus::CColor::skRed;
|
||||||
for (int i=5 ; i<28 ; ++i)
|
for (int i=5 ; i<28 ; ++i)
|
||||||
m_verts[i].m_color = theme.textfield2Inactive() * Zeus::CColor::skRed;
|
m_verts[i].m_color = theme.textfield2Inactive() * zeus::CColor::skRed;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -136,13 +136,13 @@ void TextField::setHover()
|
||||||
const IThemeData& theme = rootView().themeData();
|
const IThemeData& theme = rootView().themeData();
|
||||||
if (m_error)
|
if (m_error)
|
||||||
{
|
{
|
||||||
m_verts[0].m_color = theme.textfield1Hover() * Zeus::CColor::skRed;
|
m_verts[0].m_color = theme.textfield1Hover() * zeus::CColor::skRed;
|
||||||
m_verts[1].m_color = theme.textfield2Hover() * Zeus::CColor::skRed;
|
m_verts[1].m_color = theme.textfield2Hover() * zeus::CColor::skRed;
|
||||||
m_verts[2].m_color = theme.textfield1Hover() * Zeus::CColor::skRed;
|
m_verts[2].m_color = theme.textfield1Hover() * zeus::CColor::skRed;
|
||||||
m_verts[3].m_color = theme.textfield2Hover() * Zeus::CColor::skRed;
|
m_verts[3].m_color = theme.textfield2Hover() * zeus::CColor::skRed;
|
||||||
m_verts[4].m_color = theme.textfield2Hover() * Zeus::CColor::skRed;
|
m_verts[4].m_color = theme.textfield2Hover() * zeus::CColor::skRed;
|
||||||
for (int i=5 ; i<28 ; ++i)
|
for (int i=5 ; i<28 ; ++i)
|
||||||
m_verts[i].m_color = theme.textfield2Inactive() * Zeus::CColor::skRed;
|
m_verts[i].m_color = theme.textfield2Inactive() * zeus::CColor::skRed;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -163,13 +163,13 @@ void TextField::setDisabled()
|
||||||
const IThemeData& theme = rootView().themeData();
|
const IThemeData& theme = rootView().themeData();
|
||||||
if (m_error)
|
if (m_error)
|
||||||
{
|
{
|
||||||
m_verts[0].m_color = theme.textfield1Disabled() * Zeus::CColor::skRed;
|
m_verts[0].m_color = theme.textfield1Disabled() * zeus::CColor::skRed;
|
||||||
m_verts[1].m_color = theme.textfield2Disabled() * Zeus::CColor::skRed;
|
m_verts[1].m_color = theme.textfield2Disabled() * zeus::CColor::skRed;
|
||||||
m_verts[2].m_color = theme.textfield1Disabled() * Zeus::CColor::skRed;
|
m_verts[2].m_color = theme.textfield1Disabled() * zeus::CColor::skRed;
|
||||||
m_verts[3].m_color = theme.textfield2Disabled() * Zeus::CColor::skRed;
|
m_verts[3].m_color = theme.textfield2Disabled() * zeus::CColor::skRed;
|
||||||
m_verts[4].m_color = theme.textfield2Disabled() * Zeus::CColor::skRed;
|
m_verts[4].m_color = theme.textfield2Disabled() * zeus::CColor::skRed;
|
||||||
for (int i=5 ; i<28 ; ++i)
|
for (int i=5 ; i<28 ; ++i)
|
||||||
m_verts[i].m_color = theme.textfield2Disabled() * Zeus::CColor::skRed;
|
m_verts[i].m_color = theme.textfield2Disabled() * zeus::CColor::skRed;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -579,8 +579,8 @@ void TextField::think()
|
||||||
|
|
||||||
if (m_error && m_errorFrames <= 360)
|
if (m_error && m_errorFrames <= 360)
|
||||||
{
|
{
|
||||||
Zeus::CColor errMult;
|
zeus::CColor errMult;
|
||||||
Zeus::CColor errBg;
|
zeus::CColor errBg;
|
||||||
if (m_errorFrames < 300)
|
if (m_errorFrames < 300)
|
||||||
{
|
{
|
||||||
errMult = m_viewVertBlock.m_color;
|
errMult = m_viewVertBlock.m_color;
|
||||||
|
@ -588,16 +588,16 @@ void TextField::think()
|
||||||
}
|
}
|
||||||
else if (m_errorFrames >= 360)
|
else if (m_errorFrames >= 360)
|
||||||
{
|
{
|
||||||
errMult = Zeus::CColor::skClear;
|
errMult = zeus::CColor::skClear;
|
||||||
errBg = rootView().themeData().tooltipBackground();
|
errBg = rootView().themeData().tooltipBackground();
|
||||||
errBg[3] = 0.0;
|
errBg[3] = 0.0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float t = (m_errorFrames - 300) / 60.0;
|
float t = (m_errorFrames - 300) / 60.0;
|
||||||
errMult = Zeus::CColor::lerp(m_viewVertBlock.m_color, Zeus::CColor::skClear, t);
|
errMult = zeus::CColor::lerp(m_viewVertBlock.m_color, zeus::CColor::skClear, t);
|
||||||
errBg = Zeus::CColor::lerp(rootView().themeData().tooltipBackground() * m_viewVertBlock.m_color,
|
errBg = zeus::CColor::lerp(rootView().themeData().tooltipBackground() * m_viewVertBlock.m_color,
|
||||||
Zeus::CColor::skClear, t);
|
zeus::CColor::skClear, t);
|
||||||
}
|
}
|
||||||
for (size_t i=32 ; i<41 ; ++i)
|
for (size_t i=32 ; i<41 ; ++i)
|
||||||
m_verts[i].m_color = errBg;
|
m_verts[i].m_color = errBg;
|
||||||
|
@ -635,7 +635,7 @@ void TextField::_reallySetCursorPos(size_t pos)
|
||||||
float pf = rootView().viewRes().pixelFactor();
|
float pf = rootView().viewRes().pixelFactor();
|
||||||
int offset1 = 4 * pf + m_text->queryReverseAdvance(pos);
|
int offset1 = 4 * pf + m_text->queryReverseAdvance(pos);
|
||||||
int offset2 = offset1 + 2 * pf;
|
int offset2 = offset1 + 2 * pf;
|
||||||
const Zeus::CColor& selColor = rootView().viewRes().themeData().textfieldSelection();
|
const zeus::CColor& selColor = rootView().viewRes().themeData().textfieldSelection();
|
||||||
m_verts[28].m_pos.assign(offset1, 18 * pf, 0);
|
m_verts[28].m_pos.assign(offset1, 18 * pf, 0);
|
||||||
m_verts[28].m_color = selColor;
|
m_verts[28].m_color = selColor;
|
||||||
m_verts[29].m_pos.assign(offset1, 4 * pf, 0);
|
m_verts[29].m_pos.assign(offset1, 4 * pf, 0);
|
||||||
|
@ -708,8 +708,8 @@ void TextField::_reallySetSelectionRange(size_t start, size_t len)
|
||||||
std::vector<TextView::RenderGlyph>& glyphs = m_text->accessGlyphs();
|
std::vector<TextView::RenderGlyph>& glyphs = m_text->accessGlyphs();
|
||||||
offset1 += glyphs[start].m_pos[0][0];
|
offset1 += glyphs[start].m_pos[0][0];
|
||||||
offset2 += glyphs[start+len-1].m_pos[2][0];
|
offset2 += glyphs[start+len-1].m_pos[2][0];
|
||||||
const Zeus::CColor& selColor = rootView().themeData().selectedFieldText();
|
const zeus::CColor& selColor = rootView().themeData().selectedFieldText();
|
||||||
const Zeus::CColor& deselColor = m_error ? rootView().themeData().uiText() :
|
const zeus::CColor& deselColor = m_error ? rootView().themeData().uiText() :
|
||||||
rootView().themeData().fieldText();
|
rootView().themeData().fieldText();
|
||||||
|
|
||||||
for (size_t i=0 ; i<glyphs.size() ; ++i)
|
for (size_t i=0 ; i<glyphs.size() ; ++i)
|
||||||
|
@ -741,7 +741,7 @@ void TextField::_reallySetMarkRange(size_t start, size_t len)
|
||||||
offset1 += glyphs[start].m_pos[0][0];
|
offset1 += glyphs[start].m_pos[0][0];
|
||||||
offset2 += glyphs[start+len-1].m_pos[2][0];
|
offset2 += glyphs[start+len-1].m_pos[2][0];
|
||||||
|
|
||||||
const Zeus::CColor& selColor = rootView().themeData().textfieldMarkSelection();
|
const zeus::CColor& selColor = rootView().themeData().textfieldMarkSelection();
|
||||||
m_verts[28].m_pos.assign(offset1, 18 * pf, 0);
|
m_verts[28].m_pos.assign(offset1, 18 * pf, 0);
|
||||||
m_verts[28].m_color = selColor;
|
m_verts[28].m_color = selColor;
|
||||||
m_verts[29].m_pos.assign(offset1, 4 * pf, 0);
|
m_verts[29].m_pos.assign(offset1, 4 * pf, 0);
|
||||||
|
@ -793,7 +793,7 @@ void TextField::_clearSelectionRange()
|
||||||
m_selectionStart = 0;
|
m_selectionStart = 0;
|
||||||
m_selectionCount = 0;
|
m_selectionCount = 0;
|
||||||
|
|
||||||
const Zeus::CColor& deselColor = m_error ? rootView().themeData().uiText() :
|
const zeus::CColor& deselColor = m_error ? rootView().themeData().uiText() :
|
||||||
rootView().themeData().fieldText();
|
rootView().themeData().fieldText();
|
||||||
|
|
||||||
std::vector<TextView::RenderGlyph>& glyphs = m_text->accessGlyphs();
|
std::vector<TextView::RenderGlyph>& glyphs = m_text->accessGlyphs();
|
||||||
|
@ -877,7 +877,7 @@ void TextField::resized(const boo::SWindowRect& root, const boo::SWindowRect& su
|
||||||
m_verts[39].m_pos.assign(eX, eY + eHeight, 0);
|
m_verts[39].m_pos.assign(eX, eY + eHeight, 0);
|
||||||
m_verts[40].m_pos.assign(eX + 14 * pf, eY + eHeight, 0);
|
m_verts[40].m_pos.assign(eX + 14 * pf, eY + eHeight, 0);
|
||||||
for (size_t i=32 ; i<41 ; ++i)
|
for (size_t i=32 ; i<41 ; ++i)
|
||||||
m_verts[i].m_color = Zeus::CColor::skClear;
|
m_verts[i].m_color = zeus::CColor::skClear;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_vertsBinding.load(m_verts, sizeof(m_verts));
|
m_vertsBinding.load(m_verts, sizeof(m_verts));
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
#include "Specter/TextView.hpp"
|
#include "specter/TextView.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "utf8proc.h"
|
#include "utf8proc.h"
|
||||||
|
|
||||||
#include <freetype/internal/internal.h>
|
#include <freetype/internal/internal.h>
|
||||||
#include <freetype/internal/ftobjs.h>
|
#include <freetype/internal/ftobjs.h>
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::TextView");
|
static logvisor::Module Log("specter::TextView");
|
||||||
|
|
||||||
static const char* GLSLVS =
|
static const char* GLSLVS =
|
||||||
"#version 330\n"
|
"#version 330\n"
|
||||||
|
@ -351,7 +351,7 @@ TextView::TextView(ViewResources& res, View& parentView, const FontAtlas& font,
|
||||||
TextView::TextView(ViewResources& res, View& parentView, FontTag font, Alignment align, size_t capacity)
|
TextView::TextView(ViewResources& res, View& parentView, FontTag font, Alignment align, size_t capacity)
|
||||||
: TextView(res, parentView, res.m_textRes.m_fcache->lookupAtlas(font), align, capacity) {}
|
: TextView(res, parentView, res.m_textRes.m_fcache->lookupAtlas(font), align, capacity) {}
|
||||||
|
|
||||||
TextView::RenderGlyph::RenderGlyph(int& adv, const FontAtlas::Glyph& glyph, const Zeus::CColor& defaultColor)
|
TextView::RenderGlyph::RenderGlyph(int& adv, const FontAtlas::Glyph& glyph, const zeus::CColor& defaultColor)
|
||||||
{
|
{
|
||||||
m_pos[0].assign(adv + glyph.m_leftPadding, glyph.m_verticalOffset + glyph.m_height, 0.f);
|
m_pos[0].assign(adv + glyph.m_leftPadding, glyph.m_verticalOffset + glyph.m_height, 0.f);
|
||||||
m_pos[1].assign(adv + glyph.m_leftPadding, glyph.m_verticalOffset, 0.f);
|
m_pos[1].assign(adv + glyph.m_leftPadding, glyph.m_verticalOffset, 0.f);
|
||||||
|
@ -381,7 +381,7 @@ int TextView::DoKern(FT_Pos val, const FontAtlas& atlas)
|
||||||
return FT_PIX_ROUND(val) >> 6;
|
return FT_PIX_ROUND(val) >> 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextView::typesetGlyphs(const std::string& str, const Zeus::CColor& defaultColor)
|
void TextView::typesetGlyphs(const std::string& str, const zeus::CColor& defaultColor)
|
||||||
{
|
{
|
||||||
size_t rem = str.size();
|
size_t rem = str.size();
|
||||||
const utf8proc_uint8_t* it = reinterpret_cast<const utf8proc_uint8_t*>(str.data());
|
const utf8proc_uint8_t* it = reinterpret_cast<const utf8proc_uint8_t*>(str.data());
|
||||||
|
@ -397,7 +397,7 @@ void TextView::typesetGlyphs(const std::string& str, const Zeus::CColor& default
|
||||||
utf8proc_int32_t ch;
|
utf8proc_int32_t ch;
|
||||||
utf8proc_ssize_t sz = utf8proc_iterate(it, -1, &ch);
|
utf8proc_ssize_t sz = utf8proc_iterate(it, -1, &ch);
|
||||||
if (sz < 0)
|
if (sz < 0)
|
||||||
Log.report(LogVisor::FatalError, "invalid UTF-8 char");
|
Log.report(logvisor::Fatal, "invalid UTF-8 char");
|
||||||
if (ch == '\n')
|
if (ch == '\n')
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -450,7 +450,7 @@ void TextView::typesetGlyphs(const std::string& str, const Zeus::CColor& default
|
||||||
updateSize();
|
updateSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextView::typesetGlyphs(const std::wstring& str, const Zeus::CColor& defaultColor)
|
void TextView::typesetGlyphs(const std::wstring& str, const zeus::CColor& defaultColor)
|
||||||
{
|
{
|
||||||
uint32_t lCh = -1;
|
uint32_t lCh = -1;
|
||||||
m_glyphs.clear();
|
m_glyphs.clear();
|
||||||
|
@ -507,13 +507,13 @@ void TextView::typesetGlyphs(const std::wstring& str, const Zeus::CColor& defaul
|
||||||
updateSize();
|
updateSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextView::colorGlyphs(const Zeus::CColor& newColor)
|
void TextView::colorGlyphs(const zeus::CColor& newColor)
|
||||||
{
|
{
|
||||||
for (RenderGlyph& glyph : m_glyphs)
|
for (RenderGlyph& glyph : m_glyphs)
|
||||||
glyph.m_color = newColor;
|
glyph.m_color = newColor;
|
||||||
m_valid = false;
|
m_valid = false;
|
||||||
}
|
}
|
||||||
void TextView::colorGlyphsTypeOn(const Zeus::CColor& newColor, float startInterval, float fadeTime)
|
void TextView::colorGlyphsTypeOn(const zeus::CColor& newColor, float startInterval, float fadeTime)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
void TextView::think()
|
void TextView::think()
|
||||||
|
@ -543,7 +543,7 @@ void TextView::draw(boo::IGraphicsCommandQueue* gfxQ)
|
||||||
std::pair<int,int> TextView::queryGlyphDimensions(size_t pos) const
|
std::pair<int,int> TextView::queryGlyphDimensions(size_t pos) const
|
||||||
{
|
{
|
||||||
if (pos >= m_glyphInfo.size())
|
if (pos >= m_glyphInfo.size())
|
||||||
Log.report(LogVisor::FatalError,
|
Log.report(logvisor::Fatal,
|
||||||
"TextView::queryGlyphWidth(%" PRISize ") out of bounds: %" PRISize,
|
"TextView::queryGlyphWidth(%" PRISize ") out of bounds: %" PRISize,
|
||||||
pos, m_glyphInfo.size());
|
pos, m_glyphInfo.size());
|
||||||
|
|
||||||
|
@ -571,7 +571,7 @@ size_t TextView::reverseSelectGlyph(int x) const
|
||||||
int TextView::queryReverseAdvance(size_t idx) const
|
int TextView::queryReverseAdvance(size_t idx) const
|
||||||
{
|
{
|
||||||
if (idx > m_glyphInfo.size())
|
if (idx > m_glyphInfo.size())
|
||||||
Log.report(LogVisor::FatalError,
|
Log.report(logvisor::Fatal,
|
||||||
"TextView::queryReverseGlyph(%" PRISize ") out of inclusive bounds: %" PRISize,
|
"TextView::queryReverseGlyph(%" PRISize ") out of inclusive bounds: %" PRISize,
|
||||||
idx, m_glyphInfo.size());
|
idx, m_glyphInfo.size());
|
||||||
if (!idx) return 0;
|
if (!idx) return 0;
|
||||||
|
@ -581,7 +581,7 @@ int TextView::queryReverseAdvance(size_t idx) const
|
||||||
std::pair<size_t,size_t> TextView::queryWholeWordRange(size_t idx) const
|
std::pair<size_t,size_t> TextView::queryWholeWordRange(size_t idx) const
|
||||||
{
|
{
|
||||||
if (idx > m_glyphInfo.size())
|
if (idx > m_glyphInfo.size())
|
||||||
Log.report(LogVisor::FatalError,
|
Log.report(logvisor::Fatal,
|
||||||
"TextView::queryWholeWordRange(%" PRISize ") out of inclusive bounds: %" PRISize,
|
"TextView::queryWholeWordRange(%" PRISize ") out of inclusive bounds: %" PRISize,
|
||||||
idx, m_glyphInfo.size());
|
idx, m_glyphInfo.size());
|
||||||
if (m_glyphInfo.empty())
|
if (m_glyphInfo.empty())
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
#include <LogVisor/LogVisor.hpp>
|
#include "logvisor/logvisor.hpp"
|
||||||
#include "Specter/Toolbar.hpp"
|
#include "specter/Toolbar.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
|
|
||||||
#define TOOLBAR_PADDING 10
|
#define TOOLBAR_PADDING 10
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::Space");
|
static logvisor::Module Log("specter::Space");
|
||||||
|
|
||||||
void Toolbar::Resources::init(boo::IGraphicsDataFactory* factory, const IThemeData& theme)
|
void Toolbar::Resources::init(boo::IGraphicsDataFactory* factory, const IThemeData& theme)
|
||||||
{
|
{
|
||||||
static const Zeus::RGBA32 tex[] =
|
static const zeus::RGBA32 tex[] =
|
||||||
{
|
{
|
||||||
{{255,255,255,64}},
|
{{255,255,255,64}},
|
||||||
{{255,255,255,64}},
|
{{255,255,255,64}},
|
||||||
|
@ -123,7 +123,7 @@ void Toolbar::setVerticalVerts(int height)
|
||||||
void Toolbar::push_back(View* v, unsigned unit)
|
void Toolbar::push_back(View* v, unsigned unit)
|
||||||
{
|
{
|
||||||
if (unit >= m_units)
|
if (unit >= m_units)
|
||||||
Log.report(LogVisor::FatalError, "unit %u out of range %u", unit, m_units);
|
Log.report(logvisor::Fatal, "unit %u out of range %u", unit, m_units);
|
||||||
std::vector<ViewChild<View*>>& u = m_children[unit];
|
std::vector<ViewChild<View*>>& u = m_children[unit];
|
||||||
u.emplace_back();
|
u.emplace_back();
|
||||||
u.back().m_view = v;
|
u.back().m_view = v;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "Specter/Tooltip.hpp"
|
#include "specter/Tooltip.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
|
|
||||||
#define TOOLTIP_MAX_WIDTH 316
|
#define TOOLTIP_MAX_WIDTH 316
|
||||||
|
@ -37,7 +37,7 @@ Tooltip::Tooltip(ViewResources& res, View& parentView, const std::string& title,
|
||||||
m_title.reset(new TextView(res, *this, res.m_heading14));
|
m_title.reset(new TextView(res, *this, res.m_heading14));
|
||||||
m_title->typesetGlyphs(m_titleStr);
|
m_title->typesetGlyphs(m_titleStr);
|
||||||
m_message.reset(new MultiLineTextView(res, *this, res.m_mainFont));
|
m_message.reset(new MultiLineTextView(res, *this, res.m_mainFont));
|
||||||
m_message->typesetGlyphs(m_messageStr, Zeus::CColor::skWhite,
|
m_message->typesetGlyphs(m_messageStr, zeus::CColor::skWhite,
|
||||||
int(TOOLTIP_MAX_TEXT_WIDTH * res.pixelFactor()));
|
int(TOOLTIP_MAX_TEXT_WIDTH * res.pixelFactor()));
|
||||||
|
|
||||||
float pf = res.pixelFactor();
|
float pf = res.pixelFactor();
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
#include "Specter/Translator.hpp"
|
#include "specter/Translator.hpp"
|
||||||
#include <LogVisor/LogVisor.hpp>
|
#include "logvisor/logvisor.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::Translator");
|
static logvisor::Module Log("specter::Translator");
|
||||||
|
|
||||||
Locale::Locale(const std::string& name, const std::string& fullName,
|
Locale::Locale(const std::string& name, const std::string& fullName,
|
||||||
const unsigned char* yamlSource, size_t yamlLength)
|
const unsigned char* yamlSource, size_t yamlLength)
|
||||||
: m_name(name), m_fullName(fullName)
|
: m_name(name), m_fullName(fullName)
|
||||||
{
|
{
|
||||||
Athena::io::YAMLDocReader reader;
|
athena::io::YAMLDocReader reader;
|
||||||
yaml_parser_set_input_string(reader.getParser(), yamlSource, yamlLength);
|
yaml_parser_set_input_string(reader.getParser(), yamlSource, yamlLength);
|
||||||
reader.parse();
|
reader.parse();
|
||||||
m_rootNode = std::move(reader.releaseRootNode());
|
m_rootNode = std::move(reader.releaseRootNode());
|
||||||
|
@ -17,20 +17,20 @@ Locale::Locale(const std::string& name, const std::string& fullName,
|
||||||
{
|
{
|
||||||
m_langNode = m_rootNode->findMapChild(name.c_str());
|
m_langNode = m_rootNode->findMapChild(name.c_str());
|
||||||
if (!m_langNode)
|
if (!m_langNode)
|
||||||
Log.report(LogVisor::FatalError, "no root node '%s' found in locale", name.c_str());
|
Log.report(logvisor::Fatal, "no root node '%s' found in locale", name.c_str());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Log.report(LogVisor::Warning, "locale empty");
|
Log.report(logvisor::Warning, "locale empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Translator::setLocale(const Locale* targetLocale)
|
void Translator::setLocale(const Locale* targetLocale)
|
||||||
{
|
{
|
||||||
if (!targetLocale)
|
if (!targetLocale)
|
||||||
Log.report(LogVisor::FatalError, "null locale");
|
Log.report(logvisor::Fatal, "null locale");
|
||||||
m_targetLocale = targetLocale;
|
m_targetLocale = targetLocale;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const std::string* RecursiveLookup(const Athena::io::YAMLNode* node,
|
static const std::string* RecursiveLookup(const athena::io::YAMLNode* node,
|
||||||
std::string::const_iterator start,
|
std::string::const_iterator start,
|
||||||
std::string::const_iterator end)
|
std::string::const_iterator end)
|
||||||
{
|
{
|
||||||
|
@ -38,13 +38,13 @@ static const std::string* RecursiveLookup(const Athena::io::YAMLNode* node,
|
||||||
{
|
{
|
||||||
if (*it == '/')
|
if (*it == '/')
|
||||||
{
|
{
|
||||||
const Athena::io::YAMLNode* ch = node->findMapChild(std::string(start, it).c_str());
|
const athena::io::YAMLNode* ch = node->findMapChild(std::string(start, it).c_str());
|
||||||
if (!ch)
|
if (!ch)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return RecursiveLookup(ch, it+1, end);
|
return RecursiveLookup(ch, it+1, end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const Athena::io::YAMLNode* ch = node->findMapChild(std::string(start, end).c_str());
|
const athena::io::YAMLNode* ch = node->findMapChild(std::string(start, end).c_str());
|
||||||
if (!ch)
|
if (!ch)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return &ch->m_scalarString;
|
return &ch->m_scalarString;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
#include "Specter/View.hpp"
|
#include "specter/View.hpp"
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
#include "Specter/RootView.hpp"
|
#include "specter/RootView.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::View");
|
static logvisor::Module Log("specter::View");
|
||||||
|
|
||||||
static const char* GLSLSolidVS =
|
static const char* GLSLSolidVS =
|
||||||
"#version 330\n"
|
"#version 330\n"
|
||||||
|
@ -375,7 +375,7 @@ void View::draw(boo::IGraphicsCommandQueue* gfxQ)
|
||||||
void View::commitResources(ViewResources& res)
|
void View::commitResources(ViewResources& res)
|
||||||
{
|
{
|
||||||
if (m_gfxData)
|
if (m_gfxData)
|
||||||
Log.report(LogVisor::FatalError, "multiple resource commits not allowed");
|
Log.report(logvisor::Fatal, "multiple resource commits not allowed");
|
||||||
m_gfxData = res.m_factory->commit();
|
m_gfxData = res.m_factory->commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
#include "Specter/ViewResources.hpp"
|
#include "specter/ViewResources.hpp"
|
||||||
|
|
||||||
namespace Specter
|
namespace specter
|
||||||
{
|
{
|
||||||
static LogVisor::LogModule Log("Specter::ViewResources");
|
static logvisor::Module Log("specter::ViewResources");
|
||||||
|
|
||||||
void ViewResources::init(boo::IGraphicsDataFactory* factory, FontCache* fcache,
|
void ViewResources::init(boo::IGraphicsDataFactory* factory, FontCache* fcache,
|
||||||
const IThemeData* theme, float pf)
|
const IThemeData* theme, float pf)
|
||||||
{
|
{
|
||||||
if (!factory || !fcache || !theme)
|
if (!factory || !fcache || !theme)
|
||||||
Log.report(LogVisor::FatalError, "all arguments of ViewResources::init() must be non-null");
|
Log.report(logvisor::Fatal, "all arguments of ViewResources::init() must be non-null");
|
||||||
m_pixelFactor = pf;
|
m_pixelFactor = pf;
|
||||||
m_theme = theme;
|
m_theme = theme;
|
||||||
m_factory = factory;
|
m_factory = factory;
|
||||||
|
@ -37,7 +37,7 @@ void ViewResources::init(boo::IGraphicsDataFactory* factory, FontCache* fcache,
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
Log.report(LogVisor::FatalError, _S("unable to init view system for %s"), factory->platformName());
|
Log.report(logvisor::Fatal, _S("unable to init view system for %s"), factory->platformName());
|
||||||
}
|
}
|
||||||
m_resData = factory->commit();
|
m_resData = factory->commit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include "logvisor/logvisor.hpp"
|
||||||
|
|
||||||
|
namespace specter
|
||||||
|
{
|
||||||
|
static logvisor::Module Log("Specter");
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
bintoc(droidsans-permissive.c droidsans-permissive.ttf.gz DROIDSANS_PERMISSIVE)
|
bintoc(droidsans-permissive.c droidsans-permissive.ttf.gz DROIDSANS_PERMISSIVE)
|
||||||
bintoc(bmonofont-i18n.c bmonofont-i18n.ttf.gz BMONOFONT)
|
bintoc(bmonofont-i18n.c bmonofont-i18n.ttf.gz BMONOFONT)
|
||||||
bintoc(SpecterCurveGlyphs.c SpecterCurveGlyphs.ttf.gz SPECTERCURVES)
|
bintoc(SpecterCurveGlyphs.c SpecterCurveGlyphs.ttf.gz SPECTERCURVES)
|
||||||
add_library(SpecterFonts droidsans-permissive.c bmonofont-i18n.c SpecterCurveGlyphs.c)
|
add_library(specter-fonts droidsans-permissive.c bmonofont-i18n.c SpecterCurveGlyphs.c)
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit cd28979d0aa17f08b7244e7e3aac5a9c8ef0e8ae
|
Subproject commit a76d43d5df9f0bd533ee4806fa6ae34d5d93ff0b
|
Loading…
Reference in New Issue