Browse Source

ImColor::HSV() helper + color buttons demo

ocornut 10 năm trước cách đây
mục cha
commit
68bad703ee
2 tập tin đã thay đổi với 21 bổ sung5 xóa
  1. 13 0
      imgui.cpp
  2. 8 5
      imgui.h

+ 13 - 0
imgui.cpp

@@ -7808,6 +7808,19 @@ void ImGui::ShowTestWindow(bool* opened)
         ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();
         ImGui::RadioButton("radio c", &e, 2);
 
+        // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style.
+        for (int i = 0; i < 7; i++)
+        {
+            if (i > 0) ImGui::SameLine();
+            ImGui::PushID(i);
+            ImGui::PushStyleColor(ImGuiCol_Button, ImColor::HSV(i/7.0f, 0.6f, 0.6f));
+            ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImColor::HSV(i/7.0f, 0.7f, 0.7f));
+            ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImColor::HSV(i/7.0f, 0.8f, 0.8f));
+            ImGui::Button("Click");
+            ImGui::PopStyleColor(3);
+            ImGui::PopID();
+        }
+
         ImGui::Text("Hover me");
         if (ImGui::IsItemHovered())
             ImGui::SetTooltip("I am a tooltip");

+ 8 - 5
imgui.h

@@ -703,11 +703,14 @@ struct ImColor
 {
     ImVec4              Value;
 
-    ImColor(int r, int g, int b, int a = 255)           { Value.x = r / 255.0f; Value.y = g / 255.0f; Value.z = b / 255.0f; Value.w = a / 255.0f; }
-    ImColor(const ImVec4& col)                          { Value = col; }
-    ImColor(float r, float g, float b, float a = 1.0f)  { Value.x = r; Value.y = g; Value.z = b; Value.w = a; }
-    operator ImU32() const                              { return ImGui::ColorConvertFloat4ToU32(Value); }
-    operator ImVec4() const                             { return Value; }
+    ImColor(int r, int g, int b, int a = 255)                       { Value.x = r / 255.0f; Value.y = g / 255.0f; Value.z = b / 255.0f; Value.w = a / 255.0f; }
+    ImColor(float r, float g, float b, float a = 1.0f)              { Value.x = r; Value.y = g; Value.z = b; Value.w = a; }
+    ImColor(const ImVec4& col)                                      { Value = col; }
+
+    operator ImU32() const                                          { return ImGui::ColorConvertFloat4ToU32(Value); }
+    operator ImVec4() const                                         { return Value; }
+
+    static ImColor HSV(float h, float s, float v, float a = 1.0f)   { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); }
 };
 
 //-----------------------------------------------------------------------------