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 #if defined(_SKIA_SUPPORT_) | 5 #if defined(_SKIA_SUPPORT_) |
6 #include <algorithm> | 6 #include <algorithm> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "core/fxcodec/fx_codec.h" | 9 #include "core/fxcodec/fx_codec.h" |
10 #include "core/fxcrt/fx_memory.h" | 10 #include "core/fxcrt/fx_memory.h" |
(...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 if (m_commands[index] == Clip::kSave) | 720 if (m_commands[index] == Clip::kSave) |
721 pDriver->SkiaCanvas()->restore(); | 721 pDriver->SkiaCanvas()->restore(); |
722 } | 722 } |
723 | 723 |
724 if (m_commandIndex > 0) | 724 if (m_commandIndex > 0) |
725 pDriver->SkiaCanvas()->save(); | 725 pDriver->SkiaCanvas()->save(); |
726 while (index > 0 && m_commands[index] != Clip::kSave) | 726 while (index > 0 && m_commands[index] != Clip::kSave) |
727 --index; | 727 --index; |
728 while (++index < m_commandIndex) { | 728 while (++index < m_commandIndex) { |
729 SkASSERT(m_commands[index] == Clip::kPath); | 729 SkASSERT(m_commands[index] == Clip::kPath); |
730 pDriver->SkiaCanvas()->clipPath(m_clips[index], SkRegion::kIntersect_Op, | 730 pDriver->SkiaCanvas()->clipPath(m_clips[index], SkCanvas::kIntersect_Op, |
731 true); | 731 true); |
732 } | 732 } |
733 m_commands.setCount(m_commandIndex); | 733 m_commands.setCount(m_commandIndex); |
734 m_clips.resize_back(m_commandIndex); | 734 m_clips.resize_back(m_commandIndex); |
735 } | 735 } |
736 | 736 |
737 // returns true if caller should apply command to skia canvas | 737 // returns true if caller should apply command to skia canvas |
738 bool ClipSave(CFX_SkiaDeviceDriver* pDriver) { | 738 bool ClipSave(CFX_SkiaDeviceDriver* pDriver) { |
739 if (m_debugDisable) | 739 if (m_debugDisable) |
740 return false; | 740 return false; |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1077 if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) { | 1077 if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) { |
1078 CFX_FloatRect rectf; | 1078 CFX_FloatRect rectf; |
1079 if (pPathData->IsRect(deviceMatrix, &rectf)) { | 1079 if (pPathData->IsRect(deviceMatrix, &rectf)) { |
1080 rectf.Intersect( | 1080 rectf.Intersect( |
1081 CFX_FloatRect(0, 0, (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_WIDTH), | 1081 CFX_FloatRect(0, 0, (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_WIDTH), |
1082 (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_HEIGHT))); | 1082 (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_HEIGHT))); |
1083 // note that PDF's y-axis goes up; Skia's y-axis goes down | 1083 // note that PDF's y-axis goes up; Skia's y-axis goes down |
1084 SkRect skClipRect = | 1084 SkRect skClipRect = |
1085 SkRect::MakeLTRB(rectf.left, rectf.bottom, rectf.right, rectf.top); | 1085 SkRect::MakeLTRB(rectf.left, rectf.bottom, rectf.right, rectf.top); |
1086 DebugDrawSkiaClipRect(m_pCanvas, skClipRect); | 1086 DebugDrawSkiaClipRect(m_pCanvas, skClipRect); |
1087 m_pCanvas->clipRect(skClipRect, SkRegion::kIntersect_Op, true); | 1087 m_pCanvas->clipRect(skClipRect, SkCanvas::kIntersect_Op, true); |
1088 return TRUE; | 1088 return TRUE; |
1089 } | 1089 } |
1090 } | 1090 } |
1091 SkPath skClipPath = BuildPath(pPathData); | 1091 SkPath skClipPath = BuildPath(pPathData); |
1092 skClipPath.setFillType((fill_mode & 3) == FXFILL_ALTERNATE | 1092 skClipPath.setFillType((fill_mode & 3) == FXFILL_ALTERNATE |
1093 ? SkPath::kEvenOdd_FillType | 1093 ? SkPath::kEvenOdd_FillType |
1094 : SkPath::kWinding_FillType); | 1094 : SkPath::kWinding_FillType); |
1095 SkMatrix skMatrix = ToSkMatrix(*deviceMatrix); | 1095 SkMatrix skMatrix = ToSkMatrix(*deviceMatrix); |
1096 skClipPath.transform(skMatrix); | 1096 skClipPath.transform(skMatrix); |
1097 DebugShowSkiaPath(skClipPath); | 1097 DebugShowSkiaPath(skClipPath); |
1098 DebugDrawSkiaClipPath(m_pCanvas, skClipPath); | 1098 DebugDrawSkiaClipPath(m_pCanvas, skClipPath); |
1099 m_pCanvas->clipPath(skClipPath, SkRegion::kIntersect_Op, true); | 1099 m_pCanvas->clipPath(skClipPath, SkCanvas::kIntersect_Op, true); |
1100 | 1100 |
1101 return TRUE; | 1101 return TRUE; |
1102 } | 1102 } |
1103 | 1103 |
1104 FX_BOOL CFX_SkiaDeviceDriver::SetClip_PathStroke( | 1104 FX_BOOL CFX_SkiaDeviceDriver::SetClip_PathStroke( |
1105 const CFX_PathData* pPathData, // path info | 1105 const CFX_PathData* pPathData, // path info |
1106 const CFX_Matrix* pObject2Device, // optional transformation | 1106 const CFX_Matrix* pObject2Device, // optional transformation |
1107 const CFX_GraphStateData* pGraphState // graphic state, for pen attributes | 1107 const CFX_GraphStateData* pGraphState // graphic state, for pen attributes |
1108 ) { | 1108 ) { |
1109 if (m_pCache->SetClipStroke(pPathData, pObject2Device, pGraphState, this)) | 1109 if (m_pCache->SetClipStroke(pPathData, pObject2Device, pGraphState, this)) |
1110 return TRUE; | 1110 return TRUE; |
1111 // build path data | 1111 // build path data |
1112 SkPath skPath = BuildPath(pPathData); | 1112 SkPath skPath = BuildPath(pPathData); |
1113 SkMatrix skMatrix = ToSkMatrix(*pObject2Device); | 1113 SkMatrix skMatrix = ToSkMatrix(*pObject2Device); |
1114 SkPaint skPaint; | 1114 SkPaint skPaint; |
1115 PaintStroke(&skPaint, pGraphState, skMatrix); | 1115 PaintStroke(&skPaint, pGraphState, skMatrix); |
1116 SkPath dst_path; | 1116 SkPath dst_path; |
1117 skPaint.getFillPath(skPath, &dst_path); | 1117 skPaint.getFillPath(skPath, &dst_path); |
1118 dst_path.transform(skMatrix); | 1118 dst_path.transform(skMatrix); |
1119 DebugDrawSkiaClipPath(m_pCanvas, dst_path); | 1119 DebugDrawSkiaClipPath(m_pCanvas, dst_path); |
1120 m_pCanvas->clipPath(dst_path, SkRegion::kIntersect_Op, true); | 1120 m_pCanvas->clipPath(dst_path, SkCanvas::kIntersect_Op, true); |
1121 return TRUE; | 1121 return TRUE; |
1122 } | 1122 } |
1123 | 1123 |
1124 FX_BOOL CFX_SkiaDeviceDriver::DrawPath( | 1124 FX_BOOL CFX_SkiaDeviceDriver::DrawPath( |
1125 const CFX_PathData* pPathData, // path info | 1125 const CFX_PathData* pPathData, // path info |
1126 const CFX_Matrix* pObject2Device, // optional transformation | 1126 const CFX_Matrix* pObject2Device, // optional transformation |
1127 const CFX_GraphStateData* pGraphState, // graphic state, for pen attributes | 1127 const CFX_GraphStateData* pGraphState, // graphic state, for pen attributes |
1128 uint32_t fill_color, // fill color | 1128 uint32_t fill_color, // fill color |
1129 uint32_t stroke_color, // stroke color | 1129 uint32_t stroke_color, // stroke color |
1130 int fill_mode, // fill mode, WINDING or ALTERNATE. 0 for not filled | 1130 int fill_mode, // fill mode, WINDING or ALTERNATE. 0 for not filled |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1324 skClip.transform(skMatrix); | 1324 skClip.transform(skMatrix); |
1325 } | 1325 } |
1326 SkMatrix inverse; | 1326 SkMatrix inverse; |
1327 if (!skMatrix.invert(&inverse)) | 1327 if (!skMatrix.invert(&inverse)) |
1328 return false; | 1328 return false; |
1329 skPath.addRect(skRect); | 1329 skPath.addRect(skRect); |
1330 skPath.transform(inverse); | 1330 skPath.transform(inverse); |
1331 } | 1331 } |
1332 m_pCanvas->save(); | 1332 m_pCanvas->save(); |
1333 if (!skClip.isEmpty()) | 1333 if (!skClip.isEmpty()) |
1334 m_pCanvas->clipPath(skClip, SkRegion::kIntersect_Op, true); | 1334 m_pCanvas->clipPath(skClip, SkCanvas::kIntersect_Op, true); |
1335 m_pCanvas->concat(skMatrix); | 1335 m_pCanvas->concat(skMatrix); |
1336 m_pCanvas->drawPath(skPath, paint); | 1336 m_pCanvas->drawPath(skPath, paint); |
1337 m_pCanvas->restore(); | 1337 m_pCanvas->restore(); |
1338 return true; | 1338 return true; |
1339 } | 1339 } |
1340 | 1340 |
1341 uint8_t* CFX_SkiaDeviceDriver::GetBuffer() const { | 1341 uint8_t* CFX_SkiaDeviceDriver::GetBuffer() const { |
1342 return m_pBitmap->GetBuffer(); | 1342 return m_pBitmap->GetBuffer(); |
1343 } | 1343 } |
1344 | 1344 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1413 uint32_t flags, | 1413 uint32_t flags, |
1414 int blend_type) { | 1414 int blend_type) { |
1415 if (!m_pBitmap->GetBuffer()) | 1415 if (!m_pBitmap->GetBuffer()) |
1416 return TRUE; | 1416 return TRUE; |
1417 CFX_Matrix m(dest_width, 0, 0, -dest_height, dest_left, | 1417 CFX_Matrix m(dest_width, 0, 0, -dest_height, dest_left, |
1418 dest_top + dest_height); | 1418 dest_top + dest_height); |
1419 | 1419 |
1420 m_pCanvas->save(); | 1420 m_pCanvas->save(); |
1421 SkRect skClipRect = SkRect::MakeLTRB(pClipRect->left, pClipRect->bottom, | 1421 SkRect skClipRect = SkRect::MakeLTRB(pClipRect->left, pClipRect->bottom, |
1422 pClipRect->right, pClipRect->top); | 1422 pClipRect->right, pClipRect->top); |
1423 m_pCanvas->clipRect(skClipRect, SkRegion::kIntersect_Op, true); | 1423 m_pCanvas->clipRect(skClipRect, SkCanvas::kIntersect_Op, true); |
1424 void* dummy; | 1424 void* dummy; |
1425 FX_BOOL result = StartDIBits(pSource, 0xFF, argb, &m, 0, dummy, blend_type); | 1425 FX_BOOL result = StartDIBits(pSource, 0xFF, argb, &m, 0, dummy, blend_type); |
1426 m_pCanvas->restore(); | 1426 m_pCanvas->restore(); |
1427 | 1427 |
1428 return result; | 1428 return result; |
1429 } | 1429 } |
1430 | 1430 |
1431 FX_BOOL CFX_SkiaDeviceDriver::StartDIBits(const CFX_DIBSource* pSource, | 1431 FX_BOOL CFX_SkiaDeviceDriver::StartDIBits(const CFX_DIBSource* pSource, |
1432 int bitmap_alpha, | 1432 int bitmap_alpha, |
1433 uint32_t argb, | 1433 uint32_t argb, |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1672 SkA32Assert(a); | 1672 SkA32Assert(a); |
1673 SkASSERT(r <= a); | 1673 SkASSERT(r <= a); |
1674 SkASSERT(g <= a); | 1674 SkASSERT(g <= a); |
1675 SkASSERT(b <= a); | 1675 SkASSERT(b <= a); |
1676 } | 1676 } |
1677 } | 1677 } |
1678 #endif | 1678 #endif |
1679 } | 1679 } |
1680 | 1680 |
1681 #endif | 1681 #endif |
OLD | NEW |