[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/karbon
From: Jan Hambrecht <jaham () gmx ! net>
Date: 2006-02-28 22:14:50
Message-ID: 1141164890.858938.19242.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 514641 by jaham:
some gradient tool improvements
* properly initialize gradient widget (target, opacity
* use opacity from gradient widget when previewing and for the result
M +52 -13 tools/vgradienttool.cc
M +2 -0 tools/vgradienttool.h
M +26 -3 widgets/vgradienttabwidget.cc
M +6 -2 widgets/vgradienttabwidget.h
--- trunk/koffice/karbon/tools/vgradienttool.cc #514640:514641
@@ -148,6 +148,31 @@
return true;
}
+bool
+VGradientTool::getOpacity( double &opacity )
+{
+ if( ! view() )
+ return false;
+
+ // determine if stroke of fill is selected for editing
+ VStrokeFillPreview *preview = view()->strokeFillPreview();
+ bool strokeSelected = ( preview && preview->strokeIsSelected() );
+
+ VSelection* selection = view()->part()->document().selection();
+ if( selection->objects().count() != 1 )
+ return false;
+
+ VObject *obj = selection->objects().getFirst();
+ // get the opacity of the first selected object, if any
+ if( strokeSelected && obj->stroke()->type() == VStroke::grad )
+ opacity = obj->stroke()->color().opacity();
+ else if( ! strokeSelected && obj->fill()->type() == VFill::grad )
+ opacity = obj->fill()->color().opacity();
+ else return false;
+
+ return true;
+}
+
void
VGradientTool::draw( VPainter* painter )
{
@@ -295,27 +320,41 @@
bool strokeSelected = false;
+ // determine the target from the stroke-fill-preview-widget
+ VStrokeFillPreview* preview = view()->strokeFillPreview();
+ if( preview && preview->strokeIsSelected() )
+ strokeSelected = true;
+
if( first() == last() )
{
- if( showDialog() != QDialog::Accepted )
+ m_optionsWidget->gradientWidget()->setGradient( m_gradient );
+ if( strokeSelected )
+ {
+ m_optionsWidget->gradientWidget()->setTarget( VGradientTabWidget::STROKE );
+ m_optionsWidget->gradientWidget()->setOpacity( 1.0 );
+ }
+ else
+ {
+ m_optionsWidget->gradientWidget()->setTarget( VGradientTabWidget::FILL );
+ double opacity;
+ if( getOpacity( opacity ) )
+ m_optionsWidget->gradientWidget()->setOpacity( opacity );
+ }
+
+ if( ! showDialog() )
return;
+
// if the gradient dialog was shown and accepted, determine the target from the \
dialog strokeSelected = ( m_optionsWidget->gradientWidget()->target() == \
VGradientTabWidget::STROKE ); }
- else
- {
- // determine the target from the stroke-fill-preview-widget
- VStrokeFillPreview* preview = view()->strokeFillPreview();
- if( preview && preview->strokeIsSelected() )
- strokeSelected = true;
- }
// calculate a sane intial position for the new gradient
if( view()->part()->document().selection()->objects().count() == 1 )
{
VObject *obj = view()->part()->document().selection()->objects().getFirst();
- if( obj->fill()->type() != VFill::grad )
+ if( ( ! strokeSelected && obj->fill()->type() != VFill::grad )
+ || ( strokeSelected && obj->stroke()->type() != VStroke::grad ) )
{
KoRect bbox = obj->boundingBox();
switch( m_gradient.type() )
@@ -353,16 +392,16 @@
VFill fill;
fill.gradient() = m_gradient;
fill.setType( VFill::grad );
+ VColor c = fill.color();
+ c.setOpacity( m_optionsWidget->gradientWidget()->opacity() );
+ fill.setColor( c, false );
view()->part()->addCommand(
new VFillCmd( &view()->part()->document(), fill, "14_gradient" ), true );
}
else
{
- VStroke stroke;
- stroke.gradient() = m_gradient;
- stroke.setType( VStroke::grad );
view()->part()->addCommand(
- new VStrokeCmd( &view()->part()->document(), &stroke, "14_gradient" ), true );
+ new VStrokeCmd( &view()->part()->document(), &m_gradient ), true );
}
}
--- trunk/koffice/karbon/tools/vgradienttool.h #514640:514641
@@ -67,6 +67,8 @@
*/
bool getGradient( VGradient &gradient );
+ bool getOpacity( double &opacity );
+
protected slots:
void targetChanged();
--- trunk/koffice/karbon/widgets/vgradienttabwidget.cc #514640:514641
@@ -100,8 +100,8 @@
painter->flush();
} // VGradientListItem::paint
-VGradientPreview::VGradientPreview( VGradient*& gradient, QWidget* parent, const \
char* name )
- : QWidget( parent, name ), m_lpgradient( &gradient )
+VGradientPreview::VGradientPreview( VGradient*& gradient, double& opacity, QWidget* \
parent, const char* name ) + : QWidget( parent, name ), m_lpgradient( &gradient ), \
m_opacity( &opacity ) {
setBackgroundMode( Qt::NoBackground );
setMinimumSize( 70, 70 );
@@ -137,6 +137,9 @@
gp.fillPath();
fill.gradient() = gradient;
fill.setType( VFill::grad );
+ VColor c = fill.color();
+ c.setOpacity( *m_opacity );
+ fill.setColor( c, false );
gp.setBrush( fill );
gp.moveTo( KoPoint( 2, 2 ) );
gp.lineTo( KoPoint( 2, height() - 2 ) );
@@ -183,7 +186,7 @@
editLayout->setSpacing( 3 );
editLayout->setMargin( 6 );
editLayout->addRowSpacing( 0, 12 );
- editLayout->addMultiCellWidget( m_gradientPreview = new VGradientPreview( \
m_gradient, m_editGroup ), 1, 3, 0, 0 ); + editLayout->addMultiCellWidget( \
m_gradientPreview = new VGradientPreview( m_gradient, m_gradOpacity, m_editGroup ), \
1, 3, 0, 0 ); editLayout->addWidget( new QLabel( i18n( "Type:" ), m_editGroup ), 1, \
1 ); editLayout->addWidget( new QLabel( i18n( "Repeat:" ), m_editGroup ), 2, 1 );
editLayout->addWidget( new QLabel( i18n( "Target:" ), m_editGroup ), 3, 1 );
@@ -227,6 +230,7 @@
connect( m_addToPredefs, SIGNAL( clicked() ), this, SLOT( \
addGradientToPredefs() ) ); connect( m_predefGradientsView, SIGNAL( doubleClicked( \
QListBoxItem *, const QPoint & ) ), this, SLOT( changeToPredef( QListBoxItem* ) ) ); \
connect( m_predefDelete, SIGNAL( clicked() ), this, SLOT( deletePredef() ) ); \
+ connect( m_opacity, SIGNAL( valueChanged( int ) ), this, SLOT( opacityChanged( \
int ) ) ); } // VGradientTabWidget::setupConnection
void VGradientTabWidget::initUI()
@@ -234,7 +238,9 @@
m_gradientType->setCurrentItem( m_gradient->type() );
m_gradientRepeat->setCurrentItem( m_gradient->repeatMethod() );
m_gradientTarget->setCurrentItem( FILL );
+ m_opacity->setValue( 100 );
+ m_predefGradientsView->clear();
QPtrList<VGradientListItem>* gradientList = m_resourceServer->gradients();
if( gradientList->count() > 0 )
for( VGradientListItem* g = gradientList->first(); g != NULL; g = \
gradientList->next() ) @@ -247,6 +253,16 @@
return m_opacity->value() / 100.0;
}
+void
+VGradientTabWidget::setOpacity( double opacity )
+{
+ if( opacity < 0.0 || opacity > 1.0 )
+ return;
+
+ m_gradOpacity = opacity;
+ m_opacity->setValue( int(opacity*100.0) );
+}
+
const VGradient*
VGradientTabWidget::gradient()
{
@@ -278,6 +294,12 @@
m_gradientPreview->update();
} // VGradientTabWidget::combosChange
+void VGradientTabWidget::opacityChanged( int value )
+{
+ m_gradOpacity = value / 100.0;
+ m_gradientPreview->update();
+}
+
void VGradientTabWidget::addGradientToPredefs()
{
VGradientListItem* item = m_resourceServer->addGradient( new VGradient( *m_gradient \
) ); @@ -301,6 +323,7 @@
(*m_gradient) = *( gradientItem->gradient() );
m_gradientType->setCurrentItem( m_gradient->type() );
m_gradientRepeat->setCurrentItem( m_gradient->repeatMethod() );
+ m_opacity->setValue( 100 );
m_gradientPreview->update();
m_gradientWidget->update();
showPage( m_editGroup );
--- trunk/koffice/karbon/widgets/vgradienttabwidget.h #514640:514641
@@ -64,13 +64,14 @@
class VGradientPreview : public QWidget
{
public:
- VGradientPreview( VGradient*& gradient, QWidget* parent = 0L, const char* name = \
0L ); + VGradientPreview( VGradient*& gradient, double& opacity, QWidget* parent = \
0L, const char* name = 0L ); ~VGradientPreview();
virtual void paintEvent( QPaintEvent* );
protected:
VGradient** m_lpgradient;
+ double* m_opacity;
}; // VGradientPreview
class KARBONBASE_EXPORT VGradientTabWidget : public QTabWidget
@@ -93,6 +94,7 @@
void setTarget( VGradientTarget target );
double opacity() const;
+ void setOpacity( double opacity );
public slots:
void combosChange( int );
@@ -100,7 +102,8 @@
void changeToPredef( QListBoxItem* );
void predefSelected( QListBoxItem* );
void deletePredef();
-
+ void opacityChanged( int );
+
protected:
void setupUI();
void initUI();
@@ -122,6 +125,7 @@
VGradient* m_gradient;
/** The predefined gradients list. */
KarbonResourceServer* m_resourceServer;
+ double m_gradOpacity;
}; // VGradientTabWidget
#endif /* _VGRADIENTTABWIDGET_H_ */
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic