void KIconEditGrid::editPasteAsNew() { bool ok = false; const QImage *tmp = clipboardImage(ok); if(ok) { *img = *tmp; load(img); modified = true; //repaint(viewRect(), false); p = *img; emit changed(QPixmap(p)); emit sizechanged(numCols(), numRows()); emit colorschanged(numColors(), data()); emit newmessage(i18n("Done pasting")); } else { QString msg = i18n("Invalid pixmap data in clipboard!\n"); KMsgBox::message(this, i18n("Warning"), msg.data()); } delete tmp; }
void KColorGrid::fill( uint color) { gridcolors.fill(color); numcolors.resize(1); numcolors.at(0) = color; emit colorschanged(numcolors.size(), numcolors.data()); }
void KIconEditGrid::loadBlank( int w, int h ) { img->create(w, h, 32); img->fill(TRANSPARENT); setNumRows(h); setNumCols(w); fill(TRANSPARENT); emit sizechanged(numCols(), numRows()); emit colorschanged(numColors(), data()); }
void KColorGrid::updateColors() { numcolors.resize(0); for(int i = 0; i < (int)gridcolors.size(); i++) { uint col = gridcolors.at(i); if(!numcolors.contains(col)) numcolors.append(col); } emit colorschanged(numcolors.size(), numcolors.data()); }
void KIconEditGrid::load( QImage *image) { debug("KIconEditGrid::load"); setUpdatesEnabled(false); if(image != 0L) { *img = *fixTransparence(image); //*img = image->convertDepth(32); //img->setAlphaBuffer(true); } else { QString msg = i18n("There was an error loading a blank image.\n"); KMsgBox::message (this, i18n("Error"), msg.data()); return; } setNumRows(img->height()); setNumCols(img->width()); for(int y = 0; y < numRows(); y++) { uint *l = (uint*)img->scanLine(y); for(int x = 0; x < numCols(); x++, l++) { /* //uint gray = (qRgb(200, 200, 200) | OPAQUE_MASK); //uint bc = (TRANSPARENT | OPAQUE_MASK); //if(*l == gray || *l == bc || *l < 0xff000000) // this is a hack but I couldn't save it as transparent otherwise if(*l < 0xff000000 || *l == (TRANSPARENT|OPAQUE_MASK)) // this is a hack but I couldn't save it as transparent otherwise { *l = TRANSPARENT; } //debug("KIcnGrid::load: %d %%", (((y*ncols)+x)/imgsize) * 100); //debug("KIconEditGrid::load: RGB: %d %d %d", qRed(*l), qGreen(*l), qBlue(*l)); */ setColor((y*numCols())+x, *l, false); } //debug("Row: %d", y); kapp->processEvents(200); } updateColors(); emit sizechanged(numCols(), numRows()); emit colorschanged(numColors(), data()); emit changed(pixmap()); setUpdatesEnabled(true); emit needPainting(); //repaint(viewRect(), false); }
QImage *KIconEditGrid::getSelection(bool cut) { const QRect rect = pntarray.boundingRect(); int nx = 0, ny = 0, nw = 0, nh = 0; rect.rect(&nx, &ny, &nw, &nh); QImage *tmp = new QImage(nw, nh, 32); tmp->fill(TRANSPARENT); int s = pntarray.size(); //((rect.size().width()) * (rect.size().height())); for(int i = 0; i < s; i++) { int x = pntarray[i].x(); int y = pntarray[i].y(); if(img->valid(x, y) && rect.contains(QPoint(x, y))) { *((uint*)tmp->scanLine(y-ny) + (x-nx)) = *((uint*)img->scanLine(y) + x); if(cut) { *((uint*)img->scanLine(y) + x) = TRANSPARENT; setColor( (y*numCols()) + x, TRANSPARENT, false ); } } } QPointArray a(pntarray.copy()); pntarray.resize(0); drawPointArray(a, Mark); emit selecteddata(false); if(cut) { updateColors(); repaint(rect.x()*cellSize(), rect.y()*cellSize(), rect.width()*cellSize(), rect.height()*cellSize(), false); p = *img; emit changed(p); emit colorschanged(numColors(), data()); emit newmessage(i18n("Selected area cutted")); } else emit newmessage(i18n("Selected area copied")); return tmp; }
void KColorGrid::setColor( int colNum, uint col, bool update ) { //debug("KColorGrid::setColor"); uint oldcolor = gridcolors[colNum]; gridcolors[colNum] = col; if(!update) return; //debug("KColorGrid::setColor - before adding"); if(!numcolors.contains(col)) { //debug("KColorGrid::setColor() - adding %u - %d %d %d", // col, qRed(col), qGreen(col), qBlue(col)); numcolors.append(col); //debug("KColorGrid::setColor() - adding done %d", numcolors.size()-1); //numcolors++; emit addingcolor(col); } //debug("KColorGrid::setColor - before removing"); if(!gridcolors.contains(oldcolor)) { int idx = numcolors.find(oldcolor); if(idx != -1) { //debug("KColorGrid::setColor() - removing %u - %d %d %d", // oldcolor, qRed(oldcolor), qGreen(oldcolor), qBlue(oldcolor)); numcolors.remove(idx); //debug("KColorGrid::setColor() - removing done"); emit colorschanged(numcolors.size(), numcolors.data()); } //numcolors--; } //debug("KColorGrid::setColor - before updateCell"); repaint((colNum%numCols())*cellsize,(colNum/numCols())*cellsize, cellsize, cellsize); //updateCell( colNum/numCols(), colNum%numCols(), false ); //debug("KColorGrid::setColor - after updateCell"); }
void KColorGrid::setColor( int colNum, uint col, bool update ) { //kdDebug(4640) << "KColorGrid::setColor" << endl; uint oldcolor = gridcolors[colNum]; gridcolors[colNum] = col; if(!update) return; //kdDebug(4640) << "KColorGrid::setColor - before adding" << endl; if(!numcolors.contains(col)) { //kdDebug(4640) << "KColorGrid::setColor() - adding " << // col << " - " << qRed(col) << " " << qGreen(col) << " " << qBlue(col) << endl; numcolors.append(col); //kdDebug(4640) << "KColorGrid::setColor() - adding done " << numcolors.size()-1 << endl; //numcolors++; emit addingcolor(col); } //kdDebug(4640) << "KColorGrid::setColor - before removing" << endl; if(!gridcolors.contains(oldcolor)) { int idx = numcolors.find(oldcolor); if(idx != -1) { //kdDebug(4640) << "KColorGrid::setColor() - removing " << // oldcolor << " - " << qRed(oldcolor) << " " << qGreen(oldcolor) << " " << qBlue(oldcolor) << endl; numcolors.remove(idx); //kdDebug(4640) << "KColorGrid::setColor() - removing done" << endl; emit colorschanged(numcolors.size(), numcolors.data()); } //numcolors--; } //kdDebug(4640) << "KColorGrid::setColor - before updateCell" << endl; repaint((colNum%numCols())*cellsize,(colNum/numCols())*cellsize, cellsize, cellsize); //updateCell( colNum/numCols(), colNum%numCols(), false ); //kdDebug(4640) << "KColorGrid::setColor - after updateCell" << endl; }
void KIconEditGrid::editPaste(bool paste) { bool ok = false; const QImage *tmp = clipboardImage(ok); fixTransparence((QImage*)tmp); Properties *pprops = props(this); if(ok) { if( (tmp->size().width() > img->size().width()) || (tmp->size().height() > img->size().height()) ) { if(KMsgBox::yesNo(this, i18n("Warning"), i18n("The clipboard image is larger than the current image!\nPaste as new image?")) == 1) { editPasteAsNew(); } delete tmp; return; } else if(!paste) { ispasting = true; cbsize = tmp->size(); //debug("insrect size: %d x %d", insrect.width(), insrect.height()); return; emit newmessage(i18n("Pasting")); } else { //debug("KIconEditGrid: Pasting at: %d x %d", insrect.x(), insrect.y()); QApplication::setOverrideCursor(waitCursor); for(int y = insrect.y(), ny = 0; y < numRows(), ny < insrect.height(); y++, ny++) { uint *l = ((uint*)img->scanLine(y)+insrect.x()); uint *cl = (uint*)tmp->scanLine(ny); for(int x = insrect.x(), nx = 0; x < numCols(), nx < insrect.width(); x++, nx++, l++, cl++) { if(*cl != TRANSPARENT || pprops->pastetransparent) { *l = *cl; setColor((y*numCols())+x, (uint)*cl, false); } } } updateColors(); repaint(insrect.x()*cellSize(), insrect.y()*cellSize(), insrect.width()*cellSize(), insrect.height()*cellSize(), false); QApplication::restoreOverrideCursor(); modified = true; p = *img; emit changed(QPixmap(p)); emit sizechanged(numCols(), numRows()); emit colorschanged(numColors(), data()); emit newmessage(i18n("Done pasting")); } } else { QString msg = i18n("Invalid pixmap data in clipboard!\n"); KMsgBox::message(this, i18n("Warning"), msg.data()); } delete tmp; }