ソースを参照

Fix 2d view grid

luboslenco 7 ヶ月 前
コミット
c818946584
3 ファイル変更21 行追加15 行削除
  1. 1 0
      base/sources/base.ts
  2. 6 7
      base/sources/ui_nodes.ts
  3. 14 8
      base/sources/ui_view2d.ts

+ 1 - 0
base/sources/base.ts

@@ -291,6 +291,7 @@ function base_resize() {
 	}
 
 	ui_nodes_grid_redraw = true;
+	ui_view2d_grid_redraw = true;
 
 	base_redraw_ui();
 }

+ 6 - 7
base/sources/ui_nodes.ts

@@ -696,10 +696,7 @@ function ui_nodes_get_node_y(): i32 {
 	return math_floor((mouse_y - ui_nodes_wy - ui_nodes_PAN_Y()) / ui_nodes_SCALE());
 }
 
-function ui_nodes_draw_grid() {
-	let ui_nodes: ui_nodes_t = ui_nodes_get_nodes();
-	let zoom: f32 = ui_nodes.zoom;
-
+function ui_nodes_draw_grid(zoom: f32): image_t {
 	let ww: i32 = config_raw.layout[layout_size_t.NODES_W];
 
 	///if (is_paint || is_sculpt)
@@ -720,8 +717,8 @@ function ui_nodes_draw_grid() {
 		h = 1;
 	}
 
-	ui_nodes_grid = image_create_render_target(w, h);
-	g2_begin(ui_nodes_grid);
+	let grid: image_t = image_create_render_target(w, h);
+	g2_begin(grid);
 	g2_clear(ui_nodes_ui.ops.theme.SEPARATOR_COL);
 
 	let sep_col: i32 = ui_nodes_ui.ops.theme.SEPARATOR_COL;
@@ -754,6 +751,7 @@ function ui_nodes_draw_grid() {
 	}
 
 	g2_end();
+	return grid;
 }
 
 let _ui_nodes_render_tmp: (col: i32)=>void;
@@ -841,7 +839,8 @@ function ui_nodes_render() {
 		if (ui_nodes_grid != null) {
 			image_unload(ui_nodes_grid);
 		}
-		ui_nodes_draw_grid();
+		let ui_nodes: ui_nodes_t = ui_nodes_get_nodes();
+		ui_nodes_grid = ui_nodes_draw_grid(ui_nodes.zoom);
 		ui_nodes_grid_redraw = false;
 	}
 

+ 14 - 8
base/sources/ui_view2d.ts

@@ -27,6 +27,8 @@ let _ui_view2d_render_x: f32;
 let _ui_view2d_render_y: f32;
 let _ui_view2d_render_tw: f32;
 let _ui_view2d_render_th: f32;
+let ui_view2d_grid: image_t = null;
+let ui_view2d_grid_redraw: bool = true;
 
 function ui_view2d_init() {
 	///if (is_paint || is_sculpt)
@@ -90,8 +92,12 @@ function ui_view2d_render() {
 	g2_end();
 
 	// Cache grid
-	if (ui_nodes_grid == null) {
-		ui_nodes_draw_grid();
+	if (ui_view2d_grid_redraw) {
+		if (ui_view2d_grid != null) {
+			image_unload(ui_view2d_grid);
+		}
+		ui_view2d_grid = ui_nodes_draw_grid(ui_view2d_pan_scale);
+		ui_view2d_grid_redraw = false;
 	}
 
 	// Ensure UV map is drawn
@@ -127,11 +133,10 @@ function ui_view2d_render() {
 
 		// Grid
 		g2_set_color(0xffffffff);
-		let ix: i32 = ui_view2d_pan_x * ui_view2d_pan_scale;
-		let iy: i32 = ui_view2d_pan_y * ui_view2d_pan_scale;
-		let gx: i32 = ix % 100 - 100;
-		let gy: i32 = iy % 100 - 100;
-		g2_draw_image(ui_nodes_grid, gx, gy);
+		let step: f32 = ui_nodes_grid_cell_w * ui_view2d_pan_scale;
+		let x: f32 = math_fmod(ui_view2d_pan_x, step) - step;
+		let y: f32 = math_fmod(ui_view2d_pan_y, step) - step;
+		g2_draw_image(ui_view2d_grid, x, y);
 
 		// Texture
 		let tex: image_t = null;
@@ -445,7 +450,7 @@ function ui_view2d_update() {
 	ui_view2d_pan_x += control.pan_x;
 	ui_view2d_pan_y += control.pan_y;
 	ui_view2d_controls_down = control.controls_down;
-	if (control.zoom != 0) {
+	if (control.zoom != 0.0) {
 		let _pan_x: f32 = ui_view2d_pan_x / ui_view2d_pan_scale;
 		let _pan_y: f32 = ui_view2d_pan_y / ui_view2d_pan_scale;
 		ui_view2d_pan_scale += control.zoom;
@@ -463,6 +468,7 @@ function ui_view2d_update() {
 			ui_view2d_pan_x -= (ui_view2d_ui.input_x - ui_view2d_ui._window_x - ui_view2d_ui._window_w / 2) * control.zoom;
 			ui_view2d_pan_y -= (ui_view2d_ui.input_y - ui_view2d_ui._window_y - ui_view2d_ui._window_h / 2) * control.zoom;
 		}
+		ui_view2d_grid_redraw = true;
 	}
 
 	///if (is_paint || is_sculpt)