static gboolean button_pressed (GtkWidget *widget, GdkEventButton *event, gpointer data) { QCADDesignObject *obj = NULL ; double xWorld = real_to_world_x (event->x), yWorld = real_to_world_y (event->y) ; if (1 != event->button) return FALSE ; #ifdef DESIGNER world_to_grid_pt (&xWorld, &yWorld) ; #endif /* def DESIGNER */ // fprintf (stderr, "QCADRectangleElectrode::button_pressed:Calling qcad_rectangle_electrode_new\n") ; obj = QCAD_DESIGN_OBJECT (qcad_object_new_from_object (qcad_object_get_default (QCAD_TYPE_RECTANGLE_ELECTRODE))) ; // fprintf (stderr, "QCADRectangleElectrode::button_pressed:Calling qcad_design_object_move\n") ; qcad_design_object_move_to (obj, xWorld, yWorld) ; #ifdef DESIGNER if (NULL != drop_function) if ((*drop_function) (obj)) return FALSE ; #endif /* def DESIGNER */ g_object_unref (obj) ; return FALSE ; }
static void draw (QCADDesignObject *obj, GdkDrawable *dst, GdkFunction rop) { GdkGC *gc = NULL ; GdkRectangle rcReal ; QCADRuler *ruler = QCAD_RULER (obj) ; double dCurrentGrad = 0 ; int iPowerOfTen = 0 ; int idx = -1 ; gboolean bVertical = (QCAD_RULER_ORIENTATION_EAST == ruler->orientation || QCAD_RULER_ORIENTATION_WEST == ruler->orientation) ; QCADLabel *lblGrad = NULL ; world_to_real_rect (&(ruler->ruler_bounding_box), &rcReal) ; gc = gdk_gc_new (dst) ; gdk_gc_set_function (gc, rop) ; gdk_gc_set_foreground (gc, &(obj->clr)) ; // Graduation lines should be at least MIN_GRADATION_DISTANCE_PIXELS pixels apart iPowerOfTen = (int)ceil (log10 (bVertical ? real_to_world_cy (MIN_GRADATION_DISTANCE_PIXELS) : real_to_world_cx (MIN_GRADATION_DISTANCE_PIXELS))) ; ruler->icLabelsVisible = 0 ; if (bVertical) { int xBeg = 0, xEnd = 0, xMid = 0, yReal = 0.0 ; double xBegWorld, xEndWorld, xMidWorld, yWorld ; if (QCAD_RULER_ORIENTATION_WEST == ruler->orientation) { xBeg = world_to_real_x (xBegWorld = ruler->ruler_bounding_box.xWorld), xEnd = world_to_real_x (xEndWorld = ruler->ruler_bounding_box.xWorld + ruler->ruler_bounding_box.cxWorld) ; } else { xBeg = world_to_real_x (xBegWorld = ruler->ruler_bounding_box.xWorld + ruler->ruler_bounding_box.cxWorld), xEnd = world_to_real_x (xEndWorld = ruler->ruler_bounding_box.xWorld) ; } xMid = world_to_real_x (xMidWorld = ruler->ruler_bounding_box.xWorld + ruler->ruler_bounding_box.cxWorld / 2.0) ; for (dCurrentGrad = 0 ; dCurrentGrad < ruler->ruler_bounding_box.cyWorld ; dCurrentGrad += pow (10, iPowerOfTen)) { idx++ ; idx %= 10 ; yReal = world_to_real_y (yWorld = ruler->ruler_bounding_box.yWorld + dCurrentGrad) ; gdk_draw_line (dst, gc, xBeg, yReal, (0 == idx ? xEnd : xMid), yReal) ; if (0 == idx) { lblGrad = get_label_from_array (ruler->labels, (ruler->icLabelsVisible)++, dCurrentGrad, &(obj->clr)) ; qcad_label_shrinkwrap (lblGrad) ; qcad_design_object_move_to (QCAD_DESIGN_OBJECT (lblGrad), xEndWorld, yWorld) ; qcad_design_object_draw (QCAD_DESIGN_OBJECT (lblGrad), dst, rop) ; } } gdk_draw_line (dst, gc, xBeg, rcReal.y, xBeg, rcReal.y + rcReal.height) ; lblGrad = get_label_from_array (ruler->labels, (ruler->icLabelsVisible)++, ruler->ruler_bounding_box.cyWorld, &(obj->clr)) ; qcad_label_shrinkwrap (lblGrad) ; qcad_design_object_move_to (QCAD_DESIGN_OBJECT (lblGrad), xBegWorld, ruler->ruler_bounding_box.yWorld + ruler->ruler_bounding_box.cyWorld) ; qcad_design_object_draw (QCAD_DESIGN_OBJECT (lblGrad), dst, rop) ; } else { int yBeg = 0, yEnd = 0, yMid = 0, xReal = 0.0 ; double yBegWorld, yEndWorld, yMidWorld, xWorld ; if (QCAD_RULER_ORIENTATION_NORTH == ruler->orientation) { yBeg = world_to_real_y (yBegWorld = ruler->ruler_bounding_box.yWorld), yEnd = world_to_real_y (yEndWorld = ruler->ruler_bounding_box.yWorld + ruler->ruler_bounding_box.cyWorld) ; } else { yBeg = world_to_real_y (yBegWorld = ruler->ruler_bounding_box.yWorld + ruler->ruler_bounding_box.cyWorld), yEnd = world_to_real_y (yEndWorld = ruler->ruler_bounding_box.yWorld) ; } yMid = world_to_real_y (yMidWorld = ruler->ruler_bounding_box.yWorld + ruler->ruler_bounding_box.cyWorld / 2.0) ; for (dCurrentGrad = 0 ; dCurrentGrad < ruler->ruler_bounding_box.cxWorld ; dCurrentGrad += pow (10, iPowerOfTen)) { idx++ ; idx %= 10 ; xReal = world_to_real_x (xWorld = ruler->ruler_bounding_box.xWorld + dCurrentGrad) ; gdk_draw_line (dst, gc, xReal, yBeg, xReal, (0 == idx ? yEnd : yMid)) ; if (0 == idx) { lblGrad = get_label_from_array (ruler->labels, (ruler->icLabelsVisible)++, dCurrentGrad, &(obj->clr)) ; qcad_label_shrinkwrap (lblGrad) ; qcad_design_object_move_to (QCAD_DESIGN_OBJECT (lblGrad), xWorld, yEndWorld) ; qcad_design_object_draw (QCAD_DESIGN_OBJECT (lblGrad), dst, rop) ; } } gdk_draw_line (dst, gc, rcReal.x, yBeg, rcReal.x + rcReal.width, yBeg) ; lblGrad = get_label_from_array (ruler->labels, (ruler->icLabelsVisible)++, ruler->ruler_bounding_box.cxWorld, &(obj->clr)) ; qcad_label_shrinkwrap (lblGrad) ; qcad_design_object_move_to (QCAD_DESIGN_OBJECT (lblGrad), ruler->ruler_bounding_box.xWorld + ruler->ruler_bounding_box.cxWorld, yBegWorld) ; qcad_design_object_draw (QCAD_DESIGN_OBJECT (lblGrad), dst, rop) ; } g_object_unref (gc) ; }