diff options
author | Tor Lillqvist <tml@iki.fi> | 2013-04-06 13:23:21 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@iki.fi> | 2013-04-06 13:23:21 +0300 |
commit | 2a1e3dff0124f8dd05eb6db86297fd60499ae2f2 (patch) | |
tree | 984bf0c38cc11f63e066595dfa619ac21040167f /vcl/source/gdi | |
parent | beda8feececb22e46b6a2e0bac731e81daf5b4a4 (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.cxx | 84 |
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 ) |