Esempio n. 1
0
void KivioBaseTargetStencil::paintConnectorTargets( KivioIntraStencilData *pData )
{
    QPixmap *targetPic;
    KivioPainter *painter;
    double x, y;

    // We don't draw these if we are selected!!!
    if( isSelected() == true )
        return;

    // Obtain the graphic used for KivioConnectorTargets
    targetPic = KivioConfig::config()->connectorTargetPixmap();


    KoZoomHandler* zoomHandler = pData->zoomHandler;
    painter = pData->painter;

    KivioConnectorTarget *pTarget;
    pTarget = m_pTargets->first();
    while( pTarget )
    {
        x = zoomHandler->zoomItX(pTarget->x());
        y = zoomHandler->zoomItY(pTarget->y());

        painter->drawPixmap( x-3, y-3, *targetPic );

        pTarget = m_pTargets->next();
    }
}
Esempio n. 2
0
void KivioStencil::paintSelectionHandles( KivioIntraStencilData *pData )
{
  int newX, newY, newW, newH;

  // Handle Width
  //const double HW = 6.0f;
  //const double HWP1 = HW+1.0f;

  // Handle Width Over 2
  //const double HWo2 = HW/2.0f;

  KoZoomHandler* zoomHandler = pData->zoomHandler;

  KivioPainter *painter = pData->painter;

  newX = zoomHandler->zoomItX(m_x - qRound(lineWidth() / 2));
  newY = zoomHandler->zoomItY(m_y - qRound(lineWidth() / 2));
  newW = zoomHandler->zoomItX(m_w + lineWidth() + 1);
  newH = zoomHandler->zoomItY(m_h + lineWidth() + 1);

  painter->saveState();
  painter->setTranslation(newX, newY);
  rotatePainter(pData);  // Rotate the painter if needed

  painter->drawSelectionBox(QRect(0, 0, newW, newH));

  // top left, top right, bottom left, bottom right
  if( m_pProtection->at( kpWidth ) ||
    m_pProtection->at( kpHeight ) )
  {
    painter->drawHandle( 0, 0,  KivioPainter::cpfLock );
    painter->drawHandle( newW, 0, KivioPainter::cpfLock );
    painter->drawHandle( 0, newH, KivioPainter::cpfLock );
    painter->drawHandle( newW, newH, KivioPainter::cpfLock );
  }
  else
  {
    painter->drawHandle( 0, 0, 0 );
    painter->drawHandle( newW, 0, 0 );
    painter->drawHandle( 0, newH, 0 );
    painter->drawHandle( newW, newH, 0 );
  }

  // Top/bottom
  if( m_pProtection->at( kpHeight ) ||
    m_pProtection->at( kpAspect ) )
  {
    painter->drawHandle( newW / 2, 0, KivioPainter::cpfLock );
    painter->drawHandle( newW / 2, newH, KivioPainter::cpfLock );
  }
  else
  {
    painter->drawHandle( newW / 2, 0, 0 );
    painter->drawHandle( newW / 2, newH, 0 );
  }

    // left, right
  if( m_pProtection->at( kpWidth ) ||
    m_pProtection->at( kpAspect ) )
  {
    painter->drawHandle( 0, newH / 2, KivioPainter::cpfLock );
    painter->drawHandle( newW, newH / 2, KivioPainter::cpfLock );
  }
  else
  {
    painter->drawHandle( 0, newH / 2, 0 );
    painter->drawHandle( newW, newH / 2, 0 );
  }
  painter->restoreState();
}
Esempio n. 3
0
KoFilter::ConversionStatus ImageExport::convert(const QByteArray& from, const QByteArray& to)
{
  if(from != "application/x-kivio") {
    return KoFilter::BadMimeType;
  }

  QString format;

  if(to == "image/png") {
    format = "PNG";
  } else if(to == "image/jpeg") {
    format = "JPEG";
  } else if(to == "image/bmp") {
    format = "BMP";
  } else if(to == "image/x-eps") {
    format = "EPS";
  } else if(to == "image/x-portable-bitmap") {
    format = "PBM";
  } else if(to == "image/x-pcx") {
    format = "PCX";
  } else if(to == "image/x-portable-pixmap") {
    format = "PPM";
  } else if(to == "image/x-rgb") {
    format = "RGB";
  } else if(to == "image/x-xpixmap") {
    format = "XPM";
  } else if(to == "image/jpeg2000") {
    format = "JP2";
  } else {
    return KoFilter::BadMimeType;
  }

  KoStoreDevice* storeIn = m_chain->storageFile("root", KoStore::Read);

  if (!storeIn) {
    KMessageBox::error(0, i18n("Failed to read data."), i18n( "Export Error" ));
    return KoFilter::FileNotFound;
  }

  // Get the XML tree.
  QDomDocument domIn;
  domIn.setContent(storeIn);

  KivioDoc doc;

  if(!doc.loadXML(0, domIn)) {
    KMessageBox::error(0, i18n("Malformed XML data."), i18n("Export Error"));
    return KoFilter::WrongFormat;
  }

  ImageExportDialog dlg;

  QStringList pageNames;
  Q3PtrList<KivioPage> pageList = doc.map()->pageList();
  Q3PtrListIterator<KivioPage> it(pageList);

  for(; it.current() != 0; ++it) {
    pageNames.append(it.current()->pageName());
  }

  KoZoomHandler zoom;

  dlg.setPageList(pageNames);
  KivioPage* page = doc.map()->firstPage();
  QSize size = QSize(zoom.zoomItX(page->paperLayout().ptWidth), zoom.zoomItY(page->paperLayout().ptHeight));
  dlg.setInitialCustomSize(size);

  if(dlg.exec() != QDialog::Accepted) {
    return KoFilter::UserCancelled;
  }

  page = doc.map()->findPage(dlg.selectedPage());

  if(!page) {
    kDebug() <<"The page named" << dlg.selectedPage() <<" wasn't found!!";
    return KoFilter::InternalError;
  }

  if(dlg.usePageBorders()) {
    size = QSize(zoom.zoomItX(page->paperLayout().ptWidth), zoom.zoomItY(page->paperLayout().ptHeight));
  } else {
    size = zoom.zoomSize(page->getRectForAllStencils().size());
  }

  if(dlg.useCustomSize()) {
    QSize customSize = dlg.customSize();
    float zw = (float)customSize.width() / (float)size.width();
    float zh = (float)customSize.height() / (float)size.height();
    float z = qMin(zw, zh);

    zoom.setZoomAndResolution(qRound(z * 100), KoGlobal::dpiX(), KoGlobal::dpiY());
    size = customSize;
  }

  int border = dlg.margin();

  size.setWidth(size.width() + (border * 2));
  size.setHeight(size.height() + (border * 2));

  QPixmap pixmap = QPixmap(size);
  pixmap.fill(Qt::white);
  KivioScreenPainter kpainter;
  kpainter.start(&pixmap);

  int translationX = border;
  int translationY = border;

  if(!dlg.usePageBorders()) {
    QPoint point = zoom.zoomPoint(page->getRectForAllStencils().topLeft());
    translationX += point.x();
    translationY += point.y();
  }

  kpainter.setTranslation(-translationX, -translationY);
  page->printContent(kpainter, &zoom);

  if(!pixmap.save(m_chain->outputFile(), format.local8Bit())) {
    return KoFilter::CreationError;
  }

  return KoFilter::OK;
}