blob: a1ce7fe5fe4009f677e9fe626466a8904a4844f8 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include <com/sun/star/drawing/PointSequence.hpp>
#include <ooxml/resourceids.hxx>
#include <resourcemodel/ResourceModelHelper.hxx>
#include "ConversionHelper.hxx"
#include "WrapPolygonHandler.hxx"
#include "dmapperLoggers.hxx"
namespace writerfilter {
using resourcemodel::resolveSprmProps;
namespace dmapper {
WrapPolygon::WrapPolygon()
{
}
WrapPolygon::~WrapPolygon()
{
}
void WrapPolygon::addPoint(const awt::Point & rPoint)
{
mPoints.push_back(rPoint);
}
WrapPolygon::Points_t::const_iterator WrapPolygon::begin() const
{
return mPoints.begin();
}
WrapPolygon::Points_t::const_iterator WrapPolygon::end() const
{
return mPoints.end();
}
WrapPolygon::Points_t::iterator WrapPolygon::begin()
{
return mPoints.begin();
}
WrapPolygon::Points_t::iterator WrapPolygon::end()
{
return mPoints.end();
}
size_t WrapPolygon::size() const
{
return mPoints.size();
}
WrapPolygon::Pointer_t WrapPolygon::move(const awt::Point & rPoint)
{
WrapPolygon::Pointer_t pResult(new WrapPolygon);
Points_t::iterator aIt = begin();
Points_t::iterator aItEnd = end();
while (aIt != aItEnd)
{
awt::Point aPoint(aIt->X + rPoint.X, aIt->Y + rPoint.Y);
pResult->addPoint(aPoint);
aIt++;
}
return pResult;
}
WrapPolygon::Pointer_t WrapPolygon::scale(const Fraction & rFractionX, const Fraction & rFractionY)
{
WrapPolygon::Pointer_t pResult(new WrapPolygon);
Points_t::iterator aIt = begin();
Points_t::iterator aItEnd = end();
while (aIt != aItEnd)
{
awt::Point aPoint(Fraction(aIt->X) * rFractionX, Fraction(aIt->Y) * rFractionY);
pResult->addPoint(aPoint);
aIt++;
}
return pResult;
}
WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygon(const awt::Size & rSrcSize, const awt::Size & rDstSize)
{
WrapPolygon::Pointer_t pResult;
const sal_uInt32 nWrap100Percent = 21600;
Fraction aMove(nWrap100Percent, rSrcSize.Width);
aMove = aMove * Fraction(15, 1);
awt::Point aMovePoint(aMove, 0);
pResult = move(aMovePoint);
Fraction aScaleX(nWrap100Percent, Fraction(nWrap100Percent) + aMove);
Fraction aScaleY(nWrap100Percent, Fraction(nWrap100Percent) - aMove);
pResult = pResult->scale(aScaleX, aScaleY);
Fraction aScaleDestX(rDstSize.Width, nWrap100Percent);
Fraction aScaleDestY(rDstSize.Height, nWrap100Percent);
pResult = pResult->scale(aScaleDestX, aScaleDestY);
return pResult;
}
drawing::PointSequenceSequence WrapPolygon::getPointSequenceSequence() const
{
drawing::PointSequenceSequence aPolyPolygon(1L);
drawing::PointSequence * pPolygon = aPolyPolygon.getArray();
pPolygon->realloc(size());
sal_uInt32 n = 0;
Points_t::const_iterator aIt = begin();
Points_t::const_iterator aItEnd = end();
while (aIt != aItEnd)
{
(*pPolygon)[n] = *aIt;
++n;
aIt++;
}
return aPolyPolygon;
}
WrapPolygonHandler::WrapPolygonHandler()
: LoggedProperties(dmapper_logger, "WrapPolygonHandler")
, mpPolygon(new WrapPolygon)
{
}
WrapPolygonHandler::~WrapPolygonHandler()
{
}
void WrapPolygonHandler::lcl_attribute(Id Name, Value & val)
{
sal_Int32 nIntValue = val.getInt();
switch(Name)
{
case NS_ooxml::LN_CT_Point2D_x:
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
mnX = nIntValue;
break;
case NS_ooxml::LN_CT_Point2D_y:
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
mnY = nIntValue;
break;
default:
#ifdef DEBUG_WRAP_POLYGON_HANDLER
dmapper_logger->element("unhandled");
#endif
break;
}
}
void WrapPolygonHandler::lcl_sprm(Sprm & _sprm)
{
switch (_sprm.getId())
{
case NS_ooxml::LN_CT_WrapPath_lineTo:
case NS_ooxml::LN_CT_WrapPath_start:
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
{
resolveSprmProps(*this, _sprm);
awt::Point aPoint(mnX, mnY);
mpPolygon->addPoint(aPoint);
}
break;
default:
#ifdef DEBUG_WRAP_POLYGON_HANDLER
dmapper_logger->element("unhandled");
#endif
break;
}
}
WrapPolygon::Pointer_t WrapPolygonHandler::getPolygon()
{
return mpPolygon;
}
}}