/[weechat]/weechat/src/gui/curses/gui-display.c
ViewVC logotype

Diff of /weechat/src/gui/curses/gui-display.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.64 by flashcode, Mon Jan 31 23:33:59 2005 UTC revision 1.65 by flashcode, Sun Feb 6 03:13:34 2005 UTC
# Line 299  gui_curses_window_clear (WINDOW *window) Line 299  gui_curses_window_clear (WINDOW *window)
299  }  }
300    
301  /*  /*
302     * gui_draw_window_separator: draw window separation
303     */
304    
305    void
306    gui_draw_window_separator (t_gui_window *window)
307    {
308        if (window->win_separator)
309            delwin (window->win_separator);
310        
311        if (window->win_x > 0)
312        {
313            window->win_separator = newwin (window->win_height,
314                                            1,
315                                            window->win_y,
316                                            window->win_x - 1);
317            gui_window_set_color (window->win_separator, COLOR_WIN_TITLE);
318            wborder (window->win_separator, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
319            wrefresh (window->win_separator);
320            refresh ();
321        }
322    }
323    
324    /*
325   * gui_draw_buffer_title: draw title window for a buffer   * gui_draw_buffer_title: draw title window for a buffer
326   */   */
327    
# Line 419  gui_display_end_of_line (t_gui_window *w Line 442  gui_display_end_of_line (t_gui_window *w
442          {          {
443              num_displayed = window->win_chat_width -              num_displayed = window->win_chat_width -
444                  window->win_chat_cursor_x;                  window->win_chat_cursor_x;
445                if (num_displayed < 0)
446                    return;
447              saved_char = ptr_message->message[offset + num_displayed];              saved_char = ptr_message->message[offset + num_displayed];
448              ptr_message->message[offset + num_displayed] = '\0';              ptr_message->message[offset + num_displayed] = '\0';
449              if (lines_displayed >= num_lines - count)              if (lines_displayed >= num_lines - count)
# Line 1583  gui_move_page_down (t_gui_window *window Line 1608  gui_move_page_down (t_gui_window *window
1608  }  }
1609    
1610  /*  /*
  * gui_curses_resize_handler: called when term size is modified  
  */  
   
 void  
 gui_curses_resize_handler ()  
 {  
     t_gui_window *ptr_win, *old_current_window;  
     int old_width, old_height;  
     int new_width, new_height;  
       
     getmaxyx (stdscr, old_height, old_width);  
       
     endwin ();  
     refresh ();  
       
     getmaxyx (stdscr, new_height, new_width);  
       
     old_current_window = gui_current_window;  
       
     /* TODO: manage when some windows are outside new term size */  
     for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)  
     {  
         ptr_win->dcc_first = NULL;  
         ptr_win->dcc_selected = NULL;  
         if (ptr_win->win_x + ptr_win->win_width == old_width)  
             ptr_win->win_width = new_width - ptr_win->win_x;  
         if (ptr_win->win_y + ptr_win->win_height == old_height)  
             ptr_win->win_height = new_height - ptr_win->win_y;  
         gui_switch_to_buffer (ptr_win, ptr_win->buffer);  
     }  
       
     gui_current_window = old_current_window;  
     if ((new_width > 5) && (new_height > 5))  
     {  
         gui_ok = 1;  
         gui_calculate_pos_size (gui_current_window);  
         gui_redraw_buffer (gui_current_window->buffer);  
     }  
     else  
         gui_ok = 0;  
 }  
   
 /*  
1611   * gui_window_init_subviews: init subviews for a WeeChat window   * gui_window_init_subviews: init subviews for a WeeChat window
1612   */   */
1613    
# Line 1703  gui_window_split_vertic (t_gui_window *w Line 1685  gui_window_split_vertic (t_gui_window *w
1685          gui_switch_to_buffer (gui_current_window, gui_current_window->buffer);          gui_switch_to_buffer (gui_current_window, gui_current_window->buffer);
1686          gui_redraw_buffer (gui_current_window->buffer);          gui_redraw_buffer (gui_current_window->buffer);
1687                    
1688          /* create & draw separator if window is not on the left */          /* create & draw separator */
1689          gui_current_window->win_separator = newwin (gui_current_window->win_height,          gui_draw_window_separator (gui_current_window);
1690                                                      1,      }
1691                                                      gui_current_window->win_y,  }
1692                                                      gui_current_window->win_x - 1);  
1693          gui_window_set_color (gui_current_window->win_separator, COLOR_WIN_TITLE);  /*
1694          wborder (gui_current_window->win_separator, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');   * gui_window_merge_down: merge window, direction down
1695          wrefresh (gui_current_window->win_separator);   */
1696          refresh ();  
1697    int
1698    gui_window_merge_down (t_gui_window *window)
1699    {
1700        t_gui_window *ptr_win;
1701        
1702        for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
1703        {
1704            if (ptr_win != window)
1705            {
1706                if ((ptr_win->win_y == window->win_y + window->win_height)
1707                    && (ptr_win->win_x == window->win_x)
1708                    && (ptr_win->win_width == window->win_width))
1709                {
1710                    window->win_height += ptr_win->win_height;
1711                    gui_window_free (ptr_win);
1712                    gui_switch_to_buffer (window, window->buffer);
1713                    gui_redraw_buffer (window->buffer);
1714                    return 0;
1715                }
1716            }
1717        }
1718        
1719        /* no window found below current window */
1720        return -1;
1721    }
1722    
1723    /*
1724     * gui_window_merge_up: merge window, direction up
1725     */
1726    
1727    int
1728    gui_window_merge_up (t_gui_window *window)
1729    {
1730        t_gui_window *ptr_win;
1731        
1732        for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
1733        {
1734            if (ptr_win != window)
1735            {
1736                if ((ptr_win->win_y + ptr_win->win_height == window->win_y)
1737                    && (ptr_win->win_x == window->win_x)
1738                    && (ptr_win->win_width == window->win_width))
1739                {
1740                    window->win_height += ptr_win->win_height;
1741                    window->win_y -= ptr_win->win_height;
1742                    gui_window_free (ptr_win);
1743                    gui_switch_to_buffer (window, window->buffer);
1744                    gui_redraw_buffer (window->buffer);
1745                    return 0;
1746                }
1747            }
1748        }
1749        
1750        /* no window found above current window */
1751        return -1;
1752    }
1753    
1754    /*
1755     * gui_window_merge_left: merge window, direction left
1756     */
1757    
1758    int
1759    gui_window_merge_left (t_gui_window *window)
1760    {
1761        t_gui_window *ptr_win;
1762        
1763        for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
1764        {
1765            if (ptr_win != window)
1766            {
1767                if ((ptr_win->win_x + ptr_win->win_width + 1 == window->win_x)
1768                    && (ptr_win->win_y == window->win_y)
1769                    && (ptr_win->win_height == window->win_height))
1770                {
1771                    window->win_width += ptr_win->win_width + 1;
1772                    window->win_x -= ptr_win->win_width + 1;
1773                    gui_window_free (ptr_win);
1774                    gui_switch_to_buffer (window, window->buffer);
1775                    gui_redraw_buffer (window->buffer);
1776                    return 0;
1777                }
1778            }
1779        }
1780        
1781        /* no window found on the left of current window */
1782        return -1;
1783    }
1784    
1785    /*
1786     * gui_window_merge_right: merge window, direction right
1787     */
1788    
1789    int
1790    gui_window_merge_right (t_gui_window *window)
1791    {
1792        t_gui_window *ptr_win;
1793        
1794        for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
1795        {
1796            if (ptr_win != window)
1797            {
1798                if ((ptr_win->win_x == window->win_x + window->win_width + 1)
1799                    && (ptr_win->win_y == window->win_y)
1800                    && (ptr_win->win_height == window->win_height))
1801                {
1802                    window->win_width += ptr_win->win_width + 1;
1803                    gui_window_free (ptr_win);
1804                    gui_switch_to_buffer (window, window->buffer);
1805                    gui_redraw_buffer (window->buffer);
1806                    return 0;
1807                }
1808            }
1809      }      }
1810        
1811        /* no window found on the right of current window */
1812        return -1;
1813    }
1814    
1815    /*
1816     * gui_window_merge: merge a window, direction auto
1817     */
1818    
1819    void
1820    gui_window_merge_auto (t_gui_window *window)
1821    {
1822        if (gui_window_merge_down (window) == 0)
1823            return;
1824        if (gui_window_merge_up (window) == 0)
1825            return;
1826        if (gui_window_merge_left (window) == 0)
1827            return;
1828        if (gui_window_merge_right (window) == 0)
1829            return;
1830    }
1831    
1832    /*
1833     * gui_window_merge_all: merge all windows
1834     */
1835    
1836    void
1837    gui_window_merge_all (t_gui_window *window)
1838    {
1839        while (gui_windows->next_window)
1840        {
1841            gui_window_free ((gui_windows == window) ? gui_windows->next_window : gui_windows);
1842        }
1843        window->win_x = 0;
1844        window->win_y = 0;
1845        window->win_width = COLS;
1846        window->win_height = LINES;
1847        gui_switch_to_buffer (window, window->buffer);
1848        gui_redraw_buffer (window->buffer);
1849    }
1850    
1851    /*
1852     * gui_curses_resize_handler: called when term size is modified
1853     */
1854    
1855    void
1856    gui_curses_resize_handler ()
1857    {
1858        t_gui_window *ptr_win, *old_current_window;
1859        int old_width, old_height;
1860        int new_width, new_height;
1861        int merge_all_windows;
1862        
1863        getmaxyx (stdscr, old_height, old_width);
1864        
1865        endwin ();
1866        refresh ();
1867        
1868        getmaxyx (stdscr, new_height, new_width);
1869        
1870        old_current_window = gui_current_window;
1871        
1872        gui_ok = ((new_width > 5) && (new_height > 5));
1873        
1874        merge_all_windows = 0;
1875        for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
1876        {
1877            ptr_win->dcc_first = NULL;
1878            ptr_win->dcc_selected = NULL;
1879            
1880            if (!merge_all_windows)
1881            {
1882                if ((ptr_win->win_x > new_width - 5)
1883                    || (ptr_win->win_y > new_height - 5))
1884                    merge_all_windows = 1;
1885                else
1886                {
1887                    if (ptr_win->win_x + ptr_win->win_width == old_width)
1888                        ptr_win->win_width = new_width - ptr_win->win_x;
1889                    if (ptr_win->win_y + ptr_win->win_height == old_height)
1890                        ptr_win->win_height = new_height - ptr_win->win_y;
1891                    if ((ptr_win->win_width < 5) || (ptr_win->win_height < 5))
1892                        merge_all_windows = 1;
1893                }
1894            }
1895        }
1896        
1897        if (merge_all_windows)
1898            gui_window_merge_all (gui_current_window);
1899        
1900        for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
1901        {
1902            gui_calculate_pos_size (ptr_win);
1903            gui_switch_to_buffer (ptr_win, ptr_win->buffer);
1904            gui_draw_window_separator (ptr_win);
1905        }
1906        
1907        gui_current_window = old_current_window;
1908        gui_redraw_buffer (gui_current_window->buffer);
1909  }  }
1910    
1911  /*  /*

Legend:
Removed from v.1.64  
changed lines
  Added in v.1.65

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26