| 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 "xfa/fxgraphics/include/cfx_graphics.h" | 7 #include "xfa/fxgraphics/include/cfx_graphics.h" |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 }}, | 563 }}, |
| 564 }; | 564 }; |
| 565 | 565 |
| 566 } // namespace | 566 } // namespace |
| 567 | 567 |
| 568 CFX_Graphics::CFX_Graphics() | 568 CFX_Graphics::CFX_Graphics() |
| 569 : m_type(FX_CONTEXT_None), | 569 : m_type(FX_CONTEXT_None), |
| 570 m_renderDevice(nullptr), | 570 m_renderDevice(nullptr), |
| 571 m_aggGraphics(nullptr) {} | 571 m_aggGraphics(nullptr) {} |
| 572 | 572 |
| 573 FX_ERR CFX_Graphics::Create(CFX_RenderDevice* renderDevice, | 573 FWL_Error CFX_Graphics::Create(CFX_RenderDevice* renderDevice, |
| 574 FX_BOOL isAntialiasing) { | 574 FX_BOOL isAntialiasing) { |
| 575 if (!renderDevice) | 575 if (!renderDevice) |
| 576 return FX_ERR_Parameter_Invalid; | 576 return FWL_Error::ParameterInvalid; |
| 577 if (m_type != FX_CONTEXT_None) | 577 if (m_type != FX_CONTEXT_None) |
| 578 return FX_ERR_Property_Invalid; | 578 return FWL_Error::PropertyInvalid; |
| 579 | 579 |
| 580 m_type = FX_CONTEXT_Device; | 580 m_type = FX_CONTEXT_Device; |
| 581 m_info.isAntialiasing = isAntialiasing; | 581 m_info.isAntialiasing = isAntialiasing; |
| 582 m_renderDevice = renderDevice; | 582 m_renderDevice = renderDevice; |
| 583 if (m_renderDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP) | 583 if (m_renderDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP) |
| 584 return FX_ERR_Succeeded; | 584 return FWL_Error::Succeeded; |
| 585 return FX_ERR_Indefinite; | 585 return FWL_Error::Indefinite; |
| 586 } | 586 } |
| 587 | 587 |
| 588 FX_ERR CFX_Graphics::Create(int32_t width, | 588 FWL_Error CFX_Graphics::Create(int32_t width, |
| 589 int32_t height, | 589 int32_t height, |
| 590 FXDIB_Format format, | 590 FXDIB_Format format, |
| 591 FX_BOOL isNative, | 591 FX_BOOL isNative, |
| 592 FX_BOOL isAntialiasing) { | 592 FX_BOOL isAntialiasing) { |
| 593 if (m_type != FX_CONTEXT_None) | 593 if (m_type != FX_CONTEXT_None) |
| 594 return FX_ERR_Property_Invalid; | 594 return FWL_Error::PropertyInvalid; |
| 595 | 595 |
| 596 m_type = FX_CONTEXT_Device; | 596 m_type = FX_CONTEXT_Device; |
| 597 m_info.isAntialiasing = isAntialiasing; | 597 m_info.isAntialiasing = isAntialiasing; |
| 598 m_aggGraphics = new CAGG_Graphics; | 598 m_aggGraphics = new CAGG_Graphics; |
| 599 return m_aggGraphics->Create(this, width, height, format); | 599 return m_aggGraphics->Create(this, width, height, format); |
| 600 } | 600 } |
| 601 | 601 |
| 602 CFX_Graphics::~CFX_Graphics() { | 602 CFX_Graphics::~CFX_Graphics() { |
| 603 delete m_aggGraphics; | 603 delete m_aggGraphics; |
| 604 } | 604 } |
| 605 | 605 |
| 606 FX_ERR CFX_Graphics::GetDeviceCap(const int32_t capID, FX_DeviceCap& capVal) { | 606 FWL_Error CFX_Graphics::GetDeviceCap(const int32_t capID, |
| 607 FX_DeviceCap& capVal) { |
| 607 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 608 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 608 capVal = m_renderDevice->GetDeviceCaps(capID); | 609 capVal = m_renderDevice->GetDeviceCaps(capID); |
| 609 return FX_ERR_Succeeded; | 610 return FWL_Error::Succeeded; |
| 610 } | 611 } |
| 611 return FX_ERR_Property_Invalid; | 612 return FWL_Error::PropertyInvalid; |
| 612 } | 613 } |
| 613 | 614 |
| 614 FX_ERR CFX_Graphics::IsPrinterDevice(FX_BOOL& isPrinter) { | 615 FWL_Error CFX_Graphics::IsPrinterDevice(FX_BOOL& isPrinter) { |
| 615 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 616 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 616 isPrinter = m_renderDevice->GetDeviceClass() == FXDC_PRINTER; | 617 isPrinter = m_renderDevice->GetDeviceClass() == FXDC_PRINTER; |
| 617 return FX_ERR_Succeeded; | 618 return FWL_Error::Succeeded; |
| 618 } | 619 } |
| 619 return FX_ERR_Property_Invalid; | 620 return FWL_Error::PropertyInvalid; |
| 620 } | 621 } |
| 621 | 622 |
| 622 FX_ERR CFX_Graphics::EnableAntialiasing(FX_BOOL isAntialiasing) { | 623 FWL_Error CFX_Graphics::EnableAntialiasing(FX_BOOL isAntialiasing) { |
| 623 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 624 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 624 m_info.isAntialiasing = isAntialiasing; | 625 m_info.isAntialiasing = isAntialiasing; |
| 625 return FX_ERR_Succeeded; | 626 return FWL_Error::Succeeded; |
| 626 } | 627 } |
| 627 return FX_ERR_Property_Invalid; | 628 return FWL_Error::PropertyInvalid; |
| 628 } | 629 } |
| 629 | 630 |
| 630 FX_ERR CFX_Graphics::SaveGraphState() { | 631 FWL_Error CFX_Graphics::SaveGraphState() { |
| 631 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 632 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 632 m_renderDevice->SaveState(); | 633 m_renderDevice->SaveState(); |
| 633 m_infoStack.Add(new TInfo(m_info)); | 634 m_infoStack.Add(new TInfo(m_info)); |
| 634 return FX_ERR_Succeeded; | 635 return FWL_Error::Succeeded; |
| 635 } | 636 } |
| 636 return FX_ERR_Property_Invalid; | 637 return FWL_Error::PropertyInvalid; |
| 637 } | 638 } |
| 638 | 639 |
| 639 FX_ERR CFX_Graphics::RestoreGraphState() { | 640 FWL_Error CFX_Graphics::RestoreGraphState() { |
| 640 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 641 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 641 m_renderDevice->RestoreState(); | 642 m_renderDevice->RestoreState(); |
| 642 int32_t size = m_infoStack.GetSize(); | 643 int32_t size = m_infoStack.GetSize(); |
| 643 if (size <= 0) { | 644 if (size <= 0) { |
| 644 return FX_ERR_Intermediate_Value_Invalid; | 645 return FWL_Error::IntermediateValueInvalid; |
| 645 } | 646 } |
| 646 int32_t topIndex = size - 1; | 647 int32_t topIndex = size - 1; |
| 647 std::unique_ptr<TInfo> info(m_infoStack.GetAt(topIndex)); | 648 std::unique_ptr<TInfo> info(m_infoStack.GetAt(topIndex)); |
| 648 if (!info) | 649 if (!info) |
| 649 return FX_ERR_Intermediate_Value_Invalid; | 650 return FWL_Error::IntermediateValueInvalid; |
| 650 m_info = *info; | 651 m_info = *info; |
| 651 m_infoStack.RemoveAt(topIndex); | 652 m_infoStack.RemoveAt(topIndex); |
| 652 return FX_ERR_Succeeded; | 653 return FWL_Error::Succeeded; |
| 653 } | 654 } |
| 654 return FX_ERR_Property_Invalid; | 655 return FWL_Error::PropertyInvalid; |
| 655 } | 656 } |
| 656 | 657 |
| 657 FX_ERR CFX_Graphics::GetLineCap(CFX_GraphStateData::LineCap& lineCap) const { | 658 FWL_Error CFX_Graphics::GetLineCap(CFX_GraphStateData::LineCap& lineCap) const { |
| 658 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 659 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 659 lineCap = m_info.graphState.m_LineCap; | 660 lineCap = m_info.graphState.m_LineCap; |
| 660 return FX_ERR_Succeeded; | 661 return FWL_Error::Succeeded; |
| 661 } | 662 } |
| 662 return FX_ERR_Property_Invalid; | 663 return FWL_Error::PropertyInvalid; |
| 663 } | 664 } |
| 664 | 665 |
| 665 FX_ERR CFX_Graphics::SetLineCap(CFX_GraphStateData::LineCap lineCap) { | 666 FWL_Error CFX_Graphics::SetLineCap(CFX_GraphStateData::LineCap lineCap) { |
| 666 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 667 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 667 m_info.graphState.m_LineCap = lineCap; | 668 m_info.graphState.m_LineCap = lineCap; |
| 668 return FX_ERR_Succeeded; | 669 return FWL_Error::Succeeded; |
| 669 } | 670 } |
| 670 return FX_ERR_Property_Invalid; | 671 return FWL_Error::PropertyInvalid; |
| 671 } | 672 } |
| 672 | 673 |
| 673 FX_ERR CFX_Graphics::GetDashCount(int32_t& dashCount) const { | 674 FWL_Error CFX_Graphics::GetDashCount(int32_t& dashCount) const { |
| 674 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 675 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 675 dashCount = m_info.graphState.m_DashCount; | 676 dashCount = m_info.graphState.m_DashCount; |
| 676 return FX_ERR_Succeeded; | 677 return FWL_Error::Succeeded; |
| 677 } | 678 } |
| 678 return FX_ERR_Property_Invalid; | 679 return FWL_Error::PropertyInvalid; |
| 679 } | 680 } |
| 680 | 681 |
| 681 FX_ERR CFX_Graphics::GetLineDash(FX_FLOAT& dashPhase, | 682 FWL_Error CFX_Graphics::GetLineDash(FX_FLOAT& dashPhase, |
| 682 FX_FLOAT* dashArray) const { | 683 FX_FLOAT* dashArray) const { |
| 683 if (!dashArray) | 684 if (!dashArray) |
| 684 return FX_ERR_Parameter_Invalid; | 685 return FWL_Error::ParameterInvalid; |
| 685 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 686 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 686 dashPhase = m_info.graphState.m_DashPhase; | 687 dashPhase = m_info.graphState.m_DashPhase; |
| 687 FXSYS_memcpy(dashArray, m_info.graphState.m_DashArray, | 688 FXSYS_memcpy(dashArray, m_info.graphState.m_DashArray, |
| 688 m_info.graphState.m_DashCount * sizeof(FX_FLOAT)); | 689 m_info.graphState.m_DashCount * sizeof(FX_FLOAT)); |
| 689 return FX_ERR_Succeeded; | 690 return FWL_Error::Succeeded; |
| 690 } | 691 } |
| 691 return FX_ERR_Property_Invalid; | 692 return FWL_Error::PropertyInvalid; |
| 692 } | 693 } |
| 693 | 694 |
| 694 FX_ERR CFX_Graphics::SetLineDash(FX_FLOAT dashPhase, | 695 FWL_Error CFX_Graphics::SetLineDash(FX_FLOAT dashPhase, |
| 695 FX_FLOAT* dashArray, | 696 FX_FLOAT* dashArray, |
| 696 int32_t dashCount) { | 697 int32_t dashCount) { |
| 697 if (dashCount > 0 && !dashArray) | 698 if (dashCount > 0 && !dashArray) |
| 698 return FX_ERR_Parameter_Invalid; | 699 return FWL_Error::ParameterInvalid; |
| 699 | 700 |
| 700 dashCount = dashCount < 0 ? 0 : dashCount; | 701 dashCount = dashCount < 0 ? 0 : dashCount; |
| 701 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 702 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 702 FX_FLOAT scale = 1.0; | 703 FX_FLOAT scale = 1.0; |
| 703 if (m_info.isActOnDash) { | 704 if (m_info.isActOnDash) { |
| 704 scale = m_info.graphState.m_LineWidth; | 705 scale = m_info.graphState.m_LineWidth; |
| 705 } | 706 } |
| 706 m_info.graphState.m_DashPhase = dashPhase; | 707 m_info.graphState.m_DashPhase = dashPhase; |
| 707 m_info.graphState.SetDashCount(dashCount); | 708 m_info.graphState.SetDashCount(dashCount); |
| 708 for (int32_t i = 0; i < dashCount; i++) { | 709 for (int32_t i = 0; i < dashCount; i++) { |
| 709 m_info.graphState.m_DashArray[i] = dashArray[i] * scale; | 710 m_info.graphState.m_DashArray[i] = dashArray[i] * scale; |
| 710 } | 711 } |
| 711 return FX_ERR_Succeeded; | 712 return FWL_Error::Succeeded; |
| 712 } | 713 } |
| 713 return FX_ERR_Property_Invalid; | 714 return FWL_Error::PropertyInvalid; |
| 714 } | 715 } |
| 715 | 716 |
| 716 FX_ERR CFX_Graphics::SetLineDash(FX_DashStyle dashStyle) { | 717 FWL_Error CFX_Graphics::SetLineDash(FX_DashStyle dashStyle) { |
| 717 if (m_type == FX_CONTEXT_Device && m_renderDevice) | 718 if (m_type == FX_CONTEXT_Device && m_renderDevice) |
| 718 return RenderDeviceSetLineDash(dashStyle); | 719 return RenderDeviceSetLineDash(dashStyle); |
| 719 return FX_ERR_Property_Invalid; | 720 return FWL_Error::PropertyInvalid; |
| 720 } | 721 } |
| 721 | 722 |
| 722 FX_ERR CFX_Graphics::GetLineJoin(CFX_GraphStateData::LineJoin& lineJoin) const { | 723 FWL_Error CFX_Graphics::GetLineJoin( |
| 724 CFX_GraphStateData::LineJoin& lineJoin) const { |
| 723 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 725 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 724 lineJoin = m_info.graphState.m_LineJoin; | 726 lineJoin = m_info.graphState.m_LineJoin; |
| 725 return FX_ERR_Succeeded; | 727 return FWL_Error::Succeeded; |
| 726 } | 728 } |
| 727 return FX_ERR_Property_Invalid; | 729 return FWL_Error::PropertyInvalid; |
| 728 } | 730 } |
| 729 | 731 |
| 730 FX_ERR CFX_Graphics::SetLineJoin(CFX_GraphStateData::LineJoin lineJoin) { | 732 FWL_Error CFX_Graphics::SetLineJoin(CFX_GraphStateData::LineJoin lineJoin) { |
| 731 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 733 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 732 m_info.graphState.m_LineJoin = lineJoin; | 734 m_info.graphState.m_LineJoin = lineJoin; |
| 733 return FX_ERR_Succeeded; | 735 return FWL_Error::Succeeded; |
| 734 } | 736 } |
| 735 return FX_ERR_Property_Invalid; | 737 return FWL_Error::PropertyInvalid; |
| 736 } | 738 } |
| 737 | 739 |
| 738 FX_ERR CFX_Graphics::GetMiterLimit(FX_FLOAT& miterLimit) const { | 740 FWL_Error CFX_Graphics::GetMiterLimit(FX_FLOAT& miterLimit) const { |
| 739 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 741 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 740 miterLimit = m_info.graphState.m_MiterLimit; | 742 miterLimit = m_info.graphState.m_MiterLimit; |
| 741 return FX_ERR_Succeeded; | 743 return FWL_Error::Succeeded; |
| 742 } | 744 } |
| 743 return FX_ERR_Property_Invalid; | 745 return FWL_Error::PropertyInvalid; |
| 744 } | 746 } |
| 745 | 747 |
| 746 FX_ERR CFX_Graphics::SetMiterLimit(FX_FLOAT miterLimit) { | 748 FWL_Error CFX_Graphics::SetMiterLimit(FX_FLOAT miterLimit) { |
| 747 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 749 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 748 m_info.graphState.m_MiterLimit = miterLimit; | 750 m_info.graphState.m_MiterLimit = miterLimit; |
| 749 return FX_ERR_Succeeded; | 751 return FWL_Error::Succeeded; |
| 750 } | 752 } |
| 751 return FX_ERR_Property_Invalid; | 753 return FWL_Error::PropertyInvalid; |
| 752 } | 754 } |
| 753 | 755 |
| 754 FX_ERR CFX_Graphics::GetLineWidth(FX_FLOAT& lineWidth) const { | 756 FWL_Error CFX_Graphics::GetLineWidth(FX_FLOAT& lineWidth) const { |
| 755 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 757 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 756 lineWidth = m_info.graphState.m_LineWidth; | 758 lineWidth = m_info.graphState.m_LineWidth; |
| 757 return FX_ERR_Succeeded; | 759 return FWL_Error::Succeeded; |
| 758 } | 760 } |
| 759 return FX_ERR_Property_Invalid; | 761 return FWL_Error::PropertyInvalid; |
| 760 } | 762 } |
| 761 | 763 |
| 762 FX_ERR CFX_Graphics::SetLineWidth(FX_FLOAT lineWidth, FX_BOOL isActOnDash) { | 764 FWL_Error CFX_Graphics::SetLineWidth(FX_FLOAT lineWidth, FX_BOOL isActOnDash) { |
| 763 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 765 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 764 m_info.graphState.m_LineWidth = lineWidth; | 766 m_info.graphState.m_LineWidth = lineWidth; |
| 765 m_info.isActOnDash = isActOnDash; | 767 m_info.isActOnDash = isActOnDash; |
| 766 return FX_ERR_Succeeded; | 768 return FWL_Error::Succeeded; |
| 767 } | 769 } |
| 768 return FX_ERR_Property_Invalid; | 770 return FWL_Error::PropertyInvalid; |
| 769 } | 771 } |
| 770 | 772 |
| 771 FX_ERR CFX_Graphics::GetStrokeAlignment( | 773 FWL_Error CFX_Graphics::GetStrokeAlignment( |
| 772 FX_StrokeAlignment& strokeAlignment) const { | 774 FX_StrokeAlignment& strokeAlignment) const { |
| 773 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 775 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 774 strokeAlignment = m_info.strokeAlignment; | 776 strokeAlignment = m_info.strokeAlignment; |
| 775 return FX_ERR_Succeeded; | 777 return FWL_Error::Succeeded; |
| 776 } | 778 } |
| 777 return FX_ERR_Property_Invalid; | 779 return FWL_Error::PropertyInvalid; |
| 778 } | 780 } |
| 779 | 781 |
| 780 FX_ERR CFX_Graphics::SetStrokeAlignment(FX_StrokeAlignment strokeAlignment) { | 782 FWL_Error CFX_Graphics::SetStrokeAlignment(FX_StrokeAlignment strokeAlignment) { |
| 781 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 783 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 782 m_info.strokeAlignment = strokeAlignment; | 784 m_info.strokeAlignment = strokeAlignment; |
| 783 return FX_ERR_Succeeded; | 785 return FWL_Error::Succeeded; |
| 784 } | 786 } |
| 785 return FX_ERR_Property_Invalid; | 787 return FWL_Error::PropertyInvalid; |
| 786 } | 788 } |
| 787 | 789 |
| 788 FX_ERR CFX_Graphics::SetStrokeColor(CFX_Color* color) { | 790 FWL_Error CFX_Graphics::SetStrokeColor(CFX_Color* color) { |
| 789 if (!color) | 791 if (!color) |
| 790 return FX_ERR_Parameter_Invalid; | 792 return FWL_Error::ParameterInvalid; |
| 791 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 793 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 792 m_info.strokeColor = color; | 794 m_info.strokeColor = color; |
| 793 return FX_ERR_Succeeded; | 795 return FWL_Error::Succeeded; |
| 794 } | 796 } |
| 795 return FX_ERR_Property_Invalid; | 797 return FWL_Error::PropertyInvalid; |
| 796 } | 798 } |
| 797 | 799 |
| 798 FX_ERR CFX_Graphics::SetFillColor(CFX_Color* color) { | 800 FWL_Error CFX_Graphics::SetFillColor(CFX_Color* color) { |
| 799 if (!color) | 801 if (!color) |
| 800 return FX_ERR_Parameter_Invalid; | 802 return FWL_Error::ParameterInvalid; |
| 801 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 803 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 802 m_info.fillColor = color; | 804 m_info.fillColor = color; |
| 803 return FX_ERR_Succeeded; | 805 return FWL_Error::Succeeded; |
| 804 } | 806 } |
| 805 return FX_ERR_Property_Invalid; | 807 return FWL_Error::PropertyInvalid; |
| 806 } | 808 } |
| 807 | 809 |
| 808 FX_ERR CFX_Graphics::StrokePath(CFX_Path* path, CFX_Matrix* matrix) { | 810 FWL_Error CFX_Graphics::StrokePath(CFX_Path* path, CFX_Matrix* matrix) { |
| 809 if (!path) | 811 if (!path) |
| 810 return FX_ERR_Parameter_Invalid; | 812 return FWL_Error::ParameterInvalid; |
| 811 if (m_type == FX_CONTEXT_Device && m_renderDevice) | 813 if (m_type == FX_CONTEXT_Device && m_renderDevice) |
| 812 return RenderDeviceStrokePath(path, matrix); | 814 return RenderDeviceStrokePath(path, matrix); |
| 813 return FX_ERR_Property_Invalid; | 815 return FWL_Error::PropertyInvalid; |
| 814 } | 816 } |
| 815 | 817 |
| 816 FX_ERR CFX_Graphics::FillPath(CFX_Path* path, | 818 FWL_Error CFX_Graphics::FillPath(CFX_Path* path, |
| 817 FX_FillMode fillMode, | 819 FX_FillMode fillMode, |
| 818 CFX_Matrix* matrix) { | 820 CFX_Matrix* matrix) { |
| 819 if (!path) | 821 if (!path) |
| 820 return FX_ERR_Parameter_Invalid; | 822 return FWL_Error::ParameterInvalid; |
| 821 if (m_type == FX_CONTEXT_Device && m_renderDevice) | 823 if (m_type == FX_CONTEXT_Device && m_renderDevice) |
| 822 return RenderDeviceFillPath(path, fillMode, matrix); | 824 return RenderDeviceFillPath(path, fillMode, matrix); |
| 823 return FX_ERR_Property_Invalid; | 825 return FWL_Error::PropertyInvalid; |
| 824 } | 826 } |
| 825 | 827 |
| 826 FX_ERR CFX_Graphics::ClipPath(CFX_Path* path, | 828 FWL_Error CFX_Graphics::ClipPath(CFX_Path* path, |
| 827 FX_FillMode fillMode, | 829 FX_FillMode fillMode, |
| 828 CFX_Matrix* matrix) { | 830 CFX_Matrix* matrix) { |
| 829 if (!path) | 831 if (!path) |
| 830 return FX_ERR_Parameter_Invalid; | 832 return FWL_Error::ParameterInvalid; |
| 831 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 833 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 832 FX_BOOL result = m_renderDevice->SetClip_PathFill( | 834 FX_BOOL result = m_renderDevice->SetClip_PathFill( |
| 833 path->GetPathData(), (CFX_Matrix*)matrix, fillMode); | 835 path->GetPathData(), (CFX_Matrix*)matrix, fillMode); |
| 834 if (!result) | 836 if (!result) |
| 835 return FX_ERR_Indefinite; | 837 return FWL_Error::Indefinite; |
| 836 return FX_ERR_Succeeded; | 838 return FWL_Error::Succeeded; |
| 837 } | 839 } |
| 838 return FX_ERR_Property_Invalid; | 840 return FWL_Error::PropertyInvalid; |
| 839 } | 841 } |
| 840 | 842 |
| 841 FX_ERR CFX_Graphics::DrawImage(CFX_DIBSource* source, | 843 FWL_Error CFX_Graphics::DrawImage(CFX_DIBSource* source, |
| 842 const CFX_PointF& point, | 844 const CFX_PointF& point, |
| 843 CFX_Matrix* matrix) { | 845 CFX_Matrix* matrix) { |
| 844 if (!source) | 846 if (!source) |
| 845 return FX_ERR_Parameter_Invalid; | 847 return FWL_Error::ParameterInvalid; |
| 846 if (m_type == FX_CONTEXT_Device && m_renderDevice) | 848 if (m_type == FX_CONTEXT_Device && m_renderDevice) |
| 847 return RenderDeviceDrawImage(source, point, matrix); | 849 return RenderDeviceDrawImage(source, point, matrix); |
| 848 return FX_ERR_Property_Invalid; | 850 return FWL_Error::PropertyInvalid; |
| 849 } | 851 } |
| 850 | 852 |
| 851 FX_ERR CFX_Graphics::StretchImage(CFX_DIBSource* source, | 853 FWL_Error CFX_Graphics::StretchImage(CFX_DIBSource* source, |
| 852 const CFX_RectF& rect, | 854 const CFX_RectF& rect, |
| 853 CFX_Matrix* matrix) { | 855 CFX_Matrix* matrix) { |
| 854 if (!source) | 856 if (!source) |
| 855 return FX_ERR_Parameter_Invalid; | 857 return FWL_Error::ParameterInvalid; |
| 856 if (m_type == FX_CONTEXT_Device && m_renderDevice) | 858 if (m_type == FX_CONTEXT_Device && m_renderDevice) |
| 857 return RenderDeviceStretchImage(source, rect, matrix); | 859 return RenderDeviceStretchImage(source, rect, matrix); |
| 858 return FX_ERR_Property_Invalid; | 860 return FWL_Error::PropertyInvalid; |
| 859 } | 861 } |
| 860 | 862 |
| 861 FX_ERR CFX_Graphics::ConcatMatrix(const CFX_Matrix* matrix) { | 863 FWL_Error CFX_Graphics::ConcatMatrix(const CFX_Matrix* matrix) { |
| 862 if (!matrix) | 864 if (!matrix) |
| 863 return FX_ERR_Parameter_Invalid; | 865 return FWL_Error::ParameterInvalid; |
| 864 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 866 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 865 m_info.CTM.Concat(*matrix); | 867 m_info.CTM.Concat(*matrix); |
| 866 return FX_ERR_Succeeded; | 868 return FWL_Error::Succeeded; |
| 867 } | 869 } |
| 868 return FX_ERR_Property_Invalid; | 870 return FWL_Error::PropertyInvalid; |
| 869 } | 871 } |
| 870 | 872 |
| 871 CFX_Matrix* CFX_Graphics::GetMatrix() { | 873 CFX_Matrix* CFX_Graphics::GetMatrix() { |
| 872 if (m_type == FX_CONTEXT_Device && m_renderDevice) | 874 if (m_type == FX_CONTEXT_Device && m_renderDevice) |
| 873 return &m_info.CTM; | 875 return &m_info.CTM; |
| 874 return nullptr; | 876 return nullptr; |
| 875 } | 877 } |
| 876 | 878 |
| 877 FX_ERR CFX_Graphics::GetClipRect(CFX_RectF& rect) const { | 879 FWL_Error CFX_Graphics::GetClipRect(CFX_RectF& rect) const { |
| 878 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 880 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 879 FX_RECT r = m_renderDevice->GetClipBox(); | 881 FX_RECT r = m_renderDevice->GetClipBox(); |
| 880 rect.left = (FX_FLOAT)r.left; | 882 rect.left = (FX_FLOAT)r.left; |
| 881 rect.top = (FX_FLOAT)r.top; | 883 rect.top = (FX_FLOAT)r.top; |
| 882 rect.width = (FX_FLOAT)r.Width(); | 884 rect.width = (FX_FLOAT)r.Width(); |
| 883 rect.height = (FX_FLOAT)r.Height(); | 885 rect.height = (FX_FLOAT)r.Height(); |
| 884 return FX_ERR_Succeeded; | 886 return FWL_Error::Succeeded; |
| 885 } | 887 } |
| 886 return FX_ERR_Property_Invalid; | 888 return FWL_Error::PropertyInvalid; |
| 887 } | 889 } |
| 888 | 890 |
| 889 FX_ERR CFX_Graphics::SetClipRect(const CFX_RectF& rect) { | 891 FWL_Error CFX_Graphics::SetClipRect(const CFX_RectF& rect) { |
| 890 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 892 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 891 if (!m_renderDevice->SetClip_Rect( | 893 if (!m_renderDevice->SetClip_Rect( |
| 892 FX_RECT(FXSYS_round(rect.left), FXSYS_round(rect.top), | 894 FX_RECT(FXSYS_round(rect.left), FXSYS_round(rect.top), |
| 893 FXSYS_round(rect.right()), FXSYS_round(rect.bottom())))) { | 895 FXSYS_round(rect.right()), FXSYS_round(rect.bottom())))) { |
| 894 return FX_ERR_Method_Not_Supported; | 896 return FWL_Error::MethodNotSupported; |
| 895 } | 897 } |
| 896 return FX_ERR_Succeeded; | 898 return FWL_Error::Succeeded; |
| 897 } | 899 } |
| 898 return FX_ERR_Property_Invalid; | 900 return FWL_Error::PropertyInvalid; |
| 899 } | 901 } |
| 900 | 902 |
| 901 FX_ERR CFX_Graphics::ClearClip() { | 903 FWL_Error CFX_Graphics::ClearClip() { |
| 902 if (m_type == FX_CONTEXT_Device && m_renderDevice) | 904 if (m_type == FX_CONTEXT_Device && m_renderDevice) |
| 903 return FX_ERR_Succeeded; | 905 return FWL_Error::Succeeded; |
| 904 return FX_ERR_Property_Invalid; | 906 return FWL_Error::PropertyInvalid; |
| 905 } | 907 } |
| 906 | 908 |
| 907 FX_ERR CFX_Graphics::SetFont(CFX_Font* font) { | 909 FWL_Error CFX_Graphics::SetFont(CFX_Font* font) { |
| 908 if (!font) | 910 if (!font) |
| 909 return FX_ERR_Parameter_Invalid; | 911 return FWL_Error::ParameterInvalid; |
| 910 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 912 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 911 m_info.font = font; | 913 m_info.font = font; |
| 912 return FX_ERR_Succeeded; | 914 return FWL_Error::Succeeded; |
| 913 } | 915 } |
| 914 return FX_ERR_Property_Invalid; | 916 return FWL_Error::PropertyInvalid; |
| 915 } | 917 } |
| 916 | 918 |
| 917 FX_ERR CFX_Graphics::SetFontSize(const FX_FLOAT size) { | 919 FWL_Error CFX_Graphics::SetFontSize(const FX_FLOAT size) { |
| 918 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 920 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 919 m_info.fontSize = size <= 0 ? 1.0f : size; | 921 m_info.fontSize = size <= 0 ? 1.0f : size; |
| 920 return FX_ERR_Succeeded; | 922 return FWL_Error::Succeeded; |
| 921 } | 923 } |
| 922 return FX_ERR_Property_Invalid; | 924 return FWL_Error::PropertyInvalid; |
| 923 } | 925 } |
| 924 | 926 |
| 925 FX_ERR CFX_Graphics::SetFontHScale(const FX_FLOAT scale) { | 927 FWL_Error CFX_Graphics::SetFontHScale(const FX_FLOAT scale) { |
| 926 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 928 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 927 m_info.fontHScale = scale <= 0 ? 1.0f : scale; | 929 m_info.fontHScale = scale <= 0 ? 1.0f : scale; |
| 928 return FX_ERR_Succeeded; | 930 return FWL_Error::Succeeded; |
| 929 } | 931 } |
| 930 return FX_ERR_Property_Invalid; | 932 return FWL_Error::PropertyInvalid; |
| 931 } | 933 } |
| 932 | 934 |
| 933 FX_ERR CFX_Graphics::SetCharSpacing(const FX_FLOAT spacing) { | 935 FWL_Error CFX_Graphics::SetCharSpacing(const FX_FLOAT spacing) { |
| 934 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 936 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 935 m_info.fontSpacing = spacing < 0 ? 0 : spacing; | 937 m_info.fontSpacing = spacing < 0 ? 0 : spacing; |
| 936 return FX_ERR_Succeeded; | 938 return FWL_Error::Succeeded; |
| 937 } | 939 } |
| 938 return FX_ERR_Property_Invalid; | 940 return FWL_Error::PropertyInvalid; |
| 939 } | 941 } |
| 940 | 942 |
| 941 FX_ERR CFX_Graphics::SetTextDrawingMode(const int32_t mode) { | 943 FWL_Error CFX_Graphics::SetTextDrawingMode(const int32_t mode) { |
| 942 if (m_type == FX_CONTEXT_Device && m_renderDevice) | 944 if (m_type == FX_CONTEXT_Device && m_renderDevice) |
| 943 return FX_ERR_Succeeded; | 945 return FWL_Error::Succeeded; |
| 944 return FX_ERR_Property_Invalid; | 946 return FWL_Error::PropertyInvalid; |
| 945 } | 947 } |
| 946 | 948 |
| 947 FX_ERR CFX_Graphics::ShowText(const CFX_PointF& point, | 949 FWL_Error CFX_Graphics::ShowText(const CFX_PointF& point, |
| 948 const CFX_WideString& text, | 950 const CFX_WideString& text, |
| 949 CFX_Matrix* matrix) { | 951 CFX_Matrix* matrix) { |
| 950 if (m_type == FX_CONTEXT_Device && m_renderDevice) | 952 if (m_type == FX_CONTEXT_Device && m_renderDevice) |
| 951 return RenderDeviceShowText(point, text, matrix); | 953 return RenderDeviceShowText(point, text, matrix); |
| 952 return FX_ERR_Property_Invalid; | 954 return FWL_Error::PropertyInvalid; |
| 953 } | 955 } |
| 954 | 956 |
| 955 FX_ERR CFX_Graphics::CalcTextRect(CFX_RectF& rect, | 957 FWL_Error CFX_Graphics::CalcTextRect(CFX_RectF& rect, |
| 956 const CFX_WideString& text, | 958 const CFX_WideString& text, |
| 957 FX_BOOL isMultiline, | 959 FX_BOOL isMultiline, |
| 958 CFX_Matrix* matrix) { | 960 CFX_Matrix* matrix) { |
| 959 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 961 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 960 int32_t length = text.GetLength(); | 962 int32_t length = text.GetLength(); |
| 961 uint32_t* charCodes = FX_Alloc(uint32_t, length); | 963 uint32_t* charCodes = FX_Alloc(uint32_t, length); |
| 962 FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length); | 964 FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length); |
| 963 CalcTextInfo(text, charCodes, charPos, rect); | 965 CalcTextInfo(text, charCodes, charPos, rect); |
| 964 FX_Free(charPos); | 966 FX_Free(charPos); |
| 965 FX_Free(charCodes); | 967 FX_Free(charCodes); |
| 966 return FX_ERR_Succeeded; | 968 return FWL_Error::Succeeded; |
| 967 } | 969 } |
| 968 return FX_ERR_Property_Invalid; | 970 return FWL_Error::PropertyInvalid; |
| 969 } | 971 } |
| 970 | 972 |
| 971 FX_ERR CFX_Graphics::Transfer(CFX_Graphics* graphics, | 973 FWL_Error CFX_Graphics::Transfer(CFX_Graphics* graphics, |
| 972 const CFX_Matrix* matrix) { | 974 const CFX_Matrix* matrix) { |
| 973 if (!graphics || !graphics->m_renderDevice) | 975 if (!graphics || !graphics->m_renderDevice) |
| 974 return FX_ERR_Parameter_Invalid; | 976 return FWL_Error::ParameterInvalid; |
| 975 CFX_Matrix m; | 977 CFX_Matrix m; |
| 976 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, | 978 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, |
| 977 m_info.CTM.f); | 979 m_info.CTM.f); |
| 978 if (matrix) { | 980 if (matrix) { |
| 979 m.Concat(*matrix); | 981 m.Concat(*matrix); |
| 980 } | 982 } |
| 981 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 983 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 982 CFX_DIBitmap* bitmap = graphics->m_renderDevice->GetBitmap(); | 984 CFX_DIBitmap* bitmap = graphics->m_renderDevice->GetBitmap(); |
| 983 FX_BOOL result = m_renderDevice->SetDIBits(bitmap, 0, 0); | 985 FX_BOOL result = m_renderDevice->SetDIBits(bitmap, 0, 0); |
| 984 if (!result) | 986 if (!result) |
| 985 return FX_ERR_Method_Not_Supported; | 987 return FWL_Error::MethodNotSupported; |
| 986 return FX_ERR_Succeeded; | 988 return FWL_Error::Succeeded; |
| 987 } | 989 } |
| 988 return FX_ERR_Property_Invalid; | 990 return FWL_Error::PropertyInvalid; |
| 989 } | 991 } |
| 990 | 992 |
| 991 FX_ERR CFX_Graphics::Transfer(CFX_Graphics* graphics, | 993 FWL_Error CFX_Graphics::Transfer(CFX_Graphics* graphics, |
| 992 FX_FLOAT srcLeft, | 994 FX_FLOAT srcLeft, |
| 993 FX_FLOAT srcTop, | 995 FX_FLOAT srcTop, |
| 994 const CFX_RectF& dstRect, | 996 const CFX_RectF& dstRect, |
| 995 const CFX_Matrix* matrix) { | 997 const CFX_Matrix* matrix) { |
| 996 if (!graphics || !graphics->m_renderDevice) | 998 if (!graphics || !graphics->m_renderDevice) |
| 997 return FX_ERR_Parameter_Invalid; | 999 return FWL_Error::ParameterInvalid; |
| 998 CFX_Matrix m; | 1000 CFX_Matrix m; |
| 999 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, | 1001 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, |
| 1000 m_info.CTM.f); | 1002 m_info.CTM.f); |
| 1001 if (matrix) { | 1003 if (matrix) { |
| 1002 m.Concat(*matrix); | 1004 m.Concat(*matrix); |
| 1003 } | 1005 } |
| 1004 if (m_type == FX_CONTEXT_Device && m_renderDevice) { | 1006 if (m_type == FX_CONTEXT_Device && m_renderDevice) { |
| 1005 CFX_DIBitmap bmp; | 1007 CFX_DIBitmap bmp; |
| 1006 FX_BOOL result = | 1008 FX_BOOL result = |
| 1007 bmp.Create((int32_t)dstRect.width, (int32_t)dstRect.height, | 1009 bmp.Create((int32_t)dstRect.width, (int32_t)dstRect.height, |
| 1008 graphics->m_renderDevice->GetBitmap()->GetFormat()); | 1010 graphics->m_renderDevice->GetBitmap()->GetFormat()); |
| 1009 if (!result) | 1011 if (!result) |
| 1010 return FX_ERR_Intermediate_Value_Invalid; | 1012 return FWL_Error::IntermediateValueInvalid; |
| 1011 result = graphics->m_renderDevice->GetDIBits(&bmp, (int32_t)srcLeft, | 1013 result = graphics->m_renderDevice->GetDIBits(&bmp, (int32_t)srcLeft, |
| 1012 (int32_t)srcTop); | 1014 (int32_t)srcTop); |
| 1013 if (!result) | 1015 if (!result) |
| 1014 return FX_ERR_Method_Not_Supported; | 1016 return FWL_Error::MethodNotSupported; |
| 1015 result = m_renderDevice->SetDIBits(&bmp, (int32_t)dstRect.left, | 1017 result = m_renderDevice->SetDIBits(&bmp, (int32_t)dstRect.left, |
| 1016 (int32_t)dstRect.top); | 1018 (int32_t)dstRect.top); |
| 1017 if (!result) | 1019 if (!result) |
| 1018 return FX_ERR_Method_Not_Supported; | 1020 return FWL_Error::MethodNotSupported; |
| 1019 return FX_ERR_Succeeded; | 1021 return FWL_Error::Succeeded; |
| 1020 } | 1022 } |
| 1021 return FX_ERR_Property_Invalid; | 1023 return FWL_Error::PropertyInvalid; |
| 1022 } | 1024 } |
| 1023 | 1025 |
| 1024 CFX_RenderDevice* CFX_Graphics::GetRenderDevice() { | 1026 CFX_RenderDevice* CFX_Graphics::GetRenderDevice() { |
| 1025 return m_renderDevice; | 1027 return m_renderDevice; |
| 1026 } | 1028 } |
| 1027 | 1029 |
| 1028 FX_ERR CFX_Graphics::InverseRect(const CFX_RectF& rect) { | 1030 FWL_Error CFX_Graphics::InverseRect(const CFX_RectF& rect) { |
| 1029 if (!m_renderDevice) | 1031 if (!m_renderDevice) |
| 1030 return FX_ERR_Property_Invalid; | 1032 return FWL_Error::PropertyInvalid; |
| 1031 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); | 1033 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); |
| 1032 if (!bitmap) | 1034 if (!bitmap) |
| 1033 return FX_ERR_Property_Invalid; | 1035 return FWL_Error::PropertyInvalid; |
| 1034 CFX_RectF temp(rect); | 1036 CFX_RectF temp(rect); |
| 1035 m_info.CTM.TransformRect(temp); | 1037 m_info.CTM.TransformRect(temp); |
| 1036 CFX_RectF r; | 1038 CFX_RectF r; |
| 1037 r.Set(0, 0, (FX_FLOAT)bitmap->GetWidth(), (FX_FLOAT)bitmap->GetWidth()); | 1039 r.Set(0, 0, (FX_FLOAT)bitmap->GetWidth(), (FX_FLOAT)bitmap->GetWidth()); |
| 1038 r.Intersect(temp); | 1040 r.Intersect(temp); |
| 1039 if (r.IsEmpty()) { | 1041 if (r.IsEmpty()) { |
| 1040 return FX_ERR_Parameter_Invalid; | 1042 return FWL_Error::ParameterInvalid; |
| 1041 } | 1043 } |
| 1042 FX_ARGB* pBuf = | 1044 FX_ARGB* pBuf = |
| 1043 (FX_ARGB*)(bitmap->GetBuffer() + int32_t(r.top) * bitmap->GetPitch()); | 1045 (FX_ARGB*)(bitmap->GetBuffer() + int32_t(r.top) * bitmap->GetPitch()); |
| 1044 int32_t bottom = (int32_t)r.bottom(); | 1046 int32_t bottom = (int32_t)r.bottom(); |
| 1045 int32_t right = (int32_t)r.right(); | 1047 int32_t right = (int32_t)r.right(); |
| 1046 for (int32_t i = (int32_t)r.top; i < bottom; i++) { | 1048 for (int32_t i = (int32_t)r.top; i < bottom; i++) { |
| 1047 FX_ARGB* pLine = pBuf + (int32_t)r.left; | 1049 FX_ARGB* pLine = pBuf + (int32_t)r.left; |
| 1048 for (int32_t j = (int32_t)r.left; j < right; j++) { | 1050 for (int32_t j = (int32_t)r.left; j < right; j++) { |
| 1049 FX_ARGB c = *pLine; | 1051 FX_ARGB c = *pLine; |
| 1050 *pLine++ = (c & 0xFF000000) | (0xFFFFFF - (c & 0x00FFFFFF)); | 1052 *pLine++ = (c & 0xFF000000) | (0xFFFFFF - (c & 0x00FFFFFF)); |
| 1051 } | 1053 } |
| 1052 pBuf = (FX_ARGB*)((uint8_t*)pBuf + bitmap->GetPitch()); | 1054 pBuf = (FX_ARGB*)((uint8_t*)pBuf + bitmap->GetPitch()); |
| 1053 } | 1055 } |
| 1054 return FX_ERR_Succeeded; | 1056 return FWL_Error::Succeeded; |
| 1055 } | 1057 } |
| 1056 | 1058 |
| 1057 FX_ERR CFX_Graphics::XorDIBitmap(const CFX_DIBitmap* srcBitmap, | 1059 FWL_Error CFX_Graphics::XorDIBitmap(const CFX_DIBitmap* srcBitmap, |
| 1058 const CFX_RectF& rect) { | 1060 const CFX_RectF& rect) { |
| 1059 if (!m_renderDevice) | 1061 if (!m_renderDevice) |
| 1060 return FX_ERR_Property_Invalid; | 1062 return FWL_Error::PropertyInvalid; |
| 1061 CFX_DIBitmap* dst = m_renderDevice->GetBitmap(); | 1063 CFX_DIBitmap* dst = m_renderDevice->GetBitmap(); |
| 1062 if (!dst) | 1064 if (!dst) |
| 1063 return FX_ERR_Property_Invalid; | 1065 return FWL_Error::PropertyInvalid; |
| 1064 CFX_RectF temp(rect); | 1066 CFX_RectF temp(rect); |
| 1065 m_info.CTM.TransformRect(temp); | 1067 m_info.CTM.TransformRect(temp); |
| 1066 CFX_RectF r; | 1068 CFX_RectF r; |
| 1067 r.Set(0, 0, (FX_FLOAT)dst->GetWidth(), (FX_FLOAT)dst->GetWidth()); | 1069 r.Set(0, 0, (FX_FLOAT)dst->GetWidth(), (FX_FLOAT)dst->GetWidth()); |
| 1068 r.Intersect(temp); | 1070 r.Intersect(temp); |
| 1069 if (r.IsEmpty()) { | 1071 if (r.IsEmpty()) { |
| 1070 return FX_ERR_Parameter_Invalid; | 1072 return FWL_Error::ParameterInvalid; |
| 1071 } | 1073 } |
| 1072 FX_ARGB* pSrcBuf = (FX_ARGB*)(srcBitmap->GetBuffer() + | 1074 FX_ARGB* pSrcBuf = (FX_ARGB*)(srcBitmap->GetBuffer() + |
| 1073 int32_t(r.top) * srcBitmap->GetPitch()); | 1075 int32_t(r.top) * srcBitmap->GetPitch()); |
| 1074 FX_ARGB* pDstBuf = | 1076 FX_ARGB* pDstBuf = |
| 1075 (FX_ARGB*)(dst->GetBuffer() + int32_t(r.top) * dst->GetPitch()); | 1077 (FX_ARGB*)(dst->GetBuffer() + int32_t(r.top) * dst->GetPitch()); |
| 1076 int32_t bottom = (int32_t)r.bottom(); | 1078 int32_t bottom = (int32_t)r.bottom(); |
| 1077 int32_t right = (int32_t)r.right(); | 1079 int32_t right = (int32_t)r.right(); |
| 1078 for (int32_t i = (int32_t)r.top; i < bottom; i++) { | 1080 for (int32_t i = (int32_t)r.top; i < bottom; i++) { |
| 1079 FX_ARGB* pSrcLine = pSrcBuf + (int32_t)r.left; | 1081 FX_ARGB* pSrcLine = pSrcBuf + (int32_t)r.left; |
| 1080 FX_ARGB* pDstLine = pDstBuf + (int32_t)r.left; | 1082 FX_ARGB* pDstLine = pDstBuf + (int32_t)r.left; |
| 1081 for (int32_t j = (int32_t)r.left; j < right; j++) { | 1083 for (int32_t j = (int32_t)r.left; j < right; j++) { |
| 1082 FX_ARGB c = *pDstLine; | 1084 FX_ARGB c = *pDstLine; |
| 1083 *pDstLine++ = | 1085 *pDstLine++ = |
| 1084 ArgbEncode(FXARGB_A(c), (c & 0xFFFFFF) ^ (*pSrcLine & 0xFFFFFF)); | 1086 ArgbEncode(FXARGB_A(c), (c & 0xFFFFFF) ^ (*pSrcLine & 0xFFFFFF)); |
| 1085 pSrcLine++; | 1087 pSrcLine++; |
| 1086 } | 1088 } |
| 1087 pSrcBuf = (FX_ARGB*)((uint8_t*)pSrcBuf + srcBitmap->GetPitch()); | 1089 pSrcBuf = (FX_ARGB*)((uint8_t*)pSrcBuf + srcBitmap->GetPitch()); |
| 1088 pDstBuf = (FX_ARGB*)((uint8_t*)pDstBuf + dst->GetPitch()); | 1090 pDstBuf = (FX_ARGB*)((uint8_t*)pDstBuf + dst->GetPitch()); |
| 1089 } | 1091 } |
| 1090 return FX_ERR_Succeeded; | 1092 return FWL_Error::Succeeded; |
| 1091 } | 1093 } |
| 1092 | 1094 |
| 1093 FX_ERR CFX_Graphics::EqvDIBitmap(const CFX_DIBitmap* srcBitmap, | 1095 FWL_Error CFX_Graphics::EqvDIBitmap(const CFX_DIBitmap* srcBitmap, |
| 1094 const CFX_RectF& rect) { | 1096 const CFX_RectF& rect) { |
| 1095 if (!m_renderDevice) | 1097 if (!m_renderDevice) |
| 1096 return FX_ERR_Property_Invalid; | 1098 return FWL_Error::PropertyInvalid; |
| 1097 CFX_DIBitmap* dst = m_renderDevice->GetBitmap(); | 1099 CFX_DIBitmap* dst = m_renderDevice->GetBitmap(); |
| 1098 if (!dst) | 1100 if (!dst) |
| 1099 return FX_ERR_Property_Invalid; | 1101 return FWL_Error::PropertyInvalid; |
| 1100 CFX_RectF temp(rect); | 1102 CFX_RectF temp(rect); |
| 1101 m_info.CTM.TransformRect(temp); | 1103 m_info.CTM.TransformRect(temp); |
| 1102 CFX_RectF r; | 1104 CFX_RectF r; |
| 1103 r.Set(0, 0, (FX_FLOAT)dst->GetWidth(), (FX_FLOAT)dst->GetWidth()); | 1105 r.Set(0, 0, (FX_FLOAT)dst->GetWidth(), (FX_FLOAT)dst->GetWidth()); |
| 1104 r.Intersect(temp); | 1106 r.Intersect(temp); |
| 1105 if (r.IsEmpty()) { | 1107 if (r.IsEmpty()) { |
| 1106 return FX_ERR_Parameter_Invalid; | 1108 return FWL_Error::ParameterInvalid; |
| 1107 } | 1109 } |
| 1108 FX_ARGB* pSrcBuf = (FX_ARGB*)(srcBitmap->GetBuffer() + | 1110 FX_ARGB* pSrcBuf = (FX_ARGB*)(srcBitmap->GetBuffer() + |
| 1109 int32_t(r.top) * srcBitmap->GetPitch()); | 1111 int32_t(r.top) * srcBitmap->GetPitch()); |
| 1110 FX_ARGB* pDstBuf = | 1112 FX_ARGB* pDstBuf = |
| 1111 (FX_ARGB*)(dst->GetBuffer() + int32_t(r.top) * dst->GetPitch()); | 1113 (FX_ARGB*)(dst->GetBuffer() + int32_t(r.top) * dst->GetPitch()); |
| 1112 int32_t bottom = (int32_t)r.bottom(); | 1114 int32_t bottom = (int32_t)r.bottom(); |
| 1113 int32_t right = (int32_t)r.right(); | 1115 int32_t right = (int32_t)r.right(); |
| 1114 for (int32_t i = (int32_t)r.top; i < bottom; i++) { | 1116 for (int32_t i = (int32_t)r.top; i < bottom; i++) { |
| 1115 FX_ARGB* pSrcLine = pSrcBuf + (int32_t)r.left; | 1117 FX_ARGB* pSrcLine = pSrcBuf + (int32_t)r.left; |
| 1116 FX_ARGB* pDstLine = pDstBuf + (int32_t)r.left; | 1118 FX_ARGB* pDstLine = pDstBuf + (int32_t)r.left; |
| 1117 for (int32_t j = (int32_t)r.left; j < right; j++) { | 1119 for (int32_t j = (int32_t)r.left; j < right; j++) { |
| 1118 FX_ARGB c = *pDstLine; | 1120 FX_ARGB c = *pDstLine; |
| 1119 *pDstLine++ = | 1121 *pDstLine++ = |
| 1120 ArgbEncode(FXARGB_A(c), ~((c & 0xFFFFFF) ^ (*pSrcLine & 0xFFFFFF))); | 1122 ArgbEncode(FXARGB_A(c), ~((c & 0xFFFFFF) ^ (*pSrcLine & 0xFFFFFF))); |
| 1121 pSrcLine++; | 1123 pSrcLine++; |
| 1122 } | 1124 } |
| 1123 pSrcBuf = (FX_ARGB*)((uint8_t*)pSrcBuf + srcBitmap->GetPitch()); | 1125 pSrcBuf = (FX_ARGB*)((uint8_t*)pSrcBuf + srcBitmap->GetPitch()); |
| 1124 pDstBuf = (FX_ARGB*)((uint8_t*)pDstBuf + dst->GetPitch()); | 1126 pDstBuf = (FX_ARGB*)((uint8_t*)pDstBuf + dst->GetPitch()); |
| 1125 } | 1127 } |
| 1126 return FX_ERR_Succeeded; | 1128 return FWL_Error::Succeeded; |
| 1127 } | 1129 } |
| 1128 | 1130 |
| 1129 FX_ERR CFX_Graphics::RenderDeviceSetLineDash(FX_DashStyle dashStyle) { | 1131 FWL_Error CFX_Graphics::RenderDeviceSetLineDash(FX_DashStyle dashStyle) { |
| 1130 switch (dashStyle) { | 1132 switch (dashStyle) { |
| 1131 case FX_DASHSTYLE_Solid: { | 1133 case FX_DASHSTYLE_Solid: { |
| 1132 m_info.graphState.SetDashCount(0); | 1134 m_info.graphState.SetDashCount(0); |
| 1133 return FX_ERR_Succeeded; | 1135 return FWL_Error::Succeeded; |
| 1134 } | 1136 } |
| 1135 case FX_DASHSTYLE_Dash: { | 1137 case FX_DASHSTYLE_Dash: { |
| 1136 FX_FLOAT dashArray[] = {3, 1}; | 1138 FX_FLOAT dashArray[] = {3, 1}; |
| 1137 SetLineDash(0, dashArray, 2); | 1139 SetLineDash(0, dashArray, 2); |
| 1138 return FX_ERR_Succeeded; | 1140 return FWL_Error::Succeeded; |
| 1139 } | 1141 } |
| 1140 case FX_DASHSTYLE_Dot: { | 1142 case FX_DASHSTYLE_Dot: { |
| 1141 FX_FLOAT dashArray[] = {1, 1}; | 1143 FX_FLOAT dashArray[] = {1, 1}; |
| 1142 SetLineDash(0, dashArray, 2); | 1144 SetLineDash(0, dashArray, 2); |
| 1143 return FX_ERR_Succeeded; | 1145 return FWL_Error::Succeeded; |
| 1144 } | 1146 } |
| 1145 case FX_DASHSTYLE_DashDot: { | 1147 case FX_DASHSTYLE_DashDot: { |
| 1146 FX_FLOAT dashArray[] = {3, 1, 1, 1}; | 1148 FX_FLOAT dashArray[] = {3, 1, 1, 1}; |
| 1147 SetLineDash(0, dashArray, 4); | 1149 SetLineDash(0, dashArray, 4); |
| 1148 return FX_ERR_Succeeded; | 1150 return FWL_Error::Succeeded; |
| 1149 } | 1151 } |
| 1150 case FX_DASHSTYLE_DashDotDot: { | 1152 case FX_DASHSTYLE_DashDotDot: { |
| 1151 FX_FLOAT dashArray[] = {4, 1, 2, 1, 2, 1}; | 1153 FX_FLOAT dashArray[] = {4, 1, 2, 1, 2, 1}; |
| 1152 SetLineDash(0, dashArray, 6); | 1154 SetLineDash(0, dashArray, 6); |
| 1153 return FX_ERR_Succeeded; | 1155 return FWL_Error::Succeeded; |
| 1154 } | 1156 } |
| 1155 default: | 1157 default: |
| 1156 return FX_ERR_Parameter_Invalid; | 1158 return FWL_Error::ParameterInvalid; |
| 1157 } | 1159 } |
| 1158 } | 1160 } |
| 1159 | 1161 |
| 1160 FX_ERR CFX_Graphics::RenderDeviceStrokePath(CFX_Path* path, | 1162 FWL_Error CFX_Graphics::RenderDeviceStrokePath(CFX_Path* path, |
| 1161 CFX_Matrix* matrix) { | 1163 CFX_Matrix* matrix) { |
| 1162 if (!m_info.strokeColor) | 1164 if (!m_info.strokeColor) |
| 1163 return FX_ERR_Property_Invalid; | 1165 return FWL_Error::PropertyInvalid; |
| 1164 CFX_Matrix m; | 1166 CFX_Matrix m; |
| 1165 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, | 1167 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, |
| 1166 m_info.CTM.f); | 1168 m_info.CTM.f); |
| 1167 if (matrix) { | 1169 if (matrix) { |
| 1168 m.Concat(*matrix); | 1170 m.Concat(*matrix); |
| 1169 } | 1171 } |
| 1170 switch (m_info.strokeColor->m_type) { | 1172 switch (m_info.strokeColor->m_type) { |
| 1171 case FX_COLOR_Solid: { | 1173 case FX_COLOR_Solid: { |
| 1172 FX_BOOL result = m_renderDevice->DrawPath( | 1174 FX_BOOL result = m_renderDevice->DrawPath( |
| 1173 path->GetPathData(), (CFX_Matrix*)&m, &m_info.graphState, 0x0, | 1175 path->GetPathData(), (CFX_Matrix*)&m, &m_info.graphState, 0x0, |
| 1174 m_info.strokeColor->m_info.argb, 0); | 1176 m_info.strokeColor->m_info.argb, 0); |
| 1175 if (!result) | 1177 if (!result) |
| 1176 return FX_ERR_Indefinite; | 1178 return FWL_Error::Indefinite; |
| 1177 return FX_ERR_Succeeded; | 1179 return FWL_Error::Succeeded; |
| 1178 } | 1180 } |
| 1179 case FX_COLOR_Pattern: | 1181 case FX_COLOR_Pattern: |
| 1180 return StrokePathWithPattern(path, &m); | 1182 return StrokePathWithPattern(path, &m); |
| 1181 case FX_COLOR_Shading: | 1183 case FX_COLOR_Shading: |
| 1182 return StrokePathWithShading(path, &m); | 1184 return StrokePathWithShading(path, &m); |
| 1183 default: | 1185 default: |
| 1184 return FX_ERR_Property_Invalid; | 1186 return FWL_Error::PropertyInvalid; |
| 1185 } | 1187 } |
| 1186 } | 1188 } |
| 1187 | 1189 |
| 1188 FX_ERR CFX_Graphics::RenderDeviceFillPath(CFX_Path* path, | 1190 FWL_Error CFX_Graphics::RenderDeviceFillPath(CFX_Path* path, |
| 1189 FX_FillMode fillMode, | 1191 FX_FillMode fillMode, |
| 1190 CFX_Matrix* matrix) { | 1192 CFX_Matrix* matrix) { |
| 1191 if (!m_info.fillColor) | 1193 if (!m_info.fillColor) |
| 1192 return FX_ERR_Property_Invalid; | 1194 return FWL_Error::PropertyInvalid; |
| 1193 CFX_Matrix m; | 1195 CFX_Matrix m; |
| 1194 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, | 1196 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, |
| 1195 m_info.CTM.f); | 1197 m_info.CTM.f); |
| 1196 if (matrix) { | 1198 if (matrix) { |
| 1197 m.Concat(*matrix); | 1199 m.Concat(*matrix); |
| 1198 } | 1200 } |
| 1199 switch (m_info.fillColor->m_type) { | 1201 switch (m_info.fillColor->m_type) { |
| 1200 case FX_COLOR_Solid: { | 1202 case FX_COLOR_Solid: { |
| 1201 FX_BOOL result = m_renderDevice->DrawPath( | 1203 FX_BOOL result = m_renderDevice->DrawPath( |
| 1202 path->GetPathData(), (CFX_Matrix*)&m, &m_info.graphState, | 1204 path->GetPathData(), (CFX_Matrix*)&m, &m_info.graphState, |
| 1203 m_info.fillColor->m_info.argb, 0x0, fillMode); | 1205 m_info.fillColor->m_info.argb, 0x0, fillMode); |
| 1204 if (!result) | 1206 if (!result) |
| 1205 return FX_ERR_Indefinite; | 1207 return FWL_Error::Indefinite; |
| 1206 return FX_ERR_Succeeded; | 1208 return FWL_Error::Succeeded; |
| 1207 } | 1209 } |
| 1208 case FX_COLOR_Pattern: | 1210 case FX_COLOR_Pattern: |
| 1209 return FillPathWithPattern(path, fillMode, &m); | 1211 return FillPathWithPattern(path, fillMode, &m); |
| 1210 case FX_COLOR_Shading: | 1212 case FX_COLOR_Shading: |
| 1211 return FillPathWithShading(path, fillMode, &m); | 1213 return FillPathWithShading(path, fillMode, &m); |
| 1212 default: | 1214 default: |
| 1213 return FX_ERR_Property_Invalid; | 1215 return FWL_Error::PropertyInvalid; |
| 1214 } | 1216 } |
| 1215 } | 1217 } |
| 1216 | 1218 |
| 1217 FX_ERR CFX_Graphics::RenderDeviceDrawImage(CFX_DIBSource* source, | 1219 FWL_Error CFX_Graphics::RenderDeviceDrawImage(CFX_DIBSource* source, |
| 1218 const CFX_PointF& point, | 1220 const CFX_PointF& point, |
| 1219 CFX_Matrix* matrix) { | 1221 CFX_Matrix* matrix) { |
| 1220 CFX_Matrix m1; | 1222 CFX_Matrix m1; |
| 1221 m1.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, | 1223 m1.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, |
| 1222 m_info.CTM.f); | 1224 m_info.CTM.f); |
| 1223 if (matrix) { | 1225 if (matrix) { |
| 1224 m1.Concat(*matrix); | 1226 m1.Concat(*matrix); |
| 1225 } | 1227 } |
| 1226 CFX_Matrix m2; | 1228 CFX_Matrix m2; |
| 1227 m2.Set((FX_FLOAT)source->GetWidth(), 0.0, 0.0, (FX_FLOAT)source->GetHeight(), | 1229 m2.Set((FX_FLOAT)source->GetWidth(), 0.0, 0.0, (FX_FLOAT)source->GetHeight(), |
| 1228 point.x, point.y); | 1230 point.x, point.y); |
| 1229 m2.Concat(m1); | 1231 m2.Concat(m1); |
| 1230 int32_t left, top; | 1232 int32_t left, top; |
| 1231 std::unique_ptr<CFX_DIBitmap> bmp1(source->FlipImage(FALSE, TRUE)); | 1233 std::unique_ptr<CFX_DIBitmap> bmp1(source->FlipImage(FALSE, TRUE)); |
| 1232 std::unique_ptr<CFX_DIBitmap> bmp2( | 1234 std::unique_ptr<CFX_DIBitmap> bmp2( |
| 1233 bmp1->TransformTo((CFX_Matrix*)&m2, left, top)); | 1235 bmp1->TransformTo((CFX_Matrix*)&m2, left, top)); |
| 1234 CFX_RectF r; | 1236 CFX_RectF r; |
| 1235 GetClipRect(r); | 1237 GetClipRect(r); |
| 1236 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); | 1238 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); |
| 1237 CFX_DIBitmap bmp; | 1239 CFX_DIBitmap bmp; |
| 1238 if (bmp.Create(bitmap->GetWidth(), bitmap->GetHeight(), FXDIB_Argb) && | 1240 if (bmp.Create(bitmap->GetWidth(), bitmap->GetHeight(), FXDIB_Argb) && |
| 1239 m_renderDevice->GetDIBits(&bmp, 0, 0) && | 1241 m_renderDevice->GetDIBits(&bmp, 0, 0) && |
| 1240 bmp.TransferBitmap(FXSYS_round(r.left), FXSYS_round(r.top), | 1242 bmp.TransferBitmap(FXSYS_round(r.left), FXSYS_round(r.top), |
| 1241 FXSYS_round(r.Width()), FXSYS_round(r.Height()), | 1243 FXSYS_round(r.Width()), FXSYS_round(r.Height()), |
| 1242 bmp2.get(), FXSYS_round(r.left - left), | 1244 bmp2.get(), FXSYS_round(r.left - left), |
| 1243 FXSYS_round(r.top - top)) && | 1245 FXSYS_round(r.top - top)) && |
| 1244 m_renderDevice->SetDIBits(&bmp, 0, 0)) { | 1246 m_renderDevice->SetDIBits(&bmp, 0, 0)) { |
| 1245 return FX_ERR_Succeeded; | 1247 return FWL_Error::Succeeded; |
| 1246 } | 1248 } |
| 1247 return FX_ERR_Indefinite; | 1249 return FWL_Error::Indefinite; |
| 1248 } | 1250 } |
| 1249 | 1251 |
| 1250 FX_ERR CFX_Graphics::RenderDeviceStretchImage(CFX_DIBSource* source, | 1252 FWL_Error CFX_Graphics::RenderDeviceStretchImage(CFX_DIBSource* source, |
| 1251 const CFX_RectF& rect, | 1253 const CFX_RectF& rect, |
| 1252 CFX_Matrix* matrix) { | 1254 CFX_Matrix* matrix) { |
| 1253 CFX_Matrix m1; | 1255 CFX_Matrix m1; |
| 1254 m1.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, | 1256 m1.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, |
| 1255 m_info.CTM.f); | 1257 m_info.CTM.f); |
| 1256 if (matrix) { | 1258 if (matrix) { |
| 1257 m1.Concat(*matrix); | 1259 m1.Concat(*matrix); |
| 1258 } | 1260 } |
| 1259 std::unique_ptr<CFX_DIBitmap> bmp1( | 1261 std::unique_ptr<CFX_DIBitmap> bmp1( |
| 1260 source->StretchTo((int32_t)rect.Width(), (int32_t)rect.Height())); | 1262 source->StretchTo((int32_t)rect.Width(), (int32_t)rect.Height())); |
| 1261 CFX_Matrix m2; | 1263 CFX_Matrix m2; |
| 1262 m2.Set(rect.Width(), 0.0, 0.0, rect.Height(), rect.left, rect.top); | 1264 m2.Set(rect.Width(), 0.0, 0.0, rect.Height(), rect.left, rect.top); |
| 1263 m2.Concat(m1); | 1265 m2.Concat(m1); |
| 1264 int32_t left, top; | 1266 int32_t left, top; |
| 1265 std::unique_ptr<CFX_DIBitmap> bmp2(bmp1->FlipImage(FALSE, TRUE)); | 1267 std::unique_ptr<CFX_DIBitmap> bmp2(bmp1->FlipImage(FALSE, TRUE)); |
| 1266 std::unique_ptr<CFX_DIBitmap> bmp3( | 1268 std::unique_ptr<CFX_DIBitmap> bmp3( |
| 1267 bmp2->TransformTo((CFX_Matrix*)&m2, left, top)); | 1269 bmp2->TransformTo((CFX_Matrix*)&m2, left, top)); |
| 1268 CFX_RectF r; | 1270 CFX_RectF r; |
| 1269 GetClipRect(r); | 1271 GetClipRect(r); |
| 1270 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); | 1272 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); |
| 1271 if (bitmap->CompositeBitmap(FXSYS_round(r.left), FXSYS_round(r.top), | 1273 if (bitmap->CompositeBitmap(FXSYS_round(r.left), FXSYS_round(r.top), |
| 1272 FXSYS_round(r.Width()), FXSYS_round(r.Height()), | 1274 FXSYS_round(r.Width()), FXSYS_round(r.Height()), |
| 1273 bmp3.get(), FXSYS_round(r.left - left), | 1275 bmp3.get(), FXSYS_round(r.left - left), |
| 1274 FXSYS_round(r.top - top))) { | 1276 FXSYS_round(r.top - top))) { |
| 1275 return FX_ERR_Succeeded; | 1277 return FWL_Error::Succeeded; |
| 1276 } | 1278 } |
| 1277 return FX_ERR_Indefinite; | 1279 return FWL_Error::Indefinite; |
| 1278 } | 1280 } |
| 1279 | 1281 |
| 1280 FX_ERR CFX_Graphics::RenderDeviceShowText(const CFX_PointF& point, | 1282 FWL_Error CFX_Graphics::RenderDeviceShowText(const CFX_PointF& point, |
| 1281 const CFX_WideString& text, | 1283 const CFX_WideString& text, |
| 1282 CFX_Matrix* matrix) { | 1284 CFX_Matrix* matrix) { |
| 1283 int32_t length = text.GetLength(); | 1285 int32_t length = text.GetLength(); |
| 1284 uint32_t* charCodes = FX_Alloc(uint32_t, length); | 1286 uint32_t* charCodes = FX_Alloc(uint32_t, length); |
| 1285 FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length); | 1287 FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length); |
| 1286 CFX_RectF rect; | 1288 CFX_RectF rect; |
| 1287 rect.Set(point.x, point.y, 0, 0); | 1289 rect.Set(point.x, point.y, 0, 0); |
| 1288 CalcTextInfo(text, charCodes, charPos, rect); | 1290 CalcTextInfo(text, charCodes, charPos, rect); |
| 1289 CFX_Matrix m; | 1291 CFX_Matrix m; |
| 1290 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, | 1292 m.Set(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d, m_info.CTM.e, |
| 1291 m_info.CTM.f); | 1293 m_info.CTM.f); |
| 1292 m.Translate(0, m_info.fontSize * m_info.fontHScale); | 1294 m.Translate(0, m_info.fontSize * m_info.fontHScale); |
| 1293 if (matrix) { | 1295 if (matrix) { |
| 1294 m.Concat(*matrix); | 1296 m.Concat(*matrix); |
| 1295 } | 1297 } |
| 1296 FX_BOOL result = m_renderDevice->DrawNormalText( | 1298 FX_BOOL result = m_renderDevice->DrawNormalText( |
| 1297 length, charPos, m_info.font, CFX_GEModule::Get()->GetFontCache(), | 1299 length, charPos, m_info.font, CFX_GEModule::Get()->GetFontCache(), |
| 1298 -m_info.fontSize * m_info.fontHScale, (CFX_Matrix*)&m, | 1300 -m_info.fontSize * m_info.fontHScale, (CFX_Matrix*)&m, |
| 1299 m_info.fillColor->m_info.argb, FXTEXT_CLEARTYPE); | 1301 m_info.fillColor->m_info.argb, FXTEXT_CLEARTYPE); |
| 1300 if (!result) | 1302 if (!result) |
| 1301 return FX_ERR_Indefinite; | 1303 return FWL_Error::Indefinite; |
| 1302 FX_Free(charPos); | 1304 FX_Free(charPos); |
| 1303 FX_Free(charCodes); | 1305 FX_Free(charCodes); |
| 1304 return FX_ERR_Succeeded; | 1306 return FWL_Error::Succeeded; |
| 1305 } | 1307 } |
| 1306 | 1308 |
| 1307 FX_ERR CFX_Graphics::StrokePathWithPattern(CFX_Path* path, CFX_Matrix* matrix) { | 1309 FWL_Error CFX_Graphics::StrokePathWithPattern(CFX_Path* path, |
| 1308 return FX_ERR_Method_Not_Supported; | 1310 CFX_Matrix* matrix) { |
| 1311 return FWL_Error::MethodNotSupported; |
| 1309 } | 1312 } |
| 1310 | 1313 |
| 1311 FX_ERR CFX_Graphics::StrokePathWithShading(CFX_Path* path, CFX_Matrix* matrix) { | 1314 FWL_Error CFX_Graphics::StrokePathWithShading(CFX_Path* path, |
| 1312 return FX_ERR_Method_Not_Supported; | 1315 CFX_Matrix* matrix) { |
| 1316 return FWL_Error::MethodNotSupported; |
| 1313 } | 1317 } |
| 1314 | 1318 |
| 1315 FX_ERR CFX_Graphics::FillPathWithPattern(CFX_Path* path, | 1319 FWL_Error CFX_Graphics::FillPathWithPattern(CFX_Path* path, |
| 1316 FX_FillMode fillMode, | 1320 FX_FillMode fillMode, |
| 1317 CFX_Matrix* matrix) { | 1321 CFX_Matrix* matrix) { |
| 1318 CFX_Pattern* pattern = m_info.fillColor->m_info.pattern; | 1322 CFX_Pattern* pattern = m_info.fillColor->m_info.pattern; |
| 1319 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); | 1323 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); |
| 1320 int32_t width = bitmap->GetWidth(); | 1324 int32_t width = bitmap->GetWidth(); |
| 1321 int32_t height = bitmap->GetHeight(); | 1325 int32_t height = bitmap->GetHeight(); |
| 1322 CFX_DIBitmap bmp; | 1326 CFX_DIBitmap bmp; |
| 1323 bmp.Create(width, height, FXDIB_Argb); | 1327 bmp.Create(width, height, FXDIB_Argb); |
| 1324 m_renderDevice->GetDIBits(&bmp, 0, 0); | 1328 m_renderDevice->GetDIBits(&bmp, 0, 0); |
| 1325 | 1329 |
| 1326 FX_HatchStyle hatchStyle = m_info.fillColor->m_info.pattern->m_hatchStyle; | 1330 FX_HatchStyle hatchStyle = m_info.fillColor->m_info.pattern->m_hatchStyle; |
| 1327 if (hatchStyle < FX_HATCHSTYLE_Horizontal || | 1331 if (hatchStyle < FX_HATCHSTYLE_Horizontal || |
| 1328 hatchStyle > FX_HATCHSTYLE_SolidDiamond) { | 1332 hatchStyle > FX_HATCHSTYLE_SolidDiamond) { |
| 1329 return FX_ERR_Intermediate_Value_Invalid; | 1333 return FWL_Error::IntermediateValueInvalid; |
| 1330 } | 1334 } |
| 1331 const FX_HATCHDATA& data = hatchBitmapData[hatchStyle]; | 1335 const FX_HATCHDATA& data = hatchBitmapData[hatchStyle]; |
| 1332 CFX_DIBitmap mask; | 1336 CFX_DIBitmap mask; |
| 1333 mask.Create(data.width, data.height, FXDIB_1bppMask); | 1337 mask.Create(data.width, data.height, FXDIB_1bppMask); |
| 1334 FXSYS_memcpy(mask.GetBuffer(), data.maskBits, mask.GetPitch() * data.height); | 1338 FXSYS_memcpy(mask.GetBuffer(), data.maskBits, mask.GetPitch() * data.height); |
| 1335 CFX_FloatRect rectf = path->GetPathData()->GetBoundingBox(); | 1339 CFX_FloatRect rectf = path->GetPathData()->GetBoundingBox(); |
| 1336 if (matrix) { | 1340 if (matrix) { |
| 1337 rectf.Transform((const CFX_Matrix*)matrix); | 1341 rectf.Transform((const CFX_Matrix*)matrix); |
| 1338 } | 1342 } |
| 1339 FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top), | 1343 FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top), |
| 1340 FXSYS_round(rectf.right), FXSYS_round(rectf.bottom)); | 1344 FXSYS_round(rectf.right), FXSYS_round(rectf.bottom)); |
| 1341 CFX_FxgeDevice device; | 1345 CFX_FxgeDevice device; |
| 1342 device.Attach(&bmp); | 1346 device.Attach(&bmp); |
| 1343 device.FillRect(&rect, m_info.fillColor->m_info.pattern->m_backArgb); | 1347 device.FillRect(&rect, m_info.fillColor->m_info.pattern->m_backArgb); |
| 1344 for (int32_t j = rect.bottom; j < rect.top; j += mask.GetHeight()) { | 1348 for (int32_t j = rect.bottom; j < rect.top; j += mask.GetHeight()) { |
| 1345 for (int32_t i = rect.left; i < rect.right; i += mask.GetWidth()) { | 1349 for (int32_t i = rect.left; i < rect.right; i += mask.GetWidth()) { |
| 1346 device.SetBitMask(&mask, i, j, | 1350 device.SetBitMask(&mask, i, j, |
| 1347 m_info.fillColor->m_info.pattern->m_foreArgb); | 1351 m_info.fillColor->m_info.pattern->m_foreArgb); |
| 1348 } | 1352 } |
| 1349 } | 1353 } |
| 1350 | 1354 |
| 1351 m_renderDevice->SaveState(); | 1355 m_renderDevice->SaveState(); |
| 1352 m_renderDevice->SetClip_PathFill(path->GetPathData(), (CFX_Matrix*)matrix, | 1356 m_renderDevice->SetClip_PathFill(path->GetPathData(), (CFX_Matrix*)matrix, |
| 1353 fillMode); | 1357 fillMode); |
| 1354 SetDIBitsWithMatrix(&bmp, &pattern->m_matrix); | 1358 SetDIBitsWithMatrix(&bmp, &pattern->m_matrix); |
| 1355 m_renderDevice->RestoreState(); | 1359 m_renderDevice->RestoreState(); |
| 1356 return FX_ERR_Succeeded; | 1360 return FWL_Error::Succeeded; |
| 1357 } | 1361 } |
| 1358 | 1362 |
| 1359 FX_ERR CFX_Graphics::FillPathWithShading(CFX_Path* path, | 1363 FWL_Error CFX_Graphics::FillPathWithShading(CFX_Path* path, |
| 1360 FX_FillMode fillMode, | 1364 FX_FillMode fillMode, |
| 1361 CFX_Matrix* matrix) { | 1365 CFX_Matrix* matrix) { |
| 1362 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); | 1366 CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap(); |
| 1363 int32_t width = bitmap->GetWidth(); | 1367 int32_t width = bitmap->GetWidth(); |
| 1364 int32_t height = bitmap->GetHeight(); | 1368 int32_t height = bitmap->GetHeight(); |
| 1365 FX_FLOAT start_x = m_info.fillColor->m_shading->m_beginPoint.x; | 1369 FX_FLOAT start_x = m_info.fillColor->m_shading->m_beginPoint.x; |
| 1366 FX_FLOAT start_y = m_info.fillColor->m_shading->m_beginPoint.y; | 1370 FX_FLOAT start_y = m_info.fillColor->m_shading->m_beginPoint.y; |
| 1367 FX_FLOAT end_x = m_info.fillColor->m_shading->m_endPoint.x; | 1371 FX_FLOAT end_x = m_info.fillColor->m_shading->m_endPoint.x; |
| 1368 FX_FLOAT end_y = m_info.fillColor->m_shading->m_endPoint.y; | 1372 FX_FLOAT end_y = m_info.fillColor->m_shading->m_endPoint.y; |
| 1369 CFX_DIBitmap bmp; | 1373 CFX_DIBitmap bmp; |
| 1370 bmp.Create(width, height, FXDIB_Argb); | 1374 bmp.Create(width, height, FXDIB_Argb); |
| 1371 m_renderDevice->GetDIBits(&bmp, 0, 0); | 1375 m_renderDevice->GetDIBits(&bmp, 0, 0); |
| 1372 int32_t pitch = bmp.GetPitch(); | 1376 int32_t pitch = bmp.GetPitch(); |
| 1373 FX_BOOL result = FALSE; | 1377 bool result = false; |
| 1374 switch (m_info.fillColor->m_shading->m_type) { | 1378 switch (m_info.fillColor->m_shading->m_type) { |
| 1375 case FX_SHADING_Axial: { | 1379 case FX_SHADING_Axial: { |
| 1376 FX_FLOAT x_span = end_x - start_x; | 1380 FX_FLOAT x_span = end_x - start_x; |
| 1377 FX_FLOAT y_span = end_y - start_y; | 1381 FX_FLOAT y_span = end_y - start_y; |
| 1378 FX_FLOAT axis_len_square = (x_span * x_span) + (y_span * y_span); | 1382 FX_FLOAT axis_len_square = (x_span * x_span) + (y_span * y_span); |
| 1379 for (int32_t row = 0; row < height; row++) { | 1383 for (int32_t row = 0; row < height; row++) { |
| 1380 uint32_t* dib_buf = (uint32_t*)(bmp.GetBuffer() + row * pitch); | 1384 uint32_t* dib_buf = (uint32_t*)(bmp.GetBuffer() + row * pitch); |
| 1381 for (int32_t column = 0; column < width; column++) { | 1385 for (int32_t column = 0; column < width; column++) { |
| 1382 FX_FLOAT x = (FX_FLOAT)(column); | 1386 FX_FLOAT x = (FX_FLOAT)(column); |
| 1383 FX_FLOAT y = (FX_FLOAT)(row); | 1387 FX_FLOAT y = (FX_FLOAT)(row); |
| 1384 FX_FLOAT scale = | 1388 FX_FLOAT scale = |
| 1385 (((x - start_x) * x_span) + ((y - start_y) * y_span)) / | 1389 (((x - start_x) * x_span) + ((y - start_y) * y_span)) / |
| 1386 axis_len_square; | 1390 axis_len_square; |
| 1387 if (scale < 0) { | 1391 if (scale < 0) { |
| 1388 if (!m_info.fillColor->m_shading->m_isExtendedBegin) { | 1392 if (!m_info.fillColor->m_shading->m_isExtendedBegin) { |
| 1389 continue; | 1393 continue; |
| 1390 } | 1394 } |
| 1391 scale = 0; | 1395 scale = 0; |
| 1392 } else if (scale > 1.0f) { | 1396 } else if (scale > 1.0f) { |
| 1393 if (!m_info.fillColor->m_shading->m_isExtendedEnd) { | 1397 if (!m_info.fillColor->m_shading->m_isExtendedEnd) { |
| 1394 continue; | 1398 continue; |
| 1395 } | 1399 } |
| 1396 scale = 1.0f; | 1400 scale = 1.0f; |
| 1397 } | 1401 } |
| 1398 int32_t index = (int32_t)(scale * (FX_SHADING_Steps - 1)); | 1402 int32_t index = (int32_t)(scale * (FX_SHADING_Steps - 1)); |
| 1399 dib_buf[column] = m_info.fillColor->m_shading->m_argbArray[index]; | 1403 dib_buf[column] = m_info.fillColor->m_shading->m_argbArray[index]; |
| 1400 } | 1404 } |
| 1401 } | 1405 } |
| 1402 result = TRUE; | 1406 result = true; |
| 1403 break; | 1407 break; |
| 1404 } | 1408 } |
| 1405 case FX_SHADING_Radial: { | 1409 case FX_SHADING_Radial: { |
| 1406 FX_FLOAT start_r = m_info.fillColor->m_shading->m_beginRadius; | 1410 FX_FLOAT start_r = m_info.fillColor->m_shading->m_beginRadius; |
| 1407 FX_FLOAT end_r = m_info.fillColor->m_shading->m_endRadius; | 1411 FX_FLOAT end_r = m_info.fillColor->m_shading->m_endRadius; |
| 1408 FX_FLOAT a = ((start_x - end_x) * (start_x - end_x)) + | 1412 FX_FLOAT a = ((start_x - end_x) * (start_x - end_x)) + |
| 1409 ((start_y - end_y) * (start_y - end_y)) - | 1413 ((start_y - end_y) * (start_y - end_y)) - |
| 1410 ((start_r - end_r) * (start_r - end_r)); | 1414 ((start_r - end_r) * (start_r - end_r)); |
| 1411 for (int32_t row = 0; row < height; row++) { | 1415 for (int32_t row = 0; row < height; row++) { |
| 1412 uint32_t* dib_buf = (uint32_t*)(bmp.GetBuffer() + row * pitch); | 1416 uint32_t* dib_buf = (uint32_t*)(bmp.GetBuffer() + row * pitch); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1453 if (s > 1.0f) { | 1457 if (s > 1.0f) { |
| 1454 if (!m_info.fillColor->m_shading->m_isExtendedEnd) { | 1458 if (!m_info.fillColor->m_shading->m_isExtendedEnd) { |
| 1455 continue; | 1459 continue; |
| 1456 } | 1460 } |
| 1457 s = 1.0f; | 1461 s = 1.0f; |
| 1458 } | 1462 } |
| 1459 int index = (int32_t)(s * (FX_SHADING_Steps - 1)); | 1463 int index = (int32_t)(s * (FX_SHADING_Steps - 1)); |
| 1460 dib_buf[column] = m_info.fillColor->m_shading->m_argbArray[index]; | 1464 dib_buf[column] = m_info.fillColor->m_shading->m_argbArray[index]; |
| 1461 } | 1465 } |
| 1462 } | 1466 } |
| 1463 result = TRUE; | 1467 result = true; |
| 1464 break; | 1468 break; |
| 1465 } | 1469 } |
| 1466 default: { result = FALSE; } | 1470 default: { |
| 1471 result = false; |
| 1472 break; |
| 1473 } |
| 1467 } | 1474 } |
| 1468 if (result) { | 1475 if (result) { |
| 1469 m_renderDevice->SaveState(); | 1476 m_renderDevice->SaveState(); |
| 1470 m_renderDevice->SetClip_PathFill(path->GetPathData(), (CFX_Matrix*)matrix, | 1477 m_renderDevice->SetClip_PathFill(path->GetPathData(), (CFX_Matrix*)matrix, |
| 1471 fillMode); | 1478 fillMode); |
| 1472 SetDIBitsWithMatrix(&bmp, matrix); | 1479 SetDIBitsWithMatrix(&bmp, matrix); |
| 1473 m_renderDevice->RestoreState(); | 1480 m_renderDevice->RestoreState(); |
| 1474 } | 1481 } |
| 1475 return result; | 1482 return result ? FWL_Error::Succeeded : FWL_Error::PropertyInvalid; |
| 1476 } | 1483 } |
| 1477 | 1484 |
| 1478 FX_ERR CFX_Graphics::SetDIBitsWithMatrix(CFX_DIBSource* source, | 1485 FWL_Error CFX_Graphics::SetDIBitsWithMatrix(CFX_DIBSource* source, |
| 1479 CFX_Matrix* matrix) { | 1486 CFX_Matrix* matrix) { |
| 1480 if (matrix->IsIdentity()) { | 1487 if (matrix->IsIdentity()) { |
| 1481 m_renderDevice->SetDIBits(source, 0, 0); | 1488 m_renderDevice->SetDIBits(source, 0, 0); |
| 1482 } else { | 1489 } else { |
| 1483 CFX_Matrix m; | 1490 CFX_Matrix m; |
| 1484 m.Set((FX_FLOAT)source->GetWidth(), 0, 0, (FX_FLOAT)source->GetHeight(), 0, | 1491 m.Set((FX_FLOAT)source->GetWidth(), 0, 0, (FX_FLOAT)source->GetHeight(), 0, |
| 1485 0); | 1492 0); |
| 1486 m.Concat(*matrix); | 1493 m.Concat(*matrix); |
| 1487 int32_t left, top; | 1494 int32_t left, top; |
| 1488 std::unique_ptr<CFX_DIBitmap> bmp1(source->FlipImage(FALSE, TRUE)); | 1495 std::unique_ptr<CFX_DIBitmap> bmp1(source->FlipImage(FALSE, TRUE)); |
| 1489 std::unique_ptr<CFX_DIBitmap> bmp2( | 1496 std::unique_ptr<CFX_DIBitmap> bmp2( |
| 1490 bmp1->TransformTo((CFX_Matrix*)&m, left, top)); | 1497 bmp1->TransformTo((CFX_Matrix*)&m, left, top)); |
| 1491 m_renderDevice->SetDIBits(bmp2.get(), left, top); | 1498 m_renderDevice->SetDIBits(bmp2.get(), left, top); |
| 1492 } | 1499 } |
| 1493 return FX_ERR_Succeeded; | 1500 return FWL_Error::Succeeded; |
| 1494 } | 1501 } |
| 1495 | 1502 |
| 1496 FX_ERR CFX_Graphics::CalcTextInfo(const CFX_WideString& text, | 1503 FWL_Error CFX_Graphics::CalcTextInfo(const CFX_WideString& text, |
| 1497 uint32_t* charCodes, | 1504 uint32_t* charCodes, |
| 1498 FXTEXT_CHARPOS* charPos, | 1505 FXTEXT_CHARPOS* charPos, |
| 1499 CFX_RectF& rect) { | 1506 CFX_RectF& rect) { |
| 1500 std::unique_ptr<CFX_UnicodeEncoding> encoding( | 1507 std::unique_ptr<CFX_UnicodeEncoding> encoding( |
| 1501 new CFX_UnicodeEncoding(m_info.font)); | 1508 new CFX_UnicodeEncoding(m_info.font)); |
| 1502 int32_t length = text.GetLength(); | 1509 int32_t length = text.GetLength(); |
| 1503 FX_FLOAT penX = (FX_FLOAT)rect.left; | 1510 FX_FLOAT penX = (FX_FLOAT)rect.left; |
| 1504 FX_FLOAT penY = (FX_FLOAT)rect.top; | 1511 FX_FLOAT penY = (FX_FLOAT)rect.top; |
| 1505 FX_FLOAT left = (FX_FLOAT)(0); | 1512 FX_FLOAT left = (FX_FLOAT)(0); |
| 1506 FX_FLOAT top = (FX_FLOAT)(0); | 1513 FX_FLOAT top = (FX_FLOAT)(0); |
| 1507 charCodes[0] = text.GetAt(0); | 1514 charCodes[0] = text.GetAt(0); |
| 1508 charPos[0].m_OriginX = penX + left; | 1515 charPos[0].m_OriginX = penX + left; |
| 1509 charPos[0].m_OriginY = penY + top; | 1516 charPos[0].m_OriginY = penY + top; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1528 charPos[i].m_bGlyphAdjust = TRUE; | 1535 charPos[i].m_bGlyphAdjust = TRUE; |
| 1529 charPos[i].m_AdjustMatrix[0] = -1; | 1536 charPos[i].m_AdjustMatrix[0] = -1; |
| 1530 charPos[i].m_AdjustMatrix[1] = 0; | 1537 charPos[i].m_AdjustMatrix[1] = 0; |
| 1531 charPos[i].m_AdjustMatrix[2] = 0; | 1538 charPos[i].m_AdjustMatrix[2] = 0; |
| 1532 charPos[i].m_AdjustMatrix[3] = 1; | 1539 charPos[i].m_AdjustMatrix[3] = 1; |
| 1533 penX += (FX_FLOAT)(charPos[i].m_FontCharWidth) * m_info.fontSize / 1000 + | 1540 penX += (FX_FLOAT)(charPos[i].m_FontCharWidth) * m_info.fontSize / 1000 + |
| 1534 m_info.fontSpacing; | 1541 m_info.fontSpacing; |
| 1535 } | 1542 } |
| 1536 rect.width = (FX_FLOAT)penX - rect.left; | 1543 rect.width = (FX_FLOAT)penX - rect.left; |
| 1537 rect.height = rect.top + m_info.fontSize * m_info.fontHScale - rect.top; | 1544 rect.height = rect.top + m_info.fontSize * m_info.fontHScale - rect.top; |
| 1538 return FX_ERR_Succeeded; | 1545 return FWL_Error::Succeeded; |
| 1539 } | 1546 } |
| 1540 | 1547 |
| 1541 CFX_Graphics::TInfo::TInfo(const TInfo& info) | 1548 CFX_Graphics::TInfo::TInfo(const TInfo& info) |
| 1542 : graphState(info.graphState), | 1549 : graphState(info.graphState), |
| 1543 isAntialiasing(info.isAntialiasing), | 1550 isAntialiasing(info.isAntialiasing), |
| 1544 strokeAlignment(info.strokeAlignment), | 1551 strokeAlignment(info.strokeAlignment), |
| 1545 CTM(info.CTM), | 1552 CTM(info.CTM), |
| 1546 isActOnDash(info.isActOnDash), | 1553 isActOnDash(info.isActOnDash), |
| 1547 strokeColor(info.strokeColor), | 1554 strokeColor(info.strokeColor), |
| 1548 fillColor(info.fillColor), | 1555 fillColor(info.fillColor), |
| 1549 font(info.font), | 1556 font(info.font), |
| 1550 fontSize(info.fontSize), | 1557 fontSize(info.fontSize), |
| 1551 fontHScale(info.fontHScale), | 1558 fontHScale(info.fontHScale), |
| 1552 fontSpacing(info.fontSpacing) {} | 1559 fontSpacing(info.fontSpacing) {} |
| 1553 | 1560 |
| 1554 CFX_Graphics::TInfo& CFX_Graphics::TInfo::operator=(const TInfo& other) { | 1561 CFX_Graphics::TInfo& CFX_Graphics::TInfo::operator=(const TInfo& other) { |
| 1555 graphState.Copy(other.graphState); | 1562 graphState.Copy(other.graphState); |
| 1556 isAntialiasing = other.isAntialiasing; | 1563 isAntialiasing = other.isAntialiasing; |
| 1557 strokeAlignment = other.strokeAlignment; | 1564 strokeAlignment = other.strokeAlignment; |
| 1558 CTM = other.CTM; | 1565 CTM = other.CTM; |
| 1559 isActOnDash = other.isActOnDash; | 1566 isActOnDash = other.isActOnDash; |
| 1560 strokeColor = other.strokeColor; | 1567 strokeColor = other.strokeColor; |
| 1561 fillColor = other.fillColor; | 1568 fillColor = other.fillColor; |
| 1562 font = other.font; | 1569 font = other.font; |
| 1563 fontSize = other.fontSize; | 1570 fontSize = other.fontSize; |
| 1564 fontHScale = other.fontHScale; | 1571 fontHScale = other.fontHScale; |
| 1565 fontSpacing = other.fontSpacing; | 1572 fontSpacing = other.fontSpacing; |
| 1566 return *this; | 1573 return *this; |
| 1567 } | 1574 } |
| OLD | NEW |