struct timeval last_time;
config_item *cfg;
int cfg_which, cfgret;
- int ox, oy;
+ int ox, oy, w, h;
};
static frontend *_fe;
void nestedvm_start_draw(void *handle)
{
frontend *fe = (frontend *)handle;
+ _call_java(5, 0, fe->w, fe->h);
_call_java(4, 1, fe->ox, fe->oy);
}
_call_java(4,2,0,0);
}
+char *nestedvm_text_fallback(void *handle, const char *const *strings,
+ int nstrings)
+{
+ /*
+ * We assume Java can cope with any UTF-8 likely to be emitted
+ * by a puzzle.
+ */
+ return dupstr(strings[0]);
+}
+
const struct drawing_api nestedvm_drawing = {
nestedvm_draw_text,
nestedvm_draw_rect,
nestedvm_blitter_save,
nestedvm_blitter_load,
NULL, NULL, NULL, NULL, NULL, NULL, /* {begin,end}_{doc,page,puzzle} */
- NULL, /* line_width */
+ NULL, NULL, /* line_width, line_dotted */
+ nestedvm_text_fallback,
};
int jcallback_key_event(int x, int y, int keyval)
midend_size(fe->me, &x, &y, TRUE);
fe->ox = (width - x) / 2;
fe->oy = (height - y) / 2;
+ fe->w = x;
+ fe->h = y;
midend_force_redraw(fe->me);
return 0;
}
return 0;
}
+void preset_menu_populate(struct preset_menu *menu, int menuid)
+{
+ int i;
+
+ for (i = 0; i < menu->n_entries; i++) {
+ struct preset_menu_entry *entry = &menu->entries[i];
+ if (entry->params) {
+ _call_java(5, (int)entry->params, 0, 0);
+ _call_java(1, (int)entry->title, menuid, entry->id);
+ } else {
+ _call_java(5, 0, 0, 0);
+ _call_java(1, (int)entry->title, menuid, entry->id);
+ preset_menu_populate(entry->submenu, entry->id);
+ }
+ }
+}
+
int main(int argc, char **argv)
{
int i, n;
_fe = snew(frontend);
_fe->timer_active = FALSE;
_fe->me = midend_new(_fe, &thegame, &nestedvm_drawing, _fe);
+ if (argc > 1)
+ midend_game_id(_fe->me, argv[1]); /* ignore failure */
midend_new_game(_fe->me);
- if ((n = midend_num_presets(_fe->me)) > 0) {
- int i;
- for (i = 0; i < n; i++) {
- char *name;
- game_params *params;
- midend_fetch_preset(_fe->me, i, &name, ¶ms);
- _call_java(1, (int)name, (int)params, 0);
- }
+ {
+ struct preset_menu *menu;
+ int nids, topmenu;
+ menu = midend_get_presets(_fe->me, &nids);
+ topmenu = _call_java(1, 0, nids, 0);
+ preset_menu_populate(menu, topmenu);
}
colours = midend_colours(_fe->me, &n);