vcl/inc/graphite_layout.hxx | 1 + vcl/source/glyphs/graphite_layout.cxx | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-)
New commits: commit 83d9c5562c27b5f766157eba70bebd320463a0af Author: navin patidar <pati...@kacst.edu.sa> Date: Sun Apr 7 11:47:01 2013 +0300 fix fdo#60534 : use DefaultCharMapper::mapChar() to map RTL string unicodes. Use DefaultCharMapper::mapChar() to map RTL string unicodes to their mirror compatible unicodes. Change-Id: I5bd2fd18bf96c49bbdf2be521a9cf28c311c7a09 Reviewed-on: https://gerrit.libreoffice.org/3221 Reviewed-by: Miklos Vajna <vmik...@suse.cz> Tested-by: Miklos Vajna <vmik...@suse.cz> diff --git a/vcl/inc/graphite_layout.hxx b/vcl/inc/graphite_layout.hxx index bbf6f15..fa6d25c 100644 --- a/vcl/inc/graphite_layout.hxx +++ b/vcl/inc/graphite_layout.hxx @@ -97,6 +97,7 @@ public: private: const gr_face * mpFace; // not owned by layout gr_font * mpFont; // not owned by layout + sal_Unicode * mpStr; int mnSegCharOffset; // relative to ImplLayoutArgs::mpStr long mnWidth; std::vector<int> mvChar2BaseGlyph; diff --git a/vcl/source/glyphs/graphite_layout.cxx b/vcl/source/glyphs/graphite_layout.cxx index 8b19c31..3e3c329 100644 --- a/vcl/source/glyphs/graphite_layout.cxx +++ b/vcl/source/glyphs/graphite_layout.cxx @@ -48,6 +48,7 @@ #include <unicode/ubidi.h> #include <unicode/uscript.h> +#include <layout/DefaultCharMapper.h> // Graphite Libraries (must be after vcl headers on windows) #include <graphite2/Segment.h> @@ -490,6 +491,7 @@ GraphiteLayout::GraphiteLayout(const gr_face * face, gr_font * font, const grutils::GrFeatureParser * pFeatures) throw() : mpFace(face), mpFont(font), + mpStr(NULL), mnWidth(0), mfScaling(1.0), mpFeatures(pFeatures) @@ -501,6 +503,7 @@ GraphiteLayout::~GraphiteLayout() throw() { clear(); // the features and font are owned by the platform layers + delete[] mpStr; mpFeatures = NULL; mpFont = NULL; } @@ -591,12 +594,28 @@ gr_segment * GraphiteLayout::CreateSegment(ImplLayoutArgs& rArgs) } size_t numchars = gr_count_unicode_characters(gr_utf16, rArgs.mpStr + mnSegCharOffset, rArgs.mpStr + (rArgs.mnLength > limit + 64 ? limit + 64 : rArgs.mnLength), NULL); + + mpStr = new sal_Unicode[rArgs.mnLength+1]; + if(mpStr) + memcpy(mpStr, rArgs.mpStr, (rArgs.mnLength+1)*2); + + if (bRtl && mpStr) + { + DefaultCharMapper cmap(true, bRtl); + int i=0; + while(rArgs.mpStr[i]) + { + mpStr[i]=(sal_Unicode) cmap.mapChar((sal_uInt32)rArgs.mpStr[i]); + i++; + } + } + if (mpFeatures) pSegment = gr_make_seg(mpFont, mpFace, 0, mpFeatures->values(), gr_utf16, - rArgs.mpStr + mnSegCharOffset, numchars, bRtl); + mpStr + mnSegCharOffset, numchars, bRtl); else pSegment = gr_make_seg(mpFont, mpFace, 0, NULL, gr_utf16, - rArgs.mpStr + mnSegCharOffset, numchars, bRtl); + mpStr + mnSegCharOffset, numchars, bRtl); //pSegment = new gr::RangeSegment((gr::Font *)&mrFont, mpTextSrc, &maLayout, mnMinCharPos, limit); if (pSegment != NULL) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits