diff options
-rw-r--r-- | xfa/fxfa/cxfa_ffarc.cpp | 2 | ||||
-rw-r--r-- | xfa/fxfa/cxfa_ffimage.cpp | 9 | ||||
-rw-r--r-- | xfa/fxfa/cxfa_ffimageedit.cpp | 2 | ||||
-rw-r--r-- | xfa/fxfa/cxfa_ffline.cpp | 30 | ||||
-rw-r--r-- | xfa/fxfa/cxfa_ffrectangle.cpp | 2 | ||||
-rw-r--r-- | xfa/fxfa/cxfa_widgetacc.cpp | 11 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_node.cpp | 2 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_value.cpp | 40 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_value.h | 12 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_document_datamerger_imp.cpp | 7 |
10 files changed, 70 insertions, 47 deletions
diff --git a/xfa/fxfa/cxfa_ffarc.cpp b/xfa/fxfa/cxfa_ffarc.cpp index a738221b05..64a4f70a61 100644 --- a/xfa/fxfa/cxfa_ffarc.cpp +++ b/xfa/fxfa/cxfa_ffarc.cpp @@ -31,5 +31,5 @@ void CXFA_FFArc::RenderWidget(CXFA_Graphics* pGS, CFX_Matrix mtRotate = GetRotateMatrix(); mtRotate.Concat(matrix); - DrawBorder(pGS, value->GetArc(), rtArc, mtRotate); + DrawBorder(pGS, value->GetArcIfExists(), rtArc, mtRotate); } diff --git a/xfa/fxfa/cxfa_ffimage.cpp b/xfa/fxfa/cxfa_ffimage.cpp index 3a5a63a1e4..b4a0d32981 100644 --- a/xfa/fxfa/cxfa_ffimage.cpp +++ b/xfa/fxfa/cxfa_ffimage.cpp @@ -70,8 +70,11 @@ void CXFA_FFImage::RenderWidget(CXFA_Graphics* pGS, int32_t iImageXDpi = 0; int32_t iImageYDpi = 0; m_pNode->GetWidgetAcc()->GetImageDpi(iImageXDpi, iImageYDpi); + auto* value = m_pNode->GetFormValueIfExists(); - CXFA_Image* image = value ? value->GetImage() : nullptr; - XFA_DrawImage(pGS, rtImage, mtRotate, pDIBitmap, image->GetAspect(), - iImageXDpi, iImageYDpi, iHorzAlign, iVertAlign); + CXFA_Image* image = value ? value->GetImageIfExists() : nullptr; + if (image) { + XFA_DrawImage(pGS, rtImage, mtRotate, pDIBitmap, image->GetAspect(), + iImageXDpi, iImageYDpi, iHorzAlign, iVertAlign); + } } diff --git a/xfa/fxfa/cxfa_ffimageedit.cpp b/xfa/fxfa/cxfa_ffimageedit.cpp index 15a8dc3fd4..681370edf5 100644 --- a/xfa/fxfa/cxfa_ffimageedit.cpp +++ b/xfa/fxfa/cxfa_ffimageedit.cpp @@ -84,7 +84,7 @@ void CXFA_FFImageEdit::RenderWidget(CXFA_Graphics* pGS, XFA_AttributeEnum iAspect = XFA_AttributeEnum::Fit; CXFA_Value* value = m_pNode->GetFormValueIfExists(); if (value) { - CXFA_Image* image = value->GetImage(); + CXFA_Image* image = value->GetImageIfExists(); if (image) iAspect = image->GetAspect(); } diff --git a/xfa/fxfa/cxfa_ffline.cpp b/xfa/fxfa/cxfa_ffline.cpp index cdaca4a88f..4937a0e7cc 100644 --- a/xfa/fxfa/cxfa_ffline.cpp +++ b/xfa/fxfa/cxfa_ffline.cpp @@ -91,20 +91,23 @@ void CXFA_FFLine::RenderWidget(CXFA_Graphics* pGS, if (!value) return; - CXFA_Line* line = value->GetLine(); FX_ARGB lineColor = 0xFF000000; float fLineWidth = 1.0f; XFA_AttributeEnum iStrokeType = XFA_AttributeEnum::Unknown; XFA_AttributeEnum iCap = XFA_AttributeEnum::Unknown; - CXFA_Edge* edge = line->GetEdgeIfExists(); - if (edge && !edge->IsVisible()) - return; - if (edge) { - lineColor = edge->GetColor(); - iStrokeType = edge->GetStrokeType(); - fLineWidth = edge->GetThickness(); - iCap = edge->GetCapType(); + CXFA_Line* line = value->GetLineIfExists(); + if (line) { + CXFA_Edge* edge = line->GetEdgeIfExists(); + if (edge && !edge->IsVisible()) + return; + + if (edge) { + lineColor = edge->GetColor(); + iStrokeType = edge->GetStrokeType(); + fLineWidth = edge->GetThickness(); + iCap = edge->GetCapType(); + } } CFX_Matrix mtRotate = GetRotateMatrix(); @@ -115,12 +118,15 @@ void CXFA_FFLine::RenderWidget(CXFA_Graphics* pGS, if (margin) XFA_RectWithoutMargin(rtLine, margin); - GetRectFromHand(rtLine, line->GetHand(), fLineWidth); + GetRectFromHand(rtLine, line ? line->GetHand() : XFA_AttributeEnum::Left, + fLineWidth); CXFA_GEPath linePath; - if (line->GetSlope() && rtLine.right() > 0.0f && rtLine.bottom() > 0.0f) + if (line && line->GetSlope() && rtLine.right() > 0.0f && + rtLine.bottom() > 0.0f) { linePath.AddLine(rtLine.TopRight(), rtLine.BottomLeft()); - else + } else { linePath.AddLine(rtLine.TopLeft(), rtLine.BottomRight()); + } pGS->SaveGraphState(); pGS->SetLineWidth(fLineWidth); diff --git a/xfa/fxfa/cxfa_ffrectangle.cpp b/xfa/fxfa/cxfa_ffrectangle.cpp index b3dd6f45c6..46c1009844 100644 --- a/xfa/fxfa/cxfa_ffrectangle.cpp +++ b/xfa/fxfa/cxfa_ffrectangle.cpp @@ -31,5 +31,5 @@ void CXFA_FFRectangle::RenderWidget(CXFA_Graphics* pGS, CFX_Matrix mtRotate = GetRotateMatrix(); mtRotate.Concat(matrix); - DrawBorder(pGS, value->GetRectangle(), rect, mtRotate); + DrawBorder(pGS, value->GetRectangleIfExists(), rect, mtRotate); } diff --git a/xfa/fxfa/cxfa_widgetacc.cpp b/xfa/fxfa/cxfa_widgetacc.cpp index d61d8989fb..407517f564 100644 --- a/xfa/fxfa/cxfa_widgetacc.cpp +++ b/xfa/fxfa/cxfa_widgetacc.cpp @@ -99,7 +99,7 @@ class CXFA_ImageLayoutData : public CXFA_WidgetLayoutData { if (!value) return false; - CXFA_Image* image = value->GetImage(); + CXFA_Image* image = value->GetImageIfExists(); if (!image) return false; @@ -156,7 +156,10 @@ class CXFA_ImageEditData : public CXFA_FieldLayoutData { if (!value) return false; - CXFA_Image* image = value->GetImage(); + CXFA_Image* image = value->GetImageIfExists(); + if (!image) + return false; + pAcc->SetImageEditImage(XFA_LoadImageData(doc, image, m_bNamedImage, m_iImageXDpi, m_iImageYDpi)); return !!m_pDIBitmap; @@ -376,7 +379,7 @@ void CXFA_WidgetAcc::ResetData() { switch (eUIType) { case XFA_Element::ImageEdit: { CXFA_Value* imageValue = m_pNode->GetDefaultValueIfExists(); - CXFA_Image* image = imageValue ? imageValue->GetImage() : nullptr; + CXFA_Image* image = imageValue ? imageValue->GetImageIfExists() : nullptr; WideString wsContentType, wsHref; if (image) { wsValue = image->GetContent(); @@ -440,7 +443,7 @@ void CXFA_WidgetAcc::SetImageEdit(const WideString& wsContentType, const WideString& wsHref, const WideString& wsData) { CXFA_Value* formValue = m_pNode->GetFormValueIfExists(); - CXFA_Image* image = formValue ? formValue->GetImage() : nullptr; + CXFA_Image* image = formValue ? formValue->GetImageIfExists() : nullptr; if (image) { image->SetContentType(WideString(wsContentType)); image->SetHref(wsHref); diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp index a9c4a69dc6..7797be342b 100644 --- a/xfa/fxfa/parser/cxfa_node.cpp +++ b/xfa/fxfa/parser/cxfa_node.cpp @@ -1940,7 +1940,7 @@ WideString CXFA_Node::GetValidateCaptionName(bool bVersionFlag) { if (caption) { CXFA_Value* capValue = caption->GetValueIfExists(); if (capValue) { - CXFA_Text* captionText = capValue->GetText(); + CXFA_Text* captionText = capValue->GetTextIfExists(); if (captionText) wsCaptionName = captionText->GetContent(); } diff --git a/xfa/fxfa/parser/cxfa_value.cpp b/xfa/fxfa/parser/cxfa_value.cpp index dc93bba25c..7a952f7df3 100644 --- a/xfa/fxfa/parser/cxfa_value.cpp +++ b/xfa/fxfa/parser/cxfa_value.cpp @@ -63,31 +63,41 @@ XFA_Element CXFA_Value::GetChildValueClassID() const { WideString CXFA_Value::GetChildValueContent() const { CXFA_Node* pNode = GetFirstChild(); - if (!pNode) - return L""; - return pNode->JSObject()->TryContent(false, true).value_or(L""); + return pNode ? pNode->JSObject()->TryContent(false, true).value_or(L"") : L""; } -CXFA_Arc* CXFA_Value::GetArc() const { - return static_cast<CXFA_Arc*>(GetFirstChild()); +CXFA_Arc* CXFA_Value::GetArcIfExists() const { + CXFA_Node* node = GetFirstChild(); + ASSERT(!node || node->GetElementType() == XFA_Element::Arc); + return static_cast<CXFA_Arc*>(node); } -CXFA_Line* CXFA_Value::GetLine() const { - return static_cast<CXFA_Line*>(GetFirstChild()); +CXFA_Line* CXFA_Value::GetLineIfExists() const { + CXFA_Node* node = GetFirstChild(); + ASSERT(!node || node->GetElementType() == XFA_Element::Line); + return static_cast<CXFA_Line*>(node); } -CXFA_Rectangle* CXFA_Value::GetRectangle() const { - return static_cast<CXFA_Rectangle*>(GetFirstChild()); +CXFA_Rectangle* CXFA_Value::GetRectangleIfExists() const { + CXFA_Node* node = GetFirstChild(); + ASSERT(!node || node->GetElementType() == XFA_Element::Rectangle); + return static_cast<CXFA_Rectangle*>(node); } -CXFA_Text* CXFA_Value::GetText() const { - return static_cast<CXFA_Text*>(GetFirstChild()); +CXFA_Text* CXFA_Value::GetTextIfExists() const { + CXFA_Node* node = GetFirstChild(); + ASSERT(!node || node->GetElementType() == XFA_Element::Text); + return static_cast<CXFA_Text*>(node); } -CXFA_ExData* CXFA_Value::GetExData() const { - return static_cast<CXFA_ExData*>(GetFirstChild()); +CXFA_ExData* CXFA_Value::GetExDataIfExists() const { + CXFA_Node* node = GetFirstChild(); + ASSERT(!node || node->GetElementType() == XFA_Element::ExData); + return static_cast<CXFA_ExData*>(node); } -CXFA_Image* CXFA_Value::GetImage() const { - return static_cast<CXFA_Image*>(GetFirstChild()); +CXFA_Image* CXFA_Value::GetImageIfExists() const { + CXFA_Node* node = GetFirstChild(); + ASSERT(!node || node->GetElementType() == XFA_Element::Image); + return static_cast<CXFA_Image*>(node); } diff --git a/xfa/fxfa/parser/cxfa_value.h b/xfa/fxfa/parser/cxfa_value.h index 5067b715db..47aeefede2 100644 --- a/xfa/fxfa/parser/cxfa_value.h +++ b/xfa/fxfa/parser/cxfa_value.h @@ -24,12 +24,12 @@ class CXFA_Value : public CXFA_Node { XFA_Element GetChildValueClassID() const; WideString GetChildValueContent() const; - CXFA_Arc* GetArc() const; - CXFA_Line* GetLine() const; - CXFA_Rectangle* GetRectangle() const; - CXFA_Text* GetText() const; - CXFA_ExData* GetExData() const; - CXFA_Image* GetImage() const; + CXFA_Arc* GetArcIfExists() const; + CXFA_Line* GetLineIfExists() const; + CXFA_Rectangle* GetRectangleIfExists() const; + CXFA_Text* GetTextIfExists() const; + CXFA_ExData* GetExDataIfExists() const; + CXFA_Image* GetImageIfExists() const; }; #endif // XFA_FXFA_PARSER_CXFA_VALUE_H_ diff --git a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp index 3332d90b66..65746c5caf 100644 --- a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp +++ b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp @@ -140,7 +140,7 @@ void CreateDataBinding(CXFA_Node* pFormNode, WideString wsValue; switch (eUIType) { case XFA_Element::ImageEdit: { - CXFA_Image* image = defValue ? defValue->GetImage() : nullptr; + CXFA_Image* image = defValue ? defValue->GetImageIfExists() : nullptr; WideString wsContentType; WideString wsHref; if (image) { @@ -293,7 +293,7 @@ void CreateDataBinding(CXFA_Node* pFormNode, case XFA_Element::ImageEdit: { FormValueNode_SetChildContent(defValue, wsNormalizeValue, XFA_Element::Image); - CXFA_Image* image = defValue ? defValue->GetImage() : nullptr; + CXFA_Image* image = defValue ? defValue->GetImageIfExists() : nullptr; if (image) { CFX_XMLElement* pXMLDataElement = static_cast<CFX_XMLElement*>(pDataNode->GetXMLMappingNode()); @@ -329,7 +329,8 @@ void CreateDataBinding(CXFA_Node* pFormNode, wsNormalizeValue += wsItem; } - CXFA_ExData* exData = defValue ? defValue->GetExData() : nullptr; + CXFA_ExData* exData = + defValue ? defValue->GetExDataIfExists() : nullptr; ASSERT(exData); exData->SetContentType(single ? L"text/plain" : L"text/xml"); |