changeset 110:692733612332

Updates to use dw.Render_redraw() to trigger expose events.
author Brian Smith <brian@dbsoft.org>
date Thu, 11 Nov 2021 18:24:09 -0600
parents d121081ebf09
children a01a9f21ed83
files dwootest/dwootest.go dwtest/dwtest.go
diffstat 2 files changed, 58 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/dwootest/dwootest.go	Thu Nov 11 17:42:34 2021 -0600
+++ b/dwootest/dwootest.go	Thu Nov 11 18:24:09 2021 -0600
@@ -32,10 +32,13 @@
 var rows = 10
 var width1 = 6
 var cols = 80
-var render_type = 0
 var current_row = 0
 var current_col = 0
 var max_linewidth = 0
+var SHAPES_DOUBLE_BUFFERED = 0
+var SHAPES_DIRECT = 1
+var DRAW_FILE = 2
+var render_type = SHAPES_DOUBLE_BUFFERED
 
 // Page 4
 var mle_point = 0
@@ -146,10 +149,6 @@
 				hpm.DrawText(0, y, thisline[col:])
 			}
 		}
-		if hpma == dw.NOHPIXMAP {
-			text_expose(textbox1, text1pm)
-			text_expose(textbox2, text2pm)
-		}
 	}
 }
 
@@ -205,24 +204,34 @@
 			drawable.BitBltPixmap(image_x, image_y, image.GetWidth(), image.GetHeight(), image, 0, 0)
 		}
 	}
-
-	/* If we aren't drawing direct do a bitblt */
-	if direct == dw.FALSE && hpma == dw.NOHPIXMAP {
-		text_expose(textbox2, text2pm)
-	}
 }
 
 func update_render() {
 	switch render_type {
-	case 0:
+	case SHAPES_DOUBLE_BUFFERED:
 		draw_shapes(dw.FALSE, dw.NOHPIXMAP)
-	case 1:
+	case SHAPES_DIRECT:
 		draw_shapes(dw.TRUE, dw.NOHPIXMAP)
-	case 2:
+	case DRAW_FILE:
 		draw_file(current_row, current_col, rows, font_height, dw.NOHPIXMAP)
 	}
 }
 
+/* Request that the render widgets redraw...
+ * If not using direct rendering, call update_render() to
+ * redraw the in memory pixmaps. Then trigger the expose events.
+ * Expose will call update_render() to draw directly or bitblt the pixmaps.
+ */
+func render_draw() {
+	/* If we are double buffered, draw to the pixmaps */
+	if render_type != SHAPES_DIRECT {
+		update_render()
+	}
+	/* Trigger expose event */
+	textbox1.Redraw()
+	textbox2.Redraw()
+}
+
 func print_callback() {
 	print := dw.PrintNew("DWTest Job")
 	print.Connect(func(print dw.HPRINT, pixmap dw.HPIXMAP, page_num int) int {
@@ -281,7 +290,7 @@
 
 /* This gets called when a part of the graph needs to be repainted. */
 func text_expose(hwnd dw.HRENDER, hpm dw.HPIXMAP) int {
-	if render_type != 1 {
+	if render_type != SHAPES_DIRECT {
 		width := hpm.GetWidth()
 		height := hpm.GetHeight()
 
@@ -635,7 +644,7 @@
 			read_file()
 			current_col = 0
 			current_row = 0
-			update_render()
+			render_draw()
 			notification.ConnectClicked(func(notif dw.HNOTIFICATION) int {
 				fmt.Printf("Notification clicked\n")
 				return dw.TRUE
@@ -819,8 +828,8 @@
 		hscrollbar.SetRange(uint(max_linewidth), uint(cols))
 		vscrollbar.SetRange(uint(len(lines)), uint(rows))
 
-		/* Redraw the window */
-		update_render()
+		/* Redraw the render widgets */
+		render_draw()
 		return dw.TRUE
 	})
 	textbox2.ConnectMotion(func(window dw.HRENDER, x int, y int, buttonmask int) int {
@@ -834,13 +843,13 @@
 	hscrollbar.ConnectValueChanged(func(hwnd dw.HSCROLLBAR, value int) int {
 		current_col = value
 		status1.SetText(fmt.Sprintf("Row:%d Col:%d Lines:%d Cols:%d", current_row, current_col, len(lines), max_linewidth))
-		update_render()
+		render_draw()
 		return dw.FALSE
 	})
 	vscrollbar.ConnectValueChanged(func(hwnd dw.HSCROLLBAR, value int) int {
 		current_row = value
 		status1.SetText(fmt.Sprintf("Row:%d Col:%d Lines:%d Cols:%d", current_row, current_col, len(lines), max_linewidth))
-		update_render()
+		render_draw()
 		return dw.FALSE
 	})
 	imagestretchcheck.ConnectClicked(func(window dw.HBUTTON) int { update_render(); return dw.FALSE })
--- a/dwtest/dwtest.go	Thu Nov 11 17:42:34 2021 -0600
+++ b/dwtest/dwtest.go	Thu Nov 11 18:24:09 2021 -0600
@@ -47,10 +47,13 @@
 var rows = 10
 var width1 = 6
 var cols = 80
-var render_type = 0
 var current_row = 0
 var current_col = 0
 var max_linewidth = 0
+var SHAPES_DOUBLE_BUFFERED = 0
+var SHAPES_DIRECT = 1
+var DRAW_FILE = 2
+var render_type = SHAPES_DOUBLE_BUFFERED
 
 // Page 3
 var notebookbox3 dw.HBOX
@@ -230,7 +233,7 @@
 		read_file()
 		current_col = 0
 		current_row = 0
-		update_render()
+		render_draw()
 		dw.Signal_connect(notification, dw.SIGNAL_CLICKED, dw.SIGNAL_FUNC(notification_clicked_callback), nil)
 		dw.Notification_send(notification)
 	}
@@ -346,10 +349,6 @@
 				dw.Draw_text(dw.NOHWND, hpm, 0, y, thisline[col:])
 			}
 		}
-		if hpma == dw.NOHPIXMAP {
-			text_expose(textbox1, 0, 0, 0, 0, nil)
-			text_expose(textbox2, 0, 0, 0, 0, nil)
-		}
 	}
 }
 
@@ -407,24 +406,34 @@
 			dw.Pixmap_bitblt(window, pixmap, image_x, image_y, dw.Pixmap_width(image), dw.Pixmap_height(image), dw.NOHWND, image, 0, 0)
 		}
 	}
-
-	/* If we aren't drawing direct do a bitblt */
-	if direct == FALSE && hpma == dw.NOHPIXMAP {
-		text_expose(textbox2, 0, 0, 0, 0, nil)
-	}
 }
 
 func update_render() {
 	switch render_type {
-	case 0:
+	case SHAPES_DOUBLE_BUFFERED:
 		draw_shapes(FALSE, dw.NOHPIXMAP)
-	case 1:
+	case SHAPES_DIRECT:
 		draw_shapes(TRUE, dw.NOHPIXMAP)
-	case 2:
+	case DRAW_FILE:
 		draw_file(current_row, current_col, rows, font_height, dw.NOHPIXMAP)
 	}
 }
 
+/* Request that the render widgets redraw...
+ * If not using direct rendering, call update_render() to
+ * redraw the in memory pixmaps. Then trigger the expose events.
+ * Expose will call update_render() to draw directly or bitblt the pixmaps.
+ */
+func render_draw() {
+	/* If we are double buffered, draw to the pixmaps */
+	if render_type != SHAPES_DIRECT {
+		update_render()
+	}
+	/* Trigger expose event */
+	dw.Render_redraw(textbox1)
+	dw.Render_redraw(textbox2)
+}
+
 func draw_page(print dw.HPRINT, pixmap dw.HPIXMAP, page_num int, data dw.POINTER) int {
 	dw.Pixmap_set_font(pixmap, FIXEDFONT)
 	if page_num == 0 {
@@ -464,7 +473,7 @@
 
 /* This gets called when a part of the graph needs to be repainted. */
 func text_expose(hwnd dw.HRENDER, x int, y int, width int, height int, data dw.POINTER) int {
-	if render_type != 1 {
+	if render_type != SHAPES_DIRECT {
 		var hpm dw.HPIXMAP
 
 		if hwnd.GetHandle() == textbox1.GetHandle() {
@@ -511,19 +520,19 @@
 	dw.Scrollbar_set_range(hscrollbar, uint(max_linewidth), uint(cols))
 	dw.Scrollbar_set_range(vscrollbar, uint(len(lines)), uint(rows))
 
-	/* Redraw the window */
-	update_render()
+	/* Redraw the render widgets */
+	render_draw()
 	return TRUE
 }
 
 func refresh_callback(window dw.HBUTTON, data dw.POINTER) int {
-	update_render()
+	render_draw()
 	return FALSE
 }
 
 func render_select_event_callback(window dw.HLISTBOX, index int, data dw.POINTER) int {
 	if index != render_type {
-		if index == 2 {
+		if index == DRAW_FILE {
 			dw.Scrollbar_set_range(hscrollbar, uint(max_linewidth), uint(cols))
 			dw.Scrollbar_set_pos(hscrollbar, 0)
 			dw.Scrollbar_set_range(vscrollbar, uint(len(lines)), uint(rows))
@@ -537,7 +546,7 @@
 			dw.Scrollbar_set_pos(vscrollbar, 0)
 		}
 		render_type = index
-		update_render()
+		render_draw()
 	}
 	return FALSE
 }
@@ -553,7 +562,7 @@
 			current_col = value
 		}
 		dw.Window_set_text(stext, fmt.Sprintf("Row:%d Col:%d Lines:%d Cols:%d", current_row, current_col, len(lines), max_linewidth))
-		update_render()
+		render_draw()
 	}
 	return FALSE
 }