Mercurial > godwindows
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 }