static void linewidth_area_draw (GtkWidget *linewidth_area) { GdkColor *win_bg; GdkColor line; int width, height; int i; int x_offs; if (!linewidth_area_pixmap) /* we haven't gotten initial expose yet, * no point in drawing anything */ return; if (!linewidth_area_gc) { linewidth_area_gc = gdk_gc_new (linewidth_area_pixmap); gdk_gc_set_line_attributes(linewidth_area_gc, 1, GDK_LINE_ON_OFF_DASH, GDK_CAP_BUTT, GDK_JOIN_MITER); } gdk_drawable_get_size (linewidth_area_pixmap, &width, &height); win_bg = &(linewidth_area->style->bg[GTK_STATE_NORMAL]); line = color_gdk_black; gdk_gc_set_foreground (linewidth_area_gc, win_bg); gdk_draw_rectangle (linewidth_area_pixmap, linewidth_area_gc, 1, 0, 0, width, height); gdk_gc_set_foreground (linewidth_area_gc, &line); for (i=0;i<=NUMLINES;i++) { x_offs = X_OFFSET(i); gdk_draw_rectangle (linewidth_area_pixmap, linewidth_area_gc, 1, x_offs, 2, i, height-4); } if (active_linewidth != 0) { gdk_draw_rectangle (linewidth_area_pixmap, linewidth_area_gc, 0, X_OFFSET(active_linewidth)-2, 0, active_linewidth+4, height-1); } gdk_draw_drawable (linewidth_area->window, linewidth_area_gc, linewidth_area_pixmap, 0, 0, 0, 0, width, height); }
void lmt_compute_param_x(WYSIWYG *wn, int i, int32 *anchor_x, int32 *width) { int32 h, wr, left = 0, right = 0, x_center; LAYOUT(wn) wo = lmt_off_to_abs(wn, X_REF, WIDTH_OFFSET(i)); /*wid offst */ h = lmt_off_to_abs(wn, X_REF, X_OFFSET(i)); /* horizontal offset */ wr = lmt_rel_to_abs(wn, 7, 4, &FRAME_DATA(i) rel_data); /* i4 width relationship */ switch(LOCKPOINT(i)) /* the lock point */ { case TL: /* 'x' = left */ case BL: case CL: case HL: h += lmt_rel_to_abs(wn, 3, 0, &FRAME_DATA(i) rel_data); /* offset + relationship */ left = h; if (wr) right = wr + LAYOUT(wn) wo; else right = h + LAYOUT(wn) wo; *anchor_x = left; break; case TR: /* 'x' = right */ case BR: case CR: case HR: h += lmt_rel_to_abs(wn, 4, 0, &FRAME_DATA(i) rel_data); /* offset + relationship */ right = h; if (wr) left = wr + LAYOUT(wn) wo; else left = h - LAYOUT(wn) wo; *anchor_x = right; break; case TC: /* 'x' = center */ case BC: case CC: case HC: h += lmt_rel_to_abs(wn, 5, 0, &FRAME_DATA(i) rel_data); /* offset + relationship */ x_center = h; /* x-center */ if (wr) { LAYOUT(wn) wo += wr; LAYOUT(wn) wo -= h; (LAYOUT(wn) wo < 0) ? (LAYOUT(wn) wo *= -2) : (LAYOUT(wn) wo *= 2); } left = (h - (LAYOUT(wn) wo / 2)); /* left */ right = (h + (LAYOUT(wn) wo / 2)); /* right */ *anchor_x = x_center; break; } *width = right - left; }
void lmt_compute_x(WYSIWYG *wn, int i) { int32 h, wr; h = lmt_off_to_abs(wn, X_REF, X_OFFSET(i)); /* horizontal offset */ wr = lmt_rel_to_abs(wn, 7, 4, &FRAME_DATA(i) rel_data); /* i4 width relationship */ switch(LOCKPOINT(i)) /* the lock point */ { case TL: /* 'x' = left */ case BL: case CL: case HL: h += lmt_rel_to_abs(wn, 3, 0, &FRAME_DATA(i) rel_data); /* offset + relationship */ ELE_DATA(i) rot_rect_left = h; /* left */ if (wr) /* right */ ELE_DATA(i) rot_rect_right = wr + LAYOUT(wn) wo; else ELE_DATA(i) rot_rect_right = h + LAYOUT(wn) wo; ELE_DATA(i) rot_rect_x_center = /* x-center */ (ELE_DATA(i) rot_rect_right + h) / 2; break; case TR: /* 'x' = right */ case BR: case CR: case HR: h += lmt_rel_to_abs(wn, 4, 0, &FRAME_DATA(i) rel_data); /* offset + relationship */ ELE_DATA(i) rot_rect_right = h; /* right */ if (wr) /* left */ ELE_DATA(i) rot_rect_left = wr + LAYOUT(wn) wo; else ELE_DATA(i) rot_rect_left = h - LAYOUT(wn) wo; ELE_DATA(i) rot_rect_x_center = /* x-center */ (h + ELE_DATA(i) rot_rect_left) / 2; break; case TC: /* 'x' = center */ case BC: case CC: case HC: h += lmt_rel_to_abs(wn, 5, 0, &FRAME_DATA(i) rel_data); /* offset + relationship */ ELE_DATA(i) rot_rect_x_center = h; /* x-center */ if (wr) { LAYOUT(wn) wo += wr; LAYOUT(wn) wo -= h; (LAYOUT(wn) wo < 0) ? (LAYOUT(wn) wo *= -2) : (LAYOUT(wn) wo *= 2); } ELE_DATA(i) rot_rect_left = (h - (LAYOUT(wn) wo / 2)); /* left */ ELE_DATA(i) rot_rect_right = (h + (LAYOUT(wn) wo / 2)); /* right */ break; } }
static int linewidth_area_target (int x, int y) { int i; int x_offs; for (i=1;i<=NUMLINES;i++) { x_offs = X_OFFSET(i); if ((x>=x_offs-PIXELS_BETWEEN_LINES/2) && (x<x_offs+i+PIXELS_BETWEEN_LINES/2)) return i; } return 0; }