bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#5848: 23.1.95; bands of background after font change if --with-x-too


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.







reply via email to

[Prev in Thread] Current Thread [Next in Thread]