mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Merge branch 'master' into docking
# Conflicts: # backends/imgui_impl_glfw.cpp # backends/imgui_impl_sdl.cpp # backends/imgui_impl_win32.cpp # imgui.cpp
This commit is contained in:
		| @@ -4786,24 +4786,24 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag | ||||
|     // If we're not showing any slider there's no point in doing any HSV conversions | ||||
|     const ImGuiColorEditFlags flags_untouched = flags; | ||||
|     if (flags & ImGuiColorEditFlags_NoInputs) | ||||
|         flags = (flags & (~ImGuiColorEditFlags__DisplayMask)) | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_NoOptions; | ||||
|         flags = (flags & (~ImGuiColorEditFlags_DisplayMask_)) | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_NoOptions; | ||||
|  | ||||
|     // Context menu: display and modify options (before defaults are applied) | ||||
|     if (!(flags & ImGuiColorEditFlags_NoOptions)) | ||||
|         ColorEditOptionsPopup(col, flags); | ||||
|  | ||||
|     // Read stored options | ||||
|     if (!(flags & ImGuiColorEditFlags__DisplayMask)) | ||||
|         flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DisplayMask); | ||||
|     if (!(flags & ImGuiColorEditFlags__DataTypeMask)) | ||||
|         flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DataTypeMask); | ||||
|     if (!(flags & ImGuiColorEditFlags__PickerMask)) | ||||
|         flags |= (g.ColorEditOptions & ImGuiColorEditFlags__PickerMask); | ||||
|     if (!(flags & ImGuiColorEditFlags__InputMask)) | ||||
|         flags |= (g.ColorEditOptions & ImGuiColorEditFlags__InputMask); | ||||
|     flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask)); | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask)); // Check that only 1 is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));   // Check that only 1 is selected | ||||
|     if (!(flags & ImGuiColorEditFlags_DisplayMask_)) | ||||
|         flags |= (g.ColorEditOptions & ImGuiColorEditFlags_DisplayMask_); | ||||
|     if (!(flags & ImGuiColorEditFlags_DataTypeMask_)) | ||||
|         flags |= (g.ColorEditOptions & ImGuiColorEditFlags_DataTypeMask_); | ||||
|     if (!(flags & ImGuiColorEditFlags_PickerMask_)) | ||||
|         flags |= (g.ColorEditOptions & ImGuiColorEditFlags_PickerMask_); | ||||
|     if (!(flags & ImGuiColorEditFlags_InputMask_)) | ||||
|         flags |= (g.ColorEditOptions & ImGuiColorEditFlags_InputMask_); | ||||
|     flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags_DisplayMask_ | ImGuiColorEditFlags_DataTypeMask_ | ImGuiColorEditFlags_PickerMask_ | ImGuiColorEditFlags_InputMask_)); | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_DisplayMask_)); // Check that only 1 is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_InputMask_));   // Check that only 1 is selected | ||||
|  | ||||
|     const bool alpha = (flags & ImGuiColorEditFlags_NoAlpha) == 0; | ||||
|     const bool hdr = (flags & ImGuiColorEditFlags_HDR) != 0; | ||||
| @@ -4932,8 +4932,8 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag | ||||
|                 TextEx(label, label_display_end); | ||||
|                 Spacing(); | ||||
|             } | ||||
|             ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar; | ||||
|             ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf; | ||||
|             ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags_DataTypeMask_ | ImGuiColorEditFlags_PickerMask_ | ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar; | ||||
|             ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags_DisplayMask_ | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf; | ||||
|             SetNextItemWidth(square_sz * 12.0f); // Use 256 + bar sizes? | ||||
|             value_changed |= ColorPicker4("##picker", col, picker_flags, &g.ColorPickerRef.x); | ||||
|             EndPopup(); | ||||
| @@ -5053,12 +5053,12 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | ||||
|         ColorPickerOptionsPopup(col, flags); | ||||
|  | ||||
|     // Read stored options | ||||
|     if (!(flags & ImGuiColorEditFlags__PickerMask)) | ||||
|         flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__PickerMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__PickerMask; | ||||
|     if (!(flags & ImGuiColorEditFlags__InputMask)) | ||||
|         flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__InputMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__InputMask; | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask)); // Check that only 1 is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));  // Check that only 1 is selected | ||||
|     if (!(flags & ImGuiColorEditFlags_PickerMask_)) | ||||
|         flags |= ((g.ColorEditOptions & ImGuiColorEditFlags_PickerMask_) ? g.ColorEditOptions : ImGuiColorEditFlags_DefaultOptions_) & ImGuiColorEditFlags_PickerMask_; | ||||
|     if (!(flags & ImGuiColorEditFlags_InputMask_)) | ||||
|         flags |= ((g.ColorEditOptions & ImGuiColorEditFlags_InputMask_) ? g.ColorEditOptions : ImGuiColorEditFlags_DefaultOptions_) & ImGuiColorEditFlags_InputMask_; | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_PickerMask_)); // Check that only 1 is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_InputMask_));  // Check that only 1 is selected | ||||
|     if (!(flags & ImGuiColorEditFlags_NoOptions)) | ||||
|         flags |= (g.ColorEditOptions & ImGuiColorEditFlags_AlphaBar); | ||||
|  | ||||
| @@ -5204,7 +5204,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | ||||
|         if ((flags & ImGuiColorEditFlags_NoLabel)) | ||||
|             Text("Current"); | ||||
|  | ||||
|         ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_NoTooltip; | ||||
|         ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_NoTooltip; | ||||
|         ColorButton("##current", col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2)); | ||||
|         if (ref_col != NULL) | ||||
|         { | ||||
| @@ -5243,9 +5243,9 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | ||||
|     if ((flags & ImGuiColorEditFlags_NoInputs) == 0) | ||||
|     { | ||||
|         PushItemWidth((alpha_bar ? bar1_pos_x : bar0_pos_x) + bars_width - picker_pos.x); | ||||
|         ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf; | ||||
|         ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags_DataTypeMask_ | ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf; | ||||
|         ImGuiColorEditFlags sub_flags = (flags & sub_flags_to_forward) | ImGuiColorEditFlags_NoPicker; | ||||
|         if (flags & ImGuiColorEditFlags_DisplayRGB || (flags & ImGuiColorEditFlags__DisplayMask) == 0) | ||||
|         if (flags & ImGuiColorEditFlags_DisplayRGB || (flags & ImGuiColorEditFlags_DisplayMask_) == 0) | ||||
|             if (ColorEdit4("##rgb", col, sub_flags | ImGuiColorEditFlags_DisplayRGB)) | ||||
|             { | ||||
|                 // FIXME: Hackily differentiating using the DragInt (ActiveId != 0 && !ActiveIdAllowOverlap) vs. using the InputText or DropTarget. | ||||
| @@ -5253,9 +5253,9 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | ||||
|                 value_changed_fix_hue_wrap = (g.ActiveId != 0 && !g.ActiveIdAllowOverlap); | ||||
|                 value_changed = true; | ||||
|             } | ||||
|         if (flags & ImGuiColorEditFlags_DisplayHSV || (flags & ImGuiColorEditFlags__DisplayMask) == 0) | ||||
|         if (flags & ImGuiColorEditFlags_DisplayHSV || (flags & ImGuiColorEditFlags_DisplayMask_) == 0) | ||||
|             value_changed |= ColorEdit4("##hsv", col, sub_flags | ImGuiColorEditFlags_DisplayHSV); | ||||
|         if (flags & ImGuiColorEditFlags_DisplayHex || (flags & ImGuiColorEditFlags__DisplayMask) == 0) | ||||
|         if (flags & ImGuiColorEditFlags_DisplayHex || (flags & ImGuiColorEditFlags_DisplayMask_) == 0) | ||||
|             value_changed |= ColorEdit4("##hex", col, sub_flags | ImGuiColorEditFlags_DisplayHex); | ||||
|         PopItemWidth(); | ||||
|     } | ||||
| @@ -5485,7 +5485,7 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl | ||||
|  | ||||
|     // Tooltip | ||||
|     if (!(flags & ImGuiColorEditFlags_NoTooltip) && hovered) | ||||
|         ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)); | ||||
|         ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)); | ||||
|  | ||||
|     return pressed; | ||||
| } | ||||
| @@ -5494,18 +5494,18 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl | ||||
| void ImGui::SetColorEditOptions(ImGuiColorEditFlags flags) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     if ((flags & ImGuiColorEditFlags__DisplayMask) == 0) | ||||
|         flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DisplayMask; | ||||
|     if ((flags & ImGuiColorEditFlags__DataTypeMask) == 0) | ||||
|         flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DataTypeMask; | ||||
|     if ((flags & ImGuiColorEditFlags__PickerMask) == 0) | ||||
|         flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__PickerMask; | ||||
|     if ((flags & ImGuiColorEditFlags__InputMask) == 0) | ||||
|         flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__InputMask; | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask));    // Check only 1 option is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DataTypeMask));   // Check only 1 option is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask));     // Check only 1 option is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));      // Check only 1 option is selected | ||||
|     if ((flags & ImGuiColorEditFlags_DisplayMask_) == 0) | ||||
|         flags |= ImGuiColorEditFlags_DefaultOptions_ & ImGuiColorEditFlags_DisplayMask_; | ||||
|     if ((flags & ImGuiColorEditFlags_DataTypeMask_) == 0) | ||||
|         flags |= ImGuiColorEditFlags_DefaultOptions_ & ImGuiColorEditFlags_DataTypeMask_; | ||||
|     if ((flags & ImGuiColorEditFlags_PickerMask_) == 0) | ||||
|         flags |= ImGuiColorEditFlags_DefaultOptions_ & ImGuiColorEditFlags_PickerMask_; | ||||
|     if ((flags & ImGuiColorEditFlags_InputMask_) == 0) | ||||
|         flags |= ImGuiColorEditFlags_DefaultOptions_ & ImGuiColorEditFlags_InputMask_; | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_DisplayMask_));    // Check only 1 option is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_DataTypeMask_));   // Check only 1 option is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_PickerMask_));     // Check only 1 option is selected | ||||
|     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_InputMask_));      // Check only 1 option is selected | ||||
|     g.ColorEditOptions = flags; | ||||
| } | ||||
|  | ||||
| @@ -5525,9 +5525,9 @@ void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags | ||||
|     ImVec2 sz(g.FontSize * 3 + g.Style.FramePadding.y * 2, g.FontSize * 3 + g.Style.FramePadding.y * 2); | ||||
|     ImVec4 cf(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]); | ||||
|     int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]); | ||||
|     ColorButton("##preview", cf, (flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz); | ||||
|     ColorButton("##preview", cf, (flags & (ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz); | ||||
|     SameLine(); | ||||
|     if ((flags & ImGuiColorEditFlags_InputRGB) || !(flags & ImGuiColorEditFlags__InputMask)) | ||||
|     if ((flags & ImGuiColorEditFlags_InputRGB) || !(flags & ImGuiColorEditFlags_InputMask_)) | ||||
|     { | ||||
|         if (flags & ImGuiColorEditFlags_NoAlpha) | ||||
|             Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]); | ||||
| @@ -5546,23 +5546,23 @@ void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags | ||||
|  | ||||
| void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags) | ||||
| { | ||||
|     bool allow_opt_inputs = !(flags & ImGuiColorEditFlags__DisplayMask); | ||||
|     bool allow_opt_datatype = !(flags & ImGuiColorEditFlags__DataTypeMask); | ||||
|     bool allow_opt_inputs = !(flags & ImGuiColorEditFlags_DisplayMask_); | ||||
|     bool allow_opt_datatype = !(flags & ImGuiColorEditFlags_DataTypeMask_); | ||||
|     if ((!allow_opt_inputs && !allow_opt_datatype) || !BeginPopup("context")) | ||||
|         return; | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImGuiColorEditFlags opts = g.ColorEditOptions; | ||||
|     if (allow_opt_inputs) | ||||
|     { | ||||
|         if (RadioButton("RGB", (opts & ImGuiColorEditFlags_DisplayRGB) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayRGB; | ||||
|         if (RadioButton("HSV", (opts & ImGuiColorEditFlags_DisplayHSV) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHSV; | ||||
|         if (RadioButton("Hex", (opts & ImGuiColorEditFlags_DisplayHex) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHex; | ||||
|         if (RadioButton("RGB", (opts & ImGuiColorEditFlags_DisplayRGB) != 0)) opts = (opts & ~ImGuiColorEditFlags_DisplayMask_) | ImGuiColorEditFlags_DisplayRGB; | ||||
|         if (RadioButton("HSV", (opts & ImGuiColorEditFlags_DisplayHSV) != 0)) opts = (opts & ~ImGuiColorEditFlags_DisplayMask_) | ImGuiColorEditFlags_DisplayHSV; | ||||
|         if (RadioButton("Hex", (opts & ImGuiColorEditFlags_DisplayHex) != 0)) opts = (opts & ~ImGuiColorEditFlags_DisplayMask_) | ImGuiColorEditFlags_DisplayHex; | ||||
|     } | ||||
|     if (allow_opt_datatype) | ||||
|     { | ||||
|         if (allow_opt_inputs) Separator(); | ||||
|         if (RadioButton("0..255",     (opts & ImGuiColorEditFlags_Uint8) != 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Uint8; | ||||
|         if (RadioButton("0.00..1.00", (opts & ImGuiColorEditFlags_Float) != 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Float; | ||||
|         if (RadioButton("0..255",     (opts & ImGuiColorEditFlags_Uint8) != 0)) opts = (opts & ~ImGuiColorEditFlags_DataTypeMask_) | ImGuiColorEditFlags_Uint8; | ||||
|         if (RadioButton("0.00..1.00", (opts & ImGuiColorEditFlags_Float) != 0)) opts = (opts & ~ImGuiColorEditFlags_DataTypeMask_) | ImGuiColorEditFlags_Float; | ||||
|     } | ||||
|  | ||||
|     if (allow_opt_inputs || allow_opt_datatype) | ||||
| @@ -5597,7 +5597,7 @@ void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags) | ||||
|  | ||||
| void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags) | ||||
| { | ||||
|     bool allow_opt_picker = !(flags & ImGuiColorEditFlags__PickerMask); | ||||
|     bool allow_opt_picker = !(flags & ImGuiColorEditFlags_PickerMask_); | ||||
|     bool allow_opt_alpha_bar = !(flags & ImGuiColorEditFlags_NoAlpha) && !(flags & ImGuiColorEditFlags_AlphaBar); | ||||
|     if ((!allow_opt_picker && !allow_opt_alpha_bar) || !BeginPopup("context")) | ||||
|         return; | ||||
| @@ -5616,7 +5616,7 @@ void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags fl | ||||
|             if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel; | ||||
|             ImVec2 backup_pos = GetCursorScreenPos(); | ||||
|             if (Selectable("##selectable", false, 0, picker_size)) // By default, Selectable() is closing popup | ||||
|                 g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask); | ||||
|                 g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags_PickerMask_) | (picker_flags & ImGuiColorEditFlags_PickerMask_); | ||||
|             SetCursorScreenPos(backup_pos); | ||||
|             ImVec4 previewing_ref_col; | ||||
|             memcpy(&previewing_ref_col, ref_col, sizeof(float) * ((picker_flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4)); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user