metaforce/specter/lib/RootView.cpp

127 lines
3.5 KiB
C++
Raw Normal View History

2015-11-21 01:14:49 +00:00
#include "Specter/RootView.hpp"
#include "Specter/ViewResources.hpp"
2015-11-21 01:14:49 +00:00
2015-11-21 23:45:02 +00:00
namespace Specter
{
2015-11-30 00:21:42 +00:00
static LogVisor::LogModule Log("Specter::RootView");
2015-11-21 01:14:49 +00:00
2015-12-02 01:43:54 +00:00
RootView::RootView(ViewResources& res, boo::IWindow* window)
: View(res, *this), m_window(window), m_events(*this)
2015-11-21 23:45:02 +00:00
{
window->setCallback(&m_events);
2015-11-26 07:35:43 +00:00
boo::SWindowRect rect = window->getWindowFrame();
2015-12-02 01:43:54 +00:00
m_renderTex = res.m_factory->newRenderTexture(rect.size[0], rect.size[1], 1);
commitResources(res);
m_splitView.reset(new SplitView(res, *this, SplitView::Axis::Horizontal));
MultiLineTextView* textView1 = new MultiLineTextView(res, *this, res.m_heading18);
MultiLineTextView* textView2 = new MultiLineTextView(res, *this, res.m_heading18);
2015-11-30 00:21:42 +00:00
m_splitView->setContentView(0, std::unique_ptr<MultiLineTextView>(textView1));
m_splitView->setContentView(1, std::unique_ptr<MultiLineTextView>(textView2));
resized(rect, rect);
2015-11-30 00:21:42 +00:00
textView1->typesetGlyphs("Hello, World!\n\n", Zeus::CColor::skWhite);
textView2->typesetGlyphs("こんにちは世界!\n\n", Zeus::CColor::skWhite);
2015-11-26 23:03:56 +00:00
Zeus::CColor transBlack(0.f, 0.f, 0.f, 0.5f);
2015-11-30 00:21:42 +00:00
textView1->setBackground(transBlack);
textView2->setBackground(transBlack);
2015-11-29 02:55:30 +00:00
setBackground(Zeus::CColor::skGrey);
2015-11-26 23:03:56 +00:00
}
void RootView::destroyed()
{
m_destroyed = true;
2015-11-21 23:45:02 +00:00
}
2015-11-27 22:20:22 +00:00
void RootView::resized(const boo::SWindowRect& root, const boo::SWindowRect&)
2015-11-26 23:03:56 +00:00
{
boo::SWindowRect old = m_rootRect;
2015-11-26 23:03:56 +00:00
m_rootRect = root;
2015-11-26 07:35:43 +00:00
m_rootRect.location[0] = 0;
m_rootRect.location[1] = 0;
2015-11-26 23:03:56 +00:00
View::resized(m_rootRect, m_rootRect);
2015-11-30 00:21:42 +00:00
m_splitView->resized(m_rootRect, m_rootRect);
if (old != m_rootRect)
m_resizeRTDirty = true;
2015-11-21 23:45:02 +00:00
}
void RootView::mouseDown(const boo::SWindowCoord& coord, boo::EMouseButton button, boo::EModifierKey mods)
{
2015-11-30 00:21:42 +00:00
m_splitView->mouseDown(coord, button, mods);
2015-11-21 23:45:02 +00:00
}
void RootView::mouseUp(const boo::SWindowCoord& coord, boo::EMouseButton button, boo::EModifierKey mods)
{
2015-11-30 00:21:42 +00:00
m_splitView->mouseUp(coord, button, mods);
2015-11-21 23:45:02 +00:00
}
void RootView::mouseMove(const boo::SWindowCoord& coord)
{
2015-11-30 00:21:42 +00:00
m_splitView->mouseMove(coord);
2015-11-21 23:45:02 +00:00
}
void RootView::mouseEnter(const boo::SWindowCoord& coord)
{
}
void RootView::mouseLeave(const boo::SWindowCoord& coord)
{
}
void RootView::scroll(const boo::SWindowCoord& coord, const boo::SScrollDelta& scroll)
{
}
void RootView::touchDown(const boo::STouchCoord& coord, uintptr_t tid)
{
}
void RootView::touchUp(const boo::STouchCoord& coord, uintptr_t tid)
{
}
void RootView::touchMove(const boo::STouchCoord& coord, uintptr_t tid)
{
}
void RootView::charKeyDown(unsigned long charCode, boo::EModifierKey mods, bool isRepeat)
{
}
void RootView::charKeyUp(unsigned long charCode, boo::EModifierKey mods)
{
}
void RootView::specialKeyDown(boo::ESpecialKey key, boo::EModifierKey mods, bool isRepeat)
{
2015-12-02 06:13:43 +00:00
if (key == boo::ESpecialKey::Enter && (mods & boo::EModifierKey::Alt) != boo::EModifierKey::None)
m_window->setFullscreen(!m_window->isFullscreen());
2015-11-21 23:45:02 +00:00
}
void RootView::specialKeyUp(boo::ESpecialKey key, boo::EModifierKey mods)
{
}
void RootView::modKeyDown(boo::EModifierKey mod, bool isRepeat)
{
}
void RootView::modKeyUp(boo::EModifierKey mod)
{
}
void RootView::draw(boo::IGraphicsCommandQueue* gfxQ)
{
2015-11-26 07:35:43 +00:00
if (m_resizeRTDirty)
2015-11-26 23:03:56 +00:00
{
2015-11-26 07:35:43 +00:00
gfxQ->resizeRenderTexture(m_renderTex, m_rootRect.size[0], m_rootRect.size[1]);
2015-11-26 23:03:56 +00:00
m_resizeRTDirty = false;
}
2015-11-26 07:35:43 +00:00
gfxQ->setRenderTarget(m_renderTex);
gfxQ->setViewport(m_rootRect);
2015-11-27 22:20:22 +00:00
gfxQ->setScissor(m_rootRect);
2015-11-26 00:24:01 +00:00
View::draw(gfxQ);
2015-11-30 00:21:42 +00:00
m_splitView->draw(gfxQ);
2015-11-26 07:35:43 +00:00
gfxQ->resolveDisplay(m_renderTex);
2015-11-21 23:45:02 +00:00
}
}