25#include "karbon_part.h"
29#include "vkopainter.h"
30#include "vselection.h"
32#include "vstrokecmd.h"
33#include "vstrokefillpreview.h"
35#define PANEL_SIZEX 50.0
36#define PANEL_SIZEY 50.0
40#define FILL_BOTTOMX 45.0
41#define FILL_BOTTOMY 45.0
43#define STROKE_TOPX 5.0
44#define STROKE_TOPY 5.0
45#define STROKE_BOTTOMX 35.0
46#define STROKE_BOTTOMY 35.0
48#define STROKE_TOPX_INNER STROKE_TOPX + 4
49#define STROKE_TOPY_INNER STROKE_TOPY + 4
50#define STROKE_BOTTOMX_INNER STROKE_BOTTOMX - 4
51#define STROKE_BOTTOMY_INNER STROKE_BOTTOMY - 4
54VStrokeFillPreview::VStrokeFillPreview(
55 KarbonPart *part, TQWidget* parent,
const char* name )
56 : TQFrame( parent, name ), m_part( part )
58 m_strokeWidget =
false;
59 setFocusPolicy( TQWidget::NoFocus );
61 setFrameStyle( TQFrame::GroupBoxPanel | TQFrame::Sunken );
63 installEventFilter(
this );
64 m_pixmap.resize(
int( PANEL_SIZEX ),
int( PANEL_SIZEY ) );
65 m_painter =
new VKoPainter( &m_pixmap, uint( PANEL_SIZEX ), uint( PANEL_SIZEY ) );
68VStrokeFillPreview::~VStrokeFillPreview()
74VStrokeFillPreview::paintEvent( TQPaintEvent* event )
77 (
int)( width() - PANEL_SIZEX ) / 2, (
int)( height() - PANEL_SIZEY ) / 2,
79 0, 0, (
int)PANEL_SIZEX, (
int)PANEL_SIZEY );
81 TQFrame::paintEvent( event );
85VStrokeFillPreview::eventFilter( TQObject *, TQEvent *event )
87 TQMouseEvent* e =
static_cast<TQMouseEvent*
>( event );
89 int ex = e->x() - int( ( width() - PANEL_SIZEX ) / 2 );
90 int ey = e->y() - int( ( height() - PANEL_SIZEY ) / 2 );
92 if( event && event->type() == TQEvent::MouseButtonPress )
97 ex >= STROKE_TOPX && ex <= STROKE_BOTTOMX &&
98 ey >= STROKE_TOPY && ey <= STROKE_BOTTOMY )
100 m_strokeWidget =
true;
101 emit strokeSelected();
104 ex >= FILL_TOPX && ex <= FILL_BOTTOMX &&
105 ey >= FILL_TOPY && ey <= FILL_BOTTOMY )
107 m_strokeWidget =
false;
114 ex >= FILL_TOPX && ex <= FILL_BOTTOMX &&
115 ey >= FILL_TOPY && ey <= FILL_BOTTOMY )
117 m_strokeWidget =
false;
121 ex >= STROKE_TOPX && ex <= STROKE_BOTTOMX &&
122 ey >= STROKE_TOPY && ey <= STROKE_BOTTOMY )
124 m_strokeWidget =
true;
125 emit strokeSelected();
128 update( m_stroke, m_fill );
131 if( event && event->type() == TQEvent::MouseButtonDblClick )
134 ex >= FILL_TOPX && ex <= FILL_BOTTOMX &&
135 ey >= FILL_TOPY && ey <= FILL_BOTTOMY )
137 VColorDlg* dialog =
new VColorDlg( m_fill.color(),
this );
138 if( dialog->exec() == TQDialog::Accepted )
140 if( m_part && m_part->document().selection() ) m_part->addCommand(
new VFillCmd( &m_part->document(),
VFill( dialog->Color() ) ),
true );
145 ex >= STROKE_TOPX && ex <= STROKE_BOTTOMX
146 && ey >= STROKE_TOPY && ey <= STROKE_BOTTOMY )
148 VColorDlg* dialog =
new VColorDlg( m_stroke.color(),
this );
149 if( dialog->exec() == TQDialog::Accepted )
151 if( m_part && m_part->document().selection() ) m_part->addCommand(
new VStrokeCmd( &m_part->document(), dialog->Color() ),
true );
160VStrokeFillPreview::update(
const VStroke &s,
const VFill &f )
175 m_painter->setPen( TQt::NoPen );
177 for(
unsigned char y = 0; y < PANEL_SIZEY; y += 10 )
178 for(
unsigned char x = 0; x < PANEL_SIZEX; x += 10 )
180 fill.setColor( ( ( ( x + y ) % 20 ) == 0 ) ? TQColor( 180, 180, 180 ) : TQColor( 100, 100, 100 ) );
181 m_painter->setBrush( fill );
182 m_painter->drawRect( x, y, 10, 10 );
185 if ( m_strokeWidget )
188 drawStroke( m_stroke );
192 drawStroke( m_stroke );
202VStrokeFillPreview::drawFill(
const VFill &f )
206 if( f.type() != VFill::none )
215 if( f.gradient().type() == VGradient::linear )
217 fill.gradient().setOrigin( KoPoint( 30, 20 ) );
218 fill.gradient().setVector( KoPoint( 30, 50 ) );
220 else if( f.gradient().type() == VGradient::radial ||
221 f.gradient().type() == VGradient::conic )
223 fill.gradient().setOrigin( KoPoint( 30, 35 ) );
224 fill.gradient().setFocalPoint( KoPoint( 30, 35 ) );
225 fill.gradient().setVector( KoPoint( 30, 50 ) );
230 fill.pattern() = f.pattern();
231 fill.pattern().setOrigin( KoPoint( 20, 10 ) );
232 fill.pattern().setVector( KoPoint( 30, 10 ) );
236 m_painter->setBrush( fill );
239 m_painter->setBrush( f );
240 m_painter->setPen( TQt::NoPen );
241 m_painter->drawRect( KoRect( FILL_TOPX, FILL_TOPY, FILL_BOTTOMX - FILL_TOPX, FILL_BOTTOMY - FILL_TOPY ) );
246 fill.setColor( TQt::white );
247 m_painter->setBrush( fill );
248 m_painter->setPen( TQt::NoPen );
250 m_painter->drawRect( KoRect( FILL_TOPX, FILL_TOPY,
251 FILL_BOTTOMX - FILL_TOPX,
252 FILL_BOTTOMY - FILL_TOPY ) );
258 m_painter->setBrush( TQt::NoBrush );
259 color.
set( 1.0, 1.0, 1.0 );
260 stroke.setColor( color );
261 m_painter->setPen( stroke );
263 m_painter->newPath();
264 m_painter->moveTo( KoPoint( FILL_BOTTOMX, FILL_TOPY ) );
265 m_painter->lineTo( KoPoint( FILL_TOPX, FILL_TOPY ) );
266 m_painter->lineTo( KoPoint( FILL_TOPX, FILL_BOTTOMY ) );
267 m_painter->strokePath();
269 color.
set( 0.5, 0.5, 0.5 );
270 stroke.setColor( color );
271 m_painter->setPen( stroke );
273 m_painter->newPath();
274 m_painter->moveTo( KoPoint( FILL_BOTTOMX, FILL_TOPY ) );
275 m_painter->lineTo( KoPoint( FILL_BOTTOMX, FILL_BOTTOMY ) );
276 m_painter->lineTo( KoPoint( FILL_TOPX, FILL_BOTTOMY ) );
277 m_painter->strokePath();
279 if( f.type() == VFill::none )
281 stroke.setColor( TQt::red );
282 m_painter->setPen( stroke );
283 m_painter->newPath();
284 m_painter->moveTo( KoPoint( FILL_BOTTOMX, FILL_TOPY ) );
285 m_painter->lineTo( KoPoint( FILL_TOPX, FILL_BOTTOMY ) );
286 m_painter->strokePath();
291VStrokeFillPreview::drawStroke(
const VStroke &s )
294 stroke.setLineWidth( 2.0 );
296 m_painter->setPen( TQt::NoPen );
298 if( s.type() != VStroke::none )
306 fill.gradient() = s.gradient();
308 if( s.gradient().type() == VGradient::linear )
310 fill.gradient().setOrigin( KoPoint( FILL_TOPX, 10 ) );
311 fill.gradient().setVector( KoPoint( FILL_TOPX, 40 ) );
313 else if( s.gradient().type() == VGradient::radial ||
314 s.gradient().type() == VGradient::conic )
316 fill.gradient().setOrigin( KoPoint( FILL_TOPX, 25 ) );
317 fill.gradient().setFocalPoint( KoPoint( FILL_TOPX, 25 ) );
318 fill.gradient().setVector( KoPoint( FILL_TOPX, 40 ) );
325 fill.pattern() = s.pattern();
326 fill.pattern().setOrigin( KoPoint( FILL_TOPX, 10 ) );
327 fill.pattern().setVector( KoPoint( FILL_TOPX, 40 ) );
332 fill.setColor( s.color() );
334 m_painter->setFillRule( evenOdd );
336 m_painter->setBrush( fill );
338 m_painter->newPath();
339 m_painter->moveTo( KoPoint( STROKE_TOPX, STROKE_TOPY ) );
340 m_painter->lineTo( KoPoint( STROKE_BOTTOMX, STROKE_TOPY ) );
341 m_painter->lineTo( KoPoint( STROKE_BOTTOMX, STROKE_BOTTOMY ) );
342 m_painter->lineTo( KoPoint( STROKE_TOPX, STROKE_BOTTOMY ) );
343 m_painter->lineTo( KoPoint( STROKE_TOPX, STROKE_TOPY ) );
345 m_painter->moveTo( KoPoint( STROKE_TOPX_INNER, STROKE_TOPY_INNER ) );
346 m_painter->lineTo( KoPoint( STROKE_BOTTOMX_INNER, STROKE_TOPY_INNER ) );
347 m_painter->lineTo( KoPoint( STROKE_BOTTOMX_INNER, STROKE_BOTTOMY_INNER ) );
348 m_painter->lineTo( KoPoint( STROKE_TOPX_INNER, STROKE_BOTTOMY_INNER ) );
349 m_painter->lineTo( KoPoint( STROKE_TOPX_INNER, STROKE_TOPY_INNER ) );
350 m_painter->fillPath();
355 m_painter->setFillRule( evenOdd );
356 fill.setColor( TQt::white );
358 m_painter->setBrush( fill );
359 m_painter->setPen( TQt::NoPen );
361 m_painter->newPath();
362 m_painter->moveTo( KoPoint( STROKE_TOPX, STROKE_TOPY ) );
363 m_painter->lineTo( KoPoint( STROKE_BOTTOMX, STROKE_TOPY ) );
364 m_painter->lineTo( KoPoint( STROKE_BOTTOMX, STROKE_BOTTOMY ) );
365 m_painter->lineTo( KoPoint( STROKE_TOPX, STROKE_BOTTOMY ) );
366 m_painter->lineTo( KoPoint( STROKE_TOPX, STROKE_TOPY ) );
368 m_painter->moveTo( KoPoint( STROKE_TOPX_INNER, STROKE_TOPY_INNER ) );
369 m_painter->lineTo( KoPoint( STROKE_BOTTOMX_INNER, STROKE_TOPY_INNER ) );
370 m_painter->lineTo( KoPoint( STROKE_BOTTOMX_INNER, STROKE_BOTTOMY_INNER ) );
371 m_painter->lineTo( KoPoint( STROKE_TOPX_INNER, STROKE_BOTTOMY_INNER ) );
372 m_painter->lineTo( KoPoint( STROKE_TOPX_INNER, STROKE_TOPY_INNER ) );
373 m_painter->fillPath();
379 color.
set( 1.0, 1.0, 1.0 );
380 stroke.setColor( color );
381 m_painter->setBrush( TQt::NoBrush );
382 m_painter->setPen( stroke );
384 m_painter->newPath();
385 m_painter->moveTo( KoPoint( STROKE_BOTTOMX + 1, STROKE_TOPY - 1 ) );
386 m_painter->lineTo( KoPoint( STROKE_TOPX - 1, STROKE_TOPY - 1 ) );
387 m_painter->lineTo( KoPoint( STROKE_TOPX - 1, STROKE_BOTTOMY + 1 ) );
388 m_painter->strokePath();
390 color.
set( 0.5, 0.5, 0.5 );
391 stroke.setColor( color );
392 m_painter->setPen( stroke );
394 m_painter->newPath();
395 m_painter->moveTo( KoPoint( STROKE_BOTTOMX + 1, STROKE_TOPY - 1 ) );
396 m_painter->lineTo( KoPoint( STROKE_BOTTOMX + 1, STROKE_BOTTOMY + 1 ) );
397 m_painter->lineTo( KoPoint( STROKE_TOPX - 1, STROKE_BOTTOMY + 1 ) );
398 m_painter->strokePath();
402 m_painter->newPath();
403 m_painter->moveTo( KoPoint( STROKE_BOTTOMX_INNER - 1, STROKE_TOPY_INNER + 1 ) );
404 m_painter->lineTo( KoPoint( STROKE_TOPX_INNER + 1, STROKE_TOPY_INNER + 1 ) );
405 m_painter->lineTo( KoPoint( STROKE_TOPX_INNER + 1, STROKE_BOTTOMY_INNER - 1 ) );
406 m_painter->strokePath();
408 color.
set( 1.0, 1.0, 1.0 );
409 stroke.setColor( color );
410 m_painter->setPen( stroke );
412 m_painter->newPath();
413 m_painter->moveTo( KoPoint( STROKE_BOTTOMX_INNER - 1, STROKE_TOPY_INNER + 1 ) );
414 m_painter->lineTo( KoPoint( STROKE_BOTTOMX_INNER - 1, STROKE_BOTTOMY_INNER - 1 ) );
415 m_painter->lineTo( KoPoint( STROKE_TOPX_INNER + 1, STROKE_BOTTOMY_INNER - 1 ) );
416 m_painter->strokePath();
418 if( s.type() == VStroke::none )
420 stroke.setColor( TQt::red );
421 m_painter->setPen( stroke );
423 m_painter->newPath();
424 m_painter->moveTo( KoPoint( STROKE_BOTTOMX, STROKE_TOPY ) );
425 m_painter->lineTo( KoPoint( STROKE_TOPX, STROKE_BOTTOMY ) );
426 m_painter->strokePath();
431VStrokeFillPreview::setFillSelected()
433 m_strokeWidget =
false;
434 update( m_stroke, m_fill );
439VStrokeFillPreview::setStrokeSelected()
441 m_strokeWidget =
true;
442 update( m_stroke, m_fill );
443 emit strokeSelected();
446#include "vstrokefillpreview.moc"
Keeps track of visual per document properties.
This class keeps track of color properties.
void set(float v1)
Sets the first color component.
Manages the fill of shapes.
Manages stroke properties.