Code

add preferences for path flashing on mouseover
[inkscape.git] / src / display / canvas-temporary-item.cpp
1 /** \file\r
2  * Provides a class that can contain active TemporaryItem's on a desktop\r
3  * When the object is deleted, it also deletes the canvasitem it contains!\r
4  * This object should be created/managed by a TemporaryItemList.\r
5  * After its lifetime, it fires the timeout signal, afterwards *it deletes itself*.\r
6  *\r
7  * (part of code inspired by message-stack.cpp)\r
8  *\r
9  * Authors:\r
10  *   Johan Engelen\r
11  *\r
12  * Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>\r
13  *\r
14  * Released under GNU GPL, read the file 'COPYING' for more information\r
15  */\r
16 \r
17 #include "display/canvas-temporary-item.h"\r
18 \r
19 #include <gtk/gtkobject.h>\r
20 \r
21 namespace Inkscape {\r
22 namespace Display {\r
23 \r
24 /** lifetime is measured in milliseconds\r
25  */\r
26 TemporaryItem::TemporaryItem(SPCanvasItem *item, guint lifetime)\r
27     : canvasitem(item),\r
28       timeout_id(0)\r
29 {\r
30     // zero lifetime means stay forever, so do not add timeout event.\r
31     if (lifetime > 0) {\r
32         timeout_id = g_timeout_add(lifetime, &TemporaryItem::_timeout, this);\r
33     }\r
34 }\r
35 \r
36 TemporaryItem::~TemporaryItem()\r
37 {\r
38     // when it has not expired yet...\r
39     if (timeout_id) {\r
40         g_source_remove(timeout_id);\r
41         timeout_id = 0;\r
42     }\r
43 \r
44     if (canvasitem) {\r
45         // destroying the item automatically hides it\r
46         gtk_object_destroy (GTK_OBJECT (canvasitem));\r
47         canvasitem = NULL;\r
48     }\r
49 }\r
50 \r
51 /* static method*/\r
52 gboolean TemporaryItem::_timeout(gpointer data) {\r
53     TemporaryItem *tempitem = reinterpret_cast<TemporaryItem *>(data);\r
54     tempitem->timeout_id = 0;\r
55     tempitem->signal_timeout.emit(tempitem);\r
56     delete tempitem;\r
57     return FALSE;\r
58 }\r
59 \r
60 \r
61 } //namespace Display\r
62 } /* namespace Inkscape */\r
63 \r
64 /*\r
65   Local Variables:\r
66   mode:c++\r
67   c-file-style:"stroustrup"\r
68   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\r
69   indent-tabs-mode:nil\r
70   fill-column:99\r
71   End:\r
72 */\r
73 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :\r