Changeset 667 for abuse/trunk/src/imlib/image.cpp
- Timestamp:
- May 16, 2011, 2:37:15 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
abuse/trunk/src/imlib/image.cpp
r665 r667 371 371 372 372 im->Unlock(); 373 Unlock();374 }375 376 void image::PutPartMasked(image *im, vec2i pos, image *mask, vec2i mpos,377 vec2i aa, vec2i bb)378 {379 CHECK(aa < bb);380 381 if (m_special)382 {383 vec2i caa, cbb;384 m_special->GetClip(caa, cbb);385 386 if (!(pos < cbb && pos > aa - bb))387 return;388 389 aa += Max(caa - pos, vec2i(0));390 pos += Max(caa - pos, vec2i(0));391 bb = Min(bb, cbb - pos + aa);392 }393 else if (!(pos <= m_size && pos >= -aa))394 return;395 396 vec2i mask_size = mask->Size();397 398 if (!(pos < m_size && aa < im->m_size && mpos < mask_size && aa < bb))399 return;400 401 bb = Min(bb, im->m_size);402 403 vec2i span = bb - aa;404 span = Min(span, m_size - pos);405 AddDirty(pos.x, pos.y, pos.x + span.x, pos.y + span.y);406 407 Lock();408 mask->Lock();409 im->Lock();410 411 for (int j = 0; j < span.y; j++)412 {413 uint8_t *dst = scan_line(pos.y + j) + pos.x;414 uint8_t *src = im->scan_line(aa.y + j) + aa.x;415 uint8_t *pg3 = mask->scan_line(mpos.y) + mpos.x;416 417 if (++mpos.y >= mask_size.y) // wrap mask y around418 mpos.y = 0;419 420 for (int i = 0; i < span.x; i++, dst++, src++, pg3++)421 {422 if (mpos.x + i >= mask_size.x) // wrap mask x around423 pg3 -= mask_size.x;424 425 if (pg3[mpos.x + i]) // check to make sure not 0 before putting426 *dst = *src;427 }428 }429 430 im->Unlock();431 mask->Unlock();432 373 Unlock(); 433 374 }
Note: See TracChangeset
for help on using the changeset viewer.