summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan McIntosh <ian_mcintosh@linuxadvocate.org>2005-10-11 22:04:05 +0000
committerIan McIntosh <ian_mcintosh@linuxadvocate.org>2005-10-11 22:04:05 +0000
commitec7720937150fc89cb721e5553d98178d15a7c2a (patch)
treea1679c94139634bb16904e267529544ec043e1f4
parent488a4cd652a42e09058fd4b589086677e49547de (diff)
Add checkbox to hide original line.
Fix cleanup code (remove memory leak?) Add util_g_free_with_param, a generic g_free-like callback that takes an (unused) user-data param.
-rw-r--r--ChangeLog6
-rw-r--r--data/layers.xml16
-rw-r--r--data/roadster.glade63
-rw-r--r--src/import_tiger.c59
-rw-r--r--src/map.c8
-rw-r--r--src/test_poly.c110
-rw-r--r--src/util.c6
-rw-r--r--src/util.h1
8 files changed, 145 insertions, 124 deletions
diff --git a/ChangeLog b/ChangeLog
index 509539f..7284b26 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-12 Ian McIntosh <ian_mcintosh@linuxadvocate.org>
+
+ * src/test_poly.c: Add checkbox to hide original line.
+ * src/import_tiger.c: Fix cleanup code (remove memory leak?)
+ * src/util.c: Add util_g_free_with_param, a generic g_free-like callback that takes an (unused) user-data param.
+
2005-10-11 Ian McIntosh <ian_mcintosh@linuxadvocate.org>
* src/test_poly.c:
diff --git a/data/layers.xml b/data/layers.xml
index 56825ad..3ae8c2f 100644
--- a/data/layers.xml
+++ b/data/layers.xml
@@ -110,7 +110,7 @@
<property zoom-level="1" name="line-width" value="1" />
<property zoom-level="2" name="line-width" value="1" />
<property zoom-level="3" name="line-width" value="1" />
- <property zoom-level="4" name="line-width" value="2" />
+ <property zoom-level="4" name="line-width" value="1" />
<property zoom-level="5" name="line-width" value="2" />
<property zoom-level="1-5" name="line-cap" value="square" />
@@ -123,10 +123,7 @@
</layer>
<layer data-source="minor-highways" draw-type="lines">
<!-- outer color line in minor highways -->
- <property zoom-level="1" name="line-width" value="2" />
- <property zoom-level="2" name="line-width" value="2" />
- <property zoom-level="3" name="line-width" value="3" />
- <property zoom-level="4" name="line-width" value="4" />
+ <property zoom-level="4" name="line-width" value="3" />
<property zoom-level="5" name="line-width" value="4" />
<property zoom-level="1-5" name="color" value="#DdAe31ff" />
@@ -142,12 +139,14 @@
<!-- major road top -->
<property zoom-level="4-5" name="line-width" value="1" />
<property zoom-level="4-5" name="line-cap" value="square" />
+ <property zoom-level="4-5" name="color" value="#EFE384FF" />
+
<property zoom-level="6" name="line-width" value="4" />
<property zoom-level="7" name="line-width" value="6" />
<property zoom-level="8" name="line-width" value="8" />
<property zoom-level="9" name="line-width" value="14" />
<property zoom-level="10" name="line-width" value="24" />
- <property zoom-level="3-10" name="color" value="#FFF384FF" />
+ <property zoom-level="6-10" name="color" value="#FFF384FF" />
</layer>
<layer data-source="minor-highway-ramps" draw-type="lines">
<!-- minor highway ramp top -->
@@ -178,8 +177,9 @@
<layer data-source="major-roads" draw-type="lines">
<!-- major roads bottom -->
- <property zoom-level="4-5" name="line-width" value="3" />
- <property zoom-level="4-5" name="color" value="#d5d5b0ff" />
+<!-- <property zoom-level="4-5" name="line-width" value="3" /> -->
+<!-- <property zoom-level="4-5" name="color" value="#e5e5c0ff" /> -->
+
<property zoom-level="6" name="line-width" value="6" />
<property zoom-level="7" name="line-width" value="8" />
<property zoom-level="8" name="line-width" value="10" />
diff --git a/data/roadster.glade b/data/roadster.glade
index 7736b07..eb59457 100644
--- a/data/roadster.glade
+++ b/data/roadster.glade
@@ -5772,22 +5772,55 @@ review</property>
</child>
<child>
- <widget class="GtkLabel" id="test_polylabel">
+ <widget class="GtkHBox" id="hbox104">
<property name="visible">True</property>
- <property name="label" translatable="yes">label92389</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="test_polylabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">label92389</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="test_polyhidecheck">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Hide Line</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="test_poly_on_hidecheck_toggled" last_modification_time="Wed, 12 Oct 2005 02:30:32 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
diff --git a/src/import_tiger.c b/src/import_tiger.c
index 06abd7d..97e1050 100644
--- a/src/import_tiger.c
+++ b/src/import_tiger.c
@@ -103,6 +103,13 @@ typedef struct tiger_record_rt2
GPtrArray* pPointsArray;
} tiger_record_rt2_t;
+void callback_free_rt2(gpointer p)
+{
+ tiger_record_rt2_t* pRT2 = (tiger_record_rt2_t*)p;
+ g_ptr_array_foreach(pRT2->pPointsArray, util_g_free_with_param, NULL);
+ g_free(pRT2);
+}
+
#define TIGER_LANDMARK_NAME_LEN (30)
typedef struct tiger_record_rt7
{
@@ -125,19 +132,6 @@ typedef struct tiger_rt1_link
gint nPointBTZID; // the unique # for the rt1's PointB
} tiger_rt1_link_t;
-typedef struct tiger_import_process {
- gchar* pszFileDescription;
-
- GHashTable* pTableRT1;
- GHashTable* pTableRT2;
- GHashTable* pTableRT7;
- GHashTable* pTableRT8;
- GHashTable* pTableRTi;
- GHashTable* pTableRTc;
-
- GPtrArray* pBoundaryRT1s;
-} tiger_import_process_t;
-
typedef struct tiger_record_rti
{
// store a list of TLIDs for a polygonID
@@ -145,6 +139,13 @@ typedef struct tiger_record_rti
GPtrArray* pRT1LinksArray;
} tiger_record_rti_t;
+void callback_free_rti(gpointer p)
+{
+ tiger_record_rti_t* pRTi = (tiger_record_rti_t*)p;
+ g_ptr_array_foreach(pRTi->pRT1LinksArray, util_g_free_with_param, NULL);
+ g_free(pRTi);
+}
+
#define TIGER_CITY_NAME_LEN (60)
#define TIGER_FIPS55_LEN (5)
typedef struct tiger_record_rtc
@@ -155,6 +156,19 @@ typedef struct tiger_record_rtc
gint nCityID; // a database ID, stored here after it is inserted
} tiger_record_rtc_t;
+typedef struct tiger_import_process {
+ gchar* pszFileDescription;
+
+ GHashTable* pTableRT1;
+ GHashTable* pTableRT2;
+ GHashTable* pTableRT7;
+ GHashTable* pTableRT8;
+ GHashTable* pTableRTi;
+ GHashTable* pTableRTc;
+
+ GPtrArray* pBoundaryRT1s;
+} tiger_import_process_t;
+
// #define MAP_OBJECT_TYPE_NONE (0)
// #define MAP_OBJECT_TYPE_MINORROAD (1)
// #define MAP_OBJECT_TYPE_MAJORROAD (2)
@@ -1303,7 +1317,7 @@ static gboolean import_tiger_from_buffers(
importProcess.pBoundaryRT1s = g_ptr_array_new();
g_print("parsing RT1\n");
- importProcess.pTableRT1 = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);
+ importProcess.pTableRT1 = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, g_free);
import_tiger_parse_table_1(pBufferRT1, nLengthRT1, importProcess.pTableRT1, importProcess.pBoundaryRT1s);
g_print("RT1: %d records\n", g_hash_table_size(importProcess.pTableRT1));
@@ -1311,7 +1325,7 @@ static gboolean import_tiger_from_buffers(
importwindow_progress_pulse();
g_print("parsing RT2\n");
- importProcess.pTableRT2 = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);
+ importProcess.pTableRT2 = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, callback_free_rt2);
import_tiger_parse_table_2(pBufferRT2, nLengthRT2, importProcess.pTableRT2);
g_print("RT2: %d records\n", g_hash_table_size(importProcess.pTableRT2));
@@ -1319,7 +1333,7 @@ static gboolean import_tiger_from_buffers(
importwindow_progress_pulse();
g_print("parsing RT7\n");
- importProcess.pTableRT7 = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);
+ importProcess.pTableRT7 = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, g_free);
import_tiger_parse_table_7(pBufferRT7, nLengthRT7, importProcess.pTableRT7);
g_print("RT7: %d records\n", g_hash_table_size(importProcess.pTableRT7));
@@ -1327,7 +1341,7 @@ static gboolean import_tiger_from_buffers(
importwindow_progress_pulse();
g_print("parsing RT8\n");
- importProcess.pTableRT8 = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);
+ importProcess.pTableRT8 = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, g_free);
import_tiger_parse_table_8(pBufferRT8, nLengthRT8, importProcess.pTableRT8);
g_print("RT8: %d records\n", g_hash_table_size(importProcess.pTableRT8));
@@ -1335,12 +1349,12 @@ static gboolean import_tiger_from_buffers(
importwindow_progress_pulse();
g_print("parsing RTc\n");
- importProcess.pTableRTc = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);
+ importProcess.pTableRTc = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, g_free);
import_tiger_parse_table_c(pBufferRTc, nLengthRTc, importProcess.pTableRTc);
g_print("RTc: %d records\n", g_hash_table_size(importProcess.pTableRTc));
g_print("parsing RTi\n");
- importProcess.pTableRTi = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);
+ importProcess.pTableRTi = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, callback_free_rti);
import_tiger_parse_table_i(pBufferRTi, nLengthRTi, importProcess.pTableRTi);
g_print("RTi: %d records\n", g_hash_table_size(importProcess.pTableRTi));
@@ -1385,11 +1399,12 @@ g_print("cleaning up\n");
g_hash_table_destroy(importProcess.pTableRT7);
g_hash_table_destroy(importProcess.pTableRT8);
g_hash_table_destroy(importProcess.pTableRTc);
+
// XXX: this call sometimes segfaults:
- g_warning("leaking some memory due to unsolved bug in import. just restart roadster after/between imports ;)\n");
- //g_hash_table_destroy(importProcess.pTableRTi);
- g_free(importProcess.pszFileDescription);
+ //g_warning("leaking some memory due to unsolved bug in import. just restart roadster after/between imports ;)\n");
+ g_hash_table_destroy(importProcess.pTableRTi);
+ g_free(importProcess.pszFileDescription);
return TRUE;
}
diff --git a/src/map.c b/src/map.c
index a5a3f5a..64cbb94 100644
--- a/src/map.c
+++ b/src/map.c
@@ -98,10 +98,10 @@ zoomlevel_t g_sZoomLevels[NUM_ZOOM_LEVELS] = {
{ 3300000, UNIT_MILES, 5, UNIT_KILOMETERS, 7, 3, 2}, // 15
{ 2750000, UNIT_MILES, 5, UNIT_KILOMETERS, 7, 3, 2}, // 16
- { 2200000, UNIT_MILES, 8, UNIT_KILOMETERS, 5, 4, 1}, // *17
- { 1832250, UNIT_MILES, 8, UNIT_KILOMETERS, 5, 4, 1}, // 18
- { 1464500, UNIT_MILES, 8, UNIT_KILOMETERS, 5, 4, 1}, // 19
- { 1100000, UNIT_MILES, 8, UNIT_KILOMETERS, 5, 4, 1}, // 20
+ { 2200000, UNIT_MILES,20, UNIT_KILOMETERS,15, 4, 1}, // *17
+ { 1832250, UNIT_MILES,20, UNIT_KILOMETERS,15, 4, 1}, // 18
+ { 1464500, UNIT_MILES,20, UNIT_KILOMETERS,15, 4, 1}, // 19
+ { 1100000, UNIT_MILES,20, UNIT_KILOMETERS,15, 4, 1}, // 20
{ 729000, UNIT_MILES,10, UNIT_KILOMETERS, 8, 5, 1}, // *21
{ 607500, UNIT_MILES,10, UNIT_KILOMETERS, 8, 5, 1}, // 22
diff --git a/src/test_poly.c b/src/test_poly.c
index 6208806..ff3d6f3 100644
--- a/src/test_poly.c
+++ b/src/test_poly.c
@@ -19,14 +19,14 @@ struct {
GtkButton* pClearButton;
GtkDrawingArea* pDrawingArea;
GtkLabel* pLabel;
+ GtkCheckButton* pHideDrawingCheckButton;
GArray* pPointsArray;
} g_Test_Poly;
-static gboolean on_time_to_update(GtkWidget *pDrawingArea, GdkEventExpose *event, gpointer data);
-static void test_poly_draw();
-static gboolean on_mouse_button_click(GtkWidget* w, GdkEventButton *event);
-static gboolean on_clear_clicked(GtkWidget* w, GdkEventButton *event);
+static gboolean test_poly_on_time_to_update(GtkWidget *pDrawingArea, GdkEventExpose *event, gpointer data);
+static gboolean test_poly_on_mouse_button_click(GtkWidget* w, GdkEventButton *event);
+static gboolean test_poly_on_clearbutton_clicked(GtkWidget* w, GdkEventButton *event);
void test_poly_init(GladeXML* pGladeXML)
{
@@ -36,22 +36,23 @@ void test_poly_init(GladeXML* pGladeXML)
GLADE_LINK_WIDGET(pGladeXML, g_Test_Poly.pClearButton, GTK_BUTTON, "test_poly_clear_button");
GLADE_LINK_WIDGET(pGladeXML, g_Test_Poly.pLabel, GTK_LABEL, "test_polylabel");
GLADE_LINK_WIDGET(pGladeXML, g_Test_Poly.pDrawingArea, GTK_DRAWING_AREA, "test_polydrawingarea");
+ GLADE_LINK_WIDGET(pGladeXML, g_Test_Poly.pHideDrawingCheckButton, GTK_CHECK_BUTTON, "test_polyhidecheck");
g_Test_Poly.pPointsArray = g_array_new(FALSE, FALSE, sizeof(mappoint_t));
// Drawing area
gtk_widget_set_double_buffered(GTK_WIDGET(g_Test_Poly.pDrawingArea), FALSE);
gtk_widget_add_events(GTK_WIDGET(g_Test_Poly.pDrawingArea), GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
- g_signal_connect(G_OBJECT(g_Test_Poly.pDrawingArea), "expose-event", G_CALLBACK(on_time_to_update), NULL);
- g_signal_connect(G_OBJECT(g_Test_Poly.pDrawingArea), "button_press_event", G_CALLBACK(on_mouse_button_click), NULL);
+ g_signal_connect(G_OBJECT(g_Test_Poly.pDrawingArea), "expose-event", G_CALLBACK(test_poly_on_time_to_update), NULL);
+ g_signal_connect(G_OBJECT(g_Test_Poly.pDrawingArea), "button_press_event", G_CALLBACK(test_poly_on_mouse_button_click), NULL);
// Scale
- g_signal_connect(G_OBJECT(g_Test_Poly.pScale), "value-changed", G_CALLBACK(on_time_to_update), NULL);
+ g_signal_connect(G_OBJECT(g_Test_Poly.pScale), "value-changed", G_CALLBACK(test_poly_on_time_to_update), NULL);
// make it instant-change using our hacky callback
//g_signal_connect(G_OBJECT(g_Test_Poly.pScale), "change-value", G_CALLBACK(util_gtk_range_instant_set_on_value_changing_callback), NULL);
// "Clear" button
- g_signal_connect(G_OBJECT(g_Test_Poly.pClearButton), "clicked", G_CALLBACK(on_clear_clicked), NULL);
+ g_signal_connect(G_OBJECT(g_Test_Poly.pClearButton), "clicked", G_CALLBACK(test_poly_on_clearbutton_clicked), NULL);
// don't delete window on X, just hide it
g_signal_connect(G_OBJECT(g_Test_Poly.pWindow), "delete_event", G_CALLBACK(gtk_widget_hide), NULL);
@@ -62,13 +63,22 @@ void test_poly_show(GtkMenuItem *menuitem, gpointer user_data)
gtk_widget_show(GTK_WIDGET(g_Test_Poly.pWindow));
}
-static gboolean on_clear_clicked(GtkWidget* w, GdkEventButton *event)
+//
+// callbacks etc.
+//
+static gboolean test_poly_on_clearbutton_clicked(GtkWidget* w, GdkEventButton *event)
{
g_array_remove_range(g_Test_Poly.pPointsArray, 0, g_Test_Poly.pPointsArray->len);
gtk_widget_queue_draw(GTK_WIDGET(g_Test_Poly.pDrawingArea));
+ return TRUE;
}
-static gboolean on_mouse_button_click(GtkWidget* w, GdkEventButton *event)
+gboolean test_poly_on_hidecheck_toggled(GtkWidget* w, GdkEventButton *event)
+{
+ gtk_widget_queue_draw(GTK_WIDGET(g_Test_Poly.pDrawingArea));
+}
+
+static gboolean test_poly_on_mouse_button_click(GtkWidget* w, GdkEventButton *event)
{
gint nX, nY;
gdk_window_get_pointer(w->window, &nX, &nY, NULL);
@@ -81,10 +91,11 @@ static gboolean on_mouse_button_click(GtkWidget* w, GdkEventButton *event)
point.fLatitude = (gdouble)nY / (gdouble)nHeight;
g_array_append_val(g_Test_Poly.pPointsArray, point);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_Test_Poly.pHideDrawingCheckButton), FALSE);
gtk_widget_queue_draw(GTK_WIDGET(g_Test_Poly.pDrawingArea));
}
-void test_poly_draw_array(cairo_t* pCairo, GArray* pArray)
+static void test_poly_draw_array(cairo_t* pCairo, GArray* pArray)
{
if(pArray->len >= 1) {
mappoint_t* pPoint;
@@ -103,18 +114,16 @@ void test_poly_draw_array(cairo_t* pCairo, GArray* pArray)
}
}
-static gboolean on_time_to_update(GtkWidget *pDrawingArea, GdkEventExpose *event, gpointer data)
+static gboolean test_poly_on_time_to_update(GtkWidget *pDrawingArea, GdkEventExpose *event, gpointer data)
{
- Display* dpy;
- Drawable drawable;
- dpy = gdk_x11_drawable_get_xdisplay(GTK_WIDGET(g_Test_Poly.pDrawingArea)->window);
+ Display* dpy = gdk_x11_drawable_get_xdisplay(GTK_WIDGET(g_Test_Poly.pDrawingArea)->window);
Visual *visual = DefaultVisual (dpy, DefaultScreen (dpy));
+ Drawable drawable = gdk_x11_drawable_get_xid(GTK_WIDGET(g_Test_Poly.pDrawingArea)->window);
gint width, height;
- drawable = gdk_x11_drawable_get_xid(GTK_WIDGET(g_Test_Poly.pDrawingArea)->window);
gdk_drawable_get_size (GTK_WIDGET(g_Test_Poly.pDrawingArea)->window, &width, &height);
cairo_surface_t *pSurface = cairo_xlib_surface_create (dpy, drawable, visual, width, height);
- gdouble fValue = gtk_range_get_value(g_Test_Poly.pScale);
+ gdouble fValue = gtk_range_get_value(GTK_RANGE(g_Test_Poly.pScale));
cairo_t* pCairo = cairo_create (pSurface);
@@ -125,13 +134,15 @@ static gboolean on_time_to_update(GtkWidget *pDrawingArea, GdkEventExpose *event
cairo_fill(pCairo);
// Draw lines
- cairo_set_line_join(pCairo, CAIRO_LINE_JOIN_ROUND);
- cairo_save(pCairo);
- cairo_set_line_width(pCairo, 0.02);
- cairo_set_source_rgba(pCairo, 1.0, 0.0, 0.0, 1.0);
- test_poly_draw_array(pCairo, g_Test_Poly.pPointsArray);
- cairo_stroke(pCairo);
- cairo_restore(pCairo);
+ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g_Test_Poly.pHideDrawingCheckButton)) == FALSE) {
+ cairo_set_line_join(pCairo, CAIRO_LINE_JOIN_ROUND);
+ cairo_save(pCairo);
+ cairo_set_line_width(pCairo, 0.02);
+ cairo_set_source_rgba(pCairo, 1.0, 0.0, 0.0, 1.0);
+ test_poly_draw_array(pCairo, g_Test_Poly.pPointsArray);
+ cairo_stroke(pCairo);
+ cairo_restore(pCairo);
+ }
cairo_save(pCairo);
GArray* pSimplified = g_array_new(FALSE, FALSE, sizeof(mappoint_t));
@@ -156,54 +167,3 @@ static gboolean on_time_to_update(GtkWidget *pDrawingArea, GdkEventExpose *event
g_array_free(pSimplified, TRUE);
return TRUE;
}
-
-// static void paint (GtkWidget *widget,GdkEventExpose *eev,gpointer data)
-// {
-// gint width, height;
-// gint i;
-// cairo_t *cr;
-//
-// width = widget->allocation.width;
-// height = widget->allocation.height;
-//
-// cr = gdk_cairo_create (widget->window);
-//
-// /* clear background */
-// cairo_set_source_rgb (cr, 1,1,1);
-// cairo_paint (cr);
-//
-//
-// cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL,
-// CAIRO_FONT_WEIGHT_BOLD);
-//
-// /* enclosing in a save/restore pair since we alter the
-// * font size
-// */
-// cairo_save (cr);
-// cairo_set_font_size (cr, 40);
-// cairo_move_to (cr, 40, 60);
-// cairo_set_source_rgb (cr, 0,0,0);
-// cairo_show_text (cr, "Hello World");
-// cairo_restore (cr);
-//
-// cairo_set_source_rgb (cr, 1,0,0);
-// cairo_set_font_size (cr, 20);
-// cairo_move_to (cr, 50, 100);
-// cairo_show_text (cr, "greetings from gtk and cairo");
-//
-// cairo_set_source_rgb (cr, 0,0,1);
-//
-// cairo_move_to (cr, 0, 150);
-// for (i=0; i< width/10; i++)
-// {
-// cairo_rel_line_to (cr, 5, 10);
-// cairo_rel_line_to (cr, 5, -10);
-// }
-// cairo_stroke (cr);
-//
-// cairo_destroy (cr);
-// }
-//
-// static gboolean on_expose_event(GtkWidget *pDrawingArea, GdkEventExpose *event, gpointer data)
-// {
-// }
diff --git a/src/util.c b/src/util.c
index abc88b7..4a53d86 100644
--- a/src/util.c
+++ b/src/util.c
@@ -540,3 +540,9 @@ gchar* util_format_gdouble(gdouble d)
g_ascii_dtostr(achBuffer, 20, d);
return g_strdup(achBuffer);
}
+
+void util_g_free_with_param(gpointer pMemory, gpointer _unused)
+{
+ g_assert(pMemory != NULL);
+ g_free(pMemory);
+}
diff --git a/src/util.h b/src/util.h
index 2efb0c8..956b845 100644
--- a/src/util.h
+++ b/src/util.h
@@ -87,5 +87,6 @@ gdouble util_get_percent_of_range(gint nMiddle, gint nA, gint nB);
gchar* util_format_gdouble(gdouble d);
+void util_g_free_with_param(gpointer pMemory, gpointer _unused);
#endif