minimap.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /* $Id: minimap.c,v 1.10 2001/04/14 23:40:39 kilobug Exp $ */
  2. #include "client.h"
  3. void minimap_refresh(GtkWidget *w, const conf_t *conf)
  4. {
  5. gdk_draw_rgb_32_image(w->window,
  6. w->style->fg_gc[GTK_STATE_NORMAL],
  7. 0, 0, MINI_MAP_SIZE, MINI_MAP_SIZE,
  8. GDK_RGB_DITHER_NORMAL,
  9. gen_minimap(conf, TRUE),
  10. MINI_MAP_SIZE * 4);
  11. }
  12. static gint mini_expose_event(GtkWidget *w, GdkEventExpose *e,
  13. const conf_t *conf)
  14. {
  15. guint offs;
  16. offs = (e->area.x + e->area.y * MINI_MAP_SIZE) * 4;
  17. gdk_draw_rgb_32_image(w->window,
  18. w->style->fg_gc[GTK_WIDGET_STATE(w)],
  19. e->area.x, e->area.y,
  20. e->area.width, e->area.height,
  21. GDK_RGB_DITHER_NORMAL,
  22. gen_minimap(conf, FALSE) + offs,
  23. MINI_MAP_SIZE * 4);
  24. return FALSE;
  25. }
  26. static void mini_press_event(GtkWidget *w, GdkEventButton *e, conf_t *conf)
  27. {
  28. if ((e->button != 1) || (conf == NULL))
  29. return;
  30. scroll_bigmap(conf, e->x, e->y);
  31. }
  32. static void mini_motion_event(GtkWidget *w, GdkEventMotion *e, conf_t *conf)
  33. {
  34. int x, y;
  35. GdkModifierType state;
  36. if (conf == NULL)
  37. return;
  38. if (e->is_hint)
  39. gdk_window_get_pointer(e->window, &x, &y, &state);
  40. else
  41. {
  42. x = e->x;
  43. y = e->y;
  44. state = e->state;
  45. }
  46. if (!(state & GDK_BUTTON1_MASK))
  47. return;
  48. scroll_bigmap(conf, x, y);
  49. }
  50. GtkWidget *create_mini_map(conf_t *conf)
  51. {
  52. GtkWidget *frame;
  53. frame = create_frame("Minimap");
  54. conf->mini = gtk_drawing_area_new();
  55. gtk_drawing_area_size(GTK_DRAWING_AREA(conf->mini),
  56. MINI_MAP_SIZE, MINI_MAP_SIZE);
  57. gtk_signal_connect(GTK_OBJECT(conf->mini), "expose_event",
  58. (GtkSignalFunc) mini_expose_event, conf);
  59. gtk_signal_connect(GTK_OBJECT(conf->mini), "button_press_event",
  60. (GtkSignalFunc) mini_press_event, conf);
  61. gtk_signal_connect(GTK_OBJECT(conf->mini), "motion_notify_event",
  62. (GtkSignalFunc) mini_motion_event, conf);
  63. gtk_widget_set_events(conf->mini,
  64. GDK_EXPOSURE_MASK
  65. | GDK_LEAVE_NOTIFY_MASK
  66. | GDK_BUTTON_PRESS_MASK
  67. | GDK_POINTER_MOTION_MASK
  68. | GDK_POINTER_MOTION_HINT_MASK);
  69. gtk_widget_show(conf->mini);
  70. gtk_container_add(GTK_CONTAINER(frame), conf->mini);
  71. return frame;
  72. }