Esempio n. 1
0
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)));
    }
}
Esempio n. 2
0
void MessageBox::setSize( const QSize & size )
{
    if ( size != renderSize() )
    {
        setRenderSize( size );
        m_fontCached = false;
    }
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}