Index: trunk/src/tool.h =================================================================== --- trunk/src/tool.h (revision 25209) +++ trunk/src/tool.h (revision 25210) @@ -55,11 +55,21 @@ typedef int pcb_toolid_t; #define PCB_TOOLID_INVALID (-1) +typedef struct pcb_tool_cursor_s { + const char *name; /* if no custom graphics is provided, use a stock cursor by name */ + const unsigned char *pixel; /* 32 bytes: 16*16 bitmap */ + const unsigned char *mask; /* 32 bytes: 16*16 mask (1 means draw pixel) */ +} pcb_tool_cursor_t; + +#define PCB_TOOL_CURSOR_NAMED(name) { name, NULL, NULL } +#define PCB_TOOL_CURSOR_XBM(pixel, mask) { NULL, pixel, mask } + typedef struct pcb_tool_s { const char *name; /* textual name of the tool */ const char *cookie; /* plugin cookie _pointer_ of the registrar (comparision is pointer based, not strcmp) */ unsigned int priority; /* lower values are higher priorities; escaping mode will try to select the highest prio tool */ const char **icon; /* XPM for the tool buttons */ + pcb_tool_cursor_t cursor; /* name of the mouse cursor to switch to when the tool is activated */ /* tool implementation */ void (*init)(void); Index: trunk/src/tool_arc.c =================================================================== --- trunk/src/tool_arc.c (revision 25209) +++ trunk/src/tool_arc.c (revision 25210) @@ -222,7 +222,7 @@ }; pcb_tool_t pcb_tool_arc = { - "arc", NULL, 100, arc_icon, + "arc", NULL, 100, arc_icon, PCB_TOOL_CURSOR_NAMED("question_arrow"), pcb_tool_arc_init, pcb_tool_arc_uninit, pcb_tool_arc_notify_mode, Index: trunk/src/tool_arrow.c =================================================================== --- trunk/src/tool_arrow.c (revision 25209) +++ trunk/src/tool_arrow.c (revision 25210) @@ -248,7 +248,7 @@ }; pcb_tool_t pcb_tool_arrow = { - "arrow", NULL, 10, arrow_icon, + "arrow", NULL, 10, arrow_icon, PCB_TOOL_CURSOR_NAMED("left_ptr"), NULL, pcb_tool_arrow_uninit, pcb_tool_arrow_notify_mode, Index: trunk/src/tool_buffer.c =================================================================== --- trunk/src/tool_buffer.c (revision 25209) +++ trunk/src/tool_buffer.c (revision 25210) @@ -124,7 +124,7 @@ }; pcb_tool_t pcb_tool_buffer = { - "buffer", NULL, 100, buf_icon, + "buffer", NULL, 100, buf_icon, PCB_TOOL_CURSOR_NAMED("hand"), pcb_tool_buffer_init, pcb_tool_buffer_uninit, pcb_tool_buffer_notify_mode, Index: trunk/src/tool_copy.c =================================================================== --- trunk/src/tool_copy.c (revision 25209) +++ trunk/src/tool_copy.c (revision 25210) @@ -115,7 +115,7 @@ } pcb_tool_t pcb_tool_copy = { - "copy", NULL, 100, NULL, + "copy", NULL, 100, NULL, PCB_TOOL_CURSOR_NAMED("crosshair"), NULL, pcb_tool_copy_uninit, pcb_tool_copy_notify_mode, Index: trunk/src/tool_insert.c =================================================================== --- trunk/src/tool_insert.c (revision 25209) +++ trunk/src/tool_insert.c (revision 25210) @@ -164,7 +164,7 @@ }; pcb_tool_t pcb_tool_insert = { - "insert", NULL, 100, ins_icon, + "insert", NULL, 100, ins_icon, PCB_TOOL_CURSOR_NAMED("dotbox"), NULL, pcb_tool_insert_uninit, pcb_tool_insert_notify_mode, Index: trunk/src/tool_line.c =================================================================== --- trunk/src/tool_line.c (revision 25209) +++ trunk/src/tool_line.c (revision 25210) @@ -497,7 +497,7 @@ pcb_tool_t pcb_tool_line = { - "line", NULL, 100, line_icon, + "line", NULL, 100, line_icon, PCB_TOOL_CURSOR_NAMED("pencil"), pcb_tool_line_init, pcb_tool_line_uninit, pcb_tool_line_notify_mode, Index: trunk/src/tool_lock.c =================================================================== --- trunk/src/tool_lock.c (revision 25209) +++ trunk/src/tool_lock.c (revision 25210) @@ -106,7 +106,7 @@ }; pcb_tool_t pcb_tool_lock = { - "lock", NULL, 100, lock_icon, + "lock", NULL, 100, lock_icon, PCB_TOOL_CURSOR_NAMED("hand"), NULL, NULL, pcb_tool_lock_notify_mode, Index: trunk/src/tool_move.c =================================================================== --- trunk/src/tool_move.c (revision 25209) +++ trunk/src/tool_move.c (revision 25210) @@ -121,7 +121,7 @@ } pcb_tool_t pcb_tool_move = { - "move", NULL, 100, NULL, + "move", NULL, 100, NULL, PCB_TOOL_CURSOR_NAMED("crosshair"), NULL, pcb_tool_move_uninit, pcb_tool_move_notify_mode, Index: trunk/src/tool_poly.c =================================================================== --- trunk/src/tool_poly.c (revision 25209) +++ trunk/src/tool_poly.c (revision 25210) @@ -178,7 +178,7 @@ }; pcb_tool_t pcb_tool_poly = { - "poly", NULL, 100, poly_icon, + "poly", NULL, 100, poly_icon, PCB_TOOL_CURSOR_NAMED("up_arrow"), NULL, pcb_tool_poly_uninit, pcb_tool_poly_notify_mode, Index: trunk/src/tool_polyhole.c =================================================================== --- trunk/src/tool_polyhole.c (revision 25209) +++ trunk/src/tool_polyhole.c (revision 25210) @@ -205,7 +205,7 @@ pcb_tool_t pcb_tool_polyhole = { - "polyhole", NULL, 100, polyhole_icon, + "polyhole", NULL, 100, polyhole_icon, PCB_TOOL_CURSOR_NAMED("up_arrow"), NULL, pcb_tool_polyhole_uninit, pcb_tool_polyhole_notify_mode, Index: trunk/src/tool_rectangle.c =================================================================== --- trunk/src/tool_rectangle.c (revision 25209) +++ trunk/src/tool_rectangle.c (revision 25210) @@ -146,7 +146,7 @@ pcb_tool_t pcb_tool_rectangle = { - "rectangle", NULL, 100, rect_icon, + "rectangle", NULL, 100, rect_icon, PCB_TOOL_CURSOR_NAMED("ul_angle"), NULL, pcb_tool_rectangle_uninit, pcb_tool_rectangle_notify_mode, Index: trunk/src/tool_remove.c =================================================================== --- trunk/src/tool_remove.c (revision 25209) +++ trunk/src/tool_remove.c (revision 25210) @@ -114,7 +114,7 @@ }; pcb_tool_t pcb_tool_remove = { - "remove", NULL, 100, del_icon, + "remove", NULL, 100, del_icon, PCB_TOOL_CURSOR_NAMED("pirate"), NULL, NULL, pcb_tool_remove_notify_mode, Index: trunk/src/tool_rotate.c =================================================================== --- trunk/src/tool_rotate.c (revision 25209) +++ trunk/src/tool_rotate.c (revision 25210) @@ -82,7 +82,7 @@ pcb_tool_t pcb_tool_rotate = { - "rotate", NULL, 100, rot_icon, + "rotate", NULL, 100, rot_icon, PCB_TOOL_CURSOR_NAMED("exchange"), NULL, NULL, pcb_tool_rotate_notify_mode, Index: trunk/src/tool_text.c =================================================================== --- trunk/src/tool_text.c (revision 25209) +++ trunk/src/tool_text.c (revision 25210) @@ -124,7 +124,7 @@ }; pcb_tool_t pcb_tool_text = { - "text", NULL, 100, text_icon, + "text", NULL, 100, text_icon, PCB_TOOL_CURSOR_NAMED("xterm"), NULL, NULL, pcb_tool_text_notify_mode, Index: trunk/src/tool_thermal.c =================================================================== --- trunk/src/tool_thermal.c (revision 25209) +++ trunk/src/tool_thermal.c (revision 25210) @@ -134,7 +134,7 @@ }; pcb_tool_t pcb_tool_thermal = { - "thermal", NULL, 100, thrm_icon, + "thermal", NULL, 100, thrm_icon, PCB_TOOL_CURSOR_NAMED("iron_cross"), NULL, NULL, pcb_tool_thermal_notify_mode, Index: trunk/src/tool_via.c =================================================================== --- trunk/src/tool_via.c (revision 25209) +++ trunk/src/tool_via.c (revision 25210) @@ -136,7 +136,7 @@ }; pcb_tool_t pcb_tool_via = { - "via", NULL, 100, via_icon, + "via", NULL, 100, via_icon, PCB_TOOL_CURSOR_NAMED(NULL), NULL, NULL, pcb_tool_via_notify_mode, Index: trunk/src_plugins/ddraft/ddraft.c =================================================================== --- trunk/src_plugins/ddraft/ddraft.c (revision 25209) +++ trunk/src_plugins/ddraft/ddraft.c (revision 25210) @@ -407,12 +407,11 @@ PCB_REGISTER_ACTIONS(ddraft_action_list, ddraft_cookie) static pcb_tool_t tool_ddraft = { - "ddraft", NULL, 1000, + "ddraft", NULL, 1000, NULL, PCB_TOOL_CURSOR_NAMED(NULL), NULL, NULL, NULL, NULL, - NULL, ddraft_tool_draw_attached, NULL, NULL, Index: trunk/src_plugins/serpentine/serpentine.c =================================================================== --- trunk/src_plugins/serpentine/serpentine.c (revision 25209) +++ trunk/src_plugins/serpentine/serpentine.c (revision 25210) @@ -408,7 +408,7 @@ } static pcb_tool_t tool_serpentine = { - "serpentine", NULL, 100, + "serpentine", NULL, 100, NULL, PCB_TOOL_CURSOR_NAMED(NULL), tool_serpentine_init, tool_serpentine_uninit, tool_serpentine_notify_mode, Index: trunk/src_plugins/sketch_route/sketch_route.c =================================================================== --- trunk/src_plugins/sketch_route/sketch_route.c (revision 25209) +++ trunk/src_plugins/sketch_route/sketch_route.c (revision 25210) @@ -1095,7 +1095,7 @@ } static pcb_tool_t tool_skline = { - "skline", NULL, 100, NULL, + "skline", NULL, 100, NULL, PCB_TOOL_CURSOR_NAMED(NULL), tool_skline_init, tool_skline_uninit, tool_skline_notify_mode,