-
Автор темы
- #1
рисую кастомный слайдер через имгуи, и появилась проблема с нажатиями.
Когда я нажимаю на какую то часть слайдера, то текущее значение становится не туда где стоит курсор, а смещается влево
Когда я нажимаю на какую то часть слайдера, то текущее значение становится не туда где стоит курсор, а смещается влево
C++:
void Slider(float pos_x, float pos_y, float size_x, float size_y, int *v, int v_max, ImDrawList *draw)
{
float size_step = size_x / v_max;
ImVec2 curpos = ImGui::GetMousePos();
status_lbutton = (GetKeyState(VK_LBUTTON) & 0x100) != 0 ? true : false;
if (curpos.x >= pos_x && curpos.x <= pos_x + size_x && curpos.y >= pos_y && curpos.y <= pos_y + size_y && status_lbutton)
is_slider_selected = true;
if (!status_lbutton && is_slider_selected)
is_slider_selected = false;
if (is_slider_selected)
{
*v = abs(curpos.x - pos_x) * size_step;
}
if (*v < NULL)
*v = NULL;
if (*v > v_max)
*v = v_max;
float dest_fill = pos_x + (*v * size_step);
ImRect rectangle(ImVec2(pos_x, pos_y), ImVec2(pos_x + size_x, pos_y + size_y));
ImU32 colorbar = ImGui::GetColorU32(ImVec4(convertRGBtoFloat(105), convertRGBtoFloat(105), convertRGBtoFloat(105), convertRGBtoFloat(255)));
ImU32 colorfill = ImGui::GetColorU32(ImVec4(convertRGBtoFloat(255), convertRGBtoFloat(222), convertRGBtoFloat(0), convertRGBtoFloat(255)));
draw->AddRectFilled(rectangle.Min, rectangle.Max, colorbar, 20.0f);
draw->AddRectFilled(rectangle.Min, ImVec2(dest_fill, rectangle.Max.y), colorfill, 20.0f);
}