emacs-diffs
[Top][All Lists]
Advanced

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

master 4d8527e580: Fix display of fringes with stipples on Haiku


From: Po Lu
Subject: master 4d8527e580: Fix display of fringes with stipples on Haiku
Date: Sun, 8 May 2022 09:22:30 -0400 (EDT)

branch: master
commit 4d8527e5802e41573ee8c9f2a41659a1ba388dde
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix display of fringes with stipples on Haiku
    
    * haikuterm.c (haiku_after_update_window_line): Fix coding
    style.
    (haiku_draw_fringe_bitmap): Handle display of stipples if
    present.
---
 src/haikuterm.c | 42 +++++++++++++++++++++++++++++++++---------
 1 file changed, 33 insertions(+), 9 deletions(-)

diff --git a/src/haikuterm.c b/src/haikuterm.c
index 16e732fa0d..265d3fbf5e 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -1910,8 +1910,9 @@ haiku_after_update_window_line (struct window *w,
          void *view = FRAME_HAIKU_VIEW (f);
          BView_draw_lock (view, false, 0, 0, 0, 0);
          BView_StartClip (view);
-         BView_SetHighColor (view, face->background_defaulted_p ?
-                             FRAME_BACKGROUND_PIXEL (f) : face->background);
+         BView_SetHighColor (view, (face->background_defaulted_p
+                                    ? FRAME_BACKGROUND_PIXEL (f)
+                                    : face->background));
          BView_FillRectangle (view, 0, y, width, height);
          BView_FillRectangle (view, FRAME_PIXEL_WIDTH (f) - width,
                               y, width, height);
@@ -2529,25 +2530,50 @@ static void
 haiku_draw_fringe_bitmap (struct window *w, struct glyph_row *row,
                          struct draw_fringe_bitmap_params *p)
 {
-  void *view = FRAME_HAIKU_VIEW (XFRAME (WINDOW_FRAME (w)));
-  struct face *face = p->face;
+  struct face *face;
+  struct frame *f;
+  struct haiku_bitmap_record *rec;
+  void *view, *bitmap;
+  uint32 col;
+
+  f = XFRAME (WINDOW_FRAME (w));
+  view = FRAME_HAIKU_VIEW (f);
+  face = p->face;
 
   block_input ();
   BView_draw_lock (view, true, p->x, p->y, p->wd, p->h);
   BView_StartClip (view);
 
   haiku_clip_to_row (w, row, ANY_AREA);
+
   if (p->bx >= 0 && !p->overlay_p)
     {
-      BView_SetHighColor (view, face->background);
-      BView_FillRectangle (view, p->bx, p->by, p->nx, p->ny);
+      if (!face->stipple)
+       {
+         BView_SetHighColor (view, face->background);
+         BView_FillRectangle (view, p->bx, p->by, p->nx, p->ny);
+       }
+      else
+       {
+         rec = haiku_get_bitmap_rec (f, face->stipple);
+         haiku_update_bitmap_rec (rec, face->foreground,
+                                  face->background);
+
+         BView_StartClip (view);
+         haiku_clip_to_row (w, row, ANY_AREA);
+         BView_ClipToRect (view, p->bx, p->by, p->nx, p->ny);
+         BView_DrawBitmapTiled (view, rec->img, 0, 0, -1, -1,
+                                0, 0, FRAME_PIXEL_WIDTH (f),
+                                FRAME_PIXEL_HEIGHT (f));
+         BView_EndClip (view);
+       }
     }
 
   if (p->which
       && p->which < max_fringe_bmp
       && p->which < max_used_fringe_bitmap)
     {
-      void *bitmap = fringe_bmps[p->which];
+      bitmap = fringe_bmps[p->which];
 
       if (!bitmap)
        {
@@ -2561,8 +2587,6 @@ haiku_draw_fringe_bitmap (struct window *w, struct 
glyph_row *row,
          bitmap = fringe_bmps[p->which];
        }
 
-      uint32_t col;
-
       if (!p->cursor_p)
        col = face->foreground;
       else if (p->overlay_p)



reply via email to

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