blob: 451df08ca6516ced8ab1c42fe0e7a5522c712cb9 [file]
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "pre.h"
#include "../include/fx_graphics.h"
#include "fx_metafile_interpreter.h"
CFX_MetafileInterpreter::CFX_MetafileInterpreter() {
_element = NULL;
}
CFX_MetafileInterpreter::~CFX_MetafileInterpreter() {
_element = NULL;
}
FX_BOOL CFX_MetafileInterpreter::SetCurrentElement(CXML_Element* element) {
_FX_RETURN_VALUE_IF_FAIL(element, FALSE);
_element = element;
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineCap(int32_t& lineCap) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* lineCapElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(lineCapElement, FALSE);
lineCap = lineCapElement->GetAttrInteger("CFX_GraphStateData::LineCap");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineDash(FX_FLOAT& dashPhase,
int32_t& dashArray,
int32_t& dashCount) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* dashPhaseElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(dashPhaseElement, FALSE);
dashPhase = dashPhaseElement->GetAttrFloat("FX_FLOAT");
CXML_Element* dashArrayElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(dashArrayElement, FALSE);
dashArray = dashArrayElement->GetAttrInteger("FX_FLOAT *");
CXML_Element* dashCountElement = _element->GetElement(2);
_FX_RETURN_VALUE_IF_FAIL(dashCountElement, FALSE);
dashCount = dashCountElement->GetAttrInteger("int32_t");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineDash(int32_t& dashStyle) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* dashStyleElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(dashStyleElement, FALSE);
dashStyle = dashStyleElement->GetAttrInteger("FX_DashStyle");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineJoin(int32_t& lineJoin) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* lineJoinElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(lineJoinElement, FALSE);
lineJoin = lineJoinElement->GetAttrInteger("CFX_GraphStateData::LineJoin");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetMiterLimit(FX_FLOAT& miterLimit) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* miterLimitElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(miterLimitElement, FALSE);
miterLimit = miterLimitElement->GetAttrFloat("FX_FLOAT");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetLineWidth(FX_FLOAT& lineWidth,
int32_t& isActOnDash) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* lineWidthElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(lineWidthElement, FALSE);
lineWidth = lineWidthElement->GetAttrFloat("FX_FLOAT");
CXML_Element* isActOnDashElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(isActOnDashElement, FALSE);
isActOnDash = isActOnDashElement->GetAttrInteger("FX_BOOL");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetStrokeColor(int32_t& color) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* colorElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(colorElement, FALSE);
color = colorElement->GetAttrInteger("CFX_Color *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetFillColor(int32_t& color) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* colorElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(colorElement, FALSE);
color = colorElement->GetAttrInteger("CFX_Color *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_StrokePath(int32_t& path,
int32_t& matrix) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* pathElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(pathElement, FALSE);
path = pathElement->GetAttrInteger("CFX_Path *");
CXML_Element* matrixElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);
matrix = matrixElement->GetAttrInteger("CFX_Matrix *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_FillPath(int32_t& path,
int32_t& fillMode,
int32_t& matrix) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* pathElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(pathElement, FALSE);
path = pathElement->GetAttrInteger("CFX_Path *");
CXML_Element* fillModeElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(fillModeElement, FALSE);
fillMode = fillModeElement->GetAttrInteger("FX_FillMode");
CXML_Element* matrixElement = _element->GetElement(2);
_FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);
matrix = matrixElement->GetAttrInteger("CFX_Matrix *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_ClipPath(int32_t& path,
int32_t& fillMode,
int32_t& matrix) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* pathElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(pathElement, FALSE);
path = pathElement->GetAttrInteger("CFX_Path *");
CXML_Element* fillModeElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(fillModeElement, FALSE);
fillMode = fillModeElement->GetAttrInteger("FX_FillMode");
CXML_Element* matrixElement = _element->GetElement(2);
_FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);
matrix = matrixElement->GetAttrInteger("CFX_Matrix *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_DrawImage(int32_t& source,
int32_t& point,
int32_t& matrix) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* sourceElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(sourceElement, FALSE);
source = sourceElement->GetAttrInteger("CFX_DIBSource *");
CXML_Element* pointElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(pointElement, FALSE);
point = pointElement->GetAttrInteger("CFX_PointF *");
CXML_Element* matrixElement = _element->GetElement(2);
_FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);
matrix = matrixElement->GetAttrInteger("CFX_Matrix *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_StretchImage(int32_t& source,
int32_t& rect,
int32_t& matrix) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* sourceElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(sourceElement, FALSE);
source = sourceElement->GetAttrInteger("CFX_DIBSource *");
CXML_Element* rectElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(rectElement, FALSE);
rect = rectElement->GetAttrInteger("CFX_RectF *");
CXML_Element* matrixElement = _element->GetElement(2);
_FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);
matrix = matrixElement->GetAttrInteger("CFX_Matrix *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_ConcatMatrix(int32_t& matrix) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* matrixElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);
matrix = matrixElement->GetAttrInteger("CFX_Matrix *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetClipRect(int32_t& rect) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* rectElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(rectElement, FALSE);
rect = rectElement->GetAttrInteger("CFX_RectF *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetFont(int32_t& font) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* fontElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(fontElement, FALSE);
font = fontElement->GetAttrInteger("CFX_Font *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetFontSize(FX_FLOAT& size) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* sizeElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(sizeElement, FALSE);
size = sizeElement->GetAttrFloat("FX_FLOAT");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetFontHScale(FX_FLOAT& scale) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* scaleElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(scaleElement, FALSE);
scale = scaleElement->GetAttrFloat("FX_FLOAT");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetCharSpacing(FX_FLOAT& spacing) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* spacingElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(spacingElement, FALSE);
spacing = spacingElement->GetAttrFloat("FX_FLOAT");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetTextDrawingMode(int32_t& mode) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* modeElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(modeElement, FALSE);
mode = modeElement->GetAttrInteger("int32_t");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_SetText(int32_t& point,
int32_t& text,
int32_t& matrix) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* pointElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(pointElement, FALSE);
point = pointElement->GetAttrInteger("CFX_PointF *");
CXML_Element* textElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(textElement, FALSE);
text = textElement->GetAttrInteger("CFX_WideString *");
CXML_Element* matrixElement = _element->GetElement(2);
_FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);
matrix = matrixElement->GetAttrInteger("CFX_Matrix *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_Transfer(int32_t& graphics,
int32_t& matrix) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* graphicsElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(graphicsElement, FALSE);
graphics = graphicsElement->GetAttrInteger("CFX_Graphics *");
CXML_Element* matrixElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);
matrix = matrixElement->GetAttrInteger("CFX_Matrix *");
return TRUE;
}
FX_BOOL CFX_MetafileInterpreter::ParamOf_Transfer(int32_t& graphics,
FX_FLOAT& srcLeft,
FX_FLOAT& srcTop,
int32_t& dstRect,
int32_t& matrix) {
_FX_RETURN_VALUE_IF_FAIL(_element, FALSE);
CXML_Element* graphicsElement = _element->GetElement(0);
_FX_RETURN_VALUE_IF_FAIL(graphicsElement, FALSE);
graphics = graphicsElement->GetAttrInteger("CFX_Graphics *");
CXML_Element* srcLeftElement = _element->GetElement(2);
_FX_RETURN_VALUE_IF_FAIL(srcLeftElement, FALSE);
srcLeft = srcLeftElement->GetAttrFloat("FX_FLOAT");
CXML_Element* srcTopElement = _element->GetElement(3);
_FX_RETURN_VALUE_IF_FAIL(srcTopElement, FALSE);
srcTop = srcTopElement->GetAttrFloat("FX_FLOAT");
CXML_Element* dstRectElement = _element->GetElement(1);
_FX_RETURN_VALUE_IF_FAIL(dstRectElement, FALSE);
dstRect = dstRectElement->GetAttrInteger("CFX_RectF *");
CXML_Element* matrixElement = _element->GetElement(4);
_FX_RETURN_VALUE_IF_FAIL(matrixElement, FALSE);
matrix = matrixElement->GetAttrInteger("CFX_Matrix *");
return TRUE;
}