|
From: <gi...@gp...> - 2010-12-22 13:48:46
|
The branch, master has been updated
via b11b037f3b20721ab4a2b68d25e6681419a1e3a6 (commit)
from b996bb2e352d390a45db60580b0816b233950fe7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
Summary
=========
src/hid/gtk/gtkhid-gdk.c | 240 ++++++++++++++++++++++++++++++++++++++-
src/hid/gtk/gtkhid-main.c | 76 ------------
src/hid/gtk/gui-output-events.c | 173 +----------------------------
src/hid/gtk/gui.h | 9 +-
4 files changed, 242 insertions(+), 256 deletions(-)
=================
Commit Messages
=================
commit b11b037f3b20721ab4a2b68d25e6681419a1e3a6
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
hid/gtk: Move more gdk specific drawing routines to gtkhid-gdk.c
:100644 100644 5cd969c... b1dc11d... M src/hid/gtk/gtkhid-gdk.c
:100644 100644 a3947d0... e91b68c... M src/hid/gtk/gtkhid-main.c
:100644 100644 6164415... 4ca6040... M src/hid/gtk/gui-output-events.c
:100644 100644 4ad6cdc... d67db1a... M src/hid/gtk/gui.h
=========
Changes
=========
commit b11b037f3b20721ab4a2b68d25e6681419a1e3a6
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
hid/gtk: Move more gdk specific drawing routines to gtkhid-gdk.c
diff --git a/src/hid/gtk/gtkhid-gdk.c b/src/hid/gtk/gtkhid-gdk.c
index 5cd969c..b1dc11d 100644
--- a/src/hid/gtk/gtkhid-gdk.c
+++ b/src/hid/gtk/gtkhid-gdk.c
@@ -21,7 +21,6 @@ RCSID ("$Id$");
extern HID ghid_hid;
-
/* Sets gport->u_gc to the "right" GC to use (wrt mask or window)
*/
#define USE_GC(gc) if (!use_gc(gc)) return
@@ -79,7 +78,7 @@ ghid_make_gc (void)
return rv;
}
-void
+static void
ghid_draw_grid (void)
{
static GdkPoint *points = 0;
@@ -153,7 +152,7 @@ ghid_draw_grid (void)
}
/* ------------------------------------------------------------ */
-void
+static void
ghid_draw_bg_image (void)
{
static GdkPixbuf *pixbuf;
@@ -649,3 +648,238 @@ ghid_fill_rect (hidGC gc, int x1, int y1, int x2, int y2)
gdk_draw_rectangle (gport->drawable, gport->u_gc, TRUE,
x1, y1, x2 - x1 + 1, y2 - y1 + 1);
}
+
+void
+ghid_invalidate_lr (int left, int right, int top, int bottom)
+{
+ ghid_invalidate_all ();
+}
+
+void
+ghid_invalidate_all ()
+{
+ int eleft, eright, etop, ebottom;
+ BoxType region;
+
+ if (!gport->pixmap)
+ return;
+
+ region.X1 = MIN(Px(0), Px(gport->width + 1));
+ region.Y1 = MIN(Py(0), Py(gport->height + 1));
+ region.X2 = MAX(Px(0), Px(gport->width + 1));
+ region.Y2 = MAX(Py(0), Py(gport->height + 1));
+
+ eleft = Vx (0);
+ eright = Vx (PCB->MaxWidth);
+ etop = Vy (0);
+ ebottom = Vy (PCB->MaxHeight);
+ if (eleft > eright)
+ {
+ int tmp = eleft;
+ eleft = eright;
+ eright = tmp;
+ }
+ if (etop > ebottom)
+ {
+ int tmp = etop;
+ etop = ebottom;
+ ebottom = tmp;
+ }
+
+ if (eleft > 0)
+ gdk_draw_rectangle (gport->drawable, gport->offlimits_gc,
+ 1, 0, 0, eleft, gport->height);
+ else
+ eleft = 0;
+ if (eright < gport->width)
+ gdk_draw_rectangle (gport->drawable, gport->offlimits_gc,
+ 1, eright, 0, gport->width - eright, gport->height);
+ else
+ eright = gport->width;
+ if (etop > 0)
+ gdk_draw_rectangle (gport->drawable, gport->offlimits_gc,
+ 1, eleft, 0, eright - eleft + 1, etop);
+ else
+ etop = 0;
+ if (ebottom < gport->height)
+ gdk_draw_rectangle (gport->drawable, gport->offlimits_gc,
+ 1, eleft, ebottom, eright - eleft + 1,
+ gport->height - ebottom);
+ else
+ ebottom = gport->height;
+
+ gdk_draw_rectangle (gport->drawable, gport->bg_gc, 1,
+ eleft, etop, eright - eleft + 1, ebottom - etop + 1);
+
+ ghid_draw_bg_image();
+
+ hid_expose_callback (&ghid_hid, ®ion, 0);
+ ghid_draw_grid ();
+ if (ghidgui->need_restore_crosshair)
+ RestoreCrosshair (FALSE);
+ ghidgui->need_restore_crosshair = FALSE;
+ ghid_screen_update ();
+}
+
+static void
+draw_right_cross (GdkGC *xor_gc, gint x, gint y)
+{
+ gdk_draw_line (gport->drawing_area->window, xor_gc, x, 0, x, gport->height);
+ gdk_draw_line (gport->drawing_area->window, xor_gc, 0, y, gport->width, y);
+}
+
+static void
+draw_slanted_cross (GdkGC *xor_gc, gint x, gint y)
+{
+ gint x0, y0, x1, y1;
+
+ x0 = x + (gport->height - y);
+ x0 = MAX(0, MIN (x0, gport->width));
+ x1 = x - y;
+ x1 = MAX(0, MIN (x1, gport->width));
+ y0 = y + (gport->width - x);
+ y0 = MAX(0, MIN (y0, gport->height));
+ y1 = y - x;
+ y1 = MAX(0, MIN (y1, gport->height));
+ gdk_draw_line (gport->drawing_area->window, xor_gc, x0, y0, x1, y1);
+
+ x0 = x - (gport->height - y);
+ x0 = MAX(0, MIN (x0, gport->width));
+ x1 = x + y;
+ x1 = MAX(0, MIN (x1, gport->width));
+ y0 = y + x;
+ y0 = MAX(0, MIN (y0, gport->height));
+ y1 = y - (gport->width - x);
+ y1 = MAX(0, MIN (y1, gport->height));
+ gdk_draw_line (gport->drawing_area->window, xor_gc, x0, y0, x1, y1);
+}
+
+static void
+draw_dozen_cross (GdkGC *xor_gc, gint x, gint y)
+{
+ gint x0, y0, x1, y1;
+ gdouble tan60 = sqrt (3);
+
+ x0 = x + (gport->height - y) / tan60;
+ x0 = MAX(0, MIN (x0, gport->width));
+ x1 = x - y / tan60;
+ x1 = MAX(0, MIN (x1, gport->width));
+ y0 = y + (gport->width - x) * tan60;
+ y0 = MAX(0, MIN (y0, gport->height));
+ y1 = y - x * tan60;
+ y1 = MAX(0, MIN (y1, gport->height));
+ gdk_draw_line (gport->drawing_area->window, xor_gc, x0, y0, x1, y1);
+
+ x0 = x + (gport->height - y) * tan60;
+ x0 = MAX(0, MIN (x0, gport->width));
+ x1 = x - y * tan60;
+ x1 = MAX(0, MIN (x1, gport->width));
+ y0 = y + (gport->width - x) / tan60;
+ y0 = MAX(0, MIN (y0, gport->height));
+ y1 = y - x / tan60;
+ y1 = MAX(0, MIN (y1, gport->height));
+ gdk_draw_line (gport->drawing_area->window, xor_gc, x0, y0, x1, y1);
+
+ x0 = x - (gport->height - y) / tan60;
+ x0 = MAX(0, MIN (x0, gport->width));
+ x1 = x + y / tan60;
+ x1 = MAX(0, MIN (x1, gport->width));
+ y0 = y + x * tan60;
+ y0 = MAX(0, MIN (y0, gport->height));
+ y1 = y - (gport->width - x) * tan60;
+ y1 = MAX(0, MIN (y1, gport->height));
+ gdk_draw_line (gport->drawing_area->window, xor_gc, x0, y0, x1, y1);
+
+ x0 = x - (gport->height - y) * tan60;
+ x0 = MAX(0, MIN (x0, gport->width));
+ x1 = x + y * tan60;
+ x1 = MAX(0, MIN (x1, gport->width));
+ y0 = y + x / tan60;
+ y0 = MAX(0, MIN (y0, gport->height));
+ y1 = y - (gport->width - x) / tan60;
+ y1 = MAX(0, MIN (y1, gport->height));
+ gdk_draw_line (gport->drawing_area->window, xor_gc, x0, y0, x1, y1);
+}
+
+static void
+draw_crosshair (GdkGC *xor_gc, gint x, gint y)
+{
+ static enum crosshair_shape prev = Basic_Crosshair_Shape;
+
+ draw_right_cross (xor_gc, x, y);
+ if (prev == Union_Jack_Crosshair_Shape)
+ draw_slanted_cross (xor_gc, x, y);
+ if (prev == Dozen_Crosshair_Shape)
+ draw_dozen_cross (xor_gc, x, y);
+ prev = Crosshair.shape;
+}
+
+#define VCW 16
+#define VCD 8
+
+void
+ghid_show_crosshair (gboolean show)
+{
+ gint x, y;
+ static gint x_prev = -1, y_prev = -1;
+ static gboolean draw_markers, draw_markers_prev = FALSE;
+ static GdkGC *xor_gc;
+ static GdkColor cross_color;
+
+ if (gport->x_crosshair < 0 || ghidgui->creating || !gport->has_entered)
+ return;
+
+ if (!xor_gc)
+ {
+ xor_gc = gdk_gc_new (ghid_port.drawing_area->window);
+ gdk_gc_copy (xor_gc, ghid_port.drawing_area->style->white_gc);
+ gdk_gc_set_function (xor_gc, GDK_XOR);
+ /* FIXME: when CrossColor changed from config */
+ ghid_map_color_string (Settings.CrossColor, &cross_color);
+ }
+ x = DRAW_X (gport->x_crosshair);
+ y = DRAW_Y (gport->y_crosshair);
+
+ gdk_gc_set_foreground (xor_gc, &cross_color);
+
+ if (x_prev >= 0)
+ {
+ draw_crosshair (xor_gc, x_prev, y_prev);
+ if (draw_markers_prev)
+ {
+ gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
+ 0, y_prev - VCD, VCD, VCW);
+ gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
+ gport->width - VCD, y_prev - VCD, VCD, VCW);
+ gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
+ x_prev - VCD, 0, VCW, VCD);
+ gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
+ x_prev - VCD, gport->height - VCD, VCW, VCD);
+ }
+ }
+
+ if (x >= 0 && show)
+ {
+ draw_crosshair (xor_gc, x, y);
+ draw_markers = ghidgui->auto_pan_on && have_crosshair_attachments ();
+ if (draw_markers)
+ {
+ gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
+ 0, y - VCD, VCD, VCW);
+ gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
+ gport->width - VCD, y - VCD, VCD, VCW);
+ gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
+ x - VCD, 0, VCW, VCD);
+ gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
+ x - VCD, gport->height - VCD, VCW, VCD);
+ }
+ x_prev = x;
+ y_prev = y;
+ draw_markers_prev = draw_markers;
+ }
+ else
+ {
+ x_prev = y_prev = -1;
+ draw_markers_prev = FALSE;
+ }
+}
diff --git a/src/hid/gtk/gtkhid-main.c b/src/hid/gtk/gtkhid-main.c
index a3947d0..e91b68c 100644
--- a/src/hid/gtk/gtkhid-main.c
+++ b/src/hid/gtk/gtkhid-main.c
@@ -33,9 +33,6 @@
RCSID ("$Id$");
-extern HID ghid_hid;
-
-
static void zoom_to (double factor, int x, int y);
static void zoom_by (double factor, int x, int y);
@@ -311,79 +308,6 @@ zoom_by (double factor, int x, int y)
/* ------------------------------------------------------------ */
-void
-ghid_invalidate_lr (int left, int right, int top, int bottom)
-{
- ghid_invalidate_all ();
-}
-
-void
-ghid_invalidate_all ()
-{
- int eleft, eright, etop, ebottom;
- BoxType region;
-
- if (!gport->pixmap)
- return;
-
- region.X1 = MIN(Px(0), Px(gport->width + 1));
- region.Y1 = MIN(Py(0), Py(gport->height + 1));
- region.X2 = MAX(Px(0), Px(gport->width + 1));
- region.Y2 = MAX(Py(0), Py(gport->height + 1));
-
- eleft = Vx (0);
- eright = Vx (PCB->MaxWidth);
- etop = Vy (0);
- ebottom = Vy (PCB->MaxHeight);
- if (eleft > eright)
- {
- int tmp = eleft;
- eleft = eright;
- eright = tmp;
- }
- if (etop > ebottom)
- {
- int tmp = etop;
- etop = ebottom;
- ebottom = tmp;
- }
-
- if (eleft > 0)
- gdk_draw_rectangle (gport->drawable, gport->offlimits_gc,
- 1, 0, 0, eleft, gport->height);
- else
- eleft = 0;
- if (eright < gport->width)
- gdk_draw_rectangle (gport->drawable, gport->offlimits_gc,
- 1, eright, 0, gport->width - eright, gport->height);
- else
- eright = gport->width;
- if (etop > 0)
- gdk_draw_rectangle (gport->drawable, gport->offlimits_gc,
- 1, eleft, 0, eright - eleft + 1, etop);
- else
- etop = 0;
- if (ebottom < gport->height)
- gdk_draw_rectangle (gport->drawable, gport->offlimits_gc,
- 1, eleft, ebottom, eright - eleft + 1,
- gport->height - ebottom);
- else
- ebottom = gport->height;
-
- gdk_draw_rectangle (gport->drawable, gport->bg_gc, 1,
- eleft, etop, eright - eleft + 1, ebottom - etop + 1);
-
- ghid_draw_bg_image();
-
- hid_expose_callback (&ghid_hid, ®ion, 0);
- ghid_draw_grid ();
- if (ghidgui->need_restore_crosshair)
- RestoreCrosshair (FALSE);
- ghidgui->need_restore_crosshair = FALSE;
- ghid_screen_update ();
-}
-
-
int
ghid_set_layer (const char *name, int group, int empty)
{
diff --git a/src/hid/gtk/gui-output-events.c b/src/hid/gtk/gui-output-events.c
index 6164415..4ca6040 100644
--- a/src/hid/gtk/gui-output-events.c
+++ b/src/hid/gtk/gui-output-events.c
@@ -259,7 +259,7 @@ ghid_note_event_location (GdkEventButton * ev)
return moved;
}
-static gboolean
+gboolean
have_crosshair_attachments (void)
{
gboolean result = FALSE;
@@ -298,177 +298,6 @@ have_crosshair_attachments (void)
return result;
}
-
-#define VCW 16
-#define VCD 8
-
-static void
-draw_right_cross (GdkGC *xor_gc, gint x, gint y)
-{
- gdk_draw_line (gport->drawing_area->window, xor_gc,
- x, 0, x, gport->height);
- gdk_draw_line (gport->drawing_area->window, xor_gc,
- 0, y, gport->width, y);
-}
-
-static void
-draw_slanted_cross (GdkGC *xor_gc, gint x, gint y)
-{
- gint x0, y0, x1, y1;
-
- x0 = x + (gport->height - y);
- x0 = MAX(0, MIN (x0, gport->width));
- x1 = x - y;
- x1 = MAX(0, MIN (x1, gport->width));
- y0 = y + (gport->width - x);
- y0 = MAX(0, MIN (y0, gport->height));
- y1 = y - x;
- y1 = MAX(0, MIN (y1, gport->height));
- gdk_draw_line (gport->drawing_area->window, xor_gc,
- x0, y0, x1, y1);
- x0 = x - (gport->height - y);
- x0 = MAX(0, MIN (x0, gport->width));
- x1 = x + y;
- x1 = MAX(0, MIN (x1, gport->width));
- y0 = y + x;
- y0 = MAX(0, MIN (y0, gport->height));
- y1 = y - (gport->width - x);
- y1 = MAX(0, MIN (y1, gport->height));
- gdk_draw_line (gport->drawing_area->window, xor_gc,
- x0, y0, x1, y1);
-}
-
-static void
-draw_dozen_cross (GdkGC *xor_gc, gint x, gint y)
-{
- gint x0, y0, x1, y1;
- gdouble tan60 = sqrt (3);
-
- x0 = x + (gport->height - y) / tan60;
- x0 = MAX(0, MIN (x0, gport->width));
- x1 = x - y / tan60;
- x1 = MAX(0, MIN (x1, gport->width));
- y0 = y + (gport->width - x) * tan60;
- y0 = MAX(0, MIN (y0, gport->height));
- y1 = y - x * tan60;
- y1 = MAX(0, MIN (y1, gport->height));
- gdk_draw_line (gport->drawing_area->window, xor_gc,
- x0, y0, x1, y1);
-
- x0 = x + (gport->height - y) * tan60;
- x0 = MAX(0, MIN (x0, gport->width));
- x1 = x - y * tan60;
- x1 = MAX(0, MIN (x1, gport->width));
- y0 = y + (gport->width - x) / tan60;
- y0 = MAX(0, MIN (y0, gport->height));
- y1 = y - x / tan60;
- y1 = MAX(0, MIN (y1, gport->height));
- gdk_draw_line (gport->drawing_area->window, xor_gc,
- x0, y0, x1, y1);
-
- x0 = x - (gport->height - y) / tan60;
- x0 = MAX(0, MIN (x0, gport->width));
- x1 = x + y / tan60;
- x1 = MAX(0, MIN (x1, gport->width));
- y0 = y + x * tan60;
- y0 = MAX(0, MIN (y0, gport->height));
- y1 = y - (gport->width - x) * tan60;
- y1 = MAX(0, MIN (y1, gport->height));
- gdk_draw_line (gport->drawing_area->window, xor_gc,
- x0, y0, x1, y1);
-
- x0 = x - (gport->height - y) * tan60;
- x0 = MAX(0, MIN (x0, gport->width));
- x1 = x + y * tan60;
- x1 = MAX(0, MIN (x1, gport->width));
- y0 = y + x / tan60;
- y0 = MAX(0, MIN (y0, gport->height));
- y1 = y - (gport->width - x) / tan60;
- y1 = MAX(0, MIN (y1, gport->height));
- gdk_draw_line (gport->drawing_area->window, xor_gc,
- x0, y0, x1, y1);
-}
-
-static void
-draw_crosshair (GdkGC *xor_gc, gint x, gint y)
-{
- static enum crosshair_shape prev = Basic_Crosshair_Shape;
-
- draw_right_cross (xor_gc, x, y);
- if (prev == Union_Jack_Crosshair_Shape)
- draw_slanted_cross (xor_gc, x, y);
- if (prev == Dozen_Crosshair_Shape)
- draw_dozen_cross (xor_gc, x, y);
- prev = Crosshair.shape;
-}
-
-void
-ghid_show_crosshair (gboolean show)
-{
- gint x, y;
- static gint x_prev = -1, y_prev = -1;
- static gboolean draw_markers, draw_markers_prev = FALSE;
- static GdkGC *xor_gc;
- static GdkColor cross_color;
-
- if (gport->x_crosshair < 0 || ghidgui->creating || !gport->has_entered)
- return;
-
- if (!xor_gc)
- {
- xor_gc = gdk_gc_new (ghid_port.drawing_area->window);
- gdk_gc_copy (xor_gc, ghid_port.drawing_area->style->white_gc);
- gdk_gc_set_function (xor_gc, GDK_XOR);
- /* FIXME: when CrossColor changed from config */
- ghid_map_color_string (Settings.CrossColor, &cross_color);
- }
- x = DRAW_X (gport->x_crosshair);
- y = DRAW_Y (gport->y_crosshair);
-
- gdk_gc_set_foreground (xor_gc, &cross_color);
-
- if (x_prev >= 0)
- {
- draw_crosshair (xor_gc, x_prev, y_prev);
- if (draw_markers_prev)
- {
- gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
- 0, y_prev - VCD, VCD, VCW);
- gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
- gport->width - VCD, y_prev - VCD, VCD, VCW);
- gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
- x_prev - VCD, 0, VCW, VCD);
- gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
- x_prev - VCD, gport->height - VCD, VCW, VCD);
- }
- }
-
- if (x >= 0 && show)
- {
- draw_crosshair (xor_gc, x, y);
- draw_markers = ghidgui->auto_pan_on && have_crosshair_attachments ();
- if (draw_markers)
- {
- gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
- 0, y - VCD, VCD, VCW);
- gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
- gport->width - VCD, y - VCD, VCD, VCW);
- gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
- x - VCD, 0, VCW, VCD);
- gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
- x - VCD, gport->height - VCD, VCW, VCD);
- }
- x_prev = x;
- y_prev = y;
- draw_markers_prev = draw_markers;
- }
- else
- {
- x_prev = y_prev = -1;
- draw_markers_prev = FALSE;
- }
-}
-
static gboolean
ghid_idle_cb (gpointer data)
{
diff --git a/src/hid/gtk/gui.h b/src/hid/gtk/gui.h
index 4ad6cdc..d67db1a 100644
--- a/src/hid/gtk/gui.h
+++ b/src/hid/gtk/gui.h
@@ -284,11 +284,10 @@ void ghid_port_ranges_zoom (gdouble zoom);
gboolean ghid_port_ranges_pan (gdouble x, gdouble y, gboolean relative);
void ghid_port_ranges_scale (gboolean emit_changed);
void ghid_port_ranges_update_ranges (void);
-void ghid_show_crosshair (gboolean show);
void ghid_screen_update (void);
gboolean ghid_note_event_location (GdkEventButton * ev);
-
+gboolean have_crosshair_attachments (void);
gboolean ghid_port_key_press_cb (GtkWidget * drawing_area,
GdkEventKey * kev, GtkUIManager * ui);
gboolean ghid_port_key_release_cb (GtkWidget * drawing_area,
@@ -491,8 +490,6 @@ GdkPixmap *ghid_render_pixmap (int cx,
/* gtkhid-gdk.c */
hidGC ghid_make_gc (void);
void ghid_destroy_gc (hidGC);
-void ghid_draw_grid (void);
-void ghid_draw_bg_image (void);
void ghid_use_mask (int use_it);
void ghid_set_color (hidGC gc, const char *name);
void ghid_set_line_cap (hidGC gc, EndCapStyle style);
@@ -507,9 +504,11 @@ void ghid_draw_rect (hidGC gc, int x1, int y1, int x2, int y2);
void ghid_fill_circle (hidGC gc, int cx, int cy, int radius);
void ghid_fill_polygon (hidGC gc, int n_coords, int *x, int *y);
void ghid_fill_rect (hidGC gc, int x1, int y1, int x2, int y2);
+void ghid_invalidate_lr ();
+void ghid_invalidate_all ();
+void ghid_show_crosshair (gboolean show);
/* gtkhid-main.c */
-void ghid_invalidate_all ();
void ghid_get_coords (const char *msg, int *x, int *y);
gint PCBChanged (int argc, char **argv, int x, int y);
|