2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-07-13 09:25:52 +00:00

Right-click menu ownership

This commit is contained in:
Jack Andersen 2016-01-28 13:55:19 -10:00
parent bb0ee2e6d9
commit 08b288039d
2 changed files with 38 additions and 1 deletions

View File

@ -28,6 +28,9 @@ class RootView : public View
View* m_activeDragView = nullptr; View* m_activeDragView = nullptr;
Button* m_activeMenuButton = nullptr; Button* m_activeMenuButton = nullptr;
ViewChild<std::unique_ptr<View>> m_rightClickMenu;
boo::SWindowCoord m_rightClickMenuCoord;
SplitView* m_hoverSplitDragView = nullptr; SplitView* m_hoverSplitDragView = nullptr;
bool m_activeSplitDragView = false; bool m_activeSplitDragView = false;
SplitView* recursiveTestSplitHover(SplitView* sv, const boo::SWindowCoord& coord) const; SplitView* recursiveTestSplitHover(SplitView* sv, const boo::SWindowCoord& coord) const;
@ -71,6 +74,13 @@ public:
std::vector<View*>& accessContentViews() {return m_views;} std::vector<View*>& accessContentViews() {return m_views;}
void adoptRightClickMenu(std::unique_ptr<View>&& menu, const boo::SWindowCoord& coord)
{
m_rightClickMenu.m_view = std::move(menu);
m_rightClickMenuCoord = coord;
}
View* getRightClickMenu() {return m_rightClickMenu.m_view.get();}
void setActiveTextView(ITextInputView* textView) void setActiveTextView(ITextInputView* textView)
{ {
if (m_activeTextView) if (m_activeTextView)

View File

@ -36,6 +36,13 @@ void RootView::resized(const boo::SWindowRect& root, const boo::SWindowRect&)
void RootView::mouseDown(const boo::SWindowCoord& coord, boo::EMouseButton button, boo::EModifierKey mods) void RootView::mouseDown(const boo::SWindowCoord& coord, boo::EMouseButton button, boo::EModifierKey mods)
{ {
if (m_rightClickMenu.m_view)
{
if (!m_rightClickMenu.mouseDown(coord, button, mods))
m_rightClickMenu.m_view.reset();
return;
}
if (m_activeMenuButton) if (m_activeMenuButton)
{ {
ViewChild<std::unique_ptr<View>>& mv = m_activeMenuButton->getMenu(); ViewChild<std::unique_ptr<View>>& mv = m_activeMenuButton->getMenu();
@ -59,6 +66,12 @@ void RootView::mouseDown(const boo::SWindowCoord& coord, boo::EMouseButton butto
void RootView::mouseUp(const boo::SWindowCoord& coord, boo::EMouseButton button, boo::EModifierKey mods) void RootView::mouseUp(const boo::SWindowCoord& coord, boo::EMouseButton button, boo::EModifierKey mods)
{ {
if (m_rightClickMenu.m_view)
{
m_rightClickMenu.mouseUp(coord, button, mods);
return;
}
if (m_activeMenuButton) if (m_activeMenuButton)
{ {
ViewChild<std::unique_ptr<View>>& mv = m_activeMenuButton->getMenu(); ViewChild<std::unique_ptr<View>>& mv = m_activeMenuButton->getMenu();
@ -99,6 +112,12 @@ SplitView* RootView::recursiveTestSplitHover(SplitView* sv, const boo::SWindowCo
void RootView::mouseMove(const boo::SWindowCoord& coord) void RootView::mouseMove(const boo::SWindowCoord& coord)
{ {
if (m_rightClickMenu.m_view)
{
m_rightClickMenu.mouseMove(coord);
return;
}
if (m_activeMenuButton) if (m_activeMenuButton)
{ {
ViewChild<std::unique_ptr<View>>& mv = m_activeMenuButton->getMenu(); ViewChild<std::unique_ptr<View>>& mv = m_activeMenuButton->getMenu();
@ -172,6 +191,12 @@ void RootView::mouseEnter(const boo::SWindowCoord& coord)
void RootView::mouseLeave(const boo::SWindowCoord& coord) void RootView::mouseLeave(const boo::SWindowCoord& coord)
{ {
if (m_rightClickMenu.m_view)
{
m_rightClickMenu.mouseLeave(coord);
return;
}
if (m_activeMenuButton) if (m_activeMenuButton)
{ {
ViewChild<std::unique_ptr<View>>& mv = m_activeMenuButton->getMenu(); ViewChild<std::unique_ptr<View>>& mv = m_activeMenuButton->getMenu();
@ -283,7 +308,7 @@ void RootView::displayTooltip(const std::string& name, const std::string& help)
} }
void RootView::draw(boo::IGraphicsCommandQueue* gfxQ) void RootView::draw(boo::IGraphicsCommandQueue* gfxQ)
{ {
if (m_resizeRTDirty) if (m_resizeRTDirty)
{ {
gfxQ->resizeRenderTexture(m_renderTex, m_rootRect.size[0], m_rootRect.size[1]); gfxQ->resizeRenderTexture(m_renderTex, m_rootRect.size[0], m_rootRect.size[1]);
@ -298,6 +323,8 @@ void RootView::draw(boo::IGraphicsCommandQueue* gfxQ)
v->draw(gfxQ); v->draw(gfxQ);
if (m_tooltip) if (m_tooltip)
m_tooltip->draw(gfxQ); m_tooltip->draw(gfxQ);
if (m_rightClickMenu.m_view)
m_rightClickMenu.m_view->draw(gfxQ);
gfxQ->resolveDisplay(m_renderTex); gfxQ->resolveDisplay(m_renderTex);
} }