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/fde/tto/fde_textout.h" | 7 #include "xfa/fde/tto/fde_textout.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 22 matching lines...) Expand all Loading... | |
33 m_TxtColor(0xFF000000), | 33 m_TxtColor(0xFF000000), |
34 m_dwStyles(0), | 34 m_dwStyles(0), |
35 m_dwTxtBkStyles(0), | 35 m_dwTxtBkStyles(0), |
36 m_bElliChanged(FALSE), | 36 m_bElliChanged(FALSE), |
37 m_iEllipsisWidth(0), | 37 m_iEllipsisWidth(0), |
38 m_ttoLines(5), | 38 m_ttoLines(5), |
39 m_iCurLine(0), | 39 m_iCurLine(0), |
40 m_iCurPiece(0), | 40 m_iCurPiece(0), |
41 m_iTotalLines(0), | 41 m_iTotalLines(0), |
42 m_pCharPos(NULL), | 42 m_pCharPos(NULL), |
43 m_iCharPosSize(0), | 43 m_iCharPosSize(0) { |
44 m_pRenderDevice(NULL) { | |
45 m_pTxtBreak = new CFX_TxtBreak(FX_TXTBREAKPOLICY_None); | 44 m_pTxtBreak = new CFX_TxtBreak(FX_TXTBREAKPOLICY_None); |
46 m_Matrix.SetIdentity(); | 45 m_Matrix.SetIdentity(); |
47 m_rtClip.Reset(); | 46 m_rtClip.Reset(); |
48 m_rtLogicClip.Reset(); | 47 m_rtLogicClip.Reset(); |
49 } | 48 } |
50 CFDE_TextOut::~CFDE_TextOut() { | 49 CFDE_TextOut::~CFDE_TextOut() { |
51 if (m_pTxtBreak) { | 50 if (m_pTxtBreak) { |
52 m_pTxtBreak->Release(); | 51 m_pTxtBreak->Release(); |
53 } | 52 } |
54 FX_Free(m_pCharWidths); | 53 FX_Free(m_pCharWidths); |
55 FX_Free(m_pEllCharWidths); | 54 FX_Free(m_pEllCharWidths); |
56 if (m_pRenderDevice) { | |
57 m_pRenderDevice->Release(); | |
58 } | |
59 FX_Free(m_pCharPos); | 55 FX_Free(m_pCharPos); |
60 m_ttoLines.RemoveAll(); | 56 m_ttoLines.RemoveAll(); |
61 } | 57 } |
62 void CFDE_TextOut::SetFont(IFX_Font* pFont) { | 58 void CFDE_TextOut::SetFont(IFX_Font* pFont) { |
63 ASSERT(pFont); | 59 ASSERT(pFont); |
64 m_pFont = pFont; | 60 m_pFont = pFont; |
65 m_pTxtBreak->SetFont(pFont); | 61 m_pTxtBreak->SetFont(pFont); |
66 } | 62 } |
67 void CFDE_TextOut::SetFontSize(FX_FLOAT fFontSize) { | 63 void CFDE_TextOut::SetFontSize(FX_FLOAT fFontSize) { |
68 ASSERT(fFontSize > 0); | 64 ASSERT(fFontSize > 0); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
127 } | 123 } |
128 m_pTxtBreak->SetAlignment(m_iTxtBkAlignment); | 124 m_pTxtBreak->SetAlignment(m_iTxtBkAlignment); |
129 } | 125 } |
130 void CFDE_TextOut::SetLineSpace(FX_FLOAT fLineSpace) { | 126 void CFDE_TextOut::SetLineSpace(FX_FLOAT fLineSpace) { |
131 ASSERT(fLineSpace > 1.0f); | 127 ASSERT(fLineSpace > 1.0f); |
132 m_fLineSpace = fLineSpace; | 128 m_fLineSpace = fLineSpace; |
133 } | 129 } |
134 void CFDE_TextOut::SetDIBitmap(CFX_DIBitmap* pDIB) { | 130 void CFDE_TextOut::SetDIBitmap(CFX_DIBitmap* pDIB) { |
135 ASSERT(pDIB); | 131 ASSERT(pDIB); |
136 | 132 |
137 if (m_pRenderDevice) | 133 m_pRenderDevice.reset(); |
138 m_pRenderDevice->Release(); | |
139 | |
140 CFX_FxgeDevice* device = new CFX_FxgeDevice; | 134 CFX_FxgeDevice* device = new CFX_FxgeDevice; |
141 device->Attach(pDIB, 0, FALSE); | 135 device->Attach(pDIB, 0, FALSE); |
142 m_pRenderDevice = new CFDE_RenderDevice(device, FALSE); | 136 m_pRenderDevice.reset(new CFDE_RenderDevice(device, FALSE)); |
143 } | 137 } |
144 | 138 |
145 void CFDE_TextOut::SetRenderDevice(CFX_RenderDevice* pDevice) { | 139 void CFDE_TextOut::SetRenderDevice(CFX_RenderDevice* pDevice) { |
146 ASSERT(pDevice); | 140 ASSERT(pDevice); |
147 | 141 m_pRenderDevice.reset(new CFDE_RenderDevice(pDevice, FALSE)); |
148 if (m_pRenderDevice) | |
149 m_pRenderDevice->Release(); | |
150 | |
151 m_pRenderDevice = new CFDE_RenderDevice(pDevice, FALSE); | |
152 } | 142 } |
153 | 143 |
154 void CFDE_TextOut::SetClipRect(const CFX_Rect& rtClip) { | 144 void CFDE_TextOut::SetClipRect(const CFX_Rect& rtClip) { |
155 m_rtClip.Set((FX_FLOAT)rtClip.left, (FX_FLOAT)rtClip.top, | 145 m_rtClip.Set((FX_FLOAT)rtClip.left, (FX_FLOAT)rtClip.top, |
156 (FX_FLOAT)rtClip.Width(), (FX_FLOAT)rtClip.Height()); | 146 (FX_FLOAT)rtClip.Width(), (FX_FLOAT)rtClip.Height()); |
157 } | 147 } |
158 void CFDE_TextOut::SetClipRect(const CFX_RectF& rtClip) { | 148 void CFDE_TextOut::SetClipRect(const CFX_RectF& rtClip) { |
159 m_rtClip = rtClip; | 149 m_rtClip = rtClip; |
160 } | 150 } |
161 void CFDE_TextOut::SetLogicClipRect(const CFX_RectF& rtClip) { | 151 void CFDE_TextOut::SetLogicClipRect(const CFX_RectF& rtClip) { |
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
773 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(j); | 763 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(j); |
774 if (bVertical) { | 764 if (bVertical) { |
775 pPiece->rtPiece.left += fInc; | 765 pPiece->rtPiece.left += fInc; |
776 } else { | 766 } else { |
777 pPiece->rtPiece.top += fInc; | 767 pPiece->rtPiece.top += fInc; |
778 } | 768 } |
779 } | 769 } |
780 } | 770 } |
781 } | 771 } |
782 void CFDE_TextOut::OnDraw(const CFX_RectF& rtClip) { | 772 void CFDE_TextOut::OnDraw(const CFX_RectF& rtClip) { |
783 if (m_pRenderDevice == NULL) { | 773 if (!m_pRenderDevice) |
784 return; | 774 return; |
785 } | 775 |
786 int32_t iLines = m_ttoLines.GetSize(); | 776 int32_t iLines = m_ttoLines.GetSize(); |
787 if (iLines < 1) { | 777 if (iLines < 1) |
788 return; | 778 return; |
789 } | 779 |
790 CFDE_Brush* pBrush = new CFDE_Brush; | 780 CFDE_Brush* pBrush = new CFDE_Brush; |
791 pBrush->SetColor(m_TxtColor); | 781 pBrush->SetColor(m_TxtColor); |
792 CFDE_Pen* pPen = NULL; | 782 CFDE_Pen* pPen = NULL; |
793 FDE_HDEVICESTATE hDev = m_pRenderDevice->SaveState(); | 783 FDE_HDEVICESTATE hDev = m_pRenderDevice->SaveState(); |
794 if (rtClip.Width() > 0.0f && rtClip.Height() > 0.0f) { | 784 if (rtClip.Width() > 0.0f && rtClip.Height() > 0.0f) { |
795 m_pRenderDevice->SetClipRect(rtClip); | 785 m_pRenderDevice->SetClipRect(rtClip); |
796 } | 786 } |
797 for (int32_t i = 0; i < iLines; i++) { | 787 for (int32_t i = 0; i < iLines; i++) { |
798 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); | 788 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); |
799 int32_t iPieces = pLine->GetSize(); | 789 int32_t iPieces = pLine->GetSize(); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
909 } | 899 } |
910 pPath->AddLine(pt1, pt2); | 900 pPath->AddLine(pt1, pt2); |
911 iLineCount++; | 901 iLineCount++; |
912 } | 902 } |
913 } | 903 } |
914 } | 904 } |
915 } | 905 } |
916 if (iLineCount > 0) { | 906 if (iLineCount > 0) { |
917 m_pRenderDevice->DrawPath(pPen, 1, pPath, &m_Matrix); | 907 m_pRenderDevice->DrawPath(pPen, 1, pPath, &m_Matrix); |
918 } | 908 } |
919 pPath->Release(); | 909 delete pPath; |
Wei Li
2016/05/06 22:01:21
Nit: why not use unique_ptr for pPath as well?
Tom Sepez
2016/05/11 17:05:39
Done.
| |
920 } | 910 } |
921 CFDE_TTOLine::CFDE_TTOLine() | 911 CFDE_TTOLine::CFDE_TTOLine() |
922 : m_bNewReload(FALSE), m_pieces(5), m_iPieceCount(0) {} | 912 : m_bNewReload(FALSE), m_pieces(5), m_iPieceCount(0) {} |
923 CFDE_TTOLine::CFDE_TTOLine(const CFDE_TTOLine& ttoLine) : m_pieces(5) { | 913 CFDE_TTOLine::CFDE_TTOLine(const CFDE_TTOLine& ttoLine) : m_pieces(5) { |
924 m_bNewReload = ttoLine.m_bNewReload; | 914 m_bNewReload = ttoLine.m_bNewReload; |
925 m_iPieceCount = ttoLine.m_iPieceCount; | 915 m_iPieceCount = ttoLine.m_iPieceCount; |
926 m_pieces.Copy(ttoLine.m_pieces); | 916 m_pieces.Copy(ttoLine.m_pieces); |
927 } | 917 } |
928 CFDE_TTOLine::~CFDE_TTOLine() {} | 918 CFDE_TTOLine::~CFDE_TTOLine() {} |
929 int32_t CFDE_TTOLine::AddPiece(int32_t index, const FDE_TTOPIECE& ttoPiece) { | 919 int32_t CFDE_TTOLine::AddPiece(int32_t index, const FDE_TTOPIECE& ttoPiece) { |
(...skipping 14 matching lines...) Expand all Loading... | |
944 return NULL; | 934 return NULL; |
945 } | 935 } |
946 return m_pieces.GetPtrAt(index); | 936 return m_pieces.GetPtrAt(index); |
947 } | 937 } |
948 void CFDE_TTOLine::RemoveLast(int32_t iCount) { | 938 void CFDE_TTOLine::RemoveLast(int32_t iCount) { |
949 m_pieces.RemoveLast(iCount); | 939 m_pieces.RemoveLast(iCount); |
950 } | 940 } |
951 void CFDE_TTOLine::RemoveAll(FX_BOOL bLeaveMemory) { | 941 void CFDE_TTOLine::RemoveAll(FX_BOOL bLeaveMemory) { |
952 m_pieces.RemoveAll(bLeaveMemory); | 942 m_pieces.RemoveAll(bLeaveMemory); |
953 } | 943 } |
OLD | NEW |