From kde-commits Fri Aug 31 23:29:52 2007 From: Jan Hambrecht Date: Fri, 31 Aug 2007 23:29:52 +0000 To: kde-commits Subject: koffice/karbon/widgets Message-Id: <1188602992.511279.13676.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=118860300314569 SVN commit 707077 by jaham: Added support for changing the fill rule. M +186 -103 vtypebuttonbox.cc M +9 -4 vtypebuttonbox.h --- trunk/koffice/karbon/widgets/vtypebuttonbox.cc #707076:707077 @@ -98,86 +98,84 @@ // 16x16 pixels static const char* const buttonnone[]={ -"16 16 7 1", -"c c #0a0000", -". c #0a0a0a", -"b c #330000", -"a c #331f1f", +"16 16 3 1", "# c #333333", "e c #ff0000", -"d c #ffffff", -"..########aabbcc", -"..########aabbcc", -"##dddddddddeeebb", -"##ddddddddeeeebb", -"##dddddddeeeeeaa", -"##ddddddeeeeedaa", -"##dddddeeeeedd##", -"##ddddeeeeeddd##", -"##dddeeeeedddd##", -"##ddeeeeeddddd##", -"aaeeeeeedddddd##", -"aaeeeeeddddddd##", -"bbeeeedddddddd##", -"bbeeeddddddddd##", -"ccbbaa########..", -"ccbbaa########.."}; +"- c #ffffff", +"################", +"#------------ee#", +"#-----------eee#", +"#----------eee-#", +"#---------eee--#", +"#--------eee---#", +"#-------eee----#", +"#------eee-----#", +"#-----eee------#", +"#----eee-------#", +"#---eee--------#", +"#--eee---------#", +"#-eee----------#", +"#eee-----------#", +"#ee------------#", +"################"}; static const char* const buttonsolid[]={ -"16 16 1 1", -". c #000000", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................"}; +"16 16 2 1", +"# c #000000", +". c #969696", +"################", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"################"}; // FIXME: Smoother gradient button. static const char* const buttongradient[]={ -"16 16 14 1", -"f c #000000", -"e c #040404", -". c #0a0a0a", -"d c #0f0f0f", -"c c #181818", -"b c #212121", -"a c #292929", -"# c #303030", -"g c #333333", -"l c #484848", -"k c #787878", -"j c #a7a7a7", -"i c #cdcdcd", -"h c #f1f1f1", -"..##aabbccddeeff", -"..##aabbccddeeff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"gghhiijjkkll##ff", -"..##aabbccddeeff", -"..##aabbccddeeff"}; +"16 16 15 1", +"# c #000000", +"n c #101010", +"m c #202020", +"l c #303030", +"k c #404040", +"j c #505050", +"i c #606060", +"h c #707070", +"g c #808080", +"f c #909090", +"e c #a0a0a0", +"d c #b0b0b0", +"c c #c0c0c0", +"b c #d0d0d0", +"a c #e0e0e0", +"################", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"#abcdefghijklmn#", +"################"}; static const char* const buttonpattern[]={ "16 16 4 1", @@ -185,34 +183,72 @@ "# c #333333", "a c #a0a0a0", "b c #ffffffff", -"..############..", -"..############..", -"##aaaabbbbaaaa##", -"##aaaabbbbaaaa##", -"##aaaabbbbaaaa##", -"##aaaabbbbaaaa##", -"##bbbbaaaabbbb##", -"##bbbbaaaabbbb##", -"##bbbbaaaabbbb##", -"##bbbbaaaabbbb##", -"##aaaabbbbaaaa##", -"##aaaabbbbaaaa##", -"##aaaabbbbaaaa##", -"##aaaabbbbaaaa##", -"..############..", -"..############.."}; +"################", +"#aaaaabbbbaaaaa#", +"#aaaaabbbbaaaaa#", +"#aaaaabbbbaaaaa#", +"#aaaaabbbbaaaaa#", +"#aaaaabbbbaaaaa#", +"#bbbbbaaaabbbbb#", +"#bbbbbaaaabbbbb#", +"#bbbbbaaaabbbbb#", +"#bbbbbaaaabbbbb#", +"#aaaaabbbbaaaaa#", +"#aaaaabbbbaaaaa#", +"#aaaaabbbbaaaaa#", +"#aaaaabbbbaaaaa#", +"#aaaaabbbbaaaaa#", +"################"}; +static const char* const buttonevenodd[]={ +"16 16 3 1", +"# c #0a0a0a", +". c #969696", +"o c #ffffffff", +"################", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#....######....#", +"#....#oooo#....#", +"#....#oooo#....#", +"#....#oooo#....#", +"#....#oooo#....#", +"#....######....#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"################"}; + +static const char* const buttonwinding[]={ +"16 16 2 1", +"# c #0a0a0a", +". c #969696", +"################", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"#....######....#", +"#....#....#....#", +"#....#....#....#", +"#....#....#....#", +"#....#....#....#", +"#....######....#", +"#..............#", +"#..............#", +"#..............#", +"#..............#", +"################"}; + #endif -#include -#include -#include -#include -#include +#include "vtypebuttonbox.h" +#include "karbon_part.h" -#include - #include #include #include @@ -224,15 +260,22 @@ #include #include #include +#include +#include -#include "karbon_part.h" -#include "vtypebuttonbox.h" +#include +#include +#include +#include +#include +#include + VTypeButtonBox::VTypeButtonBox( QWidget* parent ) : QFrame( parent ), m_isStrokeManipulator( false ) { setFrameStyle( QFrame::GroupBoxPanel | QFrame::Sunken ); - setMinimumSize( 50, 50 ); + setMinimumSize( 45, 70 ); QGridLayout * layout = new QGridLayout( this ); QButtonGroup * group = new QButtonGroup( this ); @@ -269,11 +312,29 @@ group->addButton( button, Pattern ); layout->addWidget( button, 1, 1 ); + // The button for even-odd fill rule + button = new QPushButton( this ); + button->setIcon( QPixmap( (const char **) buttonevenodd ) ); + button->setMinimumHeight( 20 ); + button->setToolTip( i18n( "Even-Odd Fill" ) ); + group->addButton( button, EvenOdd ); + layout->addWidget( button, 2, 0 ); + + // The button for winding fill-rule + button = new QPushButton( this ); + button->setIcon( QPixmap( (const char **) buttonwinding ) ); + button->setMinimumHeight( 20 ); + button->setToolTip( i18n( "Winding Fill" ) ); + group->addButton( button, Winding ); + layout->addWidget( button, 2, 1 ); + layout->setMargin( 1 ); layout->setSpacing( 1 ); layout->setColumnStretch( 0, 1 ); layout->setColumnStretch( 1, 1 ); + m_group = group; + connect( group, SIGNAL( buttonClicked( int ) ), this, SLOT( slotButtonPressed( int ) ) ); } @@ -293,11 +354,15 @@ void VTypeButtonBox::setStroke() { m_isStrokeManipulator = true; + m_group->button( EvenOdd )->setEnabled( false ); + m_group->button( Winding )->setEnabled( false ); } void VTypeButtonBox::setFill() { m_isStrokeManipulator = false; + m_group->button( EvenOdd )->setEnabled( true ); + m_group->button( Winding )->setEnabled( true ); } bool VTypeButtonBox::isStrokeManipulator() const @@ -308,27 +373,45 @@ void VTypeButtonBox::manipulateFills( int id ) { KoCanvasController* canvasController = KoToolManager::instance()->activeCanvasController(); + KoSelection *selection = canvasController->canvas()->shapeManager()->selection(); - // TODO get the actual background from the ResourceProvider - QBrush fill; + QUndoCommand * cmd = 0; switch( id ) { case None: - fill = QBrush(); + cmd = new KoShapeBackgroundCommand( selection->selectedShapes(), QBrush() ); break; case Solid: - fill = QBrush( canvasController->canvas()->resourceProvider()->backgroundColor().toQColor() ); + { + QBrush fill = QBrush( canvasController->canvas()->resourceProvider()->backgroundColor().toQColor() ); + cmd = new KoShapeBackgroundCommand( selection->selectedShapes(), fill ); break; + } case Gradient: //m_fill.setType( VFill::grad ); break; case Pattern: //m_fill.setType( VFill::patt ); break; + case EvenOdd: + case Winding: + { + Qt::FillRule fillRule = id == EvenOdd ? Qt::OddEvenFill : Qt::WindingFill; + QList shapes; + foreach( KoShape * shape, selection->selectedShapes() ) + { + KoPathShape * path = dynamic_cast( shape ); + if( path && path->fillRule() != fillRule ) + shapes.append( path ); + } + if( shapes.count() ) + cmd = new KoPathFillRuleCommand( shapes, fillRule ); + break; + } } - KoSelection *selection = canvasController->canvas()->shapeManager()->selection(); - canvasController->canvas()->addCommand( new KoShapeBackgroundCommand( selection->selectedShapes(), fill ) ); + if( cmd ) + canvasController->canvas()->addCommand( cmd ); } void VTypeButtonBox::manipulateStrokes( int id ) --- trunk/koffice/karbon/widgets/vtypebuttonbox.h #707076:707077 @@ -18,11 +18,13 @@ * Boston, MA 02110-1301, USA. */ -#ifndef __VTYPEBUTTONBOX_H__ -#define __VTYPEBUTTONBOX_H__ +#ifndef VTYPEBUTTONBOX_H +#define VTYPEBUTTONBOX_H -#include +#include +class QButtonGroup; + class VTypeButtonBox : public QFrame { Q_OBJECT @@ -32,7 +34,9 @@ None = 0, Solid = 1, Gradient = 2, - Pattern = 3 + Pattern = 3, + EvenOdd = 4, + Winding = 5 }; VTypeButtonBox( QWidget* parent = 0L ); @@ -48,6 +52,7 @@ void manipulateStrokes( int id ); bool m_isStrokeManipulator; ///< are we manipulating stroke or fill ? + QButtonGroup * m_group; }; #endif