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 // 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/src/fxge/agg/include/fx_agg_driver.h" | 7 #include "core/src/fxge/agg/include/fx_agg_driver.h" |
8 | 8 |
9 #include "core/include/fxcodec/fx_codec.h" | 9 #include "core/include/fxcodec/fx_codec.h" |
10 #include "core/include/fxge/fx_ge.h" | 10 #include "core/include/fxge/fx_ge.h" |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 } | 143 } |
144 FX_FLOAT width = pGraphState->m_LineWidth * scale; | 144 FX_FLOAT width = pGraphState->m_LineWidth * scale; |
145 FX_FLOAT unit = 1.f; | 145 FX_FLOAT unit = 1.f; |
146 if (pObject2Device) { | 146 if (pObject2Device) { |
147 unit = FXSYS_Div( | 147 unit = FXSYS_Div( |
148 1.0f, (pObject2Device->GetXUnit() + pObject2Device->GetYUnit()) / 2); | 148 1.0f, (pObject2Device->GetXUnit() + pObject2Device->GetYUnit()) / 2); |
149 } | 149 } |
150 if (width < unit) { | 150 if (width < unit) { |
151 width = unit; | 151 width = unit; |
152 } | 152 } |
153 if (pGraphState->m_DashArray == NULL) { | 153 if (pGraphState->m_DashArray) { |
154 agg::conv_stroke<agg::path_storage> stroke(path_data); | |
155 stroke.line_join(join); | |
156 stroke.line_cap(cap); | |
157 stroke.miter_limit(pGraphState->m_MiterLimit); | |
158 stroke.width(width); | |
159 rasterizer.add_path_transformed(stroke, pObject2Device); | |
160 } else { | |
161 typedef agg::conv_dash<agg::path_storage> dash_converter; | 154 typedef agg::conv_dash<agg::path_storage> dash_converter; |
162 dash_converter dash(path_data); | 155 dash_converter dash(path_data); |
163 for (int i = 0; i < (pGraphState->m_DashCount + 1) / 2; i++) { | 156 for (int i = 0; i < (pGraphState->m_DashCount + 1) / 2; i++) { |
164 FX_FLOAT on = pGraphState->m_DashArray[i * 2]; | 157 FX_FLOAT on = pGraphState->m_DashArray[i * 2]; |
165 if (on <= 0.000001f) { | 158 if (on <= 0.000001f) { |
166 on = 1.0f / 10; | 159 on = 1.0f / 10; |
167 } | 160 } |
168 FX_FLOAT off = i * 2 + 1 == pGraphState->m_DashCount | 161 FX_FLOAT off = i * 2 + 1 == pGraphState->m_DashCount |
169 ? on | 162 ? on |
170 : pGraphState->m_DashArray[i * 2 + 1]; | 163 : pGraphState->m_DashArray[i * 2 + 1]; |
171 if (off < 0) { | 164 if (off < 0) { |
172 off = 0; | 165 off = 0; |
173 } | 166 } |
174 dash.add_dash(on * scale, off * scale); | 167 dash.add_dash(on * scale, off * scale); |
175 } | 168 } |
176 dash.dash_start(pGraphState->m_DashPhase * scale); | 169 dash.dash_start(pGraphState->m_DashPhase * scale); |
177 typedef agg::conv_stroke<dash_converter> dash_stroke; | 170 typedef agg::conv_stroke<dash_converter> dash_stroke; |
178 dash_stroke stroke(dash); | 171 dash_stroke stroke(dash); |
179 stroke.line_join(join); | 172 stroke.line_join(join); |
180 stroke.line_cap(cap); | 173 stroke.line_cap(cap); |
181 stroke.miter_limit(pGraphState->m_MiterLimit); | 174 stroke.miter_limit(pGraphState->m_MiterLimit); |
182 stroke.width(width); | 175 stroke.width(width); |
183 rasterizer.add_path_transformed(stroke, pObject2Device); | 176 rasterizer.add_path_transformed(stroke, pObject2Device); |
| 177 } else { |
| 178 agg::conv_stroke<agg::path_storage> stroke(path_data); |
| 179 stroke.line_join(join); |
| 180 stroke.line_cap(cap); |
| 181 stroke.miter_limit(pGraphState->m_MiterLimit); |
| 182 stroke.width(width); |
| 183 rasterizer.add_path_transformed(stroke, pObject2Device); |
184 } | 184 } |
185 } | 185 } |
186 IFX_RenderDeviceDriver* IFX_RenderDeviceDriver::CreateFxgeDriver( | 186 IFX_RenderDeviceDriver* IFX_RenderDeviceDriver::CreateFxgeDriver( |
187 CFX_DIBitmap* pBitmap, | 187 CFX_DIBitmap* pBitmap, |
188 FX_BOOL bRgbByteOrder, | 188 FX_BOOL bRgbByteOrder, |
189 CFX_DIBitmap* pOriDevice, | 189 CFX_DIBitmap* pOriDevice, |
190 FX_BOOL bGroupKnockout) { | 190 FX_BOOL bGroupKnockout) { |
191 return new CFX_AggDeviceDriver(pBitmap, 0, bRgbByteOrder, pOriDevice, | 191 return new CFX_AggDeviceDriver(pBitmap, 0, bRgbByteOrder, pOriDevice, |
192 bGroupKnockout); | 192 bGroupKnockout); |
193 } | 193 } |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 if (m_bFullCover) { | 547 if (m_bFullCover) { |
548 *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha); | 548 *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha); |
549 } else { | 549 } else { |
550 int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha); | 550 int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha); |
551 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan[col]); | 551 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan[col]); |
552 dest_scan++; | 552 dest_scan++; |
553 } | 553 } |
554 } | 554 } |
555 } else { | 555 } else { |
556 int index = 0; | 556 int index = 0; |
557 if (m_pDevice->GetPalette() == NULL) { | 557 if (m_pDevice->GetPalette()) { |
558 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; | 558 for (int i = 0; i < 2; i++) { |
559 } else { | |
560 for (int i = 0; i < 2; i++) | |
561 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { | 559 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { |
562 index = i; | 560 index = i; |
563 } | 561 } |
| 562 } |
| 563 } else { |
| 564 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; |
564 } | 565 } |
565 uint8_t* dest_scan1 = dest_scan; | 566 uint8_t* dest_scan1 = dest_scan; |
566 for (int col = col_start; col < col_end; col++) { | 567 for (int col = col_start; col < col_end; col++) { |
567 int src_alpha; | 568 int src_alpha; |
568 if (clip_scan) { | 569 if (clip_scan) { |
569 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255; | 570 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255; |
570 } else { | 571 } else { |
571 src_alpha = m_Alpha * cover_scan[col] / 255; | 572 src_alpha = m_Alpha * cover_scan[col] / 255; |
572 } | 573 } |
573 if (src_alpha) { | 574 if (src_alpha) { |
(...skipping 17 matching lines...) Expand all Loading... |
591 uint8_t* clip_scan, | 592 uint8_t* clip_scan, |
592 uint8_t* dest_extra_alpha_scan) { | 593 uint8_t* dest_extra_alpha_scan) { |
593 ASSERT(!m_bRgbByteOrder); | 594 ASSERT(!m_bRgbByteOrder); |
594 ASSERT(!m_pDevice->IsCmykImage()); | 595 ASSERT(!m_pDevice->IsCmykImage()); |
595 int col_start = span_left < clip_left ? clip_left - span_left : 0; | 596 int col_start = span_left < clip_left ? clip_left - span_left : 0; |
596 int col_end = (span_left + span_len) < clip_right | 597 int col_end = (span_left + span_len) < clip_right |
597 ? span_len | 598 ? span_len |
598 : (clip_right - span_left); | 599 : (clip_right - span_left); |
599 dest_scan += col_start / 8; | 600 dest_scan += col_start / 8; |
600 int index = 0; | 601 int index = 0; |
601 if (m_pDevice->GetPalette() == NULL) { | 602 if (m_pDevice->GetPalette()) { |
602 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; | 603 for (int i = 0; i < 2; i++) { |
603 } else { | |
604 for (int i = 0; i < 2; i++) | |
605 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { | 604 if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) { |
606 index = i; | 605 index = i; |
607 } | 606 } |
| 607 } |
| 608 } else { |
| 609 index = ((uint8_t)m_Color == 0xff) ? 1 : 0; |
608 } | 610 } |
609 uint8_t* dest_scan1 = dest_scan; | 611 uint8_t* dest_scan1 = dest_scan; |
610 for (int col = col_start; col < col_end; col++) { | 612 for (int col = col_start; col < col_end; col++) { |
611 int src_alpha; | 613 int src_alpha; |
612 if (clip_scan) { | 614 if (clip_scan) { |
613 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255; | 615 src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255; |
614 } else { | 616 } else { |
615 src_alpha = m_Alpha * cover_scan[col] / 255; | 617 src_alpha = m_Alpha * cover_scan[col] / 255; |
616 } | 618 } |
617 if (src_alpha) { | 619 if (src_alpha) { |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
987 dest_scan++; | 989 dest_scan++; |
988 continue; | 990 continue; |
989 } | 991 } |
990 } | 992 } |
991 dest_scan += 4; | 993 dest_scan += 4; |
992 } | 994 } |
993 } | 995 } |
994 } | 996 } |
995 template <class Scanline> | 997 template <class Scanline> |
996 void render(const Scanline& sl) { | 998 void render(const Scanline& sl) { |
997 if (m_pOriDevice == NULL && composite_span == NULL) { | 999 if (!m_pOriDevice && !composite_span) { |
998 return; | 1000 return; |
999 } | 1001 } |
1000 int y = sl.y(); | 1002 int y = sl.y(); |
1001 if (y < m_ClipBox.top || y >= m_ClipBox.bottom) { | 1003 if (y < m_ClipBox.top || y >= m_ClipBox.bottom) { |
1002 return; | 1004 return; |
1003 } | 1005 } |
1004 uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * y; | 1006 uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * y; |
1005 uint8_t* dest_scan_extra_alpha = NULL; | 1007 uint8_t* dest_scan_extra_alpha = NULL; |
1006 CFX_DIBitmap* pAlphaMask = m_pDevice->m_pAlphaMask; | 1008 CFX_DIBitmap* pAlphaMask = m_pDevice->m_pAlphaMask; |
1007 if (pAlphaMask) { | 1009 if (pAlphaMask) { |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1205 const CFX_GraphStateData* pGraphState, | 1207 const CFX_GraphStateData* pGraphState, |
1206 FX_DWORD fill_color, | 1208 FX_DWORD fill_color, |
1207 FX_DWORD stroke_color, | 1209 FX_DWORD stroke_color, |
1208 int fill_mode, | 1210 int fill_mode, |
1209 int alpha_flag, | 1211 int alpha_flag, |
1210 void* pIccTransform, | 1212 void* pIccTransform, |
1211 int blend_type) { | 1213 int blend_type) { |
1212 if (blend_type != FXDIB_BLEND_NORMAL) { | 1214 if (blend_type != FXDIB_BLEND_NORMAL) { |
1213 return FALSE; | 1215 return FALSE; |
1214 } | 1216 } |
1215 if (GetBuffer() == NULL) { | 1217 if (!GetBuffer()) { |
1216 return TRUE; | 1218 return TRUE; |
1217 } | 1219 } |
1218 m_FillFlags = fill_mode; | 1220 m_FillFlags = fill_mode; |
1219 if ((fill_mode & 3) && fill_color) { | 1221 if ((fill_mode & 3) && fill_color) { |
1220 CAgg_PathData path_data; | 1222 CAgg_PathData path_data; |
1221 path_data.BuildPath(pPathData, pObject2Device); | 1223 path_data.BuildPath(pPathData, pObject2Device); |
1222 agg::rasterizer_scanline_aa rasterizer; | 1224 agg::rasterizer_scanline_aa rasterizer; |
1223 rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), | 1225 rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), |
1224 (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT))); | 1226 (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT))); |
1225 rasterizer.add_path(path_data.m_PathData); | 1227 rasterizer.add_path(path_data.m_PathData); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1379 } | 1381 } |
1380 } | 1382 } |
1381 void RgbByteOrderTransferBitmap(CFX_DIBitmap* pBitmap, | 1383 void RgbByteOrderTransferBitmap(CFX_DIBitmap* pBitmap, |
1382 int dest_left, | 1384 int dest_left, |
1383 int dest_top, | 1385 int dest_top, |
1384 int width, | 1386 int width, |
1385 int height, | 1387 int height, |
1386 const CFX_DIBSource* pSrcBitmap, | 1388 const CFX_DIBSource* pSrcBitmap, |
1387 int src_left, | 1389 int src_left, |
1388 int src_top) { | 1390 int src_top) { |
1389 if (pBitmap == NULL) { | 1391 if (!pBitmap) { |
1390 return; | 1392 return; |
1391 } | 1393 } |
1392 pBitmap->GetOverlapRect(dest_left, dest_top, width, height, | 1394 pBitmap->GetOverlapRect(dest_left, dest_top, width, height, |
1393 pSrcBitmap->GetWidth(), pSrcBitmap->GetHeight(), | 1395 pSrcBitmap->GetWidth(), pSrcBitmap->GetHeight(), |
1394 src_left, src_top, NULL); | 1396 src_left, src_top, NULL); |
1395 if (width == 0 || height == 0) { | 1397 if (width == 0 || height == 0) { |
1396 return; | 1398 return; |
1397 } | 1399 } |
1398 int Bpp = pBitmap->GetBPP() / 8; | 1400 int Bpp = pBitmap->GetBPP() / 8; |
1399 FXDIB_Format dest_format = pBitmap->GetFormat(); | 1401 FXDIB_Format dest_format = pBitmap->GetFormat(); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1520 if (pDevice->m_pAlphaMask) { | 1522 if (pDevice->m_pAlphaMask) { |
1521 pDevice->m_pAlphaMask->SetPixel(x, y, alpha << 24); | 1523 pDevice->m_pAlphaMask->SetPixel(x, y, alpha << 24); |
1522 } | 1524 } |
1523 return TRUE; | 1525 return TRUE; |
1524 } | 1526 } |
1525 FX_BOOL CFX_AggDeviceDriver::SetPixel(int x, | 1527 FX_BOOL CFX_AggDeviceDriver::SetPixel(int x, |
1526 int y, | 1528 int y, |
1527 FX_DWORD color, | 1529 FX_DWORD color, |
1528 int alpha_flag, | 1530 int alpha_flag, |
1529 void* pIccTransform) { | 1531 void* pIccTransform) { |
1530 if (m_pBitmap->GetBuffer() == NULL) { | 1532 if (!m_pBitmap->GetBuffer()) { |
1531 return TRUE; | 1533 return TRUE; |
1532 } | 1534 } |
1533 if (!CFX_GEModule::Get()->GetCodecModule() || | 1535 if (!CFX_GEModule::Get()->GetCodecModule() || |
1534 !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) { | 1536 !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) { |
1535 pIccTransform = NULL; | 1537 pIccTransform = NULL; |
1536 } | 1538 } |
1537 if (m_pClipRgn == NULL) { | 1539 if (!m_pClipRgn) { |
1538 if (m_bRgbByteOrder) { | 1540 if (m_bRgbByteOrder) { |
1539 RgbByteOrderSetPixel(m_pBitmap, x, y, color); | 1541 RgbByteOrderSetPixel(m_pBitmap, x, y, color); |
1540 } else { | 1542 } else { |
1541 return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform); | 1543 return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform); |
1542 } | 1544 } |
1543 } else if (m_pClipRgn->GetBox().Contains(x, y)) { | 1545 } else if (m_pClipRgn->GetBox().Contains(x, y)) { |
1544 if (m_pClipRgn->GetType() == CFX_ClipRgn::RectI) { | 1546 if (m_pClipRgn->GetType() == CFX_ClipRgn::RectI) { |
1545 if (m_bRgbByteOrder) { | 1547 if (m_bRgbByteOrder) { |
1546 RgbByteOrderSetPixel(m_pBitmap, x, y, color); | 1548 RgbByteOrderSetPixel(m_pBitmap, x, y, color); |
1547 } else { | 1549 } else { |
(...skipping 21 matching lines...) Expand all Loading... |
1569 return TRUE; | 1571 return TRUE; |
1570 } | 1572 } |
1571 FX_BOOL CFX_AggDeviceDriver::FillRect(const FX_RECT* pRect, | 1573 FX_BOOL CFX_AggDeviceDriver::FillRect(const FX_RECT* pRect, |
1572 FX_DWORD fill_color, | 1574 FX_DWORD fill_color, |
1573 int alpha_flag, | 1575 int alpha_flag, |
1574 void* pIccTransform, | 1576 void* pIccTransform, |
1575 int blend_type) { | 1577 int blend_type) { |
1576 if (blend_type != FXDIB_BLEND_NORMAL) { | 1578 if (blend_type != FXDIB_BLEND_NORMAL) { |
1577 return FALSE; | 1579 return FALSE; |
1578 } | 1580 } |
1579 if (m_pBitmap->GetBuffer() == NULL) { | 1581 if (!m_pBitmap->GetBuffer()) { |
1580 return TRUE; | 1582 return TRUE; |
1581 } | 1583 } |
1582 FX_RECT clip_rect; | 1584 FX_RECT clip_rect; |
1583 GetClipBox(&clip_rect); | 1585 GetClipBox(&clip_rect); |
1584 FX_RECT draw_rect = clip_rect; | 1586 FX_RECT draw_rect = clip_rect; |
1585 if (pRect) { | 1587 if (pRect) { |
1586 draw_rect.Intersect(*pRect); | 1588 draw_rect.Intersect(*pRect); |
1587 } | 1589 } |
1588 if (draw_rect.IsEmpty()) { | 1590 if (draw_rect.IsEmpty()) { |
1589 return TRUE; | 1591 return TRUE; |
1590 } | 1592 } |
1591 if (m_pClipRgn == NULL || m_pClipRgn->GetType() == CFX_ClipRgn::RectI) { | 1593 if (!m_pClipRgn || m_pClipRgn->GetType() == CFX_ClipRgn::RectI) { |
1592 if (m_bRgbByteOrder) { | 1594 if (m_bRgbByteOrder) { |
1593 RgbByteOrderCompositeRect(m_pBitmap, draw_rect.left, draw_rect.top, | 1595 RgbByteOrderCompositeRect(m_pBitmap, draw_rect.left, draw_rect.top, |
1594 draw_rect.Width(), draw_rect.Height(), | 1596 draw_rect.Width(), draw_rect.Height(), |
1595 fill_color); | 1597 fill_color); |
1596 } else { | 1598 } else { |
1597 m_pBitmap->CompositeRect(draw_rect.left, draw_rect.top, draw_rect.Width(), | 1599 m_pBitmap->CompositeRect(draw_rect.left, draw_rect.top, draw_rect.Width(), |
1598 draw_rect.Height(), fill_color, alpha_flag, | 1600 draw_rect.Height(), fill_color, alpha_flag, |
1599 pIccTransform); | 1601 pIccTransform); |
1600 } | 1602 } |
1601 return TRUE; | 1603 return TRUE; |
1602 } | 1604 } |
1603 m_pBitmap->CompositeMask( | 1605 m_pBitmap->CompositeMask( |
1604 draw_rect.left, draw_rect.top, draw_rect.Width(), draw_rect.Height(), | 1606 draw_rect.left, draw_rect.top, draw_rect.Width(), draw_rect.Height(), |
1605 (const CFX_DIBitmap*)m_pClipRgn->GetMask(), fill_color, | 1607 (const CFX_DIBitmap*)m_pClipRgn->GetMask(), fill_color, |
1606 draw_rect.left - clip_rect.left, draw_rect.top - clip_rect.top, | 1608 draw_rect.left - clip_rect.left, draw_rect.top - clip_rect.top, |
1607 FXDIB_BLEND_NORMAL, NULL, m_bRgbByteOrder, alpha_flag, pIccTransform); | 1609 FXDIB_BLEND_NORMAL, NULL, m_bRgbByteOrder, alpha_flag, pIccTransform); |
1608 return TRUE; | 1610 return TRUE; |
1609 } | 1611 } |
1610 FX_BOOL CFX_AggDeviceDriver::GetClipBox(FX_RECT* pRect) { | 1612 FX_BOOL CFX_AggDeviceDriver::GetClipBox(FX_RECT* pRect) { |
1611 if (m_pClipRgn == NULL) { | 1613 if (!m_pClipRgn) { |
1612 pRect->left = pRect->top = 0; | 1614 pRect->left = pRect->top = 0; |
1613 pRect->right = GetDeviceCaps(FXDC_PIXEL_WIDTH); | 1615 pRect->right = GetDeviceCaps(FXDC_PIXEL_WIDTH); |
1614 pRect->bottom = GetDeviceCaps(FXDC_PIXEL_HEIGHT); | 1616 pRect->bottom = GetDeviceCaps(FXDC_PIXEL_HEIGHT); |
1615 return TRUE; | 1617 return TRUE; |
1616 } | 1618 } |
1617 *pRect = m_pClipRgn->GetBox(); | 1619 *pRect = m_pClipRgn->GetBox(); |
1618 return TRUE; | 1620 return TRUE; |
1619 } | 1621 } |
1620 FX_BOOL CFX_AggDeviceDriver::GetDIBits(CFX_DIBitmap* pBitmap, | 1622 FX_BOOL CFX_AggDeviceDriver::GetDIBits(CFX_DIBitmap* pBitmap, |
1621 int left, | 1623 int left, |
1622 int top, | 1624 int top, |
1623 void* pIccTransform, | 1625 void* pIccTransform, |
1624 FX_BOOL bDEdge) { | 1626 FX_BOOL bDEdge) { |
1625 if (m_pBitmap->GetBuffer() == NULL) { | 1627 if (!m_pBitmap->GetBuffer()) { |
1626 return TRUE; | 1628 return TRUE; |
1627 } | 1629 } |
1628 if (bDEdge) { | 1630 if (bDEdge) { |
1629 if (m_bRgbByteOrder) { | 1631 if (m_bRgbByteOrder) { |
1630 RgbByteOrderTransferBitmap(pBitmap, 0, 0, pBitmap->GetWidth(), | 1632 RgbByteOrderTransferBitmap(pBitmap, 0, 0, pBitmap->GetWidth(), |
1631 pBitmap->GetHeight(), m_pBitmap, left, top); | 1633 pBitmap->GetHeight(), m_pBitmap, left, top); |
1632 } else { | 1634 } else { |
1633 return pBitmap->TransferBitmap(0, 0, pBitmap->GetWidth(), | 1635 return pBitmap->TransferBitmap(0, 0, pBitmap->GetWidth(), |
1634 pBitmap->GetHeight(), m_pBitmap, left, top, | 1636 pBitmap->GetHeight(), m_pBitmap, left, top, |
1635 pIccTransform); | 1637 pIccTransform); |
(...skipping 30 matching lines...) Expand all Loading... |
1666 return bRet; | 1668 return bRet; |
1667 } | 1669 } |
1668 FX_BOOL CFX_AggDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap, | 1670 FX_BOOL CFX_AggDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap, |
1669 FX_DWORD argb, | 1671 FX_DWORD argb, |
1670 const FX_RECT* pSrcRect, | 1672 const FX_RECT* pSrcRect, |
1671 int left, | 1673 int left, |
1672 int top, | 1674 int top, |
1673 int blend_type, | 1675 int blend_type, |
1674 int alpha_flag, | 1676 int alpha_flag, |
1675 void* pIccTransform) { | 1677 void* pIccTransform) { |
1676 if (m_pBitmap->GetBuffer() == NULL) { | 1678 if (!m_pBitmap->GetBuffer()) { |
1677 return TRUE; | 1679 return TRUE; |
1678 } | 1680 } |
1679 if (pBitmap->IsAlphaMask()) | 1681 if (pBitmap->IsAlphaMask()) |
1680 return m_pBitmap->CompositeMask( | 1682 return m_pBitmap->CompositeMask( |
1681 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, argb, | 1683 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, argb, |
1682 pSrcRect->left, pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, | 1684 pSrcRect->left, pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, |
1683 alpha_flag, pIccTransform); | 1685 alpha_flag, pIccTransform); |
1684 return m_pBitmap->CompositeBitmap( | 1686 return m_pBitmap->CompositeBitmap( |
1685 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, pSrcRect->left, | 1687 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, pSrcRect->left, |
1686 pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, pIccTransform); | 1688 pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, pIccTransform); |
1687 } | 1689 } |
1688 FX_BOOL CFX_AggDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource, | 1690 FX_BOOL CFX_AggDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource, |
1689 FX_DWORD argb, | 1691 FX_DWORD argb, |
1690 int dest_left, | 1692 int dest_left, |
1691 int dest_top, | 1693 int dest_top, |
1692 int dest_width, | 1694 int dest_width, |
1693 int dest_height, | 1695 int dest_height, |
1694 const FX_RECT* pClipRect, | 1696 const FX_RECT* pClipRect, |
1695 FX_DWORD flags, | 1697 FX_DWORD flags, |
1696 int alpha_flag, | 1698 int alpha_flag, |
1697 void* pIccTransform, | 1699 void* pIccTransform, |
1698 int blend_type) { | 1700 int blend_type) { |
1699 if (m_pBitmap->GetBuffer() == NULL) { | 1701 if (!m_pBitmap->GetBuffer()) { |
1700 return TRUE; | 1702 return TRUE; |
1701 } | 1703 } |
1702 if (dest_width == pSource->GetWidth() && | 1704 if (dest_width == pSource->GetWidth() && |
1703 dest_height == pSource->GetHeight()) { | 1705 dest_height == pSource->GetHeight()) { |
1704 FX_RECT rect(0, 0, dest_width, dest_height); | 1706 FX_RECT rect(0, 0, dest_width, dest_height); |
1705 return SetDIBits(pSource, argb, &rect, dest_left, dest_top, blend_type, | 1707 return SetDIBits(pSource, argb, &rect, dest_left, dest_top, blend_type, |
1706 alpha_flag, pIccTransform); | 1708 alpha_flag, pIccTransform); |
1707 } | 1709 } |
1708 FX_RECT dest_rect(dest_left, dest_top, dest_left + dest_width, | 1710 FX_RECT dest_rect(dest_left, dest_top, dest_left + dest_width, |
1709 dest_top + dest_height); | 1711 dest_top + dest_height); |
(...skipping 14 matching lines...) Expand all Loading... |
1724 } | 1726 } |
1725 FX_BOOL CFX_AggDeviceDriver::StartDIBits(const CFX_DIBSource* pSource, | 1727 FX_BOOL CFX_AggDeviceDriver::StartDIBits(const CFX_DIBSource* pSource, |
1726 int bitmap_alpha, | 1728 int bitmap_alpha, |
1727 FX_DWORD argb, | 1729 FX_DWORD argb, |
1728 const CFX_Matrix* pMatrix, | 1730 const CFX_Matrix* pMatrix, |
1729 FX_DWORD render_flags, | 1731 FX_DWORD render_flags, |
1730 void*& handle, | 1732 void*& handle, |
1731 int alpha_flag, | 1733 int alpha_flag, |
1732 void* pIccTransform, | 1734 void* pIccTransform, |
1733 int blend_type) { | 1735 int blend_type) { |
1734 if (m_pBitmap->GetBuffer() == NULL) { | 1736 if (!m_pBitmap->GetBuffer()) { |
1735 return TRUE; | 1737 return TRUE; |
1736 } | 1738 } |
1737 CFX_ImageRenderer* pRenderer = new CFX_ImageRenderer; | 1739 CFX_ImageRenderer* pRenderer = new CFX_ImageRenderer; |
1738 pRenderer->Start(m_pBitmap, m_pClipRgn, pSource, bitmap_alpha, argb, pMatrix, | 1740 pRenderer->Start(m_pBitmap, m_pClipRgn, pSource, bitmap_alpha, argb, pMatrix, |
1739 render_flags, m_bRgbByteOrder, alpha_flag, pIccTransform); | 1741 render_flags, m_bRgbByteOrder, alpha_flag, pIccTransform); |
1740 handle = pRenderer; | 1742 handle = pRenderer; |
1741 return TRUE; | 1743 return TRUE; |
1742 } | 1744 } |
1743 FX_BOOL CFX_AggDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause) { | 1745 FX_BOOL CFX_AggDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause) { |
1744 if (m_pBitmap->GetBuffer() == NULL) { | 1746 if (!m_pBitmap->GetBuffer()) { |
1745 return TRUE; | 1747 return TRUE; |
1746 } | 1748 } |
1747 return ((CFX_ImageRenderer*)pHandle)->Continue(pPause); | 1749 return ((CFX_ImageRenderer*)pHandle)->Continue(pPause); |
1748 } | 1750 } |
1749 void CFX_AggDeviceDriver::CancelDIBits(void* pHandle) { | 1751 void CFX_AggDeviceDriver::CancelDIBits(void* pHandle) { |
1750 if (m_pBitmap->GetBuffer() == NULL) { | 1752 if (!m_pBitmap->GetBuffer()) { |
1751 return; | 1753 return; |
1752 } | 1754 } |
1753 delete (CFX_ImageRenderer*)pHandle; | 1755 delete (CFX_ImageRenderer*)pHandle; |
1754 } | 1756 } |
1755 CFX_FxgeDevice::CFX_FxgeDevice() { | 1757 CFX_FxgeDevice::CFX_FxgeDevice() { |
1756 m_bOwnedBitmap = FALSE; | 1758 m_bOwnedBitmap = FALSE; |
1757 } | 1759 } |
1758 FX_BOOL CFX_FxgeDevice::Attach(CFX_DIBitmap* pBitmap, | 1760 FX_BOOL CFX_FxgeDevice::Attach(CFX_DIBitmap* pBitmap, |
1759 int dither_bits, | 1761 int dither_bits, |
1760 FX_BOOL bRgbByteOrder, | 1762 FX_BOOL bRgbByteOrder, |
1761 CFX_DIBitmap* pOriDevice, | 1763 CFX_DIBitmap* pOriDevice, |
1762 FX_BOOL bGroupKnockout) { | 1764 FX_BOOL bGroupKnockout) { |
1763 if (pBitmap == NULL) { | 1765 if (!pBitmap) { |
1764 return FALSE; | 1766 return FALSE; |
1765 } | 1767 } |
1766 SetBitmap(pBitmap); | 1768 SetBitmap(pBitmap); |
1767 IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver( | 1769 IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver( |
1768 pBitmap, dither_bits, bRgbByteOrder, pOriDevice, bGroupKnockout); | 1770 pBitmap, dither_bits, bRgbByteOrder, pOriDevice, bGroupKnockout); |
1769 SetDeviceDriver(pDriver); | 1771 SetDeviceDriver(pDriver); |
1770 return TRUE; | 1772 return TRUE; |
1771 } | 1773 } |
1772 FX_BOOL CFX_FxgeDevice::Create(int width, | 1774 FX_BOOL CFX_FxgeDevice::Create(int width, |
1773 int height, | 1775 int height, |
(...skipping 10 matching lines...) Expand all Loading... |
1784 IFX_RenderDeviceDriver* pDriver = | 1786 IFX_RenderDeviceDriver* pDriver = |
1785 new CFX_AggDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE); | 1787 new CFX_AggDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE); |
1786 SetDeviceDriver(pDriver); | 1788 SetDeviceDriver(pDriver); |
1787 return TRUE; | 1789 return TRUE; |
1788 } | 1790 } |
1789 CFX_FxgeDevice::~CFX_FxgeDevice() { | 1791 CFX_FxgeDevice::~CFX_FxgeDevice() { |
1790 if (m_bOwnedBitmap) { | 1792 if (m_bOwnedBitmap) { |
1791 delete GetBitmap(); | 1793 delete GetBitmap(); |
1792 } | 1794 } |
1793 } | 1795 } |
OLD | NEW |