| 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_ | 7 //#define _SKIA_SUPPORT_ |
| 8 #if defined(_SKIA_SUPPORT_) | 8 #if defined(_SKIA_SUPPORT_) |
| 9 #include "SkBlitter.h" | 9 #include "SkBlitter.h" |
| 10 #include "core/include/fxcodec/fx_codec.h" | 10 #include "core/include/fxcodec/fx_codec.h" |
| 11 #include "fx_skia_blitter_new.h" | 11 #include "fx_skia_blitter_new.h" |
| 12 | 12 |
| 13 // We use our own renderer here to make it simple | 13 // We use our own renderer here to make it simple |
| 14 void CFX_SkiaRenderer::blitAntiH(int x, | 14 void CFX_SkiaRenderer::blitAntiH(int x, |
| 15 int y, | 15 int y, |
| 16 const SkAlpha antialias[], | 16 const SkAlpha antialias[], |
| 17 const int16_t runs[]) { | 17 const int16_t runs[]) { |
| 18 FXSYS_assert(m_Alpha); | 18 FXSYS_assert(m_Alpha); |
| 19 if (m_pOriDevice == NULL && composite_span == NULL) | 19 if (!m_pOriDevice && !composite_span) |
| 20 return; | 20 return; |
| 21 if (y < m_ClipBox.top || y >= m_ClipBox.bottom) | 21 if (y < m_ClipBox.top || y >= m_ClipBox.bottom) |
| 22 return; | 22 return; |
| 23 while (1) { | 23 while (1) { |
| 24 int width = runs[0]; | 24 int width = runs[0]; |
| 25 SkASSERT(width >= 0); | 25 SkASSERT(width >= 0); |
| 26 if (width <= 0) | 26 if (width <= 0) |
| 27 return; | 27 return; |
| 28 unsigned aa = antialias[0]; | 28 unsigned aa = antialias[0]; |
| 29 if (aa) | 29 if (aa) |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 ASSERT(!m_pDevice->IsCmykImage()); | 99 ASSERT(!m_pDevice->IsCmykImage()); |
| 100 dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left / 8; | 100 dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left / 8; |
| 101 int col_start = span_left < clip_left ? clip_left - span_left : 0; | 101 int col_start = span_left < clip_left ? clip_left - span_left : 0; |
| 102 int col_end = | 102 int col_end = |
| 103 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); | 103 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); |
| 104 if (col_end < col_start) | 104 if (col_end < col_start) |
| 105 return; // do nothing. | 105 return; // do nothing. |
| 106 dest_scan += col_start / 8; | 106 dest_scan += col_start / 8; |
| 107 | 107 |
| 108 int index = 0; | 108 int index = 0; |
| 109 if (m_pDevice->GetPalette() == NULL) | 109 if (m_pDevice->GetPalette()) { |
| 110 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; | 110 for (int i = 0; i < 2; i++) { |
| 111 else { | |
| 112 for (int i = 0; i < 2; i++) | |
| 113 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) | 111 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) |
| 114 index = i; | 112 index = i; |
| 113 } |
| 114 } else { |
| 115 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; |
| 115 } | 116 } |
| 116 uint8_t* dest_scan1 = dest_scan; | 117 uint8_t* dest_scan1 = dest_scan; |
| 117 int src_alpha = m_Alpha * cover_scan / 255; | 118 int src_alpha = m_Alpha * cover_scan / 255; |
| 118 for (int col = col_start; col < col_end; col++) { | 119 for (int col = col_start; col < col_end; col++) { |
| 119 if (src_alpha) { | 120 if (src_alpha) { |
| 120 if (!index) | 121 if (!index) |
| 121 *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8)); | 122 *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8)); |
| 122 else | 123 else |
| 123 *dest_scan1 |= 1 << (7 - (col + span_left) % 8); | 124 *dest_scan1 |= 1 << (7 - (col + span_left) % 8); |
| 124 } | 125 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 143 clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) - | 144 clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) - |
| 144 clip_left + span_left; | 145 clip_left + span_left; |
| 145 int col_start = span_left < clip_left ? clip_left - span_left : 0; | 146 int col_start = span_left < clip_left ? clip_left - span_left : 0; |
| 146 int col_end = | 147 int col_end = |
| 147 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); | 148 (span_left + span_len) < clip_right ? span_len : (clip_right - span_left); |
| 148 if (col_end < col_start) | 149 if (col_end < col_start) |
| 149 return; // do nothing. | 150 return; // do nothing. |
| 150 dest_scan += col_start / 8; | 151 dest_scan += col_start / 8; |
| 151 | 152 |
| 152 int index = 0; | 153 int index = 0; |
| 153 if (m_pDevice->GetPalette() == NULL) | 154 if (m_pDevice->GetPalette()) { |
| 154 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; | 155 for (int i = 0; i < 2; i++) { |
| 155 else { | |
| 156 for (int i = 0; i < 2; i++) | |
| 157 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) | 156 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) |
| 158 index = i; | 157 index = i; |
| 158 } |
| 159 } else { |
| 160 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; |
| 159 } | 161 } |
| 160 uint8_t* dest_scan1 = dest_scan; | 162 uint8_t* dest_scan1 = dest_scan; |
| 161 int src_alpha = m_Alpha * cover_scan / 255; | 163 int src_alpha = m_Alpha * cover_scan / 255; |
| 162 for (int col = col_start; col < col_end; col++) { | 164 for (int col = col_start; col < col_end; col++) { |
| 163 int src_alpha1 = src_alpha * clip_scan[col] / 255; | 165 int src_alpha1 = src_alpha * clip_scan[col] / 255; |
| 164 if (src_alpha1) { | 166 if (src_alpha1) { |
| 165 if (!index) | 167 if (!index) |
| 166 *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8)); | 168 *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8)); |
| 167 else | 169 else |
| 168 *dest_scan1 |= 1 << (7 - (col + span_left) % 8); | 170 *dest_scan1 |= 1 << (7 - (col + span_left) % 8); |
| (...skipping 1560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1729 case 15: | 1731 case 15: |
| 1730 // TODO... | 1732 // TODO... |
| 1731 break; | 1733 break; |
| 1732 case 10: | 1734 case 10: |
| 1733 composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_10; | 1735 composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_10; |
| 1734 break; | 1736 break; |
| 1735 case 14: | 1737 case 14: |
| 1736 composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_14; | 1738 composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_14; |
| 1737 break; | 1739 break; |
| 1738 } | 1740 } |
| 1739 if (composite_span == NULL) | 1741 return !!composite_span; |
| 1740 return FALSE; | |
| 1741 return TRUE; | |
| 1742 } | 1742 } |
| 1743 | 1743 |
| 1744 /*------------------------------------------------------------------------------
----------------------*/ | 1744 /*------------------------------------------------------------------------------
----------------------*/ |
| 1745 void CFX_SkiaA8Renderer::blitAntiH(int x, | 1745 void CFX_SkiaA8Renderer::blitAntiH(int x, |
| 1746 int y, | 1746 int y, |
| 1747 const SkAlpha antialias[], | 1747 const SkAlpha antialias[], |
| 1748 const int16_t runs[]) { | 1748 const int16_t runs[]) { |
| 1749 FXSYS_assert(m_pDevice); | 1749 FXSYS_assert(m_pDevice); |
| 1750 int dst_y = y - m_Top; | 1750 int dst_y = y - m_Top; |
| 1751 if (dst_y < 0 || dst_y >= m_pDevice->GetHeight()) | 1751 if (dst_y < 0 || dst_y >= m_pDevice->GetHeight()) |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1841 m_pDevice = pDevice; | 1841 m_pDevice = pDevice; |
| 1842 m_Left = Left; | 1842 m_Left = Left; |
| 1843 m_Top = Top; | 1843 m_Top = Top; |
| 1844 if (pDevice) { | 1844 if (pDevice) { |
| 1845 m_dstWidth = m_Left + pDevice->GetWidth(); | 1845 m_dstWidth = m_Left + pDevice->GetWidth(); |
| 1846 m_dstHeight = m_Top + pDevice->GetHeight(); | 1846 m_dstHeight = m_Top + pDevice->GetHeight(); |
| 1847 } | 1847 } |
| 1848 return TRUE; | 1848 return TRUE; |
| 1849 } | 1849 } |
| 1850 #endif | 1850 #endif |
| OLD | NEW |