]> git.draconx.ca Git - rrace.git/blobdiff - src/motif_ui.c
Alter x11_queue_render interface to better match usage.
[rrace.git] / src / motif_ui.c
index 5056d9c7e59f6135c3fe7ddc0bbb4e2b6a8689d1..3658615d917dc0870c02ca5109bb7e992f928f05 100644 (file)
@@ -266,14 +266,11 @@ static uint_fast32_t x11_expose_mask(XExposeEvent *e, int tile_w, int tile_h)
                          (e->y+e->height-1)/tile_h );
 }
 
-static void game_resize(Widget w, void *data, void *cb_data)
+static void resize(Widget w, void *data, void *cb_data)
 {
-       x11_queue_render(data, -1, 0);
-}
+       struct app_state *state = data;
 
-static void goal_resize(Widget w, void *data, void *cb_data)
-{
-       x11_queue_render(data, 0, -1);
+       x11_queue_render(data, -1, 1 << (w == state->game));
 }
 
 static void expose(Widget w, void *data, void *cb_data)
@@ -282,11 +279,11 @@ static void expose(Widget w, void *data, void *cb_data)
        XExposeEvent *e = &cbs->event->xexpose;
        struct app_state *state = data;
        Dimension tile_w, tile_h;
+       uint_fast32_t mask;
 
        XtVaGetValues(w, XmNwidth, &tile_w, XmNheight, &tile_h, (char *)NULL);
        if (w == state->game) {
                uint_least32_t *gp = state->board.game;
-               uint_fast32_t mask;
 
                if (!(tile_w /= 5) || !(tile_h /= 5))
                        return;
@@ -297,15 +294,16 @@ static void expose(Widget w, void *data, void *cb_data)
                 * spaces don't need to be drawn again.
                 */
                mask = gp[0] | gp[1] | gp[2];
-               mask &= x11_expose_mask(e, tile_w, tile_h);
-
-               x11_queue_render(state, mask, 0);
        } else {
                if (!(tile_w /= 3) || !(tile_h /= 3))
                        return;
 
-               x11_queue_render(state, 0, x11_expose_mask(e, tile_w, tile_h));
+               /* Goal area never has empty tiles. */
+               mask = -1;
        }
+
+       mask &= x11_expose_mask(e, tile_w, tile_h);
+       x11_queue_render(state, mask, 1<<(w == state->game));
 }
 
 void ui_initialize(struct app_state *state, Widget shell)
@@ -325,13 +323,13 @@ void ui_initialize(struct app_state *state, Widget shell)
        XtVaGetValues(state->game, XmNwidth, &state->game_sz[0],
                                   XmNheight, &state->game_sz[1],
                                   (char *)NULL);
-       XtAddCallback(state->game, XmNresizeCallback, game_resize, state);
+       XtAddCallback(state->game, XmNresizeCallback, resize, state);
        XtAddCallback(state->game, XmNexposeCallback, expose, state);
 
        XtVaGetValues(state->game, XmNwidth, &state->goal_sz[0],
                                   XmNheight, &state->goal_sz[1],
                                   (char *)NULL);
-       XtAddCallback(state->goal, XmNresizeCallback, goal_resize, state);
+       XtAddCallback(state->goal, XmNresizeCallback, resize, state);
        XtAddCallback(state->goal, XmNexposeCallback, expose, state);
 }