Exemplo 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)));
    }
}
Exemplo n.º 2
0
void BGDialog::desktopResized()
{
    for (int j = 0; j < m_renderer.size(); ++j) {
        KBackgroundRenderer *r = m_renderer[j];
        if (r->isActive())
            r->stop();
        r->desktopResized();
    }
    eRenderer()->start(true);
}
Exemplo n.º 3
0
void BGDialog::slotSecondaryColor(const QColor &color)
{
    KBackgroundRenderer *r = eRenderer();

    if (color == r->colorB())
        return;

    r->stop();
    r->setColorB(color);
    r->start(true);
    m_copyAllScreens = true;
    emit changed(true);
}
Exemplo n.º 4
0
void BGDialog::slotSetupMulti()
{
    KBackgroundRenderer *r = eRenderer();

    BGMultiWallpaperDialog dlg(r, window());
    if (dlg.exec() == QDialog::Accepted) {
        r->stop();
        m_slideShowRandom = r->multiWallpaperMode();
        r->setWallpaperMode(m_wallpaperPos);
        r->start(true);
        m_copyAllScreens = true;
        emit changed(true);
    }
}
Exemplo n.º 5
0
void BGDialog::slotWallpaperPos(int mode)
{
    KBackgroundRenderer *r = eRenderer();

    mode++;
    m_wallpaperPos = mode;

    if (mode == r->wallpaperMode())
        return;

    r->stop();
    r->setWallpaperMode(mode);
    r->start(true);
    m_copyAllScreens = true;
    emit changed(true);
}
Exemplo n.º 6
0
void
MyApplication::renderDone()
{
	desktop()->setBackgroundPixmap( renderer.pixmap() );
	desktop()->repaint( true );
	renderer.saveCacheFile();
	renderer.cleanup();
	for (unsigned i=0; i<renderer.numRenderers(); ++i)
	{
		KBackgroundRenderer * r = renderer.renderer(i);
		if (r->backgroundMode() == KBackgroundSettings::Program ||
		    (r->multiWallpaperMode() != KBackgroundSettings::NoMulti &&
		     r->multiWallpaperMode() != KBackgroundSettings::NoMultiRandom))
			return;
	}
	quit();
}
Exemplo n.º 7
0
void
MyApplication::renderDone()
{
    QPalette palette;
    palette.setBrush(desktop()->backgroundRole(), QBrush(renderer.pixmap()));
    desktop()->setPalette(palette);
    XClearWindow(QX11Info::display(), desktop()->winId());

    renderer.saveCacheFile();
    renderer.cleanup();
    for (unsigned i = 0; i < renderer.numRenderers(); ++i) {
        KBackgroundRenderer *r = renderer.renderer(i);
        if (r->backgroundMode() == KBackgroundSettings::Program ||
            (r->multiWallpaperMode() != KBackgroundSettings::NoMulti &&
             r->multiWallpaperMode() != KBackgroundSettings::NoMultiRandom))
            return;
    }
    quit();
}
Exemplo n.º 8
0
void BGDialog::slotAdvanced()
{
    KBackgroundRenderer *r = eRenderer();

    m_previewUpdates = false;
    BGAdvancedDialog dlg(r, window());

    if (!m_pMonitorArrangement->isEnabled()) {
        dlg.makeReadOnly();
        dlg.exec();
        return;
    }

#if 0
    if (m_pGlobals->limitCache())
        dlg.setCacheSize(m_pGlobals->cacheSize());
    else
        dlg.setCacheSize(0);
#endif

    if (!dlg.exec()) {
        m_previewUpdates = true;
        return;
    }

#if 0
    int cacheSize = dlg.cacheSize();
    if (cacheSize) {
        m_pGlobals->setCacheSize(cacheSize);
        m_pGlobals->setLimitCache(true);
    } else {
        m_pGlobals->setLimitCache(false);
    }
#endif

    r->stop();
    m_previewUpdates = true;
    r->start(true);

    updateUI();
    emit changed(true);
}
Exemplo n.º 9
0
void BGDialog::slotPreviewDone(int screen_done)
{
    if (!m_previewUpdates)
        return;

    KBackgroundRenderer *r = m_renderer[(m_eScreen>1) ? (screen_done+2) : m_eScreen];

    if (r->image().isNull())
        return;

    r->saveCacheFile();

    QPixmap pm = QPixmap::fromImage(r->image());

    if (m_eScreen == 0) {
        m_pMonitorArrangement->setPixmap(pm);
    } else if (m_eScreen == 1) {
        for (unsigned i = 0; i < m_pMonitorArrangement->numMonitors(); ++i)
            m_pMonitorArrangement->monitor(i)->setPreview(pm);
    } else {
        m_pMonitorArrangement->monitor(screen_done)->setPreview(pm);
    }
}
Exemplo n.º 10
0
void BGDialog::slotPattern(int pattern)
{
    KBackgroundRenderer *r = eRenderer();
    r->stop();
    bool bSecondaryEnabled = true;
    if (pattern < NR_PREDEF_PATTERNS) {
        if (pattern == 0) {
            r->setBackgroundMode(KBackgroundSettings::Flat);
            bSecondaryEnabled = false;
        } else {
            r->setBackgroundMode(pattern - 1 + KBackgroundSettings::HorizontalGradient);
        }
    } else {
        r->setBackgroundMode(KBackgroundSettings::Pattern);
        r->setPatternName(m_patterns[pattern - NR_PREDEF_PATTERNS]);
    }
    r->start(true);
    m_colorSecondary->setEnabled(bSecondaryEnabled);

    m_copyAllScreens = true;
    emit changed(true);
}
Exemplo n.º 11
0
void BGDialog::slotWallpaperTypeChanged(int i)
{
    KBackgroundRenderer *r = eRenderer();
    r->stop();

    // No picture
    if (i == m_buttonGroupBackground->id(m_radioNoPicture)) { //None
        m_urlWallpaperBox->setEnabled(false);
        m_urlWallpaperButton->setEnabled(false);
        m_buttonSetupWallpapers->setEnabled(false);
        m_comboWallpaperPos->setEnabled(false);
        m_lblWallpaperPos->setEnabled(false);
        r->setWallpaperMode(KBackgroundSettings::NoWallpaper);

        if (m_slideShowRandom == KBackgroundSettings::InOrder)
            r->setMultiWallpaperMode(KBackgroundSettings::NoMulti);
        else
            r->setMultiWallpaperMode(KBackgroundSettings::NoMultiRandom);

        setBlendingEnabled(false);
    }

    // Slide show
    else if (i == m_buttonGroupBackground->id(m_radioSlideShow)) {
        m_urlWallpaperBox->setEnabled(false);
        m_urlWallpaperButton->setEnabled(false);
        m_buttonSetupWallpapers->setEnabled(true);
        m_comboWallpaperPos->setEnabled(true);
        m_lblWallpaperPos->setEnabled(true);
        setBlendingEnabled(true);

        m_comboWallpaperPos->blockSignals(true);
        m_comboWallpaperPos->setCurrentIndex(m_wallpaperPos - 1);
        m_comboWallpaperPos->blockSignals(false);

        if (r->wallpaperList().count() == 0)
            r->setWallpaperMode(KBackgroundSettings::NoWallpaper);
        else
            r->setWallpaperMode(m_wallpaperPos);

        r->setMultiWallpaperMode(m_slideShowRandom);
        setWallpaper(r->wallpaper());
        setBlendingEnabled(true);
    }

    // 1 Picture
    else if (i == m_buttonGroupBackground->id(m_radioPicture)) {
        m_urlWallpaperBox->setEnabled(true);
        m_urlWallpaperButton->setEnabled(true);
        m_buttonSetupWallpapers->setEnabled(false);
        m_lblWallpaperPos->setEnabled(true);
        m_comboWallpaperPos->setEnabled(true);
        setBlendingEnabled(true);

        if (m_slideShowRandom == KBackgroundSettings::InOrder)
            r->setMultiWallpaperMode(KBackgroundSettings::NoMulti);
        else
            r->setMultiWallpaperMode(KBackgroundSettings::NoMultiRandom);

        int j = m_urlWallpaperBox->currentIndex();
        QString path;
        for (QMap<QString, int>::ConstIterator it = m_wallpaper.constBegin();
                it != m_wallpaper.constEnd();
                ++it) {
            if (it.value() == j) {
                path = it.key();
                break;
            }
        }

        KFileMetaInfo metaInfo(path);
        if (metaInfo.isValid() && metaInfo.item("Dimensions").isValid()) {
            // If the image is greater than 800x600 default to using scaled mode,
            // otherwise default to tiled.

            QSize s = metaInfo.item("Dimensions").value().toSize();
            if (s.width() >= 800 && s.height() >= 600)
                m_wallpaperPos = KBackgroundSettings::Scaled;
            else
                m_wallpaperPos = KBackgroundSettings::Tiled;
        } else if (KMimeType::findByPath(path)->is("image/svg+xml")) {
            m_wallpaperPos = KBackgroundSettings::Scaled;
        }

        r->setWallpaperMode(m_wallpaperPos);
        m_comboWallpaperPos->blockSignals(true);
        m_comboWallpaperPos->setCurrentIndex(m_wallpaperPos - 1);
        m_comboWallpaperPos->blockSignals(false);

        r->setWallpaper(path);
    }

    r->start(true);
    m_copyAllScreens = true;
    emit changed(true);
}
Exemplo n.º 12
0
void BGDialog::updateUI()
{
    KBackgroundRenderer *r = eRenderer();
    m_comboScreen->setCurrentIndex(m_eScreen);

    m_colorPrimary->setColor(r->colorA());
    m_colorSecondary->setColor(r->colorB());

    int wallpaperMode = r->wallpaperMode();
    int multiMode = r->multiWallpaperMode();

    if (r->backgroundMode() == KBackgroundSettings::Program &&
            wallpaperMode == KBackgroundSettings::NoWallpaper)
        groupBox3->setEnabled(false);
    else
        groupBox3->setEnabled(true);

    if ((multiMode == KBackgroundSettings::NoMultiRandom) ||
            (multiMode == KBackgroundSettings::NoMulti)) {
        // No wallpaper
        if (wallpaperMode == KBackgroundSettings::NoWallpaper) {
            if (!m_readOnly) {
                m_urlWallpaperBox->setEnabled(false);
                m_urlWallpaperButton->setEnabled(false);
                m_buttonSetupWallpapers->setEnabled(false);
                m_comboWallpaperPos->setEnabled(false);
                m_lblWallpaperPos->setEnabled(false);
            }
            m_buttonGroupBackground->setSelected(
                m_buttonGroupBackground->id(m_radioNoPicture));
        }

        // 1 Picture
        else {
            if (!m_readOnly) {
                m_urlWallpaperBox->setEnabled(true);
                m_urlWallpaperButton->setEnabled(true);
                m_buttonSetupWallpapers->setEnabled(false);
                m_comboWallpaperPos->setEnabled(true);
                m_lblWallpaperPos->setEnabled(true);
            }
            setWallpaper(r->wallpaper());
            m_buttonGroupBackground->setSelected(
                m_buttonGroupBackground->id(m_radioPicture));
        }
    }

    // Slide show
    else {
        if (!m_readOnly) {
            m_urlWallpaperBox->setEnabled(false);
            m_urlWallpaperButton->setEnabled(false);
            m_buttonSetupWallpapers->setEnabled(true);
            m_comboWallpaperPos->setEnabled(true);
            m_lblWallpaperPos->setEnabled(true);
        }
        m_buttonGroupBackground->setSelected(
            m_buttonGroupBackground->id(m_radioSlideShow));
    }

    m_comboWallpaperPos->setCurrentIndex(r->wallpaperMode() - 1);

    bool bSecondaryEnabled = true;
    m_comboPattern->blockSignals(true);
    switch (r->backgroundMode()) {
    case KBackgroundSettings::Flat:
        m_comboPattern->setCurrentIndex(0);
        bSecondaryEnabled = false;
        break;

    case KBackgroundSettings::Pattern: {
        int i = m_patterns.indexOf(r->KBackgroundPattern::name());
        if (i >= 0)
            m_comboPattern->setCurrentIndex(NR_PREDEF_PATTERNS + i);
        else
            m_comboPattern->setCurrentIndex(0);
    }
    break;

    case KBackgroundSettings::Program:
        m_comboPattern->setCurrentIndex(0);
        bSecondaryEnabled = false;
        break;

    default: // Gradient
        m_comboPattern->setCurrentIndex(
            1 + r->backgroundMode() - KBackgroundSettings::HorizontalGradient);
        break;
    }
    m_comboPattern->blockSignals(false);

    m_colorSecondary->setEnabled(bSecondaryEnabled && !m_readOnly);

    int mode = r->blendMode();

    m_comboBlend->blockSignals(true);
    m_sliderBlend->blockSignals(true);

    m_comboBlend->setCurrentIndex(mode);
    m_cbBlendReverse->setChecked(r->reverseBlending());
    m_sliderBlend->setValue(r->blendBalance() / 10);

    m_comboBlend->blockSignals(false);
    m_sliderBlend->blockSignals(false);

    // turn it off if there is no background picture set!
    setBlendingEnabled(wallpaperMode != KBackgroundSettings::NoWallpaper);

    // Start preview renderer(s)
    if (m_eScreen == 0) {
        r->setPreview(m_pMonitorArrangement->combinedPreviewSize());
        r->start(true);
    } else if (m_eScreen == 1) {
        r->setPreview(m_pMonitorArrangement->maxPreviewSize());
        r->start(true);
    } else {
        for (unsigned j = 0; j < m_numScreens; ++j) {
            m_renderer[j+2]->stop();
            m_renderer[j+2]->setPreview(m_pMonitorArrangement->monitor(j)->previewRect().size());
            m_renderer[j+2]->start(true);
        }
    }
}
Exemplo n.º 13
0
void BGDialog::defaults()
{
    m_pGlobals->setCommonScreenBackground(_defCommonScreen);
    m_pGlobals->setLimitCache(_defLimitCache);
    m_pGlobals->setCacheSize(_defCacheSize);
    m_comboWallpaperPos->setCurrentIndex(0);

    getEScreen();

    m_pGlobals->setDrawBackgroundPerScreen(false);

    KBackgroundRenderer *r = eRenderer();

    if (r->isActive())
        r->stop();

    if (QPixmap::defaultDepth() > 8)
        r->setBackgroundMode(_defBackgroundMode);
    else
        r->setBackgroundMode(KBackgroundSettings::Flat);

    r->setColorA(_defColorA);
    r->setColorB(_defColorB);
    r->setWallpaperMode(_defWallpaperMode);
    r->setMultiWallpaperMode(_defMultiMode);

    m_slideShowRandom = _defMultiMode;
    if (m_slideShowRandom == KBackgroundSettings::NoMultiRandom)
        m_slideShowRandom = KBackgroundSettings::Random;
    if (m_slideShowRandom == KBackgroundSettings::NoMulti)
        m_slideShowRandom = KBackgroundSettings::InOrder;

    r->setBlendMode(_defBlendMode);
    r->setBlendBalance(_defBlendBalance);
    r->setReverseBlending(_defReverseBlending);

    updateUI();

    m_copyAllScreens = true;
    emit changed(true);
}