| OLD | NEW |
| 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 #include "core/include/fxge/fx_ge.h" | 5 #include "core/include/fxge/fx_ge.h" |
| 6 | 6 |
| 7 //#define _SKIA_SUPPORT_ | |
| 8 #if defined(_SKIA_SUPPORT_) | 7 #if defined(_SKIA_SUPPORT_) |
| 9 #include "SkBlitter.h" | 8 #include "SkBlitter.h" |
| 10 #include "core/include/fxcodec/fx_codec.h" | 9 #include "core/include/fxcodec/fx_codec.h" |
| 11 #include "core/src/fxge/skia/fx_skia_blitter_new.h" | 10 #include "core/src/fxge/skia/fx_skia_blitter_new.h" |
| 12 | 11 |
| 13 // We use our own renderer here to make it simple | 12 // We use our own renderer here to make it simple |
| 14 void CFX_SkiaRenderer::blitAntiH(int x, | 13 void CFX_SkiaRenderer::blitAntiH(int x, |
| 15 int y, | 14 int y, |
| 16 const SkAlpha antialias[], | 15 const SkAlpha antialias[], |
| 17 const int16_t runs[]) { | 16 const int16_t runs[]) { |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 int col_start = span_left < clip_left ? clip_left - span_left : 0; | 382 int col_start = span_left < clip_left ? clip_left - span_left : 0; |
| 384 int col_end = | 383 int col_end = |
| 385 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); | 384 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); |
| 386 if (col_end < col_start) | 385 if (col_end < col_start) |
| 387 return; // do nothing. | 386 return; // do nothing. |
| 388 dest_scan += col_start << 2; | 387 dest_scan += col_start << 2; |
| 389 if (m_Alpha == 255 && cover_scan == 255) { | 388 if (m_Alpha == 255 && cover_scan == 255) { |
| 390 FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2); | 389 FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2); |
| 391 return; | 390 return; |
| 392 } | 391 } |
| 393 int src_alpha; | 392 int src_alpha = m_Alpha * cover_scan / 255; |
| 394 #if 0 | |
| 395 if (m_bFullCover) { | |
| 396 if (m_Alpha == 255) { | |
| 397 FXSYS_memset(dest_scan, m_Color, (col_end - col_start)<<2); | |
| 398 return; | |
| 399 } | |
| 400 } | |
| 401 else | |
| 402 #endif | |
| 403 src_alpha = m_Alpha * cover_scan / 255; | |
| 404 for (int col = col_start; col < col_end; col++) { | 393 for (int col = col_start; col < col_end; col++) { |
| 405 // Dest format: Argb | 394 // Dest format: Argb |
| 406 // calculate destination alpha (it's union of source and dest alpha) | 395 // calculate destination alpha (it's union of source and dest alpha) |
| 407 if (dest_scan[3] == 0) { | 396 if (dest_scan[3] == 0) { |
| 408 dest_scan[3] = src_alpha; | 397 dest_scan[3] = src_alpha; |
| 409 *dest_scan++ = m_Blue; | 398 *dest_scan++ = m_Blue; |
| 410 *dest_scan++ = m_Green; | 399 *dest_scan++ = m_Green; |
| 411 *dest_scan = m_Red; | 400 *dest_scan = m_Red; |
| 412 dest_scan += 2; | 401 dest_scan += 2; |
| 413 continue; | 402 continue; |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 684 int col_start = span_left < clip_left ? clip_left - span_left : 0; | 673 int col_start = span_left < clip_left ? clip_left - span_left : 0; |
| 685 int col_end = | 674 int col_end = |
| 686 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); | 675 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); |
| 687 if (col_end < col_start) | 676 if (col_end < col_start) |
| 688 return; // do nothing. | 677 return; // do nothing. |
| 689 dest_scan += (col_start << 2); | 678 dest_scan += (col_start << 2); |
| 690 if (m_Alpha == 255 && cover_scan == 255) { | 679 if (m_Alpha == 255 && cover_scan == 255) { |
| 691 FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2); | 680 FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2); |
| 692 return; | 681 return; |
| 693 } | 682 } |
| 694 int src_alpha; | 683 int src_alpha = m_Alpha * cover_scan / 255; |
| 695 #if 0 | |
| 696 if (m_bFullCover) | |
| 697 src_alpha = m_Alpha; | |
| 698 else | |
| 699 #endif | |
| 700 src_alpha = m_Alpha * cover_scan / 255; | |
| 701 for (int col = col_start; col < col_end; col++) { | 684 for (int col = col_start; col < col_end; col++) { |
| 702 // Dest format: Rgb32 | 685 // Dest format: Rgb32 |
| 703 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha); | 686 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha); |
| 704 dest_scan++; | 687 dest_scan++; |
| 705 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha); | 688 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha); |
| 706 dest_scan++; | 689 dest_scan++; |
| 707 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha); | 690 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha); |
| 708 dest_scan += 2; | 691 dest_scan += 2; |
| 709 } | 692 } |
| 710 } | 693 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 728 if (col_end < col_start) | 711 if (col_end < col_start) |
| 729 return; // do nothing. | 712 return; // do nothing. |
| 730 dest_scan += col_start << 2; | 713 dest_scan += col_start << 2; |
| 731 ori_scan += col_start << 2; | 714 ori_scan += col_start << 2; |
| 732 if (m_Alpha == 255 && cover_scan == 255) { | 715 if (m_Alpha == 255 && cover_scan == 255) { |
| 733 FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2); | 716 FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2); |
| 734 return; | 717 return; |
| 735 } | 718 } |
| 736 int src_alpha = m_Alpha; | 719 int src_alpha = m_Alpha; |
| 737 for (int col = col_start; col < col_end; col++) { | 720 for (int col = col_start; col < col_end; col++) { |
| 738 #if 0 | |
| 739 if (m_bFullCover) { | |
| 740 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha)
; | |
| 741 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha
); | |
| 742 *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha); | |
| 743 dest_scan += 2; ori_scan += 2; | |
| 744 continue; | |
| 745 } | |
| 746 #endif | |
| 747 int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha); | 721 int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha); |
| 748 int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha); | 722 int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha); |
| 749 int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha); | 723 int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha); |
| 750 ori_scan += 2; | 724 ori_scan += 2; |
| 751 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan); | 725 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan); |
| 752 dest_scan++; | 726 dest_scan++; |
| 753 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan); | 727 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan); |
| 754 dest_scan++; | 728 dest_scan++; |
| 755 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan); | 729 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan); |
| 756 dest_scan += 2; | 730 dest_scan += 2; |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 947 uint8_t* clip_scan, | 921 uint8_t* clip_scan, |
| 948 uint8_t* dest_extra_alpha_scan) { | 922 uint8_t* dest_extra_alpha_scan) { |
| 949 dest_scan = | 923 dest_scan = |
| 950 (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left << 1); | 924 (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left << 1); |
| 951 int col_start = span_left < clip_left ? clip_left - span_left : 0; | 925 int col_start = span_left < clip_left ? clip_left - span_left : 0; |
| 952 int col_end = | 926 int col_end = |
| 953 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); | 927 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); |
| 954 if (col_end < col_start) | 928 if (col_end < col_start) |
| 955 return; // do nothing. | 929 return; // do nothing. |
| 956 dest_scan += (col_start << 1) + col_start; | 930 dest_scan += (col_start << 1) + col_start; |
| 957 int src_alpha; | 931 int src_alpha = m_Alpha * cover_scan / 255; |
| 958 #if 0 | |
| 959 if (m_bFullCover) | |
| 960 src_alpha = m_Alpha; | |
| 961 else | |
| 962 #endif | |
| 963 src_alpha = m_Alpha * cover_scan / 255; | |
| 964 if (src_alpha == 255) { | 932 if (src_alpha == 255) { |
| 965 for (int col = col_start; col < col_end; col++) { | 933 for (int col = col_start; col < col_end; col++) { |
| 966 *dest_scan++ = m_Blue; | 934 *dest_scan++ = m_Blue; |
| 967 *dest_scan++ = m_Green; | 935 *dest_scan++ = m_Green; |
| 968 *dest_scan++ = m_Red; | 936 *dest_scan++ = m_Red; |
| 969 } | 937 } |
| 970 return; | 938 return; |
| 971 } | 939 } |
| 972 for (int col = col_start; col < col_end; col++) { | 940 for (int col = col_start; col < col_end; col++) { |
| 973 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha); | 941 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1004 ori_scan += (col_start << 1) + col_start; | 972 ori_scan += (col_start << 1) + col_start; |
| 1005 if (m_Alpha == 255 && cover_scan == 255) { | 973 if (m_Alpha == 255 && cover_scan == 255) { |
| 1006 for (int col = col_start; col < col_end; col++) { | 974 for (int col = col_start; col < col_end; col++) { |
| 1007 *dest_scan++ = m_Blue; | 975 *dest_scan++ = m_Blue; |
| 1008 *dest_scan++ = m_Green; | 976 *dest_scan++ = m_Green; |
| 1009 *dest_scan++ = m_Red; | 977 *dest_scan++ = m_Red; |
| 1010 } | 978 } |
| 1011 return; | 979 return; |
| 1012 } | 980 } |
| 1013 for (int col = col_start; col < col_end; col++) { | 981 for (int col = col_start; col < col_end; col++) { |
| 1014 #if 0 | |
| 1015 if (m_bFullCover) { | |
| 1016 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, m_Alpha); | |
| 1017 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, m_Alpha); | |
| 1018 *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, m_Alpha); | |
| 1019 continue; | |
| 1020 } | |
| 1021 #endif | |
| 1022 int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, m_Alpha); | 982 int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, m_Alpha); |
| 1023 int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, m_Alpha); | 983 int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, m_Alpha); |
| 1024 int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, m_Alpha); | 984 int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, m_Alpha); |
| 1025 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan); | 985 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan); |
| 1026 dest_scan++; | 986 dest_scan++; |
| 1027 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan); | 987 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan); |
| 1028 dest_scan++; | 988 dest_scan++; |
| 1029 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan); | 989 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan); |
| 1030 dest_scan++; | 990 dest_scan++; |
| 1031 } | 991 } |
| (...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1523 | 1483 |
| 1524 //-------------------------------------------------------------------- | 1484 //-------------------------------------------------------------------- |
| 1525 FX_BOOL CFX_SkiaRenderer::Init( | 1485 FX_BOOL CFX_SkiaRenderer::Init( |
| 1526 CFX_DIBitmap* pDevice, | 1486 CFX_DIBitmap* pDevice, |
| 1527 CFX_DIBitmap* pOriDevice, | 1487 CFX_DIBitmap* pOriDevice, |
| 1528 const CFX_ClipRgn* pClipRgn, | 1488 const CFX_ClipRgn* pClipRgn, |
| 1529 FX_DWORD color, | 1489 FX_DWORD color, |
| 1530 FX_BOOL bFullCover, | 1490 FX_BOOL bFullCover, |
| 1531 FX_BOOL bRgbByteOrder, | 1491 FX_BOOL bRgbByteOrder, |
| 1532 int alpha_flag, | 1492 int alpha_flag, |
| 1533 void* pIccTransform) // The alpha flag must be fill_flag if exist. | 1493 void* pIccTransform) { // The alpha flag must be fill_flag if exist. |
| 1534 { | |
| 1535 m_pDevice = pDevice; | 1494 m_pDevice = pDevice; |
| 1536 m_pClipRgn = pClipRgn; | 1495 m_pClipRgn = pClipRgn; |
| 1537 m_bRgbByteOrder = bRgbByteOrder; | 1496 m_bRgbByteOrder = bRgbByteOrder; |
| 1538 m_pOriDevice = pOriDevice; | 1497 m_pOriDevice = pOriDevice; |
| 1539 m_pDestScan = NULL; | 1498 m_pDestScan = NULL; |
| 1540 m_pDestExtraAlphaScan = NULL; | 1499 m_pDestExtraAlphaScan = NULL; |
| 1541 m_pOriScan = NULL; | 1500 m_pOriScan = NULL; |
| 1542 m_pClipScan = NULL; | 1501 m_pClipScan = NULL; |
| 1543 composite_span = NULL; | 1502 composite_span = NULL; |
| 1544 if (m_pClipRgn) | 1503 if (m_pClipRgn) |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1596 m_Gray = FXRGB2GRAY(r, g, b); | 1555 m_Gray = FXRGB2GRAY(r, g, b); |
| 1597 } else { | 1556 } else { |
| 1598 m_Gray = | 1557 m_Gray = |
| 1599 FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B(color)); | 1558 FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B(color)); |
| 1600 } | 1559 } |
| 1601 } | 1560 } |
| 1602 } | 1561 } |
| 1603 } else { | 1562 } else { |
| 1604 if (bDeviceCMYK) { // Cmyk(a) Device | 1563 if (bDeviceCMYK) { // Cmyk(a) Device |
| 1605 ASSERT(!m_bRgbByteOrder); | 1564 ASSERT(!m_bRgbByteOrder); |
| 1606 // TODO... opt for cmyk | 1565 // TODO ... opt for cmyk |
| 1607 composite_span = &CFX_SkiaRenderer::CompositeSpanCMYK; | 1566 composite_span = &CFX_SkiaRenderer::CompositeSpanCMYK; |
| 1608 if (bObjectCMYK) { | 1567 if (bObjectCMYK) { |
| 1609 m_Color = FXCMYK_TODIB(color); | 1568 m_Color = FXCMYK_TODIB(color); |
| 1610 if (pIccTransform) | 1569 if (pIccTransform) |
| 1611 pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color, | 1570 pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color, |
| 1612 (const uint8_t*)&m_Color, 1); | 1571 (const uint8_t*)&m_Color, 1); |
| 1613 } else { // Object RGB | 1572 } else { // Object RGB |
| 1614 if (!pIccTransform) | 1573 if (!pIccTransform) |
| 1615 return FALSE; | 1574 return FALSE; |
| 1616 color = FXARGB_TODIB(color); | 1575 color = FXARGB_TODIB(color); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1722 : &CFX_SkiaRenderer::CompositeSpanRGB32_7; | 1681 : &CFX_SkiaRenderer::CompositeSpanRGB32_7; |
| 1723 } break; | 1682 } break; |
| 1724 case 1: | 1683 case 1: |
| 1725 case 5: | 1684 case 5: |
| 1726 case 8: | 1685 case 8: |
| 1727 case 9: | 1686 case 9: |
| 1728 case 11: | 1687 case 11: |
| 1729 case 12: | 1688 case 12: |
| 1730 case 13: | 1689 case 13: |
| 1731 case 15: | 1690 case 15: |
| 1732 // TODO... | 1691 // TODO ... |
| 1733 break; | 1692 break; |
| 1734 case 10: | 1693 case 10: |
| 1735 composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_10; | 1694 composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_10; |
| 1736 break; | 1695 break; |
| 1737 case 14: | 1696 case 14: |
| 1738 composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_14; | 1697 composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_14; |
| 1739 break; | 1698 break; |
| 1740 } | 1699 } |
| 1741 return !!composite_span; | 1700 return !!composite_span; |
| 1742 } | 1701 } |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1841 m_pDevice = pDevice; | 1800 m_pDevice = pDevice; |
| 1842 m_Left = Left; | 1801 m_Left = Left; |
| 1843 m_Top = Top; | 1802 m_Top = Top; |
| 1844 if (pDevice) { | 1803 if (pDevice) { |
| 1845 m_dstWidth = m_Left + pDevice->GetWidth(); | 1804 m_dstWidth = m_Left + pDevice->GetWidth(); |
| 1846 m_dstHeight = m_Top + pDevice->GetHeight(); | 1805 m_dstHeight = m_Top + pDevice->GetHeight(); |
| 1847 } | 1806 } |
| 1848 return TRUE; | 1807 return TRUE; |
| 1849 } | 1808 } |
| 1850 #endif | 1809 #endif |
| OLD | NEW |