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

Side by Side Diff: core/fxge/skia/fx_skia_device.cpp

Issue 2025043002: remove some calls to dib (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: address comments Created 4 years, 6 months 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/skia/fx_skia_device.h ('k') | no next file » | 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 #include "core/fxge/include/fx_ge.h" 5 #include "core/fxge/include/fx_ge.h"
6 6
7 #if defined(_SKIA_SUPPORT_) 7 #if defined(_SKIA_SUPPORT_)
8 #include "core/fxcodec/include/fx_codec.h" 8 #include "core/fxcodec/include/fx_codec.h"
9 9
10 #include "core/fpdfapi/fpdf_page/cpdf_shadingpattern.h" 10 #include "core/fpdfapi/fpdf_page/cpdf_shadingpattern.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 #else // DRAW_SKIA_CLIP 74 #else // DRAW_SKIA_CLIP
75 75
76 void DebugDrawSkiaClipRect(SkCanvas* canvas, const SkRect& rect) {} 76 void DebugDrawSkiaClipRect(SkCanvas* canvas, const SkRect& rect) {}
77 void DebugDrawSkiaClipPath(SkCanvas* canvas, const SkPath& path) {} 77 void DebugDrawSkiaClipPath(SkCanvas* canvas, const SkPath& path) {}
78 78
79 #endif // DRAW_SKIA_CLIP 79 #endif // DRAW_SKIA_CLIP
80 80
81 #undef SHOW_SKIA_PATH 81 #undef SHOW_SKIA_PATH
82 #undef DRAW_SKIA_CLIP 82 #undef DRAW_SKIA_CLIP
83 83
84 static void DebugVerifyBitmapIsPreMultiplied(void* buffer,
85 int width,
86 int height) {
87 #ifdef SK_DEBUG
88 // verify that input is really premultiplied
89 for (int y = 0; y < height; ++y) {
90 const uint32_t* srcRow = static_cast<const uint32_t*>(buffer) + y * width;
91 for (int x = 0; x < width; ++x) {
92 uint8_t a = SkGetPackedA32(srcRow[x]);
93 uint8_t r = SkGetPackedR32(srcRow[x]);
94 uint8_t g = SkGetPackedG32(srcRow[x]);
95 uint8_t b = SkGetPackedB32(srcRow[x]);
96 SkA32Assert(a);
97 SkASSERT(r <= a);
98 SkASSERT(g <= a);
99 SkASSERT(b <= a);
100 }
101 }
102 #endif
103 }
104
105 static void DebugValidate(const CFX_DIBitmap* bitmap,
106 const CFX_DIBitmap* device) {
107 if (bitmap) {
108 SkASSERT(bitmap->GetBPP() == 8 || bitmap->GetBPP() == 32);
109 if (bitmap->GetBPP() == 32) {
110 DebugVerifyBitmapIsPreMultiplied(bitmap->GetBuffer(), bitmap->GetWidth(),
111 bitmap->GetHeight());
112 }
113 }
114 if (device) {
115 SkASSERT(device->GetBPP() == 8 || device->GetBPP() == 32);
116 if (device->GetBPP() == 32) {
117 DebugVerifyBitmapIsPreMultiplied(device->GetBuffer(), device->GetWidth(),
118 device->GetHeight());
119 }
120 }
121 }
122
84 SkPath BuildPath(const CFX_PathData* pPathData) { 123 SkPath BuildPath(const CFX_PathData* pPathData) {
85 SkPath skPath; 124 SkPath skPath;
86 const CFX_PathData* pFPath = pPathData; 125 const CFX_PathData* pFPath = pPathData;
87 int nPoints = pFPath->GetPointCount(); 126 int nPoints = pFPath->GetPointCount();
88 FX_PATHPOINT* pPoints = pFPath->GetPoints(); 127 FX_PATHPOINT* pPoints = pFPath->GetPoints();
89 for (int i = 0; i < nPoints; i++) { 128 for (int i = 0; i < nPoints; i++) {
90 FX_FLOAT x = pPoints[i].m_PointX; 129 FX_FLOAT x = pPoints[i].m_PointX;
91 FX_FLOAT y = pPoints[i].m_PointY; 130 FX_FLOAT y = pPoints[i].m_PointY;
92 int point_type = pPoints[i].m_Flag & FXPT_TYPE; 131 int point_type = pPoints[i].m_Flag & FXPT_TYPE;
93 if (point_type == FXPT_MOVETO) { 132 if (point_type == FXPT_MOVETO) {
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(CFX_DIBitmap* pBitmap, 541 CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(CFX_DIBitmap* pBitmap,
503 FX_BOOL bRgbByteOrder, 542 FX_BOOL bRgbByteOrder,
504 CFX_DIBitmap* pOriDevice, 543 CFX_DIBitmap* pOriDevice,
505 FX_BOOL bGroupKnockout) 544 FX_BOOL bGroupKnockout)
506 : m_pBitmap(pBitmap), 545 : m_pBitmap(pBitmap),
507 m_pOriDevice(pOriDevice), 546 m_pOriDevice(pOriDevice),
508 m_pRecorder(nullptr), 547 m_pRecorder(nullptr),
509 m_bRgbByteOrder(bRgbByteOrder), 548 m_bRgbByteOrder(bRgbByteOrder),
510 m_bGroupKnockout(bGroupKnockout) { 549 m_bGroupKnockout(bGroupKnockout) {
511 SkBitmap skBitmap; 550 SkBitmap skBitmap;
512 SkImageInfo imageInfo = 551 SkASSERT(pBitmap->GetBPP() == 8 || pBitmap->GetBPP() == 32);
513 SkImageInfo::Make(pBitmap->GetWidth(), pBitmap->GetHeight(), 552 SkImageInfo imageInfo = SkImageInfo::Make(
514 kN32_SkColorType, kOpaque_SkAlphaType); 553 pBitmap->GetWidth(), pBitmap->GetHeight(),
554 pBitmap->GetBPP() == 8 ? kAlpha_8_SkColorType : kN32_SkColorType,
555 kOpaque_SkAlphaType);
515 skBitmap.installPixels(imageInfo, pBitmap->GetBuffer(), pBitmap->GetPitch(), 556 skBitmap.installPixels(imageInfo, pBitmap->GetBuffer(), pBitmap->GetPitch(),
516 nullptr, /* to do : set color table */ 557 nullptr, /* to do : set color table */
517 nullptr, nullptr); 558 nullptr, nullptr);
518 m_pCanvas = new SkCanvas(skBitmap); 559 m_pCanvas = new SkCanvas(skBitmap);
519 if (m_bGroupKnockout) 560 if (m_bGroupKnockout)
520 SkDebugf(""); // FIXME(caryclark) suppress 'm_bGroupKnockout is unused' 561 SkDebugf(""); // FIXME(caryclark) suppress 'm_bGroupKnockout is unused'
521 } 562 }
522 563
523 CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(int size_x, int size_y) 564 CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(int size_x, int size_y)
524 : m_pBitmap(nullptr), 565 : m_pBitmap(nullptr),
(...skipping 21 matching lines...) Expand all
546 587
547 FX_BOOL CFX_SkiaDeviceDriver::DrawDeviceText(int nChars, 588 FX_BOOL CFX_SkiaDeviceDriver::DrawDeviceText(int nChars,
548 const FXTEXT_CHARPOS* pCharPos, 589 const FXTEXT_CHARPOS* pCharPos,
549 CFX_Font* pFont, 590 CFX_Font* pFont,
550 CFX_FontCache* pCache, 591 CFX_FontCache* pCache,
551 const CFX_Matrix* pObject2Device, 592 const CFX_Matrix* pObject2Device,
552 FX_FLOAT font_size, 593 FX_FLOAT font_size,
553 uint32_t color, 594 uint32_t color,
554 int alpha_flag, 595 int alpha_flag,
555 void* pIccTransform) { 596 void* pIccTransform) {
556 CFX_TypeFace* typeface = pCache->GetDeviceCache(pFont); 597 sk_sp<SkTypeface> typeface(SkSafeRef(pCache->GetDeviceCache(pFont)));
557 SkPaint paint; 598 SkPaint paint;
558 paint.setAntiAlias(true); 599 paint.setAntiAlias(true);
559 paint.setColor(color); 600 paint.setColor(color);
560 paint.setTypeface(typeface); 601 paint.setTypeface(typeface);
561 paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); 602 paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
562 paint.setTextSize(font_size); 603 paint.setTextSize(font_size);
563 paint.setSubpixelText(true); 604 paint.setSubpixelText(true);
564 m_pCanvas->save(); 605 m_pCanvas->save();
565 SkMatrix skMatrix = ToFlippedSkMatrix(*pObject2Device); 606 SkMatrix skMatrix = ToFlippedSkMatrix(*pObject2Device);
566 m_pCanvas->concat(skMatrix); 607 m_pCanvas->concat(skMatrix);
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 FX_BOOL CFX_SkiaDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap, 966 FX_BOOL CFX_SkiaDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap,
926 uint32_t argb, 967 uint32_t argb,
927 const FX_RECT* pSrcRect, 968 const FX_RECT* pSrcRect,
928 int left, 969 int left,
929 int top, 970 int top,
930 int blend_type, 971 int blend_type,
931 int alpha_flag, 972 int alpha_flag,
932 void* pIccTransform) { 973 void* pIccTransform) {
933 if (!m_pBitmap || !m_pBitmap->GetBuffer()) 974 if (!m_pBitmap || !m_pBitmap->GetBuffer())
934 return TRUE; 975 return TRUE;
935 if (pBitmap->IsAlphaMask()) { 976
936 return m_pBitmap->CompositeMask( 977 CFX_Matrix m(pBitmap->GetWidth(), 0, 0, -pBitmap->GetHeight(), left,
937 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, argb, 978 top + pBitmap->GetHeight());
938 pSrcRect->left, pSrcRect->top, blend_type, nullptr, m_bRgbByteOrder, 979 void* dummy;
939 alpha_flag, pIccTransform); 980 return this->StartDIBits(pBitmap, 0xFF, argb, &m, 0, dummy, alpha_flag,
940 } 981 pIccTransform, blend_type);
941 return m_pBitmap->CompositeBitmap(
942 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, pSrcRect->left,
943 pSrcRect->top, blend_type, nullptr, m_bRgbByteOrder, pIccTransform);
944 } 982 }
945 983
946 FX_BOOL CFX_SkiaDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource, 984 FX_BOOL CFX_SkiaDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource,
947 uint32_t argb, 985 uint32_t argb,
948 int dest_left, 986 int dest_left,
949 int dest_top, 987 int dest_top,
950 int dest_width, 988 int dest_width,
951 int dest_height, 989 int dest_height,
952 const FX_RECT* pClipRect, 990 const FX_RECT* pClipRect,
953 uint32_t flags, 991 uint32_t flags,
954 int alpha_flag, 992 int alpha_flag,
955 void* pIccTransform, 993 void* pIccTransform,
956 int blend_type) { 994 int blend_type) {
957 if (!m_pBitmap->GetBuffer()) 995 if (!m_pBitmap->GetBuffer())
958 return TRUE; 996 return TRUE;
959 if (dest_width == pSource->GetWidth() && 997 CFX_Matrix m(dest_width, 0, 0, -dest_height, dest_left,
960 dest_height == pSource->GetHeight()) { 998 dest_top + dest_height);
961 FX_RECT rect(0, 0, dest_width, dest_height); 999
962 return SetDIBits(pSource, argb, &rect, dest_left, dest_top, blend_type, 1000 m_pCanvas->save();
963 alpha_flag, pIccTransform); 1001 SkRect skClipRect = SkRect::MakeLTRB(pClipRect->left, pClipRect->bottom,
964 } 1002 pClipRect->right, pClipRect->top);
965 FX_RECT dest_rect(dest_left, dest_top, dest_left + dest_width, 1003 m_pCanvas->clipRect(skClipRect);
966 dest_top + dest_height); 1004 void* dummy;
967 dest_rect.Normalize(); 1005 FX_BOOL result = this->StartDIBits(pSource, 0xFF, argb, &m, 0, dummy,
968 FX_RECT dest_clip = dest_rect; 1006 alpha_flag, pIccTransform, blend_type);
969 dest_clip.Intersect(*pClipRect); 1007 m_pCanvas->restore();
970 CFX_BitmapComposer composer; 1008
971 composer.Compose(m_pBitmap, nullptr, 255, argb, dest_clip, FALSE, FALSE, 1009 return result;
972 FALSE, m_bRgbByteOrder, alpha_flag, pIccTransform,
973 blend_type);
974 dest_clip.Offset(-dest_rect.left, -dest_rect.top);
975 CFX_ImageStretcher stretcher(&composer, pSource, dest_width, dest_height,
976 dest_clip, flags);
977 if (stretcher.Start())
978 stretcher.Continue(nullptr);
979 return TRUE;
980 } 1010 }
981 1011
982 FX_BOOL CFX_SkiaDeviceDriver::StartDIBits(const CFX_DIBSource* pSource, 1012 FX_BOOL CFX_SkiaDeviceDriver::StartDIBits(const CFX_DIBSource* pSource,
983 int bitmap_alpha, 1013 int bitmap_alpha,
984 uint32_t argb, 1014 uint32_t argb,
985 const CFX_Matrix* pMatrix, 1015 const CFX_Matrix* pMatrix,
986 uint32_t render_flags, 1016 uint32_t render_flags,
987 void*& handle, 1017 void*& handle,
988 int alpha_flag, 1018 int alpha_flag,
989 void* pIccTransform, 1019 void* pIccTransform,
990 int blend_type) { 1020 int blend_type) {
1021 DebugValidate(m_pBitmap, m_pOriDevice);
991 SkColorType colorType = pSource->IsAlphaMask() 1022 SkColorType colorType = pSource->IsAlphaMask()
992 ? SkColorType::kAlpha_8_SkColorType 1023 ? SkColorType::kAlpha_8_SkColorType
993 : SkColorType::kGray_8_SkColorType; 1024 : SkColorType::kGray_8_SkColorType;
1025 SkAlphaType alphaType =
1026 pSource->IsAlphaMask() ? kPremul_SkAlphaType : kOpaque_SkAlphaType;
994 SkColorTable* ct = nullptr; 1027 SkColorTable* ct = nullptr;
995 void* buffer = pSource->GetBuffer(); 1028 void* buffer = pSource->GetBuffer();
996 std::unique_ptr<uint8_t, FxFreeDeleter> dst8Storage; 1029 std::unique_ptr<uint8_t, FxFreeDeleter> dst8Storage;
997 std::unique_ptr<uint32_t, FxFreeDeleter> dst32Storage; 1030 std::unique_ptr<uint32_t, FxFreeDeleter> dst32Storage;
998 int width = pSource->GetWidth(); 1031 int width = pSource->GetWidth();
999 int height = pSource->GetHeight(); 1032 int height = pSource->GetHeight();
1000 int rowBytes = pSource->GetPitch(); 1033 int rowBytes = pSource->GetPitch();
1001 switch (pSource->GetBPP()) { 1034 switch (pSource->GetBPP()) {
1002 case 1: { 1035 case 1: {
1003 dst8Storage.reset(FX_Alloc2D(uint8_t, width, height)); 1036 dst8Storage.reset(FX_Alloc2D(uint8_t, width, height));
(...skipping 14 matching lines...) Expand all
1018 colorType = SkColorType::kIndex_8_SkColorType; 1051 colorType = SkColorType::kIndex_8_SkColorType;
1019 } 1052 }
1020 break; 1053 break;
1021 case 24: { 1054 case 24: {
1022 dst32Storage.reset(FX_Alloc2D(uint32_t, width, height)); 1055 dst32Storage.reset(FX_Alloc2D(uint32_t, width, height));
1023 uint32_t* dst32Pixels = dst32Storage.get(); 1056 uint32_t* dst32Pixels = dst32Storage.get();
1024 for (int y = 0; y < height; ++y) { 1057 for (int y = 0; y < height; ++y) {
1025 const uint8_t* srcRow = 1058 const uint8_t* srcRow =
1026 static_cast<const uint8_t*>(buffer) + y * rowBytes; 1059 static_cast<const uint8_t*>(buffer) + y * rowBytes;
1027 uint32_t* dstRow = dst32Pixels + y * width; 1060 uint32_t* dstRow = dst32Pixels + y * width;
1028 for (int x = 0; x < width; ++x) 1061 for (int x = 0; x < width; ++x) {
1029 dstRow[x] = SkPackARGB32(0xFF, srcRow[x * 3 + 2], srcRow[x * 3 + 1], 1062 dstRow[x] = SkPackARGB32(0xFF, srcRow[x * 3 + 2], srcRow[x * 3 + 1],
1030 srcRow[x * 3 + 0]); 1063 srcRow[x * 3 + 0]);
1064 }
1031 } 1065 }
1032 buffer = dst32Storage.get(); 1066 buffer = dst32Storage.get();
1033 rowBytes = width * sizeof(uint32_t); 1067 rowBytes = width * sizeof(uint32_t);
1034 colorType = SkColorType::kN32_SkColorType; 1068 colorType = SkColorType::kN32_SkColorType;
1069 alphaType = kOpaque_SkAlphaType;
1035 } break; 1070 } break;
1036 case 32: 1071 case 32:
1037 colorType = SkColorType::kN32_SkColorType; 1072 colorType = SkColorType::kN32_SkColorType;
1073 alphaType = kPremul_SkAlphaType;
1074 DebugVerifyBitmapIsPreMultiplied(buffer, width, height);
1038 break; 1075 break;
1039 default: 1076 default:
1077 SkASSERT(0); // TODO(caryclark) ensure that all cases are covered
1040 colorType = SkColorType::kUnknown_SkColorType; 1078 colorType = SkColorType::kUnknown_SkColorType;
1041 } 1079 }
1042 SkImageInfo imageInfo = SkImageInfo::Make( 1080 SkImageInfo imageInfo =
1043 width, height, colorType, 1081 SkImageInfo::Make(width, height, colorType, alphaType);
1044 pSource->IsAlphaMask() ? kPremul_SkAlphaType : kOpaque_SkAlphaType);
1045 SkBitmap skBitmap; 1082 SkBitmap skBitmap;
1046 skBitmap.installPixels(imageInfo, buffer, rowBytes, ct, nullptr, nullptr); 1083 skBitmap.installPixels(imageInfo, buffer, rowBytes, ct, nullptr, nullptr);
1047 m_pCanvas->save(); 1084 m_pCanvas->save();
1048 SkMatrix skMatrix; 1085 SkMatrix skMatrix;
1049 const CFX_Matrix& m = *pMatrix; 1086 const CFX_Matrix& m = *pMatrix;
1050 skMatrix.setAll(m.a / width, -m.c / height, m.c + m.e, m.b / width, 1087 skMatrix.setAll(m.a / width, -m.c / height, m.c + m.e, m.b / width,
1051 -m.d / height, m.d + m.f, 0, 0, 1); 1088 -m.d / height, m.d + m.f, 0, 0, 1);
1052 m_pCanvas->concat(skMatrix); 1089 m_pCanvas->concat(skMatrix);
1053 SkPaint paint; 1090 SkPaint paint;
1054 paint.setAntiAlias(true); 1091 paint.setAntiAlias(true);
1055 if (pSource->IsAlphaMask()) { 1092 if (pSource->IsAlphaMask()) {
1056 paint.setColorFilter( 1093 paint.setColorFilter(
1057 SkColorFilter::MakeModeFilter(argb, SkXfermode::kSrc_Mode)); 1094 SkColorFilter::MakeModeFilter(argb, SkXfermode::kSrc_Mode));
1058 } 1095 }
1059 // paint.setFilterQuality(kHigh_SkFilterQuality); 1096 // paint.setFilterQuality(kHigh_SkFilterQuality);
1060 paint.setXfermodeMode(GetSkiaBlendMode(blend_type)); 1097 paint.setXfermodeMode(GetSkiaBlendMode(blend_type));
1061 paint.setAlpha(bitmap_alpha); 1098 paint.setAlpha(bitmap_alpha);
1062 m_pCanvas->drawBitmap(skBitmap, 0, 0, &paint); 1099 m_pCanvas->drawBitmap(skBitmap, 0, 0, &paint);
1063 m_pCanvas->restore(); 1100 m_pCanvas->restore();
1064 if (ct) 1101 if (ct)
1065 ct->unref(); 1102 ct->unref();
1103 DebugValidate(m_pBitmap, m_pOriDevice);
1066 return TRUE; 1104 return TRUE;
1067 } 1105 }
1068 1106
1069 FX_BOOL CFX_SkiaDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause) { 1107 void CFX_SkiaDeviceDriver::PreMultiply() {
1070 if (!m_pBitmap->GetBuffer()) 1108 void* buffer = m_pBitmap->GetBuffer();
1071 return TRUE; 1109 if (!buffer)
1072 return ((CFX_ImageRenderer*)pHandle)->Continue(pPause);
1073 }
1074
1075 void CFX_SkiaDeviceDriver::CancelDIBits(void* pHandle) {
1076 if (!m_pBitmap->GetBuffer())
1077 return; 1110 return;
1078 delete (CFX_ImageRenderer*)pHandle; 1111 if (m_pBitmap->GetBPP() != 32) {
1112 return;
1113 }
1114 int height = m_pBitmap->GetHeight();
1115 int width = m_pBitmap->GetWidth();
1116 int rowBytes = m_pBitmap->GetPitch();
1117 SkImageInfo unpremultipliedInfo =
1118 SkImageInfo::Make(width, height, kN32_SkColorType, kUnpremul_SkAlphaType);
1119 SkPixmap unpremultiplied(unpremultipliedInfo, buffer, rowBytes);
1120 SkImageInfo premultipliedInfo =
1121 SkImageInfo::Make(width, height, kN32_SkColorType, kPremul_SkAlphaType);
1122 SkPixmap premultiplied(premultipliedInfo, buffer, rowBytes);
1123 unpremultiplied.readPixels(premultiplied);
1124 DebugVerifyBitmapIsPreMultiplied(buffer, width, height);
1079 } 1125 }
1080 1126
1081 CFX_FxgeDevice::CFX_FxgeDevice() { 1127 CFX_FxgeDevice::CFX_FxgeDevice() {
1082 m_bOwnedBitmap = FALSE; 1128 m_bOwnedBitmap = FALSE;
1083 } 1129 }
1084 1130
1085 SkPictureRecorder* CFX_FxgeDevice::CreateRecorder(int size_x, int size_y) { 1131 SkPictureRecorder* CFX_FxgeDevice::CreateRecorder(int size_x, int size_y) {
1086 CFX_SkiaDeviceDriver* skDriver = new CFX_SkiaDeviceDriver(size_x, size_y); 1132 CFX_SkiaDeviceDriver* skDriver = new CFX_SkiaDeviceDriver(size_x, size_y);
1087 SetDeviceDriver(skDriver); 1133 SetDeviceDriver(skDriver);
1088 return skDriver->GetRecorder(); 1134 return skDriver->GetRecorder();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 new CFX_SkiaDeviceDriver(pBitmap, FALSE, pOriDevice, FALSE); 1168 new CFX_SkiaDeviceDriver(pBitmap, FALSE, pOriDevice, FALSE);
1123 SetDeviceDriver(pDriver); 1169 SetDeviceDriver(pDriver);
1124 return true; 1170 return true;
1125 } 1171 }
1126 1172
1127 CFX_FxgeDevice::~CFX_FxgeDevice() { 1173 CFX_FxgeDevice::~CFX_FxgeDevice() {
1128 if (m_bOwnedBitmap && GetBitmap()) 1174 if (m_bOwnedBitmap && GetBitmap())
1129 delete GetBitmap(); 1175 delete GetBitmap();
1130 } 1176 }
1131 1177
1178 void CFX_FxgeDevice::PreMultiply() {
1179 (static_cast<CFX_SkiaDeviceDriver*>(this->GetDeviceDriver()))->PreMultiply();
1180 }
1181
1132 #endif 1182 #endif
OLDNEW
« no previous file with comments | « core/fxge/skia/fx_skia_device.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698