rnd-19990124-2
authorHolger Schemel <info@artsoft.org>
Sun, 24 Jan 1999 22:03:38 +0000 (23:03 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:33:11 +0000 (10:33 +0200)
src/buttons.c
src/buttons.h
src/editor.c
src/game.c
src/init.c
src/tape.c
src/tools.c
src/tools.h

index 721a8335b47a7d899595d4f7720f26582b2f4a4a..a55f38d9cbb62706ed6a9fb437f1db19da97796d 100644 (file)
@@ -1658,33 +1658,7 @@ static struct GadgetInfo *getGadgetInfoFromMousePosition(int mx, int my)
     if (gi->mapped &&
        mx >= gi->x && mx < gi->x + gi->width &&
        my >= gi->y && my < gi->y + gi->height)
-    {
-
-#if 0
-      if (gi->type & GD_TYPE_SCROLLBAR)
-      {
-       int mpos, gpos;
-
-       if (gi->type == GD_TYPE_SCROLLBAR_HORIZONTAL)
-       {
-         mpos = mx;
-         gpos = gi->x;
-       }
-       else
-       {
-         mpos = my;
-         gpos = gi->y;
-       }
-
-       if (mpos >= gpos + gi->scrollbar.position &&
-           mpos < gpos + gi->scrollbar.position + gi->scrollbar.size)
-         break;
-      }
-      else
-#endif
-
        break;
-    }
 
     gi = gi->next;
   }
@@ -1847,6 +1821,27 @@ struct GadgetInfo *CreateGadget(int first_tag, ...)
        new_gadget->design_border = va_arg(ap, int);
        break;
 
+      case GDI_DECORATION_DESIGN:
+       new_gadget->deco.design.pixmap = va_arg(ap, Pixmap);
+       new_gadget->deco.design.x = va_arg(ap, int);
+       new_gadget->deco.design.y = va_arg(ap, int);
+       break;
+
+      case GDI_DECORATION_POSITION:
+       new_gadget->deco.x = va_arg(ap, int);
+       new_gadget->deco.y = va_arg(ap, int);
+       break;
+
+      case GDI_DECORATION_SIZE:
+       new_gadget->deco.width = va_arg(ap, int);
+       new_gadget->deco.height = va_arg(ap, int);
+       break;
+
+      case GDI_DECORATION_SHIFTING:
+       new_gadget->deco.xshift = va_arg(ap, int);
+       new_gadget->deco.yshift = va_arg(ap, int);
+       break;
+
       case GDI_EVENT_MASK:
        new_gadget->event_mask = va_arg(ap, unsigned long);
        break;
@@ -2025,6 +2020,12 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct)
     case GD_TYPE_RADIO_BUTTON:
       XCopyArea(display, gd->pixmap, drawto, gc,
                gd->x, gd->y, gi->width, gi->height, gi->x, gi->y);
+      if (gi->deco.design.pixmap)
+       XCopyArea(display, gi->deco.design.pixmap, drawto, gc,
+                 gi->deco.design.x, gi->deco.design.y,
+                 gi->deco.width, gi->deco.height,
+                 gi->x + gi->deco.x + (pressed ? gi->deco.xshift : 0),
+                 gi->y + gi->deco.y + (pressed ? gi->deco.yshift : 0));
       break;
 
     case GD_TYPE_TEXTINPUT_ALPHANUMERIC:
index afbcfe8ce756e13bc69b861a2d735a056d6c6261..abaa52627c464ea7fb046a340ba28d0f290f5054 100644 (file)
@@ -330,16 +330,20 @@ int CheckCountButtons(int, int, int);
 #define GDI_ALT_DESIGN_UNPRESSED       17
 #define GDI_ALT_DESIGN_PRESSED         18
 #define GDI_DESIGN_BORDER              19
-#define GDI_EVENT_MASK                 20
-#define GDI_EVENT                      21
-#define GDI_CALLBACK_INFO              22
-#define GDI_CALLBACK_ACTION            23
-#define GDI_AREA_SIZE                  24
-#define GDI_ITEM_SIZE                  25
-#define GDI_SCROLLBAR_ITEMS_MAX                26
-#define GDI_SCROLLBAR_ITEMS_VISIBLE    27
-#define GDI_SCROLLBAR_ITEM_POSITION    28
-#define GDI_INFO_TEXT                  29
+#define GDI_DECORATION_DESIGN          20
+#define GDI_DECORATION_POSITION                22
+#define GDI_DECORATION_SIZE            21
+#define GDI_DECORATION_SHIFTING                23
+#define GDI_EVENT_MASK                 24
+#define GDI_EVENT                      25
+#define GDI_CALLBACK_INFO              26
+#define GDI_CALLBACK_ACTION            27
+#define GDI_AREA_SIZE                  28
+#define GDI_ITEM_SIZE                  29
+#define GDI_SCROLLBAR_ITEMS_MAX                30
+#define GDI_SCROLLBAR_ITEMS_VISIBLE    31
+#define GDI_SCROLLBAR_ITEM_POSITION    32
+#define GDI_INFO_TEXT                  33
 
 typedef void (*gadget_function)(void *);
 
@@ -349,6 +353,14 @@ struct GadgetDesign
   int x, y;                            /* position of rectangle in Pixmap */
 };
 
+struct GadgetDecoration
+{
+  struct GadgetDesign design;          /* decoration design structure */
+  int x, y;                            /* position of deco on the gadget */
+  int width, height;                   /* width and height of decoration */
+  int xshift, yshift;                  /* deco shifting when gadget pressed */
+};
+
 struct GadgetEvent
 {
   unsigned long type;                  /* event type */
@@ -400,6 +412,7 @@ struct GadgetInfo
   boolean mapped;                      /* gadget is active */
   struct GadgetDesign design[2];       /* 0: normal; 1: pressed */
   struct GadgetDesign alt_design[2];   /* alternative design */
+  struct GadgetDecoration deco;                /* decoration on top of gadget */
   int design_border;                   /* border size of gadget decoration */
   unsigned long event_mask;            /* possible events for this gadget */
   struct GadgetEvent event;            /* actual gadget event */
index f15d401660cc29c0a14d099c1895467167c47c44..64e96e24164b6515b4c6ae7bcd3a52ead062fe1b 100644 (file)
 #define ED_NUM_CTRL2_BUTTONS   (ED_CTRL2_BUTTONS_HORIZ * ED_CTRL2_BUTTONS_VERT)
 #define ED_NUM_CTRL_BUTTONS    (ED_NUM_CTRL1_BUTTONS + ED_NUM_CTRL2_BUTTONS)
 
+/* values for the element list */
+#define ED_ELEMENTLIST_UP_XPOS         35
+#define ED_ELEMENTLIST_UP_YPOS         5
+#define ED_ELEMENTLIST_UP_ALT_YPOS     140
+#define ED_ELEMENTLIST_DOWN_XPOS       35
+#define ED_ELEMENTLIST_DOWN_YPOS       250
+#define ED_ELEMENTLIST_DOWN_ALT_YPOS   165
+#define ED_ELEMENTLIST_UPDOWN_XSIZE    30
+#define ED_ELEMENTLIST_UPDOWN_YSIZE    25
+#define ED_ELEMENTLIST_XPOS            6
+#define ED_ELEMENTLIST_YPOS            30
+#define ED_ELEMENTLIST_ALT_YPOS                190
+#define ED_ELEMENTLIST_XSIZE           22
+#define ED_ELEMENTLIST_YSIZE           22
+#define ED_ELEMENTLIST_BUTTONS_HORIZ   4
+#define ED_ELEMENTLIST_BUTTONS_VERT    10
+#define ED_NUM_ELEMENTLIST_BUTTONS     (ED_ELEMENTLIST_BUTTONS_HORIZ * \
+                                        ED_ELEMENTLIST_BUTTONS_VERT)
+
 /* values for element properties window */
 #define ED_PROPERTIES_XPOS             (TILEX - MINI_TILEX/2)
 
 #define ED_CTRL_ID_SCROLL_VERTICAL     62
 #define ED_CTRL_ID_SCROLL_HORIZONTAL   63
 
-#define ED_NUM_GADGETS                 64
+/* gadgets for scrolling element list */
+#define ED_CTRL_ID_ELEMENTLIST_UP      64
+#define ED_CTRL_ID_ELEMENTLIST_DOWN    65
+
+/* gadgets for buttons in element list */
+#define ED_CTRL_ID_ELEMENTLIST_FIRST   66
+#define ED_CTRL_ID_ELEMENTLIST_LAST    105
+
+#define ED_NUM_GADGETS                 106
 
 /* values for counter gadgets */
 #define ED_COUNTER_ID_ELEM_SCORE       0
 #define ED_TEXTINPUT_ID_LEVEL_AUTHOR   1
 
 #define ED_NUM_COUNTERBUTTONS          8
-#define ED_NUM_SCROLLBUTTONS           4
+#define ED_NUM_SCROLLBUTTONS           6
 #define ED_NUM_SCROLLBARS              2
 #define ED_NUM_TEXTINPUT               2
 
@@ -387,23 +414,39 @@ static struct
 {
   {
     ED_SCROLLBUTTON_XPOS,   ED_SCROLLBUTTON_YPOS + 0 * ED_SCROLLBUTTON_YSIZE,
-    ED_SCROLL_UP_XPOS,      ED_SCROLL_UP_YPOS,      ED_CTRL_ID_SCROLL_UP,
+    ED_SCROLL_UP_XPOS,      ED_SCROLL_UP_YPOS,
+    ED_CTRL_ID_SCROLL_UP,
     "scroll level editing area up"
   },
   {
     ED_SCROLLBUTTON_XPOS,   ED_SCROLLBUTTON_YPOS + 1 * ED_SCROLLBUTTON_YSIZE,
-    ED_SCROLL_DOWN_XPOS,    ED_SCROLL_DOWN_YPOS,    ED_CTRL_ID_SCROLL_DOWN,
+    ED_SCROLL_DOWN_XPOS,    ED_SCROLL_DOWN_YPOS,
+    ED_CTRL_ID_SCROLL_DOWN,
     "scroll level editing area down"
   },
   {
     ED_SCROLLBUTTON_XPOS,   ED_SCROLLBUTTON_YPOS + 2 * ED_SCROLLBUTTON_YSIZE,
-    ED_SCROLL_LEFT_XPOS,    ED_SCROLL_LEFT_YPOS,    ED_CTRL_ID_SCROLL_LEFT,
+    ED_SCROLL_LEFT_XPOS,    ED_SCROLL_LEFT_YPOS,
+    ED_CTRL_ID_SCROLL_LEFT,
     "scroll level editing area left"
   },
   {
     ED_SCROLLBUTTON_XPOS,   ED_SCROLLBUTTON_YPOS + 3 * ED_SCROLLBUTTON_YSIZE,
-    ED_SCROLL_RIGHT_XPOS,   ED_SCROLL_RIGHT_YPOS,   ED_CTRL_ID_SCROLL_RIGHT,
+    ED_SCROLL_RIGHT_XPOS,   ED_SCROLL_RIGHT_YPOS,
+    ED_CTRL_ID_SCROLL_RIGHT,
     "scroll level editing area right"
+  },
+  {
+    ED_ELEMENTLIST_UP_XPOS, ED_ELEMENTLIST_UP_ALT_YPOS,
+    ED_ELEMENTLIST_UP_XPOS, ED_ELEMENTLIST_UP_YPOS,
+    ED_CTRL_ID_ELEMENTLIST_UP,
+    "scroll element list up"
+  },
+  {
+    ED_ELEMENTLIST_DOWN_XPOS, ED_ELEMENTLIST_DOWN_ALT_YPOS,
+    ED_ELEMENTLIST_DOWN_XPOS, ED_ELEMENTLIST_DOWN_YPOS,
+    ED_CTRL_ID_ELEMENTLIST_DOWN,
+    "scroll element list down"
   }
 };
 
@@ -973,28 +1016,101 @@ static void CreateControlButtons()
     level_editor_gadget[id] = gi;
   }
 
-  /* create buttons for scrolling of drawing area */
+  /* create buttons for scrolling of drawing area and element list */
   for (i=0; i<ED_NUM_SCROLLBUTTONS; i++)
   {
     int id = scrollbutton_info[i].gadget_id;
-    int gd_x1, gd_x2, gd_y;
+    int x, y, width, height;
+    int gd_x1, gd_x2, gd_y1, gd_y2;
+
+    x = scrollbutton_info[i].x;
+    y = scrollbutton_info[i].y;
 
     event_mask = GD_EVENT_PRESSED | GD_EVENT_REPEATED;
 
-    gd_y  = DOOR_GFX_PAGEY1 + scrollbutton_info[i].ypos;
-    gd_x1 = DOOR_GFX_PAGEX8 + scrollbutton_info[i].xpos;
-    gd_x2 = gd_x1 - ED_SCROLLBUTTON_XSIZE;
+    if (id == ED_CTRL_ID_ELEMENTLIST_UP ||
+       id == ED_CTRL_ID_ELEMENTLIST_DOWN)
+    {
+      x += DX;
+      y += DY;
+      width = ED_ELEMENTLIST_UPDOWN_XSIZE;
+      height = ED_ELEMENTLIST_UPDOWN_YSIZE;
+      gd_x1 = DOOR_GFX_PAGEX6 + scrollbutton_info[i].xpos;
+      gd_y1 = DOOR_GFX_PAGEY1 + scrollbutton_info[i].y;
+      gd_x2 = gd_x1;
+      gd_y2 = DOOR_GFX_PAGEY1 + scrollbutton_info[i].ypos;
+    }
+    else
+    {
+      x += SX;
+      y += SY;
+      width = ED_SCROLLBUTTON_XSIZE;
+      height = ED_SCROLLBUTTON_YSIZE;
+      gd_x1 = DOOR_GFX_PAGEX8 + scrollbutton_info[i].xpos;
+      gd_y1 = DOOR_GFX_PAGEY1 + scrollbutton_info[i].ypos;
+      gd_x2 = gd_x1 - ED_SCROLLBUTTON_XSIZE;
+      gd_y2 = gd_y1;
+   }
 
     gi = CreateGadget(GDI_CUSTOM_ID, id,
                      GDI_INFO_TEXT, scrollbutton_info[i].infotext,
-                     GDI_X, SX + scrollbutton_info[i].x,
-                     GDI_Y, SY + scrollbutton_info[i].y,
-                     GDI_WIDTH, ED_SCROLLBUTTON_XSIZE,
-                     GDI_HEIGHT, ED_SCROLLBUTTON_YSIZE,
+                     GDI_X, x,
+                     GDI_Y, y,
+                     GDI_WIDTH, width,
+                     GDI_HEIGHT, height,
+                     GDI_TYPE, GD_TYPE_NORMAL_BUTTON,
+                     GDI_STATE, GD_BUTTON_UNPRESSED,
+                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y1,
+                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y2,
+                     GDI_EVENT_MASK, event_mask,
+                     GDI_CALLBACK_ACTION, HandleControlButtons,
+                     GDI_END);
+
+    if (gi == NULL)
+      Error(ERR_EXIT, "cannot create gadget");
+
+    level_editor_gadget[id] = gi;
+  }
+
+  /* create buttons for element list */
+  for (i=0; i<ED_NUM_ELEMENTLIST_BUTTONS; i++)
+  {
+    Pixmap deco_pixmap;
+    int deco_x, deco_y, deco_xpos, deco_ypos;
+    int gd_xoffset, gd_yoffset;
+    int gd_x, gd_y1, gd_y2;
+    int x = i % ED_ELEMENTLIST_BUTTONS_HORIZ;
+    int y = i / ED_ELEMENTLIST_BUTTONS_HORIZ;
+    int id = ED_CTRL_ID_ELEMENTLIST_FIRST + i;
+
+    event_mask = GD_EVENT_RELEASED;
+
+    gd_xoffset = ED_ELEMENTLIST_XPOS + x * ED_ELEMENTLIST_XSIZE;
+    gd_yoffset = ED_ELEMENTLIST_YPOS + y * ED_ELEMENTLIST_YSIZE;
+
+    gd_x = DOOR_GFX_PAGEX6 + ED_ELEMENTLIST_XPOS;
+    gd_y1 = DOOR_GFX_PAGEY1 + ED_ELEMENTLIST_YPOS;
+    gd_y2 = DOOR_GFX_PAGEY1 + ED_ELEMENTLIST_ALT_YPOS;
+
+    getMiniGraphicSource(el2gfx(editor_element[i]),
+                        &deco_pixmap, &deco_x, &deco_y);
+    deco_xpos = (ED_ELEMENTLIST_XSIZE - MINI_TILEX) / 2;
+    deco_ypos = (ED_ELEMENTLIST_YSIZE - MINI_TILEY) / 2;
+
+    gi = CreateGadget(GDI_CUSTOM_ID, id,
+                     GDI_INFO_TEXT, "choose element",
+                     GDI_X, DX + gd_xoffset,
+                     GDI_Y, DY + gd_yoffset,
+                     GDI_WIDTH, ED_ELEMENTLIST_XSIZE,
+                     GDI_HEIGHT, ED_ELEMENTLIST_YSIZE,
                      GDI_TYPE, GD_TYPE_NORMAL_BUTTON,
                      GDI_STATE, GD_BUTTON_UNPRESSED,
-                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y,
-                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y,
+                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x, gd_y1,
+                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x, gd_y2,
+                     GDI_DECORATION_DESIGN, deco_pixmap, deco_x, deco_y,
+                     GDI_DECORATION_POSITION, deco_xpos, deco_ypos,
+                     GDI_DECORATION_SIZE, MINI_TILEX, MINI_TILEY,
+                     GDI_DECORATION_SHIFTING, 1, 1,
                      GDI_EVENT_MASK, event_mask,
                      GDI_CALLBACK_ACTION, HandleControlButtons,
                      GDI_END);
@@ -1281,6 +1397,8 @@ static void MapControlButtons()
 
   for (i=0; i<ED_NUM_CTRL_BUTTONS; i++)
     MapGadget(level_editor_gadget[i]);
+  for (i=0; i<ED_NUM_ELEMENTLIST_BUTTONS; i++)
+    MapGadget(level_editor_gadget[ED_CTRL_ID_ELEMENTLIST_FIRST + i]);
 }
 
 static void MapCounterButtons(int id)
@@ -1322,8 +1440,9 @@ void UnmapLevelEditorWindowGadgets()
 {
   int i;
 
-  for (i=ED_NUM_CTRL_BUTTONS; i<ED_NUM_GADGETS; i++)
-    UnmapGadget(level_editor_gadget[i]);
+  for (i=0; i<ED_NUM_GADGETS; i++)
+    if (level_editor_gadget[i]->x < DX)
+      UnmapGadget(level_editor_gadget[i]);
 }
 
 void UnmapLevelEditorGadgets()
@@ -1780,6 +1899,9 @@ void LevelEd(int mx, int my, int button)
   }
   else                         /********** EDIT/CTRL-FENSTER **********/
   {
+
+
+#if 0
     static unsigned long choice_delay = 0;
     int choice = CheckElemButtons(mx,my,button);
     int elem_pos = choice-ED_BUTTON_ELEM;
@@ -1792,14 +1914,8 @@ void LevelEd(int mx, int my, int button)
       int step = (button == 1 ? 1 : button == 2 ? 5 : 10);
       int i;
 
-#if 0
-      step = (button==1 ? MAX_ELEM_X : button==2 ? 5*MAX_ELEM_X :
-             elements_in_list);
-      element_shift += (choice==ED_BUTTON_EUP ? -step : step);
-#else
       step = step * MAX_ELEM_X * (choice == ED_BUTTON_EUP ? -1 : +1);
       element_shift += step;
-#endif
 
       if (element_shift<0)
        element_shift = 0;
@@ -1829,6 +1945,9 @@ void LevelEd(int mx, int my, int button)
          DrawPropertiesWindow();
       }
     }
+#endif
+
+
   
     if (edit_mode == ED_MODE_DRAWING)  /********** EDIT-FENSTER **********/
     {
@@ -3678,7 +3797,7 @@ static void HandleControlButtons(struct GadgetInfo *gi)
   int new_element;
   int player_present = FALSE;
   int level_changed = FALSE;
-  int x, y;
+  int i, x, y;
 
   new_element = (button == 1 ? new_element1 :
                 button == 2 ? new_element2 :
@@ -3794,6 +3913,29 @@ static void HandleControlButtons(struct GadgetInfo *gi)
       DrawMiniLevel(level_xpos, level_ypos);
       break;
 
+    case ED_CTRL_ID_ELEMENTLIST_UP:
+    case ED_CTRL_ID_ELEMENTLIST_DOWN:
+      step *= (id == ED_CTRL_ID_ELEMENTLIST_UP ? -1 : +1);
+      element_shift += step * ED_ELEMENTLIST_BUTTONS_HORIZ;
+
+      if (element_shift < 0)
+       element_shift = 0;
+      if (element_shift > elements_in_list - ED_NUM_ELEMENTLIST_BUTTONS)
+       element_shift = elements_in_list - ED_NUM_ELEMENTLIST_BUTTONS;
+
+      for (i=0; i<ED_NUM_ELEMENTLIST_BUTTONS; i++)
+      {
+       int gadget_id = ED_CTRL_ID_ELEMENTLIST_FIRST + i;
+       struct GadgetInfo *gi = level_editor_gadget[gadget_id];
+       struct GadgetDesign *design = &gi->deco.design;
+
+       UnmapGadget(gi);
+       getMiniGraphicSource(el2gfx(editor_element[element_shift + i]),
+                            &design->pixmap, &design->x, &design->y);
+       MapGadget(gi);
+      }
+      break;
+
     case ED_CTRL_ID_WRAP_LEFT:
       WrapLevel(-step, 0);
       break;
index 73cab1164f2c8c48b934128ce355bf0f85784376..c1691e61cb63635b48a9a71af671672b8ee2c6e5 100644 (file)
@@ -4887,18 +4887,18 @@ static struct
 
 void CreateGameButtons()
 {
-  Pixmap gd_pixmap = pix[PIX_DOOR];
-  struct GadgetInfo *gi;
-  unsigned long event_mask;
   int i;
 
   for (i=0; i<NUM_GAME_BUTTONS; i++)
   {
-    int id = i;
-    int gd_xoffset, gd_yoffset;
-    int gd_x1, gd_x2, gd_y1, gd_y2;
+    Pixmap gd_pixmap = pix[PIX_DOOR];
+    struct GadgetInfo *gi;
     int button_type;
     boolean checked;
+    unsigned long event_mask;
+    int gd_xoffset, gd_yoffset;
+    int gd_x1, gd_x2, gd_y1, gd_y2;
+    int id = i;
 
     gd_xoffset = gamebutton_info[i].x;
     gd_yoffset = gamebutton_info[i].y;
index b92780b6e32130eee8eb92defdc08e2b35c9b0ff..634542b53c5a41063f191a631b713719f432fe56 100644 (file)
@@ -81,8 +81,8 @@ void OpenAll(int argc, char *argv[])
   XFlush(display);
 
   InitGfx();
-  InitGadgets();
   InitElementProperties();
+  InitGadgets();
 
   DrawMainMenu();
 
index 9bf4a8c5fb8c5458b20de9c10c07bf088910f459..15a8dc2098973ee82bf3654264fac7f5e4a7657d 100644 (file)
@@ -324,15 +324,15 @@ static struct
 
 void CreateTapeButtons()
 {
-  Pixmap gd_pixmap = pix[PIX_DOOR];
-  struct GadgetInfo *gi;
   int i;
 
   for (i=0; i<NUM_TAPE_BUTTONS; i++)
   {
-    int id = i;
+    Pixmap gd_pixmap = pix[PIX_DOOR];
+    struct GadgetInfo *gi;
     int gd_xoffset, gd_yoffset;
     int gd_x1, gd_x2, gd_y;
+    int id = i;
 
     gd_xoffset = tapebutton_info[i].x;
     gd_yoffset = tapebutton_info[i].y;
index 60fa3fe9b6c20bb79283fe22d558d6b96095f472..a7fa785659c5dd705e2496d73ee4c8b87098accc 100644 (file)
@@ -775,6 +775,38 @@ void DrawMiniGraphic(int x, int y, int graphic)
   MarkTileDirty(x/2, y/2);
 }
 
+void getMiniGraphicSource(int graphic, Pixmap *pixmap, int *x, int *y)
+{
+  if (graphic >= GFX_START_ROCKSSCREEN && graphic <= GFX_END_ROCKSSCREEN)
+  {
+    graphic -= GFX_START_ROCKSSCREEN;
+    *pixmap = pix[PIX_BACK];
+    *x = MINI_GFX_STARTX + (graphic % MINI_GFX_PER_LINE) * MINI_TILEX;
+    *y = MINI_GFX_STARTY + (graphic / MINI_GFX_PER_LINE) * MINI_TILEY;
+  }
+  else if (graphic >= GFX_START_ROCKSMORE && graphic <= GFX_END_ROCKSMORE)
+  {
+    graphic -= GFX_START_ROCKSMORE;
+    *pixmap = pix[PIX_MORE];
+    *x = MINI_MORE_STARTX + (graphic % MINI_MORE_PER_LINE) * MINI_TILEX;
+    *y = MINI_MORE_STARTY + (graphic / MINI_MORE_PER_LINE) * MINI_TILEY;
+  }
+  else if (graphic >= GFX_START_ROCKSFONT && graphic <= GFX_END_ROCKSFONT)
+  {
+    graphic -= GFX_START_ROCKSFONT;
+    *pixmap = pix[PIX_SMALLFONT];
+    *x = (graphic % FONT_CHARS_PER_LINE) * FONT4_XSIZE;
+    *y = ((graphic / FONT_CHARS_PER_LINE) * FONT4_YSIZE +
+         FC_SPECIAL2 * FONT2_YSIZE * FONT_LINES_PER_FONT);
+  }
+  else
+  {
+    *pixmap = pix[PIX_MORE];
+    *x = MINI_MORE_STARTX;
+    *y = MINI_MORE_STARTY;
+  }
+}
+
 void DrawMiniGraphicExt(Drawable d, GC gc, int x, int y, int graphic)
 {
   if (graphic >= GFX_START_ROCKSSCREEN && graphic <= GFX_END_ROCKSSCREEN)
index e83ebfa9a7ffa3aa78254dea36492d5cf1a13ae1..1ec4c65dad57d8f4ff553a89d53aafd7804d6e48 100644 (file)
@@ -77,6 +77,7 @@ void DrawGraphicExt(Drawable, GC, int, int, int);
 void DrawGraphicThruMask(int, int, int);
 void DrawGraphicThruMaskExt(Drawable, int, int, int);
 void DrawMiniGraphic(int, int, int);
+void getMiniGraphicSource(int, Pixmap *, int *, int *);
 void DrawMiniGraphicExt(Drawable, GC, int, int, int);
 void DrawGraphicShifted(int, int, int, int, int, int, int);
 void DrawGraphicShiftedThruMask(int, int, int, int, int, int);