The branch, master has been updated
       via  919bde7cb1e8961cfb474013bded00f81ae58435 (commit)
      from  3d974b7267e1e9073930a065d7a0f206f3d975f6 (commit)

- Log -----------------------------------------------------------------
commit 919bde7cb1e8961cfb474013bded00f81ae58435
Author: Nicholas Marriott <nicholas.marri...@gmail.com>
Commit: Nicholas Marriott <nicholas.marri...@gmail.com>

    When only two panes in a window, only draw half the separating line as 
active.
---
 screen-redraw.c |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 53 insertions(+), 4 deletions(-)

diff --git a/screen-redraw.c b/screen-redraw.c
index 14b7316..a7bf81f 100644
--- a/screen-redraw.c
+++ b/screen-redraw.c
@@ -24,7 +24,11 @@
 
 int    screen_redraw_cell_border1(struct window_pane *, u_int, u_int);
 int    screen_redraw_cell_border(struct client *, u_int, u_int);
-int    screen_redraw_check_cell(struct client *, u_int, u_int);
+int    screen_redraw_check_cell(struct client *, u_int, u_int,
+           struct window_pane **);
+int    screen_redraw_check_active(u_int, u_int, int, struct window *,
+           struct window_pane *);
+
 void   screen_redraw_draw_number(struct client *, struct window_pane *);
 
 #define CELL_INSIDE 0
@@ -93,7 +97,8 @@ screen_redraw_cell_border(struct client *c, u_int px, u_int 
py)
 
 /* Check if cell inside a pane. */
 int
-screen_redraw_check_cell(struct client *c, u_int px, u_int py)
+screen_redraw_check_cell(struct client *c, u_int px, u_int py,
+    struct window_pane **wpp)
 {
        struct window           *w = c->session->curw->window;
        struct window_pane      *wp;
@@ -105,6 +110,7 @@ screen_redraw_check_cell(struct client *c, u_int px, u_int 
py)
        TAILQ_FOREACH(wp, &w->panes, entry) {
                if (!window_pane_visible(wp))
                        continue;
+               *wpp = wp;
 
                /* If outside the pane and its border, skip it. */
                if ((wp->xoff != 0 && px < wp->xoff - 1) ||
@@ -162,9 +168,52 @@ screen_redraw_check_cell(struct client *c, u_int px, u_int 
py)
                }
        }
 
+       *wpp = NULL;
        return (CELL_OUTSIDE);
 }
 
+/* Check active pane indicator. */
+int
+screen_redraw_check_active(u_int px, u_int py, int type, struct window *w,
+    struct window_pane *wp)
+{
+       /* Is this off the active pane border? */
+       if (screen_redraw_cell_border1(w->active, px, py) != 1)
+               return (0);
+
+       /* If there are more than two panes, that's enough. */
+       if (window_count_panes(w) != 2)
+               return (1);
+
+       /* Else if the cell is not a border cell, forget it. */
+       if (wp == NULL || (type == CELL_OUTSIDE || type == CELL_INSIDE))
+               return (1);
+
+       /* Check if the pane covers the whole width. */
+       if (wp->xoff == 0 && wp->sx == w->sx) {
+               /* This can either be the top pane or the bottom pane. */
+               if (wp->yoff == 0) { /* top pane */
+                       if (wp == w->active)
+                               return (px <= wp->sx / 2);
+                       return (px > wp->sx / 2);
+               }
+               return (0);
+       }
+
+       /* Check if the pane covers the whole height. */
+       if (wp->yoff == 0 && wp->sy == w->sy) {
+               /* This can either be the left pane or the right pane. */
+               if (wp->xoff == 0) { /* left pane */
+                       if (wp == w->active)
+                               return (py <= wp->sy / 2);
+                       return (py > wp->sy / 2);
+               }
+               return (0);
+       }
+
+       return (type);
+}
+
 /* Redraw entire screen. */
 void
 screen_redraw_screen(struct client *c, int status_only, int borders_only)
@@ -223,10 +272,10 @@ screen_redraw_screen(struct client *c, int status_only, 
int borders_only)
                                break;
                }
                for (i = 0; i < tty->sx; i++) {
-                       type = screen_redraw_check_cell(c, i, j);
+                       type = screen_redraw_check_cell(c, i, j, &wp);
                        if (type == CELL_INSIDE)
                                continue;
-                       if (screen_redraw_cell_border1(w->active, i, j) == 1)
+                       if (screen_redraw_check_active(i, j, type, w, wp))
                                tty_attributes(tty, &active_gc);
                        else
                                tty_attributes(tty, &other_gc);


-----------------------------------------------------------------------

Summary of changes:
 screen-redraw.c |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 53 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
tmux-cvs mailing list
tmux-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to