summaryrefslogtreecommitdiff
path: root/vcl/source/gdi
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2013-04-06 13:23:21 +0300
committerTor Lillqvist <tml@iki.fi>2013-04-06 13:23:21 +0300
commit2a1e3dff0124f8dd05eb6db86297fd60499ae2f2 (patch)
tree984bf0c38cc11f63e066595dfa619ac21040167f /vcl/source/gdi
parentbeda8feececb22e46b6a2e0bac731e81daf5b4a4 (diff)
Actually no need to have it inline in the header
Change-Id: I3891441fee41dd56ff183c833b17d926722b8f91
Diffstat (limited to 'vcl/source/gdi')
-rw-r--r--vcl/source/gdi/sallayout.cxx84
1 files changed, 84 insertions, 0 deletions
diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx
index ebf348cb0e4b..9d315e33a3a3 100644
--- a/vcl/source/gdi/sallayout.cxx
+++ b/vcl/source/gdi/sallayout.cxx
@@ -17,6 +17,9 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <iostream>
+#include <iomanip>
+
#include "sal/config.h"
#include <cstdio>
@@ -69,6 +72,87 @@ FILE * mslLog()
#endif
// =======================================================================
+std::ostream &operator <<(std::ostream& s, ImplLayoutArgs &rArgs)
+{
+#ifndef SAL_LOG_INFO
+ (void) rArgs;
+#else
+ s << "ImplLayoutArgs{";
+
+ s << "Flags=";
+ if (rArgs.mnFlags == 0)
+ s << 0;
+ else {
+ bool need_or = false;
+ s << "{";
+#define TEST(x) if (rArgs.mnFlags & SAL_LAYOUT_##x) { if (need_or) s << "|"; s << #x; need_or = true; }
+ TEST(BIDI_RTL);
+ TEST(BIDI_STRONG);
+ TEST(RIGHT_ALIGN);
+ TEST(KERNING_PAIRS);
+ TEST(KERNING_ASIAN);
+ TEST(VERTICAL);
+ TEST(COMPLEX_DISABLED);
+ TEST(ENABLE_LIGATURES);
+ TEST(SUBSTITUTE_DIGITS);
+ TEST(KASHIDA_JUSTIFICATON);
+ TEST(DISABLE_GLYPH_PROCESSING);
+ TEST(FOR_FALLBACK);
+#undef TEST
+ s << "}";
+ }
+
+ s << ",Length=" << rArgs.mnLength;
+ s << ",MinCharPos=" << rArgs.mnMinCharPos;
+ s << ",EndCharPos=" << rArgs.mnEndCharPos;
+
+ s << ",Str=\"";
+ int lim = rArgs.mnLength;
+ if (lim > 10)
+ lim = 7;
+ for (int i = 0; i < lim; i++) {
+ if (rArgs.mpStr[i] == '\n')
+ s << "\\n";
+ else if (rArgs.mpStr[i] < ' ' || (rArgs.mpStr[i] >= 0x7F && rArgs.mpStr[i] <= 0xFF))
+ s << "\\0x" << std::hex << std::setw(2) << std::setfill('0') << (int) rArgs.mpStr[i] << std::setfill(' ') << std::setw(1) << std::dec;
+ else if (rArgs.mpStr[i] < 0x7F)
+ s << (char) rArgs.mpStr[i];
+ else
+ s << "\\u" << std::hex << std::setw(4) << std::setfill('0') << (int) rArgs.mpStr[i] << std::setfill(' ') << std::setw(1) << std::dec;
+ }
+ if (rArgs.mnLength > lim)
+ s << "...";
+ s << "\"";
+
+ s << ",DXArray=";
+ if (rArgs.mpDXArray) {
+ s << "[";
+ int count = rArgs.mnEndCharPos - rArgs.mnMinCharPos;
+ lim = count;
+ if (lim > 10)
+ lim = 7;
+ for (int i = 0; i < lim; i++) {
+ s << rArgs.mpDXArray[i];
+ if (i < lim-1)
+ s << ",";
+ }
+ if (count > lim) {
+ if (count > lim + 1)
+ s << "...";
+ s << rArgs.mpDXArray[count-1];
+ }
+ s << "]";
+ } else
+ s << "NULL";
+
+ s << ",LayoutWidth=" << rArgs.mnLayoutWidth;
+
+ s << "}";
+
+#endif
+ return s;
+}
+
// TODO: ask the glyph directly, for now we need this method because of #i99367#
// true if a codepoint doesn't influence the logical text width
bool IsDiacritic( sal_UCS4 nChar )