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 |