// // Copyright 2013 Pixar // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License // and the following modification to it: Section 6 Trademarks. // deleted and replaced with: // // 6. Trademarks. This License does not grant permission to use the // trade names, trademarks, service marks, or product names of the // Licensor and its affiliates, except as required for reproducing // the content of the NOTICE file. // // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, // either express or implied. See the License for the specific // language governing permissions and limitations under the // License. // #ifndef HUD_H #define HUD_H #include #include #include #include "hud.h" class Hud { public: typedef void (*RadioButtonCallback)(int c); typedef void (*CheckBoxCallback)(bool checked, int data); typedef void (*SliderCallback)(float value, int data); Hud(); virtual ~Hud(); virtual void Init(int width, int height); virtual void Rebuild(int width, int height); virtual bool Flush(); bool IsVisible() const; void SetVisible(bool visible); void DrawString(int x, int y, const char *fmt, ...); void DrawString(int x, int y, float r, float g, float b, const char *fmt, ...); void Clear(); void AddLabel(const char *label, int x, int y); void AddRadioButton(int group, const char *label, bool checked, int x, int y, RadioButtonCallback callback=0, int data=0, int shortcut=0); void AddCheckBox(const char *label, bool checked, int x, int y, CheckBoxCallback callback=0, int data=0, int shortcut=0); void AddSlider(const char *label, float min, float max, float value, int x, int y, int width, bool intStep, SliderCallback callback=0, int data=0); bool KeyDown(int key); bool MouseClick(int x, int y); bool MouseCapture() const; void MouseRelease(); void MouseMotion(int x, int y); int GetWidth() const; int GetHeight() const; protected: struct Item { int x, y, w, h; std::string label; }; struct RadioButton : public Item { int group; int localIndex; bool checked; int shortcut; bool sharedShortcut; RadioButtonCallback callback; int callbackData; }; struct CheckBox : public Item { bool checked; CheckBoxCallback callback; int callbackData; int shortcut; }; struct Slider : public Item { float min, max; float value; SliderCallback callback; int callbackData; bool intStep; void SetValue(float v) { value = std::max(std::min(v, max), min); } }; int drawString(std::vector &vboSource, int x, int y, float r, float g, float b, const char *c) const; int drawChar(std::vector &vboSource, int x, int y, float r, float g, float b, char ch) const; bool hitTest(Item const &item, int x, int y) const { int ix = item.x > 0 ? item.x : _windowWidth + item.x; int iy = item.y > 0 ? item.y : _windowHeight + item.y; return (x >= ix && y >= iy && x <= (ix + item.w) && y <= (iy + item.h)); } void getWindowPos(Item const &item, int *x, int *y) const { *x = item.x > 0 ? item.x : _windowWidth + item.x; *y = item.y > 0 ? item.y : _windowHeight + item.y; } std::vector & getVboSource(); std::vector & getStaticVboSource(); private: bool _visible; std::vector _vboSource, _staticVboSource; int _windowWidth, _windowHeight; bool _requiresRebuildStatic; std::vector _labels; std::vector _radioButtons; std::vector _checkBoxes; std::vector _sliders; int _capturedSlider; }; #endif // HUD_H