bool ContinuousColorRange::contains(const QVariant &v, bool inclusive) const { QColor clr; if( v.type() == QVariant::Double){ clr = ColorRangeBase::toColor(v.toULongLong(),defaultColorModel()); } else clr = v.value<QColor>(); if ( !clr.isValid()) return false; double component1a, component2a, component3a,component4a; double component1b, component2b, component3b,component4b; double component1c, component2c, component3c,component4c; QColor limit1,limit2; switch (defaultColorModel()) { case ColorRangeBase::cmRGBA : case ColorRangeBase::cmGREYSCALE: clr.getRgbF(&component1a, &component2a, &component3a); _limit1.getRgbF(&component1b, &component2b, &component3b); _limit2.getRgbF(&component1c, &component2c, &component3c); break; case ColorRangeBase::cmHSLA : clr.getHslF(&component1a, &component2a, &component3a); _limit1.getHslF(&component1b, &component2b, &component3b); _limit2.getHslF(&component1c, &component2c, &component3c); break; case ColorRangeBase::cmCYMKA: clr.getCmykF(&component1a, &component2a, &component3a,&component4a); limit1 = QColor(_limit1); limit2 = QColor(_limit2); limit1.getCmykF(&component1b, &component2b, &component3b, &component4b); limit2.getCmykF(&component1c, &component2c, &component3c, &component4c); break; default: break; } switch(defaultColorModel()){ case ColorRangeBase::cmGREYSCALE:{ bool isGrey = component1a == component2a && component1a == component3a; if (!isGrey) return false; } case ColorRangeBase::cmRGBA : case ColorRangeBase::cmHSLA : return component1a >= component1b && component1a <= component1c && component2a >= component2b && component2a <= component2c && component3a >= component3b && component3a <= component3c; case ColorRangeBase::cmCYMKA: return component1a >= component1b && component1a <= component1c && component2a >= component2b && component2a <= component2c && component3a >= component3b && component3a <= component3c && component4a >= component4b && component4a <= component4c; default: break; } return false; }
void tst_QColor::setCmyk() { QColor color; for (int A = 0; A <= USHRT_MAX; ++A) { { // 0-255 int a = A >> 8; color.setCmyk(0, 0, 0, 0, a); QCOMPARE(color.alpha(), a); int c, m, y, k, a2; color.getCmyk(&c, &m, &y, &k, &a2); QCOMPARE(a2, a); } { // 0.0-1.0 qreal a = A / qreal(USHRT_MAX); color.setCmykF(0.0, 0.0, 0.0, 0.0, a); QCOMPARE(color.alphaF(), a); qreal c, m, y, k, a2; color.getCmykF(&c, &m, &y, &k, &a2); QCOMPARE(a2, a); } } for (int C = 0; C <= USHRT_MAX; ++C) { { // 0-255 int c = C >> 8; color.setCmyk(c, 0, 0, 0, 0); QCOMPARE(color.cyan(), c); int c2, m, y, k, a; color.getCmyk(&c2, &m, &y, &k, &a); QCOMPARE(c2, c); } { // 0.0-1.0 qreal c = C / qreal(USHRT_MAX); color.setCmykF(c, 0.0, 0.0, 0.0, 0.0); QCOMPARE(color.cyanF(), c); qreal c2, m, y, k, a; color.getCmykF(&c2, &m, &y, &k, &a); QCOMPARE(c2, c); } } for (int M = 0; M <= USHRT_MAX; ++M) { { // 0-255 int m = M >> 8; color.setCmyk(0, m, 0, 0, 0); QCOMPARE(color.magenta(), m); int c, m2, y, k, a; color.getCmyk(&c, &m2, &y, &k, &a); QCOMPARE(m2, m); } { // 0.0-1.0 qreal m = M / qreal(USHRT_MAX); color.setCmykF(0.0, m, 0.0, 0.0, 0.0); QCOMPARE(color.magentaF(), m); qreal c, m2, y, k, a; color.getCmykF(&c, &m2, &y, &k, &a); QCOMPARE(m2, m); } } for (int Y = 0; Y <= USHRT_MAX; ++Y) { { // 0-255 int y = Y >> 8; color.setCmyk(0, 0, y, 0, 0); QCOMPARE(color.yellow(), y); int c, m, y2, k, a; color.getCmyk(&c, &m, &y2, &k, &a); QCOMPARE(y2, y); } { // 0.0-1.0 qreal y = Y / qreal(USHRT_MAX); color.setCmykF(0.0, 0.0, y, 0.0, 0.0); QCOMPARE(color.yellowF(), y); qreal c, m, y2, k, a; color.getCmykF(&c, &m, &y2, &k, &a); QCOMPARE(y2, y); } } for (int K = 0; K <= USHRT_MAX; ++K) { { // 0-255 int k = K >> 8; color.setCmyk(0, 0, 0, k, 0); QCOMPARE(color.black(), k); int c, m, y, k2, a; color.getCmyk(&c, &m, &y, &k2, &a); QCOMPARE(k2, k); } { // 0.0-1.0 qreal k = K / qreal(USHRT_MAX); color.setCmykF(0.0, 0.0, 0.0, k, 0.0); QCOMPARE(color.blackF(), k); qreal c, m, y, k2, a; color.getCmykF(&c, &m, &y, &k2, &a); QCOMPARE(k2, k); } } }