- if (f & F_GT_DOWN) {
- draw_gt(dr, ox+g2, oy+TILE_SIZE+g4, g2, g2, g2, -g2,
- (f & F_ERROR_DOWN) ? COL_ERROR : col);
- if (needsupdate) draw_update(dr, ox, oy+TILE_SIZE, TILE_SIZE, g);
+ if (f & F_ADJ_DOWN) {
+ if (bg >= 0) draw_rect(dr, ox, oy + TILE_SIZE, TILE_SIZE, g, bg);
+ draw_gt(dr, ox+g2, oy+TILE_SIZE+g4, g2, g2, g2, -g2, COLOUR(DOWN));
+ draw_update(dr, ox, oy+TILE_SIZE, TILE_SIZE, g);
+ }
+ if (f & F_ADJ_LEFT) {
+ if (bg >= 0) draw_rect(dr, ox - g, oy, g, TILE_SIZE, bg);
+ draw_gt(dr, ox-g4, oy+g2, -g2, g2, g2, g2, COLOUR(LEFT));
+ draw_update(dr, ox-g, oy, g, TILE_SIZE);
+ }
+}
+
+static void draw_adjs(drawing *dr, game_drawstate *ds, int ox, int oy,
+ unsigned int f, int bg, int fg)
+{
+ int g = GAP_SIZE, g38 = 3*(g+1)/8, g4 = (g+1)/4;
+
+ /* Draw all the adjacency bars relevant to this tile; we only have
+ * to worry about F_ADJ_RIGHT and F_ADJ_DOWN.
+ *
+ * If we _only_ have the error flag set (i.e. it's not supposed to be
+ * adjacent, but adjacent numbers were entered) draw an outline red bar.
+ */
+
+ if (f & (F_ADJ_RIGHT|F_ERROR_RIGHT)) {
+ if (f & F_ADJ_RIGHT) {
+ draw_rect(dr, ox+TILE_SIZE+g38, oy, g4, TILE_SIZE, COLOUR(RIGHT));
+ } else {
+ draw_rect_outline(dr, ox+TILE_SIZE+g38, oy, g4, TILE_SIZE, COL_ERROR);
+ }
+ } else if (bg >= 0) {
+ draw_rect(dr, ox+TILE_SIZE+g38, oy, g4, TILE_SIZE, bg);