void ScrPainter::setBrush(const libwpg::WPGBrush& brush) { ScColor tmp; ColorList::Iterator it; CurrColorFill = "Black"; CurrFillShade = 100.0; int Rc, Gc, Bc; if(brush.style == libwpg::WPGBrush::Solid) { Rc = brush.foreColor.red; Gc = brush.foreColor.green; Bc = brush.foreColor.blue; tmp.setColorRGB(Rc, Gc, Bc); tmp.setSpotColor(false); tmp.setRegistrationColor(false); QString newColorName = "FromWPG"+tmp.name(); QString fNam = m_Doc->PageColors.tryAddColor(newColorName, tmp); if (fNam == newColorName) importedColors.append(newColorName); CurrColorFill = fNam; CurrFillTrans = brush.foreColor.alpha / 255.0; } else if (brush.style == libwpg::WPGBrush::Gradient) { gradientAngle = brush.gradient.angle(); isGradient = true; currentGradient = VGradient(VGradient::linear); currentGradient.clearStops(); for(unsigned c = 0; c < brush.gradient.count(); c++) { QString currStopColor = CommonStrings::None; Rc = brush.gradient.stopColor(c).red; Gc = brush.gradient.stopColor(c).green; Bc = brush.gradient.stopColor(c).blue; tmp.setColorRGB(Rc, Gc, Bc); tmp.setSpotColor(false); tmp.setRegistrationColor(false); QString newColorName = "FromWPG"+tmp.name(); QString fNam = m_Doc->PageColors.tryAddColor(newColorName, tmp); if (fNam == newColorName) importedColors.append(newColorName); currStopColor = fNam; const ScColor& gradC = m_Doc->PageColors[currStopColor]; double pos = qBound(0.0, fabs(brush.gradient.stopOffset(c)), 1.0); currentGradient.addStop( ScColorEngine::getRGBColor(gradC, m_Doc), pos, 0.5, 1.0, currStopColor, 100 ); } } else if (brush.style == libwpg::WPGBrush::NoBrush) CurrColorFill = CommonStrings::None; fillSet = true; }
void ScrPainter::setPen(const libwpg::WPGPen& pen) { LineW = 72 * pen.width; ScColor tmp; ColorList::Iterator it; CurrColorStroke = "Black"; CurrStrokeShade = 100.0; int Rc, Gc, Bc; Rc = pen.foreColor.red; Gc = pen.foreColor.green; Bc = pen.foreColor.blue; tmp.setColorRGB(Rc, Gc, Bc); tmp.setSpotColor(false); tmp.setRegistrationColor(false); QString newColorName = "FromWPG"+tmp.name(); QString fNam = m_Doc->PageColors.tryAddColor(newColorName, tmp); if (fNam == newColorName) importedColors.append(newColorName); CurrColorStroke = fNam; CurrStrokeTrans = pen.foreColor.alpha / 255.0; if(!pen.solid) { dashArray.clear(); for(unsigned i = 0; i < pen.dashArray.count(); i++) { dashArray.append(pen.dashArray.at(i)*LineW); } } switch (pen.joinstyle) { case 1: lineJoin = Qt::BevelJoin; break; case 2: lineJoin = Qt::MiterJoin; break; case 3: lineJoin = Qt::RoundJoin; break; default: lineJoin = Qt::MiterJoin; break; } switch (pen.capstyle) { case 0: lineEnd = Qt::FlatCap; break; case 1: lineEnd = Qt::RoundCap; break; case 2: lineEnd = Qt::SquareCap; break; default: lineEnd = Qt::FlatCap; break; } strokeSet = true; }
ScColor ScColorEngine::convertToModel(const ScColor& color, const ScribusDoc* doc, colorModel model) { colorModel oldModel = color.getColorModel(); if( oldModel == model ) return ScColor(color); ScColor newCol; if (model == colorModelRGB) { RGBColor rgb; getRGBValues(color, doc, rgb); newCol.setColorRGB(rgb.r, rgb.g, rgb.b); } else if (model == colorModelCMYK) { CMYKColor cmyk; getCMYKValues(color, doc, cmyk); newCol.setColor(cmyk.c, cmyk.m, cmyk.y, cmyk.k); } else if (model == colorModelLab) { ScColorMgmtEngine engine(ScCore->defaultEngine); if (oldModel == colorModelRGB) { ScColorProfile profRGB = doc ? doc->DocInputRGBProf : ScCore->defaultRGBProfile; ScColorProfile profLab = ScCore->defaultLabProfile; ScColorTransform trans = engine.createTransform(profRGB, Format_RGB_16, profLab, Format_Lab_Dbl, Intent_Perceptual, 0); double outC[3]; unsigned short inC[3]; inC[0] = color.CR * 257; inC[1] = color.MG * 257; inC[2] = color.YB * 257; trans.apply(inC, outC, 1); newCol.setColor(outC[0], outC[1], outC[2]); } else { ScColorProfile profRGB = doc ? doc->DocInputCMYKProf : ScCore->defaultCMYKProfile; ScColorProfile profLab = ScCore->defaultLabProfile; ScColorTransform trans = engine.createTransform(profRGB, Format_CMYK_16, profLab, Format_Lab_Dbl, Intent_Perceptual, 0); double outC[3]; unsigned short inC[4]; inC[0] = color.CR * 257; inC[1] = color.MG * 257; inC[2] = color.YB * 257; inC[3] = color.K * 257; trans.apply(inC, outC, 1); newCol.setColor(outC[0], outC[1], outC[2]); } } return newCol; }
void XtgScanner::defColor() { bool isSpot = false; ScColor tmp; enterState(stringMode); token = getToken(); while (lookAhead() != '>' ) { token = getToken(); if ((token == "CMJN") || (token == "CMYK")) { enterState(tagMode); token = getToken(); if (token == "S") { token = getToken(); isSpot = true; } double c = getToken().toDouble(); double m = getToken().toDouble(); double y = getToken().toDouble(); double k = getToken().toDouble(); tmp.setColor(qRound(c * 2.55), qRound(m * 255), qRound(y * 255), qRound(k * 255)); tmp.setSpotColor(isSpot); tmp.setRegistrationColor(false); doc->PageColors.tryAddColor(sfcName, tmp); } else if (token == "RGB") { enterState(tagMode); token = getToken(); if (token == "S") { token = getToken(); isSpot = true; } double r = getToken().toDouble(); double g = getToken().toDouble(); double b = getToken().toDouble(); tmp.setColorRGB(qRound(r * 2.55), qRound(g * 255), qRound(b * 255)); tmp.setSpotColor(isSpot); tmp.setRegistrationColor(false); doc->PageColors.tryAddColor(sfcName, tmp); } } top++; enterState(textMode); }
ScColor ScColorEngine::convertToModel(const ScColor& color, const ScribusDoc* doc, colorModel model) { colorModel oldModel = color.getColorModel(); if( oldModel == model ) return ScColor(color); ScColor newCol; if( model == colorModelRGB ) { RGBColor rgb; getRGBValues(color, doc, rgb); newCol.setColorRGB(rgb.r, rgb.g, rgb.b); } else { CMYKColor cmyk; getCMYKValues(color, doc, cmyk); newCol.setColor(cmyk.c, cmyk.m, cmyk.y, cmyk.k); } return newCol; }
CWDialog::CWDialog(QWidget* parent, ScribusDoc* doc, const char* name, bool modal) : QDialog (parent), m_Doc(doc) { setupUi(this); setObjectName(name); setModal(modal); int h, s, v; ScColor color; QString colorName; connectSlots(false); // setup combobox typeCombo->addItem(colorWheel->getTypeDescription(colorWheel->Monochromatic), colorWheel->Monochromatic); typeCombo->addItem(colorWheel->getTypeDescription(colorWheel->Analogous), colorWheel->Analogous); typeCombo->addItem(colorWheel->getTypeDescription(colorWheel->Complementary), colorWheel->Complementary); typeCombo->addItem(colorWheel->getTypeDescription(colorWheel->Split), colorWheel->Split); typeCombo->addItem(colorWheel->getTypeDescription(colorWheel->Triadic), colorWheel->Triadic); typeCombo->addItem(colorWheel->getTypeDescription(colorWheel->Tetradic), colorWheel->Tetradic); // defects defectCombo->addItem(CommonStrings::trVisionNormal); defectCombo->addItem(CommonStrings::trVisionProtanopia); defectCombo->addItem(CommonStrings::trVisionDeuteranopia); defectCombo->addItem(CommonStrings::trVisionTritanopia); defectCombo->addItem(CommonStrings::trVisionFullColorBlind); // document colors documentColorList->updateBox(m_Doc->PageColors, ColorListBox::fancyPixmap); // preferences prefs = PrefsManager::instance()->prefsFile->getPluginContext("colorwheel"); typeCombo->setCurrentIndex(prefs->getInt("cw_type", 0)); angleSpin->setValue(prefs->getInt("cw_angle", 15)); colorWheel->currentDoc = m_Doc; colorWheel->angle = angleSpin->value(); colorWheel->baseAngle = prefs->getInt("cw_baseangle", 0); colorspaceTab->setCurrentIndex(prefs->getInt("cw_space", 0)); color.setNamedColor(prefs->get("cw_color", "#00000000")); // Handle color previously selected in the document tab if (colorspaceTab->currentWidget() == tabDocument) { colorName = prefs->get("cw_colorname", ""); if (!colorName.isEmpty() && m_Doc->PageColors.contains(colorName)) color = m_Doc->PageColors[colorName]; else color.setColorRGB(0, 0, 0); //Trigger use of defaults } // Handle achromatic colors QColor rgb = ScColorEngine::getRGBColor(color, m_Doc); rgb.getHsv(&h, &s, &v); if (h == -1) { // Reset to defaults colorWheel->baseAngle = 0; colorWheel->currentColorSpace = colorModelCMYK; colorWheel->actualColor = colorWheel->colorByAngle(0); colorspaceTab->setCurrentIndex(0); } else if (colorspaceTab->currentWidget() == tabDocument) { colorWheel->actualColor = color; QList<QListWidgetItem*> results = documentColorList->findItems(colorName, Qt::MatchFixedString|Qt::MatchCaseSensitive); if (results.count() > 0) documentColorList->setCurrentItem(results[0]); } else colorWheel->actualColor = color; resize(QSize(prefs->getInt("cw_width", 640), prefs->getInt("cw_height", 480)).expandedTo(minimumSizeHint())); previewLabel->resize(prefs->getInt("cw_samplex", 300), prefs->getInt("cw_sampley", 100)); // setup colorspaceTab_currentChanged(colorspaceTab->currentIndex()); // signals and slots that cannot be in ui file connect(colorWheel, SIGNAL(clicked(int, const QPoint&)), this, SLOT(colorWheel_clicked(int, const QPoint&))); connect(documentColorList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(documentColorList_currentChanged(QListWidgetItem *))); connect(colorList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(colorList_currentChanged(QListWidgetItem *))); connect(angleSpin, SIGNAL(valueChanged(int)), this, SLOT(angleSpin_valueChanged(int))); connect(colorspaceTab, SIGNAL(currentChanged(int)), this, SLOT(colorspaceTab_currentChanged(int))); connect(typeCombo, SIGNAL(activated(int)), this, SLOT(typeCombo_activated(int))); connect(defectCombo, SIGNAL(activated(int)), this, SLOT(defectCombo_activated(int))); connect(addButton, SIGNAL(clicked()), this, SLOT(addButton_clicked())); connect(replaceButton, SIGNAL(clicked()), this, SLOT(replaceButton_clicked())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelButton_clicked())); connectSlots(true); }
void CMYKChoose::setColor() { int c, m, y; int h, s, v; int k = 0; double L, a, b; ScColor tmp; if (Farbe.getColorModel() == colorModelCMYK) { c = qRound(CyanSp->value() * 2.55); m = qRound(MagentaSp->value() * 2.55); y = qRound(YellowSp->value() * 2.55); k = qRound(BlackSp->value() * 2.55); tmp.setColor(c, m, y, k); Farbe = tmp; if (dynamic) { CyanSL->setPalette(sliderPix(180)); MagentaSL->setPalette(sliderPix(300)); YellowSL->setPalette(sliderPix(60)); BlackSL->setPalette(sliderBlack()); } BlackComp = k; ScColorEngine::getRGBColor(tmp, m_doc).getHsv(&h, &s, &v); ColorMap->drawPalette(v); ColorMap->setMark(h, s); } else if (Farbe.getColorModel() == colorModelRGB) { c = qRound(CyanSp->value()); m = qRound(MagentaSp->value()); y = qRound(YellowSp->value()); k = qRound(BlackSp->value()); if (Wsave) { blockSignals(true); c = c / 51 * 51; m = m / 51 * 51; y = y / 51 * 51; CyanSp->setValue(c); MagentaSp->setValue(m); YellowSp->setValue(y); CyanSL->setValue(c * 1000.0); MagentaSL->setValue(m * 1000.0); YellowSL->setValue(y * 1000.0); blockSignals(false); } tmp.setColorRGB(c, m, y); QColor tmp2 = QColor(c, m, y); tmp2.getHsv(&h, &s, &v); BlackComp = 255 - v; Farbe = tmp; if (dynamic) { CyanSL->setPalette(sliderPix(0)); MagentaSL->setPalette(sliderPix(120)); YellowSL->setPalette(sliderPix(240)); } BlackComp = k; ScColorEngine::getRGBColor(tmp, m_doc).getHsv(&h, &s, &v); ColorMap->drawPalette(v); ColorMap->setMark(h, s); } else if (Farbe.getColorModel() == colorModelLab) { double Lalt; Farbe.getLab(&Lalt, &a, &b); if (isHLC) { L = MagentaSp->value(); double cv = 360 - CyanSp->value(); double yv = YellowSp->value(); QLineF lin = QLineF::fromPolar(yv, cv); a = lin.p2().x(); b = lin.p2().y(); } else { L = CyanSp->value(); a = MagentaSp->value(); b = YellowSp->value(); } tmp.setColor(L, a, b); Farbe = tmp; if (dynamic) { CyanSL->setPalette(sliderPix(0)); MagentaSL->setPalette(sliderPix(120)); YellowSL->setPalette(sliderPix(240)); } BlackComp = qRound(L * 2.55); if (L != Lalt) ColorMap->drawPalette(L * 2.55); ColorMap->setMark(a, b); } imageN.fill(ScColorEngine::getDisplayColor(tmp, m_doc) ); if ( ScColorEngine::isOutOfGamut(tmp, m_doc) ) paintAlert(alertIcon, imageN, 2, 2, false); NewC->setPixmap( imageN ); }
void ColorSetManager::initialiseDefaultPrefs(struct ApplicationPrefs& appPrefs) { QString defaultSwatch = ScPaths::instance().shareDir() + "swatches/" + "Scribus_Basic.xml"; QFile fiC(defaultSwatch); if (!fiC.exists()) { appPrefs.colorPrefs.DColors.insert("White", ScColor(0, 0, 0, 0)); appPrefs.colorPrefs.DColors.insert("Black", ScColor(0, 0, 0, 255)); ScColor cc = ScColor(255, 255, 255, 255); cc.setRegistrationColor(true); appPrefs.colorPrefs.DColors.insert("Registration", cc); appPrefs.colorPrefs.DColors.insert("Blue", ScColor(255, 255, 0, 0)); appPrefs.colorPrefs.DColors.insert("Cyan", ScColor(255, 0, 0, 0)); appPrefs.colorPrefs.DColors.insert("Green", ScColor(255, 0, 255, 0)); appPrefs.colorPrefs.DColors.insert("Red", ScColor(0, 255, 255, 0)); appPrefs.colorPrefs.DColors.insert("Yellow", ScColor(0, 0, 255, 0)); appPrefs.colorPrefs.DColors.insert("Magenta", ScColor(0, 255, 0, 0)); appPrefs.colorPrefs.DColorSet = "Scribus_Small"; } else { if (fiC.open(QIODevice::ReadOnly)) { QString ColorEn, Cname; int Rval, Gval, Bval; QTextStream tsC(&fiC); ColorEn = tsC.readLine(); if (ColorEn.startsWith("<?xml version=")) { QByteArray docBytes(""); loadRawText(defaultSwatch, docBytes); QString docText(""); docText = QString::fromUtf8(docBytes); QDomDocument docu("scridoc"); docu.setContent(docText); ScColor lf = ScColor(); QDomElement elem = docu.documentElement(); QDomNode PAGE = elem.firstChild(); while(!PAGE.isNull()) { QDomElement pg = PAGE.toElement(); if(pg.tagName()=="COLOR" && pg.attribute("NAME")!=CommonStrings::None) { if (pg.hasAttribute("CMYK")) lf.setNamedColor(pg.attribute("CMYK")); else lf.fromQColor(QColor(pg.attribute("RGB"))); if (pg.hasAttribute("Spot")) lf.setSpotColor(static_cast<bool>(pg.attribute("Spot").toInt())); else lf.setSpotColor(false); if (pg.hasAttribute("Register")) lf.setRegistrationColor(static_cast<bool>(pg.attribute("Register").toInt())); else lf.setRegistrationColor(false); appPrefs.colorPrefs.DColors.insert(pg.attribute("NAME"), lf); } PAGE=PAGE.nextSibling(); } } else { while (!tsC.atEnd()) { ColorEn = tsC.readLine(); QTextStream CoE(&ColorEn, QIODevice::ReadOnly); CoE >> Rval; CoE >> Gval; CoE >> Bval; CoE >> Cname; ScColor tmp; tmp.setColorRGB(Rval, Gval, Bval); appPrefs.colorPrefs.DColors.insert(Cname, tmp); } } fiC.close(); } appPrefs.colorPrefs.DColorSet = ScPaths::instance().shareDir() + "swatches/" + "Scribus Basic"; }