• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegames API Reference
  • KDE Home
  • Contact Us
 

libkdegames/libkdegamesprivate

  • sources
  • kde-4.14
  • kdegames
  • libkdegames
  • libkdegamesprivate
kgamecanvas.cpp
Go to the documentation of this file.
1 /* Originally created for KBoard
2  Copyright 2006 Maurizio Monge <maurizio.monge@gmail.com>
3 
4 BSD License
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions
7 are met:
8 
9 1. Redistributions of source code must retain the above copyright
10  notice, this list of conditions and the following disclaimer.
11 2. Redistributions in binary form must reproduce the above copyright
12  notice, this list of conditions and the following disclaimer in the
13  documentation and/or other materials provided with the distribution.
14 
15 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 // KGame namespace changes: mauricio@tabuleiro.com
28 
29 #include "kgamecanvas.h"
30 
31 #include <QPaintEvent>
32 #include <QPainter>
33 #include <QRegion>
34 #include <QApplication>
35 #include <QTimer>
36 #include <QTime>
37 
38 /*
39  TODO:
40  - (maybe) allow an item to be destroyed while calling KGameCanvasItem::advance.
41  - When a group is hidden/destroyed should only update items (optimize for sparse groups)
42 */
43 
44 #define DEBUG_DONT_MERGE_UPDATES 0
45 #define DEBUG_CANVAS_PAINTS 0
46 
47 /*
48  KGameCanvasAbstract
49 */
50 KGameCanvasAbstract::KGameCanvasAbstract() {
51 
52 }
53 
54 KGameCanvasAbstract::~KGameCanvasAbstract() {
55  //Note: this does not delete the items, be sure not to leak memory!
56  for(int i=0;i<m_items.size();i++)
57  m_items[i]->m_canvas = NULL;
58 }
59 
60 KGameCanvasItem* KGameCanvasAbstract::itemAt(const QPoint &pt) const {
61  for(int i=m_items.size()-1;i>=0;i--) {
62  KGameCanvasItem *el = m_items[i];
63  if(el->m_visible && el->rect().contains(pt))
64  return el;
65  }
66  return NULL;
67 }
68 
69 QList<KGameCanvasItem*> KGameCanvasAbstract::itemsAt(const QPoint &pt) const {
70  QList<KGameCanvasItem*> retv;
71 
72  for(int i=m_items.size()-1;i>=0;i--) {
73  KGameCanvasItem *el = m_items[i];
74  if(el->m_visible && el->rect().contains(pt))
75  retv.append(el);
76  }
77 
78  return retv;
79 }
80 
81 
82 /*
83  KGameCanvasWidget
84 */
85 class KGameCanvasWidgetPrivate {
86 public:
87  QTimer m_anim_timer;
88  QTime m_anim_time;
89  bool m_pending_update;
90  QRegion m_pending_update_reg;
91 
92 #if DEBUG_CANVAS_PAINTS
93  bool debug_paints;
94 #endif //DEBUG_CANVAS_PAINTS
95 
96  KGameCanvasWidgetPrivate()
97  : m_pending_update(false)
98 #if DEBUG_CANVAS_PAINTS
99  , debug_paints(false)
100 #endif //DEBUG_CANVAS_PAINTS
101  {}
102 };
103 
104 KGameCanvasWidget::KGameCanvasWidget(QWidget* parent)
105 : QWidget(parent)
106 , priv(new KGameCanvasWidgetPrivate()) {
107  priv->m_anim_time.start();
108  connect(&priv->m_anim_timer, SIGNAL(timeout()), this, SLOT(processAnimations()));
109 }
110 
111 KGameCanvasWidget::~KGameCanvasWidget() {
112  delete priv;
113 }
114 
115 void KGameCanvasWidget::ensureAnimating() {
116  if(!priv->m_anim_timer.isActive() )
117  priv->m_anim_timer.start();
118 }
119 
120 void KGameCanvasWidget::ensurePendingUpdate() {
121  if(priv->m_pending_update)
122  return;
123  priv->m_pending_update = true;
124 
125 #if DEBUG_DONT_MERGE_UPDATES
126  updateChanges();
127 #else //DEBUG_DONT_MERGE_UPDATES
128  QTimer::singleShot( 0, this, SLOT(updateChanges()) );
129 #endif //DEBUG_DONT_MERGE_UPDATES
130 }
131 
132 void KGameCanvasWidget::updateChanges() {
133  for(int i=0;i<m_items.size();i++) {
134  KGameCanvasItem *el = m_items.at(i);
135 
136  if(el->m_changed)
137  el->updateChanges();
138  }
139  priv->m_pending_update = false;
140 
141 #if DEBUG_CANVAS_PAINTS
142  repaint();
143  priv->debug_paints = true;
144  repaint( priv->m_pending_update_reg );
145  QApplication::syncX();
146  priv->debug_paints = false;
147  usleep(100000);
148  repaint( priv->m_pending_update_reg );
149  QApplication::syncX();
150  usleep(100000);
151 #else //DEBUG_CANVAS_PAINTS
152  repaint( priv->m_pending_update_reg );
153 #endif //DEBUG_CANVAS_PAINTS
154 
155  priv->m_pending_update_reg = QRegion();
156 }
157 
158 void KGameCanvasWidget::invalidate(const QRect& r, bool /*translate*/) {
159  priv->m_pending_update_reg |= r;
160  ensurePendingUpdate();
161 }
162 
163 void KGameCanvasWidget::invalidate(const QRegion& r, bool /*translate*/) {
164  priv->m_pending_update_reg |= r;
165  ensurePendingUpdate();
166 }
167 
168 void KGameCanvasWidget::paintEvent(QPaintEvent *event) {
169 #if DEBUG_CANVAS_PAINTS
170  if(priv->debug_paints)
171  {
172  QPainter p(this);
173  p.fillRect(event->rect(), Qt::magenta);
174  return;
175  }
176 #endif //DEBUG_CANVAS_PAINTS
177 
178  {QPainter p(this);
179  QRect evr = event->rect();
180  QRegion evreg = event->region();
181 
182  for(int i=0;i<m_items.size();i++) {
183  KGameCanvasItem *el = m_items.at(i);
184  if( el->m_visible && evr.intersects( el->rect() )
185  && evreg.contains( el->rect() ) ) {
186  el->m_last_rect = el->rect();
187  el->paintInternal(&p, evr, evreg, QPoint(), 1.0 );
188  }
189  }}
190 
191  QApplication::syncX();
192 }
193 
194 void KGameCanvasWidget::processAnimations() {
195  if(m_animated_items.empty() ) {
196  priv->m_anim_timer.stop();
197  return;
198  }
199 
200  int tm = priv->m_anim_time.elapsed();
201 
202  // The list MUST be copied, because it could be modified calling advance.
203  // After all since it is implicitly shared the copy will not happen unless
204  // is it actually modified
205  QList<KGameCanvasItem*> ait = m_animated_items;
206  for(int i=0;i<ait.size();i++) {
207  KGameCanvasItem *el = ait[i];
208  el->advance(tm);
209  }
210 
211  if(m_animated_items.empty() )
212  priv->m_anim_timer.stop();
213 }
214 
215 void KGameCanvasWidget::setAnimationDelay(int d) {
216  priv->m_anim_timer.setInterval(d);
217 }
218 
219 int KGameCanvasWidget::mSecs() {
220  return priv->m_anim_time.elapsed();
221 }
222 
223 KGameCanvasWidget* KGameCanvasWidget::topLevelCanvas() {
224  return this;
225 }
226 
227 QPoint KGameCanvasWidget::canvasPosition() const {
228  return QPoint(0, 0);
229 }
230 
231 /*
232  KGameCanvasItem
233 */
234 KGameCanvasItem::KGameCanvasItem(KGameCanvasAbstract* KGameCanvas)
235 : m_visible(false)
236 , m_animated(false)
237 , m_opacity(255)
238 , m_pos(0,0)
239 , m_canvas(KGameCanvas)
240 , m_changed(false) {
241  if(m_canvas) m_canvas->m_items.append(this);
242 }
243 
244 KGameCanvasItem::~KGameCanvasItem() {
245  if(m_canvas) {
246  m_canvas->m_items.removeAll(this);
247  if(m_animated)
248  m_canvas->m_animated_items.removeAll(this);
249  if(m_visible)
250  m_canvas->invalidate(m_last_rect, false);
251  }
252 }
253 
254 void KGameCanvasItem::changed() {
255  m_changed = true;
256 
257  //even if m_changed was already true we cannot optimiza away this call, because maybe the
258  //item has been reparented, etc. It is a very quick call anyway.
259  if(m_canvas)
260  m_canvas->ensurePendingUpdate();
261 }
262 
263 void KGameCanvasItem::updateChanges() {
264  if(!m_changed)
265  return;
266  if(m_canvas) {
267  m_canvas->invalidate(m_last_rect, false);
268  if(m_visible)
269  m_canvas->invalidate(rect());
270  }
271  m_changed = false;
272 }
273 
274 QPixmap *KGameCanvasItem::transparence_pixmap_cache = NULL;
275 
276 QPixmap* KGameCanvasItem::getTransparenceCache(const QSize &s) {
277  if(!transparence_pixmap_cache)
278  transparence_pixmap_cache = new QPixmap();
279  if(s.width()>transparence_pixmap_cache->width() ||
280  s.height()>transparence_pixmap_cache->height()) {
281 
282  /* Strange that a pixmap with alpha should be created this way, i think a qt bug */
283  *transparence_pixmap_cache = QPixmap::fromImage( QImage(
284  s.expandedTo(transparence_pixmap_cache->size()), QImage::Format_ARGB32 ) );
285  }
286 
287  return transparence_pixmap_cache;
288 }
289 
290 void KGameCanvasItem::paintInternal(QPainter* pp, const QRect& /*prect*/,
291  const QRegion& /*preg*/, const QPoint& /*delta*/, double cumulative_opacity) {
292  int opacity = int(cumulative_opacity*m_opacity + 0.5);
293 
294  if(opacity <= 0)
295  return;
296 
297  if(opacity >= 255) {
298  paint(pp);
299  return;
300  }
301 
302  if(!layered()) {
303  pp->setOpacity(opacity/255.0);
304  paint(pp);
305  pp->setOpacity(1.0);
306  return;
307  }
308 
309  QRect mr = rect();
310  QPixmap* cache = getTransparenceCache(mr.size());
311 
312  {
313  QPainter p(cache);
314 
315  /* clear */
316  p.setBrush(QColor(255,255,255,0));
317  p.setPen(Qt::NoPen);
318  p.setCompositionMode(QPainter::CompositionMode_Source);
319  p.drawRect(QRect(QPoint(),mr.size()));
320 
321  /* paint on the item */
322  p.translate(-mr.topLeft());
323  paint(&p);
324  p.translate(mr.topLeft());
325 
326  /* make the opacity */
327  p.setBrush( QColor(255,255,255,255-opacity) );
328  p.setPen( Qt::NoPen );
329  p.setCompositionMode( QPainter::CompositionMode_DestinationOut );
330  p.drawRect( QRect(QPoint(),mr.size()) );
331  }
332 
333  pp->drawPixmap(mr.topLeft(), *cache, QRect(QPoint(),mr.size()) );
334 }
335 
336 void KGameCanvasItem::putInCanvas(KGameCanvasAbstract *c) {
337  if(m_canvas == c)
338  return;
339 
340  if(m_canvas) {
341  if(m_visible)
342  m_canvas->invalidate(m_last_rect, false); //invalidate the previously drawn rectangle
343  m_canvas->m_items.removeAll(this);
344  if(m_animated)
345  m_canvas->m_animated_items.removeAll(this);
346  }
347 
348  m_canvas = c;
349 
350  if(m_canvas) {
351  m_canvas->m_items.append(this);
352  if(m_animated) {
353  m_canvas->m_animated_items.append(this);
354  m_canvas->ensureAnimating();
355  }
356  if(m_visible)
357  changed();
358  }
359 }
360 
361 void KGameCanvasItem::setVisible(bool v) {
362  if(m_visible == v)
363  return;
364 
365  m_visible = v;
366  if(m_canvas) {
367  if(!v)
368  m_canvas->invalidate(m_last_rect, false);
369  else
370  changed();
371  }
372  if(!v)
373  m_last_rect = QRect();
374 }
375 
376 void KGameCanvasItem::setAnimated(bool a) {
377  if(m_animated == a)
378  return;
379 
380  m_animated = a;
381  if(m_canvas) {
382  if(a) {
383  m_canvas->m_animated_items.append(this);
384  m_canvas->ensureAnimating();
385  }
386  else
387  m_canvas->m_animated_items.removeAll(this);
388  }
389 }
390 
391 void KGameCanvasItem::setOpacity(int o) {
392  if (o<0) o=0;
393  if (o>255) o = 255;
394  m_opacity = o;
395 
396  if(m_canvas && m_visible)
397  changed();
398 }
399 
400 bool KGameCanvasItem::layered() const { return true; }
401 
402 void KGameCanvasItem::advance(int /*msecs*/) { }
403 
404 void KGameCanvasItem::updateAfterRestack(int from, int to)
405 {
406  int inc = from>to ? -1 : 1;
407 
408  QRegion upd;
409  for(int i=from; i!=to;i+=inc)
410  {
411  KGameCanvasItem *el = m_canvas->m_items.at(i);
412  if(!el->m_visible)
413  continue;
414 
415  QRect r = el->rect() & rect();
416  if(!r.isEmpty())
417  upd |= r;
418  }
419 
420  if(!upd.isEmpty())
421  m_canvas->invalidate(upd);
422 }
423 
424 void KGameCanvasItem::raise()
425 {
426  if(!m_canvas || m_canvas->m_items.last() == this)
427  return;
428 
429  int old_pos = m_canvas->m_items.indexOf(this);
430  m_canvas->m_items.removeAt(old_pos);
431  m_canvas->m_items.append(this);
432  if(m_visible)
433  updateAfterRestack(old_pos, m_canvas->m_items.size()-1);
434 }
435 
436 void KGameCanvasItem::lower()
437 {
438  if(!m_canvas || m_canvas->m_items.first() == this)
439  return;
440 
441  int old_pos = m_canvas->m_items.indexOf(this);
442  m_canvas->m_items.removeAt(old_pos);
443  m_canvas->m_items.prepend(this);
444 
445  if(m_visible)
446  updateAfterRestack(old_pos, 0);
447 }
448 
449 void KGameCanvasItem::stackOver(KGameCanvasItem* ref)
450 {
451  if(!m_canvas)
452  return;
453 
454  if(ref->m_canvas != m_canvas)
455  {
456  qCritical("KGameCanvasItem::stackOver: Argument must be a sibling item!\n");
457  return;
458  }
459 
460  int i = m_canvas->m_items.indexOf( ref );
461  if(i < m_canvas->m_items.size()-2 && m_canvas->m_items[i+1] == this)
462  return;
463 
464  int old_pos = m_canvas->m_items.indexOf(this);
465  m_canvas->m_items.removeAt(old_pos);
466  i = m_canvas->m_items.indexOf(ref);
467  m_canvas->m_items.insert(i+1,this);
468 
469  if(m_visible)
470  updateAfterRestack(old_pos, i+1);
471 }
472 
473 void KGameCanvasItem::stackUnder(KGameCanvasItem* ref)
474 {
475  if(!m_canvas)
476  return;
477 
478 
479  if(ref->m_canvas != m_canvas)
480  {
481  qCritical("KGameCanvasItem::stackUnder: Argument must be a sibling item!\n");
482  return;
483  }
484 
485  int i = m_canvas->m_items.indexOf( ref );
486  if(i >= 1 && m_canvas->m_items[i-1] == this)
487  return;
488 
489  int old_pos = m_canvas->m_items.indexOf(this);
490  m_canvas->m_items.removeAt(old_pos);
491  i = m_canvas->m_items.indexOf(ref);
492  m_canvas->m_items.insert(i,this);
493 
494  if(m_visible)
495  updateAfterRestack(old_pos, i);
496 }
497 
498 void KGameCanvasItem::moveTo(const QPoint &newpos)
499 {
500  if(m_pos == newpos)
501  return;
502  m_pos = newpos;
503  if(m_visible && m_canvas)
504  changed();
505 }
506 
507 QPoint KGameCanvasItem::absolutePosition() const
508 {
509  if (m_canvas) {
510  return m_canvas->canvasPosition() + m_pos;
511  }
512  else {
513  return m_pos;
514  }
515 }
516 
517 /*
518  KGameCanvasGroup
519 */
520 KGameCanvasGroup::KGameCanvasGroup(KGameCanvasAbstract* KGameCanvas)
521 : KGameCanvasItem(KGameCanvas)
522 , KGameCanvasAbstract()
523 , m_child_rect_changed(true) {
524 
525 }
526 
527 KGameCanvasGroup::~KGameCanvasGroup() {
528 
529 }
530 
531 void KGameCanvasGroup::ensureAnimating() {
532  setAnimated(true);
533 }
534 
535 void KGameCanvasGroup::ensurePendingUpdate() {
536  if(!m_changed || !m_child_rect_changed) {
537  m_child_rect_changed = true;
538  KGameCanvasItem::changed();
539  }
540 }
541 
542 void KGameCanvasGroup::updateChanges() {
543  if(!m_changed)
544  return;
545  for(int i=0;i<m_items.size();i++) {
546  KGameCanvasItem *el = m_items.at(i);
547 
548  if(el->m_changed)
549  el->updateChanges();
550  }
551  m_changed = false;
552 }
553 
554 void KGameCanvasGroup::changed() {
555  if(!m_changed) {
556  KGameCanvasItem::changed();
557 
558  for(int i=0;i<m_items.size();i++)
559  m_items[i]->changed();
560  }
561 }
562 
563 void KGameCanvasGroup::invalidate(const QRect& r, bool translate) {
564  if(m_canvas)
565  m_canvas->invalidate(translate ? r.translated(m_pos) : r, translate);
566  if(!m_changed)
567  ensurePendingUpdate();
568 }
569 
570 void KGameCanvasGroup::invalidate(const QRegion& r, bool translate) {
571  if(m_canvas)
572  m_canvas->invalidate(translate ? r.translated(m_pos) : r, translate);
573  if(!m_changed)
574  ensurePendingUpdate();
575 }
576 
577 void KGameCanvasGroup::advance(int msecs) {
578 
579  // The list MUST be copied, because it could be modified calling advance.
580  // After all since it is implicitly shared the copy will not happen unless
581  // is it actually modified
582  QList<KGameCanvasItem*> ait = m_animated_items;
583  for(int i=0;i<ait.size();i++)
584  {
585  KGameCanvasItem *el = ait[i];
586  el->advance(msecs);
587  }
588 
589  if(m_animated_items.empty())
590  setAnimated(false);
591 }
592 
593 void KGameCanvasGroup::paintInternal(QPainter* p, const QRect& prect,
594  const QRegion& preg, const QPoint& delta, double cumulative_opacity) {
595  cumulative_opacity *= (m_opacity/255.0);
596 
597  QPoint adelta = delta;
598  adelta += m_pos;
599  p->translate(m_pos);
600 
601  for(int i=0;i<m_items.size();i++) {
602  KGameCanvasItem *el = m_items.at(i);
603  QRect r = el->rect().translated(adelta);
604 
605  if( el->m_visible && prect.intersects( r ) && preg.contains( r ) ) {
606  el->m_last_rect = r;
607  el->paintInternal(p,prect,preg,adelta,cumulative_opacity);
608  }
609  }
610 
611  p->translate(-m_pos);
612 }
613 
614 void KGameCanvasGroup::paint(QPainter* /*p*/) {
615  Q_ASSERT(!"This function should never be called");
616 }
617 
618 QRect KGameCanvasGroup::rect() const
619 {
620  if(!m_child_rect_changed)
621  return m_last_child_rect.translated(m_pos);
622 
623  m_child_rect_changed = false;
624  m_last_child_rect = QRect();
625  for(int i=0;i<m_items.size();i++)
626  {
627  KGameCanvasItem *el = m_items[i];
628  if(el->m_visible)
629  m_last_child_rect |= el->rect();
630  }
631 
632  return m_last_child_rect.translated(m_pos);
633 }
634 
635 KGameCanvasWidget* KGameCanvasGroup::topLevelCanvas()
636 {
637  return m_canvas ? m_canvas->topLevelCanvas() : NULL;
638 }
639 
640 QPoint KGameCanvasGroup::canvasPosition() const {
641  return KGameCanvasItem::absolutePosition();
642 }
643 
644 /*
645  KGameCanvasDummy
646 */
647 KGameCanvasDummy::KGameCanvasDummy(KGameCanvasAbstract* KGameCanvas)
648  : KGameCanvasItem(KGameCanvas)
649 {
650 
651 }
652 
653 KGameCanvasDummy::~KGameCanvasDummy()
654 {
655 
656 }
657 
658 void KGameCanvasDummy::paint(QPainter* /*p*/) {
659 }
660 
661 QRect KGameCanvasDummy::rect() const
662 {
663  return QRect();
664 }
665 
666 
667 /*
668  KGameCanvasPixmap
669 */
670 KGameCanvasPixmap::KGameCanvasPixmap(const QPixmap& p, KGameCanvasAbstract* KGameCanvas)
671  : KGameCanvasItem(KGameCanvas), m_pixmap(p) {
672 
673 }
674 
675 KGameCanvasPixmap::KGameCanvasPixmap(KGameCanvasAbstract* KGameCanvas)
676  : KGameCanvasItem(KGameCanvas) {
677 
678 }
679 
680 KGameCanvasPixmap::~KGameCanvasPixmap() {
681 
682 }
683 
684 void KGameCanvasPixmap::setPixmap(const QPixmap& p) {
685  m_pixmap = p;
686  if(visible() && canvas() )
687  changed();
688 }
689 
690 void KGameCanvasPixmap::paint(QPainter* p) {
691  p->drawPixmap(pos(), m_pixmap);
692 }
693 
694 QRect KGameCanvasPixmap::rect() const {
695  return QRect(pos(), m_pixmap.size());
696 }
697 
698 KGameCanvasRenderedPixmap::KGameCanvasRenderedPixmap(KGameRenderer* renderer, const QString& spriteKey, KGameCanvasAbstract* canvas)
699  : KGameCanvasPixmap(canvas)
700  , KGameRendererClient(renderer, spriteKey)
701 {
702 }
703 
704 void KGameCanvasRenderedPixmap::receivePixmap(const QPixmap& pixmap)
705 {
706  KGameCanvasPixmap::setPixmap(pixmap);
707 }
708 
709 /*
710  KGameCanvasTiledPixmap
711 */
712 KGameCanvasTiledPixmap::KGameCanvasTiledPixmap(const QPixmap& pixmap, const QSize &size, const QPoint &origin,
713  bool move_orig, KGameCanvasAbstract* KGameCanvas)
714  : KGameCanvasItem(KGameCanvas)
715  , m_pixmap(pixmap)
716  , m_size(size)
717  , m_origin(origin)
718  , m_move_orig(move_orig) {
719 
720 }
721 
722 KGameCanvasTiledPixmap::KGameCanvasTiledPixmap(KGameCanvasAbstract* KGameCanvas)
723  : KGameCanvasItem(KGameCanvas)
724  , m_size(0,0)
725  , m_origin(0,0)
726  , m_move_orig(false) {
727 
728 }
729 
730 KGameCanvasTiledPixmap::~KGameCanvasTiledPixmap() {
731 
732 }
733 
734 void KGameCanvasTiledPixmap::setPixmap(const QPixmap& pixmap) {
735  m_pixmap = pixmap;
736  if(visible() && canvas() )
737  changed();
738 }
739 
740 void KGameCanvasTiledPixmap::setSize(const QSize &size) {
741  m_size = size;
742  if(visible() && canvas() )
743  changed();
744 }
745 
746 void KGameCanvasTiledPixmap::setOrigin(const QPoint &origin)
747 {
748  m_origin = m_move_orig ? origin - pos() : origin;
749 
750  if(visible() && canvas() )
751  changed();
752 }
753 
754 
755 void KGameCanvasTiledPixmap::setMoveOrigin(bool move_orig)
756 {
757  if(move_orig && !m_move_orig)
758  m_origin -= pos();
759  if(move_orig && !m_move_orig)
760  m_origin += pos();
761  m_move_orig = move_orig;
762 }
763 
764 void KGameCanvasTiledPixmap::paint(QPainter* p)
765 {
766  if(m_move_orig)
767  p->drawTiledPixmap( rect(), m_pixmap, m_origin);
768  else
769  p->drawTiledPixmap( rect(), m_pixmap, m_origin+pos() );
770 }
771 
772 QRect KGameCanvasTiledPixmap::rect() const
773 {
774  return QRect(pos(), m_size);
775 }
776 
777 
778 /*
779  KGameCanvasRectangle
780 */
781 KGameCanvasRectangle::KGameCanvasRectangle(const QColor& color, const QSize &size, KGameCanvasAbstract* KGameCanvas)
782  : KGameCanvasItem(KGameCanvas)
783  , m_color(color)
784  , m_size(size)
785 {
786 
787 }
788 
789 KGameCanvasRectangle::KGameCanvasRectangle(KGameCanvasAbstract* KGameCanvas)
790  : KGameCanvasItem(KGameCanvas)
791  , m_size(0,0)
792 {
793 
794 }
795 
796 KGameCanvasRectangle::~KGameCanvasRectangle()
797 {
798 
799 }
800 
801 void KGameCanvasRectangle::setColor(const QColor& color)
802 {
803  m_color = color;
804  if(visible() && canvas() )
805  changed();
806 }
807 
808 void KGameCanvasRectangle::setSize(const QSize &size)
809 {
810  m_size = size;
811  if(visible() && canvas() )
812  changed();
813 }
814 
815 void KGameCanvasRectangle::paint(QPainter* p) {
816  p->fillRect( rect(), m_color );
817 }
818 
819 QRect KGameCanvasRectangle::rect() const {
820  return QRect(pos(), m_size);
821 }
822 
823 
824 /*
825  KGameCanvasText
826 */
827 KGameCanvasText::KGameCanvasText(const QString& text, const QColor& color,
828  const QFont& font, HPos hp, VPos vp,
829  KGameCanvasAbstract* KGameCanvas)
830  : KGameCanvasItem(KGameCanvas)
831  , m_text(text)
832  , m_color(color)
833  , m_font(font)
834  , m_hpos(hp)
835  , m_vpos(vp) {
836  calcBoundingRect();
837 }
838 
839 KGameCanvasText::KGameCanvasText(KGameCanvasAbstract* KGameCanvas)
840  : KGameCanvasItem(KGameCanvas)
841  //, m_text("")
842  , m_color(Qt::black)
843  , m_font(QApplication::font())
844  , m_hpos(HStart)
845  , m_vpos(VBaseline) {
846 
847 }
848 
849 KGameCanvasText::~KGameCanvasText() {
850 
851 }
852 
853 void KGameCanvasText::calcBoundingRect() {
854  m_bounding_rect = QFontMetrics(m_font).boundingRect(m_text);
855  /*printf("b rect is %d %d %d %d\n",
856  m_bounding_rect.x(),
857  m_bounding_rect.y(),
858  m_bounding_rect.width(),
859  m_bounding_rect.height() );*/
860 }
861 
862 void KGameCanvasText::setText(const QString& text) {
863  if(m_text == text)
864  return;
865  m_text = text;
866  calcBoundingRect();
867 
868  if(visible() && canvas() )
869  changed();
870 }
871 
872 void KGameCanvasText::setColor(const QColor& color) {
873  m_color = color;
874 }
875 
876 void KGameCanvasText::setFont(const QFont& font) {
877  m_font = font;
878  calcBoundingRect();
879 
880  if(visible() && canvas() )
881  changed();
882 }
883 
884 void KGameCanvasText::setPositioning(HPos hp, VPos vp) {
885  pos() += offsetToDrawPos();
886  m_hpos = hp;
887  m_vpos = vp;
888  pos() -= offsetToDrawPos();
889 }
890 
891 QPoint KGameCanvasText::offsetToDrawPos() const {
892  QPoint retv;
893 
894  switch(m_hpos) {
895  case HStart:
896  retv.setX(0);
897  break;
898  case HLeft:
899  retv.setX(-m_bounding_rect.left());
900  break;
901  case HRight:
902  retv.setX(-m_bounding_rect.right());
903  break;
904  case HCenter:
905  retv.setX(-(m_bounding_rect.left()+m_bounding_rect.right())/2);
906  break;
907  }
908 
909  switch(m_vpos) {
910  case VBaseline:
911  retv.setY(0);
912  break;
913  case VTop:
914  retv.setY(-m_bounding_rect.top());
915  break;
916  case VBottom:
917  retv.setY(-m_bounding_rect.bottom());
918  break;
919  case VCenter:
920  retv.setY(-(m_bounding_rect.top()+m_bounding_rect.bottom())/2);
921  break;
922  }
923 
924  return retv;
925 }
926 
927 void KGameCanvasText::paint(QPainter* p) {
928  p->setPen(m_color);
929  p->setFont(m_font);
930  p->drawText( pos() + offsetToDrawPos(), m_text);
931 }
932 
933 QRect KGameCanvasText::rect() const {
934  return m_bounding_rect.translated( pos() + offsetToDrawPos() );
935 }
936 
937 
938 /*
939  KGameCanvasPicture
940 */
941 KGameCanvasPicture::KGameCanvasPicture(const QPicture& p, KGameCanvasAbstract* KGameCanvas)
942  : KGameCanvasItem(KGameCanvas), m_picture(p)
943 {
944 
945 }
946 
947 KGameCanvasPicture::KGameCanvasPicture(KGameCanvasAbstract* KGameCanvas)
948  : KGameCanvasItem(KGameCanvas)
949 {
950 
951 }
952 
953 KGameCanvasPicture::~KGameCanvasPicture()
954 {
955 
956 }
957 
958 void KGameCanvasPicture::setPicture(const QPicture& p)
959 {
960  m_picture = p;
961 
962  if(visible() && canvas() )
963  changed();
964 }
965 
966 void KGameCanvasPicture::paint(QPainter* p)
967 {
968  p->drawPicture(pos(), m_picture);
969 }
970 
971 QRect KGameCanvasPicture::rect() const
972 {
973  return m_picture.boundingRect().translated( pos());
974 }
975 
976 KGameCanvasAdapter::KGameCanvasAdapter()
977 : m_child_rect_valid(false)
978 {
979 }
980 
981 QRect KGameCanvasAdapter::childRect()
982 {
983  if (!m_child_rect_valid) {
984  m_child_rect = QRect();
985  foreach (KGameCanvasItem* el, m_items) {
986  m_child_rect |= el->rect();
987  }
988  m_child_rect_valid = true;
989  }
990 
991  return m_child_rect;
992 }
993 
994 void KGameCanvasAdapter::render(QPainter *painter)
995 {
996  foreach (KGameCanvasItem* el, m_items) {
997  if (el->m_visible) {
998  el->m_last_rect = el->rect();
999  el->paintInternal(painter, childRect(), childRect(), QPoint(), 1.0);
1000  }
1001  }
1002 }
1003 
1004 void KGameCanvasAdapter::ensurePendingUpdate()
1005 {
1006  m_child_rect_valid = false;
1007 
1008  foreach (KGameCanvasItem* el, m_items) {
1009  if (el->m_changed) {
1010  el->updateChanges();
1011  }
1012  }
1013 
1014  updateParent(m_invalidated_rect);
1015  m_invalidated_rect = QRect();
1016 }
1017 
1018 void KGameCanvasAdapter::invalidate(const QRegion& r, bool)
1019 {
1020  invalidate(r.boundingRect());
1021 }
1022 
1023 void KGameCanvasAdapter::invalidate(const QRect& r, bool)
1024 {
1025  m_invalidated_rect |= r;
1026 }
1027 
1028 #include "kgamecanvas.moc"
KGameCanvasItem::stackUnder
void stackUnder(KGameCanvasItem *ref)
Restacks the item immediately under ref.
Definition: kgamecanvas.cpp:473
KGameCanvasText::font
QFont font() const
Returns the font.
Definition: kgamecanvas.h:545
KGameCanvasPixmap::rect
virtual QRect rect() const
Override this function to return the rect the item will be drawn into.
Definition: kgamecanvas.cpp:694
KGameCanvasRectangle::rect
virtual QRect rect() const
Override this function to return the rect the item will be drawn into.
Definition: kgamecanvas.cpp:819
QPainter::setOpacity
void setOpacity(qreal opacity)
QPixmap::size
QSize size() const
QWidget
KGameCanvasItem::setAnimated
void setAnimated(bool a)
Set the item as animated or not.
Definition: kgamecanvas.cpp:376
DEBUG_CANVAS_PAINTS
#define DEBUG_CANVAS_PAINTS
Definition: kgamecanvas.cpp:45
KGameCanvasPixmap::paint
virtual void paint(QPainter *p)
Override this function to draw the item with the painter.
Definition: kgamecanvas.cpp:690
QRect::size
QSize size() const
KGameCanvasRectangle::paint
virtual void paint(QPainter *p)
Override this function to draw the item with the painter.
Definition: kgamecanvas.cpp:815
KGameCanvasTiledPixmap::setMoveOrigin
void setMoveOrigin(bool move_orig)
Sets if the origin of the brush will be moved with the pixmap.
Definition: kgamecanvas.cpp:755
KGameCanvasWidget::setAnimationDelay
void setAnimationDelay(int d)
Set the delay of the animation, in milliseconds.
Definition: kgamecanvas.cpp:215
KGameCanvasItem
An abstract item.
Definition: kgamecanvas.h:114
KGameCanvasText::VTop
Definition: kgamecanvas.h:505
QSize::width
int width() const
KGameCanvasText::VPos
VPos
Specifies the meaning of the y coordinate of the item.
Definition: kgamecanvas.h:503
QPixmap::width
int width() const
QPicture::boundingRect
QRect boundingRect() const
QPainter::fillRect
void fillRect(const QRectF &rectangle, const QBrush &brush)
KGameCanvasWidget
Container widget.
Definition: kgamecanvas.h:573
KGameCanvasText::setFont
void setFont(const QFont &font)
Sets the font.
Definition: kgamecanvas.cpp:876
KGameCanvasAbstract
Container class.
Definition: kgamecanvas.h:55
QRect::right
int right() const
KGameCanvasGroup::rect
virtual QRect rect() const
This returns the bouding rect of all children.
Definition: kgamecanvas.cpp:618
KGameCanvasGroup::KGameCanvasGroup
KGameCanvasGroup(KGameCanvasAbstract *canvas=NULL)
Constructor.
Definition: kgamecanvas.cpp:520
KGameCanvasPixmap::KGameCanvasPixmap
KGameCanvasPixmap(const QPixmap &pixmap, KGameCanvasAbstract *canvas=NULL)
Constructor, specifying the pixmap to use.
Definition: kgamecanvas.cpp:670
KGameCanvasText::paint
virtual void paint(QPainter *p)
Override this function to draw the item with the painter.
Definition: kgamecanvas.cpp:927
KGameCanvasDummy::KGameCanvasDummy
KGameCanvasDummy(KGameCanvasAbstract *canvas=NULL)
Constructor.
Definition: kgamecanvas.cpp:647
KGameCanvasText::HCenter
Definition: kgamecanvas.h:497
KGameCanvasAbstract::ensurePendingUpdate
virtual void ensurePendingUpdate()=0
Virtual function to ensure an update is pending, called from children.
QFont
KGameCanvasAbstract::itemsAt
QList< KGameCanvasItem * > itemsAt(const QPoint &pos) const
Helper function to retrieve all the items at the given position, starting from the topmost one...
Definition: kgamecanvas.cpp:69
KGameCanvasAbstract::m_animated_items
QList< KGameCanvasItem * > m_animated_items
Definition: kgamecanvas.h:61
KGameCanvasItem::moveTo
void moveTo(const QPoint &newpos)
Sets a new position.
Definition: kgamecanvas.cpp:498
KGameCanvasText::color
QColor color() const
Returns the color.
Definition: kgamecanvas.h:539
KGameCanvasTiledPixmap::pixmap
QPixmap pixmap() const
Returns the pixmap.
Definition: kgamecanvas.h:416
QList::at
const T & at(int i) const
KGameCanvasTiledPixmap::rect
virtual QRect rect() const
Override this function to return the rect the item will be drawn into.
Definition: kgamecanvas.cpp:772
QApplication
QList::removeAt
void removeAt(int i)
QRect::intersects
bool intersects(const QRect &rectangle) const
QPixmap::fromImage
QPixmap fromImage(const QImage &image, QFlags< Qt::ImageConversionFlag > flags)
KGameCanvasTiledPixmap::KGameCanvasTiledPixmap
KGameCanvasTiledPixmap(const QPixmap &pixmap, const QSize &size, const QPoint &origin, bool move_orig, KGameCanvasAbstract *canvas=NULL)
Constructor, specifying the pixmap and the parameters to use.
Definition: kgamecanvas.cpp:712
kgamecanvas.h
QPainter::drawTiledPixmap
void drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &position)
QRegion::boundingRect
QRect boundingRect() const
QPoint
KGameCanvasItem::setVisible
void setVisible(bool v)
Set the item as visible or hidden.
Definition: kgamecanvas.cpp:361
KGameCanvasItem::paint
virtual void paint(QPainter *p)=0
Override this function to draw the item with the painter.
QFontMetrics
KGameCanvasGroup::topLevelCanvas
KGameCanvasWidget * topLevelCanvas()
returns the toplevel canvas (or null if it is in an orphan tree)
Definition: kgamecanvas.cpp:635
KGameCanvasItem::raise
void raise()
Restacks the item on the top of the canvas.
Definition: kgamecanvas.cpp:424
KGameCanvasItem::layered
virtual bool layered() const
Override this function to specify if the painting operations will paint over each other...
Definition: kgamecanvas.cpp:400
KGameCanvasTiledPixmap::setSize
void setSize(const QSize &size)
Sets the size.
Definition: kgamecanvas.cpp:740
QTime
KGameCanvasAbstract::KGameCanvasAbstract
KGameCanvasAbstract()
The constructor.
Definition: kgamecanvas.cpp:50
KGameCanvasWidget::mSecs
int mSecs()
Return the number of millisecons from the creation of the canvas (see also KGameCanvasItem::advance) ...
Definition: kgamecanvas.cpp:219
QList::size
int size() const
KGameCanvasRectangle::setColor
void setColor(const QColor &color)
Sets the color.
Definition: kgamecanvas.cpp:801
KGameCanvasText::setColor
void setColor(const QColor &color)
Sets the color.
Definition: kgamecanvas.cpp:872
KGameCanvasItem::absolutePosition
QPoint absolutePosition() const
Definition: kgamecanvas.cpp:507
KGameCanvasItem::canvas
KGameCanvasAbstract * canvas() const
Returns the canvas that is actually "owning" the item.
Definition: kgamecanvas.h:192
QList::indexOf
int indexOf(const T &value, int from) const
KGameCanvasText::VBottom
Definition: kgamecanvas.h:506
KGameCanvasText::HLeft
Definition: kgamecanvas.h:495
QPaintEvent::rect
const QRect & rect() const
KGameCanvasAbstract::itemAt
KGameCanvasItem * itemAt(const QPoint &pos) const
Helper function to retrieve the topmost item at the given position.
Definition: kgamecanvas.cpp:60
KGameCanvasDummy::paint
virtual void paint(QPainter *p)
This function does nothing (of course)
Definition: kgamecanvas.cpp:658
KGameCanvasPixmap::~KGameCanvasPixmap
virtual ~KGameCanvasPixmap()
Definition: kgamecanvas.cpp:680
KGameCanvasWidget::KGameCanvasWidget
KGameCanvasWidget(QWidget *parent=NULL)
The constructor.
Definition: kgamecanvas.cpp:104
QRect
QFontMetrics::boundingRect
QRect boundingRect(QChar ch) const
QPainter::setFont
void setFont(const QFont &font)
KGameCanvasGroup::advance
virtual void advance(int msecs)
Animations step, updates the animation for the children.
Definition: kgamecanvas.cpp:577
KGameCanvasTiledPixmap::paint
virtual void paint(QPainter *p)
Override this function to draw the item with the painter.
Definition: kgamecanvas.cpp:764
KGameCanvasDummy::rect
virtual QRect rect() const
This returns an empty rectangle.
Definition: kgamecanvas.cpp:661
KGameCanvasText::KGameCanvasText
KGameCanvasText(const QString &text, const QColor &color, const QFont &font, HPos hp, VPos vp, KGameCanvasAbstract *canvas=NULL)
Constructor, specifying the text and the parameters to use.
Definition: kgamecanvas.cpp:827
KGameCanvasPicture::paint
virtual void paint(QPainter *p)
Override this function to draw the item with the painter.
Definition: kgamecanvas.cpp:966
QList::append
void append(const T &value)
KGameCanvasRectangle::setSize
void setSize(const QSize &size)
Sets the size.
Definition: kgamecanvas.cpp:808
QList::empty
bool empty() const
QTimer
KGameCanvasPicture::~KGameCanvasPicture
virtual ~KGameCanvasPicture()
Definition: kgamecanvas.cpp:953
KGameCanvasText::VCenter
Definition: kgamecanvas.h:507
QRect::top
int top() const
QPainter::setPen
void setPen(const QColor &color)
KGameCanvasRectangle::KGameCanvasRectangle
KGameCanvasRectangle(const QColor &color, const QSize &size, KGameCanvasAbstract *canvas=NULL)
Constructor, specifying the pixmap and the parameters to use.
Definition: kgamecanvas.cpp:781
KGameCanvasTiledPixmap::~KGameCanvasTiledPixmap
virtual ~KGameCanvasTiledPixmap()
Definition: kgamecanvas.cpp:730
QRect::left
int left() const
QRegion::translated
QRegion translated(int dx, int dy) const
QPainter::drawPixmap
void drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
QPainter
QList::removeAll
int removeAll(const T &value)
QPainter::drawText
void drawText(const QPointF &position, const QString &text)
KGameCanvasText::text
QString text() const
Returns the text.
Definition: kgamecanvas.h:533
KGameCanvasItem::changed
virtual void changed()
schedule an update if the item
Definition: kgamecanvas.cpp:254
QRect::translated
QRect translated(int dx, int dy) const
QRect::contains
bool contains(const QPoint &point, bool proper) const
QList::first
T & first()
QString
QList< KGameCanvasItem * >
QColor
KGameCanvasItem::stackOver
void stackOver(KGameCanvasItem *ref)
Restacks the item immediately over ref.
Definition: kgamecanvas.cpp:449
QPixmap
QApplication::syncX
void syncX()
KGameCanvasAbstract::~KGameCanvasAbstract
virtual ~KGameCanvasAbstract()
Definition: kgamecanvas.cpp:54
QRegion::contains
bool contains(const QPoint &p) const
KGameCanvasPixmap
A pixmap (sprite).
Definition: kgamecanvas.h:346
KGameCanvasWidget::canvasPosition
virtual QPoint canvasPosition() const
Definition: kgamecanvas.cpp:227
QSize
QPixmap::height
int height() const
KGameCanvasWidget::~KGameCanvasWidget
virtual ~KGameCanvasWidget()
Definition: kgamecanvas.cpp:111
KGameCanvasItem::putInCanvas
void putInCanvas(KGameCanvasAbstract *canvas)
Lets you specify the owning canvas.
Definition: kgamecanvas.cpp:336
KGameCanvasPicture::KGameCanvasPicture
KGameCanvasPicture(const QPicture &picture, KGameCanvasAbstract *canvas=NULL)
Constructor, specifying the picture to use.
Definition: kgamecanvas.cpp:941
QRect::isEmpty
bool isEmpty() const
KGameCanvasDummy::~KGameCanvasDummy
virtual ~KGameCanvasDummy()
Definition: kgamecanvas.cpp:653
QImage
KGameCanvasAbstract::invalidate
virtual void invalidate(const QRect &r, bool translate=true)=0
Virtual function to update a rect.
KGameCanvasText::HRight
Definition: kgamecanvas.h:496
QWidget::repaint
void repaint()
KGameCanvasRectangle::color
QColor color() const
Returns the color.
Definition: kgamecanvas.h:466
KGameRendererClient
KGameCanvasWidget::topLevelCanvas
KGameCanvasWidget * topLevelCanvas()
returns 'this'
Definition: kgamecanvas.cpp:223
KGameCanvasText::HStart
Definition: kgamecanvas.h:494
KGameCanvasRenderedPixmap::KGameCanvasRenderedPixmap
KGameCanvasRenderedPixmap(KGameRenderer *renderer, const QString &spriteKey, KGameCanvasAbstract *canvas=0)
Definition: kgamecanvas.cpp:698
KGameCanvasText::setPositioning
void setPositioning(HPos hp, VPos vp)
Sets the positioning style.
Definition: kgamecanvas.cpp:884
KGameCanvasGroup::~KGameCanvasGroup
virtual ~KGameCanvasGroup()
Definition: kgamecanvas.cpp:527
KGameCanvasPixmap::setPixmap
void setPixmap(const QPixmap &pixmap)
Sets the pixmap of the sprite.
Definition: kgamecanvas.cpp:684
KGameCanvasTiledPixmap::setOrigin
void setOrigin(const QPoint &size)
Sets the origin of the tiles.
Definition: kgamecanvas.cpp:746
KGameCanvasItem::advance
virtual void advance(int msecs)
Override this function to handle animations, the default function does nothing.
Definition: kgamecanvas.cpp:402
QSize::expandedTo
QSize expandedTo(const QSize &otherSize) const
QList::insert
void insert(int i, const T &value)
KGameCanvasText::~KGameCanvasText
virtual ~KGameCanvasText()
Definition: kgamecanvas.cpp:849
KGameCanvasItem::pos
QPoint pos() const
Returns the position of the item.
Definition: kgamecanvas.h:202
KGameCanvasItem::opacity
int opacity() const
Returns the opacity of the item.
Definition: kgamecanvas.h:168
KGameCanvasText::HPos
HPos
Specifies the meaning of the x coordinate of the item.
Definition: kgamecanvas.h:493
KGameCanvasItem::visible
bool visible() const
Returns true if the item is visible.
Definition: kgamecanvas.h:156
KGameCanvasItem::rect
virtual QRect rect() const =0
Override this function to return the rect the item will be drawn into.
QList::last
T & last()
KGameCanvasItem::setOpacity
void setOpacity(int o)
Set the item's opacity value (int the 0-255 range)
Definition: kgamecanvas.cpp:391
KGameCanvasItem::~KGameCanvasItem
virtual ~KGameCanvasItem()
Definition: kgamecanvas.cpp:244
KGameCanvasAbstract::ensureAnimating
virtual void ensureAnimating()=0
Virtual function to let know the canvas that it has animated items in it.
QSize::height
int height() const
QRect::bottom
int bottom() const
KGameCanvasText::setText
void setText(const QString &text)
Sets the text.
Definition: kgamecanvas.cpp:862
QRect::topLeft
QPoint topLeft() const
QPicture
QPoint::setX
void setX(int x)
QPoint::setY
void setY(int y)
KGameCanvasAbstract::canvasPosition
virtual QPoint canvasPosition() const =0
QPainter::translate
void translate(const QPointF &offset)
KGameCanvasItem::KGameCanvasItem
KGameCanvasItem(KGameCanvasAbstract *canvas=NULL)
Constructor, it allows you to specify the reference canvas or to create an orphan item that will be p...
Definition: kgamecanvas.cpp:234
QRegion::isEmpty
bool isEmpty() const
KGameCanvasGroup::paint
virtual void paint(QPainter *p)
This paints all the children.
Definition: kgamecanvas.cpp:614
KGameCanvasItem::lower
void lower()
Restacks the item on the bottom of the canvas.
Definition: kgamecanvas.cpp:436
KGameCanvasText::rect
virtual QRect rect() const
Override this function to return the rect the item will be drawn into.
Definition: kgamecanvas.cpp:933
QList::prepend
void prepend(const T &value)
KGameCanvasGroup::canvasPosition
virtual QPoint canvasPosition() const
Definition: kgamecanvas.cpp:640
KGameCanvasRenderedPixmap::receivePixmap
virtual void receivePixmap(const QPixmap &pixmap)
Definition: kgamecanvas.cpp:704
KGameCanvasAdapter::KGameCanvasAdapter
KGameCanvasAdapter()
Constructor.
Definition: kgamecanvas.cpp:976
QPainter::drawPicture
void drawPicture(const QPointF &point, const QPicture &picture)
KGameCanvasPicture::rect
virtual QRect rect() const
Override this function to return the rect the item will be drawn into.
Definition: kgamecanvas.cpp:971
QPaintEvent
KGameCanvasAbstract::m_items
QList< KGameCanvasItem * > m_items
Definition: kgamecanvas.h:60
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
KGameCanvasAdapter::updateParent
virtual void updateParent(const QRect &rect)=0
Notify the parent that the adapter content inside rect needs to be redrawn.
KGameCanvasRectangle::~KGameCanvasRectangle
virtual ~KGameCanvasRectangle()
Definition: kgamecanvas.cpp:796
KGameCanvasTiledPixmap::setPixmap
void setPixmap(const QPixmap &pixmap)
Sets the pixmap of the tile.
Definition: kgamecanvas.cpp:734
QRegion
KGameCanvasTiledPixmap::origin
QPoint origin() const
The origin.
Definition: kgamecanvas.h:425
KGameCanvasAdapter::render
virtual void render(QPainter *p)
Draw the items of the adapter using the specified painter.
Definition: kgamecanvas.cpp:994
KGameCanvasPicture::setPicture
void setPicture(const QPicture &picture)
Sets the picture of the sprite.
Definition: kgamecanvas.cpp:958
KGameCanvasText::VBaseline
Definition: kgamecanvas.h:504
QTimer::singleShot
singleShot
QRect::rect
void rect(int *x, int *y, int *width, int *height) const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:18:50 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libkdegames/libkdegamesprivate

Skip menu "libkdegames/libkdegamesprivate"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegames API Reference

Skip menu "kdegames API Reference"
  • granatier
  • kapman
  • kblackbox
  • kgoldrunner
  • kigo
  • kmahjongg
  • KShisen
  • ksquares
  • libkdegames
  •   highscore
  •   libkdegamesprivate
  •     kgame
  • libkmahjongg
  • palapeli
  •   libpala

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal