Columns: Moved BeginColumns/EndColumns/flags from #913 to imgui_internals.h + minor shallow tweaks. Removed demo code temporarily. (#125)
diff --git a/imgui.cpp b/imgui.cpp
index 8e774ab..fbaf080 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -9928,15 +9928,13 @@
     return window->DC.ColumnsCount;
 }
 
-static float OffsetNormToPixels(float offsetNorm)
+static float OffsetNormToPixels(ImGuiWindow* window, float offset_norm)
 {
-    ImGuiWindow* window = ImGui::GetCurrentWindowRead();
-    return offsetNorm * (window->DC.ColumnsMaxX - window->DC.ColumnsMinX);
+    return offset_norm * (window->DC.ColumnsMaxX - window->DC.ColumnsMinX);
 }
 
-static float PixelsToOffsetNorm(float offset)
+static float PixelsToOffsetNorm(ImGuiWindow* window, float offset)
 {
-    ImGuiWindow* window = ImGui::GetCurrentWindowRead();
     return (offset - window->DC.ColumnsMinX) / (window->DC.ColumnsMaxX - window->DC.ColumnsMinX);
 }
 
@@ -9986,18 +9984,18 @@
 
     IM_ASSERT(column_index < window->DC.ColumnsData.Size);
 
-    const bool preserveWidth = !(window->DC.ColumnsFlags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < window->DC.ColumnsCount-1);
-    const float width = preserveWidth ? GetColumnWidth(column_index) : 0.0f;
+    const bool preserve_width = !(window->DC.ColumnsFlags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < window->DC.ColumnsCount-1);
+    const float width = preserve_width ? GetColumnWidth(column_index) : 0.0f;
 
     if (!(window->DC.ColumnsFlags & ImGuiColumnsFlags_NoForceWithinWindow))
         offset = ImMin((float)(int)offset, window->DC.ColumnsMaxX - g.Style.ColumnsMinSpacing * (window->DC.ColumnsCount - column_index));
-    const float offsetNorm = PixelsToOffsetNorm(offset);
+    const float offset_norm = PixelsToOffsetNorm(window, offset);
 
     const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(column_index);
-    window->DC.StateStorage->SetFloat(column_id, offsetNorm);
-    window->DC.ColumnsData[column_index].OffsetNorm = offsetNorm;
+    window->DC.StateStorage->SetFloat(column_id, offset_norm);
+    window->DC.ColumnsData[column_index].OffsetNorm = offset_norm;
 
-    if (preserveWidth)
+    if (preserve_width)
         SetColumnOffset(column_index+1, offset + ImMax(g.Style.ColumnsMinSpacing, width));
 }
 
@@ -10007,7 +10005,7 @@
     if (column_index < 0)
         column_index = window->DC.ColumnsCurrent;
 
-    return OffsetNormToPixels(window->DC.ColumnsData[column_index+1].OffsetNorm - window->DC.ColumnsData[column_index].OffsetNorm);
+    return OffsetNormToPixels(window, window->DC.ColumnsData[column_index+1].OffsetNorm - window->DC.ColumnsData[column_index].OffsetNorm);
 }
 
 void ImGui::SetColumnWidth(int column_index, float width)
@@ -10066,7 +10064,7 @@
         const float default_t = column_index / (float)window->DC.ColumnsCount;
         float t = window->DC.StateStorage->GetFloat(column_id, default_t);      // Cheaply store our floating point value inside the integer (could store a union into the map?)
         if (!(window->DC.ColumnsFlags & ImGuiColumnsFlags_NoForceWithinWindow))
-            t = ImMin(t, PixelsToOffsetNorm(window->DC.ColumnsMaxX - g.Style.ColumnsMinSpacing * (window->DC.ColumnsCount - column_index)));
+            t = ImMin(t, PixelsToOffsetNorm(window, window->DC.ColumnsMaxX - g.Style.ColumnsMinSpacing * (window->DC.ColumnsCount - column_index)));
         window->DC.ColumnsData[column_index].OffsetNorm = t;
     }
     window->DrawList->ChannelsSplit(window->DC.ColumnsCount);
@@ -10098,7 +10096,7 @@
 		{
 			float x = window->Pos.x + GetColumnOffset(i);
 			const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(i);
-            const float column_w = 4.0f;
+            const float column_w = 4.0f; // Width for interaction
             const ImRect column_rect(ImVec2(x - column_w, y1), ImVec2(x + column_w, y2));
 			if (IsClippedEx(column_rect, &column_id, false))
 				continue;
diff --git a/imgui.h b/imgui.h
index 8c6687a..4fc0a9f 100644
--- a/imgui.h
+++ b/imgui.h
@@ -231,9 +231,8 @@
     IMGUI_API float         GetItemsLineHeightWithSpacing();                                    // distance (in pixels) between 2 consecutive lines of standard height widgets == GetWindowFontSize() + GetStyle().FramePadding.y*2 + GetStyle().ItemSpacing.y
 
     // Columns
-    // You can also use SameLine(pos_x) for simplified columning. The columns API is still work-in-progress and rather lacking.
-    IMGUI_API void          BeginColumns(const char* id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
-    IMGUI_API void          EndColumns();                                                        // close columns
+    // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking.
+    IMGUI_API void          Columns(int count = 1, const char* id = NULL, bool border = true);
     IMGUI_API void          NextColumn();                                                        // next column, defaults to current row or next row if the current row is finished
     IMGUI_API int           GetColumnIndex();                                                    // get current column index
     IMGUI_API float         GetColumnWidth(int column_index = -1);                               // get column width (in pixels). pass -1 to use current column
@@ -241,7 +240,6 @@
     IMGUI_API float         GetColumnOffset(int column_index = -1);                              // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is usually 0.0f and not resizable unless you call this
     IMGUI_API void          SetColumnOffset(int column_index, float offset_x);                   // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column
     IMGUI_API int           GetColumnsCount();
-    IMGUI_API void          Columns(int count = 1, const char* id = NULL, bool border = true);
 
     // ID scopes
     // If you are creating widgets in a loop you most likely want to push a unique identifier so ImGui can differentiate them.
@@ -524,15 +522,6 @@
     ImGuiWindowFlags_ChildMenu              = 1 << 27   // Don't use! For internal use by BeginMenu()
 };
 
-// Flags for ImGui::Columns()
-enum ImGuiColumnsFlags_
-{
-    // Default: 0
-    ImGuiColumnsFlags_NoBorder               = 1 << 0,   // Disable column dividers
-    ImGuiColumnsFlags_NoPreserveWidths       = 1 << 1,   // Disable column width preservation when adjusting columns
-    ImGuiColumnsFlags_NoForceWithinWindow    = 1 << 2    // Disable forcing columns to fit within window
-};
-
 // Flags for ImGui::InputText()
 enum ImGuiInputTextFlags_
 {
diff --git a/imgui_demo.cpp b/imgui_demo.cpp
index 862e553..4b901ac 100644
--- a/imgui_demo.cpp
+++ b/imgui_demo.cpp
@@ -1553,49 +1553,6 @@
         }
         */
 
-        if (ImGui::TreeNode("Advanced settings"))
-        {
-            static bool border = true;
-            static bool preserveWidths = true;
-            static bool forceWithinWindow = true;
-
-            ImGui::Checkbox("Border", &border);
-            ImGui::SameLine();
-            ImGui::Checkbox("Preserve widths", &preserveWidths);
-            ImGui::SameLine();
-            ImGui::Checkbox("Force within window", &forceWithinWindow);
-
-            ImGuiColumnsFlags flags = 0;
-            flags |= (border ? 0 : ImGuiColumnsFlags_NoBorder);
-            flags |= (preserveWidths ? 0 : ImGuiColumnsFlags_NoPreserveWidths);
-            flags |= (forceWithinWindow ? 0 : ImGuiColumnsFlags_NoForceWithinWindow);
-
-            ImGui::BeginColumns("AdvancedColumns", 4, flags);
-            ImGui::Separator();
-            ImGui::Text("ID"); ImGui::NextColumn();
-            ImGui::Text("Name"); ImGui::NextColumn();
-            ImGui::Text("Path"); ImGui::NextColumn();
-            ImGui::Text("Flags"); ImGui::NextColumn();
-            ImGui::Separator();
-            const char* names[3] = { "One", "Two", "Three" };
-            const char* paths[3] = { "/path/one", "/path/two", "/path/three" };
-            static int selected = -1;
-            for (int i = 0; i < 3; i++)
-            {
-                char label[32];
-                sprintf(label, "%04d", i);
-                if (ImGui::Selectable(label, selected == i, ImGuiSelectableFlags_SpanAllColumns))
-                    selected = i;
-                ImGui::NextColumn();
-                ImGui::Text(names[i]); ImGui::NextColumn();
-                ImGui::Text(paths[i]); ImGui::NextColumn();
-                ImGui::Text("...."); ImGui::NextColumn();
-            }
-            ImGui::EndColumns();
-            ImGui::Separator();
-            ImGui::TreePop();
-        }
-
         // Create multiple items in a same cell before switching to next column
         if (ImGui::TreeNode("Mixed items"))
         {
diff --git a/imgui_internal.h b/imgui_internal.h
index e83ebbe..7d7f3fa 100644
--- a/imgui_internal.h
+++ b/imgui_internal.h
@@ -183,6 +183,14 @@
     ImGuiSliderFlags_Vertical               = 1 << 0
 };
 
+enum ImGuiColumnsFlags_
+{
+    // Default: 0
+    ImGuiColumnsFlags_NoBorder              = 1 << 0,   // Disable column dividers
+    ImGuiColumnsFlags_NoPreserveWidths      = 1 << 1,   // Disable column width preservation when adjusting columns
+    ImGuiColumnsFlags_NoForceWithinWindow   = 1 << 2    // Disable forcing columns to fit within window
+};
+
 enum ImGuiSelectableFlagsPrivate_
 {
     // NB: need to be in sync with last value of ImGuiSelectableFlags_
@@ -598,7 +606,7 @@
     float                   ColumnsStartPosY;
     float                   ColumnsCellMinY;
     float                   ColumnsCellMaxY;
-    ImGuiColumnsFlags        ColumnsFlags;
+    ImGuiColumnsFlags       ColumnsFlags;
     ImGuiID                 ColumnsSetId;
     ImVector<ImGuiColumnData> ColumnsData;
 
@@ -748,6 +756,10 @@
     IMGUI_API void          OpenPopupEx(ImGuiID id, bool reopen_existing);
     IMGUI_API bool          IsPopupOpen(ImGuiID id);
 
+    // New Columns API
+    IMGUI_API void          BeginColumns(const char* id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
+    IMGUI_API void          EndColumns();                                                         // close columns
+
     // NB: All position are in absolute pixels coordinates (never using window coordinates internally)
     // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT.
     IMGUI_API void          RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);