From 042708a455f264e5b78d55f4df51ce3e508cc2ba Mon Sep 17 00:00:00 2001 From: Thomas Loimer Date: Mon, 2 Sep 2024 21:01:08 +0200 Subject: [PATCH] Place the dimension line text into the widget, #179 Draw the text that should appear in the example dimension line into the dimension line widget, not onto the canvas. --- src/w_indpanel.c | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git src/w_indpanel.c src/w_indpanel.c index 95218fd..bde8298 100644 --- src/w_indpanel.c +++ src/w_indpanel.c @@ -2499,7 +2499,6 @@ static Widget tick_thick_w; static Widget box_thick_w, font_size_w, dimline_style_panel; static Widget left_arrow_type_panel, right_arrow_type_panel; static Widget font_button; -static Pixmap dimline_examp_pixmap = (Pixmap) 0; static Widget exampline; static Widget fixed_chk, actual_chk; static Widget dimline_precw; @@ -2599,15 +2598,7 @@ void popup_dimline_panel(ind_sw_info *isw) /* make an example line that shows current settings as a label */ - /* make a pixmap to draw it into */ - if (dimline_examp_pixmap == (Pixmap) 0) - dimline_examp_pixmap = XCreatePixmap(tool_d, canvas_win, - DIMLINE_PIXMAP_WIDTH, DIMLINE_PIXMAP_HEIGHT, tool_dpth); - /* clear it */ - XFillRectangle(tool_d, dimline_examp_pixmap, ind_blank_gc, 0, 0, - DIMLINE_PIXMAP_WIDTH, 30); - - /* now make the label widget to display the pixmap */ + /* make the label widget to display the pixmap */ FirstArg(XtNfromVert, below); NextArg(XtNborderWidth, 0); NextArg(XtNwidth, DIMLINE_PIXMAP_WIDTH); @@ -2619,7 +2610,9 @@ void popup_dimline_panel(ind_sw_info *isw) NextArg(XtNinternational, False); exampline = XtCreateManagedWidget("", labelWidgetClass, form, Args, ArgCount); - draw_cur_dimline(); /* this draws it into dimline_examp_pixmap */ + + /* draws the example dimension line into the label */ + draw_cur_dimline(); /******************************/ /* frame for Line information */ @@ -3098,6 +3091,7 @@ void draw_cur_dimline(void) F_compound *dimline_example; F_point *point; Boolean save_showlen, save_shownums; + static Pixmap dimline_examp_pixmap = (Pixmap)0; /* make the a dimension line */ line = create_line(); @@ -3114,8 +3108,15 @@ void draw_cur_dimline(void) /* make it 3-3/4 inches long */ append_point((int)((appres.INCHES? DIMLINE_IP_LENGTH*PIX_PER_INCH: DIMLINE_SI_LENGTH*PIX_PER_CM)+75), 275, &point); - /* make a dimension line from that line */ - dimline_example = create_dimension_line(line, False); + + /* + * With xfig -debug, create_dimension_line() already draws the bounding + * boxes of some elements into the canvas. First create the pixmap to draw + * the dimension line into. + */ + if (!dimline_examp_pixmap) + dimline_examp_pixmap = XCreatePixmap(tool_d, canvas_win, + DIMLINE_PIXMAP_WIDTH, DIMLINE_PIXMAP_HEIGHT, tool_dpth); /* clear it */ XFillRectangle(tool_d, dimline_examp_pixmap, ind_blank_gc, 0, 0, @@ -3127,8 +3128,19 @@ void draw_cur_dimline(void) appres.showlengths = appres.shownums = False; /* now draw it into our pixmap */ - canvas_win = (Window) dimline_examp_pixmap; + canvas_win = (Window)dimline_examp_pixmap; + XftDrawChange(canvas_draw, dimline_examp_pixmap); preview_in_progress = True; + + /* Now create an (empty) dimension line compound, with the side effect that + * under appres.DEBUG some boxes are drawn. */ + if ((dimline_example = create_dimension_line(line, False)) == NULL) { + free_linestorage(line); + XFreePixmap(tool_d, dimline_examp_pixmap); + dimline_examp_pixmap = (Pixmap)0; + return; + } + /* locate the line components of the dimension line */ dimline_components(dimline_example, &line, &tick1, &tick2, &poly); draw_line(line,PAINT); @@ -3141,6 +3153,7 @@ void draw_cur_dimline(void) /* restore the canvas */ canvas_win = main_canvas; + XftDrawChange(canvas_draw, main_canvas); /* and the showlengths and shownums settings */ appres.showlengths = save_showlen; appres.shownums = save_shownums; @@ -3148,12 +3161,12 @@ void draw_cur_dimline(void) /* fool the toolkit... you know the drill by now */ XtUnmanageChild(exampline); - FirstArg(XtNbitmap, (Pixmap) 0); + FirstArg(XtNbitmap, (Pixmap)0); SetValues(exampline); FirstArg(XtNbitmap, dimline_examp_pixmap); SetValues(exampline); XtManageChild(exampline); - /* finally, free the dimline */ + /* finally, free the dimline and the pixmap*/ free_compound(&dimline_example); } -- 2.35.3