void KVirtualBGRenderer::initRenderers() { KConfigGroup cg(m_pConfig, "Background Common"); // Same config for each screen? // FIXME: Could use same renderer for identically-sized screens. m_bCommonScreen = cg.readEntry("CommonScreen", _defCommonScreen); // Do not split one big image over all screens? m_bDrawBackgroundPerScreen = cg.readEntry("DrawBackgroundPerScreen_0", _defDrawBackgroundPerScreen); m_numRenderers = m_bDrawBackgroundPerScreen ? QApplication::desktop()->numScreens() : 1; m_bFinished.resize(m_numRenderers); m_bFinished.fill(false); if (m_numRenderers == m_renderer.size()) return; qDeleteAll(m_renderer); m_renderer.resize(m_numRenderers); for (int i = 0; i < m_numRenderers; i++) { int eScreen = m_bCommonScreen ? 0 : i; KBackgroundRenderer *r = new KBackgroundRenderer(eScreen, m_bDrawBackgroundPerScreen, m_pConfig); m_renderer.insert(i, r); r->setSize(renderSize(i)); connect(r, SIGNAL(imageDone(int)), SLOT(screenDone(int))); } }
void MessageBox::setSize( const QSize & size ) { if ( size != renderSize() ) { setRenderSize( size ); m_fontCached = false; } }
void BombExplosionItem::updateGraphics(qreal svgScaleFactor) { if(scene()->views().isEmpty()) { return; } //calculate the size of the item on the view QPoint viewTopLeft = scene()->views().first()->mapFromScene(0, 0); QPoint viewBottomRight = scene()->views().first()->mapFromScene(m_itemSizeSet.width(), m_itemSizeSet.height()); int viewWidth = viewBottomRight.x() - viewTopLeft.x(); int viewHeight = viewBottomRight.y() - viewTopLeft.y(); //for better alignment, if the item size is different from the cell size, make the difference between the cell size and item size always even if(m_itemSizeSet.width() != Granatier::CellSize || m_itemSizeSet.height() != Granatier::CellSize) { viewBottomRight = scene()->views().first()->mapFromScene(Granatier::CellSize, Granatier::CellSize); int viewCellWidth = viewBottomRight.x() - viewTopLeft.x(); int viewCellHeight = viewBottomRight.y() - viewTopLeft.y(); if((viewCellWidth - viewWidth) % 2 != 0) { viewWidth--; } if((viewCellHeight - viewHeight) % 2 != 0) { viewHeight--; } //calculate the real item size after change of the render size QPointF sceneTopLeft = scene()->views().first()->mapToScene(0, 0); QPointF sceneBottomRight = scene()->views().first()->mapToScene(viewWidth, viewHeight); qreal sceneWidth = sceneBottomRight.x() - sceneTopLeft.x(); qreal sceneHeight = sceneBottomRight.y() - sceneTopLeft.y(); m_itemSizeReal = QSize(sceneWidth, sceneHeight); } setRenderSize(QSize(viewWidth, viewHeight)); setScale(svgScaleFactor); m_svgScaleFactor = svgScaleFactor; QTransform transform; transform.translate(m_itemSizeSet.width() / 2.0, m_itemSizeSet.height() / 2.0); setRenderSize(renderSize()); transform.translate(-m_itemSizeReal.width() / 2.0, -m_itemSizeReal.height() / 2.0); setTransform(transform); }
QSize MessageBox::size() const { return renderSize(); }
/*! \fn HbSgimageIconProcessor::createSgimage() ToDO \a iconPath the path to the icon file */ bool HbSgimageIconProcessor::createSgimage(const QString &iconPath) { bool isDefaultSize = iconKey.size.isNull(); data.type = INVALID_FORMAT; HbIconSource *source = HbThemeServerUtils::getIconSource(iconPath); QByteArray *sourceByteArray = source->byteArray(); if( !sourceByteArray ) { return false; } byteArray = *sourceByteArray; QSizeF size = source->defaultSize(); defaultSize = size.toSize(); QSizeF renderSize(defaultSize); data.sgImageData.defaultWidth = defaultSize.width(); data.sgImageData.defaultHeight = defaultSize.height(); if (!isDefaultSize) { renderSize.scale(iconKey.size, iconKey.aspectRatioMode); } data.sgImageData.width = renderSize.width(); data.sgImageData.height = renderSize.height(); //SgDriver is opened only once for the themserver process when the themserver is started. //Also eglInitialize is done only once for the theserver process //It is closed only when the themeserver is closed. // Create RSgImage, specifying ESgUsageBitOpenVgImage and ESgUsageBitOpenVgSurface // usage bits so it can be used as a target for OpenVG rendering inside the Theme // Server and as an OpenVG image inside the client applications. TSgImageInfo info; info.iSizeInPixels = TSize(data.sgImageData.width, data.sgImageData.height); info.iPixelFormat = ESgPixelFormatARGB_8888_PRE; info.iUsage = ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface; QScopedPointer<RSgImage, HbSgImageClosure> tempSgImage(new RSgImage); RSgImage *sgImage = tempSgImage.data(); Q_CHECK_PTR(sgImage); TInt err = sgImage->Create(info, 0, 0); if (err != KErrNone) { return false; } TSgDrawableId sgImageId = sgImage->Id(); memcpy(&data.sgImageData.id, &sgImageId.iId, sizeof(data.sgImageData.id)); data.type = SGIMAGE; bool success = sgImageRenderer->beginRendering(sgImage); if (!success) { return false; } VGfloat color[4] = { 0.0f, 1.0f, 1.0f, 0.0f }; // TODO revert back to white color vgSetfv(VG_CLEAR_COLOR, 4, color); vgClear(0, 0, data.sgImageData.width, data.sgImageData.height); success = renderNvg(byteArray, QRect(0, 0, data.sgImageData.width, data.sgImageData.height), iconKey.aspectRatioMode, iconKey.mirrored); if (!success) { return false; } vgFinish(); // Once finished, release all handles to the image, and shut down EGL. // Make a null EGLSurface current to release the current surface before // destroying. The RSgImage contents will persist until the RSgImage is closed. sgImageRenderer->endRendering(); tempSgImage.take(); HbSgImageRenderer::addSgImageToHash(data.sgImageData.id, sgImage); return true; }