paint: draw fixes

This commit is contained in:
luboslenco
2026-06-09 09:20:42 +02:00
parent 41f5c24f14
commit bdbc97d7c7
+47 -49
View File
@@ -172,17 +172,17 @@ void ui_view2d_update(void *_) {
bool decal_mask = context_is_decal_mask_paint();
bool set_clone_source =
g_context->tool == TOOL_TYPE_CLONE &&
operator_shortcut(string("%s+%s", any_map_get(g_keymap, "set_clone_source"), any_map_get(g_keymap, "action_paint")), SHORTCUT_TYPE_DOWN);
g_context->tool == TOOL_TYPE_CLONE &&
operator_shortcut(string("%s+%s", any_map_get(g_keymap, "set_clone_source"), any_map_get(g_keymap, "action_paint")), SHORTCUT_TYPE_DOWN);
if (!g_ui->input_down) {
ui_view2d_layer_touched = false;
}
if (ui_view2d_type == VIEW_2D_TYPE_LAYER && !ui_view2d_text_input_hover &&
(operator_shortcut(any_map_get(g_keymap, "action_paint"), SHORTCUT_TYPE_DOWN) ||
operator_shortcut(string("%s+%s", any_map_get(g_keymap, "brush_ruler"), any_map_get(g_keymap, "action_paint")), SHORTCUT_TYPE_DOWN) || decal_mask ||
set_clone_source || g_config->brush_live)) {
(operator_shortcut(any_map_get(g_keymap, "action_paint"), SHORTCUT_TYPE_DOWN) ||
operator_shortcut(string("%s+%s", any_map_get(g_keymap, "brush_ruler"), any_map_get(g_keymap, "action_paint")), SHORTCUT_TYPE_DOWN) ||
decal_mask || set_clone_source || g_config->brush_live)) {
if (g_config->touch_ui) {
// Paint only when clicking on the layer rect
@@ -210,53 +210,51 @@ void ui_view2d_update(void *_) {
}
}
if (g_ui->is_typing) {
return;
}
if (!g_ui->is_typing) {
if (keyboard_started("left")) {
ui_view2d_pan_x -= 5;
}
else if (keyboard_started("right")) {
ui_view2d_pan_x += 5;
}
if (keyboard_started("up")) {
ui_view2d_pan_y -= 5;
}
else if (keyboard_started("down")) {
ui_view2d_pan_y += 5;
}
if (keyboard_started("left")) {
ui_view2d_pan_x -= 5;
}
else if (keyboard_started("right")) {
ui_view2d_pan_x += 5;
}
if (keyboard_started("up")) {
ui_view2d_pan_y -= 5;
}
else if (keyboard_started("down")) {
ui_view2d_pan_y += 5;
}
if (!g_context->paint2d && g_config->touch_ui && g_ui->input_down && ui_view2d_type != VIEW_2D_TYPE_UVMAP) {
ui_view2d_pan_x += g_ui->input_dx;
ui_view2d_pan_y += g_ui->input_dy;
}
if (!g_context->paint2d && g_config->touch_ui && g_ui->input_down && ui_view2d_type != VIEW_2D_TYPE_UVMAP) {
ui_view2d_pan_x += g_ui->input_dx;
ui_view2d_pan_y += g_ui->input_dy;
}
// Limit panning to keep texture in viewport
i32 border = 32;
f32 wm = fmin(ui_view2d_ww, ui_view2d_wh);
f32 tw = ui_view2d_ww * 0.9 * ui_view2d_pan_scale;
f32 tx = ui_view2d_ww / 2.0 - tw / 2.0 + ui_view2d_pan_x;
f32 hh = sys_h();
f32 ty = hh / 2.0 - tw / 2.0 + ui_view2d_pan_y;
// Limit panning to keep texture in viewport
i32 border = 32;
f32 wm = fmin(ui_view2d_ww, ui_view2d_wh);
f32 tw = ui_view2d_ww * 0.9 * ui_view2d_pan_scale;
f32 tx = ui_view2d_ww / 2.0 - tw / 2.0 + ui_view2d_pan_x;
f32 hh = sys_h();
f32 ty = hh / 2.0 - tw / 2.0 + ui_view2d_pan_y;
if (tx + border > ui_view2d_ww) {
ui_view2d_pan_x = ui_view2d_ww / 2.0 + tw / 2.0 - border;
}
else if (tx - border < -tw) {
ui_view2d_pan_x = -tw / 2.0 - ui_view2d_ww / 2.0 + border;
}
if (ty + border > hh) {
ui_view2d_pan_y = hh / 2.0 + tw / 2.0 - border;
}
else if (ty - border < -tw) {
ui_view2d_pan_y = -tw / 2.0 - hh / 2.0 + border;
}
if (tx + border > ui_view2d_ww) {
ui_view2d_pan_x = ui_view2d_ww / 2.0 + tw / 2.0 - border;
}
else if (tx - border < -tw) {
ui_view2d_pan_x = -tw / 2.0 - ui_view2d_ww / 2.0 + border;
}
if (ty + border > hh) {
ui_view2d_pan_y = hh / 2.0 + tw / 2.0 - border;
}
else if (ty - border < -tw) {
ui_view2d_pan_y = -tw / 2.0 - hh / 2.0 + border;
}
if (operator_shortcut(any_map_get(g_keymap, "view_reset"), SHORTCUT_TYPE_STARTED)) {
ui_view2d_pan_x = 0.0;
ui_view2d_pan_y = 0.0;
ui_view2d_pan_scale = 1.0;
if (operator_shortcut(any_map_get(g_keymap, "view_reset"), SHORTCUT_TYPE_STARTED)) {
ui_view2d_pan_x = 0.0;
ui_view2d_pan_y = 0.0;
ui_view2d_pan_scale = 1.0;
}
}
}
@@ -578,7 +576,7 @@ void ui_view2d_update(void *_) {
i32 scale_percent = math_round((tw / (float)tex->width) * 100);
h_zoom->f = scale_percent;
g_ui->_w = math_floor(ew + 3);
f32 new_percent = ui_slider(h_zoom, string("%d%%", scale_percent), 1, 100, true, 1, false, UI_ALIGN_LEFT, true);
f32 new_percent = ui_slider(h_zoom, string("%%", scale_percent), 1, 100, true, 1, true, UI_ALIGN_RIGHT, true);
if (h_zoom->changed) {
ui_view2d_pan_scale = new_percent / 100.0 * tex->width / (wm * 0.9);
ui_view2d_hwnd->redraws = 2;