|
@@ -846,7 +846,7 @@ bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const I
|
|
|
|
|
|
// Default to using texture ID as ID. User can still push string/integer prefixes.
|
|
|
// We could hash the size/uv to create a unique ID but that would prevent the user from animating UV.
|
|
|
- PushID((void*)user_texture_id);
|
|
|
+ PushID((void*)(intptr_t)user_texture_id);
|
|
|
const ImGuiID id = window->GetID("#image");
|
|
|
PopID();
|
|
|
|
|
@@ -1715,10 +1715,11 @@ template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE>
|
|
|
bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const TYPE v_min, const TYPE v_max, const char* format, float power)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
+ const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double);
|
|
|
+ const bool has_min_max = (v_min != v_max);
|
|
|
|
|
|
// Default tweak speed
|
|
|
- bool has_min_max = (v_min != v_max) && (v_max - v_max < FLT_MAX);
|
|
|
- if (v_speed == 0.0f && has_min_max)
|
|
|
+ if (v_speed == 0.0f && has_min_max && (v_max - v_min < FLT_MAX))
|
|
|
v_speed = (float)((v_max - v_min) * g.DragSpeedDefaultRatio);
|
|
|
|
|
|
// Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings
|
|
@@ -1727,14 +1728,14 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const
|
|
|
{
|
|
|
adjust_delta = g.IO.MouseDelta.x;
|
|
|
if (g.IO.KeyAlt)
|
|
|
- adjust_delta *= 1.0f/100.0f;
|
|
|
+ adjust_delta *= 1.0f / 100.0f;
|
|
|
if (g.IO.KeyShift)
|
|
|
adjust_delta *= 10.0f;
|
|
|
}
|
|
|
else if (g.ActiveIdSource == ImGuiInputSource_Nav)
|
|
|
{
|
|
|
- int decimal_precision = (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImParseFormatPrecision(format, 3) : 0;
|
|
|
- adjust_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard|ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 1.0f/10.0f, 10.0f).x;
|
|
|
+ int decimal_precision = is_decimal ? ImParseFormatPrecision(format, 3) : 0;
|
|
|
+ adjust_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 1.0f / 10.0f, 10.0f).x;
|
|
|
v_speed = ImMax(v_speed, GetMinimumStepAtDecimalPrecision(decimal_precision));
|
|
|
}
|
|
|
adjust_delta *= v_speed;
|
|
@@ -1760,7 +1761,7 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const
|
|
|
TYPE v_cur = *v;
|
|
|
FLOATTYPE v_old_ref_for_accum_remainder = (FLOATTYPE)0.0f;
|
|
|
|
|
|
- const bool is_power = (power != 1.0f && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) && has_min_max);
|
|
|
+ const bool is_power = (power != 1.0f && is_decimal && has_min_max && (v_max - v_min < FLT_MAX));
|
|
|
if (is_power)
|
|
|
{
|
|
|
// Offset + round to user desired precision, with a curve on the v_min..v_max range to get more precision on one side of the range
|
|
@@ -1793,12 +1794,12 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const
|
|
|
if (v_cur == (TYPE)-0)
|
|
|
v_cur = (TYPE)0;
|
|
|
|
|
|
- // Clamp values (handle overflow/wrap-around)
|
|
|
+ // Clamp values (+ handle overflow/wrap-around for integer types)
|
|
|
if (*v != v_cur && has_min_max)
|
|
|
{
|
|
|
- if (v_cur < v_min || (v_cur > *v && adjust_delta < 0.0f))
|
|
|
+ if (v_cur < v_min || (v_cur > *v && adjust_delta < 0.0f && !is_decimal))
|
|
|
v_cur = v_min;
|
|
|
- if (v_cur > v_max || (v_cur < *v && adjust_delta > 0.0f))
|
|
|
+ if (v_cur > v_max || (v_cur < *v && adjust_delta > 0.0f && !is_decimal))
|
|
|
v_cur = v_max;
|
|
|
}
|
|
|
|
|
@@ -2849,7 +2850,7 @@ static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* t
|
|
|
if (c == '\r')
|
|
|
continue;
|
|
|
|
|
|
- const float char_width = font->GetCharAdvance((unsigned short)c) * scale;
|
|
|
+ const float char_width = font->GetCharAdvance((ImWchar)c) * scale;
|
|
|
line_width += char_width;
|
|
|
}
|
|
|
|
|
@@ -3702,7 +3703,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
|
|
else
|
|
|
{
|
|
|
ImVec2 rect_size = InputTextCalcTextSizeW(p, text_selected_end, &p, NULL, true);
|
|
|
- if (rect_size.x <= 0.0f) rect_size.x = (float)(int)(g.Font->GetCharAdvance((unsigned short)' ') * 0.50f); // So we can see selected empty lines
|
|
|
+ if (rect_size.x <= 0.0f) rect_size.x = (float)(int)(g.Font->GetCharAdvance((ImWchar)' ') * 0.50f); // So we can see selected empty lines
|
|
|
ImRect rect(rect_pos + ImVec2(0.0f, bg_offy_up - g.FontSize), rect_pos +ImVec2(rect_size.x, bg_offy_dn));
|
|
|
rect.ClipWith(clip_rect);
|
|
|
if (rect.Overlaps(clip_rect))
|
|
@@ -3930,7 +3931,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
|
|
|
if (label != label_display_end)
|
|
|
{
|
|
|
TextUnformatted(label, label_display_end);
|
|
|
- Separator();
|
|
|
+ Spacing();
|
|
|
}
|
|
|
ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar;
|
|
|
ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags__InputsMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
|
|
@@ -5556,7 +5557,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
|
|
|
// Menu inside an horizontal menu bar
|
|
|
// Selectable extend their highlight by half ItemSpacing in each direction.
|
|
|
// For ChildMenu, the popup position will be overwritten by the call to FindBestWindowPosForPopup() in Begin()
|
|
|
- popup_pos = ImVec2(pos.x - window->WindowPadding.x, pos.y - style.FramePadding.y + window->MenuBarHeight());
|
|
|
+ popup_pos = ImVec2(pos.x - 1.0f - (float)(int)(style.ItemSpacing.x * 0.5f), pos.y - style.FramePadding.y + window->MenuBarHeight());
|
|
|
window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f);
|
|
|
PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing * 2.0f);
|
|
|
float w = label_size.x;
|