|
From: | Jan Djärv |
Subject: | bug#5848: 23.1.95; bands of background after font change if --with-x-toolkit=no |
Date: | Wed, 07 Apr 2010 11:18:25 +0200 |
User-agent: | Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; sv-SE; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4 |
YAMAMOTO Mitsuharu skrev 2010-04-07 02.16:
On Tue, 06 Apr 2010 20:54:24 +0200, Jan Djärv<jan.h.d@swipnet.se> said:/* Return the pixel width/height of frame F if it has COLS columns/LINES rows. */#define FRAME_TEXT_COLS_TO_PIXEL_WIDTH(f, cols) \ (FRAME_COL_TO_PIXEL_X (f, cols) \ + (f)->scroll_bar_actual_width \ + FRAME_TOTAL_FRINGE_WIDTH (f) \ + FRAME_INTERNAL_BORDER_WIDTH (f))#define w(f, lines) \ (FRAME_LINE_TO_PIXEL_Y (f, lines) \ + FRAME_INTERNAL_BORDER_WIDTH (f))and#define FRAME_INTERNAL_BORDER_WIDTH(F) ((F)->internal_border_width)But the internal border is on two sides, so it should be 2*FRAME_INTERNAL_BORDER_WIDTH (f).FRAME_COL_TO_PIXEL_X and FRAME_LINE_TO_PIXEL_Y include the left and top side internal border width, respectively. So, the internal border is already counted twice in FRAME_TEXT_COLS_TO_PIXEL_WIDTH and FRAME_TEXT_LINES_TO_PIXEL_HEIGHT above.
Upon further investigation, this is true for cols, but not always for lines. We have #define FRAME_LINE_TO_PIXEL_Y(f, row) \ ((row < FRAME_TOP_MARGIN (f) ? 0 : FRAME_INTERNAL_BORDER_WIDTH (f)) \ + (row) * FRAME_LINE_HEIGHT (f))So if row is less than FRAME_TOP_MARGIN (which is menu bar lines + tool bar lines), internal border width is not added. That makes sense for FRAME_LINE_TO_PIXEL_Y as the internal border is below the tool bar. But it is not correct for FRAME_TEXT_LINES_TO_PIXEL_HEIGHT, which is supposed to return the total frame size. When setting wm size hints, this call
base_height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, 0); will return just one internal border. Thus, a pixel is missing. Thanks for pointing me in the right direction. Jan D.
[Prev in Thread] | Current Thread | [Next in Thread] |