Introduce LdRectangle, LdPoint and LdPointArray.
Remove LdCanvasRect and LdSymbolArea.
This commit is contained in:
		
							parent
							
								
									0b3f6503bb
								
							
						
					
					
						commit
						96f7710c25
					
				| @ -82,6 +82,7 @@ set (project_DOC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/docs/reference") | |||||||
| set (logdiag_SOURCES | set (logdiag_SOURCES | ||||||
| 	src/logdiag.c | 	src/logdiag.c | ||||||
| 	src/ld-marshal.c | 	src/ld-marshal.c | ||||||
|  | 	src/ld-types.c | ||||||
| 	src/ld-window-main.c | 	src/ld-window-main.c | ||||||
| 	src/ld-diagram.c | 	src/ld-diagram.c | ||||||
| 	src/ld-diagram-object.c | 	src/ld-diagram-object.c | ||||||
| @ -95,6 +96,7 @@ set (logdiag_SOURCES | |||||||
| set (logdiag_HEADERS | set (logdiag_HEADERS | ||||||
| 	${CMAKE_CURRENT_BINARY_DIR}/config.h | 	${CMAKE_CURRENT_BINARY_DIR}/config.h | ||||||
| 	src/ld-marshal.h | 	src/ld-marshal.h | ||||||
|  | 	src/ld-types.h | ||||||
| 	src/ld-window-main.h | 	src/ld-window-main.h | ||||||
| 	src/ld-diagram.h | 	src/ld-diagram.h | ||||||
| 	src/ld-diagram-object.h | 	src/ld-diagram-object.h | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
| #include "config.h" | #include "config.h" | ||||||
| 
 | 
 | ||||||
| #include "ld-marshal.h" | #include "ld-marshal.h" | ||||||
|  | #include "ld-types.h" | ||||||
| #include "ld-diagram-object.h" | #include "ld-diagram-object.h" | ||||||
| #include "ld-diagram-symbol.h" | #include "ld-diagram-symbol.h" | ||||||
| #include "ld-diagram.h" | #include "ld-diagram.h" | ||||||
| @ -83,8 +84,6 @@ struct _LdCanvasColor | |||||||
| 	gdouble a; | 	gdouble a; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| typedef cairo_rectangle_t LdCanvasRect; |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * LdCanvasPrivate: |  * LdCanvasPrivate: | ||||||
|  * @diagram: A diagram object assigned to this canvas as a model. |  * @diagram: A diagram object assigned to this canvas as a model. | ||||||
| @ -138,7 +137,7 @@ struct _DrawData | |||||||
| { | { | ||||||
| 	LdCanvas *self; | 	LdCanvas *self; | ||||||
| 	cairo_t *cr; | 	cairo_t *cr; | ||||||
| 	LdCanvasRect exposed_rect; | 	LdRectangle exposed_rect; | ||||||
| 	gdouble scale; | 	gdouble scale; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -181,12 +180,6 @@ static void ld_canvas_color_set (LdCanvasColor *color, | |||||||
| 	gdouble r, gdouble g, gdouble b, gdouble a); | 	gdouble r, gdouble g, gdouble b, gdouble a); | ||||||
| static void ld_canvas_color_apply (LdCanvasColor *color, cairo_t *cr); | static void ld_canvas_color_apply (LdCanvasColor *color, cairo_t *cr); | ||||||
| 
 | 
 | ||||||
| static gboolean ld_canvas_rect_contains (LdCanvasRect *rect, |  | ||||||
| 	gdouble x, gdouble y); |  | ||||||
| static gboolean ld_canvas_rect_intersects (LdCanvasRect *first, |  | ||||||
| 	LdCanvasRect *second); |  | ||||||
| static void ld_canvas_rect_extend (LdCanvasRect *rect, gdouble border); |  | ||||||
| 
 |  | ||||||
| static void move_object_to_coords (LdCanvas *self, LdDiagramObject *object, | static void move_object_to_coords (LdCanvas *self, LdDiagramObject *object, | ||||||
| 	gdouble x, gdouble y); | 	gdouble x, gdouble y); | ||||||
| static LdDiagramObject *get_object_at_coords (LdCanvas *self, | static LdDiagramObject *get_object_at_coords (LdCanvas *self, | ||||||
| @ -195,11 +188,11 @@ static gboolean is_object_selected (LdCanvas *self, LdDiagramObject *object); | |||||||
| static LdSymbol *resolve_diagram_symbol (LdCanvas *self, | static LdSymbol *resolve_diagram_symbol (LdCanvas *self, | ||||||
| 	LdDiagramSymbol *diagram_symbol); | 	LdDiagramSymbol *diagram_symbol); | ||||||
| static gboolean get_symbol_area (LdCanvas *self, LdDiagramSymbol *symbol, | static gboolean get_symbol_area (LdCanvas *self, LdDiagramSymbol *symbol, | ||||||
| 	LdCanvasRect *rect); | 	LdRectangle *rect); | ||||||
| static gboolean get_symbol_clip_area (LdCanvas *self, LdDiagramSymbol *symbol, | static gboolean get_symbol_clip_area (LdCanvas *self, LdDiagramSymbol *symbol, | ||||||
| 	LdCanvasRect *rect); | 	LdRectangle *rect); | ||||||
| static gboolean get_object_area (LdCanvas *self, LdDiagramObject *object, | static gboolean get_object_area (LdCanvas *self, LdDiagramObject *object, | ||||||
| 	LdCanvasRect *rect); | 	LdRectangle *rect); | ||||||
| static gboolean object_hit_test (LdCanvas *self, LdDiagramObject *object, | static gboolean object_hit_test (LdCanvas *self, LdDiagramObject *object, | ||||||
| 	gdouble x, gdouble y); | 	gdouble x, gdouble y); | ||||||
| static void queue_object_redraw (LdCanvas *self, LdDiagramObject *object); | static void queue_object_redraw (LdCanvas *self, LdDiagramObject *object); | ||||||
| @ -792,37 +785,6 @@ ld_canvas_color_apply (LdCanvasColor *color, cairo_t *cr) | |||||||
| 	cairo_set_source_rgba (cr, color->r, color->g, color->b, color->a); | 	cairo_set_source_rgba (cr, color->r, color->g, color->b, color->a); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static gboolean |  | ||||||
| ld_canvas_rect_contains (LdCanvasRect *rect, gdouble x, gdouble y) |  | ||||||
| { |  | ||||||
| 	g_return_val_if_fail (rect != NULL, FALSE); |  | ||||||
| 	return (x >= rect->x && x <= rect->x + rect->width |  | ||||||
| 	     && y >= rect->y && y <= rect->y + rect->height); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static gboolean |  | ||||||
| ld_canvas_rect_intersects (LdCanvasRect *first, LdCanvasRect *second) |  | ||||||
| { |  | ||||||
| 	g_return_val_if_fail (first != NULL, FALSE); |  | ||||||
| 	g_return_val_if_fail (second != NULL, FALSE); |  | ||||||
| 
 |  | ||||||
| 	return !(first->x > second->x + second->width |  | ||||||
| 	      || first->y > second->y + second->height |  | ||||||
| 	      || first->x + first->width  < second->x |  | ||||||
| 	      || first->y + first->height < second->y); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void |  | ||||||
| ld_canvas_rect_extend (LdCanvasRect *rect, gdouble border) |  | ||||||
| { |  | ||||||
| 	g_return_if_fail (rect != NULL); |  | ||||||
| 
 |  | ||||||
| 	rect->x -= border; |  | ||||||
| 	rect->y -= border; |  | ||||||
| 	rect->width  += 2 * border; |  | ||||||
| 	rect->height += 2 * border; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void | static void | ||||||
| move_object_to_coords (LdCanvas *self, LdDiagramObject *object, | move_object_to_coords (LdCanvas *self, LdDiagramObject *object, | ||||||
| 	gdouble x, gdouble y) | 	gdouble x, gdouble y) | ||||||
| @ -870,12 +832,12 @@ resolve_diagram_symbol (LdCanvas *self, LdDiagramSymbol *diagram_symbol) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static gboolean | static gboolean | ||||||
| get_symbol_area (LdCanvas *self, LdDiagramSymbol *symbol, LdCanvasRect *rect) | get_symbol_area (LdCanvas *self, LdDiagramSymbol *symbol, LdRectangle *rect) | ||||||
| { | { | ||||||
| 	LdDiagramObject *object; | 	LdDiagramObject *object; | ||||||
| 	gdouble object_x, object_y; | 	gdouble object_x, object_y; | ||||||
| 	LdSymbol *library_symbol; | 	LdSymbol *library_symbol; | ||||||
| 	LdSymbolArea area; | 	LdRectangle area; | ||||||
| 	gdouble x1, x2; | 	gdouble x1, x2; | ||||||
| 	gdouble y1, y2; | 	gdouble y1, y2; | ||||||
| 
 | 
 | ||||||
| @ -908,20 +870,20 @@ get_symbol_area (LdCanvas *self, LdDiagramSymbol *symbol, LdCanvasRect *rect) | |||||||
| 
 | 
 | ||||||
| static gboolean | static gboolean | ||||||
| get_symbol_clip_area (LdCanvas *self, LdDiagramSymbol *symbol, | get_symbol_clip_area (LdCanvas *self, LdDiagramSymbol *symbol, | ||||||
| 	LdCanvasRect *rect) | 	LdRectangle *rect) | ||||||
| { | { | ||||||
| 	LdCanvasRect object_rect; | 	LdRectangle object_rect; | ||||||
| 
 | 
 | ||||||
| 	if (!get_object_area (self, LD_DIAGRAM_OBJECT (symbol), &object_rect)) | 	if (!get_object_area (self, LD_DIAGRAM_OBJECT (symbol), &object_rect)) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 
 | 
 | ||||||
| 	*rect = object_rect; | 	*rect = object_rect; | ||||||
| 	ld_canvas_rect_extend (rect, SYMBOL_CLIP_TOLERANCE); | 	ld_rectangle_extend (rect, SYMBOL_CLIP_TOLERANCE); | ||||||
| 	return TRUE; | 	return TRUE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static gboolean | static gboolean | ||||||
| get_object_area (LdCanvas *self, LdDiagramObject *object, LdCanvasRect *rect) | get_object_area (LdCanvas *self, LdDiagramObject *object, LdRectangle *rect) | ||||||
| { | { | ||||||
| 	if (LD_IS_DIAGRAM_SYMBOL (object)) | 	if (LD_IS_DIAGRAM_SYMBOL (object)) | ||||||
| 		return get_symbol_area (self, LD_DIAGRAM_SYMBOL (object), rect); | 		return get_symbol_area (self, LD_DIAGRAM_SYMBOL (object), rect); | ||||||
| @ -931,12 +893,12 @@ get_object_area (LdCanvas *self, LdDiagramObject *object, LdCanvasRect *rect) | |||||||
| static gboolean | static gboolean | ||||||
| object_hit_test (LdCanvas *self, LdDiagramObject *object, gdouble x, gdouble y) | object_hit_test (LdCanvas *self, LdDiagramObject *object, gdouble x, gdouble y) | ||||||
| { | { | ||||||
| 	LdCanvasRect rect; | 	LdRectangle rect; | ||||||
| 
 | 
 | ||||||
| 	if (!get_object_area (self, object, &rect)) | 	if (!get_object_area (self, object, &rect)) | ||||||
| 		return FALSE; | 		return FALSE; | ||||||
| 	ld_canvas_rect_extend (&rect, OBJECT_BORDER_TOLERANCE); | 	ld_rectangle_extend (&rect, OBJECT_BORDER_TOLERANCE); | ||||||
| 	return ld_canvas_rect_contains (&rect, x, y); | 	return ld_rectangle_contains (&rect, x, y); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| @ -944,7 +906,7 @@ queue_object_redraw (LdCanvas *self, LdDiagramObject *object) | |||||||
| { | { | ||||||
| 	if (LD_IS_DIAGRAM_SYMBOL (object)) | 	if (LD_IS_DIAGRAM_SYMBOL (object)) | ||||||
| 	{ | 	{ | ||||||
| 		LdCanvasRect rect; | 		LdRectangle rect; | ||||||
| 
 | 
 | ||||||
| 		if (!get_symbol_clip_area (self, LD_DIAGRAM_SYMBOL (object), &rect)) | 		if (!get_symbol_clip_area (self, LD_DIAGRAM_SYMBOL (object), &rect)) | ||||||
| 			return; | 			return; | ||||||
| @ -1151,7 +1113,7 @@ static void | |||||||
| draw_symbol (LdDiagramSymbol *diagram_symbol, DrawData *data) | draw_symbol (LdDiagramSymbol *diagram_symbol, DrawData *data) | ||||||
| { | { | ||||||
| 	LdSymbol *symbol; | 	LdSymbol *symbol; | ||||||
| 	LdCanvasRect clip_rect; | 	LdRectangle clip_rect; | ||||||
| 	gdouble x, y; | 	gdouble x, y; | ||||||
| 
 | 
 | ||||||
| 	symbol = resolve_diagram_symbol (data->self, diagram_symbol); | 	symbol = resolve_diagram_symbol (data->self, diagram_symbol); | ||||||
| @ -1165,7 +1127,7 @@ draw_symbol (LdDiagramSymbol *diagram_symbol, DrawData *data) | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (!get_symbol_clip_area (data->self, diagram_symbol, &clip_rect) | 	if (!get_symbol_clip_area (data->self, diagram_symbol, &clip_rect) | ||||||
| 		|| !ld_canvas_rect_intersects (&clip_rect, &data->exposed_rect)) | 		|| !ld_rectangle_intersects (&clip_rect, &data->exposed_rect)) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	cairo_save (data->cr); | 	cairo_save (data->cr); | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|  * ld-library.c |  * ld-library.c | ||||||
|  * |  * | ||||||
|  * This file is a part of logdiag. |  * This file is a part of logdiag. | ||||||
|  * Copyright Přemysl Janouch 2010. All rights reserved. |  * Copyright Přemysl Janouch 2010 - 2011. All rights reserved. | ||||||
|  * |  * | ||||||
|  * See the file LICENSE for licensing information. |  * See the file LICENSE for licensing information. | ||||||
|  * |  * | ||||||
| @ -15,6 +15,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "config.h" | #include "config.h" | ||||||
| 
 | 
 | ||||||
|  | #include "ld-types.h" | ||||||
| #include "ld-symbol.h" | #include "ld-symbol.h" | ||||||
| #include "ld-symbol-category.h" | #include "ld-symbol-category.h" | ||||||
| #include "ld-library.h" | #include "ld-library.h" | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|  * ld-lua-symbol-private.h |  * ld-lua-symbol-private.h | ||||||
|  * |  * | ||||||
|  * This file is a part of logdiag. |  * This file is a part of logdiag. | ||||||
|  * Copyright Přemysl Janouch 2010. All rights reserved. |  * Copyright Přemysl Janouch 2010 - 2011. All rights reserved. | ||||||
|  * |  * | ||||||
|  * See the file LICENSE for licensing information. |  * See the file LICENSE for licensing information. | ||||||
|  * |  * | ||||||
| @ -28,7 +28,7 @@ struct _LdLuaSymbolPrivate | |||||||
| 	LdLua *lua; | 	LdLua *lua; | ||||||
| 	gchar *name; | 	gchar *name; | ||||||
| 	gchar *human_name; | 	gchar *human_name; | ||||||
| 	LdSymbolArea area; | 	LdRectangle area; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|  * ld-lua-symbol.c |  * ld-lua-symbol.c | ||||||
|  * |  * | ||||||
|  * This file is a part of logdiag. |  * This file is a part of logdiag. | ||||||
|  * Copyright Přemysl Janouch 2010. All rights reserved. |  * Copyright Přemysl Janouch 2010 - 2011. All rights reserved. | ||||||
|  * |  * | ||||||
|  * See the file LICENSE for licensing information. |  * See the file LICENSE for licensing information. | ||||||
|  * |  * | ||||||
| @ -12,6 +12,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "config.h" | #include "config.h" | ||||||
| 
 | 
 | ||||||
|  | #include "ld-types.h" | ||||||
| #include "ld-symbol.h" | #include "ld-symbol.h" | ||||||
| #include "ld-symbol-category.h" | #include "ld-symbol-category.h" | ||||||
| #include "ld-library.h" | #include "ld-library.h" | ||||||
| @ -35,7 +36,7 @@ static void ld_lua_symbol_finalize (GObject *gobject); | |||||||
| 
 | 
 | ||||||
| static const gchar *ld_lua_symbol_real_get_name (LdSymbol *symbol); | static const gchar *ld_lua_symbol_real_get_name (LdSymbol *symbol); | ||||||
| static const gchar *ld_lua_symbol_real_get_human_name (LdSymbol *symbol); | static const gchar *ld_lua_symbol_real_get_human_name (LdSymbol *symbol); | ||||||
| static void ld_lua_symbol_real_get_area (LdSymbol *symbol, LdSymbolArea *area); | static void ld_lua_symbol_real_get_area (LdSymbol *symbol, LdRectangle *area); | ||||||
| static void ld_lua_symbol_real_draw (LdSymbol *symbol, cairo_t *cr); | static void ld_lua_symbol_real_draw (LdSymbol *symbol, cairo_t *cr); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -102,7 +103,7 @@ ld_lua_symbol_real_get_human_name (LdSymbol *symbol) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| ld_lua_symbol_real_get_area (LdSymbol *symbol, LdSymbolArea *area) | ld_lua_symbol_real_get_area (LdSymbol *symbol, LdRectangle *area) | ||||||
| { | { | ||||||
| 	LdLuaSymbol *self; | 	LdLuaSymbol *self; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "config.h" | #include "config.h" | ||||||
| 
 | 
 | ||||||
|  | #include "ld-types.h" | ||||||
| #include "ld-symbol.h" | #include "ld-symbol.h" | ||||||
| #include "ld-library.h" | #include "ld-library.h" | ||||||
| 
 | 
 | ||||||
| @ -90,7 +91,7 @@ static int ld_lua_private_unregister_cb (lua_State *L); | |||||||
| static int ld_lua_logdiag_register (lua_State *L); | static int ld_lua_logdiag_register (lua_State *L); | ||||||
| static int process_registration (lua_State *L); | static int process_registration (lua_State *L); | ||||||
| static gchar *get_translation (lua_State *L, int index); | static gchar *get_translation (lua_State *L, int index); | ||||||
| static gboolean read_symbol_area (lua_State *L, int index, LdSymbolArea *area); | static gboolean read_symbol_area (lua_State *L, int index, LdRectangle *area); | ||||||
| 
 | 
 | ||||||
| static void push_cairo_object (lua_State *L, LdLuaDrawData *draw_data); | static void push_cairo_object (lua_State *L, LdLuaDrawData *draw_data); | ||||||
| static gdouble get_cairo_scale (cairo_t *cr); | static gdouble get_cairo_scale (cairo_t *cr); | ||||||
| @ -528,7 +529,7 @@ get_translation (lua_State *L, int index) | |||||||
|  * Return value: TRUE on success, FALSE on failure. |  * Return value: TRUE on success, FALSE on failure. | ||||||
|  */ |  */ | ||||||
| static gboolean | static gboolean | ||||||
| read_symbol_area (lua_State *L, int index, LdSymbolArea *area) | read_symbol_area (lua_State *L, int index, LdRectangle *area) | ||||||
| { | { | ||||||
| 	lua_Number x1, x2, y1, y2; | 	lua_Number x1, x2, y1, y2; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|  * ld-symbol-category.c |  * ld-symbol-category.c | ||||||
|  * |  * | ||||||
|  * This file is a part of logdiag. |  * This file is a part of logdiag. | ||||||
|  * Copyright Přemysl Janouch 2010. All rights reserved. |  * Copyright Přemysl Janouch 2010 - 2011. All rights reserved. | ||||||
|  * |  * | ||||||
|  * See the file LICENSE for licensing information. |  * See the file LICENSE for licensing information. | ||||||
|  * |  * | ||||||
| @ -12,6 +12,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "config.h" | #include "config.h" | ||||||
| 
 | 
 | ||||||
|  | #include "ld-types.h" | ||||||
| #include "ld-symbol.h" | #include "ld-symbol.h" | ||||||
| #include "ld-symbol-category.h" | #include "ld-symbol-category.h" | ||||||
| #include "ld-library.h" | #include "ld-library.h" | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|  * ld-symbol.c |  * ld-symbol.c | ||||||
|  * |  * | ||||||
|  * This file is a part of logdiag. |  * This file is a part of logdiag. | ||||||
|  * Copyright Přemysl Janouch 2010. All rights reserved. |  * Copyright Přemysl Janouch 2010 - 2011. All rights reserved. | ||||||
|  * |  * | ||||||
|  * See the file LICENSE for licensing information. |  * See the file LICENSE for licensing information. | ||||||
|  * |  * | ||||||
| @ -12,6 +12,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "config.h" | #include "config.h" | ||||||
| 
 | 
 | ||||||
|  | #include "ld-types.h" | ||||||
| #include "ld-symbol.h" | #include "ld-symbol.h" | ||||||
| #include "ld-symbol-category.h" | #include "ld-symbol-category.h" | ||||||
| #include "ld-library.h" | #include "ld-library.h" | ||||||
| @ -82,7 +83,7 @@ ld_symbol_class_init (LdSymbolClass *klass) | |||||||
|  */ |  */ | ||||||
| 	pspec = g_param_spec_boxed ("area", "Area", | 	pspec = g_param_spec_boxed ("area", "Area", | ||||||
| 		"The area of this symbol.", | 		"The area of this symbol.", | ||||||
| 		LD_TYPE_SYMBOL_AREA, G_PARAM_READABLE); | 		LD_TYPE_RECTANGLE, G_PARAM_READABLE); | ||||||
| 	g_object_class_install_property (object_class, PROP_AREA, pspec); | 	g_object_class_install_property (object_class, PROP_AREA, pspec); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -108,7 +109,7 @@ ld_symbol_get_property (GObject *object, guint property_id, | |||||||
| 		break; | 		break; | ||||||
| 	case PROP_AREA: | 	case PROP_AREA: | ||||||
| 		{ | 		{ | ||||||
| 			LdSymbolArea area; | 			LdRectangle area; | ||||||
| 
 | 
 | ||||||
| 			ld_symbol_get_area (self, &area); | 			ld_symbol_get_area (self, &area); | ||||||
| 			g_value_set_boxed (value, &area); | 			g_value_set_boxed (value, &area); | ||||||
| @ -171,7 +172,7 @@ ld_symbol_get_human_name (LdSymbol *self) | |||||||
|  * Get the area of the symbol. |  * Get the area of the symbol. | ||||||
|  */ |  */ | ||||||
| void | void | ||||||
| ld_symbol_get_area (LdSymbol *self, LdSymbolArea *area) | ld_symbol_get_area (LdSymbol *self, LdRectangle *area) | ||||||
| { | { | ||||||
| 	LdSymbolClass *klass; | 	LdSymbolClass *klass; | ||||||
| 
 | 
 | ||||||
| @ -202,51 +203,3 @@ ld_symbol_draw (LdSymbol *self, cairo_t *cr) | |||||||
| 	g_return_if_fail (klass->draw != NULL); | 	g_return_if_fail (klass->draw != NULL); | ||||||
| 	klass->draw (self, cr); | 	klass->draw (self, cr); | ||||||
| } | } | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|  * ld_symbol_area_copy: |  | ||||||
|  * @self: An #LdSymbolArea structure. |  | ||||||
|  * |  | ||||||
|  * Makes a copy of the structure. |  | ||||||
|  * The result must be freed by ld_symbol_area_free(). |  | ||||||
|  * |  | ||||||
|  * Return value: A copy of @self. |  | ||||||
|  **/ |  | ||||||
| LdSymbolArea * |  | ||||||
| ld_symbol_area_copy (const LdSymbolArea *self) |  | ||||||
| { |  | ||||||
| 	LdSymbolArea *new_area; |  | ||||||
| 
 |  | ||||||
| 	g_return_val_if_fail (self != NULL, NULL); |  | ||||||
| 
 |  | ||||||
| 	new_area = g_slice_new (LdSymbolArea); |  | ||||||
| 	*new_area = *self; |  | ||||||
| 	return new_area; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|  * ld_symbol_area_free: |  | ||||||
|  * @self: An #LdSymbolArea structure. |  | ||||||
|  * |  | ||||||
|  * Frees the structure created with ld_symbol_area_copy(). |  | ||||||
|  **/ |  | ||||||
| void |  | ||||||
| ld_symbol_area_free (LdSymbolArea *self) |  | ||||||
| { |  | ||||||
| 	g_return_if_fail (self != NULL); |  | ||||||
| 
 |  | ||||||
| 	g_slice_free (LdSymbolArea, self); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| GType |  | ||||||
| ld_symbol_area_get_type (void) |  | ||||||
| { |  | ||||||
| 	static GType our_type = 0; |  | ||||||
| 
 |  | ||||||
| 	if (our_type == 0) |  | ||||||
| 		our_type = g_boxed_type_register_static |  | ||||||
| 			(g_intern_static_string ("LdSymbolArea"), |  | ||||||
| 			(GBoxedCopyFunc) ld_symbol_area_copy, |  | ||||||
| 			(GBoxedFreeFunc) ld_symbol_area_free); |  | ||||||
| 	return our_type; |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|  * ld-symbol.h |  * ld-symbol.h | ||||||
|  * |  * | ||||||
|  * This file is a part of logdiag. |  * This file is a part of logdiag. | ||||||
|  * Copyright Přemysl Janouch 2010. All rights reserved. |  * Copyright Přemysl Janouch 2010 - 2011. All rights reserved. | ||||||
|  * |  * | ||||||
|  * See the file LICENSE for licensing information. |  * See the file LICENSE for licensing information. | ||||||
|  * |  * | ||||||
| @ -14,33 +14,6 @@ | |||||||
| G_BEGIN_DECLS | G_BEGIN_DECLS | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #define LD_TYPE_SYMBOL_AREA (ld_symbol_area_get_type ()) |  | ||||||
| 
 |  | ||||||
| typedef struct _LdSymbolArea LdSymbolArea; |  | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|  * LdSymbolArea: |  | ||||||
|  * @x: Left-top X coordinate. |  | ||||||
|  * @y: Left-top Y coordinate. |  | ||||||
|  * @width: Width of the area, must be positive. |  | ||||||
|  * @height: Height of the area, must be positive. |  | ||||||
|  * |  | ||||||
|  * Defines the area of the symbol relative to the center of the symbol, |  | ||||||
|  * which is at the (0, 0) coordinates. |  | ||||||
|  */ |  | ||||||
| struct _LdSymbolArea |  | ||||||
| { |  | ||||||
| 	gdouble x, y; |  | ||||||
| 	gdouble width, height; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| GType ld_symbol_area_get_type (void) G_GNUC_CONST; |  | ||||||
| 
 |  | ||||||
| LdSymbolArea *ld_symbol_area_copy (const LdSymbolArea *self); |  | ||||||
| void ld_symbol_area_free (LdSymbolArea *self); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #define LD_TYPE_SYMBOL (ld_symbol_get_type ()) | #define LD_TYPE_SYMBOL (ld_symbol_get_type ()) | ||||||
| #define LD_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \ | #define LD_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \ | ||||||
| 	((obj), LD_TYPE_SYMBOL, LdSymbol)) | 	((obj), LD_TYPE_SYMBOL, LdSymbol)) | ||||||
| @ -79,7 +52,7 @@ struct _LdSymbolClass | |||||||
| 
 | 
 | ||||||
| 	const gchar *(*get_name) (LdSymbol *self); | 	const gchar *(*get_name) (LdSymbol *self); | ||||||
| 	const gchar *(*get_human_name) (LdSymbol *self); | 	const gchar *(*get_human_name) (LdSymbol *self); | ||||||
| 	void (*get_area) (LdSymbol *self, LdSymbolArea *area); | 	void (*get_area) (LdSymbol *self, LdRectangle *area); | ||||||
| 	void (*draw) (LdSymbol *self, cairo_t *cr); | 	void (*draw) (LdSymbol *self, cairo_t *cr); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -88,7 +61,7 @@ GType ld_symbol_get_type (void) G_GNUC_CONST; | |||||||
| 
 | 
 | ||||||
| const gchar *ld_symbol_get_name (LdSymbol *self); | const gchar *ld_symbol_get_name (LdSymbol *self); | ||||||
| const gchar *ld_symbol_get_human_name (LdSymbol *self); | const gchar *ld_symbol_get_human_name (LdSymbol *self); | ||||||
| void ld_symbol_get_area (LdSymbol *self, LdSymbolArea *area); | void ld_symbol_get_area (LdSymbol *self, LdRectangle *area); | ||||||
| void ld_symbol_draw (LdSymbol *self, cairo_t *cr); | void ld_symbol_draw (LdSymbol *self, cairo_t *cr); | ||||||
| 
 | 
 | ||||||
| /* TODO: Interface for terminals.
 | /* TODO: Interface for terminals.
 | ||||||
|  | |||||||
							
								
								
									
										202
									
								
								src/ld-types.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								src/ld-types.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,202 @@ | |||||||
|  | /*
 | ||||||
|  |  * ld-types.c | ||||||
|  |  * | ||||||
|  |  * This file is a part of logdiag. | ||||||
|  |  * Copyright Přemysl Janouch 2010 - 2011. All rights reserved. | ||||||
|  |  * | ||||||
|  |  * See the file LICENSE for licensing information. | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <gtk/gtk.h> | ||||||
|  | 
 | ||||||
|  | #include "config.h" | ||||||
|  | 
 | ||||||
|  | #include "ld-types.h" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define DEFINE_BOXED_TYPE(TypeName, type_name) \ | ||||||
|  | GType \ | ||||||
|  | type_name ## _get_type (void) \ | ||||||
|  | { \ | ||||||
|  | 	static GType our_type = 0; \ | ||||||
|  | 	if (our_type == 0) \ | ||||||
|  | 		our_type = g_boxed_type_register_static \ | ||||||
|  | 			(g_intern_static_string (#TypeName), \ | ||||||
|  | 			(GBoxedCopyFunc) type_name ## _copy, \ | ||||||
|  | 			(GBoxedFreeFunc) type_name ## _free); \ | ||||||
|  | 	return our_type; \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | DEFINE_BOXED_TYPE (LdPoint, ld_point) | ||||||
|  | DEFINE_BOXED_TYPE (LdPointArray, ld_point_array) | ||||||
|  | DEFINE_BOXED_TYPE (LdRectangle, ld_rectangle) | ||||||
|  | 
 | ||||||
|  | #define DEFINE_BOXED_TRIVIAL_COPY(TypeName, type_name) \ | ||||||
|  | TypeName * \ | ||||||
|  | type_name ## _copy (const TypeName *self) \ | ||||||
|  | { \ | ||||||
|  | 	TypeName *new_copy; \ | ||||||
|  | 	g_return_val_if_fail (self != NULL, NULL); \ | ||||||
|  | 	new_copy = g_slice_new (TypeName); \ | ||||||
|  | 	*new_copy = *self; \ | ||||||
|  | 	return new_copy; \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define DEFINE_BOXED_TRIVIAL_FREE(TypeName, type_name) \ | ||||||
|  | void \ | ||||||
|  | type_name ## _free (TypeName *self) \ | ||||||
|  | { \ | ||||||
|  | 	g_return_if_fail (self != NULL); \ | ||||||
|  | 	g_slice_free (TypeName, self); \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_point_copy: | ||||||
|  |  * @self: An #LdPoint structure. | ||||||
|  |  * | ||||||
|  |  * Makes a copy of the structure. | ||||||
|  |  * The result must be freed by ld_point_free(). | ||||||
|  |  * | ||||||
|  |  * Return value: A copy of @self. | ||||||
|  |  */ | ||||||
|  | DEFINE_BOXED_TRIVIAL_COPY (LdPoint, ld_point) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_point_free: | ||||||
|  |  * @self: An #LdPoint structure. | ||||||
|  |  * | ||||||
|  |  * Frees the structure created with ld_point_copy(). | ||||||
|  |  */ | ||||||
|  | DEFINE_BOXED_TRIVIAL_FREE (LdPoint, ld_point) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_point_array_new: | ||||||
|  |  * @num_points: The number of points the array can store. | ||||||
|  |  * | ||||||
|  |  * Create a new array of points and initialize. | ||||||
|  |  * | ||||||
|  |  * Return value: An #LdPointArray structure. | ||||||
|  |  */ | ||||||
|  | LdPointArray * | ||||||
|  | ld_point_array_new (gint num_points) | ||||||
|  | { | ||||||
|  | 	LdPointArray *new_array; | ||||||
|  | 
 | ||||||
|  | 	g_return_val_if_fail (num_points >= 1, NULL); | ||||||
|  | 
 | ||||||
|  | 	new_array = g_slice_new (LdPointArray); | ||||||
|  | 	new_array->num_points = num_points; | ||||||
|  | 	new_array->points = g_malloc0 (num_points * sizeof (LdPoint)); | ||||||
|  | 	return new_array; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_point_array_copy: | ||||||
|  |  * @self: An #LdPointArray structure. | ||||||
|  |  * | ||||||
|  |  * Makes a copy of the structure. | ||||||
|  |  * The result must be freed by ld_point_array_free(). | ||||||
|  |  * | ||||||
|  |  * Return value: A copy of @self. | ||||||
|  |  */ | ||||||
|  | LdPointArray * | ||||||
|  | ld_point_array_copy (const LdPointArray *self) | ||||||
|  | { | ||||||
|  | 	LdPointArray *new_array; | ||||||
|  | 
 | ||||||
|  | 	g_return_val_if_fail (self != NULL, NULL); | ||||||
|  | 
 | ||||||
|  | 	new_array = g_slice_new (LdPointArray); | ||||||
|  | 	new_array->num_points = self->num_points; | ||||||
|  | 	new_array->points = g_memdup (self->points, | ||||||
|  | 		self->num_points * sizeof (LdPoint)); | ||||||
|  | 	return new_array; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_point_array_free: | ||||||
|  |  * @self: An #LdPointArray structure. | ||||||
|  |  * | ||||||
|  |  * Frees the structure created with ld_point_array_copy(). | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | ld_point_array_free (LdPointArray *self) | ||||||
|  | { | ||||||
|  | 	g_return_if_fail (self != NULL); | ||||||
|  | 
 | ||||||
|  | 	g_free (self->points); | ||||||
|  | 	g_slice_free (LdPointArray, self); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_rectangle_copy: | ||||||
|  |  * @self: An #LdRectangle structure. | ||||||
|  |  * | ||||||
|  |  * Makes a copy of the structure. | ||||||
|  |  * The result must be freed by ld_rectangle_free(). | ||||||
|  |  * | ||||||
|  |  * Return value: A copy of @self. | ||||||
|  |  */ | ||||||
|  | DEFINE_BOXED_TRIVIAL_COPY (LdRectangle, ld_rectangle) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_rectangle_free: | ||||||
|  |  * @self: An #LdRectangle structure. | ||||||
|  |  * | ||||||
|  |  * Frees the structure created with ld_rectangle_copy(). | ||||||
|  |  */ | ||||||
|  | DEFINE_BOXED_TRIVIAL_FREE (LdRectangle, ld_rectangle) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_rectangle_contains: | ||||||
|  |  * @self: An #LdRectangle structure. | ||||||
|  |  * @x: The X coordinate of the point to be checked. | ||||||
|  |  * @y: The Y coordinate of the point to be checked. | ||||||
|  |  * | ||||||
|  |  * Return value: TRUE if the rectangle contains the specified point. | ||||||
|  |  */ | ||||||
|  | gboolean | ||||||
|  | ld_rectangle_contains (LdRectangle *self, gdouble x, gdouble y) | ||||||
|  | { | ||||||
|  | 	g_return_val_if_fail (self != NULL, FALSE); | ||||||
|  | 	return (x >= self->x && x <= self->x + self->width | ||||||
|  | 	     && y >= self->y && y <= self->y + self->height); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_rectangle_intersects: | ||||||
|  |  * @self: An #LdRectangle structure. | ||||||
|  |  * @rect: An #LdRectangle to be checked for intersection. | ||||||
|  |  * | ||||||
|  |  * Return value: TRUE if the two rectangles intersect. | ||||||
|  |  */ | ||||||
|  | gboolean | ||||||
|  | ld_rectangle_intersects (LdRectangle *self, LdRectangle *rect) | ||||||
|  | { | ||||||
|  | 	g_return_val_if_fail (self != NULL, FALSE); | ||||||
|  | 	g_return_val_if_fail (rect != NULL, FALSE); | ||||||
|  | 
 | ||||||
|  | 	return !(self->x > rect->x + rect->width | ||||||
|  | 	      || self->y > rect->y + rect->height | ||||||
|  | 	      || self->x + self->width  < rect->x | ||||||
|  | 	      || self->y + self->height < rect->y); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * ld_rectangle_extend: | ||||||
|  |  * @self: An #LdRectangle structure. | ||||||
|  |  * @border: The border by which the rectangle should be extended. | ||||||
|  |  * | ||||||
|  |  * Extend a rectangle on all sides. | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | ld_rectangle_extend (LdRectangle *self, gdouble border) | ||||||
|  | { | ||||||
|  | 	g_return_if_fail (self != NULL); | ||||||
|  | 
 | ||||||
|  | 	self->x -= border; | ||||||
|  | 	self->y -= border; | ||||||
|  | 	self->width  += 2 * border; | ||||||
|  | 	self->height += 2 * border; | ||||||
|  | } | ||||||
							
								
								
									
										100
									
								
								src/ld-types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								src/ld-types.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,100 @@ | |||||||
|  | /*
 | ||||||
|  |  * ld-types.h | ||||||
|  |  * | ||||||
|  |  * This file is a part of logdiag. | ||||||
|  |  * Copyright Přemysl Janouch 2010 - 2011. All rights reserved. | ||||||
|  |  * | ||||||
|  |  * See the file LICENSE for licensing information. | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef __LD_TYPES_H__ | ||||||
|  | #define __LD_TYPES_H__ | ||||||
|  | 
 | ||||||
|  | G_BEGIN_DECLS | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * SECTION:ld-types | ||||||
|  |  * @short_description: Simple data types. | ||||||
|  |  * | ||||||
|  |  * #LdPoint defines coordinates of a point. | ||||||
|  |  * | ||||||
|  |  * #LdRectangle defines the position and size of a rectangle. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define LD_TYPE_POINT (ld_point_get_type ()) | ||||||
|  | #define LD_TYPE_POINT_ARRAY (ld_point_array_get_type ()) | ||||||
|  | #define LD_TYPE_RECTANGLE (ld_rectangle_get_type ()) | ||||||
|  | 
 | ||||||
|  | typedef struct _LdPoint LdPoint; | ||||||
|  | typedef struct _LdPointArray LdPointArray; | ||||||
|  | typedef struct _LdRectangle LdRectangle; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * LdPoint: | ||||||
|  |  * @x: The X coordinate. | ||||||
|  |  * @y: The Y coordinate. | ||||||
|  |  * | ||||||
|  |  * Defines a point. | ||||||
|  |  */ | ||||||
|  | struct _LdPoint | ||||||
|  | { | ||||||
|  | 	gdouble x, y; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | GType ld_point_get_type (void) G_GNUC_CONST; | ||||||
|  | 
 | ||||||
|  | LdPoint *ld_point_copy (const LdPoint *self); | ||||||
|  | void ld_point_free (LdPoint *self); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * LdPointArray: | ||||||
|  |  * @points: An array of #LdPoint structures. | ||||||
|  |  * @num_points: Count of points in @points. | ||||||
|  |  * | ||||||
|  |  * Moves quickly. | ||||||
|  |  */ | ||||||
|  | struct _LdPointArray | ||||||
|  | { | ||||||
|  | 	LdPoint *points; | ||||||
|  | 	gint num_points; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | GType ld_point_array_get_type (void) G_GNUC_CONST; | ||||||
|  | 
 | ||||||
|  | LdPointArray *ld_point_array_new (gint num_points); | ||||||
|  | LdPointArray *ld_point_array_copy (const LdPointArray *self); | ||||||
|  | void ld_point_array_free (LdPointArray *self); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * LdRectangle: | ||||||
|  |  * @x: Left-top X coordinate. | ||||||
|  |  * @y: Left-top Y coordinate. | ||||||
|  |  * @width: Width of the area, must be positive. | ||||||
|  |  * @height: Height of the area, must be positive. | ||||||
|  |  * | ||||||
|  |  * Defines a rectangle. | ||||||
|  |  */ | ||||||
|  | struct _LdRectangle | ||||||
|  | { | ||||||
|  | 	gdouble x, y; | ||||||
|  | 	gdouble width, height; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | GType ld_rectangle_get_type (void) G_GNUC_CONST; | ||||||
|  | 
 | ||||||
|  | LdRectangle *ld_rectangle_copy (const LdRectangle *self); | ||||||
|  | void ld_rectangle_free (LdRectangle *self); | ||||||
|  | gboolean ld_rectangle_contains (LdRectangle *self, gdouble x, gdouble y); | ||||||
|  | gboolean ld_rectangle_intersects (LdRectangle *self, LdRectangle *rect); | ||||||
|  | void ld_rectangle_extend (LdRectangle *self, gdouble border); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | G_END_DECLS | ||||||
|  | 
 | ||||||
|  | #endif /* ! __LD_TYPES_H__ */ | ||||||
|  | 
 | ||||||
| @ -14,6 +14,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "ld-window-main.h" | #include "ld-window-main.h" | ||||||
| 
 | 
 | ||||||
|  | #include "ld-types.h" | ||||||
| #include "ld-symbol.h" | #include "ld-symbol.h" | ||||||
| #include "ld-symbol-category.h" | #include "ld-symbol-category.h" | ||||||
| #include "ld-library.h" | #include "ld-library.h" | ||||||
| @ -610,7 +611,7 @@ on_category_toggle (GtkToggleButton *toggle_button, gpointer user_data) | |||||||
| 		for (symbol_iter = children; symbol_iter; | 		for (symbol_iter = children; symbol_iter; | ||||||
| 			symbol_iter = symbol_iter->next) | 			symbol_iter = symbol_iter->next) | ||||||
| 		{ | 		{ | ||||||
| 			LdSymbolArea area; | 			LdRectangle area; | ||||||
| 
 | 
 | ||||||
| 			item->symbol = LD_SYMBOL (symbol_iter->data); | 			item->symbol = LD_SYMBOL (symbol_iter->data); | ||||||
| 			g_object_ref (item->symbol); | 			g_object_ref (item->symbol); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user