11 #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) 12 #define _CRT_SECURE_NO_WARNINGS 16 #define IMGUI_DEFINE_MATH_OPERATORS 17 #define IMGUI_DEFINE_PLACEMENT_NEW 21 #if !defined(alloca) && !defined(__FreeBSD__) && !defined(__DragonFly__) 30 #pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff) 31 #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen 32 #define snprintf _snprintf 36 #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. 37 #pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants ok. 38 #pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference it. 39 #pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness // 40 #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // 41 #elif defined(__GNUC__) 42 #pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used 43 #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function 44 #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value 55 #ifdef IMGUI_STB_NAMESPACE 56 namespace IMGUI_STB_NAMESPACE
61 #pragma warning (push) 62 #pragma warning (disable: 4456) // declaration of 'xx' hides previous local declaration 66 #pragma clang diagnostic push 67 #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. 68 #pragma clang diagnostic ignored "-Wunused-function" 69 #pragma clang diagnostic ignored "-Wmissing-prototypes" 73 #pragma GCC diagnostic push 74 #pragma GCC diagnostic ignored "-Wtype-limits" // warning: comparison is always true due to limited range of data type [-Wtype-limits] 77 #define STBRP_ASSERT(x) IM_ASSERT(x) 78 #ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION 80 #define STB_RECT_PACK_IMPLEMENTATION 84 #define STBTT_malloc(x,u) ((void)(u), ImGui::MemAlloc(x)) 85 #define STBTT_free(x,u) ((void)(u), ImGui::MemFree(x)) 86 #define STBTT_assert(x) IM_ASSERT(x) 87 #ifndef IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION 89 #define STB_TRUETYPE_IMPLEMENTATION 91 #define STBTT_DEF extern 96 #pragma GCC diagnostic pop 100 #pragma clang diagnostic pop 104 #pragma warning (pop) 107 #ifdef IMGUI_STB_NAMESPACE 109 using namespace IMGUI_STB_NAMESPACE;
126 _ClipRectStack.resize(0);
127 _TextureIdStack.resize(0);
129 _ChannelsCurrent = 0;
142 _ClipRectStack.clear();
143 _TextureIdStack.clear();
145 _ChannelsCurrent = 0;
147 for (
int i = 0;
i < _Channels.Size;
i++)
149 if (
i == 0) memset(&_Channels[0], 0,
sizeof(_Channels[0]));
150 _Channels[
i].CmdBuffer.clear();
151 _Channels[
i].IdxBuffer.clear();
157 #define GetCurrentClipRect() (_ClipRectStack.Size ? _ClipRectStack.Data[_ClipRectStack.Size-1] : GNullClipRect) 158 #define GetCurrentTextureId() (_TextureIdStack.Size ? _TextureIdStack.Data[_TextureIdStack.Size-1] : NULL) 167 CmdBuffer.push_back(draw_cmd);
172 ImDrawCmd* current_cmd = CmdBuffer.Size ? &CmdBuffer.back() :
NULL;
176 current_cmd = &CmdBuffer.back();
190 ImDrawCmd* curr_cmd = CmdBuffer.Size > 0 ? &CmdBuffer.Data[CmdBuffer.Size-1] :
NULL;
198 ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 :
NULL;
200 CmdBuffer.pop_back();
202 curr_cmd->
ClipRect = curr_clip_rect;
209 ImDrawCmd* curr_cmd = CmdBuffer.Size ? &CmdBuffer.back() :
NULL;
217 ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 :
NULL;
219 CmdBuffer.pop_back();
224 #undef GetCurrentClipRect 225 #undef GetCurrentTextureId 231 if (intersect_with_current_clip_rect && _ClipRectStack.Size)
233 ImVec4 current = _ClipRectStack.Data[_ClipRectStack.Size-1];
234 if (cr.
x < current.
x) cr.
x = current.
x;
235 if (cr.
y < current.
y) cr.
y = current.
y;
236 if (cr.
z > current.
z) cr.
z = current.
z;
237 if (cr.
w > current.
w) cr.
w = current.
w;
242 _ClipRectStack.push_back(cr);
255 _ClipRectStack.pop_back();
261 _TextureIdStack.push_back(texture_id);
268 _TextureIdStack.pop_back();
274 IM_ASSERT(_ChannelsCurrent == 0 && _ChannelsCount == 1);
275 int old_channels_count = _Channels.Size;
276 if (old_channels_count < channels_count)
277 _Channels.resize(channels_count);
278 _ChannelsCount = channels_count;
284 for (
int i = 1;
i < channels_count;
i++)
286 if (
i >= old_channels_count)
292 _Channels[
i].CmdBuffer.resize(0);
293 _Channels[
i].IdxBuffer.resize(0);
295 if (_Channels[
i].CmdBuffer.Size == 0)
298 draw_cmd.
ClipRect = _ClipRectStack.back();
299 draw_cmd.
TextureId = _TextureIdStack.back();
300 _Channels[
i].CmdBuffer.push_back(draw_cmd);
308 if (_ChannelsCount <= 1)
311 ChannelsSetCurrent(0);
312 if (CmdBuffer.Size && CmdBuffer.back().ElemCount == 0)
313 CmdBuffer.pop_back();
315 int new_cmd_buffer_count = 0, new_idx_buffer_count = 0;
316 for (
int i = 1;
i < _ChannelsCount;
i++)
324 CmdBuffer.resize(CmdBuffer.Size + new_cmd_buffer_count);
325 IdxBuffer.resize(IdxBuffer.Size + new_idx_buffer_count);
327 ImDrawCmd* cmd_write = CmdBuffer.Data + CmdBuffer.Size - new_cmd_buffer_count;
328 _IdxWritePtr = IdxBuffer.Data + IdxBuffer.Size - new_idx_buffer_count;
329 for (
int i = 1;
i < _ChannelsCount;
i++)
342 if (_ChannelsCurrent == idx)
return;
343 memcpy(&_Channels.Data[_ChannelsCurrent].CmdBuffer, &CmdBuffer,
sizeof(CmdBuffer));
344 memcpy(&_Channels.Data[_ChannelsCurrent].IdxBuffer, &IdxBuffer,
sizeof(IdxBuffer));
345 _ChannelsCurrent =
idx;
346 memcpy(&CmdBuffer, &_Channels.Data[_ChannelsCurrent].CmdBuffer,
sizeof(CmdBuffer));
347 memcpy(&IdxBuffer, &_Channels.Data[_ChannelsCurrent].IdxBuffer,
sizeof(IdxBuffer));
348 _IdxWritePtr = IdxBuffer.Data + IdxBuffer.Size;
354 ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size-1];
357 int vtx_buffer_size = VtxBuffer.Size;
358 VtxBuffer.resize(vtx_buffer_size + vtx_count);
359 _VtxWritePtr = VtxBuffer.Data + vtx_buffer_size;
361 int idx_buffer_size = IdxBuffer.Size;
362 IdxBuffer.resize(idx_buffer_size + idx_count);
363 _IdxWritePtr = IdxBuffer.Data + idx_buffer_size;
373 _VtxWritePtr[0].pos =
a; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col =
col;
374 _VtxWritePtr[1].pos =
b; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col =
col;
375 _VtxWritePtr[2].pos =
c; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col =
col;
376 _VtxWritePtr[3].pos =
d; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col =
col;
384 ImVec2 b(c.
x, a.
y),
d(a.
x, c.
y), uv_b(uv_c.
x, uv_a.
y), uv_d(uv_a.
x, uv_c.
y);
388 _VtxWritePtr[0].pos =
a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col =
col;
389 _VtxWritePtr[1].pos =
b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col =
col;
390 _VtxWritePtr[2].pos =
c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col =
col;
391 _VtxWritePtr[3].pos =
d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col =
col;
402 _VtxWritePtr[0].pos =
a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col =
col;
403 _VtxWritePtr[1].pos =
b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col =
col;
404 _VtxWritePtr[2].pos =
c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col =
col;
405 _VtxWritePtr[3].pos =
d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col =
col;
414 if (points_count < 2)
421 int count = points_count;
423 count = points_count-1;
425 const bool thick_line = thickness > 1.0f;
429 const float AA_SIZE = 1.0f;
430 const ImU32 col_trans = col & 0x00ffffff;
432 const int idx_count = thick_line ? count*18 : count*12;
433 const int vtx_count = thick_line ? points_count*4 : points_count*3;
434 PrimReserve(idx_count, vtx_count);
437 ImVec2* temp_normals = (
ImVec2*)alloca(points_count * (thick_line ? 5 : 3) *
sizeof(
ImVec2));
438 ImVec2* temp_points = temp_normals + points_count;
442 const int i2 = (
i1+1) == points_count ? 0 :
i1+1;
445 temp_normals[
i1].
x = diff.
y;
446 temp_normals[
i1].
y = -diff.
x;
449 temp_normals[points_count-1] = temp_normals[points_count-2];
455 temp_points[0] = points[0] + temp_normals[0] * AA_SIZE;
456 temp_points[1] = points[0] - temp_normals[0] * AA_SIZE;
457 temp_points[(points_count-1)*2+0] = points[points_count-1] + temp_normals[points_count-1] * AA_SIZE;
458 temp_points[(points_count-1)*2+1] = points[points_count-1] - temp_normals[points_count-1] * AA_SIZE;
462 unsigned int idx1 = _VtxCurrentIdx;
465 const int i2 = (
i1+1) == points_count ? 0 :
i1+1;
466 unsigned int idx2 = (
i1+1) == points_count ? _VtxCurrentIdx : idx1+3;
469 ImVec2 dm = (temp_normals[
i1] + temp_normals[
i2]) * 0.5
f;
470 float dmr2 = dm.
x*dm.
x + dm.
y*dm.
y;
471 if (dmr2 > 0.000001
f)
473 float scale = 1.0f / dmr2;
474 if (scale > 100.0
f) scale = 100.0f;
478 temp_points[i2*2+0] = points[
i2] + dm;
479 temp_points[i2*2+1] = points[
i2] - dm;
492 for (
int i = 0;
i < points_count;
i++)
494 _VtxWritePtr[0].pos = points[
i]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col =
col;
495 _VtxWritePtr[1].pos = temp_points[
i*2+0]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans;
496 _VtxWritePtr[2].pos = temp_points[
i*2+1]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col_trans;
502 const float half_inner_thickness = (thickness - AA_SIZE) * 0.5
f;
505 temp_points[0] = points[0] + temp_normals[0] * (half_inner_thickness + AA_SIZE);
506 temp_points[1] = points[0] + temp_normals[0] * (half_inner_thickness);
507 temp_points[2] = points[0] - temp_normals[0] * (half_inner_thickness);
508 temp_points[3] = points[0] - temp_normals[0] * (half_inner_thickness + AA_SIZE);
509 temp_points[(points_count-1)*4+0] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE);
510 temp_points[(points_count-1)*4+1] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness);
511 temp_points[(points_count-1)*4+2] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness);
512 temp_points[(points_count-1)*4+3] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE);
516 unsigned int idx1 = _VtxCurrentIdx;
519 const int i2 = (
i1+1) == points_count ? 0 :
i1+1;
520 unsigned int idx2 = (
i1+1) == points_count ? _VtxCurrentIdx : idx1+4;
523 ImVec2 dm = (temp_normals[
i1] + temp_normals[
i2]) * 0.5
f;
524 float dmr2 = dm.
x*dm.
x + dm.
y*dm.
y;
525 if (dmr2 > 0.000001
f)
527 float scale = 1.0f / dmr2;
528 if (scale > 100.0
f) scale = 100.0f;
531 ImVec2 dm_out = dm * (half_inner_thickness + AA_SIZE);
532 ImVec2 dm_in = dm * half_inner_thickness;
533 temp_points[i2*4+0] = points[
i2] + dm_out;
534 temp_points[i2*4+1] = points[
i2] + dm_in;
535 temp_points[i2*4+2] = points[
i2] - dm_in;
536 temp_points[i2*4+3] = points[
i2] - dm_out;
551 for (
int i = 0;
i < points_count;
i++)
553 _VtxWritePtr[0].pos = temp_points[
i*4+0]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col_trans;
554 _VtxWritePtr[1].pos = temp_points[
i*4+1]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col =
col;
555 _VtxWritePtr[2].pos = temp_points[
i*4+2]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col =
col;
556 _VtxWritePtr[3].pos = temp_points[
i*4+3]; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col_trans;
565 const int idx_count = count*6;
566 const int vtx_count = count*4;
567 PrimReserve(idx_count, vtx_count);
571 const int i2 = (
i1+1) == points_count ? 0 :
i1+1;
577 const float dx = diff.
x * (thickness * 0.5f);
578 const float dy = diff.
y * (thickness * 0.5f);
579 _VtxWritePtr[0].pos.x = p1.x + dy; _VtxWritePtr[0].pos.y = p1.y - dx; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col =
col;
580 _VtxWritePtr[1].pos.x = p2.
x + dy; _VtxWritePtr[1].pos.y = p2.
y - dx; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col =
col;
581 _VtxWritePtr[2].pos.x = p2.
x - dy; _VtxWritePtr[2].pos.y = p2.
y + dx; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col =
col;
582 _VtxWritePtr[3].pos.x = p1.x - dy; _VtxWritePtr[3].pos.y = p1.y + dx; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col =
col;
585 _IdxWritePtr[0] = (
ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (
ImDrawIdx)(_VtxCurrentIdx+1); _IdxWritePtr[2] = (
ImDrawIdx)(_VtxCurrentIdx+2);
586 _IdxWritePtr[3] = (
ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[4] = (
ImDrawIdx)(_VtxCurrentIdx+2); _IdxWritePtr[5] = (
ImDrawIdx)(_VtxCurrentIdx+3);
602 const float AA_SIZE = 1.0f;
603 const ImU32 col_trans = col & 0x00ffffff;
604 const int idx_count = (points_count-2)*3 + points_count*6;
605 const int vtx_count = (points_count*2);
606 PrimReserve(idx_count, vtx_count);
609 unsigned int vtx_inner_idx = _VtxCurrentIdx;
610 unsigned int vtx_outer_idx = _VtxCurrentIdx+1;
611 for (
int i = 2;
i < points_count;
i++)
613 _IdxWritePtr[0] = (
ImDrawIdx)(vtx_inner_idx); _IdxWritePtr[1] = (
ImDrawIdx)(vtx_inner_idx+((
i-1)<<1)); _IdxWritePtr[2] = (
ImDrawIdx)(vtx_inner_idx+(
i<<1));
619 for (
int i0 = points_count-1,
i1 = 0;
i1 < points_count; i0 =
i1++)
621 const ImVec2& p0 = points[i0];
625 temp_normals[i0].
x = diff.
y;
626 temp_normals[i0].
y = -diff.
x;
629 for (
int i0 = points_count-1,
i1 = 0;
i1 < points_count; i0 =
i1++)
632 const ImVec2& n0 = temp_normals[i0];
633 const ImVec2& n1 = temp_normals[
i1];
635 float dmr2 = dm.
x*dm.
x + dm.
y*dm.
y;
636 if (dmr2 > 0.000001
f)
638 float scale = 1.0f / dmr2;
639 if (scale > 100.0
f) scale = 100.0f;
642 dm *= AA_SIZE * 0.5f;
645 _VtxWritePtr[0].pos = (points[
i1] - dm); _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col =
col;
646 _VtxWritePtr[1].pos = (points[
i1] + dm); _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans;
650 _IdxWritePtr[0] = (
ImDrawIdx)(vtx_inner_idx+(
i1<<1)); _IdxWritePtr[1] = (
ImDrawIdx)(vtx_inner_idx+(i0<<1)); _IdxWritePtr[2] = (
ImDrawIdx)(vtx_outer_idx+(i0<<1));
651 _IdxWritePtr[3] = (
ImDrawIdx)(vtx_outer_idx+(i0<<1)); _IdxWritePtr[4] = (
ImDrawIdx)(vtx_outer_idx+(
i1<<1)); _IdxWritePtr[5] = (
ImDrawIdx)(vtx_inner_idx+(
i1<<1));
659 const int idx_count = (points_count-2)*3;
660 const int vtx_count = points_count;
661 PrimReserve(idx_count, vtx_count);
662 for (
int i = 0;
i < vtx_count;
i++)
664 _VtxWritePtr[0].pos = points[
i]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col =
col;
667 for (
int i = 2;
i < points_count;
i++)
669 _IdxWritePtr[0] = (
ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (
ImDrawIdx)(_VtxCurrentIdx+
i-1); _IdxWritePtr[2] = (
ImDrawIdx)(_VtxCurrentIdx+
i);
678 static ImVec2 circle_vtx[12];
679 static bool circle_vtx_builds =
false;
681 if (!circle_vtx_builds)
683 for (
int i = 0;
i < circle_vtx_count;
i++)
685 const float a = ((float)
i / (
float)circle_vtx_count) * 2*
IM_PI;
686 circle_vtx[
i].
x = cosf(a);
687 circle_vtx[
i].
y = sinf(a);
689 circle_vtx_builds =
true;
692 if (amin > amax)
return;
695 _Path.push_back(centre);
699 _Path.reserve(_Path.Size + (amax - amin + 1));
700 for (
int a = amin;
a <= amax;
a++)
702 const ImVec2&
c = circle_vtx[
a % circle_vtx_count];
703 _Path.push_back(
ImVec2(centre.
x + c.
x * radius, centre.
y + c.
y * radius));
711 _Path.push_back(centre);
712 _Path.reserve(_Path.Size + (num_segments + 1));
713 for (
int i = 0;
i <= num_segments;
i++)
715 const float a = amin + ((float)
i / (
float)num_segments) * (amax - amin);
716 _Path.push_back(
ImVec2(centre.
x + cosf(a) * radius, centre.
y + sinf(a) * radius));
720 static void PathBezierToCasteljau(
ImVector<ImVec2>*
path,
float x1,
float y1,
float x2,
float y2,
float x3,
float y3,
float x4,
float y4,
float tess_tol,
int level)
724 float d2 = ((x2 - x4) * dy - (y2 - y4) * dx);
725 float d3 = ((x3 - x4) * dy - (y3 - y4) * dx);
726 d2 = (d2 >= 0) ? d2 : -d2;
727 d3 = (d3 >= 0) ? d3 : -d3;
728 if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy))
734 float x12 = (x1+
x2)*0.5
f, y12 = (y1+y2)*0.5f;
735 float x23 = (x2+x3)*0.5
f, y23 = (y2+y3)*0.5f;
736 float x34 = (x3+x4)*0.5
f, y34 = (y3+y4)*0.5f;
737 float x123 = (x12+x23)*0.5
f, y123 = (y12+y23)*0.5f;
738 float x234 = (x23+x34)*0.5
f, y234 = (y23+y34)*0.5f;
739 float x1234 = (x123+x234)*0.5
f, y1234 = (y123+y234)*0.5f;
741 PathBezierToCasteljau(path, x1,y1, x12,y12, x123,y123, x1234,y1234, tess_tol, level+1);
742 PathBezierToCasteljau(path, x1234,y1234, x234,y234, x34,y34, x4,y4, tess_tol, level+1);
749 if (num_segments == 0)
752 PathBezierToCasteljau(&_Path, p1.
x, p1.
y, p2.
x, p2.
y, p3.
x, p3.
y, p4.
x, p4.
y,
GImGui->
Style.
CurveTessellationTol, 0);
756 float t_step = 1.0f / (float)num_segments;
757 for (
int i_step = 1; i_step <= num_segments; i_step++)
759 float t = t_step * i_step;
765 _Path.push_back(
ImVec2(w1*p1.
x + w2*p2.
x + w3*p3.
x + w4*p4.
x, w1*p1.
y + w2*p2.
y + w3*p3.
y + w4*p4.
y));
773 r =
ImMin(r, fabsf(b.
x-a.
x) * ( ((rounding_corners&(1|2))==(1|2)) || ((rounding_corners&(4|8))==(4|8)) ? 0.5f : 1.0f ) - 1.0f);
774 r =
ImMin(r, fabsf(b.
y-a.
y) * ( ((rounding_corners&(1|8))==(1|8)) || ((rounding_corners&(2|4))==(2|4)) ? 0.5f : 1.0f ) - 1.0f);
776 if (r <= 0.0
f || rounding_corners == 0)
785 const float r0 = (rounding_corners & 1) ? r : 0.0
f;
786 const float r1 = (rounding_corners & 2) ? r : 0.0
f;
787 const float r2 = (rounding_corners & 4) ? r : 0.0
f;
788 const float r3 = (rounding_corners & 8) ? r : 0.0
f;
789 PathArcToFast(
ImVec2(a.
x+r0,a.
y+r0), r0, 6, 9);
790 PathArcToFast(
ImVec2(b.
x-r1,a.
y+r1), r1, 9, 12);
791 PathArcToFast(
ImVec2(b.
x-r2,b.
y-r2), r2, 0, 3);
792 PathArcToFast(
ImVec2(a.
x+r3,b.
y-r3), r3, 3, 6);
798 if ((col >> 24) == 0)
802 PathStroke(col,
false, thickness);
808 if ((col >> 24) == 0)
810 PathRect(a +
ImVec2(0.5
f,0.5
f), b -
ImVec2(0.5
f,0.5
f), rounding, rounding_corners);
811 PathStroke(col,
true, thickness);
816 if ((col >> 24) == 0)
820 PathRect(a, b, rounding, rounding_corners);
832 if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) >> 24) == 0)
837 PrimWriteIdx((
ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((
ImDrawIdx)(_VtxCurrentIdx+1)); PrimWriteIdx((
ImDrawIdx)(_VtxCurrentIdx+2));
838 PrimWriteIdx((
ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((
ImDrawIdx)(_VtxCurrentIdx+2)); PrimWriteIdx((
ImDrawIdx)(_VtxCurrentIdx+3));
839 PrimWriteVtx(a, uv, col_upr_left);
840 PrimWriteVtx(
ImVec2(c.
x, a.
y), uv, col_upr_right);
841 PrimWriteVtx(c, uv, col_bot_right);
842 PrimWriteVtx(
ImVec2(a.
x, c.
y), uv, col_bot_left);
847 if ((col >> 24) == 0)
854 PathStroke(col,
true, thickness);
859 if ((col >> 24) == 0)
871 if ((col >> 24) == 0)
877 PathStroke(col,
true, thickness);
882 if ((col >> 24) == 0)
893 if ((col >> 24) == 0)
896 const float a_max =
IM_PI*2.0f * ((float)num_segments - 1.0
f) / (float)num_segments;
897 PathArcTo(centre, radius-0.5
f, 0.0
f, a_max, num_segments);
898 PathStroke(col,
true, thickness);
903 if ((col >> 24) == 0)
906 const float a_max =
IM_PI*2.0f * ((float)num_segments - 1.0
f) / (float)num_segments;
907 PathArcTo(centre, radius, 0.0
f, a_max, num_segments);
913 if ((col >> 24) == 0)
917 PathBezierCurveTo(cp0, cp1, pos1, num_segments);
918 PathStroke(col,
false, thickness);
923 if ((col >> 24) == 0)
926 if (text_end ==
NULL)
927 text_end = text_begin + strlen(text_begin);
928 if (text_begin == text_end)
935 if (font_size == 0.0
f)
940 ImVec4 clip_rect = _ClipRectStack.back();
941 if (cpu_fine_clip_rect)
943 clip_rect.
x =
ImMax(clip_rect.x, cpu_fine_clip_rect->
x);
944 clip_rect.y =
ImMax(clip_rect.y, cpu_fine_clip_rect->
y);
945 clip_rect.z =
ImMin(clip_rect.z, cpu_fine_clip_rect->
z);
946 clip_rect.w =
ImMin(clip_rect.w, cpu_fine_clip_rect->
w);
948 font->
RenderText(
this, font_size, pos, col, clip_rect, text_begin, text_end, wrap_width, cpu_fine_clip_rect !=
NULL);
958 if ((col >> 24) == 0)
962 const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
964 PushTextureID(user_texture_id);
967 PrimRectUV(a, b, uv0, uv1, col);
981 TotalVtxCount = TotalIdxCount = 0;
982 for (
int i = 0;
i < CmdListsCount;
i++)
999 for (
int i = 0;
i < CmdListsCount;
i++)
1002 for (
int cmd_i = 0; cmd_i < cmd_list->
CmdBuffer.
Size; cmd_i++)
1018 FontDataOwnedByAtlas =
true;
1024 GlyphExtraSpacing =
ImVec2(0.0
f, 0.0
f);
1027 MergeGlyphCenterV =
false;
1029 memset(Name, 0,
sizeof(Name));
1035 TexPixelsAlpha8 =
NULL;
1036 TexPixelsRGBA32 =
NULL;
1037 TexWidth = TexHeight = TexDesiredWidth = 0;
1038 TexUvWhitePixel =
ImVec2(0, 0);
1048 for (
int i = 0;
i < ConfigData.Size;
i++)
1049 if (ConfigData[
i].FontData && ConfigData[
i].FontDataOwnedByAtlas)
1052 ConfigData[
i].FontData =
NULL;
1056 for (
int i = 0;
i < Fonts.Size;
i++)
1057 if (Fonts[
i]->ConfigData >= ConfigData.Data && Fonts[
i]->ConfigData < ConfigData.Data + ConfigData.Size)
1059 Fonts[
i]->ConfigData =
NULL;
1060 Fonts[
i]->ConfigDataCount = 0;
1067 if (TexPixelsAlpha8)
1069 if (TexPixelsRGBA32)
1071 TexPixelsAlpha8 =
NULL;
1072 TexPixelsRGBA32 =
NULL;
1077 for (
int i = 0;
i < Fonts.Size;
i++)
1079 Fonts[
i]->~ImFont();
1095 if (TexPixelsAlpha8 ==
NULL)
1097 if (ConfigData.empty())
1102 *out_pixels = TexPixelsAlpha8;
1103 if (out_width) *out_width = TexWidth;
1104 if (out_height) *out_height = TexHeight;
1105 if (out_bytes_per_pixel) *out_bytes_per_pixel = 1;
1112 if (!TexPixelsRGBA32)
1115 GetTexDataAsAlpha8(&pixels,
NULL,
NULL);
1116 TexPixelsRGBA32 = (
unsigned int*)
ImGui::MemAlloc((
size_t)(TexWidth * TexHeight * 4));
1118 unsigned int*
dst = TexPixelsRGBA32;
1119 for (
int n = TexWidth * TexHeight;
n > 0;
n--)
1120 *dst++ = ((
unsigned int)(*src++) << 24) | 0x00FFFFFF;
1123 *out_pixels = (
unsigned char*)TexPixelsRGBA32;
1124 if (out_width) *out_width = TexWidth;
1125 if (out_height) *out_height = TexHeight;
1126 if (out_bytes_per_pixel) *out_bytes_per_pixel = 4;
1138 IM_PLACEMENT_NEW(font)
ImFont();
1139 Fonts.push_back(font);
1142 ConfigData.push_back(*font_cfg);
1145 new_font_cfg.
DstFont = Fonts.back();
1168 dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF);
1178 if (!font_cfg_template)
1183 if (font_cfg.
Name[0] ==
'\0') strcpy(font_cfg.
Name,
"<default>");
1186 ImFont*
font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, 13.0
f, &font_cfg, GetGlyphRangesDefault());
1200 if (font_cfg.
Name[0] ==
'\0')
1204 for (p = filename + strlen(filename); p > filename && p[-1] !=
'/' && p[-1] !=
'\\'; p--) {}
1207 return AddFontFromMemoryTTF(data, data_size, size_pixels, &font_cfg, glyph_ranges);
1220 return AddFont(&font_cfg);
1225 const unsigned int buf_decompressed_size =
stb_decompress_length((
unsigned char*)compressed_ttf_data);
1226 unsigned char* buf_decompressed_data = (
unsigned char *)
ImGui::MemAlloc(buf_decompressed_size);
1227 stb_decompress(buf_decompressed_data, (
unsigned char*)compressed_ttf_data, (
unsigned int)compressed_ttf_size);
1232 return AddFontFromMemoryTTF(buf_decompressed_data, (
int)buf_decompressed_size, size_pixels, &font_cfg, glyph_ranges);
1237 int compressed_ttf_size = (((int)strlen(compressed_ttf_data_base85) + 4) / 5) * 4;
1239 Decode85((
const unsigned char*)compressed_ttf_data_base85, (
unsigned char*)compressed_ttf);
1240 ImFont*
font = AddFontFromMemoryCompressedTTF(compressed_ttf, compressed_ttf_size, size_pixels, font_cfg, glyph_ranges);
1250 TexWidth = TexHeight = 0;
1251 TexUvWhitePixel =
ImVec2(0, 0);
1254 struct ImFontTempBuildData
1261 ImFontTempBuildData* tmp_array = (ImFontTempBuildData*)
ImGui::MemAlloc((
size_t)ConfigData.Size *
sizeof(ImFontTempBuildData));
1264 int total_glyph_count = 0;
1265 int total_glyph_range_count = 0;
1266 for (
int input_i = 0; input_i < ConfigData.Size; input_i++)
1269 ImFontTempBuildData&
tmp = tmp_array[input_i];
1283 total_glyph_range_count++;
1289 TexWidth = (TexDesiredWidth > 0) ? TexDesiredWidth : (total_glyph_count > 4000) ? 4096 : (total_glyph_count > 2000) ? 2048 : (total_glyph_count > 1000) ? 1024 : 512;
1291 const int max_tex_height = 1024*32;
1297 RenderCustomTexData(0, &extra_rects);
1300 for (
int i = 0;
i < extra_rects.
Size;
i++)
1301 if (extra_rects[
i].was_packed)
1302 TexHeight =
ImMax(TexHeight, extra_rects[
i].
y + extra_rects[
i].
h);
1305 int buf_packedchars_n = 0, buf_rects_n = 0, buf_ranges_n = 0;
1310 memset(buf_rects, 0, total_glyph_count *
sizeof(
stbrp_rect));
1314 for (
int input_i = 0; input_i < ConfigData.Size; input_i++)
1317 ImFontTempBuildData&
tmp = tmp_array[input_i];
1320 int glyph_count = 0;
1321 int glyph_ranges_count = 0;
1325 glyph_ranges_count++;
1327 tmp.Ranges = buf_ranges + buf_ranges_n;
1328 tmp.RangesCount = glyph_ranges_count;
1329 buf_ranges_n += glyph_ranges_count;
1330 for (
int i = 0;
i < glyph_ranges_count;
i++)
1336 range.
num_chars = (in_range[1] - in_range[0]) + 1;
1342 tmp.Rects = buf_rects + buf_rects_n;
1343 buf_rects_n += glyph_count;
1349 for (
int i = 0;
i <
n;
i++)
1350 if (tmp.Rects[
i].was_packed)
1351 TexHeight =
ImMax(TexHeight, tmp.Rects[
i].y + tmp.Rects[
i].h);
1353 IM_ASSERT(buf_rects_n == total_glyph_count);
1354 IM_ASSERT(buf_packedchars_n == total_glyph_count);
1355 IM_ASSERT(buf_ranges_n == total_glyph_range_count);
1359 TexPixelsAlpha8 = (
unsigned char*)
ImGui::MemAlloc(TexWidth * TexHeight);
1360 memset(TexPixelsAlpha8, 0, TexWidth * TexHeight);
1361 spc.
pixels = TexPixelsAlpha8;
1365 for (
int input_i = 0; input_i < ConfigData.Size; input_i++)
1368 ImFontTempBuildData&
tmp = tmp_array[input_i];
1380 for (
int input_i = 0; input_i < ConfigData.Size; input_i++)
1383 ImFontTempBuildData&
tmp = tmp_array[input_i];
1387 int unscaled_ascent, unscaled_descent, unscaled_line_gap;
1390 float ascent = unscaled_ascent * font_scale;
1391 float descent = unscaled_descent * font_scale;
1398 dst_font->
Ascent = ascent;
1400 dst_font->
Glyphs.resize(0);
1406 for (
int i = 0;
i < tmp.RangesCount;
i++)
1409 for (
int char_idx = 0; char_idx < range.
num_chars; char_idx += 1)
1412 if (!pc.
x0 && !pc.
x1 && !pc.
y0 && !pc.
y1)
1420 float dummy_x = 0.0f, dummy_y = 0.0f;
1428 glyph.
Y0 += (float)(
int)(dst_font->
Ascent + off_y + 0.5f);
1429 glyph.
Y1 += (float)(
int)(dst_font->
Ascent + off_y + 0.5f);
1444 RenderCustomTexData(1, &extra_rects);
1453 const int TEX_DATA_W = 90;
1454 const int TEX_DATA_H = 27;
1455 const char texture_data[TEX_DATA_W*TEX_DATA_H+1] =
1457 "..- -XXXXXXX- X - X -XXXXXXX - XXXXXXX" 1458 "..- -X.....X- X.X - X.X -X.....X - X.....X" 1459 "--- -XXX.XXX- X...X - X...X -X....X - X....X" 1460 "X - X.X - X.....X - X.....X -X...X - X...X" 1461 "XX - X.X -X.......X- X.......X -X..X.X - X.X..X" 1462 "X.X - X.X -XXXX.XXXX- XXXX.XXXX -X.X X.X - X.X X.X" 1463 "X..X - X.X - X.X - X.X -XX X.X - X.X XX" 1464 "X...X - X.X - X.X - XX X.X XX - X.X - X.X " 1465 "X....X - X.X - X.X - X.X X.X X.X - X.X - X.X " 1466 "X.....X - X.X - X.X - X..X X.X X..X - X.X - X.X " 1467 "X......X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X XX-XX X.X " 1468 "X.......X - X.X - X.X -X.....................X- X.X X.X-X.X X.X " 1469 "X........X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X..X-X..X.X " 1470 "X.........X -XXX.XXX- X.X - X..X X.X X..X - X...X-X...X " 1471 "X..........X-X.....X- X.X - X.X X.X X.X - X....X-X....X " 1472 "X......XXXXX-XXXXXXX- X.X - XX X.X XX - X.....X-X.....X " 1473 "X...X..X --------- X.X - X.X - XXXXXXX-XXXXXXX " 1474 "X..X X..X - -XXXX.XXXX- XXXX.XXXX ------------------------------------" 1475 "X.X X..X - -X.......X- X.......X - XX XX - " 1476 "XX X..X - - X.....X - X.....X - X.X X.X - " 1477 " X..X - X...X - X...X - X..X X..X - " 1478 " XX - X.X - X.X - X...XXXXXXXXXXXXX...X - " 1479 "------------ - X - X -X.....................X- " 1480 " ----------------------------------- X...XXXXXXXXXXXXX...X - " 1491 memset(&r, 0,
sizeof(r));
1492 r.
w = (TEX_DATA_W*2)+1;
1500 for (
int y = 0,
n = 0;
y < TEX_DATA_H;
y++)
1501 for (
int x = 0;
x < TEX_DATA_W;
x++,
n++)
1503 const int offset0 = (int)(r.
x +
x) + (int)(r.
y +
y) * TexWidth;
1504 const int offset1 = offset0 + 1 + TEX_DATA_W;
1505 TexPixelsAlpha8[offset0] = texture_data[
n] ==
'.' ? 0xFF : 0x00;
1506 TexPixelsAlpha8[offset1] = texture_data[
n] ==
'X' ? 0xFF : 0x00;
1508 const ImVec2 tex_uv_scale(1.0
f / TexWidth, 1.0
f / TexHeight);
1509 TexUvWhitePixel =
ImVec2((r.
x + 0.5f) * tex_uv_scale.
x, (r.
y + 0.5f) * tex_uv_scale.
y);
1528 const ImVec2
size = cursor_datas[
type][1];
1534 pos.
x += TEX_DATA_W+1;
1544 static const ImWchar ranges[] =
1554 static const ImWchar ranges[] =
1566 static const ImWchar ranges[] =
1582 static const short offsets_from_0x4E00[] =
1584 -1,0,1,3,0,0,0,0,1,0,5,1,1,0,7,4,6,10,0,1,9,9,7,1,3,19,1,10,7,1,0,1,0,5,1,0,6,4,2,6,0,0,12,6,8,0,3,5,0,1,0,9,0,0,8,1,1,3,4,5,13,0,0,8,2,17,
1585 4,3,1,1,9,6,0,0,0,2,1,3,2,22,1,9,11,1,13,1,3,12,0,5,9,2,0,6,12,5,3,12,4,1,2,16,1,1,4,6,5,3,0,6,13,15,5,12,8,14,0,0,6,15,3,6,0,18,8,1,6,14,1,
1586 5,4,12,24,3,13,12,10,24,0,0,0,1,0,1,1,2,9,10,2,2,0,0,3,3,1,0,3,8,0,3,2,4,4,1,6,11,10,14,6,15,3,4,15,1,0,0,5,2,2,0,0,1,6,5,5,6,0,3,6,5,0,0,1,0,
1587 11,2,2,8,4,7,0,10,0,1,2,17,19,3,0,2,5,0,6,2,4,4,6,1,1,11,2,0,3,1,2,1,2,10,7,6,3,16,0,8,24,0,0,3,1,1,3,0,1,6,0,0,0,2,0,1,5,15,0,1,0,0,2,11,19,
1588 1,4,19,7,6,5,1,0,0,0,0,5,1,0,1,9,0,0,5,0,2,0,1,0,3,0,11,3,0,2,0,0,0,0,0,9,3,6,4,12,0,14,0,0,29,10,8,0,14,37,13,0,31,16,19,0,8,30,1,20,8,3,48,
1589 21,1,0,12,0,10,44,34,42,54,11,18,82,0,2,1,2,12,1,0,6,2,17,2,12,7,0,7,17,4,2,6,24,23,8,23,39,2,16,23,1,0,5,1,2,15,14,5,6,2,11,0,8,6,2,2,2,14,
1590 20,4,15,3,4,11,10,10,2,5,2,1,30,2,1,0,0,22,5,5,0,3,1,5,4,1,0,0,2,2,21,1,5,1,2,16,2,1,3,4,0,8,4,0,0,5,14,11,2,16,1,13,1,7,0,22,15,3,1,22,7,14,
1591 22,19,11,24,18,46,10,20,64,45,3,2,0,4,5,0,1,4,25,1,0,0,2,10,0,0,0,1,0,1,2,0,0,9,1,2,0,0,0,2,5,2,1,1,5,5,8,1,1,1,5,1,4,9,1,3,0,1,0,1,1,2,0,0,
1592 2,0,1,8,22,8,1,0,0,0,0,4,2,1,0,9,8,5,0,9,1,30,24,2,6,4,39,0,14,5,16,6,26,179,0,2,1,1,0,0,0,5,2,9,6,0,2,5,16,7,5,1,1,0,2,4,4,7,15,13,14,0,0,
1593 3,0,1,0,0,0,2,1,6,4,5,1,4,9,0,3,1,8,0,0,10,5,0,43,0,2,6,8,4,0,2,0,0,9,6,0,9,3,1,6,20,14,6,1,4,0,7,2,3,0,2,0,5,0,3,1,0,3,9,7,0,3,4,0,4,9,1,6,0,
1594 9,0,0,2,3,10,9,28,3,6,2,4,1,2,32,4,1,18,2,0,3,1,5,30,10,0,2,2,2,0,7,9,8,11,10,11,7,2,13,7,5,10,0,3,40,2,0,1,6,12,0,4,5,1,5,11,11,21,4,8,3,7,
1595 8,8,33,5,23,0,0,19,8,8,2,3,0,6,1,1,1,5,1,27,4,2,5,0,3,5,6,3,1,0,3,1,12,5,3,3,2,0,7,7,2,1,0,4,0,1,1,2,0,10,10,6,2,5,9,7,5,15,15,21,6,11,5,20,
1596 4,3,5,5,2,5,0,2,1,0,1,7,28,0,9,0,5,12,5,5,18,30,0,12,3,3,21,16,25,32,9,3,14,11,24,5,66,9,1,2,0,5,9,1,5,1,8,0,8,3,3,0,1,15,1,4,8,1,2,7,0,7,2,
1597 8,3,7,5,3,7,10,2,1,0,0,2,25,0,6,4,0,10,0,4,2,4,1,12,5,38,4,0,4,1,10,5,9,4,0,14,4,2,5,18,20,21,1,3,0,5,0,7,0,3,7,1,3,1,1,8,1,0,0,0,3,2,5,2,11,
1598 6,0,13,1,3,9,1,12,0,16,6,2,1,0,2,1,12,6,13,11,2,0,28,1,7,8,14,13,8,13,0,2,0,5,4,8,10,2,37,42,19,6,6,7,4,14,11,18,14,80,7,6,0,4,72,12,36,27,
1599 7,7,0,14,17,19,164,27,0,5,10,7,3,13,6,14,0,2,2,5,3,0,6,13,0,0,10,29,0,4,0,3,13,0,3,1,6,51,1,5,28,2,0,8,0,20,2,4,0,25,2,10,13,10,0,16,4,0,1,0,
1600 2,1,7,0,1,8,11,0,0,1,2,7,2,23,11,6,6,4,16,2,2,2,0,22,9,3,3,5,2,0,15,16,21,2,9,20,15,15,5,3,9,1,0,0,1,7,7,5,4,2,2,2,38,24,14,0,0,15,5,6,24,14,
1601 5,5,11,0,21,12,0,3,8,4,11,1,8,0,11,27,7,2,4,9,21,59,0,1,39,3,60,62,3,0,12,11,0,3,30,11,0,13,88,4,15,5,28,13,1,4,48,17,17,4,28,32,46,0,16,0,
1602 18,11,1,8,6,38,11,2,6,11,38,2,0,45,3,11,2,7,8,4,30,14,17,2,1,1,65,18,12,16,4,2,45,123,12,56,33,1,4,3,4,7,0,0,0,3,2,0,16,4,2,4,2,0,7,4,5,2,26,
1603 2,25,6,11,6,1,16,2,6,17,77,15,3,35,0,1,0,5,1,0,38,16,6,3,12,3,3,3,0,9,3,1,3,5,2,9,0,18,0,25,1,3,32,1,72,46,6,2,7,1,3,14,17,0,28,1,40,13,0,20,
1604 15,40,6,38,24,12,43,1,1,9,0,12,6,0,6,2,4,19,3,7,1,48,0,9,5,0,5,6,9,6,10,15,2,11,19,3,9,2,0,1,10,1,27,8,1,3,6,1,14,0,26,0,27,16,3,4,9,6,2,23,
1605 9,10,5,25,2,1,6,1,1,48,15,9,15,14,3,4,26,60,29,13,37,21,1,6,4,0,2,11,22,23,16,16,2,2,1,3,0,5,1,6,4,0,0,4,0,0,8,3,0,2,5,0,7,1,7,3,13,2,4,10,
1606 3,0,2,31,0,18,3,0,12,10,4,1,0,7,5,7,0,5,4,12,2,22,10,4,2,15,2,8,9,0,23,2,197,51,3,1,1,4,13,4,3,21,4,19,3,10,5,40,0,4,1,1,10,4,1,27,34,7,21,
1607 2,17,2,9,6,4,2,3,0,4,2,7,8,2,5,1,15,21,3,4,4,2,2,17,22,1,5,22,4,26,7,0,32,1,11,42,15,4,1,2,5,0,19,3,1,8,6,0,10,1,9,2,13,30,8,2,24,17,19,1,4,
1608 4,25,13,0,10,16,11,39,18,8,5,30,82,1,6,8,18,77,11,13,20,75,11,112,78,33,3,0,0,60,17,84,9,1,1,12,30,10,49,5,32,158,178,5,5,6,3,3,1,3,1,4,7,6,
1609 19,31,21,0,2,9,5,6,27,4,9,8,1,76,18,12,1,4,0,3,3,6,3,12,2,8,30,16,2,25,1,5,5,4,3,0,6,10,2,3,1,0,5,1,19,3,0,8,1,5,2,6,0,0,0,19,1,2,0,5,1,2,5,
1610 1,3,7,0,4,12,7,3,10,22,0,9,5,1,0,2,20,1,1,3,23,30,3,9,9,1,4,191,14,3,15,6,8,50,0,1,0,0,4,0,0,1,0,2,4,2,0,2,3,0,2,0,2,2,8,7,0,1,1,1,3,3,17,11,
1611 91,1,9,3,2,13,4,24,15,41,3,13,3,1,20,4,125,29,30,1,0,4,12,2,21,4,5,5,19,11,0,13,11,86,2,18,0,7,1,8,8,2,2,22,1,2,6,5,2,0,1,2,8,0,2,0,5,2,1,0,
1612 2,10,2,0,5,9,2,1,2,0,1,0,4,0,0,10,2,5,3,0,6,1,0,1,4,4,33,3,13,17,3,18,6,4,7,1,5,78,0,4,1,13,7,1,8,1,0,35,27,15,3,0,0,0,1,11,5,41,38,15,22,6,
1613 14,14,2,1,11,6,20,63,5,8,27,7,11,2,2,40,58,23,50,54,56,293,8,8,1,5,1,14,0,1,12,37,89,8,8,8,2,10,6,0,0,0,4,5,2,1,0,1,1,2,7,0,3,3,0,4,6,0,3,2,
1614 19,3,8,0,0,0,4,4,16,0,4,1,5,1,3,0,3,4,6,2,17,10,10,31,6,4,3,6,10,126,7,3,2,2,0,9,0,0,5,20,13,0,15,0,6,0,2,5,8,64,50,3,2,12,2,9,0,0,11,8,20,
1615 109,2,18,23,0,0,9,61,3,0,28,41,77,27,19,17,81,5,2,14,5,83,57,252,14,154,263,14,20,8,13,6,57,39,38,
1617 static ImWchar base_ranges[] =
1624 static bool full_ranges_unpacked =
false;
1626 if (!full_ranges_unpacked)
1629 int codepoint = 0x4e00;
1630 memcpy(full_ranges, base_ranges,
sizeof(base_ranges));
1633 dst[0] = dst[1] = (
ImWchar)(codepoint += (offsets_from_0x4E00[
n] + 1));
1635 full_ranges_unpacked =
true;
1637 return &full_ranges[0];
1642 static const ImWchar ranges[] =
1680 DisplayOffset =
ImVec2(0.0
f, 1.0
f);
1682 ConfigDataCount = 0;
1683 Ascent = Descent = 0.0f;
1684 ContainerAtlas =
NULL;
1686 FallbackGlyph =
NULL;
1687 FallbackXAdvance = 0.0f;
1688 IndexXAdvance.clear();
1689 IndexLookup.clear();
1694 int max_codepoint = 0;
1695 for (
int i = 0;
i != Glyphs.Size;
i++)
1696 max_codepoint =
ImMax(max_codepoint, (
int)Glyphs[
i].Codepoint);
1699 IndexXAdvance.clear();
1700 IndexLookup.clear();
1701 GrowIndex(max_codepoint + 1);
1702 for (
int i = 0;
i < Glyphs.Size;
i++)
1704 int codepoint = (int)Glyphs[
i].Codepoint;
1705 IndexXAdvance[codepoint] = Glyphs[
i].XAdvance;
1706 IndexLookup[codepoint] = (short)
i;
1711 if (FindGlyph((
unsigned short)
' '))
1713 if (Glyphs.back().Codepoint !=
'\t')
1714 Glyphs.resize(Glyphs.Size + 1);
1716 tab_glyph = *FindGlyph((
unsigned short)
' ');
1720 IndexLookup[(int)tab_glyph.
Codepoint] = (
short)(Glyphs.Size-1);
1723 FallbackGlyph =
NULL;
1724 FallbackGlyph = FindGlyph(FallbackChar);
1725 FallbackXAdvance = FallbackGlyph ? FallbackGlyph->XAdvance : 0.0f;
1726 for (
int i = 0;
i < max_codepoint + 1;
i++)
1727 if (IndexXAdvance[
i] < 0.0
f)
1728 IndexXAdvance[
i] = FallbackXAdvance;
1739 IM_ASSERT(IndexXAdvance.Size == IndexLookup.Size);
1740 int old_size = IndexLookup.Size;
1741 if (new_size <= old_size)
1743 IndexXAdvance.resize(new_size);
1744 IndexLookup.resize(new_size);
1745 for (
int i = old_size;
i < new_size;
i++)
1747 IndexXAdvance[
i] = -1.0f;
1748 IndexLookup[
i] = (short)-1;
1755 int index_size = IndexLookup.Size;
1757 if (dst < index_size && IndexLookup.Data[dst] == -1 && !overwrite_dst)
1759 if (src >= index_size && dst >= index_size)
1763 IndexLookup[
dst] = (src < index_size) ? IndexLookup.Data[src] : -1;
1764 IndexXAdvance[dst] = (src < index_size) ? IndexXAdvance.Data[
src] : 1.0f;
1769 if (c < IndexLookup.Size)
1771 const short i = IndexLookup[
c];
1773 return &Glyphs.Data[
i];
1775 return FallbackGlyph;
1795 float line_width = 0.0f;
1796 float word_width = 0.0f;
1797 float blank_width = 0.0f;
1799 const char* word_end = text;
1800 const char* prev_word_end =
NULL;
1801 bool inside_word =
true;
1803 const char*
s = text;
1804 while (s < text_end)
1806 unsigned int c = (
unsigned int)*s;
1819 line_width = word_width = blank_width = 0.0f;
1831 const float char_width = ((int)c < IndexXAdvance.Size) ? IndexXAdvance[(int)c] * scale : FallbackXAdvance;
1836 line_width += blank_width;
1839 blank_width += char_width;
1840 inside_word =
false;
1844 word_width += char_width;
1851 prev_word_end = word_end;
1852 line_width += word_width + blank_width;
1853 word_width = blank_width = 0.0f;
1857 inside_word = !(c ==
'.' || c ==
',' || c ==
';' || c ==
'!' || c ==
'?' || c ==
'\"');
1861 if (line_width + word_width >= wrap_width)
1864 if (word_width < wrap_width)
1865 s = prev_word_end ? prev_word_end : word_end;
1878 text_end = text_begin + strlen(text_begin);
1880 const float line_height =
size;
1881 const float scale = size / FontSize;
1884 float line_width = 0.0f;
1886 const bool word_wrap_enabled = (wrap_width > 0.0f);
1887 const char* word_wrap_eol =
NULL;
1889 const char*
s = text_begin;
1890 while (s < text_end)
1892 if (word_wrap_enabled)
1897 word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - line_width);
1898 if (word_wrap_eol == s)
1902 if (s >= word_wrap_eol)
1904 if (text_size.
x < line_width)
1905 text_size.
x = line_width;
1906 text_size.
y += line_height;
1908 word_wrap_eol =
NULL;
1911 while (s < text_end)
1914 if (
ImCharIsSpace(c)) { s++; }
else if (c ==
'\n') { s++;
break; }
else {
break; }
1921 const char* prev_s =
s;
1922 unsigned int c = (
unsigned int)*s;
1938 text_size.
x =
ImMax(text_size.
x, line_width);
1939 text_size.
y += line_height;
1947 const float char_width = ((int)c < IndexXAdvance.Size ? IndexXAdvance[(
int)
c] : FallbackXAdvance) * scale;
1948 if (line_width + char_width >= max_width)
1954 line_width += char_width;
1957 if (text_size.
x < line_width)
1958 text_size.
x = line_width;
1960 if (line_width > 0 || text_size.
y == 0.0f)
1961 text_size.
y += line_height;
1971 if (c ==
' ' || c ==
'\t' || c ==
'\n' || c ==
'\r')
1973 if (
const Glyph* glyph = FindGlyph(c))
1975 float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f;
1976 pos.
x = (float)(
int)pos.
x + DisplayOffset.x;
1977 pos.
y = (float)(
int)pos.
y + DisplayOffset.y;
1978 ImVec2 pos_tl(pos.
x + glyph->X0 * scale, pos.
y + glyph->Y0 * scale);
1979 ImVec2 pos_br(pos.
x + glyph->X1 * scale, pos.
y + glyph->Y1 * scale);
1988 text_end = text_begin + strlen(text_begin);
1991 pos.
x = (float)(
int)pos.
x + DisplayOffset.x;
1992 pos.
y = (float)(
int)pos.
y + DisplayOffset.y;
1995 if (y > clip_rect.
w)
1998 const float scale = size / FontSize;
1999 const float line_height = FontSize *
scale;
2000 const bool word_wrap_enabled = (wrap_width > 0.0f);
2001 const char* word_wrap_eol =
NULL;
2004 const char*
s = text_begin;
2005 if (!word_wrap_enabled && y + line_height < clip_rect.
y)
2006 while (s < text_end && *s !=
'\n')
2010 const int vtx_count_max = (int)(text_end - s) * 4;
2011 const int idx_count_max = (int)(text_end - s) * 6;
2012 const int idx_expected_size = draw_list->
IdxBuffer.
Size + idx_count_max;
2013 draw_list->
PrimReserve(idx_count_max, vtx_count_max);
2019 while (s < text_end)
2021 if (word_wrap_enabled)
2026 word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - (x - pos.
x));
2027 if (word_wrap_eol == s)
2031 if (s >= word_wrap_eol)
2035 word_wrap_eol =
NULL;
2038 while (s < text_end)
2041 if (
ImCharIsSpace(c)) { s++; }
else if (c ==
'\n') { s++;
break; }
else {
break; }
2048 unsigned int c = (
unsigned int)*s;
2067 if (y > clip_rect.
w)
2069 if (!word_wrap_enabled && y + line_height < clip_rect.
y)
2070 while (s < text_end && *s !=
'\n')
2078 float char_width = 0.0f;
2079 if (
const Glyph* glyph = FindGlyph((
unsigned short)c))
2081 char_width = glyph->XAdvance *
scale;
2084 if (c !=
' ' && c !=
'\t')
2087 float x1 = x + glyph->X0 *
scale;
2088 float x2 = x + glyph->X1 *
scale;
2089 float y1 = y + glyph->Y0 *
scale;
2090 float y2 = y + glyph->Y1 *
scale;
2094 float u1 = glyph->U0;
2095 float v1 = glyph->V0;
2096 float u2 = glyph->U1;
2097 float v2 = glyph->V1;
2102 if (x1 < clip_rect.
x)
2104 u1 = u1 + (1.0f - (x2 - clip_rect.
x) / (x2 - x1)) * (u2 - u1);
2107 if (y1 < clip_rect.
y)
2109 v1 = v1 + (1.0f - (y2 - clip_rect.
y) / (y2 - y1)) * (v2 - v1);
2112 if (x2 > clip_rect.
z)
2114 u2 = u1 + ((clip_rect.
z -
x1) / (x2 - x1)) * (u2 - u1);
2117 if (y2 > clip_rect.
w)
2119 v2 = v1 + ((clip_rect.
w -
y1) / (y2 - y1)) * (v2 - v1);
2132 idx_write[0] = (
ImDrawIdx)(vtx_current_idx); idx_write[1] = (
ImDrawIdx)(vtx_current_idx+1); idx_write[2] = (
ImDrawIdx)(vtx_current_idx+2);
2133 idx_write[3] = (
ImDrawIdx)(vtx_current_idx); idx_write[4] = (
ImDrawIdx)(vtx_current_idx+2); idx_write[5] = (
ImDrawIdx)(vtx_current_idx+3);
2139 vtx_current_idx += 4;
2168 return (input[8] << 24) + (input[9] << 16) + (input[10] << 8) + input[11];
2179 while (length--) *
stb__dout++ = *data++;
2191 #define stb__in2(x) ((i[x] << 8) + i[(x)+1]) 2192 #define stb__in3(x) ((i[x] << 16) + stb__in2((x)+1)) 2193 #define stb__in4(x) ((i[x] << 24) + stb__in3((x)+1)) 2200 else stb__lit(i+1, i[0] - 0x20 + 1), i += 1 + (i[0] - 0x20 + 1);
2214 const unsigned long ADLER_MOD = 65521;
2215 unsigned long s1 = adler32 & 0xffff, s2 = adler32 >> 16;
2216 unsigned long blocklen,
i;
2218 blocklen = buflen % 5552;
2220 for (i=0; i + 7 < blocklen; i += 8) {
2221 s1 += buffer[0], s2 +=
s1;
2222 s1 += buffer[1], s2 +=
s1;
2223 s1 += buffer[2], s2 +=
s1;
2224 s1 += buffer[3], s2 +=
s1;
2225 s1 += buffer[4], s2 +=
s1;
2226 s1 += buffer[5], s2 +=
s1;
2227 s1 += buffer[6], s2 +=
s1;
2228 s1 += buffer[7], s2 +=
s1;
2233 for (; i < blocklen; ++
i)
2234 s1 += *buffer++, s2 += s1;
2236 s1 %= ADLER_MOD, s2 %= ADLER_MOD;
2240 return (
unsigned int)(s2 << 16) + (
unsigned int)
s1;
2246 if (
stb__in4(0) != 0x57bC0000)
return 0;
2257 unsigned char *old_i =
i;
2260 if (*i == 0x05 && i[1] == 0xfa) {
2262 if (
stb__dout != output + olen)
return 0;
2287 "7])#######hV0qs'/###[),##/l:$#Q6>##5[n42>c-TH`->>#/e>11NNV=Bv(*:.F?uu#(gRU.o0XGH`$vhLG1hxt9?W`#,5LsCp#-i>.r$<$6pD>Lb';9Crc6tgXmKVeU2cD4Eo3R/" 2288 "2*>]b(MC;$jPfY.;h^`IWM9<Lh2TlS+f-s$o6Q<BWH`YiU.xfLq$N;$0iR/GX:U(jcW2p/W*q?-qmnUCI;jHSAiFWM.R*kU@C=GH?a9wp8f$e.-4^Qg1)Q-GL(lf(r/7GrRgwV%MS=C#" 2289 "`8ND>Qo#t'X#(v#Y9w0#1D$CIf;W'#pWUPXOuxXuU(H9M(1<q-UE31#^-V'8IRUo7Qf./L>=Ke$$'5F%)]0^#0X@U.a<r:QLtFsLcL6##lOj)#.Y5<-R&KgLwqJfLgN&;Q?gI^#DY2uL" 2290 "i@^rMl9t=cWq6##weg>$FBjVQTSDgEKnIS7EM9>ZY9w0#L;>>#Mx&4Mvt//L[MkA#W@lK.N'[0#7RL_&#w+F%HtG9M#XL`N&.,GM4Pg;-<nLENhvx>-VsM.M0rJfLH2eTM`*oJMHRC`N" 2291 "kfimM2J,W-jXS:)r0wK#@Fge$U>`w'N7G#$#fB#$E^$#:9:hk+eOe--6x)F7*E%?76%^GMHePW-Z5l'&GiF#$956:rS?dA#fiK:)Yr+`�j@'DbG&#^$PG.Ll+DNa<XCMKEV*N)LN/N" 2292 "*b=%Q6pia-Xg8I$<MR&,VdJe$<(7G;Ckl'&hF;;$<_=X(b.RS%%)###MPBuuE1V:v&cXm#(&cV]`k9OhLMbn%s$G2,B$BfD3X*sp5#l,$R#]x_X1xKX%b5U*[r5iMfUo9U`N99hG)" 2293 "tm+/Us9pG)XPu`<0s-)WTt(gCRxIg(%6sfh=ktMKn3j)<6<b5Sk_/0(^]AaN#(p/L>&VZ>1i%h1S9u5o@YaaW$e+b<TWFn/Z:Oh(Cx2$lNEoN^e)#CFY@@I;BOQ*sRwZtZxRcU7uW6CX" 2294 "ow0i(?$Q[cjOd[P4d)]>ROPOpxTO7Stwi1::iB1q)C_=dV26J;2,]7op$]uQr@_V7$q^%lQwtuHY]=DX,n3L#0PHDO4f9>dC@O>HBuKPpP*E,N+b3L#lpR/MrTEH.IAQk.a>D[.e;mc." 2295 "x]Ip.PH^'/aqUO/$1WxLoW0[iLA<QT;5HKD+@qQ'NQ(3_PLhE48R.qAPSwQ0/WK?Z,[x?-J;jQTWA0X@KJ(_Y8N-:/M74:/-ZpKrUss?d#dZq]DAbkU*JqkL+nwX@@47`5>w=4h(9.`G" 2296 "CRUxHPeR`5Mjol(dUWxZa(>STrPkrJiWx`5U7F#.g*jrohGg`cg:lSTvEY/EV_7H4Q9[Z%cnv;JQYZ5q.l7Zeas:HOIZOB?G<Nald$qs]@]L<J7bR*>gv:[7MI2k).'2($5FNP&EQ(,)" 2297 "U]W]+fh18.vsai00);D3@4ku5P?DP8aJt+;qUM]=+b'8@;mViBKx0DE[-auGl8:PJ&Dj+M6OC]O^((##]`0i)drT;-7X`=-H3[igUnPG-NZlo.#k@h#=Ork$m>a>$-?Tm$UV(?#P6YY#" 2298 "'/###xe7q.73rI3*pP/$1>s9)W,JrM7SN]'/4C#v$U`0#V.[0>xQsH$fEmPMgY2u7Kh(G%siIfLSoS+MK2eTM$=5,M8p`A.;_R%#u[K#$x4AG8.kK/HSB==-'Ie/QTtG?-.*^N-4B/ZM" 2299 "_3YlQC7(p7q)&](`6_c)$/*JL(L-^(]$wIM`dPtOdGA,U3:w2M-0<q-]L_?^)1vw'.,MRsqVr.L;aN&#/EgJ)PBc[-f>+WomX2u7lqM2iEumMTcsF?-aT=Z-97UEnXglEn1K-bnEO`gu" 2300 "Ft(c%=;Am_Qs@jLooI&NX;]0#j4#F14;gl8-GQpgwhrq8'=l_f-b49'UOqkLu7-##oDY2L(te+Mch&gLYtJ,MEtJfLh'x'M=$CS-ZZ%P]8bZ>#S?YY#%Q&q'3^Fw&?D)UDNrocM3A76/" 2301 "/oL?#h7gl85[qW/NDOk%16ij;+:1a'iNIdb-ou8.P*w,v5#EI$TWS>Pot-R*H'-SEpA:g)f+O$%%`kA#G=8RMmG1&O`>to8bC]T&$,n.LoO>29sp3dt-52U%VM#q7'DHpg+#Z9%H[K<L" 2302 "%a2E-grWVM3@2=-k22tL]4$##6We'8UJCKE[d_=%wI;'6X-GsLX4j^SgJ$##R*w,vP3wK#iiW&#*h^D&R?jp7+/u&#(AP##XU8c$fSYW-J95_-Dp[g9wcO&#M-h1OcJlc-*vpw0xUX&#" 2303 "OQFKNX@QI'IoPp7nb,QU//MQ&ZDkKP)X<WSVL(68uVl&#c'[0#(s1X&xm$Y%B7*K:eDA323j998GXbA#pwMs-jgD$9QISB-A_(aN4xoFM^@C58D0+Q+q3n0#3U1InDjF682-SjMXJK)(" 2304 "h$hxua_K]ul92%'BOU&#BRRh-slg8KDlr:%L71Ka:.A;%YULjDPmL<LYs8i#XwJOYaKPKc1h:'9Ke,g)b),78=I39B;xiY$bgGw-&.Zi9InXDuYa%G*f2Bq7mn9^#p1vv%#(Wi-;/Z5h" 2305 "o;#2:;%d	v68C5g?ntX0X)pT`;%pB3q7mgGN)3%(P8nTd5L7GeA-GL@+%J3u2:(Yf>et`e;)f#Km8&+DC$I46>#Kr]]u-[=99tts1.qb#q72g1WJO81q+eN'03'eM>&1XxY-caEnO" 2306 "j%2n8)),?ILR5^.Ibn<-X-Mq7[a82Lq:F&#ce+S9wsCK*x`569E8ew'He]h:sI[2LM$[guka3ZRd6:t%IG:;$%YiJ:Nq=?eAw;/:nnDq0(CYcMpG)qLN4$##&J<j$UpK<Q4a1]MupW^-" 2307 "sj_$%[HK%'F####QRZJ::Y3EGl4'@%FkiAOg#p[##O`gukTfBHagL<LHw%q&OV0##F=6/:chIm0@eCP8X]:kFI%hl8hgO@RcBhS-@Qb$%+m=hPDLg*%K8ln(wcf3/'DW-$.lR?n[nCH-" 2308 "eXOONTJlh:.RYF%3'p6sq:UIMA945&^HFS87@$EP2iG<-lCO$%c`uKGD3rC$x0BL8aFn--`ke%#HMP'vh1/R&O_J9'um,.<tx[@%wsJk&bUT2`0uMv7gg#qp/ij.L56'hl;.s5CUrxjO" 2309 "M7-##.l+Au'A&O:-T72L]P`&=;ctp'XScX*rU.>-XTt,%OVU4)S1+R-#dg0/Nn?Ku1^0f$B*P:Rowwm-`0PKjYDDM'3]d39VZHEl4,.j']Pk-M.h^&:0FACm$maq-&sgw0t7/6(^xtk%" 2310 "LuH88Fj-ekm>GA#_>568x6(OFRl-IZp`&b,_P'$M<Jnq79VsJW/mWS*PUiq76;]/NM_>hLbxfc$mj`,O;&%W2m`Zh:/)Uetw:aJ%]K9h:TcF]u_-Sj9,VK3M.*'&0D[Ca]J9gp8,kAW]" 2311 "%(?A%R$f<->Zts'^kn=-^@c4%-pY6qI%J%1IGxfLU9CP8cbPlXv);C=b),<2mOvP8up,UVf3839acAWAW-W?#ao/^#%KYo8fRULNd2.>%m]UK:n%r$'sw]J;5pAoO_#2mO3n,'=H5(et" 2312 "Hg*`+RLgv>=4U8guD$I%D:W>-r5V*%j*W:Kvej.Lp$<M-SGZ':+Q_k+uvOSLiEo(<aD/K<CCc`'Lx>'?;++O'>()jLR-^u68PHm8ZFWe+ej8h:9r6L*0//c&iH&R8pRbA#Kjm%upV1g:" 2313 "a_#Ur7FuA#(tRh#.Y5K+@?3<-8m0$PEn;J:rh6?I6uG<-`wMU'ircp0LaE_OtlMb&1#6T.#FDKu#1Lw%u%+GM+X'e?YLfjM[VO0MbuFp7;>Q&#WIo)0@F%q7c#4XAXN-U&VB<HFF*qL(" 2314 "$/V,;(kXZejWO`<[5??ewY(*9=%wDc;,u<'9t3W-(H1th3+G]ucQ]kLs7df($/*JL]@*t7Bu_G3_7mp7<iaQjO@.kLg;x3B0lqp7Hf,^Ze7-##@/c58Mo(3;knp0%)A7?-W+eI'o8)b<" 2315 "nKnw'Ho8C=Y>pqB>0ie&jhZ[?iLR@@_AvA-iQC(=ksRZRVp7`.=+NpBC%rh&3]R:8XDmE5^V8O(x<<aG/1N$#FX$0V5Y6x'aErI3I$7x%E`v<-BY,)%-?Psf*l?%C3.mM(=/M0:JxG'?" 2316 "7WhH%o'a<-80g0NBxoO(GH<dM]n.+%q@jH?f.UsJ2Ggs&4<-e47&Kl+f//9@`b+?.TeN_&B8Ss?v;^Trk;f#YvJkl&w$]>-+k?'(<S:68tq*WoDfZu';mM?8X[ma8W%*`-=;D.(nc7/;" 2317 ")g:T1=^J$&BRV(-lTmNB6xqB[@0*o.erM*<SWF]u2=st-*(6v>^](H.aREZSi,#1:[IXaZFOm<-ui#qUq2$##Ri;u75OK#(RtaW-K-F`S+cF]uN`-KMQ%rP/Xri.LRcB##=YL3BgM/3M" 2318 "D?@f&1'BW-)Ju<L25gl8uhVm1hL$##*8###'A3/LkKW+(^rWX?5W_8g)a(m&K8P>#bmmWCMkk&#TR`C,5d>g)F;t,4:@_l8G/5h4vUd%&%950:VXD'QdWoY-F$BtUwmfe$YqL'8(PWX(" 2319 "P?^@Po3$##`MSs?DWBZ/S>+4%>fX,VWv/w'KD`LP5IbH;rTV>n3cEK8U#bX]l-/V+^lj3;vlMb&[5YQ8#pekX9JP3XUC72L,,?+Ni&co7ApnO*5NK,((W-i:$,kp'UDAO(G0Sq7MVjJs" 2320 "bIu)'Z,*[>br5fX^:FPAWr-m2KgL<LUN098kTF&#lvo58=/vjDo;.;)Ka*hLR#/k=rKbxuV`>Q_nN6'8uTGT5g)uLv:873UpTLgH+#FgpH'_o1780Ph8KmxQJ8#H72L4@768@Tm&Q" 2321 "h4CB/5OvmA&,Q&QbUoi$a_%3M01H)4x7I^&KQVgtFnV+;[Pc>[m4k//,]1?#`VY[Jr*3&&slRfLiVZJ:]?=K3Sw=[$=uRB?3xk48@aeg<Z'<$#4H)6,>e0jT6'N#(q%.O=?2S]u*(m<-" 2322 "V8J'(1)G][68hW$5'q[GC&5j`TE?m'esFGNRM)j,ffZ?-qx8;->g4t*:CIP/[Qap7/9'#(1sao7w-.qNUdkJ)tCF&#B^;xGvn2r9FEPFFFcL@.iFNkTve$m%#QvQS8U@)2Z+3K:AKM5i" 2323 "sZ88+dKQ)W6>J%CL<KE>`.d*(B`-n8D9oK<Up]c$X$(,)M8Zt7/[rdkqTgl-0cuGMv'?>-XV1q['-5k'cAZ69e;D_?$ZPP&s^+7])$*$#@QYi9,5P	r+$%CE=68>K8r0=dSC%%(@p7" 2324 ".m7jilQ02'0-VWAg<a/''3u.=4L$Y)6k/K:_[3=&jvL<L0C/2'v:^;-DIBW,B4E68:kZ;%?8(Q8BH=kO65BW?xSG&#@uU,DS*,?.+(o(#1vCS8#CHF>TlGW'b)Tq7VT9q^*^$$.:&N@@" 2325 "$&)WHtPm*5_rO0&e%K&#-30j(E4#'Zb.o/(Tpm$>K'f@[PvFl,hfINTNU6u'0pao7%XUp9]5.>%h`8_=VYbxuel.NTSsJfLacFu3B'lQSu/m6-Oqem8T+oE--$0a/k]uj9EwsG>%veR*" 2326 "hv^BFpQj:K'#SJ,sB-'#](j.Lg92rTw-*n%@/;39rrJF,l#qV%OrtBeC6/,;qB3ebNW[?,Hqj2L.1NP&GjUR=1D8QaS3Up&@*9wP?+lo7b?@%'k4`p0Z$22%K3+iCZj?XJN4Nm&+YF]u" 2327 "@-W$U%VEQ/,,>>#)D<h#`)h0:<Q6909ua+&VU%n2:cG3FJ-%@Bj-DgLr`Hw&HAKjKjseK</xKT*)B,N9X3]krc12t'pgTV(Lv-tL[xg_%=M_q7a^x?7Ubd>#%8cY#YZ?=,`Wdxu/ae&#" 2328 "w6)R89tI#6@s'(6Bf7a&?S=^ZI_kS&ai`&=tE72L_D,;^R)7[$s<Eh#c&)q.MXI%#v9ROa5FZO%sF7q7Nwb&#ptUJ:aqJe$Sl68%.D###EC><?-aF&#RNQv>o8lKN%5/$(vdfq7+ebA#" 2329 "u1p]ovUKW&Y%q]'>$1@-[xfn$7ZTp7mM,G,Ko7a&Gu%G[RMxJs[0MM%wci.LFDK)(<c`Q8N)jEIF*+?P2a8g%)$q]o2aH8C&<SibC/q,(e:v;-b#6[$NtDZ84Je2KNvB#$P5?tQ3nt(0" 2330 "d=j.LQf./Ll33+(;q3L-w=8dX$#WF&uIJ@-bfI>%:_i2B5CsR8&9Z&#=mPEnm0f`<&c)QL5uJ#%u%lJj+D-r;BoFDoS97h5g)E#o:&S4weDF,9^Hoe`h*L+_a*NrLW-1pG_&2UdB8" 2331 "6e%B/:=>)N4xeW.*wft-;$'58-ESqr<b?UI(_%@[P46>#U`'6AQ]m&6/`Z>#S?YY#Vc;r7U2&326d=w&H####?TZ`*4?&.MK?LP8Vxg>$[QXc%QJv92.(Db*B)gb*BM9dM*hJMAo*c&#" 2332 "b0v=Pjer]$gG&JXDf->'StvU7505l9$AFvgYRI^&<^b68?j#q9QX4SM'RO#&sL1IM.rJfLUAj221]d##DW=m83u5;'bYx,*Sl0hL(W;;$doB&O/TQ:(Z^xBdLjL<Lni;''X.`$#8+1GD" 2333 ":k$YUWsbn8ogh6rxZ2Z9]%nd+>V#*8U_72Lh+2Q8Cj0i:6hp&$C/:p(HK>T8Y[gHQ4`4)'$Ab(Nof%V'8hL&#<NEdtg(n'=S1A(Q1/I&4([%dM`,Iu'1:_hL>SfD07&6D<fp8dHM7/g+" 2334 "tlPN9J*rKaPct&?'uBCem^jn%9_K)<,C5K3s=5g&GmJb*[SYq7K;TRLGCsM-$$;S%:Y@r7AK0pprpL<Lrh,q7e/%KWK:50I^+m'vi`3?%Zp+<-d+$L-Sv:@.o19n$s0&39;kn;S%BSq*" 2335 "$3WoJSCLweV[aZ'MQIjO<7;X-X;&+dMLvu#^UsGEC9WEc[X(wI7#2.(F0jV*eZf<-Qv3J-c+J5AlrB#$p(H68LvEA'q3n0#m,[`*8Ft)FcYgEud]CWfm68,(aLA$@EFTgLXoBq/UPlp7" 2336 ":d[/;r_ix=:TF`S5H-b<LI&HY(K=h#)]Lk$K14lVfm:x$H<3^Ql<M`$OhapBnkup'D#L$Pb_`N*g]2e;X/Dtg,bsj&K#2[-:iYr'_wgH)NUIR8a1n#S?Yej'h8^58UbZd+^FKD*T@;6A" 2337 "7aQC[K8d-(v6GI$x:T<&'Gp5Uf>@M.*J:;$-rv29'M]8qMv-tLp,'886iaC=Hb*YJoKJ,(j%K=H`K.v9HggqBIiZu'QvBT.#=)0ukruV&.)3=(^1`o*Pj4<-<aN((^7('#Z0wK#5GX@7" 2338 "u][`*S^43933A4rl][`*O4CgLEl]v$1Q3AeF37dbXk,.)vj#x'd`;qgbQR%FW,2(?LO=s%Sc68%NP'##Aotl8x=BE#j1UD([3$M(]UI2LX3RpKN@;/#f'f/&_mt&F)XdF<9t4)Qa.*kT" 2339 "LwQ'(TTB9.xH'>#MJ+gLq9-##@HuZPN0]u:h7.T..G:;$/Usj(T7`Q8tT72LnYl<-qx8;-HV7Q-&Xdx%1a,hC=0u+HlsV>nuIQL-5<N?)NBS)QN*_I,?&)2'IM%L3I)X((e/dl2&8'<M" 2340 ":^#M*Q+[T.Xri.LYS3v%fF`68h;b-X[/En'CR.q7E)p'/kle2HM,u;^%OKC-N+Ll%F9CF<Nf'^#t2L,;27W:0O@6##U6W7:$rJfLWHj$#)woqBefIZ.PK<b*t7ed;p*_m;4ExK#h@&]>" 2341 "_>@kXQtMacfD.m-VAb8;IReM3$wf0''hra*so568'Ip&vRs849'MRYSp%:t:h5qSgwpEr$B>Q,;s(C#$)`svQuF$##-D,##,g68@2[T;.XSdN9Qe)rpt._K-#5wF)sP'##p#C0c%-Gb%" 2342 "hd+<-j'Ai*x&&HMkT]C'OSl##5RG[JXaHN;d'uA#x._U;.`PU@(Z3dt4r152@:v,'R.Sj'w#0<-;kPI)FfJ&#AYJ&#//)>-k=m=*XnK$>=)72L]0I%>.G690a:$##<,);?;72#?x9+d;" 2343 "^V'9;jY@;)br#q^YQpx:X#Te$Z^'=-=bGhLf:D6&bNwZ9-ZD#n^9HhLMr5G;']d&6'wYmTFmL<LD)F^%[tC'8;+9E#C$g%#5Y>q9wI>P(9mI[>kC-ekLC/R&CH+s'B;K-M6$EB%is00:" 2344 "+A4[7xks.LrNk0&E)wILYF@2L'0Nb$+pv<(2.768/FrY&h$^3i&@+G%JT'<-,v`3;_)I9M^AE]CN?Cl2AZg+%4iTpT3<n-&%H%b<FDj2M<hH=&Eh<2Len$b*aTX=-8QxN)k11IM1c^j%" 2345 "9s<L<NFSo)B?+<-(GxsF,^-Eh@$4dXhN$+#rxK8'je'D7k`e;)2pYwPA'_p9&@^18ml1^[@g4t*[JOa*[=Qp7(qJ_oOL^('7fB&Hq-:sf,sNj8xq^>$U4O]GKx'm9)b@p7YsvK3w^YR-" 2346 "CdQ*:Ir<($u&)#(&?L9Rg3H)4fiEp^iI9O8KnTj,]H?D*r7'M;PwZ9K0E^k&-cpI;.p/6_vwoFMV<->#%Xi.LxVnrU(4&8/P+:hLSKj$#U%]49t'I:rgMi'FL@a:0Y-uA[39',(vbma*" 2347 "hU%<-SRF`Tt:542R_VV$p@[p8DV[A,?1839FWdF<TddF<9Ah-6&9tWoDlh]&1SpGMq>Ti1O*H&#(AL8[_P%.M>v^-))qOT*F5Cq0`Ye%+$B6i:7@0IX<N+T+0MlMBPQ*Vj>SsD<U4JHY" 2348 "8kD2)2fU/M#$e.)T4,_=8hLim[&);?UkK'-x?'(:siIfL<$pFM`i<?%W(mGDHM%>iWP,##P`%/L<eXi:@Z9C.7o=@(pXdAO/NLQ8lPl+HPOQa8wD8=^GlPa8TKI1CjhsCTSLJM'/Wl>-" 2349 "S(qw%sf/@%#B6;/U7K]uZbi^Oc^2n<bhPmUkMw>%t<)'mEVE''n`WnJra$^TKvX5B>;_aSEK',(hwa0:i4G?.Bci.(X[?b*($,=-n<.Q%`(X=?+@Am*Js0&=3bh8K]mL<LoNs'6,'85`" 2350 "0?t/'_U59@]ddF<#LdF<eWdF<OuN/45rY<-L@&#+fm>69=Lb,OcZV/);TTm8VI;?%OtJ<(b4mq7M6:u?KRdF<gR@2L=FNU-<b[(9c/ML3m;Z[$oF3g)GAWqpARc=<ROu7cL5l;-[A]%/" 2351 "+fsd;l#SafT/f*W]0=O'$(Tb<[)*@e775R-:Yob%g*>l*:xP?Yb.5)%w_I?7uk5JC+FS(m#i'k.'a0i)9<7b'fs'59hq$*5Uhv##pi^8+hIEBF`nvo`;'l0.^S1<-wUK2/Coh58KKhLj" 2352 "M=SO*rfO`+qC`W-On.=AJ56>>i2@2LH6A:&5q`?9I3@@'04&p2/LVa*T-4<-i3;M9UvZd+N7>b*eIwg:CC)c<>nO&#<IGe;__.thjZl<%w(Wk2xmp4Q@I#I9,DF]u7-P=.-_:YJ]aS@V" 2353 "?6*C()dOp7:WL,b&3Rg/.cmM9&r^>$(>.Z-I&J(Q0Hd5Q%7Co-b`-c<N(6r@ip+AurK<m86QIth*#v;-OBqi+L7wDE-Ir8K['m+DDSLwK&/.?-V%U_%3:qKNu$_b*B-kp7NaD'QdWQPK" 2354 "Yq[@>P)hI;*_F]u`Rb[.j8_Q/<&>uu+VsH$sM9TA%?)(vmJ80),P7E>)tjD%2L=-t#fK[%`v=Q8<FfNkgg^oIbah*#8/Qt$F&:K*-(N/'+1vMB,u()-a.VUU*#[e%gAAO(S>WlA2);Sa" 2355 ">gXm8YB`1d@K#n]76-a$U,mF<fX]idqd)<3,]J7JmW4`6]uks=4-72L(jEk+:bJ0M^q-8Dm_Z?0olP1C9Sa&H[d&c$ooQUj]Exd*3ZM@-WGW2%s',B-_M%>%Ul:#/'xoFM9QX-$.QN'>" 2356 "[%$Z$uF6pA6Ki2O5:8w*vP1<-1`[G,)-m#>0`P&#eb#.3i)rtB61(o'$?X3B</R90;eZ]%Ncq;-Tl]#F>2Qft^ae_5tKL9MUe9b*sLEQ95C&`=G?@Mj=wh*'3E>=-<)Gt*Iw)'QG:`@I" 2357 "wOf7&]1i'S01B+Ev/Nac#9S;=;YQpg_6U`*kVY39xK,[/6Aj7:'1Bm-_1EYfa1+o&o4hp7KN_Q(OlIo@S%;jVdn0'1<Vc52=u`3^o-n1'g4v58Hj&6_t7$##?M)c<$bgQ_'SY((-xkA#" 2358 "Y(,p'H9rIVY-b,'%bCPF7.J<Up^,(dU1VY*5#WkTU>h19w,WQhLI)3S#f$2(eb,jr*b;3Vw]*7NH%$c4Vs,eD9>XW8?N]o+(*pgC%/72LV-u<Hp,3@e^9UB1J+ak9-TN/mhKPg+AJYd$" 2359 "MlvAF_jCK*.O-^(63adMT->W%iewS8W6m2rtCpo'RS1R84=@paTKt)>=%&1[)*vp'u+x,VrwN;&]kuO9JDbg=pO$J*.jVe;u'm0dr9l,<*wMK*Oe=g8lV_KEBFkO'oU]^=[-792#ok,)" 2360 "i]lR8qQ2oA8wcRCZ^7w/Njh;?.stX?Q1>S1q4Bn$)K1<-rGdO'$Wr.Lc.CG)$/*JL4tNR/,SVO3,aUw'DJN:)Ss;wGn9A32ijw%FL+Z0Fn.U9;reSq)bmI32U==5ALuG&#Vf1398/pVo" 2361 "1*c-(aY168o<`JsSbk-,1N;$>0:OUas(3:8Z972LSfF8eb=c-;>SPw7.6hn3m`9^Xkn(r.qS[0;T%&Qc=+STRxX'q1BNk3&*eu2;&8q$&x>Q#Q7^Tf+6<(d%ZVmj2bDi%.3L2n+4W'$P" 2362 "iDDG)g,r%+?,$@?uou5tSe2aN_AQU*<h`e-GI7)?OK2A.d7_c)?wQ5AS@DL3r#7fSkgl6-++D:'A,uq7SvlB$pcpH'q3n0#_%dY#xCpr-l<F0NR@-##FEV6NTF6##$l84N1w?AO>'IAO" 2363 "URQ##V^Fv-XFbGM7Fl(N<3DhLGF%q.1rC$#:T__&Pi68%0xi_&[qFJ(77j_&JWoF.V735&T,[R*:xFR*K5>>#`bW-?4Ne_&6Ne_&6Ne_&n`kr-#GJcM6X;uM6X;uM(.a..^2TkL%oR(#" 2364 ";u.T%fAr%4tJ8&><1=GHZ_+m9/#H1F^R#SC#*N=BA9(D?v[UiFY>>^8p,KKF.W]L29uLkLlu/+4T<XoIB&hx=T1PcDaB&;HH+-AFr?(m9HZV)FKS8JCw;SD=6[^/DZUL`EUDf]GGlG&>" 2365 "w$)F./^n3+rlo+DB;5sIYGNk+i1t-69Jg--0pao7Sm#K)pdHW&;LuDNH@H>#/X-TI(;P>#,Gc>#0Su>#4`1?#8lC?#<xU?#@.i?#D:%@#HF7@#LRI@#P_[@#Tkn@#Xw*A#]-=A#a9OA#" 2366 "d<F&#*;G##.GY##2Sl##6`($#:l:$#>xL$#B.`$#F:r$#JF.%#NR@%#R_R%#Vke%#Zww%#_-4^Rh%Sflr-k'MS.o?.5/sWel/wpEM0%3'/1)K^f1-d>G21&v(35>V`39V7A4=onx4" 2367 "A1OY5EI0;6Ibgr6M$HS7Q<)58C5w,;WoA*#[%T*#`1g*#d=#+#hI5+#lUG+#pbY+#tnl+#x$),#&1;,#*=M,#.I`,#2Ur,#6b.-#;w[H#iQtA#m^0B#qjBB#uvTB##-hB#'9$C#+E6C#" 2368 "/QHC#3^ZC#7jmC#;v)D#?,<D#C8ND#GDaD#KPsD#O]/E#g1A5#KA*1#gC17#MGd;#8(02#L-d3#rWM4#Hga1#,<w0#T.j<#O#'2#CYN1#qa^:#_4m3#o@/=#eG8=#t8J5#`+78#4uI-#" 2369 "m3B2#SB[8#Q0@8#i[*9#iOn8#1Nm;#^sN9#qh<9#:=x-#P;K2#$%X9#bC+.#Rg;<#mN=.#MTF.#RZO.#2?)4#Y#(/#[)1/#b;L/#dAU/#0Sv;#lY$0#n`-0#sf60#(F24#wrH0#%/e0#" 2370 "TmD<#%JSMFove:CTBEXI:<eh2g)B,3h2^G3i;#d3jD>)4kMYD4lVu`4m`:&5niUA5@(A5BA1]PBB:xlBCC=2CDLXMCEUtiCf&0g2'tN?PGT4CPGT4CPGT4CPGT4CPGT4CPGT4CPGT4CP" 2371 "GT4CPGT4CPGT4CPGT4CPGT4CPGT4CP-qekC`.9kEg^+F$kwViFJTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5o,^<-28ZI'O?;xp" 2372 "O?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xp;7q-#lLYI:xvD=#";
static int ImMax(int lhs, int rhs)
IMGUI_API void AddRectFilled(const ImVec2 &a, const ImVec2 &b, ImU32 col, float rounding=0.0f, int rounding_corners=0x0F)
GLboolean GLboolean GLboolean b
static unsigned char * stb__dout
IMGUI_API const ImWchar * GetGlyphRangesCyrillic()
IMGUI_API void PrimQuadUV(const ImVec2 &a, const ImVec2 &b, const ImVec2 &c, const ImVec2 &d, const ImVec2 &uv_a, const ImVec2 &uv_b, const ImVec2 &uv_c, const ImVec2 &uv_d, ImU32 col)
IMGUI_API void AddCircle(const ImVec2 ¢re, float radius, ImU32 col, int num_segments=12, float thickness=1.0f)
int ImTextCharFromUtf8(unsigned int *out_char, const char *in_text, const char *in_text_end)
IMGUI_API void AddRectFilledMultiColor(const ImVec2 &a, const ImVec2 &b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left)
IMGUI_API ImFont * AddFont(const ImFontConfig *font_cfg)
IMGUI_API void PopTextureID()
void(* ImDrawCallback)(const ImDrawList *parent_list, const ImDrawCmd *cmd)
IMGUI_API void PopClipRect()
IMGUI_API void ChannelsSetCurrent(int channel_index)
IMGUI_API void ClearFonts()
IMGUI_API void AddQuadFilled(const ImVec2 &a, const ImVec2 &b, const ImVec2 &c, const ImVec2 &d, ImU32 col)
static void stb__match(unsigned char *data, unsigned int length)
void resize(int new_size)
GLenum GLenum GLenum GLenum GLenum scale
float CurveTessellationTol
GLdouble GLdouble GLdouble y2
IMGUI_API void AddBezierCurve(const ImVec2 &pos0, const ImVec2 &cp0, const ImVec2 &cp1, const ImVec2 &pos1, ImU32 col, float thickness, int num_segments=0)
IMGUI_API void ClearFreeMemory()
GLsizei const GLchar *const * path
IMGUI_API void * MemAlloc(size_t sz)
static unsigned char * stb_decompress_token(unsigned char *i)
STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context)
IMGUI_API void PushTextureID(const ImTextureID &texture_id)
STBTT_DEF void stbtt_PackEnd(stbtt_pack_context *spc)
IMGUI_API void PushClipRect(const ImVec2 &clip_rect_min, const ImVec2 &clip_rect_max, bool intersect_with_current_clip_rect)
IMGUI_API void PathArcToFast(const ImVec2 ¢re, float radius, int a_min_of_12, int a_max_of_12)
bool FontDataOwnedByAtlas
void swap(ImVector< T > &rhs)
static unsigned char * stb__barrier4
IMGUI_API void PrimRect(const ImVec2 &a, const ImVec2 &b, ImU32 col)
IMGUI_API void AddTriangleFilled(const ImVec2 &a, const ImVec2 &b, const ImVec2 &c, ImU32 col)
GLfloat GLfloat GLfloat GLfloat h
static unsigned int stb_adler32(unsigned int adler32, unsigned char *buffer, unsigned int buflen)
#define IM_ARRAYSIZE(_ARR)
IMGUI_API void AddLine(const ImVec2 &a, const ImVec2 &b, ImU32 col, float thickness=1.0f)
IMGUI_API void AddPolyline(const ImVec2 *points, const int num_points, ImU32 col, bool closed, float thickness, bool anti_aliased)
IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect=false)
IMGUI_API ImFont * AddFontFromMemoryCompressedTTF(const void *compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig *font_cfg=NULL, const ImWchar *glyph_ranges=NULL)
static const char proggy_clean_ttf_compressed_data_base85[11980+1]
GLboolean GLboolean GLboolean GLboolean a
IMGUI_API void MemFree(void *ptr)
IMGUI_API void ScaleClipRects(const ImVec2 &sc)
ImGuiMouseCursorData MouseCursorData[ImGuiMouseCursor_Count_]
void * ImLoadFileToMemory(const char *filename, const char *file_open_mode, int *out_file_size, int padding_bytes)
ImFontAtlas * ContainerAtlas
IMGUI_API void AddTriangle(const ImVec2 &a, const ImVec2 &b, const ImVec2 &c, ImU32 col, float thickness=1.0f)
IMGUI_API void AddDrawCmd()
stbtt_packedchar * chardata_for_range
IMGUI_API const ImWchar * GetGlyphRangesKorean()
static bool ImCharIsSpace(int c)
STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap)
IMGUI_API void UpdateClipRect()
IMGUI_API ImFont * AddFontFromMemoryTTF(void *ttf_data, int ttf_size, float size_pixels, const ImFontConfig *font_cfg=NULL, const ImWchar *glyph_ranges=NULL)
STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset)
ImVector< ImDrawCmd > CmdBuffer
static const char * GetDefaultCompressedFontDataTTFBase85()
IMGUI_API void AddText(const ImVec2 &pos, ImU32 col, const char *text_begin, const char *text_end=NULL)
const ImWchar * GlyphRanges
IMGUI_API void RenderCustomTexData(int pass, void *rects)
IMGUI_API void ClearTexData()
IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst=true)
IMGUI_API void PrimRectUV(const ImVec2 &a, const ImVec2 &b, const ImVec2 &uv_a, const ImVec2 &uv_b, ImU32 col)
IMGUI_API void ChannelsMerge()
IMGUI_API void AddConvexPolyFilled(const ImVec2 *points, const int num_points, ImU32 col, bool anti_aliased)
IMGUI_API void GrowIndex(int new_size)
IMGUI_API void UpdateTextureID()
static unsigned char * stb__barrier3
static float ImInvLength(const ImVec2 &lhs, float fail_value)
IMGUI_API void GetTexDataAsRGBA32(unsigned char **out_pixels, int *out_width, int *out_height, int *out_bytes_per_pixel=NULL)
IMGUI_API void AddCircleFilled(const ImVec2 ¢re, float radius, ImU32 col, int num_segments=12)
IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2 &a, const ImVec2 &b, const ImVec2 &uv0=ImVec2(0, 0), const ImVec2 &uv1=ImVec2(1, 1), ImU32 col=0xFFFFFFFF)
GLint GLint GLsizei GLint GLenum GLenum const void * pixels
unsigned int _VtxCurrentIdx
static void PathBezierToCasteljau(ImVector< ImVec2 > *path, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level)
ImVector< ImDrawIdx > IdxBuffer
static unsigned char * stb__barrier2
IMGUI_API const ImWchar * GetGlyphRangesDefault()
const Glyph * FallbackGlyph
STBRP_DEF void stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects)
GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint GLdouble GLdouble w2
static unsigned int Decode85Byte(char c)
GLdouble GLdouble GLint GLint GLdouble v1
static int ImMin(int lhs, int rhs)
ImDrawCallback UserCallback
GLuint GLfloat GLfloat GLfloat x1
IMGUI_API void GetTexDataAsAlpha8(unsigned char **out_pixels, int *out_width, int *out_height, int *out_bytes_per_pixel=NULL)
ImDrawVert * _VtxWritePtr
std::pair< T, T > in_range(T begin, T end)
IMGUI_API void RenderChar(ImDrawList *draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const
IMGUI_API void SetFallbackChar(ImWchar c)
STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
GLdouble GLdouble GLdouble q
void push_back(const value_type &v)
IMGUI_API const ImWchar * GetGlyphRangesChinese()
IMGUI_API void ClearInputData()
IMGUI_API void PathArcTo(const ImVec2 ¢re, float radius, float a_min, float a_max, int num_segments=10)
GLenum GLenum GLenum input
IMGUI_API const ImWchar * GetGlyphRangesJapanese()
IMGUI_API void RenderText(ImDrawList *draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4 &clip_rect, const char *text_begin, const char *text_end, float wrap_width=0.0f, bool cpu_fine_clip=false) const
IMGUI_API ImFont * AddFontFromMemoryCompressedBase85TTF(const char *compressed_ttf_data_base85, float size_pixels, const ImFontConfig *font_cfg=NULL, const ImWchar *glyph_ranges=NULL)
static const ImVec4 GNullClipRect(-8192.0f,-8192.0f,+8192.0f,+8192.0f)
STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
static void stb__lit(unsigned char *data, unsigned int length)
static unsigned int stb_decompress(unsigned char *output, unsigned char *i, unsigned int length)
IMGUI_API void DeIndexAllBuffers()
int first_unicode_codepoint_in_range
STBTT_DEF void stbtt_GetPackedQuad(stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer)
ImVector< ImDrawVert > VtxBuffer
IMGUI_API ImFont * AddFontDefault(const ImFontConfig *font_cfg=NULL)
#define GetCurrentClipRect()
STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample)
IMGUI_API void PathBezierCurveTo(const ImVec2 &p1, const ImVec2 &p2, const ImVec2 &p3, int num_segments=0)
GLenum GLuint GLenum GLsizei length
IMGUI_API const char * CalcWordWrapPositionA(float scale, const char *text, const char *text_end, float wrap_width) const
IMGUI_API void BuildLookupTable()
ImVector< ImDrawCmd > CmdBuffer
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat s1
STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels)
IMGUI_API void AddCallback(ImDrawCallback callback, void *callback_data)
IMGUI_API void PushClipRectFullScreen()
IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char *text_begin, const char *text_end=NULL, const char **remaining=NULL) const
#define GetCurrentTextureId()
STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index)
static unsigned int stb_decompress_length(unsigned char *input)
IMGUI_API void AddQuad(const ImVec2 &a, const ImVec2 &b, const ImVec2 &c, const ImVec2 &d, ImU32 col, float thickness=1.0f)
static void Decode85(const unsigned char *src, unsigned char *dst)
IMGUI_API void AddRect(const ImVec2 &a, const ImVec2 &b, ImU32 col, float rounding=0.0f, int rounding_corners=0x0F, float thickness=1.0f)
ImVector< ImDrawIdx > IdxBuffer
IMGUI_API void PathRect(const ImVec2 &rect_min, const ImVec2 &rect_max, float rounding=0.0f, int rounding_corners=0x0F)
ImFontConfig * ConfigData
ImVec2 FontTexUvWhitePixel
IMGUI_API void PrimReserve(int idx_count, int vtx_count)
static int ImUpperPowerOfTwo(int v)
IMGUI_API void ChannelsSplit(int channels_count)
static unsigned char * stb__barrier
GLdouble GLdouble GLint GLint const GLdouble * points
IMGUI_API const Glyph * FindGlyph(ImWchar c) const
GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint GLdouble w1
IMGUI_API ImFont * AddFontFromFileTTF(const char *filename, float size_pixels, const ImFontConfig *font_cfg=NULL, const ImWchar *glyph_ranges=NULL)