+ int cursor_x = (mode == CB_DELETE_OLD_CURSOR ? last_cursor_x : from_x);
+ int cursor_y = (mode == CB_DELETE_OLD_CURSOR ? last_cursor_y : from_y);
+ int cursor_from_x = cursor_x - brush_width / 2;
+ int cursor_from_y = cursor_y - brush_height / 2;
+ int border_from_x = cursor_x, border_from_y = cursor_y;
+ int border_to_x = cursor_x, border_to_y = cursor_y;
+
+ if (mode != CB_DELETE_OLD_CURSOR && delete_old_brush)
+ CopyBrushExt(0, 0, 0, 0, CB_DELETE_OLD_CURSOR);
+
+ if (!IN_LEV_FIELD(cursor_x + level_xpos, cursor_y + level_ypos))
+ {
+ delete_old_brush = FALSE;
+ return;
+ }
+
+ for (y=0; y<brush_height; y++)
+ {
+ for (x=0; x<brush_width; x++)
+ {
+ int sx = cursor_from_x + x;
+ int sy = cursor_from_y + y;
+ int lx = sx + level_xpos;
+ int ly = sy + level_ypos;
+ int element = (mode == CB_DELETE_OLD_CURSOR ? -1 : brush_buffer[x][y]);
+ boolean change_level = (mode == CB_BRUSH_TO_LEVEL);
+
+ if (IN_LEV_FIELD(lx, ly) &&
+ sx >=0 && sx < ED_FIELDX && sy >=0 && sy < ED_FIELDY)
+ {
+ if (sx < border_from_x)
+ border_from_x = sx;
+ else if (sx > border_to_x)
+ border_to_x = sx;
+ if (sy < border_from_y)
+ border_from_y = sy;
+ else if (sy > border_to_y)
+ border_to_y = sy;
+
+ DrawLineElement(sx, sy, element, change_level);
+ }
+ }
+ }
+
+ /*
+ printf("%d, %d - %d, %d in level and screen\n",
+ border_from_x, border_from_y, border_to_x, border_to_y);
+ */
+
+ if (mode != CB_DELETE_OLD_CURSOR)
+ DrawAreaBorder(border_from_x, border_from_y, border_to_x, border_to_y);
+
+ if (mode == CB_BRUSH_TO_LEVEL)
+ CopyLevelToUndoBuffer(UNDO_IMMEDIATE);
+
+ last_cursor_x = cursor_x;
+ last_cursor_y = cursor_y;
+ delete_old_brush = TRUE;