Added Orientation argument to LOKIT renderFont
method for rendering watermarks with angle Change-Id: Id422ed62e4f78390661e4e1efa45101af9ecfc23 Reviewed-on: https://gerrit.libreoffice.org/81435 Tested-by: Jenkins Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
This commit is contained in:
committed by
Ashod Nakashian
parent
ec7374ff84
commit
7c8450abac
@@ -2743,11 +2743,11 @@ void DesktopLOKTest::testABI()
|
||||
CPPUNIT_ASSERT_EQUAL(documentClassOffset(54), offsetof(struct _LibreOfficeKitDocumentClass, getSelectionType));
|
||||
CPPUNIT_ASSERT_EQUAL(documentClassOffset(55), offsetof(struct _LibreOfficeKitDocumentClass, removeTextContext));
|
||||
CPPUNIT_ASSERT_EQUAL(documentClassOffset(56), offsetof(struct _LibreOfficeKitDocumentClass, sendDialogEvent));
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(documentClassOffset(57), offsetof(struct _LibreOfficeKitDocumentClass, renderFontOrientation));
|
||||
|
||||
// Extending is fine, update this, and add new assert for the offsetof the
|
||||
// new method
|
||||
CPPUNIT_ASSERT_EQUAL(documentClassOffset(57), sizeof(struct _LibreOfficeKitDocumentClass));
|
||||
CPPUNIT_ASSERT_EQUAL(documentClassOffset(58), sizeof(struct _LibreOfficeKitDocumentClass));
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(DesktopLOKTest);
|
||||
|
@@ -879,6 +879,12 @@ static int doc_getView(LibreOfficeKitDocument* pThis);
|
||||
static int doc_getViewsCount(LibreOfficeKitDocument* pThis);
|
||||
static bool doc_getViewIds(LibreOfficeKitDocument* pThis, int* pArray, size_t nSize);
|
||||
static void doc_setViewLanguage(LibreOfficeKitDocument* pThis, int nId, const char* language);
|
||||
static unsigned char* doc_renderFontOrientation(LibreOfficeKitDocument* pThis,
|
||||
const char *pFontName,
|
||||
const char *pChar,
|
||||
int* pFontWidth,
|
||||
int* pFontHeight,
|
||||
int pOrientation);
|
||||
static unsigned char* doc_renderFont(LibreOfficeKitDocument* pThis,
|
||||
const char *pFontName,
|
||||
const char *pChar,
|
||||
@@ -895,7 +901,8 @@ static void doc_paintWindowDPI(LibreOfficeKitDocument* pThis, unsigned nLOKWindo
|
||||
const int nWidth, const int nHeight,
|
||||
const double fDPIScale);
|
||||
|
||||
static void doc_postWindow(LibreOfficeKitDocument* pThis, unsigned nLOKWindowId, int nAction, const char* pData);
|
||||
static void doc_postWindow(LibreOfficeKitDocument* pThis, unsigned
|
||||
nLOKWindowId, int nAction, const char* pData);
|
||||
|
||||
static char* doc_getPartInfo(LibreOfficeKitDocument* pThis, int nPart);
|
||||
|
||||
@@ -1001,6 +1008,7 @@ LibLODocument_Impl::LibLODocument_Impl(const uno::Reference <css::lang::XCompone
|
||||
m_pDocumentClass->getViewIds = doc_getViewIds;
|
||||
|
||||
m_pDocumentClass->renderFont = doc_renderFont;
|
||||
m_pDocumentClass->renderFontOrientation = doc_renderFontOrientation;
|
||||
m_pDocumentClass->getPartHash = doc_getPartHash;
|
||||
|
||||
m_pDocumentClass->paintWindow = doc_paintWindow;
|
||||
@@ -4671,11 +4679,23 @@ static void doc_setViewLanguage(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*p
|
||||
SfxLokHelper::setViewLanguage(nId, OStringToOUString(language, RTL_TEXTENCODING_UTF8));
|
||||
}
|
||||
|
||||
unsigned char* doc_renderFont(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*pThis*/,
|
||||
|
||||
|
||||
unsigned char* doc_renderFont(LibreOfficeKitDocument* pThis,
|
||||
const char* pFontName,
|
||||
const char* pChar,
|
||||
int* pFontWidth,
|
||||
int* pFontHeight)
|
||||
{
|
||||
return doc_renderFontOrientation(pThis, pFontName, pChar, pFontWidth, pFontHeight, 0);
|
||||
}
|
||||
|
||||
unsigned char* doc_renderFontOrientation(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*pThis*/,
|
||||
const char* pFontName,
|
||||
const char* pChar,
|
||||
int* pFontWidth,
|
||||
int* pFontHeight,
|
||||
int pOrientation)
|
||||
{
|
||||
comphelper::ProfileZone aZone("doc_renderFont");
|
||||
|
||||
@@ -4708,6 +4728,7 @@ unsigned char* doc_renderFont(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*pTh
|
||||
::tools::Rectangle aRect;
|
||||
vcl::Font aFont(rFontMetric);
|
||||
aFont.SetFontSize(Size(0, nDefaultFontSize));
|
||||
aFont.SetOrientation(pOrientation);
|
||||
aDevice->SetFont(aFont);
|
||||
aDevice->GetTextBoundRect(aRect, aText);
|
||||
if (aRect.IsEmpty())
|
||||
@@ -4721,8 +4742,8 @@ unsigned char* doc_renderFont(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*pTh
|
||||
|
||||
if (*pFontWidth > 0 && *pFontHeight > 0)
|
||||
{
|
||||
double fScaleX = *pFontWidth / static_cast<double>(nFontWidth);
|
||||
double fScaleY = *pFontHeight / static_cast<double>(nFontHeight);
|
||||
double fScaleX = *pFontWidth / static_cast<double>(nFontWidth) / 1.5;
|
||||
double fScaleY = *pFontHeight / static_cast<double>(nFontHeight) / 1.5;
|
||||
|
||||
double fScale = std::min(fScaleX, fScaleY);
|
||||
|
||||
@@ -4755,8 +4776,9 @@ unsigned char* doc_renderFont(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*pTh
|
||||
DrawTextFlags const nStyle =
|
||||
DrawTextFlags::Center
|
||||
| DrawTextFlags::VCenter
|
||||
| DrawTextFlags::Bottom
|
||||
| DrawTextFlags::MultiLine
|
||||
| DrawTextFlags::WordBreakHyphenation;// | DrawTextFlags::WordBreak ;
|
||||
| DrawTextFlags::WordBreak;// | DrawTextFlags::WordBreakHyphenation ;
|
||||
|
||||
aDevice->DrawText(aRect, aText, nStyle);
|
||||
}
|
||||
@@ -4775,6 +4797,7 @@ unsigned char* doc_renderFont(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*pTh
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
static void doc_paintWindow(LibreOfficeKitDocument* pThis, unsigned nLOKWindowId,
|
||||
unsigned char* pBuffer,
|
||||
const int nX, const int nY,
|
||||
|
@@ -1169,26 +1169,16 @@ void PDFExport::ImplWriteWatermark( vcl::PDFWriter& rWriter, const Size& rPageSi
|
||||
void PDFExport::ImplWriteTiledWatermark( vcl::PDFWriter& rWriter, const Size& rPageSize )
|
||||
{
|
||||
OUString watermark = msTiledWatermark;
|
||||
int watermarkLength = watermark.getLength();
|
||||
// Maximum number of characters in one line.
|
||||
// it is set to 21 to make it look like tiled watermarks as online in secure view
|
||||
const int lineLength = 21;
|
||||
int lnIndex = lineLength;
|
||||
int lnCount = watermarkLength / lineLength;
|
||||
|
||||
while(lnCount)
|
||||
{
|
||||
watermark = watermark.replaceAt(lnIndex, 0, "\n");
|
||||
lnIndex += lineLength;
|
||||
lnCount--;
|
||||
}
|
||||
|
||||
vcl::Font aFont( "Liberation Sans", Size( 0, 40 ) );
|
||||
aFont.SetItalic( ITALIC_NONE );
|
||||
aFont.SetWidthType( WIDTH_NORMAL );
|
||||
aFont.SetWeight( WEIGHT_NORMAL );
|
||||
aFont.SetAlignment( ALIGN_BOTTOM );
|
||||
aFont.SetFontHeight(40);
|
||||
aFont.SetOrientation(450);
|
||||
|
||||
OutputDevice* pDev = rWriter.GetReferenceDevice();
|
||||
pDev->SetFont(aFont);
|
||||
@@ -1212,7 +1202,6 @@ void PDFExport::ImplWriteTiledWatermark( vcl::PDFWriter& rWriter, const Size& rP
|
||||
aFont.SetFontHeight(nNewHeight);
|
||||
pDev->SetFont( aFont );
|
||||
}
|
||||
|
||||
// maximum number of watermark count for the width
|
||||
if(watermarkcount > 8)
|
||||
watermarkcount = 8;
|
||||
@@ -1224,20 +1213,20 @@ void PDFExport::ImplWriteTiledWatermark( vcl::PDFWriter& rWriter, const Size& rP
|
||||
rWriter.SetFont(aFont);
|
||||
rWriter.SetTextColor( Color(19,20,22) );
|
||||
// center watermarks horizontally
|
||||
Point aTextPoint( (rPageSize.Width()/2) - (((nTextWidth*watermarkcount)+(watermarkcount-1)*(nTextWidth/2))/2),
|
||||
Point aTextPoint( (rPageSize.Width()/2) - (((nTextWidth*watermarkcount)+(watermarkcount-1)*nTextWidth)/2),
|
||||
pDev->GetTextHeight());
|
||||
|
||||
for( int i = 0; i < watermarkcount; i ++)
|
||||
{
|
||||
while(aTextPoint.getY()+pDev->GetTextHeight()*2 <= rPageSize.Height())
|
||||
while(aTextPoint.getY()+pDev->GetTextHeight()*3 <= rPageSize.Height())
|
||||
{
|
||||
tools::Rectangle aTextRect(aTextPoint, Size(nTextWidth,pDev->GetTextHeight()*2));
|
||||
tools::Rectangle aTextRect(aTextPoint, Size(nTextWidth*2,pDev->GetTextHeight()*4));
|
||||
|
||||
pDev->Push();
|
||||
rWriter.SetClipRegion();
|
||||
rWriter.BeginTransparencyGroup();
|
||||
rWriter.SetTextColor( Color(19,20,22) );
|
||||
rWriter.DrawText(aTextRect, watermark, DrawTextFlags::MultiLine|DrawTextFlags::Center|DrawTextFlags::VCenter);
|
||||
rWriter.DrawText(aTextRect, watermark, DrawTextFlags::MultiLine|DrawTextFlags::Center|DrawTextFlags::VCenter|DrawTextFlags::WordBreak|DrawTextFlags::Bottom);
|
||||
rWriter.EndTransparencyGroup( aTextRect, 50 );
|
||||
pDev->Pop();
|
||||
|
||||
@@ -1245,7 +1234,7 @@ void PDFExport::ImplWriteTiledWatermark( vcl::PDFWriter& rWriter, const Size& rP
|
||||
rWriter.SetClipRegion();
|
||||
rWriter.BeginTransparencyGroup();
|
||||
rWriter.SetTextColor( Color(236,235,233) );
|
||||
rWriter.DrawText(aTextRect, watermark, DrawTextFlags::MultiLine|DrawTextFlags::Center|DrawTextFlags::VCenter);
|
||||
rWriter.DrawText(aTextRect, watermark, DrawTextFlags::MultiLine|DrawTextFlags::Center|DrawTextFlags::VCenter|DrawTextFlags::WordBreak|DrawTextFlags::Bottom);
|
||||
rWriter.EndTransparencyGroup( aTextRect, 50 );
|
||||
pDev->Pop();
|
||||
|
||||
|
@@ -419,6 +419,14 @@ struct _LibreOfficeKitDocumentClass
|
||||
unsigned nLOKWindowId,
|
||||
const char* pArguments);
|
||||
|
||||
/// @see lok::Document::renderFontOrientation().
|
||||
unsigned char* (*renderFontOrientation) (LibreOfficeKitDocument* pThis,
|
||||
const char* pFontName,
|
||||
const char* pChar,
|
||||
int* pFontWidth,
|
||||
int* pFontHeight,
|
||||
int pOrientation);
|
||||
|
||||
#endif // defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
|
||||
};
|
||||
|
||||
|
@@ -556,9 +556,13 @@ public:
|
||||
unsigned char* renderFont(const char *pFontName,
|
||||
const char *pChar,
|
||||
int *pFontWidth,
|
||||
int *pFontHeight)
|
||||
int *pFontHeight,
|
||||
int pOrientation=0)
|
||||
{
|
||||
return mpDoc->pClass->renderFont(mpDoc, pFontName, pChar, pFontWidth, pFontHeight);
|
||||
if (LIBREOFFICEKIT_DOCUMENT_HAS(mpDoc, renderFontOrientation))
|
||||
return mpDoc->pClass->renderFontOrientation(mpDoc, pFontName, pChar, pFontWidth, pFontHeight, pOrientation);
|
||||
else
|
||||
return mpDoc->pClass->renderFont(mpDoc, pFontName, pChar, pFontWidth, pFontHeight);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user