diff --git a/imgui_draw.cpp b/imgui_draw.cpp
index 4b2ac66..2ab5534 100644
--- a/imgui_draw.cpp
+++ b/imgui_draw.cpp
@@ -628,12 +628,13 @@
     const float AA_SIZE = 1.0f;
     const ImU32 col_trans = col & ~IM_COL32_A_MASK;
 
-    if (antialias && thickness <= 1.0) {
+    if (antialias && thickness <= 1.0)
+    {
         // Anti-aliased stroke approximation
         const int idx_count = count*12;
         const int vtx_count = count*6;      // FIXME-OPT: Not sharing edges
         PrimReserve(idx_count, vtx_count);
-        const ImU32 col_faded = col & ~IM_COL32_A_MASK | int(((col >> IM_COL32_A_SHIFT) & 0xFF) * thickness) << IM_COL32_A_SHIFT;
+        const ImU32 col_faded = (col & ~IM_COL32_A_MASK) | (int(((col >> IM_COL32_A_SHIFT) & 0xFF) * thickness) << IM_COL32_A_SHIFT);
 
         for (int i1 = 0; i1 < count; i1++)
         {
@@ -681,7 +682,8 @@
 
         float sqlen1, sqlen2;
         float dx1, dy1;
-        if (closed) {
+        if (closed)
+        {
             dx1 = points[0].x - points[points_count-1].x;
             dy1 = points[0].y - points[points_count-1].y;
             sqlen1 = dx1 * dx1 + dy1 * dy1;
@@ -697,12 +699,15 @@
             float dy2 = p1.y - p2.y;
             sqlen2 = dx2 * dx2 + dy2 * dy2;
             IM_NORMALIZE2F_OVER_ZERO(dx2, dy2);
-            if (!closed && i1 == 0) {
+
+            if (!closed && i1 == 0)
+            {
                 dx1 = -dx2;
                 dy1 = -dy2;
                 sqlen1 = sqlen2;
             }
-            if (!closed && i1 == points_count-1) {
+            if (!closed && i1 == points_count-1)
+            {
                 dx2 = -dx1;
                 dy2 = -dy1;
                 sqlen2 = sqlen1;
@@ -712,36 +717,42 @@
             float mlx, mly, mrx, mry;     // Left and right miters
             float mlax, mlay, mrax, mray; // Left and right miters incl. antialiasing
             bool bevel = dx1 * dx2 + dy1 * dy2 > 1e-5;
-            if (fabsf(miter_l_recip) > 1e-5) {
+            if (fabsf(miter_l_recip) > 1e-5)
+            {
                 float miter_l = half_thickness / miter_l_recip;
                 // Limit (inner) miter so it doesn't shoot away when miter is longer than adjacent line segments on acute angles
-                if (bevel) {
+                if (bevel)
+                {
                     // This is too aggressive (not exacply precise)
                     float min_sqlen = sqlen1 > sqlen2 ? sqlen2 : sqlen1;
                     float miter_sqlen = ((dx1 + dx2) * (dx1 + dx2) + (dy1 + dy2) * (dy1 + dy2)) * miter_l * miter_l;
-                    if (miter_sqlen > min_sqlen) {
+                    if (miter_sqlen > min_sqlen)
+                    {
                         miter_l *= sqrtf(min_sqlen / miter_sqlen);
                     }
                 }
-
                 mlx = p1.x - (dx1 + dx2) * miter_l;
                 mly = p1.y - (dy1 + dy2) * miter_l;
                 mrx = p1.x + (dx1 + dx2) * miter_l;
                 mry = p1.y + (dy1 + dy2) * miter_l;
-                if (antialias) {
+                if (antialias)
+                {
                     float miter_al = half_thickness_aa / miter_l_recip;
                     mlax = p1.x - (dx1 + dx2) * miter_al;
                     mlay = p1.y - (dy1 + dy2) * miter_al;
                     mrax = p1.x + (dx1 + dx2) * miter_al;
                     mray = p1.y + (dy1 + dy2) * miter_al;
                 }
-            } else {
+            }
+            else
+            {
                 // Avoid degeneracy for (nearly) straight lines
                 mlx = p1.x + dy1 * half_thickness;
                 mly = p1.y - dx1 * half_thickness;
                 mrx = p1.x - dy1 * half_thickness;
                 mry = p1.y + dx1 * half_thickness;
-                if (antialias) {
+                if (antialias)
+                {
                     mlax = p1.x + dy1 * half_thickness_aa;
                     mlay = p1.y - dx1 * half_thickness_aa;
                     mrax = p1.x - dy1 * half_thickness_aa;
@@ -753,13 +764,15 @@
             int miter_sign = (miter_l_recip >= 0) - (miter_l_recip < 0);
             float b1x, b1y, b2x, b2y;     // First and second bevel point
             float b1ax, b1ay, b2ax, b2ay; // First and second bevel point incl. antialiasing
-            if (bevel) {
+            if (bevel)
+            {
                 // TODO: benchmark if doing these computations only once in AA case saves cycles
                 b1x = p1.x + (dx1 - dy1 * miter_sign) * half_thickness;
                 b1y = p1.y + (dy1 + dx1 * miter_sign) * half_thickness;
                 b2x = p1.x + (dx2 + dy2 * miter_sign) * half_thickness;
                 b2y = p1.y + (dy2 - dx2 * miter_sign) * half_thickness;
-                if (antialias) {
+                if (antialias)
+                {
                     b1ax = p1.x + (dx1 - dy1 * miter_sign) * half_thickness_aa;
                     b1ay = p1.y + (dy1 + dx1 * miter_sign) * half_thickness_aa;
                     b2ax = p1.x + (dx2 + dy2 * miter_sign) * half_thickness_aa;
@@ -786,74 +799,76 @@
             // even if we don't know relevant line properties yet
 
             int vertex_count = antialias ? (bevel ? 6 : 4) : (bevel ? 3 : 2); // TODO: shorten the expression
-            unsigned int bi = antialias ? 4 : 2; // the extra bevel vertex index
+            unsigned int bi = antialias ? 4 : 2; // outgoing edge bevel vertex index
             const bool bevel_l = bevel && miter_sign < 0;
             const bool bevel_r = bevel && miter_sign > 0;
 
             _VtxWritePtr[0].pos.x = bevel_l ? b1x : mlx; _VtxWritePtr[0].pos.y = bevel_l ? b1y : mly; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
             _VtxWritePtr[1].pos.x = bevel_r ? b1x : mrx; _VtxWritePtr[1].pos.y = bevel_r ? b1y : mry; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col;
             if (bevel)
+            {
                 _VtxWritePtr[bi].pos.x = b2x; _VtxWritePtr[bi].pos.y = b2y; _VtxWritePtr[bi].uv = uv; _VtxWritePtr[bi].col = col;
+            }
 
-            if (antialias) {
+            if (antialias)
+            {
                 _VtxWritePtr[2].pos.x = bevel_l ? b1ax : mlax; _VtxWritePtr[2].pos.y = bevel_l ? b1ay : mlay; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col_trans;
                 _VtxWritePtr[3].pos.x = bevel_r ? b1ax : mrax; _VtxWritePtr[3].pos.y = bevel_r ? b1ay : mray; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col_trans;
                 if (bevel)
+                {
                     _VtxWritePtr[5].pos.x = b2ax; _VtxWritePtr[5].pos.y = b2ay; _VtxWritePtr[5].uv = uv; _VtxWritePtr[5].col = col_trans;
+                }
             }
             unused_vertices += max_n_vtx - vertex_count;
             _VtxWritePtr += vertex_count;
 
-            if (i1 < count) {
+            if (i1 < count)
+            {
                 const int vtx_next_id = i1 < points_count-1 ? _VtxCurrentIdx+vertex_count : first_vtx_ptr;
-                _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx + (bevel_l ? bi : 0));
-                _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx + (bevel_r ? bi : 1));
-                _IdxWritePtr[2] = (ImDrawIdx)(vtx_next_id+1);
+                ImDrawIdx l1i = _VtxCurrentIdx + (bevel_l ? bi : 0);
+                ImDrawIdx r1i = _VtxCurrentIdx + (bevel_r ? bi : 1);
+                ImDrawIdx l2i = vtx_next_id;
+                ImDrawIdx r2i = vtx_next_id + 1;
+                ImDrawIdx ebi = _VtxCurrentIdx + (bevel_l ? 0 : 1); // incoming edge bevel vertex index
 
-                _IdxWritePtr[3] = (ImDrawIdx)(_VtxCurrentIdx + (bevel_l ? bi : 0));
-                _IdxWritePtr[4] = (ImDrawIdx)(vtx_next_id+1);
-                _IdxWritePtr[5] = (ImDrawIdx)(vtx_next_id);
+                _IdxWritePtr[0] = l1i; _IdxWritePtr[1] = r1i; _IdxWritePtr[2] = r2i;
+                _IdxWritePtr[3] = l1i; _IdxWritePtr[4] = r2i; _IdxWritePtr[5] = l2i;
                 _IdxWritePtr += 6;
 
-                if (bevel) {
-                    _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx);
-                    _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+1);
-                    _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+bi);
+                if (bevel)
+                {
+                    _IdxWritePtr[0] = l1i; _IdxWritePtr[1] = r1i; _IdxWritePtr[2] = ebi;
                     _IdxWritePtr += 3;
-                } else {
-                    unused_indices += 3;
                 }
+                else
+                    unused_indices += 3;
 
-                if (antialias) {
-                    _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx + (bevel_l ? 5 : 2));
-                    _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx + (bevel_l ? 4 : 0));
-                    _IdxWritePtr[2] = (ImDrawIdx)(vtx_next_id);
+                if (antialias)
+                {
+                    ImDrawIdx l1ai = _VtxCurrentIdx + (bevel_l ? 5 : 2);
+                    ImDrawIdx r1ai = _VtxCurrentIdx + (bevel_r ? 5 : 3);
+                    ImDrawIdx l2ai = vtx_next_id + 2;
+                    ImDrawIdx r2ai = vtx_next_id + 3;
 
-                    _IdxWritePtr[3] = (ImDrawIdx)(_VtxCurrentIdx + (bevel_l ? 5 : 2));
-                    _IdxWritePtr[4] = (ImDrawIdx)(vtx_next_id);
-                    _IdxWritePtr[5] = (ImDrawIdx)(vtx_next_id+2);
-
-                    _IdxWritePtr[6] = (ImDrawIdx)(_VtxCurrentIdx + (bevel_r ? 4 : 1));
-                    _IdxWritePtr[7] = (ImDrawIdx)(_VtxCurrentIdx + (bevel_r ? 5 : 3));
-                    _IdxWritePtr[8] = (ImDrawIdx)(vtx_next_id+3);
-
-                    _IdxWritePtr[9] = (ImDrawIdx)(_VtxCurrentIdx + (bevel_r ? 4 : 1));
-                    _IdxWritePtr[10] = (ImDrawIdx)(vtx_next_id+3);
-                    _IdxWritePtr[11] = (ImDrawIdx)(vtx_next_id+1);
+                    _IdxWritePtr[0] = l1ai; _IdxWritePtr[1] = l1i; _IdxWritePtr[2] = l2i;
+                    _IdxWritePtr[3] = l1ai; _IdxWritePtr[4] = l2i; _IdxWritePtr[5] = l2ai;
+                    _IdxWritePtr[6] = r1ai; _IdxWritePtr[7] = r1i; _IdxWritePtr[8] = r2i;
+                    _IdxWritePtr[9] = r1ai; _IdxWritePtr[10] = r2i; _IdxWritePtr[11] = r2ai;
                     _IdxWritePtr += 12;
 
-                    if (bevel) {
-                        _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx+(bevel_r ? 1 : 2));
-                        _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+(bevel_r ? 3 : 0));
-                        _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+(bevel_r ? 5 : 4));
+                    if (bevel)
+                    {
+                        _IdxWritePtr[0] = (_VtxCurrentIdx+(bevel_r ? 1 : 2));
+                        _IdxWritePtr[1] = (_VtxCurrentIdx+(bevel_r ? 3 : 0));
+                        _IdxWritePtr[2] = (_VtxCurrentIdx+(bevel_r ? 5 : 4));
 
-                        _IdxWritePtr[3] = (ImDrawIdx)(_VtxCurrentIdx+(bevel_r ? 1 : 2));
-                        _IdxWritePtr[4] = (ImDrawIdx)(_VtxCurrentIdx+(bevel_r ? 5 : 4));
-                        _IdxWritePtr[5] = (ImDrawIdx)(_VtxCurrentIdx+(bevel_r ? 4 : 5));
+                        _IdxWritePtr[3] = (_VtxCurrentIdx+(bevel_r ? 1 : 2));
+                        _IdxWritePtr[4] = (_VtxCurrentIdx+(bevel_r ? 5 : 4));
+                        _IdxWritePtr[5] = (_VtxCurrentIdx+(bevel_r ? 4 : 5));
                         _IdxWritePtr += 6;
-                    } else {
-                        unused_indices += 6;
                     }
+                    else
+                        unused_indices += 6;
                 }
             }
             _VtxCurrentIdx += vertex_count;
