csci3081/libSimpleGraphics/include/simple_graphics/circle_viewer.h
Michael Zhang 1ba4536588
f
2018-01-29 17:24:20 -06:00

91 lines
2.5 KiB
C++

/**
* @file circle_viewer.h
*
* @copyright 2017 3081 Staff, All rights reserved.
*/
#ifndef INCLUDE_CIRCLE_VIEWER_H_
#define INCLUDE_CIRCLE_VIEWER_H_
/*******************************************************************************
* Includes
******************************************************************************/
#include "include/simple_graphics/graphics_app.h"
/*******************************************************************************
* Namespaces
******************************************************************************/
NAMESPACE_BEGIN(csci3081);
/**
* @brief An application that opens up a window that includes a few buttons for
* controlling the simulation and can be used to draw circles and other
* computer graphics.
*
* After constructing a new \ref CircleViewer, call \ref Run() to start and run
* the application. \ref Run() will not return until the application window is
* closed. Make sure that you call \ref cs3081::InitGraphics() before creating the
* \ref RobotViewer app. Example:
*
* ```
* int main(int argc, char **argv) {
* cs3081::InitGraphics();
* cs3081::CircleViewer *app = new cs3081::CircleViewer();
* app->Run();
* cs3081::ShutdownGraphics();
* return 0;
* }
* ```
*
* While the window is open \ref UpdateSimulation() will be called
* repeatedly, once per frame. Fill this in to update your simulation
* or perform any other processing that should happen over time as the
* simulation progresses.
*
* Fill in the On*() methods as desired to respond to user input events.
*
* Fill in the Draw*() methods to draw graphics to the screen using
* either the nanovg library or raw OpenGL.
*/
class CircleViewer : public GraphicsApp {
public:
CircleViewer();
~CircleViewer();
void UpdateSimulation(double dt);
void OnRestartBtnPressed();
void OnPauseBtnPressed();
void OnMouseMove(int x, int y);
void OnLeftMouseDown(int x, int y);
void OnLeftMouseUp(int x, int y);
void OnRightMouseDown(int x, int y);
void OnRightMouseUp(int x, int y);
void OnKeyDown(const char *c, int modifiers);
void OnKeyUp(const char *c, int modifiers);
void OnSpecialKeyDown(int key, int scancode, int modifiers);
void OnSpecialKeyUp(int key, int scancode, int modifiers);
void DrawUsingNanoVG(NVGcontext *ctx);
void DrawUsingOpenGL();
private:
double sim_time_;
bool paused_;
nanogui::Button *pause_btn_;
};
NAMESPACE_END(csci3081);
#endif /* INCLUDE_CIRCLE_VIEWER_H_ */