reactphysics3d/testbed/nanogui/include/nanogui/window.h

75 lines
2.4 KiB
C++

/*
nanogui/window.h -- Top-level window widget
NanoGUI was developed by Wenzel Jakob <wenzel.jakob@epfl.ch>.
The widget drawing code is based on the NanoVG demo application
by Mikko Mononen.
All rights reserved. Use of this source code is governed by a
BSD-style license that can be found in the LICENSE.txt file.
*/
/** \file */
#pragma once
#include <nanogui/widget.h>
NAMESPACE_BEGIN(nanogui)
/**
* \class Window window.h nanogui/window.h
*
* \brief Top-level window widget.
*/
class NANOGUI_EXPORT Window : public Widget {
friend class Popup;
public:
Window(Widget *parent, const std::string &title = "Untitled");
/// Return the window title
const std::string &title() const { return mTitle; }
/// Set the window title
void setTitle(const std::string &title) { mTitle = title; }
/// Is this a model dialog?
bool modal() const { return mModal; }
/// Set whether or not this is a modal dialog
void setModal(bool modal) { mModal = modal; }
/// Return the panel used to house window buttons
Widget *buttonPanel();
/// Dispose the window
void dispose();
/// Center the window in the current \ref Screen
void center();
/// Draw the window
virtual void draw(NVGcontext *ctx) override;
/// Handle window drag events
virtual bool mouseDragEvent(const Vector2i &p, const Vector2i &rel, int button, int modifiers) override;
/// Handle mouse events recursively and bring the current window to the top
virtual bool mouseButtonEvent(const Vector2i &p, int button, bool down, int modifiers) override;
/// Accept scroll events and propagate them to the widget under the mouse cursor
virtual bool scrollEvent(const Vector2i &p, const Vector2f &rel) override;
/// Compute the preferred size of the widget
virtual Vector2i preferredSize(NVGcontext *ctx) const override;
/// Invoke the associated layout generator to properly place child widgets, if any
virtual void performLayout(NVGcontext *ctx) override;
virtual void save(Serializer &s) const override;
virtual bool load(Serializer &s) override;
protected:
/// Internal helper function to maintain nested window position values; overridden in \ref Popup
virtual void refreshRelativePlacement();
protected:
std::string mTitle;
Widget *mButtonPanel;
bool mModal;
bool mDrag;
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};
NAMESPACE_END(nanogui)