[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