From 5a962586fb161651fc612ed8a8f6da99d8d22f65 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 12 Jan 2014 23:50:54 +0000 Subject: move mandantory window update and redraw operations into table --- amiga/gui.c | 6 ++++-- atari/gui.c | 6 ++++-- beos/window.cpp | 6 ++++-- cocoa/gui.m | 6 ++++-- desktop/browser.c | 6 +++--- desktop/gui.h | 18 +++++++++++++++--- desktop/gui_factory.c | 6 ++++++ framebuffer/gui.c | 6 ++++-- gtk/window.c | 6 ++++-- monkey/browser.c | 6 ++++-- riscos/print.c | 1 + riscos/window.c | 5 ++++- windows/gui.c | 28 +++++++++++++++------------- 13 files changed, 72 insertions(+), 34 deletions(-) diff --git a/amiga/gui.c b/amiga/gui.c index 8c2f43e73..9ed3559f2 100644 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -4184,7 +4184,7 @@ static void ami_do_redraw_limits(struct gui_window *g, struct browser_window *bw return; } -void gui_window_redraw_window(struct gui_window *g) +static void gui_window_redraw_window(struct gui_window *g) { ULONG cur_tab = 0; @@ -4262,7 +4262,7 @@ struct nsObject *nnode; return true; } -void gui_window_update_box(struct gui_window *g, const struct rect *rect) +static void gui_window_update_box(struct gui_window *g, const struct rect *rect) { struct nsObject *nsobj; struct rect *deferred_rect; @@ -5085,6 +5085,8 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl, static struct gui_window_table ami_window_table = { .create = gui_window_create, .destroy = gui_window_destroy, + .redraw = gui_window_redraw_window, + .update = gui_window_update_box, .set_icon = gui_window_set_icon, .set_title = gui_window_set_title, diff --git a/atari/gui.c b/atari/gui.c index 7aa0dee07..cfb6b86d6 100644 --- a/atari/gui.c +++ b/atari/gui.c @@ -363,7 +363,7 @@ void gui_window_set_scale(struct gui_window *gw, float scale) browser_window_reformat(gw->browser->bw, false, width, heigth); } -void gui_window_redraw_window(struct gui_window *gw) +static void gui_window_redraw_window(struct gui_window *gw) { CMP_BROWSER b; GRECT rect; @@ -374,7 +374,7 @@ void gui_window_redraw_window(struct gui_window *gw) window_schedule_redraw_grect(gw->root, &rect); } -void gui_window_update_box(struct gui_window *gw, const struct rect *rect) +static void gui_window_update_box(struct gui_window *gw, const struct rect *rect) { GRECT area; struct gemtk_wm_scroll_info_s *slid; @@ -1070,6 +1070,8 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl, static struct gui_window_table atari_window_table = { .create = gui_window_create, .destroy = gui_window_destroy, + .redraw = gui_window_redraw_window, + .update = gui_window_update_box, .set_title = gui_window_set_title, .set_url = gui_window_set_url, diff --git a/beos/window.cpp b/beos/window.cpp index 66bb90640..beee9642e 100644 --- a/beos/window.cpp +++ b/beos/window.cpp @@ -1014,7 +1014,7 @@ void nsbeos_redraw_caret(struct gui_window *g) g->view->UnlockLooper(); } -void gui_window_redraw_window(struct gui_window *g) +static void gui_window_redraw_window(struct gui_window *g) { if (g->view == NULL) return; @@ -1029,7 +1029,7 @@ void gui_window_redraw_window(struct gui_window *g) g->view->UnlockLooper(); } -void gui_window_update_box(struct gui_window *g, const struct rect *rect) +static void gui_window_update_box(struct gui_window *g, const struct rect *rect) { hlcache_handle *c = g->bw->current_content; @@ -1365,6 +1365,8 @@ void gui_window_get_dimensions(struct gui_window *g, int *width, int *height, static struct gui_window_table gui_window_table = { .create = gui_window_create, .destroy = gui_window_destroy, + .redraw = gui_window_redraw_window, + .update = gui_window_update_box, .new_content = gui_window_new_content, diff --git a/cocoa/gui.m b/cocoa/gui.m index a94cbadb2..5909fcddc 100644 --- a/cocoa/gui.m +++ b/cocoa/gui.m @@ -107,12 +107,12 @@ static void gui_window_set_title(struct gui_window *g, const char *title) [(BrowserViewController *)g setTitle: [NSString stringWithUTF8String: title]]; } -void gui_window_redraw_window(struct gui_window *g) +static void gui_window_redraw_window(struct gui_window *g) { [[(BrowserViewController *)g browserView] setNeedsDisplay: YES]; } -void gui_window_update_box(struct gui_window *g, const struct rect *rect) +static void gui_window_update_box(struct gui_window *g, const struct rect *rect) { const NSRect nsrect = cocoa_scaled_rect_wh( [(BrowserViewController *)g browser]->scale, rect->x0, rect->y0, @@ -299,6 +299,8 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl, static struct gui_window_table cocoa_window_table = { .create = gui_window_create, .destroy = gui_window_destroy, + .redraw = gui_window_redraw_window, + .update = gui_window_update_box, .set_title = gui_window_set_title, .set_url = gui_window_set_url, diff --git a/desktop/browser.c b/desktop/browser.c index 7c29468c3..6d260a538 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1974,7 +1974,7 @@ void browser_window_update(struct browser_window *bw, bool scroll_to_top) browser_window_set_scroll(bw, x, y); } - gui_window_redraw_window(bw->window); + guit->window->redraw(bw->window); break; @@ -2040,7 +2040,7 @@ void browser_window_update_box(struct browser_window *bw, struct rect *rect) if (bw->window != NULL) { /* Front end window */ - gui_window_update_box(bw->window, rect); + guit->window->update(bw->window, rect); } else { /* Core managed browser window */ browser_window_get_position(bw, true, &pos_x, &pos_y); @@ -2052,7 +2052,7 @@ void browser_window_update_box(struct browser_window *bw, struct rect *rect) rect->x1 += pos_x / bw->scale; rect->y1 += pos_y / bw->scale; - gui_window_update_box(top->window, rect); + guit->window->update(top->window, rect); } } diff --git a/desktop/gui.h b/desktop/gui.h index 1ab871f33..0b7bdcca6 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -79,6 +79,21 @@ struct gui_window_table { /** destroy previously created gui window */ void (*destroy)(struct gui_window *g); + /** + * Force a redraw of the entire contents of a window. + * + * \param g gui_window to redraw + */ + void (*redraw)(struct gui_window *g); + + /** + * Redraw an area of a window. + * + * \param g gui_window + * \param rect area to redraw + */ + void (*update)(struct gui_window *g, const struct rect *rect); + /* Optional entries */ @@ -164,9 +179,6 @@ struct gui_table { extern struct gui_table *guit; /* the gui vtable */ -void gui_window_redraw_window(struct gui_window *g); -void gui_window_update_box(struct gui_window *g, - const struct rect *rect); bool gui_window_get_scroll(struct gui_window *g, int *sx, int *sy); void gui_window_set_scroll(struct gui_window *g, int sx, int sy); void gui_window_get_dimensions(struct gui_window *g, int *width, int *height, diff --git a/desktop/gui_factory.c b/desktop/gui_factory.c index 73fb016e4..9cf328557 100644 --- a/desktop/gui_factory.c +++ b/desktop/gui_factory.c @@ -80,6 +80,12 @@ static nserror verify_window_register(struct gui_window_table *gwt) if (gwt->destroy == NULL) { return NSERROR_BAD_PARAMETER; } + if (gwt->redraw == NULL) { + return NSERROR_BAD_PARAMETER; + } + if (gwt->update == NULL) { + return NSERROR_BAD_PARAMETER; + } /* fill in the optional entries with defaults */ if (gwt->set_title == NULL) { diff --git a/framebuffer/gui.c b/framebuffer/gui.c index 9dd35b6f9..aefc24bdb 100644 --- a/framebuffer/gui.c +++ b/framebuffer/gui.c @@ -1535,13 +1535,13 @@ gui_window_destroy(struct gui_window *gw) free(gw); } -void +static void gui_window_redraw_window(struct gui_window *g) { fb_queue_redraw(g->browser, 0, 0, fbtk_get_width(g->browser), fbtk_get_height(g->browser) ); } -void +static void gui_window_update_box(struct gui_window *g, const struct rect *rect) { struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser); @@ -1844,6 +1844,8 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl, static struct gui_window_table framebuffer_gui_window_table = { .create = gui_window_create, .destroy = gui_window_destroy, + .redraw = gui_window_redraw_window, + .update = gui_window_update_box, .set_url = gui_window_set_url, .start_throbber = gui_window_start_throbber, diff --git a/gtk/window.c b/gtk/window.c index 7f3db864a..0ea67edb9 100644 --- a/gtk/window.c +++ b/gtk/window.c @@ -919,12 +919,12 @@ void gui_window_remove_caret(struct gui_window *g) } -void gui_window_redraw_window(struct gui_window *g) +static void gui_window_redraw_window(struct gui_window *g) { gtk_widget_queue_draw(GTK_WIDGET(g->layout)); } -void gui_window_update_box(struct gui_window *g, const struct rect *rect) +static void gui_window_update_box(struct gui_window *g, const struct rect *rect) { int sx, sy; hlcache_handle *c = g->bw->current_content; @@ -1174,6 +1174,8 @@ void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl, static struct gui_window_table gui_window_table = { .create = gui_window_create, .destroy = gui_window_destroy, + .redraw = gui_window_redraw_window, + .update = gui_window_update_box, .set_icon = gui_window_set_icon, diff --git a/monkey/browser.c b/monkey/browser.c index 985174d82..33f302089 100644 --- a/monkey/browser.c +++ b/monkey/browser.c @@ -126,7 +126,7 @@ gui_window_set_title(struct gui_window *g, const char *title) fprintf(stdout, "WINDOW TITLE WIN %u STR %s\n", g->win_num, title); } -void +static void gui_window_redraw_window(struct gui_window *g) { fprintf(stdout, "WINDOW REDRAW WIN %u\n", g->win_num); @@ -174,7 +174,7 @@ gui_window_set_scroll(struct gui_window *g, int sx, int sy) fprintf(stdout, "WINDOW SET_SCROLL WIN %u X %d Y %d\n", g->win_num, sx, sy); } -void +static void gui_window_update_box(struct gui_window *g, const struct rect *rect) { fprintf(stdout, "WINDOW UPDATE_BOX WIN %u X %d Y %d WIDTH %d HEIGHT %d\n", @@ -566,6 +566,8 @@ monkey_window_handle_command(int argc, char **argv) static struct gui_window_table gui_window_table = { .create = gui_window_create, .destroy = gui_window_destroy, + .redraw = gui_window_redraw_window, + .update = gui_window_update_box, .set_title = gui_window_set_title, .set_url = gui_window_set_url, diff --git a/riscos/print.c b/riscos/print.c index 0df77ef6b..09d4aaefb 100644 --- a/riscos/print.c +++ b/riscos/print.c @@ -90,6 +90,7 @@ static unsigned int print_fonts_count; /** Error in print_fonts_plot_text() or print_fonts_callback(). */ static const char *print_fonts_error; +void gui_window_redraw_window(struct gui_window *g); static bool ro_gui_print_click(wimp_pointer *pointer); static bool ro_gui_print_apply(wimp_w w); diff --git a/riscos/window.c b/riscos/window.c index af045b2a4..3975773a0 100644 --- a/riscos/window.c +++ b/riscos/window.c @@ -89,6 +89,7 @@ #include "utils/utils.h" #include "utils/messages.h" +void gui_window_redraw_window(struct gui_window *g); static void gui_window_set_extent(struct gui_window *g, int width, int height); @@ -710,7 +711,7 @@ void gui_window_redraw_window(struct gui_window *g) * \param data content_msg_data union with filled in redraw data */ -void gui_window_update_box(struct gui_window *g, const struct rect *rect) +static void gui_window_update_box(struct gui_window *g, const struct rect *rect) { bool use_buffer; int x0, y0, x1, y1; @@ -5242,6 +5243,8 @@ bool ro_gui_alt_pressed(void) static struct gui_window_table gui_window_table = { .create = gui_window_create, .destroy = gui_window_destroy, + .redraw = gui_window_redraw_window, + .update = gui_window_update_box, .set_icon = gui_window_set_icon, .set_title = gui_window_set_title, diff --git a/windows/gui.c b/windows/gui.c index 6e04e3e97..e40414eac 100644 --- a/windows/gui.c +++ b/windows/gui.c @@ -723,6 +723,18 @@ nsws_window_resize(struct gui_window *gw, return 0; } +/** + * redraw the whole window + */ +static void gui_window_redraw_window(struct gui_window *gw) +{ + /* LOG(("gw:%p", gw)); */ + if (gw == NULL) + return; + + RedrawWindow(gw->drawingarea, NULL, NULL, RDW_INVALIDATE | RDW_NOERASE); +} + static LRESULT nsws_window_command(HWND hwnd, @@ -1439,19 +1451,7 @@ static void gui_window_set_title(struct gui_window *w, const char *title) free(fulltitle); } -/** - * redraw the whole window - */ -void gui_window_redraw_window(struct gui_window *gw) -{ - /* LOG(("gw:%p", gw)); */ - if (gw == NULL) - return; - - RedrawWindow(gw->drawingarea, NULL, NULL, RDW_INVALIDATE | RDW_NOERASE); -} - -void gui_window_update_box(struct gui_window *gw, const struct rect *rect) +static void gui_window_update_box(struct gui_window *gw, const struct rect *rect) { /* LOG(("gw:%p %f,%f %f,%f", gw, data->redraw.x, data->redraw.y, data->redraw.width, data->redraw.height)); */ @@ -1847,6 +1847,8 @@ nsws_create_main_class(HINSTANCE hinstance) { static struct gui_window_table win32_window_table = { .create = gui_window_create, .destroy = gui_window_destroy, + .redraw = gui_window_redraw_window, + .update = gui_window_update_box, .set_title = gui_window_set_title, .set_url = gui_window_set_url, -- cgit v1.2.3