X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fhscroll.h;h=abbaded31ae2a6f7797e29f26d2c581c4d6c1f07;hb=243a7a2541ca3baf0eb49f259ac478f3140ea569;hp=6b623fb1b77c018a910bce7c951897320e36be8d;hpb=de82a840d22c418351036c09a7fb466d1ffb4efd;p=ncmpc.git diff --git a/src/hscroll.h b/src/hscroll.h index 6b623fb..abbaded 100644 --- a/src/hscroll.h +++ b/src/hscroll.h @@ -1,6 +1,6 @@ -/* - * (c) 2004-2008 The Music Player Daemon Project - * http://www.musicpd.org/ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2010 The Music Player Daemon Project + * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -11,22 +11,110 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef HSCROLL_H #define HSCROLL_H +#include "config.h" +#include "ncmpc_curses.h" + #include -typedef struct { +/** + * This class is used to auto-scroll text which does not fit on the + * screen. Call hscroll_init() to initialize the object, + * hscroll_clear() to free resources, and hscroll_set() to begin + * scrolling. + */ +struct hscroll { + WINDOW *w; + const char *separator; + + /** + * The bounding coordinates on the screen. + */ + unsigned x, y, width; + + /** + * ncurses attributes for drawing the text. + */ + attr_t attrs; + + /** + * ncurses colors for drawing the text. + */ + short pair; + + /** + * The scrolled text, in the current locale. + */ + char *text; + + /** + * The current scrolling offset. This is a character + * position, not a screen column. + */ gsize offset; - GTime t; /* GTime is equivalent to time_t */ -} scroll_state_t; -char *strscroll(char *str, char *separator, int width, scroll_state_t *st); + /** + * The id of the timer which updates the scrolled area every + * second. + */ + guint source_id; +}; + +static inline void +hscroll_reset(struct hscroll *hscroll) +{ + hscroll->offset = 0; +} + +static inline void +hscroll_step(struct hscroll *hscroll) +{ + ++hscroll->offset; +} + +char * +strscroll(struct hscroll *hscroll, const char *str, const char *separator, + unsigned width); + +/** + * Initializes a #hscroll object allocated by the caller. + */ +static inline void +hscroll_init(struct hscroll *hscroll, WINDOW *w, const char *separator) +{ + hscroll->w = w; + hscroll->separator = separator; +} + +/** + * Sets a text to scroll. This installs a timer which redraws every + * second with the current window attributes. Call hscroll_clear() to + * disable it. This function automatically removes the old text. + */ +void +hscroll_set(struct hscroll *hscroll, unsigned x, unsigned y, unsigned width, + const char *text); + +/** + * Removes the text and the timer. It may be reused with + * hscroll_set(). + */ +void +hscroll_clear(struct hscroll *hscroll); + +/** + * Explicitly draws the scrolled text. Calling this function is only + * allowed if there is a text currently. + */ +void +hscroll_draw(struct hscroll *hscroll); #endif