static void get_default_char_pixel_size (EmacsFrame ew, int *pixel_width, int *pixel_height) { struct frame *f = ew->emacs_frame.frame; *pixel_width = FRAME_COLUMN_WIDTH (f); *pixel_height = FRAME_LINE_HEIGHT (f); }
void compute_fringe_widths (struct frame *f, int redraw) { int o_left = FRAME_LEFT_FRINGE_WIDTH (f); int o_right = FRAME_RIGHT_FRINGE_WIDTH (f); int o_cols = FRAME_FRINGE_COLS (f); Lisp_Object left_fringe = Fassq (Qleft_fringe, f->param_alist); Lisp_Object right_fringe = Fassq (Qright_fringe, f->param_alist); int left_fringe_width, right_fringe_width; if (!NILP (left_fringe)) left_fringe = Fcdr (left_fringe); if (!NILP (right_fringe)) right_fringe = Fcdr (right_fringe); left_fringe_width = ((NILP (left_fringe) || !INTEGERP (left_fringe)) ? 8 : XINT (left_fringe)); right_fringe_width = ((NILP (right_fringe) || !INTEGERP (right_fringe)) ? 8 : XINT (right_fringe)); if (left_fringe_width || right_fringe_width) { int left_wid = left_fringe_width >= 0 ? left_fringe_width : -left_fringe_width; int right_wid = right_fringe_width >= 0 ? right_fringe_width : -right_fringe_width; int conf_wid = left_wid + right_wid; int font_wid = FRAME_COLUMN_WIDTH (f); int cols = (left_wid + right_wid + font_wid-1) / font_wid; int real_wid = cols * font_wid; if (left_wid && right_wid) { if (left_fringe_width < 0) { /* Left fringe width is fixed, adjust right fringe if necessary */ FRAME_LEFT_FRINGE_WIDTH (f) = left_wid; FRAME_RIGHT_FRINGE_WIDTH (f) = real_wid - left_wid; } else if (right_fringe_width < 0) { /* Right fringe width is fixed, adjust left fringe if necessary */ FRAME_LEFT_FRINGE_WIDTH (f) = real_wid - right_wid; FRAME_RIGHT_FRINGE_WIDTH (f) = right_wid; } else { /* Adjust both fringes with an equal amount. Note that we are doing integer arithmetic here, so don't lose a pixel if the total width is an odd number. */ int fill = real_wid - conf_wid; FRAME_LEFT_FRINGE_WIDTH (f) = left_wid + fill/2; FRAME_RIGHT_FRINGE_WIDTH (f) = right_wid + fill - fill/2; } } else if (left_fringe_width) { FRAME_LEFT_FRINGE_WIDTH (f) = real_wid; FRAME_RIGHT_FRINGE_WIDTH (f) = 0; } else { FRAME_LEFT_FRINGE_WIDTH (f) = 0; FRAME_RIGHT_FRINGE_WIDTH (f) = real_wid; } FRAME_FRINGE_COLS (f) = cols; } else { FRAME_LEFT_FRINGE_WIDTH (f) = 0; FRAME_RIGHT_FRINGE_WIDTH (f) = 0; FRAME_FRINGE_COLS (f) = 0; } if (redraw && FRAME_VISIBLE_P (f)) if (o_left != FRAME_LEFT_FRINGE_WIDTH (f) || o_right != FRAME_RIGHT_FRINGE_WIDTH (f) || o_cols != FRAME_FRINGE_COLS (f)) redraw_frame (f); }