X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fredisplay-x.c;h=b6a89baa98b2fb29d4aeef16c06e8cfef2a3f02a;hb=6e8f204c9e1f490b2752de46c111744d1deb3ee0;hp=999d3a5376573fc869ca1f55ae0cae935ef55437;hpb=b50fd71ea3c920afc5ba60af567d73940993be3f;p=chise%2Fxemacs-chise.git.1 diff --git a/src/redisplay-x.c b/src/redisplay-x.c index 999d3a5..b6a89ba 100644 --- a/src/redisplay-x.c +++ b/src/redisplay-x.c @@ -123,7 +123,7 @@ struct textual_run static int separate_textual_runs (unsigned char *text_storage, struct textual_run *run_storage, - const Emchar *str, Charcount len) + const Charc *str, Charcount len) { Lisp_Object prev_charset = Qunbound; /* not Qnil because that is a possible valid charset when @@ -137,16 +137,25 @@ separate_textual_runs (unsigned char *text_storage, for (i = 0; i < len; i++) { - Emchar ch = str[i]; - Lisp_Object charset; + Charc cc = str[i]; + Lisp_Object charset = CHARC_CHARSET (cc); + int code_point = CHARC_CODE_POINT (cc); int byte1, byte2; int dimension; int graphic; - BREAKUP_CHAR (ch, charset, byte1, byte2); dimension = XCHARSET_DIMENSION (charset); graphic = XCHARSET_GRAPHIC (charset); - + if (dimension == 1) + { + byte1 = code_point; + byte2 = 0; + } + else + { + byte1 = code_point >> 8; + byte2 = code_point & 0xFF; + } if (!EQ (charset, prev_charset)) { run_storage[runs_so_far].ptr = text_storage; @@ -241,7 +250,7 @@ x_text_width_single_run (struct face_cachel *cachel, struct textual_run *run) */ static int -x_text_width (struct frame *f, struct face_cachel *cachel, const Emchar *str, +x_text_width (struct frame *f, struct face_cachel *cachel, const Charc *str, Charcount len) { int width_so_far = 0; @@ -318,7 +327,7 @@ x_output_display_block (struct window *w, struct display_line *dl, int block, int cursor_width, int cursor_height) { struct frame *f = XFRAME (w->frame); - Emchar_dynarr *buf = Dynarr_new (Emchar); + Charc_dynarr *buf = Dynarr_new (Charc); Lisp_Object window; struct display_block *db = Dynarr_atp (dl->display_blocks, block); @@ -341,7 +350,7 @@ x_output_display_block (struct window *w, struct display_line *dl, int block, findex = rb->findex; xpos = rb->xpos; if (rb->type == RUNE_CHAR) - charset = CHAR_CHARSET (rb->object.chr.ch); + charset = CHARC_CHARSET (rb->object.cglyph); if (end < 0) end = Dynarr_length (rba); @@ -352,10 +361,11 @@ x_output_display_block (struct window *w, struct display_line *dl, int block, rb = Dynarr_atp (rba, elt); if (rb->findex == findex && rb->type == RUNE_CHAR - && rb->object.chr.ch != '\n' && rb->cursor_type != CURSOR_ON - && EQ (charset, CHAR_CHARSET (rb->object.chr.ch))) + && (!CHARC_ASCII_EQ (rb->object.cglyph, '\n')) + && rb->cursor_type != CURSOR_ON + && EQ (charset, CHARC_CHARSET (rb->object.cglyph))) { - Dynarr_add (buf, rb->object.chr.ch); + Dynarr_add (buf, rb->object.cglyph); width += rb->width; elt++; } @@ -376,17 +386,17 @@ x_output_display_block (struct window *w, struct display_line *dl, int block, { findex = rb->findex; xpos = rb->xpos; - charset = CHAR_CHARSET (rb->object.chr.ch); + charset = CHARC_CHARSET (rb->object.cglyph); if (rb->cursor_type == CURSOR_ON) { - if (rb->object.chr.ch == '\n') + if (CHARC_ASCII_EQ (rb->object.cglyph, '\n')) { x_output_eol_cursor (w, dl, xpos, findex); } else { - Dynarr_add (buf, rb->object.chr.ch); + Dynarr_add (buf, rb->object.cglyph); x_output_string (w, dl, buf, xpos, 0, start_pixpos, rb->width, findex, 1, cursor_start, cursor_width, @@ -397,7 +407,7 @@ x_output_display_block (struct window *w, struct display_line *dl, int block, xpos += rb->width; elt++; } - else if (rb->object.chr.ch == '\n') + else if (CHARC_ASCII_EQ (rb->object.cglyph, '\n')) { /* Clear in case a cursor was formerly here. */ redisplay_clear_region (window, findex, xpos, @@ -439,11 +449,12 @@ x_output_display_block (struct window *w, struct display_line *dl, int block, Lisp_Object instance; struct display_box dbox; struct display_glyph_area dga; + redisplay_calculate_display_boxes (dl, rb->xpos, rb->object.dglyph.xoffset, - start_pixpos, rb->width, - &dbox, &dga); + rb->object.dglyph.yoffset, start_pixpos, + rb->width, &dbox, &dga); - XSETWINDOW (window, w); + XSETWINDOW (window, w); instance = glyph_image_instance (rb->object.dglyph.glyph, window, ERROR_ME_NOT, 1); findex = rb->findex; @@ -481,7 +492,7 @@ x_output_display_block (struct window *w, struct display_line *dl, int block, case IMAGE_TEXT: case IMAGE_POINTER: default: - abort (); + ABORT (); } IMAGE_INSTANCE_OPTIMIZE_OUTPUT (XIMAGE_INSTANCE (instance)) = 0; @@ -491,7 +502,7 @@ x_output_display_block (struct window *w, struct display_line *dl, int block, elt++; } else - abort (); + ABORT (); } } @@ -514,7 +525,7 @@ x_output_display_block (struct window *w, struct display_line *dl, int block, /***************************************************************************** x_bevel_area - Draw a shadows for the given area in the given face. + Draw shadows for the given area in the given face. ****************************************************************************/ static void x_bevel_area (struct window *w, face_index findex, @@ -764,7 +775,7 @@ x_get_gc (struct device *d, Lisp_Object font, Lisp_Object fg, Lisp_Object bg, ****************************************************************************/ void x_output_string (struct window *w, struct display_line *dl, - Emchar_dynarr *buf, int xpos, int xoffset, int clip_start, + Charc_dynarr *buf, int xpos, int xoffset, int clip_start, int width, face_index findex, int cursor, int cursor_start, int cursor_width, int cursor_height) { @@ -971,7 +982,9 @@ x_output_string (struct window *w, struct display_line *dl, /* We draw underlines in the same color as the text. */ if (cachel->underline) { - unsigned long upos, uthick; + /* upos is naturally signed, why would anyone think otherwise? + uthick is signed to avoid unsigned propagation. */ + long upos, uthick; XFontStruct *xfont; xfont = FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font)); @@ -999,7 +1012,9 @@ x_output_string (struct window *w, struct display_line *dl, } if (cachel->strikethru) { - unsigned long ascent,descent,upos, uthick; + /* ascent, descent, and upos are naturally signed; why would anyone + think otherwise? uthick is signed to avoid unsigned propagation. */ + long ascent, descent, upos, uthick; XFontStruct *xfont; xfont = FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font)); @@ -2065,8 +2080,8 @@ x_ring_bell (struct device *d, int volume, int pitch, int duration) /* #### grab server? */ XGetKeyboardControl (display, &state); - ctl.bell_pitch = (pitch >= 0 ? pitch : state.bell_pitch); - ctl.bell_duration = (duration >= 0 ? duration : state.bell_duration); + ctl.bell_pitch = (pitch >= 0 ? pitch : (int) state.bell_pitch); + ctl.bell_duration = (duration >= 0 ? duration : (int) state.bell_duration); XChangeKeyboardControl (display, KBBellPitch|KBBellDuration, &ctl); XBell (display, (volume * 2) - 100);