+int elements_in_list = sizeof(editor_element)/sizeof(int);
+
+void ScrollMiniLevel(int from_x, int from_y, int scroll)
+{
+ int x,y;
+ int dx = (scroll==ED_SCROLL_LEFT ? -1 : scroll==ED_SCROLL_RIGHT ? 1 : 0);
+ int dy = (scroll==ED_SCROLL_UP ? -1 : scroll==ED_SCROLL_DOWN ? 1 : 0);
+
+ XCopyArea(display,drawto,drawto,gc,
+ SX+MINI_TILEX*(dx==-1),SY+MINI_TILEY*(dy==-1),
+ SXSIZE-MINI_TILEX*ABS(dx),SYSIZE-MINI_TILEY*ABS(dy),
+ SX+MINI_TILEX*(dx==+1),SY+MINI_TILEY*(dy==+1));
+ if (dx)
+ {
+ x = (dx==1 ? 0 : 2*SCR_FIELDX-1);
+ for(y=0;y<2*SCR_FIELDY;y++)
+ DrawMiniElementOrWall(x,y,from_x,from_y);
+ }
+ else if (dy)
+ {
+ y = (dy==1 ? 0 : 2*SCR_FIELDY-1);
+ for(x=0;x<2*SCR_FIELDX;x++)
+ DrawMiniElementOrWall(x,y,from_x,from_y);
+ }
+
+ redraw_mask |= REDRAW_FIELD;
+ BackToFront();
+}
+
+void CreateLevelEditorControlButtons()
+{
+ int i;
+
+ if (control_button_gadgets_created)
+ return;
+
+ for (i=0; i<ED_NUM_CTRL_BUTTONS; i++)
+ {
+ Pixmap gd_pixmap = pix[PIX_DOOR];
+ struct GadgetInfo *gi;
+ int gd_xoffset, gd_yoffset;
+ int gd_x1, gd_x2, gd_y;
+ int width, height;
+ unsigned long event_mask;
+
+ if (i < ED_NUM_CTRL1_BUTTONS)
+ {
+ int x = i % ED_CTRL1_BUTTONS_HORIZ;
+ int y = i / ED_CTRL1_BUTTONS_HORIZ;
+
+ gd_xoffset = ED_CTRL1_BUTTONS_XPOS + x * ED_CTRL1_BUTTON_XSIZE;
+ gd_yoffset = ED_CTRL1_BUTTONS_YPOS + y * ED_CTRL1_BUTTON_YSIZE;
+ width = ED_CTRL1_BUTTON_XSIZE;
+ height = ED_CTRL1_BUTTON_YSIZE;
+ }
+ else
+ {
+ int x = (i - ED_NUM_CTRL1_BUTTONS) % ED_CTRL2_BUTTONS_HORIZ;
+ int y = (i - ED_NUM_CTRL1_BUTTONS) / ED_CTRL2_BUTTONS_HORIZ;
+
+ gd_xoffset = ED_CTRL2_BUTTONS_XPOS + x * ED_CTRL2_BUTTON_XSIZE;
+ gd_yoffset = ED_CTRL2_BUTTONS_YPOS + y * ED_CTRL2_BUTTON_YSIZE;
+ width = ED_CTRL2_BUTTON_XSIZE;
+ height = ED_CTRL2_BUTTON_YSIZE;
+ }
+
+ gd_x1 = DOOR_GFX_PAGEX8 + gd_xoffset;
+ gd_x2 = DOOR_GFX_PAGEX7 + gd_xoffset;
+ gd_y = DOOR_GFX_PAGEY1 + ED_CTRL_BUTTONS_GFX_YPOS + gd_yoffset;
+
+ if (i == ED_CTRL_ID_WRAP_LEFT ||
+ i == ED_CTRL_ID_WRAP_RIGHT ||
+ i == ED_CTRL_ID_WRAP_UP ||
+ i == ED_CTRL_ID_WRAP_DOWN)
+ event_mask = GD_EVENT_PRESSED;
+ else
+ event_mask = GD_EVENT_RELEASED;
+
+ gi = CreateGadget(GDI_X, EX + gd_xoffset,
+ GDI_Y, EY + gd_yoffset,
+ 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_y,
+ GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y,
+ GDI_EVENT_MASK, event_mask,
+ GDI_CALLBACK, HandleControlButtons,
+ GDI_END);
+
+ if (gi == NULL)
+ Error(ERR_EXIT, "cannot create gadget");
+
+ control_button_gadget[i] = gi;
+ }
+
+ control_button_gadgets_created = TRUE;
+}
+
+void MapLevelEditorControlButtons()
+{
+ int i;
+
+ if (!control_button_gadgets_created)
+ CreateLevelEditorControlButtons();
+
+ for (i=0; i<ED_NUM_CTRL_BUTTONS; i++)
+ MapGadget(control_button_gadget[i]);
+
+ control_button_gadgets_mapped = TRUE;
+}
+
+void UnmapLevelEditorControlButtons()
+{
+ int i;
+
+ if (!control_button_gadgets_created || !control_button_gadgets_mapped)
+ return;
+
+ for (i=0; i<ED_NUM_CTRL_BUTTONS; i++)
+ UnmapGadget(control_button_gadget[i]);
+
+ control_button_gadgets_mapped = FALSE;
+}