[Libreoffice-commits] core.git: Branch 'feature/commonsallayout' - vcl/source
Akash Jain
akash96j at gmail.com
Thu Aug 25 19:23:45 UTC 2016
Rebased ref, commits from common ancestor:
commit 59536efb00a6b3e895a760349d5c49bcf451c038
Author: Akash Jain <akash96j at gmail.com>
Date: Fri Aug 26 00:52:50 2016 +0530
GSoC: Fix Kashida justification in CommonSalLayout
Change-Id: I2d7e9b0c6a5ad2210854a49729a72c811e1ebfc5
diff --git a/vcl/source/gdi/CommonSalLayout.cxx b/vcl/source/gdi/CommonSalLayout.cxx
index f39d816..9b623eb 100755
--- a/vcl/source/gdi/CommonSalLayout.cxx
+++ b/vcl/source/gdi/CommonSalLayout.cxx
@@ -242,7 +242,22 @@ void CommonSalLayout::AdjustLayout(ImplLayoutArgs& rArgs)
&& !(rArgs.mnFlags & SalLayoutFlags::Vertical) )
if( (rArgs.mpDXArray != nullptr) || (rArgs.mnLayoutWidth != 0) )
ApplyAsianKerning(rArgs.mrStr);
-//XXX Kashida
+
+ hb_font_t* pHBFont = hb_font_create(mpHBFace);
+ hb_ot_font_set_funcs(pHBFont);
+ hb_codepoint_t nKashidaCodePoint = 0x0640;
+ hb_codepoint_t nKashidaGlyphIndex;
+ if((rArgs.mnFlags & SalLayoutFlags::KashidaJustification) && rArgs.mpDXArray)
+ {
+ if(hb_font_get_glyph(pHBFont, nKashidaCodePoint, 0, &nKashidaGlyphIndex))
+ {
+ if(nKashidaGlyphIndex)
+ {
+ KashidaJustify(nKashidaGlyphIndex, hb_font_get_glyph_h_advance(pHBFont, nKashidaGlyphIndex) >> 6);
+ }
+ }
+ }
+ hb_font_destroy(pHBFont);
}
void CommonSalLayout::DrawText( SalGraphics& rSalGraphics ) const
@@ -265,6 +280,7 @@ bool CommonSalLayout::LayoutText(ImplLayoutArgs& rArgs)
hb_font_set_scale(pHBFont, (uint64_t)(maFontSelData.mnWidth? maFontSelData.mnWidth:maFontSelData.mnHeight) << 6
, (uint64_t)maFontSelData.mnHeight << 6);
hb_ot_font_set_funcs(pHBFont);
+ hb_script_t aHbScript = HB_SCRIPT_INVALID;
int nGlyphCapacity = 2 * (rArgs.mnEndCharPos - rArgs.mnMinCharPos);
Reserve(nGlyphCapacity);
@@ -326,7 +342,7 @@ bool CommonSalLayout::LayoutText(ImplLayoutArgs& rArgs)
int nMinRunPos = it->mnMin;
int nEndRunPos = it->mnEnd;
int nRunLen = nEndRunPos - nMinRunPos;
- hb_script_t aHbScript = it->maScript;
+ aHbScript = it->maScript;
// hb_language_from_string() accept ISO639-3 language tag except for Chinese.
LanguageTag &rTag = rArgs.maLanguageTag;
OString sLanguage = OUStringToOString( MsLangId::isChinese(rTag.getLanguageType()) ? rTag.getBcp47():rTag.getLanguage() , RTL_TEXTENCODING_UTF8 );
@@ -449,10 +465,9 @@ bool CommonSalLayout::LayoutText(ImplLayoutArgs& rArgs)
SortGlyphItems();
- /* XXX seems to be broken
if((rArgs.mpDXArray || rArgs.mnLayoutWidth)
- && ((maHbScript == HB_SCRIPT_ARABIC) || (maHbScript == HB_SCRIPT_SYRIAC)))
+ && ((aHbScript == HB_SCRIPT_ARABIC) || (aHbScript == HB_SCRIPT_SYRIAC)))
rArgs.mnFlags |= SalLayoutFlags::KashidaJustification;
- */
+
return true;
}
More information about the Libreoffice-commits
mailing list