/*! \todo Finish function documentation!!! * \brief * \par Function Description * */ void a_zoom_box_start(GschemToplevel *w_current, int w_x, int w_y) { i_action_start (w_current); w_current->first_wx = w_current->second_wx = w_x; w_current->first_wy = w_current->second_wy = w_y; }
/*! \todo Finish function documentation!!! * \brief * \par Function Description * */ void o_text_prepare_place(GschemToplevel *w_current, char *text, int color, int align, int rotate, int size) { GschemPageView *page_view = gschem_toplevel_get_current_page_view (w_current); PAGE *page = gschem_page_view_get_page (page_view); TOPLEVEL *toplevel = page->toplevel; g_return_if_fail (toplevel != NULL); g_return_if_fail (page != NULL); /* Insert the new object into the buffer at world coordinates (0,0). * It will be translated to the mouse coordinates during placement. */ w_current->first_wx = 0; w_current->first_wy = 0; w_current->last_drawb_mode = LAST_DRAWB_MODE_NONE; /* remove the old place list if it exists */ s_delete_object_glist(toplevel, page->place_list); page->place_list = NULL; /* here you need to add OBJ_TEXT when it's done */ page->place_list = g_list_append(page->place_list, o_text_new (toplevel, OBJ_TEXT, color, 0, 0, align, rotate, /* zero is angle */ text, size, /* has to be visible so you can place it */ /* visibility is set when you create the object */ VISIBLE, SHOW_NAME_VALUE)); i_action_start (w_current); i_set_state (w_current, TEXTMODE); }
/*! \brief Start process to input a new box. * \par Function Description * This function starts the process to input a new box. Parameters for this * box are put into/extracted from the <B>w_current</B> toplevel structure. * <B>w_x</B> and <B>w_y</B> are current coordinates of the pointer in world * coordinates. * * The first step is to input one corner of the box. This corner is * (<B>w_x</B>,<B>w_y</B>) snapped to the grid and saved in <B>w_current->first_wx</B> * and <B>w_current->first_wy</B>. * * The other corner will be saved in (<B>w_current->second_wx</B>, * <B>w_current->second_wy</B>). * * \param [in] w_current The GschemToplevel object. * \param [in] w_x Current x coordinate of pointer in world. * \param [in] w_y Current y coordinate of pointer in world. */ void o_box_start(GschemToplevel *w_current, int w_x, int w_y) { i_action_start (w_current); /* init first_w[x|y], second_w[x|y] to describe box */ w_current->first_wx = w_current->second_wx = w_x; w_current->first_wy = w_current->second_wy = w_y; /* start to draw the box */ o_box_invalidate_rubber (w_current); }
/*! \brief Start placement action * * \par Function Description * This function remembers the current world coordinates and * invalidates the bounding box of the objects in the current * place list. * * \param [in] w_current GschemToplevel which we're drawing for. * \param [in] w_x The current world X coordinate. * \param [in] w_y The current world Y coordinate. */ void o_place_start (GschemToplevel *w_current, int w_x, int w_y) { g_return_if_fail (w_current != NULL); i_action_start (w_current); w_current->second_wx = w_x; w_current->second_wy = w_y; o_place_invalidate_rubber (w_current, TRUE); w_current->rubber_visible = 1; }
/*! \brief Start process to input a new circle. * \par Function Description * This function starts the process to input a new circle. Parameters for * this circle are pu into/extracted from the <B>w_current</B> toplevel * structure. * <B>w_x</B> and <B>w_y</B> are current coordinates of the mouse pointer in * world units. * * The first step of the circle input is to set the center of the arc. * This center is kept in (<B>w_current->first_wx</B>,<B>w_current->first_wy</B>). * * \param [in] w_current The GschemToplevel object. * \param [in] w_x Current x coordinate of pointer in world units. * \param [in] w_y Current y coordinate of pointer in world units. */ void o_circle_start(GschemToplevel *w_current, int w_x, int w_y) { i_action_start (w_current); /* center of circle */ w_current->first_wx = w_x; w_current->first_wy = w_y; /* radius */ w_current->distance = 0; /* first temporary circle */ o_circle_invalidate_rubber (w_current); w_current->rubber_visible = 1; }
/*! \todo Finish function documentation!!! * \brief * \par Function Description * */ void o_move_start(GschemToplevel *w_current, int w_x, int w_y) { GList *s_iter; g_return_if_fail (w_current != NULL); GschemPageView *page_view = gschem_toplevel_get_current_page_view (w_current); g_return_if_fail (page_view != NULL); PAGE *page = gschem_page_view_get_page (page_view); g_return_if_fail (page != NULL); g_return_if_fail (w_current->stretch_list == NULL); if (o_select_selected (w_current)) { i_set_state (w_current, MOVEMODE); gboolean net_rubber_band_mode; net_rubber_band_mode = gschem_options_get_net_rubber_band_mode (w_current->options); w_current->last_drawb_mode = LAST_DRAWB_MODE_NONE; w_current->first_wx = w_current->second_wx = w_x; w_current->first_wy = w_current->second_wy = w_y; o_invalidate_glist (w_current, geda_list_get_glist (page->selection_list)); if (net_rubber_band_mode) { o_move_prep_rubberband(w_current); /* Set the dont_redraw flag on rubberbanded objects and invalidate them. * This ensures that they are not drawn (in their un-stretched position) * during screen updates. */ for (s_iter = w_current->stretch_list; s_iter != NULL; s_iter = g_list_next (s_iter)) { STRETCH *stretch = s_iter->data; stretch->object->dont_redraw = TRUE; o_invalidate (w_current, stretch->object); } } o_select_move_to_place_list(w_current); i_action_start (w_current); o_move_invalidate_rubber (w_current, TRUE); } }
/*! \brief Start process to input a new arc. * \par Function Description * This function starts the process to input a new arc. Parameters for * this arc are put into/extracted from the <B>w_current</B> toplevel structure. * <B>w_x</B> and <B>w_y</B> are current coordinates of the pointer in screen unit. * * First step of the arc input is to set the radius of the arc. The center * of the arc is kept in (<B>w_current->first_wx</B>,<B>w_current->first_wy</B>). * The radius of the arc is in <B>w_current->distance</B>. * * \param [in] w_current The GschemToplevel object. * \param [in] w_x Current x coordinate of pointer in world units. * \param [in] w_y Current y coordinate of pointer in world units. */ void o_arc_start(GschemToplevel *w_current, int w_x, int w_y) { i_action_start (w_current); /* set the center of the arc */ w_current->first_wx = w_x; w_current->first_wy = w_y; /* set the radius */ w_current->distance = 0; /* set the start and end angles */ w_current->second_wx = w_current->second_wy = 0; /* start the rubberbanding process of the radius */ o_arc_invalidate_rubber (w_current); w_current->rubber_visible = 1; }
/*! \brief set the start point of a new net * \par Function Description * This function sets the start point of a new net at the position of the * cursor. If we have a visible magnetic marker, we use that instead of * the cursor position */ void o_net_start(GschemToplevel *w_current, int w_x, int w_y) { i_action_start (w_current); if (w_current->magnetic_wx != -1 && w_current->magnetic_wy != -1) { w_current->first_wx = w_current->magnetic_wx; w_current->first_wy = w_current->magnetic_wy; } else { w_current->first_wx = w_x; w_current->first_wy = w_y; } w_current->second_wx = w_current->third_wx = w_current->first_wx; w_current->second_wy = w_current->third_wy = w_current->first_wy; if (w_current->first_wx != snap_grid (w_current, w_current->first_wx) || w_current->first_wy != snap_grid (w_current, w_current->first_wy)) s_log_message(_("Warning: Starting net at off grid coordinate\n")); if (w_current->net_direction_mode) o_net_guess_direction(w_current, w_current->first_wx, w_current->first_wy); }