1262 short *trailingEdges,
short *leadingEdges)
1264 short src_left_center;
1265 unsigned short *dst_row_offsets_lower;
1266 short radial_right_half_end;
1267 short half_source_width;
1268 short source_right_x;
1270 short wipe_row_count;
1271 short remaining_upper_rows;
1274 short top_center_row;
1275 int bands_processed;
1276 short *wipe_trailing_edge;
1277 short *wipe_leading_widths;
1278 short wipe_left_half_extent;
1279 unsigned short *lower_src_row_offsets;
1280 short lower_center_offset;
1282 short dst_midpoint_left;
1283 unsigned short *src_top_rows;
1284 unsigned short *destination_top_rows;
1286 wipe_width = source->
right - source->
left + 1;
1287 half_source_width = (wipe_width + 1) >> 1;
1288 wipe_left_half_extent = half_source_width - 1;
1289 radial_right_half_end = wipe_left_half_extent;
1290 wipe_row_count = source->
bottom - source->
top + 1;
1291 remaining_upper_rows = (wipe_row_count + 1) >> 1;
1292 top_center_row = remaining_upper_rows - 1;
1293 lower_center_offset = wipe_row_count >> 1;
1294 src_left_center = source->
left + wipe_left_half_extent;
1295 source_right_x = source->
left + radial_right_half_end;
1297 (source->
top + top_center_row);
1299 (source->
top + lower_center_offset);
1300 dst_midpoint_left = destination->
left + wipe_left_half_extent;
1301 dest_right_x = destination->
left + radial_right_half_end;
1302 destination_top_rows = destination->
rowOffsets +
1303 (destination->
top + top_center_row);
1304 dst_row_offsets_lower = destination->
rowOffsets +
1305 (destination->
top + lower_center_offset);
1306 bands_processed = 0;
1307 wipe_leading_widths = leadingEdges;
1308 wipe_trailing_edge = trailingEdges;
1310 while ((lead_width = *wipe_leading_widths) >= 0) {
1311 if (lead_width >= half_source_width)
1312 lead_width = half_source_width - 1;
1313 if (*wipe_trailing_edge < half_source_width) {
1314 band_width = (short)(lead_width - *wipe_trailing_edge);
1315 memmove(destination->
pixels + dst_row_offsets_lower[bands_processed] +
1316 *wipe_trailing_edge + dest_right_x + 1,
1317 source->
pixels + lower_src_row_offsets[bands_processed] +
1318 *wipe_trailing_edge + source_right_x + 1,
1320 memmove(destination->
pixels +
1321 (dst_row_offsets_lower[bands_processed] + dst_midpoint_left -
1322 1 - *wipe_trailing_edge) - band_width,
1324 (lower_src_row_offsets[bands_processed] + src_left_center - 1 -
1325 *wipe_trailing_edge) - band_width,
1328 memmove(destination->
pixels + *(dst_row_offsets_lower - bands_processed - 1) +
1329 *wipe_trailing_edge + dest_right_x,
1330 source->
pixels + *(lower_src_row_offsets - bands_processed - 1) +
1331 *wipe_trailing_edge + source_right_x,
1333 memmove(destination->
pixels +
1334 (*(dst_row_offsets_lower - bands_processed - 1) +
1335 dst_midpoint_left - *wipe_trailing_edge) - band_width,
1337 (*(lower_src_row_offsets - bands_processed - 1) + src_left_center -
1338 *wipe_trailing_edge) - band_width,
1343 wipe_leading_widths++;
1344 wipe_trailing_edge++;
1345 remaining_upper_rows--;
1346 if (remaining_upper_rows == 0)
signed char InitializeViewportWipe(Viewport *source, Viewport *destination, int wipeType, short duration, short passFlags, void *workspace)