Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(213)

Side by Side Diff: core/fxge/dib/fx_dib_composite.cpp

Issue 2477443002: Remove FX_BOOL from core (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fxge/dib/dib_int.h ('k') | core/fxge/dib/fx_dib_convert.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "core/fxcodec/fx_codec.h" 7 #include "core/fxcodec/fx_codec.h"
8 #include "core/fxge/cfx_gemodule.h" 8 #include "core/fxge/cfx_gemodule.h"
9 #include "core/fxge/dib/dib_int.h" 9 #include "core/fxge/dib/dib_int.h"
10 #include "core/fxge/ge/cfx_cliprgn.h" 10 #include "core/fxge/ge/cfx_cliprgn.h"
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 int blend_type, 300 int blend_type,
301 const uint8_t* clip_scan, 301 const uint8_t* clip_scan,
302 const uint8_t* src_alpha_scan, 302 const uint8_t* src_alpha_scan,
303 uint8_t* dst_alpha_scan, 303 uint8_t* dst_alpha_scan,
304 void* pIccTransform) { 304 void* pIccTransform) {
305 CCodec_IccModule* pIccModule = nullptr; 305 CCodec_IccModule* pIccModule = nullptr;
306 if (pIccTransform) 306 if (pIccTransform)
307 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); 307 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
308 308
309 if (blend_type) { 309 if (blend_type) {
310 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 310 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
311 if (src_alpha_scan) { 311 if (src_alpha_scan) {
312 for (int col = 0; col < pixel_count; col++) { 312 for (int col = 0; col < pixel_count; col++) {
313 uint8_t back_alpha = *dst_alpha_scan; 313 uint8_t back_alpha = *dst_alpha_scan;
314 if (back_alpha == 0) { 314 if (back_alpha == 0) {
315 int src_alpha = *src_alpha_scan++; 315 int src_alpha = *src_alpha_scan++;
316 if (clip_scan) 316 if (clip_scan)
317 src_alpha = clip_scan[col] * src_alpha / 255; 317 src_alpha = clip_scan[col] * src_alpha / 255;
318 318
319 if (src_alpha) { 319 if (src_alpha) {
320 if (pIccTransform) { 320 if (pIccTransform) {
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 int blend_type, 504 int blend_type,
505 const uint8_t* clip_scan, 505 const uint8_t* clip_scan,
506 const uint8_t* src_alpha_scan, 506 const uint8_t* src_alpha_scan,
507 void* pIccTransform) { 507 void* pIccTransform) {
508 CCodec_IccModule* pIccModule = nullptr; 508 CCodec_IccModule* pIccModule = nullptr;
509 uint8_t gray; 509 uint8_t gray;
510 if (pIccTransform) 510 if (pIccTransform)
511 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); 511 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
512 512
513 if (blend_type) { 513 if (blend_type) {
514 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 514 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
515 if (src_alpha_scan) { 515 if (src_alpha_scan) {
516 for (int col = 0; col < pixel_count; col++) { 516 for (int col = 0; col < pixel_count; col++) {
517 int src_alpha = *src_alpha_scan++; 517 int src_alpha = *src_alpha_scan++;
518 if (clip_scan) 518 if (clip_scan)
519 src_alpha = clip_scan[col] * src_alpha / 255; 519 src_alpha = clip_scan[col] * src_alpha / 255;
520 520
521 if (src_alpha) { 521 if (src_alpha) {
522 if (pIccTransform) 522 if (pIccTransform)
523 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); 523 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
524 else 524 else
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 int pixel_count, 600 int pixel_count,
601 int blend_type, 601 int blend_type,
602 const uint8_t* clip_scan, 602 const uint8_t* clip_scan,
603 void* pIccTransform) { 603 void* pIccTransform) {
604 CCodec_IccModule* pIccModule = nullptr; 604 CCodec_IccModule* pIccModule = nullptr;
605 uint8_t gray; 605 uint8_t gray;
606 if (pIccTransform) { 606 if (pIccTransform) {
607 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); 607 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
608 } 608 }
609 if (blend_type) { 609 if (blend_type) {
610 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 610 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
611 for (int col = 0; col < pixel_count; col++) { 611 for (int col = 0; col < pixel_count; col++) {
612 if (pIccTransform) { 612 if (pIccTransform) {
613 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); 613 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
614 } else { 614 } else {
615 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); 615 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
616 } 616 }
617 if (bNonseparableBlend) 617 if (bNonseparableBlend)
618 gray = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; 618 gray = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
619 else 619 else
620 gray = Blend(blend_type, *dest_scan, gray); 620 gray = Blend(blend_type, *dest_scan, gray);
(...skipping 29 matching lines...) Expand all
650 int pixel_count, 650 int pixel_count,
651 int blend_type, 651 int blend_type,
652 const uint8_t* clip_scan, 652 const uint8_t* clip_scan,
653 uint8_t* dest_alpha_scan, 653 uint8_t* dest_alpha_scan,
654 void* pIccTransform) { 654 void* pIccTransform) {
655 CCodec_IccModule* pIccModule = nullptr; 655 CCodec_IccModule* pIccModule = nullptr;
656 if (pIccTransform) { 656 if (pIccTransform) {
657 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); 657 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
658 } 658 }
659 if (blend_type) { 659 if (blend_type) {
660 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 660 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
661 for (int col = 0; col < pixel_count; col++) { 661 for (int col = 0; col < pixel_count; col++) {
662 int back_alpha = *dest_alpha_scan; 662 int back_alpha = *dest_alpha_scan;
663 if (back_alpha == 0) { 663 if (back_alpha == 0) {
664 if (pIccTransform) { 664 if (pIccTransform) {
665 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1); 665 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
666 } else { 666 } else {
667 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); 667 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
668 } 668 }
669 dest_scan++; 669 dest_scan++;
670 dest_alpha_scan++; 670 dest_alpha_scan++;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 } 740 }
741 741
742 void CompositeRow_Argb2Argb(uint8_t* dest_scan, 742 void CompositeRow_Argb2Argb(uint8_t* dest_scan,
743 const uint8_t* src_scan, 743 const uint8_t* src_scan,
744 int pixel_count, 744 int pixel_count,
745 int blend_type, 745 int blend_type,
746 const uint8_t* clip_scan, 746 const uint8_t* clip_scan,
747 uint8_t* dest_alpha_scan, 747 uint8_t* dest_alpha_scan,
748 const uint8_t* src_alpha_scan) { 748 const uint8_t* src_alpha_scan) {
749 int blended_colors[3]; 749 int blended_colors[3];
750 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 750 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
751 if (!dest_alpha_scan) { 751 if (!dest_alpha_scan) {
752 if (!src_alpha_scan) { 752 if (!src_alpha_scan) {
753 uint8_t back_alpha = 0; 753 uint8_t back_alpha = 0;
754 for (int col = 0; col < pixel_count; col++) { 754 for (int col = 0; col < pixel_count; col++) {
755 back_alpha = dest_scan[3]; 755 back_alpha = dest_scan[3];
756 if (back_alpha == 0) { 756 if (back_alpha == 0) {
757 if (clip_scan) { 757 if (clip_scan) {
758 int src_alpha = clip_scan[col] * src_scan[3] / 255; 758 int src_alpha = clip_scan[col] * src_scan[3] / 255;
759 FXARGB_SETDIB(dest_scan, (FXARGB_GETDIB(src_scan) & 0xffffff) | 759 FXARGB_SETDIB(dest_scan, (FXARGB_GETDIB(src_scan) & 0xffffff) |
760 (src_alpha << 24)); 760 (src_alpha << 24));
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 } 963 }
964 } 964 }
965 965
966 void CompositeRow_Rgb2Argb_Blend_NoClip(uint8_t* dest_scan, 966 void CompositeRow_Rgb2Argb_Blend_NoClip(uint8_t* dest_scan,
967 const uint8_t* src_scan, 967 const uint8_t* src_scan,
968 int width, 968 int width,
969 int blend_type, 969 int blend_type,
970 int src_Bpp, 970 int src_Bpp,
971 uint8_t* dest_alpha_scan) { 971 uint8_t* dest_alpha_scan) {
972 int blended_colors[3]; 972 int blended_colors[3];
973 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 973 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
974 int src_gap = src_Bpp - 3; 974 int src_gap = src_Bpp - 3;
975 if (dest_alpha_scan) { 975 if (dest_alpha_scan) {
976 for (int col = 0; col < width; col++) { 976 for (int col = 0; col < width; col++) {
977 uint8_t back_alpha = *dest_alpha_scan; 977 uint8_t back_alpha = *dest_alpha_scan;
978 if (back_alpha == 0) { 978 if (back_alpha == 0) {
979 *dest_scan++ = *src_scan++; 979 *dest_scan++ = *src_scan++;
980 *dest_scan++ = *src_scan++; 980 *dest_scan++ = *src_scan++;
981 *dest_scan++ = *src_scan++; 981 *dest_scan++ = *src_scan++;
982 *dest_alpha_scan++ = 0xff; 982 *dest_alpha_scan++ = 0xff;
983 src_scan += src_gap; 983 src_scan += src_gap;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 } 1032 }
1033 1033
1034 void CompositeRow_Rgb2Argb_Blend_Clip(uint8_t* dest_scan, 1034 void CompositeRow_Rgb2Argb_Blend_Clip(uint8_t* dest_scan,
1035 const uint8_t* src_scan, 1035 const uint8_t* src_scan,
1036 int width, 1036 int width,
1037 int blend_type, 1037 int blend_type,
1038 int src_Bpp, 1038 int src_Bpp,
1039 const uint8_t* clip_scan, 1039 const uint8_t* clip_scan,
1040 uint8_t* dest_alpha_scan) { 1040 uint8_t* dest_alpha_scan) {
1041 int blended_colors[3]; 1041 int blended_colors[3];
1042 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 1042 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
1043 int src_gap = src_Bpp - 3; 1043 int src_gap = src_Bpp - 3;
1044 if (dest_alpha_scan) { 1044 if (dest_alpha_scan) {
1045 for (int col = 0; col < width; col++) { 1045 for (int col = 0; col < width; col++) {
1046 int src_alpha = *clip_scan++; 1046 int src_alpha = *clip_scan++;
1047 uint8_t back_alpha = *dest_alpha_scan; 1047 uint8_t back_alpha = *dest_alpha_scan;
1048 if (back_alpha == 0) { 1048 if (back_alpha == 0) {
1049 *dest_scan++ = *src_scan++; 1049 *dest_scan++ = *src_scan++;
1050 *dest_scan++ = *src_scan++; 1050 *dest_scan++ = *src_scan++;
1051 *dest_scan++ = *src_scan++; 1051 *dest_scan++ = *src_scan++;
1052 src_scan += src_gap; 1052 src_scan += src_gap;
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1215 } 1215 }
1216 1216
1217 void CompositeRow_Argb2Rgb_Blend(uint8_t* dest_scan, 1217 void CompositeRow_Argb2Rgb_Blend(uint8_t* dest_scan,
1218 const uint8_t* src_scan, 1218 const uint8_t* src_scan,
1219 int width, 1219 int width,
1220 int blend_type, 1220 int blend_type,
1221 int dest_Bpp, 1221 int dest_Bpp,
1222 const uint8_t* clip_scan, 1222 const uint8_t* clip_scan,
1223 const uint8_t* src_alpha_scan) { 1223 const uint8_t* src_alpha_scan) {
1224 int blended_colors[3]; 1224 int blended_colors[3];
1225 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 1225 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
1226 int dest_gap = dest_Bpp - 3; 1226 int dest_gap = dest_Bpp - 3;
1227 if (src_alpha_scan) { 1227 if (src_alpha_scan) {
1228 for (int col = 0; col < width; col++) { 1228 for (int col = 0; col < width; col++) {
1229 uint8_t src_alpha; 1229 uint8_t src_alpha;
1230 if (clip_scan) { 1230 if (clip_scan) {
1231 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; 1231 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255;
1232 } else { 1232 } else {
1233 src_alpha = *src_alpha_scan++; 1233 src_alpha = *src_alpha_scan++;
1234 } 1234 }
1235 if (src_alpha == 0) { 1235 if (src_alpha == 0) {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1348 } 1348 }
1349 } 1349 }
1350 1350
1351 void CompositeRow_Rgb2Rgb_Blend_NoClip(uint8_t* dest_scan, 1351 void CompositeRow_Rgb2Rgb_Blend_NoClip(uint8_t* dest_scan,
1352 const uint8_t* src_scan, 1352 const uint8_t* src_scan,
1353 int width, 1353 int width,
1354 int blend_type, 1354 int blend_type,
1355 int dest_Bpp, 1355 int dest_Bpp,
1356 int src_Bpp) { 1356 int src_Bpp) {
1357 int blended_colors[3]; 1357 int blended_colors[3];
1358 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 1358 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
1359 int dest_gap = dest_Bpp - 3; 1359 int dest_gap = dest_Bpp - 3;
1360 int src_gap = src_Bpp - 3; 1360 int src_gap = src_Bpp - 3;
1361 for (int col = 0; col < width; col++) { 1361 for (int col = 0; col < width; col++) {
1362 if (bNonseparableBlend) { 1362 if (bNonseparableBlend) {
1363 RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); 1363 RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
1364 } 1364 }
1365 for (int color = 0; color < 3; color++) { 1365 for (int color = 0; color < 3; color++) {
1366 int back_color = *dest_scan; 1366 int back_color = *dest_scan;
1367 int src_color = *src_scan; 1367 int src_color = *src_scan;
1368 int blended = bNonseparableBlend 1368 int blended = bNonseparableBlend
1369 ? blended_colors[color] 1369 ? blended_colors[color]
1370 : Blend(blend_type, back_color, src_color); 1370 : Blend(blend_type, back_color, src_color);
1371 *dest_scan = blended; 1371 *dest_scan = blended;
1372 dest_scan++; 1372 dest_scan++;
1373 src_scan++; 1373 src_scan++;
1374 } 1374 }
1375 dest_scan += dest_gap; 1375 dest_scan += dest_gap;
1376 src_scan += src_gap; 1376 src_scan += src_gap;
1377 } 1377 }
1378 } 1378 }
1379 1379
1380 void CompositeRow_Rgb2Rgb_Blend_Clip(uint8_t* dest_scan, 1380 void CompositeRow_Rgb2Rgb_Blend_Clip(uint8_t* dest_scan,
1381 const uint8_t* src_scan, 1381 const uint8_t* src_scan,
1382 int width, 1382 int width,
1383 int blend_type, 1383 int blend_type,
1384 int dest_Bpp, 1384 int dest_Bpp,
1385 int src_Bpp, 1385 int src_Bpp,
1386 const uint8_t* clip_scan) { 1386 const uint8_t* clip_scan) {
1387 int blended_colors[3]; 1387 int blended_colors[3];
1388 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 1388 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
1389 int dest_gap = dest_Bpp - 3; 1389 int dest_gap = dest_Bpp - 3;
1390 int src_gap = src_Bpp - 3; 1390 int src_gap = src_Bpp - 3;
1391 for (int col = 0; col < width; col++) { 1391 for (int col = 0; col < width; col++) {
1392 uint8_t src_alpha = *clip_scan++; 1392 uint8_t src_alpha = *clip_scan++;
1393 if (src_alpha == 0) { 1393 if (src_alpha == 0) {
1394 dest_scan += dest_Bpp; 1394 dest_scan += dest_Bpp;
1395 src_scan += src_Bpp; 1395 src_scan += src_Bpp;
1396 continue; 1396 continue;
1397 } 1397 }
1398 if (bNonseparableBlend) { 1398 if (bNonseparableBlend) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1480 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1); 1480 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
1481 dp[3] = *src_alpha_scan++; 1481 dp[3] = *src_alpha_scan++;
1482 src_scan += 3; 1482 src_scan += 3;
1483 dp += 4; 1483 dp += 4;
1484 } 1484 }
1485 src_alpha_scan = nullptr; 1485 src_alpha_scan = nullptr;
1486 } 1486 }
1487 } else { 1487 } else {
1488 if (dest_alpha_scan) { 1488 if (dest_alpha_scan) {
1489 int blended_colors[3]; 1489 int blended_colors[3];
1490 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 1490 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
1491 for (int col = 0; col < pixel_count; col++) { 1491 for (int col = 0; col < pixel_count; col++) {
1492 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, 1492 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
1493 1); 1493 1);
1494 uint8_t back_alpha = *dest_alpha_scan; 1494 uint8_t back_alpha = *dest_alpha_scan;
1495 if (back_alpha == 0) { 1495 if (back_alpha == 0) {
1496 if (clip_scan) { 1496 if (clip_scan) {
1497 int src_alpha = clip_scan[col] * src_scan[3] / 255; 1497 int src_alpha = clip_scan[col] * src_scan[3] / 255;
1498 *dest_alpha_scan = src_alpha; 1498 *dest_alpha_scan = src_alpha;
1499 *dest_scan++ = *src_cache_scan++; 1499 *dest_scan++ = *src_cache_scan++;
1500 *dest_scan++ = *src_cache_scan++; 1500 *dest_scan++ = *src_cache_scan++;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1666 const uint8_t* src_alpha_scan, 1666 const uint8_t* src_alpha_scan,
1667 uint8_t* src_cache_scan, 1667 uint8_t* src_cache_scan,
1668 void* pIccTransform) { 1668 void* pIccTransform) {
1669 CCodec_IccModule* pIccModule = 1669 CCodec_IccModule* pIccModule =
1670 CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); 1670 CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
1671 if (src_alpha_scan) { 1671 if (src_alpha_scan) {
1672 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, 1672 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
1673 width); 1673 width);
1674 } else { 1674 } else {
1675 int blended_colors[3]; 1675 int blended_colors[3];
1676 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 1676 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
1677 int dest_gap = dest_Bpp - 3; 1677 int dest_gap = dest_Bpp - 3;
1678 for (int col = 0; col < width; col++) { 1678 for (int col = 0; col < width; col++) {
1679 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, 1); 1679 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, 1);
1680 uint8_t src_alpha; 1680 uint8_t src_alpha;
1681 if (clip_scan) { 1681 if (clip_scan) {
1682 src_alpha = src_scan[3] * (*clip_scan++) / 255; 1682 src_alpha = src_scan[3] * (*clip_scan++) / 255;
1683 } else { 1683 } else {
1684 src_alpha = src_scan[3]; 1684 src_alpha = src_scan[3];
1685 } 1685 }
1686 src_scan += 4; 1686 src_scan += 4;
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1860 1860
1861 void CompositeRow_8bppPal2Gray(uint8_t* dest_scan, 1861 void CompositeRow_8bppPal2Gray(uint8_t* dest_scan,
1862 const uint8_t* src_scan, 1862 const uint8_t* src_scan,
1863 const uint8_t* pPalette, 1863 const uint8_t* pPalette,
1864 int pixel_count, 1864 int pixel_count,
1865 int blend_type, 1865 int blend_type,
1866 const uint8_t* clip_scan, 1866 const uint8_t* clip_scan,
1867 const uint8_t* src_alpha_scan) { 1867 const uint8_t* src_alpha_scan) {
1868 if (src_alpha_scan) { 1868 if (src_alpha_scan) {
1869 if (blend_type) { 1869 if (blend_type) {
1870 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 1870 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
1871 for (int col = 0; col < pixel_count; col++) { 1871 for (int col = 0; col < pixel_count; col++) {
1872 uint8_t gray = pPalette[*src_scan]; 1872 uint8_t gray = pPalette[*src_scan];
1873 int src_alpha = *src_alpha_scan++; 1873 int src_alpha = *src_alpha_scan++;
1874 if (clip_scan) { 1874 if (clip_scan) {
1875 src_alpha = clip_scan[col] * src_alpha / 255; 1875 src_alpha = clip_scan[col] * src_alpha / 255;
1876 } 1876 }
1877 if (bNonseparableBlend) 1877 if (bNonseparableBlend)
1878 gray = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; 1878 gray = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
1879 else 1879 else
1880 gray = Blend(blend_type, *dest_scan, gray); 1880 gray = Blend(blend_type, *dest_scan, gray);
(...skipping 16 matching lines...) Expand all
1897 if (src_alpha) { 1897 if (src_alpha) {
1898 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); 1898 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
1899 } else { 1899 } else {
1900 *dest_scan = gray; 1900 *dest_scan = gray;
1901 } 1901 }
1902 dest_scan++; 1902 dest_scan++;
1903 src_scan++; 1903 src_scan++;
1904 } 1904 }
1905 } else { 1905 } else {
1906 if (blend_type) { 1906 if (blend_type) {
1907 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 1907 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
1908 for (int col = 0; col < pixel_count; col++) { 1908 for (int col = 0; col < pixel_count; col++) {
1909 uint8_t gray = pPalette[*src_scan]; 1909 uint8_t gray = pPalette[*src_scan];
1910 if (bNonseparableBlend) 1910 if (bNonseparableBlend)
1911 gray = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; 1911 gray = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
1912 else 1912 else
1913 gray = Blend(blend_type, *dest_scan, gray); 1913 gray = Blend(blend_type, *dest_scan, gray);
1914 if (clip_scan && clip_scan[col] < 255) { 1914 if (clip_scan && clip_scan[col] < 255) {
1915 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]); 1915 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
1916 } else { 1916 } else {
1917 *dest_scan = gray; 1917 *dest_scan = gray;
(...skipping 19 matching lines...) Expand all
1937 void CompositeRow_8bppPal2Graya(uint8_t* dest_scan, 1937 void CompositeRow_8bppPal2Graya(uint8_t* dest_scan,
1938 const uint8_t* src_scan, 1938 const uint8_t* src_scan,
1939 const uint8_t* pPalette, 1939 const uint8_t* pPalette,
1940 int pixel_count, 1940 int pixel_count,
1941 int blend_type, 1941 int blend_type,
1942 const uint8_t* clip_scan, 1942 const uint8_t* clip_scan,
1943 uint8_t* dest_alpha_scan, 1943 uint8_t* dest_alpha_scan,
1944 const uint8_t* src_alpha_scan) { 1944 const uint8_t* src_alpha_scan) {
1945 if (src_alpha_scan) { 1945 if (src_alpha_scan) {
1946 if (blend_type) { 1946 if (blend_type) {
1947 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 1947 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
1948 for (int col = 0; col < pixel_count; col++) { 1948 for (int col = 0; col < pixel_count; col++) {
1949 uint8_t gray = pPalette[*src_scan]; 1949 uint8_t gray = pPalette[*src_scan];
1950 src_scan++; 1950 src_scan++;
1951 uint8_t back_alpha = *dest_alpha_scan; 1951 uint8_t back_alpha = *dest_alpha_scan;
1952 if (back_alpha == 0) { 1952 if (back_alpha == 0) {
1953 int src_alpha = *src_alpha_scan++; 1953 int src_alpha = *src_alpha_scan++;
1954 if (clip_scan) { 1954 if (clip_scan) {
1955 src_alpha = clip_scan[col] * src_alpha / 255; 1955 src_alpha = clip_scan[col] * src_alpha / 255;
1956 } 1956 }
1957 if (src_alpha) { 1957 if (src_alpha) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
2011 continue; 2011 continue;
2012 } 2012 }
2013 *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; 2013 *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
2014 int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan); 2014 int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan);
2015 dest_alpha_scan++; 2015 dest_alpha_scan++;
2016 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); 2016 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
2017 dest_scan++; 2017 dest_scan++;
2018 } 2018 }
2019 } else { 2019 } else {
2020 if (blend_type) { 2020 if (blend_type) {
2021 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 2021 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
2022 for (int col = 0; col < pixel_count; col++) { 2022 for (int col = 0; col < pixel_count; col++) {
2023 uint8_t gray = pPalette[*src_scan]; 2023 uint8_t gray = pPalette[*src_scan];
2024 src_scan++; 2024 src_scan++;
2025 if (!clip_scan || clip_scan[col] == 255) { 2025 if (!clip_scan || clip_scan[col] == 255) {
2026 *dest_scan++ = gray; 2026 *dest_scan++ = gray;
2027 *dest_alpha_scan++ = 255; 2027 *dest_alpha_scan++ = 255;
2028 continue; 2028 continue;
2029 } 2029 }
2030 int src_alpha = clip_scan[col]; 2030 int src_alpha = clip_scan[col];
2031 if (src_alpha == 0) { 2031 if (src_alpha == 0) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2075 void CompositeRow_1bppPal2Gray(uint8_t* dest_scan, 2075 void CompositeRow_1bppPal2Gray(uint8_t* dest_scan,
2076 const uint8_t* src_scan, 2076 const uint8_t* src_scan,
2077 int src_left, 2077 int src_left,
2078 const uint8_t* pPalette, 2078 const uint8_t* pPalette,
2079 int pixel_count, 2079 int pixel_count,
2080 int blend_type, 2080 int blend_type,
2081 const uint8_t* clip_scan) { 2081 const uint8_t* clip_scan) {
2082 int reset_gray = pPalette[0]; 2082 int reset_gray = pPalette[0];
2083 int set_gray = pPalette[1]; 2083 int set_gray = pPalette[1];
2084 if (blend_type) { 2084 if (blend_type) {
2085 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 2085 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
2086 for (int col = 0; col < pixel_count; col++) { 2086 for (int col = 0; col < pixel_count; col++) {
2087 uint8_t gray = 2087 uint8_t gray =
2088 (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) 2088 (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8)))
2089 ? set_gray 2089 ? set_gray
2090 : reset_gray; 2090 : reset_gray;
2091 if (bNonseparableBlend) 2091 if (bNonseparableBlend)
2092 gray = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; 2092 gray = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
2093 else 2093 else
2094 gray = Blend(blend_type, *dest_scan, gray); 2094 gray = Blend(blend_type, *dest_scan, gray);
2095 if (clip_scan && clip_scan[col] < 255) { 2095 if (clip_scan && clip_scan[col] < 255) {
(...skipping 23 matching lines...) Expand all
2119 const uint8_t* src_scan, 2119 const uint8_t* src_scan,
2120 int src_left, 2120 int src_left,
2121 const uint8_t* pPalette, 2121 const uint8_t* pPalette,
2122 int pixel_count, 2122 int pixel_count,
2123 int blend_type, 2123 int blend_type,
2124 const uint8_t* clip_scan, 2124 const uint8_t* clip_scan,
2125 uint8_t* dest_alpha_scan) { 2125 uint8_t* dest_alpha_scan) {
2126 int reset_gray = pPalette[0]; 2126 int reset_gray = pPalette[0];
2127 int set_gray = pPalette[1]; 2127 int set_gray = pPalette[1];
2128 if (blend_type) { 2128 if (blend_type) {
2129 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 2129 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
2130 for (int col = 0; col < pixel_count; col++) { 2130 for (int col = 0; col < pixel_count; col++) {
2131 uint8_t gray = 2131 uint8_t gray =
2132 (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) 2132 (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8)))
2133 ? set_gray 2133 ? set_gray
2134 : reset_gray; 2134 : reset_gray;
2135 if (!clip_scan || clip_scan[col] == 255) { 2135 if (!clip_scan || clip_scan[col] == 255) {
2136 *dest_scan++ = gray; 2136 *dest_scan++ = gray;
2137 *dest_alpha_scan++ = 255; 2137 *dest_alpha_scan++ = 255;
2138 continue; 2138 continue;
2139 } 2139 }
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
2982 dest_scan++; 2982 dest_scan++;
2983 } 2983 }
2984 } 2984 }
2985 2985
2986 void CompositeRow_Argb2Argb_RgbByteOrder(uint8_t* dest_scan, 2986 void CompositeRow_Argb2Argb_RgbByteOrder(uint8_t* dest_scan,
2987 const uint8_t* src_scan, 2987 const uint8_t* src_scan,
2988 int pixel_count, 2988 int pixel_count,
2989 int blend_type, 2989 int blend_type,
2990 const uint8_t* clip_scan) { 2990 const uint8_t* clip_scan) {
2991 int blended_colors[3]; 2991 int blended_colors[3];
2992 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 2992 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
2993 for (int col = 0; col < pixel_count; col++) { 2993 for (int col = 0; col < pixel_count; col++) {
2994 uint8_t back_alpha = dest_scan[3]; 2994 uint8_t back_alpha = dest_scan[3];
2995 if (back_alpha == 0) { 2995 if (back_alpha == 0) {
2996 if (clip_scan) { 2996 if (clip_scan) {
2997 int src_alpha = clip_scan[col] * src_scan[3] / 255; 2997 int src_alpha = clip_scan[col] * src_scan[3] / 255;
2998 dest_scan[3] = src_alpha; 2998 dest_scan[3] = src_alpha;
2999 dest_scan[0] = src_scan[2]; 2999 dest_scan[0] = src_scan[2];
3000 dest_scan[1] = src_scan[1]; 3000 dest_scan[1] = src_scan[1];
3001 dest_scan[2] = src_scan[0]; 3001 dest_scan[2] = src_scan[0];
3002 } else { 3002 } else {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3046 src_scan++; 3046 src_scan++;
3047 } 3047 }
3048 } 3048 }
3049 3049
3050 void CompositeRow_Rgb2Argb_Blend_NoClip_RgbByteOrder(uint8_t* dest_scan, 3050 void CompositeRow_Rgb2Argb_Blend_NoClip_RgbByteOrder(uint8_t* dest_scan,
3051 const uint8_t* src_scan, 3051 const uint8_t* src_scan,
3052 int width, 3052 int width,
3053 int blend_type, 3053 int blend_type,
3054 int src_Bpp) { 3054 int src_Bpp) {
3055 int blended_colors[3]; 3055 int blended_colors[3];
3056 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 3056 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
3057 int src_gap = src_Bpp - 3; 3057 int src_gap = src_Bpp - 3;
3058 for (int col = 0; col < width; col++) { 3058 for (int col = 0; col < width; col++) {
3059 uint8_t back_alpha = dest_scan[3]; 3059 uint8_t back_alpha = dest_scan[3];
3060 if (back_alpha == 0) { 3060 if (back_alpha == 0) {
3061 if (src_Bpp == 4) { 3061 if (src_Bpp == 4) {
3062 FXARGB_SETRGBORDERDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan)); 3062 FXARGB_SETRGBORDERDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan));
3063 } else { 3063 } else {
3064 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], 3064 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2],
3065 src_scan[1], src_scan[0])); 3065 src_scan[1], src_scan[0]));
3066 } 3066 }
(...skipping 23 matching lines...) Expand all
3090 } 3090 }
3091 } 3091 }
3092 3092
3093 void CompositeRow_Argb2Rgb_Blend_RgbByteOrder(uint8_t* dest_scan, 3093 void CompositeRow_Argb2Rgb_Blend_RgbByteOrder(uint8_t* dest_scan,
3094 const uint8_t* src_scan, 3094 const uint8_t* src_scan,
3095 int width, 3095 int width,
3096 int blend_type, 3096 int blend_type,
3097 int dest_Bpp, 3097 int dest_Bpp,
3098 const uint8_t* clip_scan) { 3098 const uint8_t* clip_scan) {
3099 int blended_colors[3]; 3099 int blended_colors[3];
3100 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 3100 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
3101 for (int col = 0; col < width; col++) { 3101 for (int col = 0; col < width; col++) {
3102 uint8_t src_alpha; 3102 uint8_t src_alpha;
3103 if (clip_scan) { 3103 if (clip_scan) {
3104 src_alpha = src_scan[3] * (*clip_scan++) / 255; 3104 src_alpha = src_scan[3] * (*clip_scan++) / 255;
3105 } else { 3105 } else {
3106 src_alpha = src_scan[3]; 3106 src_alpha = src_scan[3];
3107 } 3107 }
3108 if (src_alpha == 0) { 3108 if (src_alpha == 0) {
3109 dest_scan += dest_Bpp; 3109 dest_scan += dest_Bpp;
3110 src_scan += 4; 3110 src_scan += 4;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3147 } 3147 }
3148 } 3148 }
3149 3149
3150 void CompositeRow_Rgb2Rgb_Blend_NoClip_RgbByteOrder(uint8_t* dest_scan, 3150 void CompositeRow_Rgb2Rgb_Blend_NoClip_RgbByteOrder(uint8_t* dest_scan,
3151 const uint8_t* src_scan, 3151 const uint8_t* src_scan,
3152 int width, 3152 int width,
3153 int blend_type, 3153 int blend_type,
3154 int dest_Bpp, 3154 int dest_Bpp,
3155 int src_Bpp) { 3155 int src_Bpp) {
3156 int blended_colors[3]; 3156 int blended_colors[3];
3157 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 3157 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
3158 int src_gap = src_Bpp - 3; 3158 int src_gap = src_Bpp - 3;
3159 for (int col = 0; col < width; col++) { 3159 for (int col = 0; col < width; col++) {
3160 if (bNonseparableBlend) { 3160 if (bNonseparableBlend) {
3161 uint8_t dest_scan_o[3]; 3161 uint8_t dest_scan_o[3];
3162 dest_scan_o[0] = dest_scan[2]; 3162 dest_scan_o[0] = dest_scan[2];
3163 dest_scan_o[1] = dest_scan[1]; 3163 dest_scan_o[1] = dest_scan[1];
3164 dest_scan_o[2] = dest_scan[0]; 3164 dest_scan_o[2] = dest_scan[0];
3165 RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); 3165 RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
3166 } 3166 }
3167 for (int color = 0; color < 3; color++) { 3167 for (int color = 0; color < 3; color++) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
3229 } 3229 }
3230 } 3230 }
3231 3231
3232 void CompositeRow_Rgb2Argb_Blend_Clip_RgbByteOrder(uint8_t* dest_scan, 3232 void CompositeRow_Rgb2Argb_Blend_Clip_RgbByteOrder(uint8_t* dest_scan,
3233 const uint8_t* src_scan, 3233 const uint8_t* src_scan,
3234 int width, 3234 int width,
3235 int blend_type, 3235 int blend_type,
3236 int src_Bpp, 3236 int src_Bpp,
3237 const uint8_t* clip_scan) { 3237 const uint8_t* clip_scan) {
3238 int blended_colors[3]; 3238 int blended_colors[3];
3239 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 3239 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
3240 int src_gap = src_Bpp - 3; 3240 int src_gap = src_Bpp - 3;
3241 for (int col = 0; col < width; col++) { 3241 for (int col = 0; col < width; col++) {
3242 int src_alpha = *clip_scan++; 3242 int src_alpha = *clip_scan++;
3243 uint8_t back_alpha = dest_scan[3]; 3243 uint8_t back_alpha = dest_scan[3];
3244 if (back_alpha == 0) { 3244 if (back_alpha == 0) {
3245 dest_scan[2] = *src_scan++; 3245 dest_scan[2] = *src_scan++;
3246 dest_scan[1] = *src_scan++; 3246 dest_scan[1] = *src_scan++;
3247 dest_scan[0] = *src_scan++; 3247 dest_scan[0] = *src_scan++;
3248 src_scan += src_gap; 3248 src_scan += src_gap;
3249 dest_scan += 4; 3249 dest_scan += 4;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
3281 } 3281 }
3282 3282
3283 void CompositeRow_Rgb2Rgb_Blend_Clip_RgbByteOrder(uint8_t* dest_scan, 3283 void CompositeRow_Rgb2Rgb_Blend_Clip_RgbByteOrder(uint8_t* dest_scan,
3284 const uint8_t* src_scan, 3284 const uint8_t* src_scan,
3285 int width, 3285 int width,
3286 int blend_type, 3286 int blend_type,
3287 int dest_Bpp, 3287 int dest_Bpp,
3288 int src_Bpp, 3288 int src_Bpp,
3289 const uint8_t* clip_scan) { 3289 const uint8_t* clip_scan) {
3290 int blended_colors[3]; 3290 int blended_colors[3];
3291 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; 3291 bool bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
3292 int src_gap = src_Bpp - 3; 3292 int src_gap = src_Bpp - 3;
3293 for (int col = 0; col < width; col++) { 3293 for (int col = 0; col < width; col++) {
3294 uint8_t src_alpha = *clip_scan++; 3294 uint8_t src_alpha = *clip_scan++;
3295 if (src_alpha == 0) { 3295 if (src_alpha == 0) {
3296 dest_scan += dest_Bpp; 3296 dest_scan += dest_Bpp;
3297 src_scan += src_Bpp; 3297 src_scan += src_Bpp;
3298 continue; 3298 continue;
3299 } 3299 }
3300 if (bNonseparableBlend) { 3300 if (bNonseparableBlend) {
3301 uint8_t dest_scan_o[3]; 3301 uint8_t dest_scan_o[3];
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
3795 dest_scan[0] = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha); 3795 dest_scan[0] = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha);
3796 } else { 3796 } else {
3797 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, src_alpha); 3797 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, src_alpha);
3798 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, src_alpha); 3798 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, src_alpha);
3799 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, src_alpha); 3799 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, src_alpha);
3800 } 3800 }
3801 dest_scan += Bpp; 3801 dest_scan += Bpp;
3802 } 3802 }
3803 } 3803 }
3804 3804
3805 FX_BOOL ScanlineCompositor_InitSourceMask(FXDIB_Format dest_format, 3805 bool ScanlineCompositor_InitSourceMask(FXDIB_Format dest_format,
3806 int alpha_flag, 3806 int alpha_flag,
3807 uint32_t mask_color, 3807 uint32_t mask_color,
3808 int& mask_alpha, 3808 int& mask_alpha,
3809 int& mask_red, 3809 int& mask_red,
3810 int& mask_green, 3810 int& mask_green,
3811 int& mask_blue, 3811 int& mask_blue,
3812 int& mask_black, 3812 int& mask_black,
3813 CCodec_IccModule* pIccModule, 3813 CCodec_IccModule* pIccModule,
3814 void* pIccTransform) { 3814 void* pIccTransform) {
3815 if (alpha_flag >> 8) { 3815 if (alpha_flag >> 8) {
3816 mask_alpha = alpha_flag & 0xff; 3816 mask_alpha = alpha_flag & 0xff;
3817 mask_red = FXSYS_GetCValue(mask_color); 3817 mask_red = FXSYS_GetCValue(mask_color);
3818 mask_green = FXSYS_GetMValue(mask_color); 3818 mask_green = FXSYS_GetMValue(mask_color);
3819 mask_blue = FXSYS_GetYValue(mask_color); 3819 mask_blue = FXSYS_GetYValue(mask_color);
3820 mask_black = FXSYS_GetKValue(mask_color); 3820 mask_black = FXSYS_GetKValue(mask_color);
3821 } else { 3821 } else {
3822 mask_alpha = FXARGB_A(mask_color); 3822 mask_alpha = FXARGB_A(mask_color);
3823 mask_red = FXARGB_R(mask_color); 3823 mask_red = FXARGB_R(mask_color);
3824 mask_green = FXARGB_G(mask_color); 3824 mask_green = FXARGB_G(mask_color);
3825 mask_blue = FXARGB_B(mask_color); 3825 mask_blue = FXARGB_B(mask_color);
3826 } 3826 }
3827 if (dest_format == FXDIB_8bppMask) { 3827 if (dest_format == FXDIB_8bppMask) {
3828 return TRUE; 3828 return true;
3829 } 3829 }
3830 if ((dest_format & 0xff) == 8) { 3830 if ((dest_format & 0xff) == 8) {
3831 if (pIccTransform) { 3831 if (pIccTransform) {
3832 mask_color = (alpha_flag >> 8) ? FXCMYK_TODIB(mask_color) 3832 mask_color = (alpha_flag >> 8) ? FXCMYK_TODIB(mask_color)
3833 : FXARGB_TODIB(mask_color); 3833 : FXARGB_TODIB(mask_color);
3834 uint8_t* gray_p = (uint8_t*)&mask_color; 3834 uint8_t* gray_p = (uint8_t*)&mask_color;
3835 pIccModule->TranslateScanline(pIccTransform, gray_p, gray_p, 1); 3835 pIccModule->TranslateScanline(pIccTransform, gray_p, gray_p, 1);
3836 mask_red = dest_format & 0x0400 ? FX_CCOLOR(gray_p[0]) : gray_p[0]; 3836 mask_red = dest_format & 0x0400 ? FX_CCOLOR(gray_p[0]) : gray_p[0];
3837 } else { 3837 } else {
3838 if (alpha_flag >> 8) { 3838 if (alpha_flag >> 8) {
(...skipping 20 matching lines...) Expand all
3859 mask_blue = mask_color_p[0]; 3859 mask_blue = mask_color_p[0];
3860 } else if (alpha_flag >> 8) { 3860 } else if (alpha_flag >> 8) {
3861 AdobeCMYK_to_sRGB1(mask_color_p[0], mask_color_p[1], mask_color_p[2], 3861 AdobeCMYK_to_sRGB1(mask_color_p[0], mask_color_p[1], mask_color_p[2],
3862 mask_color_p[3], mask_color_p[2], mask_color_p[1], 3862 mask_color_p[3], mask_color_p[2], mask_color_p[1],
3863 mask_color_p[0]); 3863 mask_color_p[0]);
3864 mask_red = mask_color_p[2]; 3864 mask_red = mask_color_p[2];
3865 mask_green = mask_color_p[1]; 3865 mask_green = mask_color_p[1];
3866 mask_blue = mask_color_p[0]; 3866 mask_blue = mask_color_p[0];
3867 } 3867 }
3868 } 3868 }
3869 return TRUE; 3869 return true;
3870 } 3870 }
3871 3871
3872 void ScanlineCompositor_InitSourcePalette(FXDIB_Format src_format, 3872 void ScanlineCompositor_InitSourcePalette(FXDIB_Format src_format,
3873 FXDIB_Format dest_format, 3873 FXDIB_Format dest_format,
3874 uint32_t*& pDestPalette, 3874 uint32_t*& pDestPalette,
3875 uint32_t* pSrcPalette, 3875 uint32_t* pSrcPalette,
3876 CCodec_IccModule* pIccModule, 3876 CCodec_IccModule* pIccModule,
3877 void* pIccTransform) { 3877 void* pIccTransform) {
3878 FX_BOOL isSrcCmyk = !!(src_format & 0x0400); 3878 bool isSrcCmyk = !!(src_format & 0x0400);
3879 FX_BOOL isDstCmyk = !!(dest_format & 0x0400); 3879 bool isDstCmyk = !!(dest_format & 0x0400);
3880 pDestPalette = nullptr; 3880 pDestPalette = nullptr;
3881 if (pIccTransform) { 3881 if (pIccTransform) {
3882 if (pSrcPalette) { 3882 if (pSrcPalette) {
3883 if ((dest_format & 0xff) == 8) { 3883 if ((dest_format & 0xff) == 8) {
3884 int pal_count = 1 << (src_format & 0xff); 3884 int pal_count = 1 << (src_format & 0xff);
3885 uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count); 3885 uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count);
3886 pDestPalette = (uint32_t*)gray_pal; 3886 pDestPalette = (uint32_t*)gray_pal;
3887 for (int i = 0; i < pal_count; i++) { 3887 for (int i = 0; i < pal_count; i++) {
3888 uint32_t color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) 3888 uint32_t color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i])
3889 : FXARGB_TODIB(pSrcPalette[i]); 3889 : FXARGB_TODIB(pSrcPalette[i]);
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
4005 } 4005 }
4006 } 4006 }
4007 } 4007 }
4008 4008
4009 } // namespace 4009 } // namespace
4010 4010
4011 CFX_ScanlineCompositor::CFX_ScanlineCompositor() { 4011 CFX_ScanlineCompositor::CFX_ScanlineCompositor() {
4012 m_pSrcPalette = nullptr; 4012 m_pSrcPalette = nullptr;
4013 m_pCacheScanline = nullptr; 4013 m_pCacheScanline = nullptr;
4014 m_CacheSize = 0; 4014 m_CacheSize = 0;
4015 m_bRgbByteOrder = FALSE; 4015 m_bRgbByteOrder = false;
4016 m_BlendType = FXDIB_BLEND_NORMAL; 4016 m_BlendType = FXDIB_BLEND_NORMAL;
4017 } 4017 }
4018 4018
4019 CFX_ScanlineCompositor::~CFX_ScanlineCompositor() { 4019 CFX_ScanlineCompositor::~CFX_ScanlineCompositor() {
4020 FX_Free(m_pSrcPalette); 4020 FX_Free(m_pSrcPalette);
4021 FX_Free(m_pCacheScanline); 4021 FX_Free(m_pCacheScanline);
4022 } 4022 }
4023 4023
4024 FX_BOOL CFX_ScanlineCompositor::Init(FXDIB_Format dest_format, 4024 bool CFX_ScanlineCompositor::Init(FXDIB_Format dest_format,
4025 FXDIB_Format src_format, 4025 FXDIB_Format src_format,
4026 int32_t width, 4026 int32_t width,
4027 uint32_t* pSrcPalette, 4027 uint32_t* pSrcPalette,
4028 uint32_t mask_color, 4028 uint32_t mask_color,
4029 int blend_type, 4029 int blend_type,
4030 FX_BOOL bClip, 4030 bool bClip,
4031 FX_BOOL bRgbByteOrder, 4031 bool bRgbByteOrder,
4032 int alpha_flag, 4032 int alpha_flag,
4033 void* pIccTransform) { 4033 void* pIccTransform) {
4034 m_SrcFormat = src_format; 4034 m_SrcFormat = src_format;
4035 m_DestFormat = dest_format; 4035 m_DestFormat = dest_format;
4036 m_BlendType = blend_type; 4036 m_BlendType = blend_type;
4037 m_bRgbByteOrder = bRgbByteOrder; 4037 m_bRgbByteOrder = bRgbByteOrder;
4038 CCodec_IccModule* pIccModule = nullptr; 4038 CCodec_IccModule* pIccModule = nullptr;
4039 if (CFX_GEModule::Get()->GetCodecModule()) { 4039 if (CFX_GEModule::Get()->GetCodecModule()) {
4040 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); 4040 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
4041 } 4041 }
4042 if (!pIccModule) { 4042 if (!pIccModule) {
4043 pIccTransform = nullptr; 4043 pIccTransform = nullptr;
4044 } 4044 }
4045 m_pIccTransform = pIccTransform; 4045 m_pIccTransform = pIccTransform;
4046 if ((dest_format & 0xff) == 1) { 4046 if ((dest_format & 0xff) == 1) {
4047 return FALSE; 4047 return false;
4048 } 4048 }
4049 if (m_SrcFormat == FXDIB_1bppMask || m_SrcFormat == FXDIB_8bppMask) { 4049 if (m_SrcFormat == FXDIB_1bppMask || m_SrcFormat == FXDIB_8bppMask) {
4050 return ScanlineCompositor_InitSourceMask( 4050 return ScanlineCompositor_InitSourceMask(
4051 dest_format, alpha_flag, mask_color, m_MaskAlpha, m_MaskRed, 4051 dest_format, alpha_flag, mask_color, m_MaskAlpha, m_MaskRed,
4052 m_MaskGreen, m_MaskBlue, m_MaskBlack, pIccModule, pIccTransform); 4052 m_MaskGreen, m_MaskBlue, m_MaskBlack, pIccModule, pIccTransform);
4053 } 4053 }
4054 if (!pIccTransform && (~src_format & 0x0400) && (dest_format & 0x0400)) { 4054 if (!pIccTransform && (~src_format & 0x0400) && (dest_format & 0x0400)) {
4055 return FALSE; 4055 return false;
4056 } 4056 }
4057 if ((m_SrcFormat & 0xff) <= 8) { 4057 if ((m_SrcFormat & 0xff) <= 8) {
4058 if (dest_format == FXDIB_8bppMask) { 4058 if (dest_format == FXDIB_8bppMask) {
4059 return TRUE; 4059 return true;
4060 } 4060 }
4061 ScanlineCompositor_InitSourcePalette(src_format, dest_format, m_pSrcPalette, 4061 ScanlineCompositor_InitSourcePalette(src_format, dest_format, m_pSrcPalette,
4062 pSrcPalette, pIccModule, 4062 pSrcPalette, pIccModule,
4063 pIccTransform); 4063 pIccTransform);
4064 m_Transparency = 4064 m_Transparency =
4065 (dest_format == FXDIB_Argb ? 1 : 0) + (dest_format & 0x0200 ? 2 : 0) + 4065 (dest_format == FXDIB_Argb ? 1 : 0) + (dest_format & 0x0200 ? 2 : 0) +
4066 (dest_format & 0x0400 ? 4 : 0) + ((src_format & 0xff) == 1 ? 8 : 0); 4066 (dest_format & 0x0400 ? 4 : 0) + ((src_format & 0xff) == 1 ? 8 : 0);
4067 return TRUE; 4067 return true;
4068 } 4068 }
4069 m_Transparency = (src_format & 0x0200 ? 0 : 1) + 4069 m_Transparency = (src_format & 0x0200 ? 0 : 1) +
4070 (dest_format & 0x0200 ? 0 : 2) + 4070 (dest_format & 0x0200 ? 0 : 2) +
4071 (blend_type == FXDIB_BLEND_NORMAL ? 4 : 0) + 4071 (blend_type == FXDIB_BLEND_NORMAL ? 4 : 0) +
4072 (bClip ? 8 : 0) + (src_format & 0x0400 ? 16 : 0) + 4072 (bClip ? 8 : 0) + (src_format & 0x0400 ? 16 : 0) +
4073 (dest_format & 0x0400 ? 32 : 0) + (pIccTransform ? 64 : 0); 4073 (dest_format & 0x0400 ? 32 : 0) + (pIccTransform ? 64 : 0);
4074 return TRUE; 4074 return true;
4075 } 4075 }
4076 4076
4077 void CFX_ScanlineCompositor::CompositeRgbBitmapLine( 4077 void CFX_ScanlineCompositor::CompositeRgbBitmapLine(
4078 uint8_t* dest_scan, 4078 uint8_t* dest_scan,
4079 const uint8_t* src_scan, 4079 const uint8_t* src_scan,
4080 int width, 4080 int width,
4081 const uint8_t* clip_scan, 4081 const uint8_t* clip_scan,
4082 const uint8_t* src_extra_alpha, 4082 const uint8_t* src_extra_alpha,
4083 uint8_t* dst_extra_alpha) { 4083 uint8_t* dst_extra_alpha) {
4084 int src_Bpp = (m_SrcFormat & 0xff) >> 3; 4084 int src_Bpp = (m_SrcFormat & 0xff) >> 3;
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
4474 CompositeRow_BitMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, 4474 CompositeRow_BitMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed,
4475 m_MaskGreen, m_MaskBlue, src_left, width, 4475 m_MaskGreen, m_MaskBlue, src_left, width,
4476 m_BlendType, clip_scan); 4476 m_BlendType, clip_scan);
4477 } else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32) { 4477 } else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32) {
4478 CompositeRow_BitMask2Rgb( 4478 CompositeRow_BitMask2Rgb(
4479 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, 4479 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
4480 src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan); 4480 src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan);
4481 } 4481 }
4482 } 4482 }
4483 4483
4484 FX_BOOL CFX_DIBitmap::CompositeBitmap(int dest_left, 4484 bool CFX_DIBitmap::CompositeBitmap(int dest_left,
4485 int dest_top, 4485 int dest_top,
4486 int width, 4486 int width,
4487 int height, 4487 int height,
4488 const CFX_DIBSource* pSrcBitmap, 4488 const CFX_DIBSource* pSrcBitmap,
4489 int src_left, 4489 int src_left,
4490 int src_top, 4490 int src_top,
4491 int blend_type, 4491 int blend_type,
4492 const CFX_ClipRgn* pClipRgn, 4492 const CFX_ClipRgn* pClipRgn,
4493 FX_BOOL bRgbByteOrder, 4493 bool bRgbByteOrder,
4494 void* pIccTransform) { 4494 void* pIccTransform) {
4495 if (!m_pBuffer) { 4495 if (!m_pBuffer) {
4496 return FALSE; 4496 return false;
4497 } 4497 }
4498 ASSERT(!pSrcBitmap->IsAlphaMask()); 4498 ASSERT(!pSrcBitmap->IsAlphaMask());
4499 ASSERT(m_bpp >= 8); 4499 ASSERT(m_bpp >= 8);
4500 if (pSrcBitmap->IsAlphaMask() || m_bpp < 8) { 4500 if (pSrcBitmap->IsAlphaMask() || m_bpp < 8) {
4501 return FALSE; 4501 return false;
4502 } 4502 }
4503 GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetWidth(), 4503 GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetWidth(),
4504 pSrcBitmap->GetHeight(), src_left, src_top, pClipRgn); 4504 pSrcBitmap->GetHeight(), src_left, src_top, pClipRgn);
4505 if (width == 0 || height == 0) { 4505 if (width == 0 || height == 0) {
4506 return TRUE; 4506 return true;
4507 } 4507 }
4508 const CFX_DIBitmap* pClipMask = nullptr; 4508 const CFX_DIBitmap* pClipMask = nullptr;
4509 FX_RECT clip_box; 4509 FX_RECT clip_box;
4510 if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) { 4510 if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) {
4511 ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF); 4511 ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF);
4512 pClipMask = pClipRgn->GetMask().GetObject(); 4512 pClipMask = pClipRgn->GetMask().GetObject();
4513 clip_box = pClipRgn->GetBox(); 4513 clip_box = pClipRgn->GetBox();
4514 } 4514 }
4515 CFX_ScanlineCompositor compositor; 4515 CFX_ScanlineCompositor compositor;
4516 if (!compositor.Init(GetFormat(), pSrcBitmap->GetFormat(), width, 4516 if (!compositor.Init(GetFormat(), pSrcBitmap->GetFormat(), width,
4517 pSrcBitmap->GetPalette(), 0, blend_type, 4517 pSrcBitmap->GetPalette(), 0, blend_type,
4518 pClipMask != nullptr, bRgbByteOrder, 0, pIccTransform)) { 4518 pClipMask != nullptr, bRgbByteOrder, 0, pIccTransform)) {
4519 return FALSE; 4519 return false;
4520 } 4520 }
4521 int dest_Bpp = m_bpp / 8; 4521 int dest_Bpp = m_bpp / 8;
4522 int src_Bpp = pSrcBitmap->GetBPP() / 8; 4522 int src_Bpp = pSrcBitmap->GetBPP() / 8;
4523 FX_BOOL bRgb = src_Bpp > 1 && !pSrcBitmap->IsCmykImage(); 4523 bool bRgb = src_Bpp > 1 && !pSrcBitmap->IsCmykImage();
4524 CFX_DIBitmap* pSrcAlphaMask = pSrcBitmap->m_pAlphaMask; 4524 CFX_DIBitmap* pSrcAlphaMask = pSrcBitmap->m_pAlphaMask;
4525 for (int row = 0; row < height; row++) { 4525 for (int row = 0; row < height; row++) {
4526 uint8_t* dest_scan = 4526 uint8_t* dest_scan =
4527 m_pBuffer + (dest_top + row) * m_Pitch + dest_left * dest_Bpp; 4527 m_pBuffer + (dest_top + row) * m_Pitch + dest_left * dest_Bpp;
4528 const uint8_t* src_scan = 4528 const uint8_t* src_scan =
4529 pSrcBitmap->GetScanline(src_top + row) + src_left * src_Bpp; 4529 pSrcBitmap->GetScanline(src_top + row) + src_left * src_Bpp;
4530 const uint8_t* src_scan_extra_alpha = 4530 const uint8_t* src_scan_extra_alpha =
4531 pSrcAlphaMask ? pSrcAlphaMask->GetScanline(src_top + row) + src_left 4531 pSrcAlphaMask ? pSrcAlphaMask->GetScanline(src_top + row) + src_left
4532 : nullptr; 4532 : nullptr;
4533 uint8_t* dst_scan_extra_alpha = 4533 uint8_t* dst_scan_extra_alpha =
4534 m_pAlphaMask 4534 m_pAlphaMask
4535 ? (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left 4535 ? (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left
4536 : nullptr; 4536 : nullptr;
4537 const uint8_t* clip_scan = nullptr; 4537 const uint8_t* clip_scan = nullptr;
4538 if (pClipMask) { 4538 if (pClipMask) {
4539 clip_scan = pClipMask->m_pBuffer + 4539 clip_scan = pClipMask->m_pBuffer +
4540 (dest_top + row - clip_box.top) * pClipMask->m_Pitch + 4540 (dest_top + row - clip_box.top) * pClipMask->m_Pitch +
4541 (dest_left - clip_box.left); 4541 (dest_left - clip_box.left);
4542 } 4542 }
4543 if (bRgb) { 4543 if (bRgb) {
4544 compositor.CompositeRgbBitmapLine(dest_scan, src_scan, width, clip_scan, 4544 compositor.CompositeRgbBitmapLine(dest_scan, src_scan, width, clip_scan,
4545 src_scan_extra_alpha, 4545 src_scan_extra_alpha,
4546 dst_scan_extra_alpha); 4546 dst_scan_extra_alpha);
4547 } else { 4547 } else {
4548 compositor.CompositePalBitmapLine(dest_scan, src_scan, src_left, width, 4548 compositor.CompositePalBitmapLine(dest_scan, src_scan, src_left, width,
4549 clip_scan, src_scan_extra_alpha, 4549 clip_scan, src_scan_extra_alpha,
4550 dst_scan_extra_alpha); 4550 dst_scan_extra_alpha);
4551 } 4551 }
4552 } 4552 }
4553 return TRUE; 4553 return true;
4554 } 4554 }
4555 4555
4556 FX_BOOL CFX_DIBitmap::CompositeMask(int dest_left, 4556 bool CFX_DIBitmap::CompositeMask(int dest_left,
4557 int dest_top, 4557 int dest_top,
4558 int width, 4558 int width,
4559 int height, 4559 int height,
4560 const CFX_DIBSource* pMask, 4560 const CFX_DIBSource* pMask,
4561 uint32_t color, 4561 uint32_t color,
4562 int src_left, 4562 int src_left,
4563 int src_top, 4563 int src_top,
4564 int blend_type, 4564 int blend_type,
4565 const CFX_ClipRgn* pClipRgn, 4565 const CFX_ClipRgn* pClipRgn,
4566 FX_BOOL bRgbByteOrder, 4566 bool bRgbByteOrder,
4567 int alpha_flag, 4567 int alpha_flag,
4568 void* pIccTransform) { 4568 void* pIccTransform) {
4569 if (!m_pBuffer) { 4569 if (!m_pBuffer) {
4570 return FALSE; 4570 return false;
4571 } 4571 }
4572 ASSERT(pMask->IsAlphaMask()); 4572 ASSERT(pMask->IsAlphaMask());
4573 ASSERT(m_bpp >= 8); 4573 ASSERT(m_bpp >= 8);
4574 if (!pMask->IsAlphaMask() || m_bpp < 8) { 4574 if (!pMask->IsAlphaMask() || m_bpp < 8) {
4575 return FALSE; 4575 return false;
4576 } 4576 }
4577 GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(), 4577 GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(),
4578 pMask->GetHeight(), src_left, src_top, pClipRgn); 4578 pMask->GetHeight(), src_left, src_top, pClipRgn);
4579 if (width == 0 || height == 0) { 4579 if (width == 0 || height == 0) {
4580 return TRUE; 4580 return true;
4581 } 4581 }
4582 int src_alpha = 4582 int src_alpha =
4583 (uint8_t)(alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color); 4583 (uint8_t)(alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color);
4584 if (src_alpha == 0) { 4584 if (src_alpha == 0) {
4585 return TRUE; 4585 return true;
4586 } 4586 }
4587 const CFX_DIBitmap* pClipMask = nullptr; 4587 const CFX_DIBitmap* pClipMask = nullptr;
4588 FX_RECT clip_box; 4588 FX_RECT clip_box;
4589 if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) { 4589 if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) {
4590 ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF); 4590 ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF);
4591 pClipMask = pClipRgn->GetMask().GetObject(); 4591 pClipMask = pClipRgn->GetMask().GetObject();
4592 clip_box = pClipRgn->GetBox(); 4592 clip_box = pClipRgn->GetBox();
4593 } 4593 }
4594 int src_bpp = pMask->GetBPP(); 4594 int src_bpp = pMask->GetBPP();
4595 int Bpp = GetBPP() / 8; 4595 int Bpp = GetBPP() / 8;
4596 CFX_ScanlineCompositor compositor; 4596 CFX_ScanlineCompositor compositor;
4597 if (!compositor.Init(GetFormat(), pMask->GetFormat(), width, nullptr, color, 4597 if (!compositor.Init(GetFormat(), pMask->GetFormat(), width, nullptr, color,
4598 blend_type, pClipMask != nullptr, bRgbByteOrder, 4598 blend_type, pClipMask != nullptr, bRgbByteOrder,
4599 alpha_flag, pIccTransform)) { 4599 alpha_flag, pIccTransform)) {
4600 return FALSE; 4600 return false;
4601 } 4601 }
4602 for (int row = 0; row < height; row++) { 4602 for (int row = 0; row < height; row++) {
4603 uint8_t* dest_scan = 4603 uint8_t* dest_scan =
4604 m_pBuffer + (dest_top + row) * m_Pitch + dest_left * Bpp; 4604 m_pBuffer + (dest_top + row) * m_Pitch + dest_left * Bpp;
4605 const uint8_t* src_scan = pMask->GetScanline(src_top + row); 4605 const uint8_t* src_scan = pMask->GetScanline(src_top + row);
4606 uint8_t* dst_scan_extra_alpha = 4606 uint8_t* dst_scan_extra_alpha =
4607 m_pAlphaMask 4607 m_pAlphaMask
4608 ? (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left 4608 ? (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left
4609 : nullptr; 4609 : nullptr;
4610 const uint8_t* clip_scan = nullptr; 4610 const uint8_t* clip_scan = nullptr;
4611 if (pClipMask) { 4611 if (pClipMask) {
4612 clip_scan = pClipMask->m_pBuffer + 4612 clip_scan = pClipMask->m_pBuffer +
4613 (dest_top + row - clip_box.top) * pClipMask->m_Pitch + 4613 (dest_top + row - clip_box.top) * pClipMask->m_Pitch +
4614 (dest_left - clip_box.left); 4614 (dest_left - clip_box.left);
4615 } 4615 }
4616 if (src_bpp == 1) { 4616 if (src_bpp == 1) {
4617 compositor.CompositeBitMaskLine(dest_scan, src_scan, src_left, width, 4617 compositor.CompositeBitMaskLine(dest_scan, src_scan, src_left, width,
4618 clip_scan, dst_scan_extra_alpha); 4618 clip_scan, dst_scan_extra_alpha);
4619 } else { 4619 } else {
4620 compositor.CompositeByteMaskLine(dest_scan, src_scan + src_left, width, 4620 compositor.CompositeByteMaskLine(dest_scan, src_scan + src_left, width,
4621 clip_scan, dst_scan_extra_alpha); 4621 clip_scan, dst_scan_extra_alpha);
4622 } 4622 }
4623 } 4623 }
4624 return TRUE; 4624 return true;
4625 } 4625 }
4626 4626
4627 FX_BOOL CFX_DIBitmap::CompositeRect(int left, 4627 bool CFX_DIBitmap::CompositeRect(int left,
4628 int top, 4628 int top,
4629 int width, 4629 int width,
4630 int height, 4630 int height,
4631 uint32_t color, 4631 uint32_t color,
4632 int alpha_flag, 4632 int alpha_flag,
4633 void* pIccTransform) { 4633 void* pIccTransform) {
4634 if (!m_pBuffer) { 4634 if (!m_pBuffer) {
4635 return FALSE; 4635 return false;
4636 } 4636 }
4637 int src_alpha = (alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color); 4637 int src_alpha = (alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color);
4638 if (src_alpha == 0) { 4638 if (src_alpha == 0) {
4639 return TRUE; 4639 return true;
4640 } 4640 }
4641 FX_RECT rect(left, top, left + width, top + height); 4641 FX_RECT rect(left, top, left + width, top + height);
4642 rect.Intersect(0, 0, m_Width, m_Height); 4642 rect.Intersect(0, 0, m_Width, m_Height);
4643 if (rect.IsEmpty()) { 4643 if (rect.IsEmpty()) {
4644 return TRUE; 4644 return true;
4645 } 4645 }
4646 width = rect.Width(); 4646 width = rect.Width();
4647 uint32_t dst_color; 4647 uint32_t dst_color;
4648 if (alpha_flag >> 8) { 4648 if (alpha_flag >> 8) {
4649 dst_color = FXCMYK_TODIB(color); 4649 dst_color = FXCMYK_TODIB(color);
4650 } else { 4650 } else {
4651 dst_color = FXARGB_TODIB(color); 4651 dst_color = FXARGB_TODIB(color);
4652 } 4652 }
4653 uint8_t* color_p = (uint8_t*)&dst_color; 4653 uint8_t* color_p = (uint8_t*)&dst_color;
4654 if (m_bpp == 8) { 4654 if (m_bpp == 8) {
(...skipping 22 matching lines...) Expand all
4677 uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left; 4677 uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left;
4678 if (src_alpha == 255) { 4678 if (src_alpha == 255) {
4679 FXSYS_memset(dest_scan, gray, width); 4679 FXSYS_memset(dest_scan, gray, width);
4680 } else { 4680 } else {
4681 for (int col = 0; col < width; col++) { 4681 for (int col = 0; col < width; col++) {
4682 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); 4682 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
4683 dest_scan++; 4683 dest_scan++;
4684 } 4684 }
4685 } 4685 }
4686 } 4686 }
4687 return TRUE; 4687 return true;
4688 } 4688 }
4689 if (m_bpp == 1) { 4689 if (m_bpp == 1) {
4690 ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0); 4690 ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0);
4691 int left_shift = rect.left % 8; 4691 int left_shift = rect.left % 8;
4692 int right_shift = rect.right % 8; 4692 int right_shift = rect.right % 8;
4693 int new_width = rect.right / 8 - rect.left / 8; 4693 int new_width = rect.right / 8 - rect.left / 8;
4694 int index = 0; 4694 int index = 0;
4695 if (m_pPalette) { 4695 if (m_pPalette) {
4696 for (int i = 0; i < 2; i++) { 4696 for (int i = 0; i < 2; i++) {
4697 if (m_pPalette.get()[i] == color) { 4697 if (m_pPalette.get()[i] == color) {
(...skipping 18 matching lines...) Expand all
4716 *dest_scan_top_r |= ~right_flag; 4716 *dest_scan_top_r |= ~right_flag;
4717 } 4717 }
4718 } else { 4718 } else {
4719 if (!index) { 4719 if (!index) {
4720 *dest_scan_top &= left_flag | right_flag; 4720 *dest_scan_top &= left_flag | right_flag;
4721 } else { 4721 } else {
4722 *dest_scan_top |= ~(left_flag | right_flag); 4722 *dest_scan_top |= ~(left_flag | right_flag);
4723 } 4723 }
4724 } 4724 }
4725 } 4725 }
4726 return TRUE; 4726 return true;
4727 } 4727 }
4728 ASSERT(m_bpp >= 24); 4728 ASSERT(m_bpp >= 24);
4729 if (m_bpp < 24) { 4729 if (m_bpp < 24) {
4730 return FALSE; 4730 return false;
4731 } 4731 }
4732 if (pIccTransform && CFX_GEModule::Get()->GetCodecModule()) { 4732 if (pIccTransform && CFX_GEModule::Get()->GetCodecModule()) {
4733 CCodec_IccModule* pIccModule = 4733 CCodec_IccModule* pIccModule =
4734 CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); 4734 CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
4735 pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1); 4735 pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1);
4736 } else { 4736 } else {
4737 if (alpha_flag >> 8 && !IsCmykImage()) { 4737 if (alpha_flag >> 8 && !IsCmykImage()) {
4738 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), 4738 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color),
4739 FXSYS_GetYValue(color), FXSYS_GetKValue(color), 4739 FXSYS_GetYValue(color), FXSYS_GetKValue(color),
4740 color_p[2], color_p[1], color_p[0]); 4740 color_p[2], color_p[1], color_p[0]);
4741 } else if (!(alpha_flag >> 8) && IsCmykImage()) { 4741 } else if (!(alpha_flag >> 8) && IsCmykImage()) {
4742 return FALSE; 4742 return false;
4743 } 4743 }
4744 } 4744 }
4745 if (!IsCmykImage()) { 4745 if (!IsCmykImage()) {
4746 color_p[3] = (uint8_t)src_alpha; 4746 color_p[3] = (uint8_t)src_alpha;
4747 } 4747 }
4748 int Bpp = m_bpp / 8; 4748 int Bpp = m_bpp / 8;
4749 FX_BOOL bAlpha = HasAlpha(); 4749 bool bAlpha = HasAlpha();
4750 bool bArgb = GetFormat() == FXDIB_Argb; 4750 bool bArgb = GetFormat() == FXDIB_Argb;
4751 if (src_alpha == 255) { 4751 if (src_alpha == 255) {
4752 for (int row = rect.top; row < rect.bottom; row++) { 4752 for (int row = rect.top; row < rect.bottom; row++) {
4753 uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp; 4753 uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp;
4754 uint8_t* dest_scan_alpha = 4754 uint8_t* dest_scan_alpha =
4755 m_pAlphaMask ? (uint8_t*)m_pAlphaMask->GetScanline(row) + rect.left 4755 m_pAlphaMask ? (uint8_t*)m_pAlphaMask->GetScanline(row) + rect.left
4756 : nullptr; 4756 : nullptr;
4757 if (dest_scan_alpha) { 4757 if (dest_scan_alpha) {
4758 FXSYS_memset(dest_scan_alpha, 0xff, width); 4758 FXSYS_memset(dest_scan_alpha, 0xff, width);
4759 } 4759 }
4760 if (Bpp == 4) { 4760 if (Bpp == 4) {
4761 uint32_t* scan = (uint32_t*)dest_scan; 4761 uint32_t* scan = (uint32_t*)dest_scan;
4762 for (int col = 0; col < width; col++) { 4762 for (int col = 0; col < width; col++) {
4763 *scan++ = dst_color; 4763 *scan++ = dst_color;
4764 } 4764 }
4765 } else { 4765 } else {
4766 for (int col = 0; col < width; col++) { 4766 for (int col = 0; col < width; col++) {
4767 *dest_scan++ = color_p[0]; 4767 *dest_scan++ = color_p[0];
4768 *dest_scan++ = color_p[1]; 4768 *dest_scan++ = color_p[1];
4769 *dest_scan++ = color_p[2]; 4769 *dest_scan++ = color_p[2];
4770 } 4770 }
4771 } 4771 }
4772 } 4772 }
4773 return TRUE; 4773 return true;
4774 } 4774 }
4775 for (int row = rect.top; row < rect.bottom; row++) { 4775 for (int row = rect.top; row < rect.bottom; row++) {
4776 uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp; 4776 uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp;
4777 if (bAlpha) { 4777 if (bAlpha) {
4778 if (bArgb) { 4778 if (bArgb) {
4779 for (int col = 0; col < width; col++) { 4779 for (int col = 0; col < width; col++) {
4780 uint8_t back_alpha = dest_scan[3]; 4780 uint8_t back_alpha = dest_scan[3];
4781 if (back_alpha == 0) { 4781 if (back_alpha == 0) {
4782 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, color_p[2], 4782 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, color_p[2],
4783 color_p[1], color_p[0])); 4783 color_p[1], color_p[0]));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
4823 if (comps == 3) { 4823 if (comps == 3) {
4824 *dest_scan++ = 255; 4824 *dest_scan++ = 255;
4825 continue; 4825 continue;
4826 } 4826 }
4827 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[comps], src_alpha); 4827 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[comps], src_alpha);
4828 dest_scan++; 4828 dest_scan++;
4829 } 4829 }
4830 } 4830 }
4831 } 4831 }
4832 } 4832 }
4833 return TRUE; 4833 return true;
4834 } 4834 }
4835 4835
4836 CFX_BitmapComposer::CFX_BitmapComposer() { 4836 CFX_BitmapComposer::CFX_BitmapComposer() {
4837 m_pScanlineV = nullptr; 4837 m_pScanlineV = nullptr;
4838 m_pScanlineAlphaV = nullptr; 4838 m_pScanlineAlphaV = nullptr;
4839 m_pClipScanV = nullptr; 4839 m_pClipScanV = nullptr;
4840 m_pAddClipScan = nullptr; 4840 m_pAddClipScan = nullptr;
4841 m_bRgbByteOrder = FALSE; 4841 m_bRgbByteOrder = false;
4842 m_BlendType = FXDIB_BLEND_NORMAL; 4842 m_BlendType = FXDIB_BLEND_NORMAL;
4843 } 4843 }
4844 4844
4845 CFX_BitmapComposer::~CFX_BitmapComposer() { 4845 CFX_BitmapComposer::~CFX_BitmapComposer() {
4846 FX_Free(m_pScanlineV); 4846 FX_Free(m_pScanlineV);
4847 FX_Free(m_pScanlineAlphaV); 4847 FX_Free(m_pScanlineAlphaV);
4848 FX_Free(m_pClipScanV); 4848 FX_Free(m_pClipScanV);
4849 FX_Free(m_pAddClipScan); 4849 FX_Free(m_pAddClipScan);
4850 } 4850 }
4851 4851
4852 void CFX_BitmapComposer::Compose(CFX_DIBitmap* pDest, 4852 void CFX_BitmapComposer::Compose(CFX_DIBitmap* pDest,
4853 const CFX_ClipRgn* pClipRgn, 4853 const CFX_ClipRgn* pClipRgn,
4854 int bitmap_alpha, 4854 int bitmap_alpha,
4855 uint32_t mask_color, 4855 uint32_t mask_color,
4856 FX_RECT& dest_rect, 4856 FX_RECT& dest_rect,
4857 FX_BOOL bVertical, 4857 bool bVertical,
4858 FX_BOOL bFlipX, 4858 bool bFlipX,
4859 FX_BOOL bFlipY, 4859 bool bFlipY,
4860 FX_BOOL bRgbByteOrder, 4860 bool bRgbByteOrder,
4861 int alpha_flag, 4861 int alpha_flag,
4862 void* pIccTransform, 4862 void* pIccTransform,
4863 int blend_type) { 4863 int blend_type) {
4864 m_pBitmap = pDest; 4864 m_pBitmap = pDest;
4865 m_pClipRgn = pClipRgn; 4865 m_pClipRgn = pClipRgn;
4866 m_DestLeft = dest_rect.left; 4866 m_DestLeft = dest_rect.left;
4867 m_DestTop = dest_rect.top; 4867 m_DestTop = dest_rect.top;
4868 m_DestWidth = dest_rect.Width(); 4868 m_DestWidth = dest_rect.Width();
4869 m_DestHeight = dest_rect.Height(); 4869 m_DestHeight = dest_rect.Height();
4870 m_BitmapAlpha = bitmap_alpha; 4870 m_BitmapAlpha = bitmap_alpha;
4871 m_MaskColor = mask_color; 4871 m_MaskColor = mask_color;
4872 m_pClipMask = nullptr; 4872 m_pClipMask = nullptr;
4873 if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) { 4873 if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) {
4874 m_pClipMask = pClipRgn->GetMask().GetObject(); 4874 m_pClipMask = pClipRgn->GetMask().GetObject();
4875 } 4875 }
4876 m_bVertical = bVertical; 4876 m_bVertical = bVertical;
4877 m_bFlipX = bFlipX; 4877 m_bFlipX = bFlipX;
4878 m_bFlipY = bFlipY; 4878 m_bFlipY = bFlipY;
4879 m_AlphaFlag = alpha_flag; 4879 m_AlphaFlag = alpha_flag;
4880 m_pIccTransform = pIccTransform; 4880 m_pIccTransform = pIccTransform;
4881 m_bRgbByteOrder = bRgbByteOrder; 4881 m_bRgbByteOrder = bRgbByteOrder;
4882 m_BlendType = blend_type; 4882 m_BlendType = blend_type;
4883 } 4883 }
4884 FX_BOOL CFX_BitmapComposer::SetInfo(int width, 4884 bool CFX_BitmapComposer::SetInfo(int width,
4885 int height, 4885 int height,
4886 FXDIB_Format src_format, 4886 FXDIB_Format src_format,
4887 uint32_t* pSrcPalette) { 4887 uint32_t* pSrcPalette) {
4888 m_SrcFormat = src_format; 4888 m_SrcFormat = src_format;
4889 if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, pSrcPalette, 4889 if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, pSrcPalette,
4890 m_MaskColor, FXDIB_BLEND_NORMAL, 4890 m_MaskColor, FXDIB_BLEND_NORMAL,
4891 m_pClipMask != nullptr || (m_BitmapAlpha < 255), 4891 m_pClipMask != nullptr || (m_BitmapAlpha < 255),
4892 m_bRgbByteOrder, m_AlphaFlag, m_pIccTransform)) { 4892 m_bRgbByteOrder, m_AlphaFlag, m_pIccTransform)) {
4893 return FALSE; 4893 return false;
4894 } 4894 }
4895 if (m_bVertical) { 4895 if (m_bVertical) {
4896 m_pScanlineV = FX_Alloc(uint8_t, m_pBitmap->GetBPP() / 8 * width + 4); 4896 m_pScanlineV = FX_Alloc(uint8_t, m_pBitmap->GetBPP() / 8 * width + 4);
4897 m_pClipScanV = FX_Alloc(uint8_t, m_pBitmap->GetHeight()); 4897 m_pClipScanV = FX_Alloc(uint8_t, m_pBitmap->GetHeight());
4898 if (m_pBitmap->m_pAlphaMask) { 4898 if (m_pBitmap->m_pAlphaMask) {
4899 m_pScanlineAlphaV = FX_Alloc(uint8_t, width + 4); 4899 m_pScanlineAlphaV = FX_Alloc(uint8_t, width + 4);
4900 } 4900 }
4901 } 4901 }
4902 if (m_BitmapAlpha < 255) { 4902 if (m_BitmapAlpha < 255) {
4903 m_pAddClipScan = FX_Alloc( 4903 m_pAddClipScan = FX_Alloc(
4904 uint8_t, m_bVertical ? m_pBitmap->GetHeight() : m_pBitmap->GetWidth()); 4904 uint8_t, m_bVertical ? m_pBitmap->GetHeight() : m_pBitmap->GetWidth());
4905 } 4905 }
4906 return TRUE; 4906 return true;
4907 } 4907 }
4908 4908
4909 void CFX_BitmapComposer::DoCompose(uint8_t* dest_scan, 4909 void CFX_BitmapComposer::DoCompose(uint8_t* dest_scan,
4910 const uint8_t* src_scan, 4910 const uint8_t* src_scan,
4911 int dest_width, 4911 int dest_width,
4912 const uint8_t* clip_scan, 4912 const uint8_t* clip_scan,
4913 const uint8_t* src_extra_alpha, 4913 const uint8_t* src_extra_alpha,
4914 uint8_t* dst_extra_alpha) { 4914 uint8_t* dst_extra_alpha) {
4915 if (m_BitmapAlpha < 255) { 4915 if (m_BitmapAlpha < 255) {
4916 if (clip_scan) { 4916 if (clip_scan) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
5030 } 5030 }
5031 src_alpha_scan = m_pScanlineAlphaV; 5031 src_alpha_scan = m_pScanlineAlphaV;
5032 dest_alpha_scan = dest_alpha_buf; 5032 dest_alpha_scan = dest_alpha_buf;
5033 if (dest_alpha_scan) { 5033 if (dest_alpha_scan) {
5034 for (i = 0; i < m_DestHeight; i++) { 5034 for (i = 0; i < m_DestHeight; i++) {
5035 *dest_alpha_scan = *src_alpha_scan++; 5035 *dest_alpha_scan = *src_alpha_scan++;
5036 dest_alpha_scan += y_alpha_step; 5036 dest_alpha_scan += y_alpha_step;
5037 } 5037 }
5038 } 5038 }
5039 } 5039 }
OLDNEW
« no previous file with comments | « core/fxge/dib/dib_int.h ('k') | core/fxge/dib/fx_dib_convert.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698