/* GNUPLOT - qt_conversion.cpp */
/*[
* Copyright 2009 Jrme Lodewyck
*
* Permission to use, copy, and distribute this software and its
* documentation for any purpose with or without fee is hereby granted,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation.
*
* Permission to modify the software is granted, but not the right to
* distribute the complete modified source code. Modifications are to
* be distributed as patches to the released version. Permission to
* distribute binaries produced by compiling modified sources is granted,
* provided you
* 1. distribute the corresponding source modifications from the
* released version in the form of a patch file along with the binaries,
* 2. add special version identification to distinguish your version
* in addition to the base release version number,
* 3. provide your name and address as the primary contact for the
* support of your modified version, and
* 4. retain our contact information in regard to use of the base
* software.
* Permission to distribute the released version of the source code along
* with corresponding source modifications in the form of a patch file is
* granted with same provisions 2 through 4 for binary distributions.
*
* This software is provided "as is" without express or implied warranty
* to the extent permitted by applicable law.
*
*
* Alternatively, the contents of this file may be used under the terms of the
* GNU General Public License Version 2 or later (the "GPL"), in which case the
* provisions of GPL are applicable instead of those above. If you wish to allow
* use of your version of this file only under the terms of the GPL and not
* to allow others to use your version of this file under the above gnuplot
* license, indicate your decision by deleting the provisions above and replace
* them with the notice and other provisions required by the GPL. If you do not
* delete the provisions above, a recipient may use your version of this file
* under either the GPL or the gnuplot license.
]*/
static QColor qt_colorList[12] =
{
Qt::white,
Qt::black,
Qt::gray,
Qt::red,
Qt::green,
Qt::blue,
Qt::magenta,
Qt::cyan,
Qt::yellow,
Qt::black,
QColor(255, 76, 0), // Orange
Qt::gray
};
QTextCodec* qt_encodingToCodec(set_encoding_id encoding)
{
switch (encoding)
{
case S_ENC_DEFAULT : return QTextCodec::codecForLocale();
case S_ENC_ISO8859_1 : return QTextCodec::codecForMib( 4);
case S_ENC_ISO8859_2 : return QTextCodec::codecForMib( 5);
case S_ENC_ISO8859_9 : return QTextCodec::codecForMib( 12);
case S_ENC_ISO8859_15 : return QTextCodec::codecForMib( 111);
case S_ENC_CP437 : return QTextCodec::codecForMib(2011);
case S_ENC_CP850 : return QTextCodec::codecForMib(2009);
case S_ENC_CP852 : return QTextCodec::codecForMib(2010);
case S_ENC_CP950 : return QTextCodec::codecForMib(2026); // Note: CP950 has no IANA number. 2026 is for Big5, which is close to CP950
case S_ENC_CP1250 : return QTextCodec::codecForMib(2250);
case S_ENC_CP1251 : return QTextCodec::codecForMib(2251);
case S_ENC_CP1252 : return QTextCodec::codecForMib(2252);
case S_ENC_CP1254 : return QTextCodec::codecForMib(2254);
case S_ENC_KOI8_R : return QTextCodec::codecForMib(2084);
case S_ENC_KOI8_U : return QTextCodec::codecForMib(2088);
case S_ENC_SJIS : return QTextCodec::codecForMib( 17);
case S_ENC_UTF8 : return QTextCodec::codecForMib( 106);
default : return QTextCodec::codecForLocale();
}
}
QImage qt_imageToQImage(int M, int N, coordval* image, t_imagecolor color_mode)
{
QImage qimage(QSize(M, N), QImage::Format_ARGB32_Premultiplied);
rgb_color rgb1;
rgb255_color rgb255;
// TrueColor 24-bit color mode
if (color_mode == IC_RGB)
for (int n = 0; n < N; n++)
{
QRgb* line = (QRgb*)(qimage.scanLine(n));
for (int m = 0; m < M; m++)
{
rgb1.r = *image++;
rgb1.g = *image++;
rgb1.b = *image++;
rgb255_from_rgb1(rgb1, &rgb255);
*line++ = qRgb(rgb255.r, rgb255.g, rgb255.b);
}
}
else if (color_mode == IC_RGBA)
for (int n = 0; n < N; n++)
{
QRgb* line = (QRgb*)(qimage.scanLine(n));
for (int m = 0; m < M; m++)
{
unsigned char alpha255 = *(image + 3);
float alpha1 = float(alpha255 / 255.);
rgb1.r = alpha1 * (*image++);
rgb1.g = alpha1 * (*image++);
rgb1.b = alpha1 * (*image++);
image++;
rgb255_from_rgb1(rgb1, &rgb255);
*line++ = qRgba(rgb255.r, rgb255.g, rgb255.b, alpha255);
}
}
// Palette color lookup from gray value
else
for (int n = 0; n < N; n++)
{
QRgb* line = (QRgb*)(qimage.scanLine(n));
for (int m = 0; m < M; m++)
{
if (*image != *image)
{
image++;
*line++ = 0x00000000;
}
else
{
rgb255maxcolors_from_gray(*image++, &rgb255);
*line++ = qRgb(rgb255.r, rgb255.g, rgb255.b);
}
}
}
return qimage;
}
// Generated from http://unicode.org/Public/MAPPINGS/VENDORS/ADOBE/symbol.txt
QChar qt_symbolToUnicode(int c)
{
switch (c)
{
case 0x22: return QChar(0x2200); // FOR ALL // universal
case 0x24: return QChar(0x2203); // THERE EXISTS // existential
case 0x27: return QChar(0x220B); // CONTAINS AS MEMBER // suchthat
case 0x2A: return QChar(0x2217); // ASTERISK OPERATOR // asteriskmath
case 0x2D: return QChar(0x2212); // MINUS SIGN // minus
case 0x40: return QChar(0x2245); // APPROXIMATELY EQUAL TO // congruent
case 0x41: return QChar(0x0391); // GREEK CAPITAL LETTER ALPHA // Alpha
case 0x42: return QChar(0x0392); // GREEK CAPITAL LETTER BETA // Beta
case 0x43: return QChar(0x03A7); // GREEK CAPITAL LETTER CHI // Chi
case 0x44: return QChar(0x0394); // GREEK CAPITAL LETTER DELTA // Delta
case 0x45: return QChar(0x0395); // GREEK CAPITAL LETTER EPSILON // Epsilon
case 0x46: return QChar(0x03A6); // GREEK CAPITAL LETTER PHI // Phi
case 0x47: return QChar(0x0393); // GREEK CAPITAL LETTER GAMMA // Gamma
case 0x48: return QChar(0x0397); // GREEK CAPITAL LETTER ETA // Eta
case 0x49: return QChar(0x0399); // GREEK CAPITAL LETTER IOTA // Iota
case 0x4A: return QChar(0x03D1); // GREEK THETA SYMBOL // theta1
case 0x4B: return QChar(0x039A); // GREEK CAPITAL LETTER KAPPA // Kappa
case 0x4C: return QChar(0x039B); // GREEK CAPITAL LETTER LAMDA // Lambda
case 0x4D: return QChar(0x039C); // GREEK CAPITAL LETTER MU // Mu
case 0x4E: return QChar(0x039D); // GREEK CAPITAL LETTER NU // Nu
case 0x4F: return QChar(0x039F); // GREEK CAPITAL LETTER OMICRON // Omicron
case 0x50: return QChar(0x03A0); // GREEK CAPITAL LETTER PI // Pi
case 0x51: return QChar(0x0398); // GREEK CAPITAL LETTER THETA // Theta
case 0x52: return QChar(0x03A1); // GREEK CAPITAL LETTER RHO // Rho
case 0x53: return QChar(0x03A3); // GREEK CAPITAL LETTER SIGMA // Sigma
case 0x54: return QChar(0x03A4); // GREEK CAPITAL LETTER TAU // Tau
case 0x55: return QChar(0x03A5); // GREEK CAPITAL LETTER UPSILON // Upsilon
case 0x56: return QChar(0x03C2); // GREEK SMALL LETTER FINAL SIGMA // sigma1
case 0x57: return QChar(0x03A9); // GREEK CAPITAL LETTER OMEGA // Omega
case 0x58: return QChar(0x039E); // GREEK CAPITAL LETTER XI // Xi
case 0x59: return QChar(0x03A8); // GREEK CAPITAL LETTER PSI // Psi
case 0x5A: return QChar(0x0396); // GREEK CAPITAL LETTER ZETA // Zeta
case 0x5C: return QChar(0x2234); // THEREFORE // therefore
case 0x5E: return QChar(0x22A5); // UP TACK // perpendicular
case 0x60: return QChar(0xF8E5); // RADICAL EXTENDER // radicalex (CUS)
case 0x61: return QChar(0x03B1); // GREEK SMALL LETTER ALPHA // alpha
case 0x62: return QChar(0x03B2); // GREEK SMALL LETTER BETA // beta
case 0x63: return QChar(0x03C7); // GREEK SMALL LETTER CHI // chi
case 0x64: return QChar(0x03B4); // GREEK SMALL LETTER DELTA // delta
case 0x65: return QChar(0x03B5); // GREEK SMALL LETTER EPSILON // epsilon
case 0x66: return QChar(0x03C6); // GREEK SMALL LETTER PHI // phi
case 0x67: return QChar(0x03B3); // GREEK SMALL LETTER GAMMA // gamma
case 0x68: return QChar(0x03B7); // GREEK SMALL LETTER ETA // eta
case 0x69: return QChar(0x03B9); // GREEK SMALL LETTER IOTA // iota
case 0x6A: return QChar(0x03D5); // GREEK PHI SYMBOL // phi1
case 0x6B: return QChar(0x03BA); // GREEK SMALL LETTER KAPPA // kappa
case 0x6C: return QChar(0x03BB); // GREEK SMALL LETTER LAMDA // lambda
case 0x6D: return QChar(0x03BC); // GREEK SMALL LETTER MU // mu
case 0x6E: return QChar(0x03BD); // GREEK SMALL LETTER NU // nu
case 0x6F: return QChar(0x03BF); // GREEK SMALL LETTER OMICRON // omicron
case 0x70: return QChar(0x03C0); // GREEK SMALL LETTER PI // pi
case 0x71: return QChar(0x03B8); // GREEK SMALL LETTER THETA // theta
case 0x72: return QChar(0x03C1); // GREEK SMALL LETTER RHO // rho
case 0x73: return QChar(0x03C3); // GREEK SMALL LETTER SIGMA // sigma
case 0x74: return QChar(0x03C4); // GREEK SMALL LETTER TAU // tau
case 0x75: return QChar(0x03C5); // GREEK SMALL LETTER UPSILON // upsilon
case 0x76: return QChar(0x03D6); // GREEK PI SYMBOL // omega1
case 0x77: return QChar(0x03C9); // GREEK SMALL LETTER OMEGA // omega
case 0x78: return QChar(0x03BE); // GREEK SMALL LETTER XI // xi
case 0x79: return QChar(0x03C8); // GREEK SMALL LETTER PSI // psi
case 0x7A: return QChar(0x03B6); // GREEK SMALL LETTER ZETA // zeta
case 0x7E: return QChar(0x223C); // TILDE OPERATOR // similar
case 0xA0: return QChar(0x20AC); // EURO SIGN // Euro
case 0xA1: return QChar(0x03D2); // GREEK UPSILON WITH HOOK SYMBOL // Upsilon1
case 0xA2: return QChar(0x2032); // PRIME // minute
case 0xA3: return QChar(0x2264); // LESS-THAN OR EQUAL TO // lessequal
case 0xA4: return QChar(0x2044); // FRACTION SLASH // fraction
case 0xA5: return QChar(0x221E); // INFINITY // infinity
case 0xA6: return QChar(0x0192); // LATIN SMALL LETTER F WITH HOOK // florin
case 0xA7: return QChar(0x2663); // BLACK CLUB SUIT // club
case 0xA8: return QChar(0x2666); // BLACK DIAMOND SUIT // diamond
case 0xA9: return QChar(0x2665); // BLACK HEART SUIT // heart
case 0xAA: return QChar(0x2660); // BLACK SPADE SUIT // spade
case 0xAB: return QChar(0x2194); // LEFT RIGHT ARROW // arrowboth
case 0xAC: return QChar(0x2190); // LEFTWARDS ARROW // arrowleft
case 0xAD: return QChar(0x2191); // UPWARDS ARROW // arrowup
case 0xAE: return QChar(0x2192); // RIGHTWARDS ARROW // arrowright
case 0xAF: return QChar(0x2193); // DOWNWARDS ARROW // arrowdown
case 0xB2: return QChar(0x2033); // DOUBLE PRIME // second
case 0xB3: return QChar(0x2265); // GREATER-THAN OR EQUAL TO // greaterequal
case 0xB4: return QChar(0x00D7); // MULTIPLICATION SIGN // multiply
case 0xB5: return QChar(0x221D); // PROPORTIONAL TO // proportional
case 0xB6: return QChar(0x2202); // PARTIAL DIFFERENTIAL // partialdiff
case 0xB7: return QChar(0x2022); // BULLET // bullet
case 0xB8: return QChar(0x00F7); // DIVISION SIGN // divide
case 0xB9: return QChar(0x2260); // NOT EQUAL TO // notequal
case 0xBA: return QChar(0x2261); // IDENTICAL TO // equivalence
case 0xBB: return QChar(0x2248); // ALMOST EQUAL TO // approxequal
case 0xBC: return QChar(0x2026); // HORIZONTAL ELLIPSIS // ellipsis
case 0xBD: return QChar(0xF8E6); // VERTICAL ARROW EXTENDER // arrowvertex (CUS)
case 0xBE: return QChar(0xF8E7); // HORIZONTAL ARROW EXTENDER // arrowhorizex (CUS)
case 0xBF: return QChar(0x21B5); // DOWNWARDS ARROW WITH CORNER LEFTWARDS // carriagereturn
case 0xC0: return QChar(0x2135); // ALEF SYMBOL // aleph
case 0xC1: return QChar(0x2111); // BLACK-LETTER CAPITAL I // Ifraktur
case 0xC2: return QChar(0x211C); // BLACK-LETTER CAPITAL R // Rfraktur
case 0xC3: return QChar(0x2118); // SCRIPT CAPITAL P // weierstrass
case 0xC4: return QChar(0x2297); // CIRCLED TIMES // circlemultiply
case 0xC5: return QChar(0x2295); // CIRCLED PLUS // circleplus
case 0xC6: return QChar(0x2205); // EMPTY SET // emptyset
case 0xC7: return QChar(0x2229); // INTERSECTION // intersection
case 0xC8: return QChar(0x222A); // UNION // union
case 0xC9: return QChar(0x2283); // SUPERSET OF // propersuperset
case 0xCA: return QChar(0x2287); // SUPERSET OF OR EQUAL TO // reflexsuperset
case 0xCB: return QChar(0x2284); // NOT A SUBSET OF // notsubset
case 0xCC: return QChar(0x2282); // SUBSET OF // propersubset
case 0xCD: return QChar(0x2286); // SUBSET OF OR EQUAL TO // reflexsubset
case 0xCE: return QChar(0x2208); // ELEMENT OF // element
case 0xCF: return QChar(0x2209); // NOT AN ELEMENT OF // notelement
case 0xD0: return QChar(0x2220); // ANGLE // angle
case 0xD1: return QChar(0x2207); // NABLA // gradient
case 0xD2: return QChar(0xF6DA); // REGISTERED SIGN SERIF // registerserif (CUS)
case 0xD3: return QChar(0xF6D9); // COPYRIGHT SIGN SERIF // copyrightserif (CUS)
case 0xD4: return QChar(0xF6DB); // TRADE MARK SIGN SERIF // trademarkserif (CUS)
case 0xD5: return QChar(0x220F); // N-ARY PRODUCT // product
case 0xD6: return QChar(0x221A); // SQUARE ROOT // radical
case 0xD7: return QChar(0x22C5); // DOT OPERATOR // dotmath
case 0xD8: return QChar(0x00AC); // NOT SIGN // logicalnot
case 0xD9: return QChar(0x2227); // LOGICAL AND // logicaland
case 0xDA: return QChar(0x2228); // LOGICAL OR // logicalor
case 0xDB: return QChar(0x21D4); // LEFT RIGHT DOUBLE ARROW // arrowdblboth
case 0xDC: return QChar(0x21D0); // LEFTWARDS DOUBLE ARROW // arrowdblleft
case 0xDD: return QChar(0x21D1); // UPWARDS DOUBLE ARROW // arrowdblup
case 0xDE: return QChar(0x21D2); // RIGHTWARDS DOUBLE ARROW // arrowdblright
case 0xDF: return QChar(0x21D3); // DOWNWARDS DOUBLE ARROW // arrowdbldown
case 0xE0: return QChar(0x25CA); // LOZENGE // lozenge
case 0xE1: return QChar(0x2329); // LEFT-POINTING ANGLE BRACKET // angleleft
case 0xE2: return QChar(0xF8E8); // REGISTERED SIGN SANS SERIF // registersans (CUS)
case 0xE3: return QChar(0xF8E9); // COPYRIGHT SIGN SANS SERIF // copyrightsans (CUS)
case 0xE4: return QChar(0xF8EA); // TRADE MARK SIGN SANS SERIF // trademarksans (CUS)
case 0xE5: return QChar(0x2211); // N-ARY SUMMATION // summation
case 0xE6: return QChar(0xF8EB); // LEFT PAREN TOP // parenlefttp (CUS)
case 0xE7: return QChar(0xF8EC); // LEFT PAREN EXTENDER // parenleftex (CUS)
case 0xE8: return QChar(0xF8ED); // LEFT PAREN BOTTOM // parenleftbt (CUS)
case 0xE9: return QChar(0xF8EE); // LEFT SQUARE BRACKET TOP // bracketlefttp (CUS)
case 0xEA: return QChar(0xF8EF); // LEFT SQUARE BRACKET EXTENDER // bracketleftex (CUS)
case 0xEB: return QChar(0xF8F0); // LEFT SQUARE BRACKET BOTTOM // bracketleftbt (CUS)
case 0xEC: return QChar(0xF8F1); // LEFT CURLY BRACKET TOP // bracelefttp (CUS)
case 0xED: return QChar(0xF8F2); // LEFT CURLY BRACKET MID // braceleftmid (CUS)
case 0xEE: return QChar(0xF8F3); // LEFT CURLY BRACKET BOTTOM // braceleftbt (CUS)
case 0xEF: return QChar(0xF8F4); // CURLY BRACKET EXTENDER // braceex (CUS)
case 0xF1: return QChar(0x232A); // RIGHT-POINTING ANGLE BRACKET // angleright
case 0xF2: return QChar(0x222B); // INTEGRAL // integral
case 0xF3: return QChar(0x2320); // TOP HALF INTEGRAL // integraltp
case 0xF4: return QChar(0xF8F5); // INTEGRAL EXTENDER // integralex (CUS)
case 0xF5: return QChar(0x2321); // BOTTOM HALF INTEGRAL // integralbt
case 0xF6: return QChar(0xF8F6); // RIGHT PAREN TOP // parenrighttp (CUS)
case 0xF7: return QChar(0xF8F7); // RIGHT PAREN EXTENDER // parenrightex (CUS)
case 0xF8: return QChar(0xF8F8); // RIGHT PAREN BOTTOM // parenrightbt (CUS)
case 0xF9: return QChar(0xF8F9); // RIGHT SQUARE BRACKET TOP // bracketrighttp (CUS)
case 0xFA: return QChar(0xF8FA); // RIGHT SQUARE BRACKET EXTENDER // bracketrightex (CUS)
case 0xFB: return QChar(0xF8FB); // RIGHT SQUARE BRACKET BOTTOM // bracketrightbt (CUS)
case 0xFC: return QChar(0xF8FC); // RIGHT CURLY BRACKET TOP // bracerighttp (CUS)
case 0xFD: return QChar(0xF8FD); // RIGHT CURLY BRACKET MID // bracerightmid (CUS)
case 0xFE: return QChar(0xF8FE); // RIGHT CURLY BRACKET BOTTOM // bracerightbt (CUS)
default : return QChar(c);
}
}