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 )
171 m_stroke = VStroke();
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.
void set(float v1)
Sets the first color component.
Manages the fill of shapes.
Manages stroke properties.