|
@@ -299,6 +299,8 @@ struct Imgui
|
|
|
, m_halfTexel(0.0f)
|
|
, m_halfTexel(0.0f)
|
|
|
, m_nvg(NULL)
|
|
, m_nvg(NULL)
|
|
|
, m_view(31)
|
|
, m_view(31)
|
|
|
|
|
+ , m_viewWidth(0)
|
|
|
|
|
+ , m_viewHeight(0)
|
|
|
, m_currentFontIdx(0)
|
|
, m_currentFontIdx(0)
|
|
|
{
|
|
{
|
|
|
m_invTextureWidth = 1.0f/m_textureWidth;
|
|
m_invTextureWidth = 1.0f/m_textureWidth;
|
|
@@ -636,6 +638,8 @@ struct Imgui
|
|
|
nvgBeginFrame(m_nvg, _width, _height, 1.0f, NVG_STRAIGHT_ALPHA);
|
|
nvgBeginFrame(m_nvg, _width, _height, 1.0f, NVG_STRAIGHT_ALPHA);
|
|
|
|
|
|
|
|
m_view = _view;
|
|
m_view = _view;
|
|
|
|
|
+ m_viewWidth = _width;
|
|
|
|
|
+ m_viewHeight = _height;
|
|
|
bgfx::setViewSeq(_view, true);
|
|
bgfx::setViewSeq(_view, true);
|
|
|
bgfx::setViewRect(_view, 0, 0, _width, _height);
|
|
bgfx::setViewRect(_view, 0, 0, _width, _height);
|
|
|
|
|
|
|
@@ -1169,7 +1173,7 @@ struct Imgui
|
|
|
, cy
|
|
, cy
|
|
|
, CHECK_SIZE
|
|
, CHECK_SIZE
|
|
|
, CHECK_SIZE
|
|
, CHECK_SIZE
|
|
|
- , 2
|
|
|
|
|
|
|
+ , TriangleOrientation::Up
|
|
|
, imguiRGBA(255, 255, 255, isActive(id) ? 255 : 200)
|
|
, imguiRGBA(255, 255, 255, isActive(id) ? 255 : 200)
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
@@ -1179,7 +1183,7 @@ struct Imgui
|
|
|
, cy
|
|
, cy
|
|
|
, CHECK_SIZE
|
|
, CHECK_SIZE
|
|
|
, CHECK_SIZE
|
|
, CHECK_SIZE
|
|
|
- , 1
|
|
|
|
|
|
|
+ , TriangleOrientation::Right
|
|
|
, imguiRGBA(255, 255, 255, isActive(id) ? 255 : 200)
|
|
, imguiRGBA(255, 255, 255, isActive(id) ? 255 : 200)
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
@@ -1216,6 +1220,85 @@ struct Imgui
|
|
|
return res;
|
|
return res;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ bool borderButton(ImguiBorder::Enum _border, bool _checked, bool _enabled)
|
|
|
|
|
+ {
|
|
|
|
|
+ m_widgetId++;
|
|
|
|
|
+ uint16_t id = (m_areaId << 8) | m_widgetId;
|
|
|
|
|
+
|
|
|
|
|
+ const int32_t triSize = 12;
|
|
|
|
|
+ const int32_t borderSize = 15;
|
|
|
|
|
+
|
|
|
|
|
+ int32_t xx;
|
|
|
|
|
+ int32_t yy;
|
|
|
|
|
+ int32_t width;
|
|
|
|
|
+ int32_t height;
|
|
|
|
|
+ int32_t triX;
|
|
|
|
|
+ int32_t triY;
|
|
|
|
|
+ TriangleOrientation::Enum orientation;
|
|
|
|
|
+
|
|
|
|
|
+ if (ImguiBorder::Left == _border)
|
|
|
|
|
+ {
|
|
|
|
|
+ xx = -borderSize;
|
|
|
|
|
+ yy = 0;
|
|
|
|
|
+ width = 2*borderSize;
|
|
|
|
|
+ height = m_viewHeight;
|
|
|
|
|
+ triX = 0;
|
|
|
|
|
+ triY = (m_viewHeight-triSize)/2;
|
|
|
|
|
+ orientation = _checked ? TriangleOrientation::Left : TriangleOrientation::Right;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (ImguiBorder::Right == _border)
|
|
|
|
|
+ {
|
|
|
|
|
+ xx = m_viewWidth - borderSize;
|
|
|
|
|
+ yy = 0;
|
|
|
|
|
+ width = 2*borderSize;
|
|
|
|
|
+ height = m_viewHeight;
|
|
|
|
|
+ triX = m_viewWidth - triSize - 2;
|
|
|
|
|
+ triY = (m_viewHeight-width)/2;
|
|
|
|
|
+ orientation = _checked ? TriangleOrientation::Right : TriangleOrientation::Left;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (ImguiBorder::Top == _border)
|
|
|
|
|
+ {
|
|
|
|
|
+ xx = 0;
|
|
|
|
|
+ yy = -borderSize;
|
|
|
|
|
+ width = m_viewWidth;
|
|
|
|
|
+ height = 2*borderSize;
|
|
|
|
|
+ triX = (m_viewWidth-triSize)/2;
|
|
|
|
|
+ triY = 0;
|
|
|
|
|
+ orientation = _checked ? TriangleOrientation::Up : TriangleOrientation::Down;
|
|
|
|
|
+ }
|
|
|
|
|
+ else //if (ImguiBorder::Bottom == _border).
|
|
|
|
|
+ {
|
|
|
|
|
+ xx = 0;
|
|
|
|
|
+ yy = m_viewHeight - borderSize;
|
|
|
|
|
+ width = m_viewWidth;
|
|
|
|
|
+ height = 2*borderSize;
|
|
|
|
|
+ triX = (m_viewWidth-triSize)/2;
|
|
|
|
|
+ triY = m_viewHeight-triSize;
|
|
|
|
|
+ orientation = _checked ? TriangleOrientation::Down : TriangleOrientation::Up;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const bool over = _enabled && inRect(xx, yy, width, height, false);
|
|
|
|
|
+ const bool res = buttonLogic(id, over);
|
|
|
|
|
+
|
|
|
|
|
+ drawRoundedRect( (float)xx
|
|
|
|
|
+ , (float)yy
|
|
|
|
|
+ , (float)width
|
|
|
|
|
+ , (float)height
|
|
|
|
|
+ , 0.0f
|
|
|
|
|
+ , isActive(id) ? imguiRGBA(23, 23, 23, 192) : imguiRGBA(0, 0, 0, 222)
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ drawTriangle( triX
|
|
|
|
|
+ , triY
|
|
|
|
|
+ , triSize
|
|
|
|
|
+ , triSize
|
|
|
|
|
+ , orientation
|
|
|
|
|
+ , isHot(id) ? imguiRGBA(255, 196, 0, 222) : imguiRGBA(255, 255, 255, 192)
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ return res;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
void labelVargs(const char* _format, va_list _argList)
|
|
void labelVargs(const char* _format, va_list _argList)
|
|
|
{
|
|
{
|
|
|
char temp[8192];
|
|
char temp[8192];
|
|
@@ -1603,9 +1686,31 @@ struct Imgui
|
|
|
drawPolygon(verts, 4, _fth, _abgr);
|
|
drawPolygon(verts, 4, _fth, _abgr);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void drawTriangle(int32_t _x, int32_t _y, int32_t _width, int32_t _height, int32_t _flags, uint32_t _abgr)
|
|
|
|
|
|
|
+ struct TriangleOrientation
|
|
|
|
|
+ {
|
|
|
|
|
+ enum Enum
|
|
|
|
|
+ {
|
|
|
|
|
+ Left,
|
|
|
|
|
+ Right,
|
|
|
|
|
+ Up,
|
|
|
|
|
+ Down,
|
|
|
|
|
+ };
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ void drawTriangle(int32_t _x, int32_t _y, int32_t _width, int32_t _height, TriangleOrientation::Enum _orientation, uint32_t _abgr)
|
|
|
{
|
|
{
|
|
|
- if (1 == _flags)
|
|
|
|
|
|
|
+ if (TriangleOrientation::Left == _orientation)
|
|
|
|
|
+ {
|
|
|
|
|
+ const float verts[3 * 2] =
|
|
|
|
|
+ {
|
|
|
|
|
+ (float)_x + 0.5f + (float)_width * 1.0f, (float)_y + 0.5f,
|
|
|
|
|
+ (float)_x + 0.5f, (float)_y + 0.5f + (float)_height / 2.0f - 0.5f,
|
|
|
|
|
+ (float)_x + 0.5f + (float)_width * 1.0f, (float)_y + 0.5f + (float)_height - 1.0f,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ drawPolygon(verts, 3, 1.0f, _abgr);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (TriangleOrientation::Right == _orientation)
|
|
|
{
|
|
{
|
|
|
const float verts[3 * 2] =
|
|
const float verts[3 * 2] =
|
|
|
{
|
|
{
|
|
@@ -1616,7 +1721,7 @@ struct Imgui
|
|
|
|
|
|
|
|
drawPolygon(verts, 3, 1.0f, _abgr);
|
|
drawPolygon(verts, 3, 1.0f, _abgr);
|
|
|
}
|
|
}
|
|
|
- else
|
|
|
|
|
|
|
+ else if (TriangleOrientation::Up == _orientation)
|
|
|
{
|
|
{
|
|
|
const float verts[3 * 2] =
|
|
const float verts[3 * 2] =
|
|
|
{
|
|
{
|
|
@@ -1625,6 +1730,17 @@ struct Imgui
|
|
|
(float)_x + 0.5f + (float)_width - 1.0f, (float)_y + 0.5f + (float)_height - 1.0f,
|
|
(float)_x + 0.5f + (float)_width - 1.0f, (float)_y + 0.5f + (float)_height - 1.0f,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ drawPolygon(verts, 3, 1.0f, _abgr);
|
|
|
|
|
+ }
|
|
|
|
|
+ else //if (TriangleOrientation::Down == _orientation).
|
|
|
|
|
+ {
|
|
|
|
|
+ const float verts[3 * 2] =
|
|
|
|
|
+ {
|
|
|
|
|
+ (float)_x + 0.5f, (float)_y + 0.5f,
|
|
|
|
|
+ (float)_x + 0.5f + (float)_width / 2.0f - 0.5f, (float)_y + 0.5f + (float)_height - 1.0f,
|
|
|
|
|
+ (float)_x + 0.5f + (float)_width - 1.0f, (float)_y + 0.5f,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
drawPolygon(verts, 3, 1.0f, _abgr);
|
|
drawPolygon(verts, 3, 1.0f, _abgr);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -2175,6 +2291,8 @@ struct Imgui
|
|
|
NVGcontext* m_nvg;
|
|
NVGcontext* m_nvg;
|
|
|
|
|
|
|
|
uint8_t m_view;
|
|
uint8_t m_view;
|
|
|
|
|
+ uint16_t m_viewWidth;
|
|
|
|
|
+ uint16_t m_viewHeight;
|
|
|
|
|
|
|
|
#if !USE_NANOVG_FONT
|
|
#if !USE_NANOVG_FONT
|
|
|
struct Font
|
|
struct Font
|
|
@@ -2230,6 +2348,11 @@ void imguiEndFrame()
|
|
|
s_imgui.endFrame();
|
|
s_imgui.endFrame();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+bool imguiBorderButton(ImguiBorder::Enum _border, bool _checked, bool _enabled)
|
|
|
|
|
+{
|
|
|
|
|
+ return s_imgui.borderButton(_border, _checked, _enabled);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
bool imguiBeginScrollArea(const char* _name, int32_t _x, int32_t _y, int32_t _width, int32_t _height, int32_t* _scroll, bool _enabled)
|
|
bool imguiBeginScrollArea(const char* _name, int32_t _x, int32_t _y, int32_t _width, int32_t _height, int32_t* _scroll, bool _enabled)
|
|
|
{
|
|
{
|
|
|
return s_imgui.beginScrollArea(_name, _x, _y, _width, _height, _scroll, _enabled);
|
|
return s_imgui.beginScrollArea(_name, _x, _y, _width, _height, _scroll, _enabled);
|