127
127
if (wrap_around == TRUE)
129
129
if (offset_x >= 0 && offset_y >= 0)
131
src_x = gimp_item_width (item) - offset_x;
132
src_y = gimp_item_height (item) - offset_y;
131
src_x = gimp_item_width (item) - offset_x;
132
src_y = gimp_item_height (item) - offset_y;
134
134
else if (offset_x >= 0 && offset_y < 0)
136
src_x = gimp_item_width (item) - offset_x;
136
src_x = gimp_item_width (item) - offset_x;
139
139
else if (offset_x < 0 && offset_y >= 0)
142
src_y = gimp_item_height (item) - offset_y;
142
src_y = gimp_item_height (item) - offset_y;
144
144
else if (offset_x < 0 && offset_y < 0)
150
150
dest_x = (src_x + offset_x) % gimp_item_width (item);
152
dest_x = gimp_item_width (item) + dest_x;
152
dest_x = gimp_item_width (item) + dest_x;
154
154
dest_y = (src_y + offset_y) % gimp_item_height (item);
156
dest_y = gimp_item_height (item) + dest_y;
156
dest_y = gimp_item_height (item) + dest_y;
158
158
/* intersecting region */
159
159
if (offset_x != 0 && offset_y != 0)
161
pixel_region_init (&srcPR, gimp_drawable_data (drawable),
163
ABS (offset_x), ABS (offset_y),
165
pixel_region_init (&destPR, new_tiles,
167
ABS (offset_x), ABS (offset_y),
169
copy_region (&srcPR, &destPR);
161
pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
163
ABS (offset_x), ABS (offset_y),
165
pixel_region_init (&destPR, new_tiles,
167
ABS (offset_x), ABS (offset_y),
169
copy_region (&srcPR, &destPR);
173
173
if (offset_x != 0)
177
pixel_region_init (&srcPR, gimp_drawable_data (drawable),
178
src_x, 0, ABS (offset_x),
179
gimp_item_height (item) - ABS (offset_y),
181
pixel_region_init (&destPR, new_tiles,
182
dest_x, dest_y + offset_y,
184
gimp_item_height (item) - ABS (offset_y),
187
else if (offset_y < 0)
189
pixel_region_init (&srcPR, gimp_drawable_data (drawable),
190
src_x, src_y - offset_y,
192
gimp_item_height (item) - ABS (offset_y),
194
pixel_region_init (&destPR, new_tiles,
197
gimp_item_height (item) - ABS (offset_y),
177
pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
178
src_x, 0, ABS (offset_x),
179
gimp_item_height (item) - ABS (offset_y),
181
pixel_region_init (&destPR, new_tiles,
182
dest_x, dest_y + offset_y,
184
gimp_item_height (item) - ABS (offset_y),
187
else if (offset_y < 0)
189
pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
190
src_x, src_y - offset_y,
192
gimp_item_height (item) - ABS (offset_y),
194
pixel_region_init (&destPR, new_tiles,
197
gimp_item_height (item) - ABS (offset_y),
201
copy_region (&srcPR, &destPR);
201
copy_region (&srcPR, &destPR);
205
205
if (offset_y != 0)
209
pixel_region_init (&srcPR, gimp_drawable_data (drawable),
211
gimp_item_width (item) - ABS (offset_x),
212
ABS (offset_y), FALSE);
213
pixel_region_init (&destPR, new_tiles, dest_x + offset_x, dest_y,
214
gimp_item_width (item) - ABS (offset_x),
215
ABS (offset_y), TRUE);
217
else if (offset_x < 0)
219
pixel_region_init (&srcPR, gimp_drawable_data (drawable),
220
src_x - offset_x, src_y,
221
gimp_item_width (item) - ABS (offset_x),
222
ABS (offset_y), FALSE);
223
pixel_region_init (&destPR, new_tiles, 0, dest_y,
224
gimp_item_width (item) - ABS (offset_x),
225
ABS (offset_y), TRUE);
209
pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
211
gimp_item_width (item) - ABS (offset_x),
212
ABS (offset_y), FALSE);
213
pixel_region_init (&destPR, new_tiles, dest_x + offset_x, dest_y,
214
gimp_item_width (item) - ABS (offset_x),
215
ABS (offset_y), TRUE);
217
else if (offset_x < 0)
219
pixel_region_init (&srcPR, gimp_drawable_get_tiles (drawable),
220
src_x - offset_x, src_y,
221
gimp_item_width (item) - ABS (offset_x),
222
ABS (offset_y), FALSE);
223
pixel_region_init (&destPR, new_tiles, 0, dest_y,
224
gimp_item_width (item) - ABS (offset_x),
225
ABS (offset_y), TRUE);
228
copy_region (&srcPR, &destPR);
228
copy_region (&srcPR, &destPR);
231
231
/* Otherwise, fill the vacated regions */
234
234
if (fill_type == GIMP_OFFSET_BACKGROUND)
238
gimp_context_get_background (context, &color);
240
gimp_rgb_get_uchar (&color, &fill[0], &fill[1], &fill[2]);
242
if (gimp_drawable_has_alpha (drawable))
243
fill[gimp_drawable_bytes (drawable) - 1] = OPAQUE_OPACITY;
238
gimp_context_get_background (context, &color);
240
gimp_rgb_get_uchar (&color, &fill[0], &fill[1], &fill[2]);
242
if (gimp_drawable_has_alpha (drawable))
243
fill[gimp_drawable_bytes (drawable) - 1] = OPAQUE_OPACITY;
246
246
if (offset_x >= 0 && offset_y >= 0)
251
251
else if (offset_x >= 0 && offset_y < 0)
254
dest_y = gimp_item_height (item) + offset_y;
254
dest_y = gimp_item_height (item) + offset_y;
256
256
else if (offset_x < 0 && offset_y >= 0)
258
dest_x = gimp_item_width (item) + offset_x;
258
dest_x = gimp_item_width (item) + offset_x;
261
261
else if (offset_x < 0 && offset_y < 0)
263
dest_x = gimp_item_width (item) + offset_x;
264
dest_y = gimp_item_height (item) + offset_y;
263
dest_x = gimp_item_width (item) + offset_x;
264
dest_y = gimp_item_height (item) + offset_y;
267
267
/* intersecting region */
268
268
if (offset_x != 0 && offset_y != 0)
270
pixel_region_init (&destPR, new_tiles, dest_x, dest_y,
271
ABS (offset_x), ABS (offset_y), TRUE);
272
color_region (&destPR, fill);
270
pixel_region_init (&destPR, new_tiles, dest_x, dest_y,
271
ABS (offset_x), ABS (offset_y), TRUE);
272
color_region (&destPR, fill);
276
276
if (offset_x != 0)
279
pixel_region_init (&destPR, new_tiles,
280
dest_x, dest_y + offset_y,
282
gimp_item_height (item) - ABS (offset_y),
284
else if (offset_y < 0)
285
pixel_region_init (&destPR, new_tiles,
288
gimp_item_height (item) - ABS (offset_y),
279
pixel_region_init (&destPR, new_tiles,
280
dest_x, dest_y + offset_y,
282
gimp_item_height (item) - ABS (offset_y),
284
else if (offset_y < 0)
285
pixel_region_init (&destPR, new_tiles,
288
gimp_item_height (item) - ABS (offset_y),
291
color_region (&destPR, fill);
291
color_region (&destPR, fill);
295
295
if (offset_y != 0)
298
pixel_region_init (&destPR, new_tiles,
301
gimp_item_width (item) - ABS (offset_x),
304
else if (offset_x < 0)
305
pixel_region_init (&destPR, new_tiles,
307
gimp_item_width (item) - ABS (offset_x),
298
pixel_region_init (&destPR, new_tiles,
301
gimp_item_width (item) - ABS (offset_x),
304
else if (offset_x < 0)
305
pixel_region_init (&destPR, new_tiles,
307
gimp_item_width (item) - ABS (offset_x),
311
color_region (&destPR, fill);
311
color_region (&destPR, fill);
315
315
gimp_drawable_set_tiles (drawable, gimp_item_is_attached (item),