aboutsummaryrefslogtreecommitdiffstats
path: root/src/fringe.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fringe.c')
-rw-r--r--src/fringe.c45
1 files changed, 31 insertions, 14 deletions
diff --git a/src/fringe.c b/src/fringe.c
index 0bf830cbd8c..ef4c7631e05 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -722,19 +722,35 @@ draw_row_fringe_bitmaps (w, row)
722} 722}
723 723
724/* Draw the fringes of window W. Only fringes for rows marked for 724/* Draw the fringes of window W. Only fringes for rows marked for
725 update in redraw_fringe_bitmaps_p are drawn. */ 725 update in redraw_fringe_bitmaps_p are drawn.
726 726
727void 727 Return >0 if left or right fringe was redrawn in any way.
728draw_window_fringes (w) 728
729 If NO_FRINGE is non-zero, also return >0 if either fringe has zero width.
730
731 A return value >0 indicates that the vertical line between windows
732 needs update (as it may be drawn in the fringe).
733*/
734
735int
736draw_window_fringes (w, no_fringe)
729 struct window *w; 737 struct window *w;
738 int no_fringe;
730{ 739{
731 struct glyph_row *row; 740 struct glyph_row *row;
732 int yb = window_text_bottom_y (w); 741 int yb = window_text_bottom_y (w);
733 int nrows = w->current_matrix->nrows; 742 int nrows = w->current_matrix->nrows;
734 int y = 0, rn; 743 int y = 0, rn;
744 int updated = 0;
735 745
736 if (w->pseudo_window_p) 746 if (w->pseudo_window_p)
737 return; 747 return 0;
748
749 /* Must draw line if no fringe */
750 if (no_fringe
751 && (WINDOW_LEFT_FRINGE_WIDTH (w) == 0
752 || WINDOW_RIGHT_FRINGE_WIDTH (w) == 0))
753 updated++;
738 754
739 for (y = 0, rn = 0, row = w->current_matrix->rows; 755 for (y = 0, rn = 0, row = w->current_matrix->rows;
740 y < yb && rn < nrows; 756 y < yb && rn < nrows;
@@ -744,7 +760,10 @@ draw_window_fringes (w)
744 continue; 760 continue;
745 draw_row_fringe_bitmaps (w, row); 761 draw_row_fringe_bitmaps (w, row);
746 row->redraw_fringe_bitmaps_p = 0; 762 row->redraw_fringe_bitmaps_p = 0;
763 updated++;
747 } 764 }
765
766 return updated;
748} 767}
749 768
750 769
@@ -950,11 +969,7 @@ update_window_fringes (w, force_p)
950 Typically, we add an equal amount (+/- 1 pixel) to each fringe, 969 Typically, we add an equal amount (+/- 1 pixel) to each fringe,
951 but a negative width value is taken literally (after negating it). 970 but a negative width value is taken literally (after negating it).
952 971
953 We never make the fringes narrower than specified. It is planned 972 We never make the fringes narrower than specified.
954 to make fringe bitmaps customizable and expandable, and at that
955 time, the user will typically specify the minimum number of pixels
956 needed for his bitmaps, so we shouldn't select anything less than
957 what is specified.
958*/ 973*/
959 974
960void 975void
@@ -1343,9 +1358,10 @@ DEFUN ("fringe-bitmaps-at-pos", Ffringe_bitmaps_at_pos, Sfringe_bitmaps_at_pos,
1343 0, 2, 0, 1358 0, 2, 0,
1344 doc: /* Return fringe bitmaps of row containing position POS in window WINDOW. 1359 doc: /* Return fringe bitmaps of row containing position POS in window WINDOW.
1345If WINDOW is nil, use selected window. If POS is nil, use value of point 1360If WINDOW is nil, use selected window. If POS is nil, use value of point
1346in that window. Return value is a cons (LEFT . RIGHT) where LEFT and RIGHT 1361in that window. Return value is a list (LEFT RIGHT OV), where LEFT
1347are the fringe bitmap numbers for the bitmaps in the left and right fringe, 1362is the symbol for the bitmap in the left fringe (or nil if no bitmap),
1348resp. If left or right fringe is empty, the corresponding element is nil. 1363RIGHT is similar for the right fringe, and OV is non-nil if there is an
1364overlay arrow in the left fringe.
1349Return nil if POS is not visible in WINDOW. */) 1365Return nil if POS is not visible in WINDOW. */)
1350 (pos, window) 1366 (pos, window)
1351 Lisp_Object pos, window; 1367 Lisp_Object pos, window;
@@ -1373,8 +1389,9 @@ Return nil if POS is not visible in WINDOW. */)
1373 row = MATRIX_FIRST_TEXT_ROW (w->current_matrix); 1389 row = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
1374 row = row_containing_pos (w, textpos, row, NULL, 0); 1390 row = row_containing_pos (w, textpos, row, NULL, 0);
1375 if (row) 1391 if (row)
1376 return Fcons (get_fringe_bitmap_name (row->left_fringe_bitmap), 1392 return list3 (get_fringe_bitmap_name (row->left_fringe_bitmap),
1377 get_fringe_bitmap_name (row->right_fringe_bitmap)); 1393 get_fringe_bitmap_name (row->right_fringe_bitmap),
1394 (row->overlay_arrow_p ? Qt : Qnil));
1378 else 1395 else
1379 return Qnil; 1396 return Qnil;
1380} 1397}