diff options
author | Sven Eden <sven.eden@gmx.de> | 2013-03-05 07:58:13 +0100 |
---|---|---|
committer | Sven Eden <sven.eden@gmx.de> | 2013-03-05 07:58:13 +0100 |
commit | 85458024ce090ca1c7a8c0093156f1f4abb3bc7a (patch) | |
tree | 89e41e8f36313b573ba19768c0d2c24eab999b55 | |
parent | Changed main keys to fit in 80 characters (diff) | |
download | ufed-85458024ce090ca1c7a8c0093156f1f4abb3bc7a.tar.gz ufed-85458024ce090ca1c7a8c0093156f1f4abb3bc7a.tar.bz2 ufed-85458024ce090ca1c7a8c0093156f1f4abb3bc7a.zip |
Added rendering and mouse event handling for two lines of keys
-rw-r--r-- | ufed-curses.c | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/ufed-curses.c b/ufed-curses.c index cf97d0c..1948f99 100644 --- a/ufed-curses.c +++ b/ufed-curses.c @@ -143,17 +143,27 @@ void drawBottom(bool withSep) if (keys) { const sKey* key = keys; int pos = 2; + int row = 0; int len = 0; - while ((pos < (bWidth - 2)) && (key->key != '\0')) { + while (key->key != '\0') { + if (row != key->row) { + row = key->row; + pos = 2; + } + len = strlen(key->descr); - if (len > (bWidth - 2 - pos)) - len = bWidth - 2 - pos; - if (key->key > 0) - wattrset(w, COLOR_PAIR(6)); - else - wattrset(w, COLOR_PAIR(3)); - mvwaddnstr(w, 1, pos, key->descr, len); + + if (pos < (bWidth - 2)) { + if (len > (bWidth - 2 - pos)) + len = bWidth - 2 - pos; + if (key->key > 0) + wattrset(w, COLOR_PAIR(6)); + else + wattrset(w, COLOR_PAIR(3)); + + mvwaddnstr(w, row + 1, pos, key->descr, len); + } pos += len + 1; ++key; } @@ -622,14 +632,21 @@ int maineventloop( } // End of having a scrollbar } else if(wmouse_trafo(win(Bottom), &event.y, &event.x, FALSE)) { if( (event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED)) - && (event.y == 1) ) { - const sKey* key; - int x = event.x; - if(x < 2) + && (event.y >= 1) && (event.y <= 2)) { + const sKey* key = keys; + int x = event.x; + int y = event.y; + if((x < 2) || (y < 1) || (y > 2)) continue; x -= 2; - for(key = keys; key->key!='\0'; key++) { - if( (key->key > 0) && ((size_t)x < key->length)) { + --y; + + // Forward to second row if y is 1 + for ( ; y > key->row; key++) ; + + // Check key + for ( ; (key->row == y) && (x >= 0) && (key->key != '\0'); key++) { + if ((key->key > 0) && ((size_t)x < key->length) ) { event.x -= x; wattrset(win(Bottom), COLOR_PAIR(6) | A_BOLD | A_REVERSE); mvwaddstr(win(Bottom), event.y, event.x, key->descr); @@ -642,10 +659,7 @@ int maineventloop( c = key->key; goto check_key; } - x -= key->length; - if(x == 0) - break; - x--; + x -= key->length + 1; } } } |