PushStyleColor/PushStyleVar can be used outside the scope of a window. Added 'count' parameter to PopStyleColor/PopStyleVar
diff --git a/imgui.cpp b/imgui.cpp
index 17188a1..07b02a0 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -624,8 +624,6 @@
     ImVector<bool>          AllowKeyboardFocus;
     ImVector<float>         ItemWidth;
     ImVector<float>         TextWrapPos;
-    ImVector<ImGuiColMod>   ColorModifiers;
-    ImVector<ImGuiStyleMod> StyleModifiers;
     ImGuiColorEditMode      ColorEditMode;
     ImGuiStorage*           StateStorage;
     int                     OpenNextNode;
@@ -734,6 +732,8 @@
     float                   SettingsDirtyTimer;
     ImVector<ImGuiIniData*> Settings;
     ImVec2                  NewWindowDefaultPos;
+    ImVector<ImGuiColMod>   ColorModifiers;
+    ImVector<ImGuiStyleMod> StyleModifiers;
 
     // Render
     ImVector<ImDrawList*>   RenderDrawLists;
@@ -2366,8 +2366,6 @@
         window->DC.AllowKeyboardFocus.push_back(true);
         window->DC.TextWrapPos.resize(0);
         window->DC.TextWrapPos.push_back(-1.0f); // disabled
-        window->DC.ColorModifiers.resize(0);
-        window->DC.StyleModifiers.resize(0);
         window->DC.ColorEditMode = ImGuiColorEditMode_UserSelect;
         window->DC.ColumnsCurrent = 0;
         window->DC.ColumnsCount = 1;
@@ -2549,23 +2547,25 @@
 void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col)
 {
     ImGuiState& g = GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
 
     ImGuiColMod backup;
     backup.Col = idx;
     backup.PreviousValue = g.Style.Colors[idx];
-    window->DC.ColorModifiers.push_back(backup);
+    g.ColorModifiers.push_back(backup);
     g.Style.Colors[idx] = col;
 }
 
-void ImGui::PopStyleColor()
+void ImGui::PopStyleColor(int count)
 {
     ImGuiState& g = GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
 
-    ImGuiColMod& backup = window->DC.ColorModifiers.back();
-    g.Style.Colors[backup.Col] = backup.PreviousValue;
-    window->DC.ColorModifiers.pop_back();
+    while (count > 0)
+    {
+        ImGuiColMod& backup = g.ColorModifiers.back();
+        g.Style.Colors[backup.Col] = backup.PreviousValue;
+        g.ColorModifiers.pop_back();
+        count--;
+    }
 }
 
 static float* GetStyleVarFloatAddr(ImGuiStyleVar idx)
@@ -2595,41 +2595,44 @@
 
 void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
 {
-    ImGuiWindow* window = GetCurrentWindow();
+    ImGuiState& g = GImGui;
 
     float* pvar = GetStyleVarFloatAddr(idx);
     IM_ASSERT(pvar != NULL); // Called wrong function?
     ImGuiStyleMod backup;
     backup.Var = idx;
     backup.PreviousValue = ImVec2(*pvar, 0.0f);
-    window->DC.StyleModifiers.push_back(backup);
+    g.StyleModifiers.push_back(backup);
     *pvar = val;
 }
 
 
 void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
 {
-    ImGuiWindow* window = GetCurrentWindow();
+    ImGuiState& g = GImGui;
 
     ImVec2* pvar = GetStyleVarVec2Addr(idx);
     IM_ASSERT(pvar != NULL); // Called wrong function?
     ImGuiStyleMod backup;
     backup.Var = idx;
     backup.PreviousValue = *pvar;
-    window->DC.StyleModifiers.push_back(backup);
+    g.StyleModifiers.push_back(backup);
     *pvar = val;
 }
 
-void ImGui::PopStyleVar()
+void ImGui::PopStyleVar(int count)
 {
-    ImGuiWindow* window = GetCurrentWindow();
+    ImGuiState& g = GImGui;
 
-    ImGuiStyleMod& backup = window->DC.StyleModifiers.back();
-    if (float* pvar_f = GetStyleVarFloatAddr(backup.Var))
-        *pvar_f = backup.PreviousValue.x;
-    else if (ImVec2* pvar_v = GetStyleVarVec2Addr(backup.Var))
-        *pvar_v = backup.PreviousValue;
-    window->DC.StyleModifiers.pop_back();
+    while (count > 0)
+    {
+        ImGuiStyleMod& backup = g.StyleModifiers.back();
+        if (float* pvar_f = GetStyleVarFloatAddr(backup.Var))
+            *pvar_f = backup.PreviousValue.x;
+        else if (ImVec2* pvar_v = GetStyleVarVec2Addr(backup.Var))
+            *pvar_v = backup.PreviousValue;
+        g.StyleModifiers.pop_back();
+    }
 }
 
 const char* ImGui::GetStyleColorName(ImGuiCol idx)
diff --git a/imgui.h b/imgui.h
index a2dbaa0..2ed820f 100644
--- a/imgui.h
+++ b/imgui.h
@@ -172,10 +172,10 @@
     IMGUI_API void          PushAllowKeyboardFocus(bool v);                                     // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets.
     IMGUI_API void          PopAllowKeyboardFocus();
     IMGUI_API void          PushStyleColor(ImGuiCol idx, const ImVec4& col);
-    IMGUI_API void          PopStyleColor();
+    IMGUI_API void          PopStyleColor(int count = 1);
     IMGUI_API void          PushStyleVar(ImGuiStyleVar idx, float val);
     IMGUI_API void          PushStyleVar(ImGuiStyleVar idx, const ImVec2& val);
-    IMGUI_API void          PopStyleVar();
+    IMGUI_API void          PopStyleVar(int count = 1);
     IMGUI_API void          PushTextWrapPos(float wrap_pos_x = 0.0f);                           // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space.
     IMGUI_API void          PopTextWrapPos();