Skip to content

Commit

Permalink
Expose layer opacity and blend mode control for vector tile layers
Browse files Browse the repository at this point in the history
This was always supported, just never exposed for user control!
  • Loading branch information
nyalldawson committed Apr 1, 2023
1 parent 2721e5b commit a0dabca
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 7 deletions.
26 changes: 21 additions & 5 deletions src/gui/vectortile/qgsvectortilebasicrendererwidget.cpp
Expand Up @@ -23,6 +23,7 @@
#include "qgsstyle.h"
#include "qgsmapcanvas.h"
#include "qgsvectortileutils.h"
#include "qgsprojectutils.h"

#include <QAbstractListModel>
#include <QInputDialog>
Expand Down Expand Up @@ -371,16 +372,23 @@ QgsVectorTileBasicRendererWidget::QgsVectorTileBasicRendererWidget( QgsVectorTil
mProxyModel->setFilterString( text );
} );

setLayer( layer );
syncToLayer( layer );

connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsPanelWidget::widgetChanged );
connect( mBlendModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged );
}

void QgsVectorTileBasicRendererWidget::setLayer( QgsVectorTileLayer *layer )
void QgsVectorTileBasicRendererWidget::syncToLayer( QgsMapLayer *layer )
{
mVTLayer = layer;
QgsVectorTileLayer *vtLayer = qobject_cast<QgsVectorTileLayer *>( layer );
if ( !vtLayer )
return;

mVTLayer = vtLayer;

if ( layer && layer->renderer() && layer->renderer()->type() == QLatin1String( "basic" ) )
if ( layer && vtLayer->renderer() && vtLayer->renderer()->type() == QLatin1String( "basic" ) )
{
mRenderer.reset( static_cast<QgsVectorTileBasicRenderer *>( layer->renderer()->clone() ) );
mRenderer.reset( static_cast<QgsVectorTileBasicRenderer *>( vtLayer->renderer()->clone() ) );
}
else
{
Expand All @@ -406,13 +414,21 @@ void QgsVectorTileBasicRendererWidget::setLayer( QgsVectorTileLayer *layer )
connect( mModel, &QAbstractItemModel::dataChanged, this, &QgsPanelWidget::widgetChanged );
connect( mModel, &QAbstractItemModel::rowsInserted, this, &QgsPanelWidget::widgetChanged );
connect( mModel, &QAbstractItemModel::rowsRemoved, this, &QgsPanelWidget::widgetChanged );

mOpacityWidget->setOpacity( mVTLayer->opacity() );

//blend mode
mBlendModeComboBox->setShowClippingModes( QgsProjectUtils::layerIsContainedInGroupLayer( QgsProject::instance(), mVTLayer ) );
mBlendModeComboBox->setBlendMode( mVTLayer->blendMode() );
}

QgsVectorTileBasicRendererWidget::~QgsVectorTileBasicRendererWidget() = default;

void QgsVectorTileBasicRendererWidget::apply()
{
mVTLayer->setRenderer( mRenderer->clone() );
mVTLayer->setBlendMode( mBlendModeComboBox->blendMode() );
mVTLayer->setOpacity( mOpacityWidget->opacity() );
}

void QgsVectorTileBasicRendererWidget::addStyle( Qgis::GeometryType geomType )
Expand Down
2 changes: 1 addition & 1 deletion src/gui/vectortile/qgsvectortilebasicrendererwidget.h
Expand Up @@ -47,7 +47,7 @@ class GUI_EXPORT QgsVectorTileBasicRendererWidget : public QgsMapLayerConfigWidg
QgsVectorTileBasicRendererWidget( QgsVectorTileLayer *layer, QgsMapCanvas *canvas, QgsMessageBar *messageBar, QWidget *parent = nullptr );
~QgsVectorTileBasicRendererWidget() override;

void setLayer( QgsVectorTileLayer *layer );
void syncToLayer( QgsMapLayer *mapLayer ) final;

public slots:
//! Applies the settings made in the dialog
Expand Down
2 changes: 1 addition & 1 deletion src/gui/vectortile/qgsvectortilelayerproperties.cpp
Expand Up @@ -216,7 +216,7 @@ void QgsVectorTileLayerProperties::syncToLayer()
/*
* Symbology Tab
*/
mRendererWidget->setLayer( mLayer );
mRendererWidget->syncToLayer( mLayer );

/*
* Labels Tab
Expand Down
75 changes: 75 additions & 0 deletions src/ui/qgsvectortilebasicrendererwidget.ui
Expand Up @@ -11,6 +11,18 @@
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="bottomMargin">
Expand Down Expand Up @@ -122,14 +134,77 @@
</item>
</layout>
</item>
<item>
<widget class="QgsCollapsibleGroupBox" name="mActiveDatasetBlendingMode">
<property name="title">
<string>Layer Rendering</string>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1">
<property name="leftMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<item row="1" column="1">
<widget class="QgsBlendModeComboBox" name="mBlendModeComboBox">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Blending mode</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lblTransparency">
<property name="text">
<string>Opacity</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QgsOpacityWidget" name="mOpacityWidget" native="true">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QgsCollapsibleGroupBox</class>
<extends>QGroupBox</extends>
<header>qgscollapsiblegroupbox.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsFilterLineEdit</class>
<extends>QLineEdit</extends>
<header>qgsfilterlineedit.h</header>
</customwidget>
<customwidget>
<class>QgsBlendModeComboBox</class>
<extends>QComboBox</extends>
<header>qgsblendmodecombobox.h</header>
</customwidget>
<customwidget>
<class>QgsOpacityWidget</class>
<extends>QWidget</extends>
<header>qgsopacitywidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>mFilterLineEdit</tabstop>
Expand Down

0 comments on commit a0dabca

Please sign in to comment.