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

Side by Side Diff: xfa/fxgraphics/cfx_graphics.cpp

Issue 2467203003: Remove FX_BOOL from xfa. (Closed)
Patch Set: Created 4 years, 1 month 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 | « xfa/fxgraphics/cfx_graphics.h ('k') | xfa/fxgraphics/cfx_path.h » ('j') | 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 // 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 "xfa/fxgraphics/cfx_graphics.h" 7 #include "xfa/fxgraphics/cfx_graphics.h"
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 0x00, 0x00, 0x00, 0x00, 566 0x00, 0x00, 0x00, 0x00,
567 }}, 567 }},
568 }; 568 };
569 569
570 } // namespace 570 } // namespace
571 571
572 CFX_Graphics::CFX_Graphics() 572 CFX_Graphics::CFX_Graphics()
573 : m_type(FX_CONTEXT_None), m_renderDevice(nullptr) {} 573 : m_type(FX_CONTEXT_None), m_renderDevice(nullptr) {}
574 574
575 FWL_Error CFX_Graphics::Create(CFX_RenderDevice* renderDevice, 575 FWL_Error CFX_Graphics::Create(CFX_RenderDevice* renderDevice,
576 FX_BOOL isAntialiasing) { 576 bool isAntialiasing) {
577 if (!renderDevice) 577 if (!renderDevice)
578 return FWL_Error::ParameterInvalid; 578 return FWL_Error::ParameterInvalid;
579 if (m_type != FX_CONTEXT_None) 579 if (m_type != FX_CONTEXT_None)
580 return FWL_Error::PropertyInvalid; 580 return FWL_Error::PropertyInvalid;
581 581
582 m_type = FX_CONTEXT_Device; 582 m_type = FX_CONTEXT_Device;
583 m_info.isAntialiasing = isAntialiasing; 583 m_info.isAntialiasing = isAntialiasing;
584 m_renderDevice = renderDevice; 584 m_renderDevice = renderDevice;
585 if (m_renderDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP) 585 if (m_renderDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP)
586 return FWL_Error::Succeeded; 586 return FWL_Error::Succeeded;
587 return FWL_Error::Indefinite; 587 return FWL_Error::Indefinite;
588 } 588 }
589 589
590 FWL_Error CFX_Graphics::Create(int32_t width, 590 FWL_Error CFX_Graphics::Create(int32_t width,
591 int32_t height, 591 int32_t height,
592 FXDIB_Format format, 592 FXDIB_Format format,
593 FX_BOOL isNative, 593 bool isNative,
594 FX_BOOL isAntialiasing) { 594 bool isAntialiasing) {
595 if (m_type != FX_CONTEXT_None) 595 if (m_type != FX_CONTEXT_None)
596 return FWL_Error::PropertyInvalid; 596 return FWL_Error::PropertyInvalid;
597 597
598 m_type = FX_CONTEXT_Device; 598 m_type = FX_CONTEXT_Device;
599 m_info.isAntialiasing = isAntialiasing; 599 m_info.isAntialiasing = isAntialiasing;
600 m_aggGraphics.reset(new CAGG_Graphics); 600 m_aggGraphics.reset(new CAGG_Graphics);
601 return m_aggGraphics->Create(this, width, height, format); 601 return m_aggGraphics->Create(this, width, height, format);
602 } 602 }
603 603
604 CFX_Graphics::~CFX_Graphics() {} 604 CFX_Graphics::~CFX_Graphics() {}
605 605
606 FWL_Error CFX_Graphics::GetDeviceCap(const int32_t capID, 606 FWL_Error CFX_Graphics::GetDeviceCap(const int32_t capID,
607 FX_DeviceCap& capVal) { 607 FX_DeviceCap& capVal) {
608 if (m_type == FX_CONTEXT_Device && m_renderDevice) { 608 if (m_type == FX_CONTEXT_Device && m_renderDevice) {
609 capVal = m_renderDevice->GetDeviceCaps(capID); 609 capVal = m_renderDevice->GetDeviceCaps(capID);
610 return FWL_Error::Succeeded; 610 return FWL_Error::Succeeded;
611 } 611 }
612 return FWL_Error::PropertyInvalid; 612 return FWL_Error::PropertyInvalid;
613 } 613 }
614 614
615 FWL_Error CFX_Graphics::IsPrinterDevice(FX_BOOL& isPrinter) { 615 FWL_Error CFX_Graphics::IsPrinterDevice(bool& isPrinter) {
616 if (m_type == FX_CONTEXT_Device && m_renderDevice) { 616 if (m_type == FX_CONTEXT_Device && m_renderDevice) {
617 isPrinter = m_renderDevice->GetDeviceClass() == FXDC_PRINTER; 617 isPrinter = m_renderDevice->GetDeviceClass() == FXDC_PRINTER;
618 return FWL_Error::Succeeded; 618 return FWL_Error::Succeeded;
619 } 619 }
620 return FWL_Error::PropertyInvalid; 620 return FWL_Error::PropertyInvalid;
621 } 621 }
622 622
623 FWL_Error CFX_Graphics::EnableAntialiasing(FX_BOOL isAntialiasing) { 623 FWL_Error CFX_Graphics::EnableAntialiasing(bool isAntialiasing) {
624 if (m_type == FX_CONTEXT_Device && m_renderDevice) { 624 if (m_type == FX_CONTEXT_Device && m_renderDevice) {
625 m_info.isAntialiasing = isAntialiasing; 625 m_info.isAntialiasing = isAntialiasing;
626 return FWL_Error::Succeeded; 626 return FWL_Error::Succeeded;
627 } 627 }
628 return FWL_Error::PropertyInvalid; 628 return FWL_Error::PropertyInvalid;
629 } 629 }
630 630
631 FWL_Error CFX_Graphics::SaveGraphState() { 631 FWL_Error CFX_Graphics::SaveGraphState() {
632 if (m_type == FX_CONTEXT_Device && m_renderDevice) { 632 if (m_type == FX_CONTEXT_Device && m_renderDevice) {
633 m_renderDevice->SaveState(); 633 m_renderDevice->SaveState();
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 } 754 }
755 755
756 FWL_Error CFX_Graphics::GetLineWidth(FX_FLOAT& lineWidth) const { 756 FWL_Error CFX_Graphics::GetLineWidth(FX_FLOAT& lineWidth) const {
757 if (m_type == FX_CONTEXT_Device && m_renderDevice) { 757 if (m_type == FX_CONTEXT_Device && m_renderDevice) {
758 lineWidth = m_info.graphState.m_LineWidth; 758 lineWidth = m_info.graphState.m_LineWidth;
759 return FWL_Error::Succeeded; 759 return FWL_Error::Succeeded;
760 } 760 }
761 return FWL_Error::PropertyInvalid; 761 return FWL_Error::PropertyInvalid;
762 } 762 }
763 763
764 FWL_Error CFX_Graphics::SetLineWidth(FX_FLOAT lineWidth, FX_BOOL isActOnDash) { 764 FWL_Error CFX_Graphics::SetLineWidth(FX_FLOAT lineWidth, bool isActOnDash) {
765 if (m_type == FX_CONTEXT_Device && m_renderDevice) { 765 if (m_type == FX_CONTEXT_Device && m_renderDevice) {
766 m_info.graphState.m_LineWidth = lineWidth; 766 m_info.graphState.m_LineWidth = lineWidth;
767 m_info.isActOnDash = isActOnDash; 767 m_info.isActOnDash = isActOnDash;
768 return FWL_Error::Succeeded; 768 return FWL_Error::Succeeded;
769 } 769 }
770 return FWL_Error::PropertyInvalid; 770 return FWL_Error::PropertyInvalid;
771 } 771 }
772 772
773 FWL_Error CFX_Graphics::GetStrokeAlignment( 773 FWL_Error CFX_Graphics::GetStrokeAlignment(
774 FX_StrokeAlignment& strokeAlignment) const { 774 FX_StrokeAlignment& strokeAlignment) const {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 return RenderDeviceFillPath(path, fillMode, matrix); 824 return RenderDeviceFillPath(path, fillMode, matrix);
825 return FWL_Error::PropertyInvalid; 825 return FWL_Error::PropertyInvalid;
826 } 826 }
827 827
828 FWL_Error CFX_Graphics::ClipPath(CFX_Path* path, 828 FWL_Error CFX_Graphics::ClipPath(CFX_Path* path,
829 FX_FillMode fillMode, 829 FX_FillMode fillMode,
830 CFX_Matrix* matrix) { 830 CFX_Matrix* matrix) {
831 if (!path) 831 if (!path)
832 return FWL_Error::ParameterInvalid; 832 return FWL_Error::ParameterInvalid;
833 if (m_type == FX_CONTEXT_Device && m_renderDevice) { 833 if (m_type == FX_CONTEXT_Device && m_renderDevice) {
834 FX_BOOL result = 834 bool result =
835 m_renderDevice->SetClip_PathFill(path->GetPathData(), matrix, fillMode); 835 m_renderDevice->SetClip_PathFill(path->GetPathData(), matrix, fillMode);
836 if (!result) 836 if (!result)
837 return FWL_Error::Indefinite; 837 return FWL_Error::Indefinite;
838 return FWL_Error::Succeeded; 838 return FWL_Error::Succeeded;
839 } 839 }
840 return FWL_Error::PropertyInvalid; 840 return FWL_Error::PropertyInvalid;
841 } 841 }
842 842
843 FWL_Error CFX_Graphics::DrawImage(CFX_DIBSource* source, 843 FWL_Error CFX_Graphics::DrawImage(CFX_DIBSource* source,
844 const CFX_PointF& point, 844 const CFX_PointF& point,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 FWL_Error CFX_Graphics::ShowText(const CFX_PointF& point, 949 FWL_Error CFX_Graphics::ShowText(const CFX_PointF& point,
950 const CFX_WideString& text, 950 const CFX_WideString& text,
951 CFX_Matrix* matrix) { 951 CFX_Matrix* matrix) {
952 if (m_type == FX_CONTEXT_Device && m_renderDevice) 952 if (m_type == FX_CONTEXT_Device && m_renderDevice)
953 return RenderDeviceShowText(point, text, matrix); 953 return RenderDeviceShowText(point, text, matrix);
954 return FWL_Error::PropertyInvalid; 954 return FWL_Error::PropertyInvalid;
955 } 955 }
956 956
957 void CFX_Graphics::CalcTextRect(CFX_RectF& rect, 957 void CFX_Graphics::CalcTextRect(CFX_RectF& rect,
958 const CFX_WideString& text, 958 const CFX_WideString& text,
959 FX_BOOL isMultiline, 959 bool isMultiline,
960 CFX_Matrix* matrix) { 960 CFX_Matrix* matrix) {
961 if (m_type != FX_CONTEXT_Device || !m_renderDevice) 961 if (m_type != FX_CONTEXT_Device || !m_renderDevice)
962 return; 962 return;
963 963
964 int32_t length = text.GetLength(); 964 int32_t length = text.GetLength();
965 uint32_t* charCodes = FX_Alloc(uint32_t, length); 965 uint32_t* charCodes = FX_Alloc(uint32_t, length);
966 FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length); 966 FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length);
967 CalcTextInfo(text, charCodes, charPos, rect); 967 CalcTextInfo(text, charCodes, charPos, rect);
968 FX_Free(charPos); 968 FX_Free(charPos);
969 FX_Free(charCodes); 969 FX_Free(charCodes);
970 } 970 }
971 971
972 FWL_Error CFX_Graphics::Transfer(CFX_Graphics* graphics, 972 FWL_Error CFX_Graphics::Transfer(CFX_Graphics* graphics,
973 const CFX_Matrix* matrix) { 973 const CFX_Matrix* matrix) {
974 if (!graphics || !graphics->m_renderDevice) 974 if (!graphics || !graphics->m_renderDevice)
975 return FWL_Error::ParameterInvalid; 975 return FWL_Error::ParameterInvalid;
976 CFX_Matrix m; 976 CFX_Matrix m;
977 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, 977 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e,
978 m_info.CTM.f); 978 m_info.CTM.f);
979 if (matrix) { 979 if (matrix) {
980 m.Concat(*matrix); 980 m.Concat(*matrix);
981 } 981 }
982 if (m_type == FX_CONTEXT_Device && m_renderDevice) { 982 if (m_type == FX_CONTEXT_Device && m_renderDevice) {
983 CFX_DIBitmap* bitmap = graphics->m_renderDevice->GetBitmap(); 983 CFX_DIBitmap* bitmap = graphics->m_renderDevice->GetBitmap();
984 FX_BOOL result = m_renderDevice->SetDIBits(bitmap, 0, 0); 984 bool result = m_renderDevice->SetDIBits(bitmap, 0, 0);
985 if (!result) 985 if (!result)
986 return FWL_Error::MethodNotSupported; 986 return FWL_Error::MethodNotSupported;
987 return FWL_Error::Succeeded; 987 return FWL_Error::Succeeded;
988 } 988 }
989 return FWL_Error::PropertyInvalid; 989 return FWL_Error::PropertyInvalid;
990 } 990 }
991 991
992 FWL_Error CFX_Graphics::Transfer(CFX_Graphics* graphics, 992 FWL_Error CFX_Graphics::Transfer(CFX_Graphics* graphics,
993 FX_FLOAT srcLeft, 993 FX_FLOAT srcLeft,
994 FX_FLOAT srcTop, 994 FX_FLOAT srcTop,
995 const CFX_RectF& dstRect, 995 const CFX_RectF& dstRect,
996 const CFX_Matrix* matrix) { 996 const CFX_Matrix* matrix) {
997 if (!graphics || !graphics->m_renderDevice) 997 if (!graphics || !graphics->m_renderDevice)
998 return FWL_Error::ParameterInvalid; 998 return FWL_Error::ParameterInvalid;
999 CFX_Matrix m; 999 CFX_Matrix m;
1000 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, 1000 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e,
1001 m_info.CTM.f); 1001 m_info.CTM.f);
1002 if (matrix) { 1002 if (matrix) {
1003 m.Concat(*matrix); 1003 m.Concat(*matrix);
1004 } 1004 }
1005 if (m_type == FX_CONTEXT_Device && m_renderDevice) { 1005 if (m_type == FX_CONTEXT_Device && m_renderDevice) {
1006 CFX_DIBitmap bmp; 1006 CFX_DIBitmap bmp;
1007 FX_BOOL result = 1007 bool result =
1008 bmp.Create((int32_t)dstRect.width, (int32_t)dstRect.height, 1008 bmp.Create((int32_t)dstRect.width, (int32_t)dstRect.height,
1009 graphics->m_renderDevice->GetBitmap()->GetFormat()); 1009 graphics->m_renderDevice->GetBitmap()->GetFormat());
1010 if (!result) 1010 if (!result)
1011 return FWL_Error::IntermediateValueInvalid; 1011 return FWL_Error::IntermediateValueInvalid;
1012 result = graphics->m_renderDevice->GetDIBits(&bmp, (int32_t)srcLeft, 1012 result = graphics->m_renderDevice->GetDIBits(&bmp, (int32_t)srcLeft,
1013 (int32_t)srcTop); 1013 (int32_t)srcTop);
1014 if (!result) 1014 if (!result)
1015 return FWL_Error::MethodNotSupported; 1015 return FWL_Error::MethodNotSupported;
1016 result = m_renderDevice->SetDIBits(&bmp, (int32_t)dstRect.left, 1016 result = m_renderDevice->SetDIBits(&bmp, (int32_t)dstRect.left,
1017 (int32_t)dstRect.top); 1017 (int32_t)dstRect.top);
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1163 if (!m_info.strokeColor) 1163 if (!m_info.strokeColor)
1164 return FWL_Error::PropertyInvalid; 1164 return FWL_Error::PropertyInvalid;
1165 CFX_Matrix m; 1165 CFX_Matrix m;
1166 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, 1166 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e,
1167 m_info.CTM.f); 1167 m_info.CTM.f);
1168 if (matrix) { 1168 if (matrix) {
1169 m.Concat(*matrix); 1169 m.Concat(*matrix);
1170 } 1170 }
1171 switch (m_info.strokeColor->m_type) { 1171 switch (m_info.strokeColor->m_type) {
1172 case FX_COLOR_Solid: { 1172 case FX_COLOR_Solid: {
1173 FX_BOOL result = 1173 bool result =
1174 m_renderDevice->DrawPath(path->GetPathData(), &m, &m_info.graphState, 1174 m_renderDevice->DrawPath(path->GetPathData(), &m, &m_info.graphState,
1175 0x0, m_info.strokeColor->m_info.argb, 0); 1175 0x0, m_info.strokeColor->m_info.argb, 0);
1176 if (!result) 1176 if (!result)
1177 return FWL_Error::Indefinite; 1177 return FWL_Error::Indefinite;
1178 return FWL_Error::Succeeded; 1178 return FWL_Error::Succeeded;
1179 } 1179 }
1180 case FX_COLOR_Pattern: 1180 case FX_COLOR_Pattern:
1181 return StrokePathWithPattern(path, &m); 1181 return StrokePathWithPattern(path, &m);
1182 case FX_COLOR_Shading: 1182 case FX_COLOR_Shading:
1183 return StrokePathWithShading(path, &m); 1183 return StrokePathWithShading(path, &m);
1184 default: 1184 default:
1185 return FWL_Error::PropertyInvalid; 1185 return FWL_Error::PropertyInvalid;
1186 } 1186 }
1187 } 1187 }
1188 1188
1189 FWL_Error CFX_Graphics::RenderDeviceFillPath(CFX_Path* path, 1189 FWL_Error CFX_Graphics::RenderDeviceFillPath(CFX_Path* path,
1190 FX_FillMode fillMode, 1190 FX_FillMode fillMode,
1191 CFX_Matrix* matrix) { 1191 CFX_Matrix* matrix) {
1192 if (!m_info.fillColor) 1192 if (!m_info.fillColor)
1193 return FWL_Error::PropertyInvalid; 1193 return FWL_Error::PropertyInvalid;
1194 CFX_Matrix m; 1194 CFX_Matrix m;
1195 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, 1195 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e,
1196 m_info.CTM.f); 1196 m_info.CTM.f);
1197 if (matrix) { 1197 if (matrix) {
1198 m.Concat(*matrix); 1198 m.Concat(*matrix);
1199 } 1199 }
1200 switch (m_info.fillColor->m_type) { 1200 switch (m_info.fillColor->m_type) {
1201 case FX_COLOR_Solid: { 1201 case FX_COLOR_Solid: {
1202 FX_BOOL result = m_renderDevice->DrawPath( 1202 bool result = m_renderDevice->DrawPath(
1203 path->GetPathData(), &m, &m_info.graphState, 1203 path->GetPathData(), &m, &m_info.graphState,
1204 m_info.fillColor->m_info.argb, 0x0, fillMode); 1204 m_info.fillColor->m_info.argb, 0x0, fillMode);
1205 if (!result) 1205 if (!result)
1206 return FWL_Error::Indefinite; 1206 return FWL_Error::Indefinite;
1207 return FWL_Error::Succeeded; 1207 return FWL_Error::Succeeded;
1208 } 1208 }
1209 case FX_COLOR_Pattern: 1209 case FX_COLOR_Pattern:
1210 return FillPathWithPattern(path, fillMode, &m); 1210 return FillPathWithPattern(path, fillMode, &m);
1211 case FX_COLOR_Shading: 1211 case FX_COLOR_Shading:
1212 return FillPathWithShading(path, fillMode, &m); 1212 return FillPathWithShading(path, fillMode, &m);
1213 default: 1213 default:
1214 return FWL_Error::PropertyInvalid; 1214 return FWL_Error::PropertyInvalid;
1215 } 1215 }
1216 } 1216 }
1217 1217
1218 FWL_Error CFX_Graphics::RenderDeviceDrawImage(CFX_DIBSource* source, 1218 FWL_Error CFX_Graphics::RenderDeviceDrawImage(CFX_DIBSource* source,
1219 const CFX_PointF& point, 1219 const CFX_PointF& point,
1220 CFX_Matrix* matrix) { 1220 CFX_Matrix* matrix) {
1221 CFX_Matrix m1; 1221 CFX_Matrix m1;
1222 m1.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, 1222 m1.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e,
1223 m_info.CTM.f); 1223 m_info.CTM.f);
1224 if (matrix) { 1224 if (matrix) {
1225 m1.Concat(*matrix); 1225 m1.Concat(*matrix);
1226 } 1226 }
1227 CFX_Matrix m2; 1227 CFX_Matrix m2;
1228 m2.Set((FX_FLOAT)source->GetWidth(), 0.0, 0.0, (FX_FLOAT)source->GetHeight(), 1228 m2.Set((FX_FLOAT)source->GetWidth(), 0.0, 0.0, (FX_FLOAT)source->GetHeight(),
1229 point.x, point.y); 1229 point.x, point.y);
1230 m2.Concat(m1); 1230 m2.Concat(m1);
1231 int32_t left, top; 1231 int32_t left, top;
1232 std::unique_ptr<CFX_DIBitmap> bmp1(source->FlipImage(FALSE, TRUE)); 1232 std::unique_ptr<CFX_DIBitmap> bmp1(source->FlipImage(false, true));
1233 std::unique_ptr<CFX_DIBitmap> bmp2(bmp1->TransformTo(&m2, left, top)); 1233 std::unique_ptr<CFX_DIBitmap> bmp2(bmp1->TransformTo(&m2, left, top));
1234 CFX_RectF r; 1234 CFX_RectF r;
1235 GetClipRect(r); 1235 GetClipRect(r);
1236 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); 1236 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap();
1237 CFX_DIBitmap bmp; 1237 CFX_DIBitmap bmp;
1238 if (bmp.Create(bitmap->GetWidth(), bitmap->GetHeight(), FXDIB_Argb) && 1238 if (bmp.Create(bitmap->GetWidth(), bitmap->GetHeight(), FXDIB_Argb) &&
1239 m_renderDevice->GetDIBits(&bmp, 0, 0) && 1239 m_renderDevice->GetDIBits(&bmp, 0, 0) &&
1240 bmp.TransferBitmap(FXSYS_round(r.left), FXSYS_round(r.top), 1240 bmp.TransferBitmap(FXSYS_round(r.left), FXSYS_round(r.top),
1241 FXSYS_round(r.Width()), FXSYS_round(r.Height()), 1241 FXSYS_round(r.Width()), FXSYS_round(r.Height()),
1242 bmp2.get(), FXSYS_round(r.left - left), 1242 bmp2.get(), FXSYS_round(r.left - left),
(...skipping 12 matching lines...) Expand all
1255 m_info.CTM.f); 1255 m_info.CTM.f);
1256 if (matrix) { 1256 if (matrix) {
1257 m1.Concat(*matrix); 1257 m1.Concat(*matrix);
1258 } 1258 }
1259 std::unique_ptr<CFX_DIBitmap> bmp1( 1259 std::unique_ptr<CFX_DIBitmap> bmp1(
1260 source->StretchTo((int32_t)rect.Width(), (int32_t)rect.Height())); 1260 source->StretchTo((int32_t)rect.Width(), (int32_t)rect.Height()));
1261 CFX_Matrix m2; 1261 CFX_Matrix m2;
1262 m2.Set(rect.Width(), 0.0, 0.0, rect.Height(), rect.left, rect.top); 1262 m2.Set(rect.Width(), 0.0, 0.0, rect.Height(), rect.left, rect.top);
1263 m2.Concat(m1); 1263 m2.Concat(m1);
1264 int32_t left, top; 1264 int32_t left, top;
1265 std::unique_ptr<CFX_DIBitmap> bmp2(bmp1->FlipImage(FALSE, TRUE)); 1265 std::unique_ptr<CFX_DIBitmap> bmp2(bmp1->FlipImage(false, true));
1266 std::unique_ptr<CFX_DIBitmap> bmp3(bmp2->TransformTo(&m2, left, top)); 1266 std::unique_ptr<CFX_DIBitmap> bmp3(bmp2->TransformTo(&m2, left, top));
1267 CFX_RectF r; 1267 CFX_RectF r;
1268 GetClipRect(r); 1268 GetClipRect(r);
1269 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); 1269 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap();
1270 if (bitmap->CompositeBitmap(FXSYS_round(r.left), FXSYS_round(r.top), 1270 if (bitmap->CompositeBitmap(FXSYS_round(r.left), FXSYS_round(r.top),
1271 FXSYS_round(r.Width()), FXSYS_round(r.Height()), 1271 FXSYS_round(r.Width()), FXSYS_round(r.Height()),
1272 bmp3.get(), FXSYS_round(r.left - left), 1272 bmp3.get(), FXSYS_round(r.left - left),
1273 FXSYS_round(r.top - top))) { 1273 FXSYS_round(r.top - top))) {
1274 return FWL_Error::Succeeded; 1274 return FWL_Error::Succeeded;
1275 } 1275 }
1276 return FWL_Error::Indefinite; 1276 return FWL_Error::Indefinite;
1277 } 1277 }
1278 1278
1279 FWL_Error CFX_Graphics::RenderDeviceShowText(const CFX_PointF& point, 1279 FWL_Error CFX_Graphics::RenderDeviceShowText(const CFX_PointF& point,
1280 const CFX_WideString& text, 1280 const CFX_WideString& text,
1281 CFX_Matrix* matrix) { 1281 CFX_Matrix* matrix) {
1282 int32_t length = text.GetLength(); 1282 int32_t length = text.GetLength();
1283 uint32_t* charCodes = FX_Alloc(uint32_t, length); 1283 uint32_t* charCodes = FX_Alloc(uint32_t, length);
1284 FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length); 1284 FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length);
1285 CFX_RectF rect; 1285 CFX_RectF rect;
1286 rect.Set(point.x, point.y, 0, 0); 1286 rect.Set(point.x, point.y, 0, 0);
1287 CalcTextInfo(text, charCodes, charPos, rect); 1287 CalcTextInfo(text, charCodes, charPos, rect);
1288 CFX_Matrix m; 1288 CFX_Matrix m;
1289 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, 1289 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e,
1290 m_info.CTM.f); 1290 m_info.CTM.f);
1291 m.Translate(0, m_info.fontSize * m_info.fontHScale); 1291 m.Translate(0, m_info.fontSize * m_info.fontHScale);
1292 if (matrix) { 1292 if (matrix) {
1293 m.Concat(*matrix); 1293 m.Concat(*matrix);
1294 } 1294 }
1295 FX_BOOL result = m_renderDevice->DrawNormalText( 1295 bool result = m_renderDevice->DrawNormalText(
1296 length, charPos, m_info.font, -m_info.fontSize * m_info.fontHScale, &m, 1296 length, charPos, m_info.font, -m_info.fontSize * m_info.fontHScale, &m,
1297 m_info.fillColor->m_info.argb, FXTEXT_CLEARTYPE); 1297 m_info.fillColor->m_info.argb, FXTEXT_CLEARTYPE);
1298 if (!result) 1298 if (!result)
1299 return FWL_Error::Indefinite; 1299 return FWL_Error::Indefinite;
1300 FX_Free(charPos); 1300 FX_Free(charPos);
1301 FX_Free(charCodes); 1301 FX_Free(charCodes);
1302 return FWL_Error::Succeeded; 1302 return FWL_Error::Succeeded;
1303 } 1303 }
1304 1304
1305 FWL_Error CFX_Graphics::StrokePathWithPattern(CFX_Path* path, 1305 FWL_Error CFX_Graphics::StrokePathWithPattern(CFX_Path* path,
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1479 FWL_Error CFX_Graphics::SetDIBitsWithMatrix(CFX_DIBSource* source, 1479 FWL_Error CFX_Graphics::SetDIBitsWithMatrix(CFX_DIBSource* source,
1480 CFX_Matrix* matrix) { 1480 CFX_Matrix* matrix) {
1481 if (matrix->IsIdentity()) { 1481 if (matrix->IsIdentity()) {
1482 m_renderDevice->SetDIBits(source, 0, 0); 1482 m_renderDevice->SetDIBits(source, 0, 0);
1483 } else { 1483 } else {
1484 CFX_Matrix m; 1484 CFX_Matrix m;
1485 m.Set((FX_FLOAT)source->GetWidth(), 0, 0, (FX_FLOAT)source->GetHeight(), 0, 1485 m.Set((FX_FLOAT)source->GetWidth(), 0, 0, (FX_FLOAT)source->GetHeight(), 0,
1486 0); 1486 0);
1487 m.Concat(*matrix); 1487 m.Concat(*matrix);
1488 int32_t left, top; 1488 int32_t left, top;
1489 std::unique_ptr<CFX_DIBitmap> bmp1(source->FlipImage(FALSE, TRUE)); 1489 std::unique_ptr<CFX_DIBitmap> bmp1(source->FlipImage(false, true));
1490 std::unique_ptr<CFX_DIBitmap> bmp2(bmp1->TransformTo(&m, left, top)); 1490 std::unique_ptr<CFX_DIBitmap> bmp2(bmp1->TransformTo(&m, left, top));
1491 m_renderDevice->SetDIBits(bmp2.get(), left, top); 1491 m_renderDevice->SetDIBits(bmp2.get(), left, top);
1492 } 1492 }
1493 return FWL_Error::Succeeded; 1493 return FWL_Error::Succeeded;
1494 } 1494 }
1495 1495
1496 FWL_Error CFX_Graphics::CalcTextInfo(const CFX_WideString& text, 1496 FWL_Error CFX_Graphics::CalcTextInfo(const CFX_WideString& text,
1497 uint32_t* charCodes, 1497 uint32_t* charCodes,
1498 FXTEXT_CHARPOS* charPos, 1498 FXTEXT_CHARPOS* charPos,
1499 CFX_RectF& rect) { 1499 CFX_RectF& rect) {
1500 std::unique_ptr<CFX_UnicodeEncoding> encoding( 1500 std::unique_ptr<CFX_UnicodeEncoding> encoding(
1501 new CFX_UnicodeEncoding(m_info.font)); 1501 new CFX_UnicodeEncoding(m_info.font));
1502 int32_t length = text.GetLength(); 1502 int32_t length = text.GetLength();
1503 FX_FLOAT penX = (FX_FLOAT)rect.left; 1503 FX_FLOAT penX = (FX_FLOAT)rect.left;
1504 FX_FLOAT penY = (FX_FLOAT)rect.top; 1504 FX_FLOAT penY = (FX_FLOAT)rect.top;
1505 FX_FLOAT left = (FX_FLOAT)(0); 1505 FX_FLOAT left = (FX_FLOAT)(0);
1506 FX_FLOAT top = (FX_FLOAT)(0); 1506 FX_FLOAT top = (FX_FLOAT)(0);
1507 charCodes[0] = text.GetAt(0); 1507 charCodes[0] = text.GetAt(0);
1508 charPos[0].m_OriginX = penX + left; 1508 charPos[0].m_OriginX = penX + left;
1509 charPos[0].m_OriginY = penY + top; 1509 charPos[0].m_OriginY = penY + top;
1510 charPos[0].m_GlyphIndex = encoding->GlyphFromCharCode(charCodes[0]); 1510 charPos[0].m_GlyphIndex = encoding->GlyphFromCharCode(charCodes[0]);
1511 charPos[0].m_FontCharWidth = FXSYS_round( 1511 charPos[0].m_FontCharWidth = FXSYS_round(
1512 m_info.font->GetGlyphWidth(charPos[0].m_GlyphIndex) * m_info.fontHScale); 1512 m_info.font->GetGlyphWidth(charPos[0].m_GlyphIndex) * m_info.fontHScale);
1513 charPos[0].m_bGlyphAdjust = TRUE; 1513 charPos[0].m_bGlyphAdjust = true;
1514 charPos[0].m_AdjustMatrix[0] = -1; 1514 charPos[0].m_AdjustMatrix[0] = -1;
1515 charPos[0].m_AdjustMatrix[1] = 0; 1515 charPos[0].m_AdjustMatrix[1] = 0;
1516 charPos[0].m_AdjustMatrix[2] = 0; 1516 charPos[0].m_AdjustMatrix[2] = 0;
1517 charPos[0].m_AdjustMatrix[3] = 1; 1517 charPos[0].m_AdjustMatrix[3] = 1;
1518 penX += (FX_FLOAT)(charPos[0].m_FontCharWidth) * m_info.fontSize / 1000 + 1518 penX += (FX_FLOAT)(charPos[0].m_FontCharWidth) * m_info.fontSize / 1000 +
1519 m_info.fontSpacing; 1519 m_info.fontSpacing;
1520 for (int32_t i = 1; i < length; i++) { 1520 for (int32_t i = 1; i < length; i++) {
1521 charCodes[i] = text.GetAt(i); 1521 charCodes[i] = text.GetAt(i);
1522 charPos[i].m_OriginX = penX + left; 1522 charPos[i].m_OriginX = penX + left;
1523 charPos[i].m_OriginY = penY + top; 1523 charPos[i].m_OriginY = penY + top;
1524 charPos[i].m_GlyphIndex = encoding->GlyphFromCharCode(charCodes[i]); 1524 charPos[i].m_GlyphIndex = encoding->GlyphFromCharCode(charCodes[i]);
1525 charPos[i].m_FontCharWidth = 1525 charPos[i].m_FontCharWidth =
1526 FXSYS_round(m_info.font->GetGlyphWidth(charPos[i].m_GlyphIndex) * 1526 FXSYS_round(m_info.font->GetGlyphWidth(charPos[i].m_GlyphIndex) *
1527 m_info.fontHScale); 1527 m_info.fontHScale);
1528 charPos[i].m_bGlyphAdjust = TRUE; 1528 charPos[i].m_bGlyphAdjust = true;
1529 charPos[i].m_AdjustMatrix[0] = -1; 1529 charPos[i].m_AdjustMatrix[0] = -1;
1530 charPos[i].m_AdjustMatrix[1] = 0; 1530 charPos[i].m_AdjustMatrix[1] = 0;
1531 charPos[i].m_AdjustMatrix[2] = 0; 1531 charPos[i].m_AdjustMatrix[2] = 0;
1532 charPos[i].m_AdjustMatrix[3] = 1; 1532 charPos[i].m_AdjustMatrix[3] = 1;
1533 penX += (FX_FLOAT)(charPos[i].m_FontCharWidth) * m_info.fontSize / 1000 + 1533 penX += (FX_FLOAT)(charPos[i].m_FontCharWidth) * m_info.fontSize / 1000 +
1534 m_info.fontSpacing; 1534 m_info.fontSpacing;
1535 } 1535 }
1536 rect.width = (FX_FLOAT)penX - rect.left; 1536 rect.width = (FX_FLOAT)penX - rect.left;
1537 rect.height = rect.top + m_info.fontSize * m_info.fontHScale - rect.top; 1537 rect.height = rect.top + m_info.fontSize * m_info.fontHScale - rect.top;
1538 return FWL_Error::Succeeded; 1538 return FWL_Error::Succeeded;
1539 } 1539 }
1540 1540
1541 CFX_Graphics::TInfo::TInfo() 1541 CFX_Graphics::TInfo::TInfo()
1542 : isAntialiasing(TRUE), 1542 : isAntialiasing(true),
1543 strokeAlignment(FX_STROKEALIGNMENT_Center), 1543 strokeAlignment(FX_STROKEALIGNMENT_Center),
1544 isActOnDash(FALSE), 1544 isActOnDash(false),
1545 strokeColor(nullptr), 1545 strokeColor(nullptr),
1546 fillColor(nullptr), 1546 fillColor(nullptr),
1547 font(nullptr), 1547 font(nullptr),
1548 fontSize(40.0), 1548 fontSize(40.0),
1549 fontHScale(1.0), 1549 fontHScale(1.0),
1550 fontSpacing(0.0) {} 1550 fontSpacing(0.0) {}
1551 1551
1552 CFX_Graphics::TInfo::TInfo(const TInfo& info) 1552 CFX_Graphics::TInfo::TInfo(const TInfo& info)
1553 : graphState(info.graphState), 1553 : graphState(info.graphState),
1554 isAntialiasing(info.isAntialiasing), 1554 isAntialiasing(info.isAntialiasing),
(...skipping 14 matching lines...) Expand all
1569 CTM = other.CTM; 1569 CTM = other.CTM;
1570 isActOnDash = other.isActOnDash; 1570 isActOnDash = other.isActOnDash;
1571 strokeColor = other.strokeColor; 1571 strokeColor = other.strokeColor;
1572 fillColor = other.fillColor; 1572 fillColor = other.fillColor;
1573 font = other.font; 1573 font = other.font;
1574 fontSize = other.fontSize; 1574 fontSize = other.fontSize;
1575 fontHScale = other.fontHScale; 1575 fontHScale = other.fontHScale;
1576 fontSpacing = other.fontSpacing; 1576 fontSpacing = other.fontSpacing;
1577 return *this; 1577 return *this;
1578 } 1578 }
OLDNEW
« no previous file with comments | « xfa/fxgraphics/cfx_graphics.h ('k') | xfa/fxgraphics/cfx_path.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698