move drawing to separate functions
This commit is contained in:
parent
914a41b4ee
commit
04b46313ef
236
libs/draw.c
236
libs/draw.c
|
@ -38,7 +38,7 @@ drawhighlights(struct item *item, int x, int y, int w)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
drawitem(struct item *item, int x, int y, int w)
|
drawitemtext(struct item *item, int x, int y, int w)
|
||||||
{
|
{
|
||||||
char buffer[MAXITEMLENGTH];
|
char buffer[MAXITEMLENGTH];
|
||||||
Clr scm[3];
|
Clr scm[3];
|
||||||
|
@ -150,46 +150,99 @@ drawitem(struct item *item, int x, int y, int w)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
drawmenu(void)
|
drawitem(int x, int y, int w)
|
||||||
{
|
{
|
||||||
unsigned int curpos = 0;
|
|
||||||
struct item *item;
|
struct item *item;
|
||||||
int x = 0, y = 0, fh = drw->font->h, w;
|
|
||||||
#if USEIMAGE
|
|
||||||
int ox = 0; // original x position
|
|
||||||
#endif
|
|
||||||
char *censort; // censor text (password)
|
|
||||||
plw = hidepowerline ? 0 : drw->font->h / 2 + 1; // powerline size
|
|
||||||
|
|
||||||
// draw menu first using menu scheme
|
|
||||||
drw_setscheme(drw, scheme[SchemeMenu]);
|
|
||||||
drw_rect(drw, 0, 0, mw, mh, 1, 1);
|
|
||||||
|
|
||||||
int numberWidth = 0;
|
int numberWidth = 0;
|
||||||
int modeWidth = 0;
|
int modeWidth = 0;
|
||||||
int larrowWidth = 0;
|
|
||||||
int rarrowWidth = 0;
|
int rarrowWidth = 0;
|
||||||
|
|
||||||
// add width
|
// add width
|
||||||
if (!hidemode) modeWidth = pango_mode ? TEXTWM(modetext) : TEXTW(modetext);
|
if (!hidemode) modeWidth = pango_mode ? TEXTWM(modetext) : TEXTW(modetext);
|
||||||
if (!hidelarrow) larrowWidth = pango_leftarrow ? TEXTWM(leftarrow) : TEXTW(leftarrow);
|
|
||||||
if (!hiderarrow) rarrowWidth = pango_rightarrow ? TEXTWM(rightarrow) : TEXTW(rightarrow);
|
if (!hiderarrow) rarrowWidth = pango_rightarrow ? TEXTWM(rightarrow) : TEXTW(rightarrow);
|
||||||
|
if (!hidematchcount) numberWidth = pango_numbers ? TEXTWM(numbers) : TEXTW(numbers);
|
||||||
|
|
||||||
if (prompt && *prompt) {
|
// mode indicator is always going to be at the right
|
||||||
|
if (hidemode) {
|
||||||
|
numberWidth += 2 * sp + borderwidth;
|
||||||
|
} else {
|
||||||
|
modeWidth += 2 * sp + borderwidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if USEIMAGE
|
||||||
|
int ox = 0; // original x position
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// draw items and image
|
||||||
|
if (lines > 0) {
|
||||||
|
int i = 0;
|
||||||
|
int rx = 0;
|
||||||
|
|
||||||
|
// draw image first
|
||||||
|
#if USEIMAGE
|
||||||
|
if (!hideimage && longestedge != 0) {
|
||||||
|
rx = ox;
|
||||||
|
rx += (imagegaps * 2) + imagewidth;
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
if (!indentitems) {
|
||||||
|
rx = 0;
|
||||||
|
} else {
|
||||||
|
rx = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (item = curr; item != next; item = item->right, i++) {
|
||||||
|
drawitemtext(
|
||||||
|
item,
|
||||||
|
rx + ((i / lines) * ((mw - rx) / columns)),
|
||||||
|
y + (((i % lines) + 1) * bh),
|
||||||
|
(mw - rx) / columns
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// horizontal list
|
||||||
|
} else if (matches) {
|
||||||
|
x += inputw;
|
||||||
|
|
||||||
|
drawlarrow(x, y, w);
|
||||||
|
|
||||||
|
for (item = curr; item != next; item = item->right) // draw items
|
||||||
|
x = drawitemtext(item, x, 0, MIN(pango_item ? TEXTWM(item->text) : TEXTW(item->text), mw - x - rarrowWidth - numberWidth - modeWidth));
|
||||||
|
|
||||||
|
drawrarrow(x, y, w, numberWidth, modeWidth, rarrowWidth);
|
||||||
|
}
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
drawprompt(int x, int y, int w)
|
||||||
|
{
|
||||||
|
if (prompt && *prompt && !hideprompt) {
|
||||||
drw_setscheme(drw, scheme[SchemePrompt]);
|
drw_setscheme(drw, scheme[SchemePrompt]);
|
||||||
|
|
||||||
#if USEIMAGE
|
|
||||||
ox = x;
|
|
||||||
#endif
|
|
||||||
x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0, pango_prompt ? True : False);
|
x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0, pango_prompt ? True : False);
|
||||||
|
|
||||||
drw_settrans(drw, scheme[SchemePrompt], scheme[SchemeMenu]);
|
if (!hidepowerline) {
|
||||||
drw_arrow(drw, x, 0, plw, bh, 1, 0);
|
drw_settrans(drw, scheme[SchemePrompt], scheme[SchemeMenu]);
|
||||||
|
drw_arrow(drw, x, 0, plw, bh, 1, 0);
|
||||||
|
|
||||||
x += plw;
|
x += plw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
drawinput(int x, int y, int w)
|
||||||
|
{
|
||||||
|
char *censort; // censor text (password)
|
||||||
|
unsigned int curpos = 0;
|
||||||
|
int fh = drw->font->h;
|
||||||
|
|
||||||
// draw input
|
// draw input
|
||||||
w = (lines > 0 || !matches) ? mw - x : inputw;
|
w = (lines > 0 || !matches) ? mw - x : inputw;
|
||||||
drw_setscheme(drw, scheme[SchemeInput]);
|
drw_setscheme(drw, scheme[SchemeInput]);
|
||||||
|
@ -215,69 +268,42 @@ drawmenu(void)
|
||||||
drw_rect(drw, x + curpos, 2 + (bh - fh) / 2, 2, fh - 4, 1, 0);
|
drw_rect(drw, x + curpos, 2 + (bh - fh) / 2, 2, fh - 4, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hidematchcount) {
|
return x;
|
||||||
recalculatenumbers();
|
}
|
||||||
numberWidth = TEXTW(numbers);
|
|
||||||
|
|
||||||
// mode indicator is always going to be at the right
|
|
||||||
if (hidemode) {
|
|
||||||
numberWidth += 2 * sp + borderwidth;
|
|
||||||
} else {
|
|
||||||
modeWidth += 2 * sp + borderwidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
int
|
||||||
|
drawlarrow(int x, int y, int w)
|
||||||
|
{
|
||||||
|
if (hidelarrow) {
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw items and image
|
if (curr->left) { // draw left arrow
|
||||||
if (lines > 0) {
|
drw_setscheme(drw, scheme[SchemeLArrow]);
|
||||||
int i = 0;
|
drw_text(drw, x, 0, w, bh, lrpad / 2, leftarrow, 0, pango_leftarrow ? True : False);
|
||||||
int rx = 0;
|
|
||||||
|
|
||||||
// draw image first
|
|
||||||
#if USEIMAGE
|
|
||||||
if (!hideimage && longestedge != 0) {
|
|
||||||
rx = ox;
|
|
||||||
rx += (imagegaps * 2) + imagewidth;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
if (!indentitems) {
|
|
||||||
rx = 0;
|
|
||||||
} else {
|
|
||||||
rx = x;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (item = curr; item != next; item = item->right, i++) {
|
|
||||||
drawitem(
|
|
||||||
item,
|
|
||||||
rx + ((i / lines) * ((mw - rx) / columns)),
|
|
||||||
y + (((i % lines) + 1) * bh),
|
|
||||||
(mw - rx) / columns
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// horizontal list
|
|
||||||
} else if (matches) {
|
|
||||||
x += inputw;
|
|
||||||
w = larrowWidth;
|
|
||||||
|
|
||||||
if (curr->left && !hidelarrow) { // draw left arrow
|
|
||||||
drw_setscheme(drw, scheme[SchemeLArrow]);
|
|
||||||
drw_text(drw, x, 0, w, bh, lrpad / 2, leftarrow, 0, pango_leftarrow ? True : False);
|
|
||||||
}
|
|
||||||
|
|
||||||
x += w;
|
|
||||||
|
|
||||||
for (item = curr; item != next; item = item->right) // draw items
|
|
||||||
x = drawitem(item, x, 0, MIN(pango_item ? TEXTWM(item->text) : TEXTW(item->text), mw - x - rarrowWidth - numberWidth - modeWidth));
|
|
||||||
|
|
||||||
if (next && !hiderarrow) { // draw right arrow
|
|
||||||
w = rarrowWidth;
|
|
||||||
drw_setscheme(drw, scheme[SchemeRArrow]);
|
|
||||||
|
|
||||||
drw_text(drw, mw - w - numberWidth - modeWidth, 0, w, bh, lrpad / 2, rightarrow, 0, pango_rightarrow ? True : False);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
x += w;
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
drawrarrow(int x, int y, int w, int numberWidth, int modeWidth, int rarrowWidth)
|
||||||
|
{
|
||||||
|
if (next && !hiderarrow) { // draw right arrow
|
||||||
|
w = rarrowWidth;
|
||||||
|
drw_setscheme(drw, scheme[SchemeRArrow]);
|
||||||
|
|
||||||
|
drw_text(drw, mw - w, 0, w, bh, lrpad / 2, rightarrow, 0, pango_rightarrow ? True : False);
|
||||||
|
}
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
drawnumber(int x, int y, int w, int numberWidth, int modeWidth)
|
||||||
|
{
|
||||||
if (!hidematchcount) { // draw match count
|
if (!hidematchcount) { // draw match count
|
||||||
drw_setscheme(drw, scheme[SchemeNumber]);
|
drw_setscheme(drw, scheme[SchemeNumber]);
|
||||||
|
|
||||||
|
@ -292,6 +318,12 @@ drawmenu(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
drawmode(int x, int y, int w, int numberWidth, int modeWidth)
|
||||||
|
{
|
||||||
if (!hidemode) { // draw mode indicator
|
if (!hidemode) { // draw mode indicator
|
||||||
drw_setscheme(drw, scheme[SchemeMode]);
|
drw_setscheme(drw, scheme[SchemeMode]);
|
||||||
|
|
||||||
|
@ -306,6 +338,46 @@ drawmenu(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// map the drawing
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
drawmenu(void)
|
||||||
|
{
|
||||||
|
int x = 0, y = 0, w = 0;
|
||||||
|
plw = hidepowerline ? 0 : drw->font->h / 2 + 1; // powerline size
|
||||||
|
|
||||||
|
// draw menu first using menu scheme
|
||||||
|
drw_setscheme(drw, scheme[SchemeMenu]);
|
||||||
|
drw_rect(drw, 0, 0, mw, mh, 1, 1);
|
||||||
|
|
||||||
|
int numberWidth = 0;
|
||||||
|
int modeWidth = 0;
|
||||||
|
|
||||||
|
// add width
|
||||||
|
if (!hidemode) modeWidth = pango_mode ? TEXTWM(modetext) : TEXTW(modetext);
|
||||||
|
|
||||||
|
// calculate match count
|
||||||
|
if (!hidematchcount) {
|
||||||
|
recalculatenumbers();
|
||||||
|
numberWidth = TEXTW(numbers);
|
||||||
|
|
||||||
|
// mode indicator is always going to be at the right
|
||||||
|
if (hidemode) {
|
||||||
|
numberWidth += 2 * sp + borderwidth;
|
||||||
|
} else {
|
||||||
|
modeWidth += 2 * sp + borderwidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
x = drawprompt(x, y, w);
|
||||||
|
x = drawinput(x, y, w);
|
||||||
|
|
||||||
|
if (!hidemode) modeWidth = pango_mode ? TEXTWM(modetext) : TEXTW(modetext);
|
||||||
|
|
||||||
|
drawitem(x, y, w);
|
||||||
|
drawnumber(x, y, w, numberWidth, modeWidth);
|
||||||
|
drawmode(x, y, w, numberWidth, modeWidth);
|
||||||
|
|
||||||
drw_map(drw, win, 0, 0, mw, mh);
|
drw_map(drw, win, 0, 0, mw, mh);
|
||||||
}
|
}
|
||||||
|
|
8
libs/draw.h
Normal file
8
libs/draw.h
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
// declare functions
|
||||||
|
static void drawmenu(void);
|
||||||
|
static int drawprompt(int x, int y, int w);
|
||||||
|
static int drawinput(int x, int y, int w);
|
||||||
|
static int drawnumber(int x, int y, int w, int numberWidth, int modeWidth);
|
||||||
|
static int drawmode(int x, int y, int w, int numberWidth, int modeWidth);
|
||||||
|
static int drawlarrow(int x, int y, int w);
|
||||||
|
static int drawrarrow(int x, int y, int w, int numberWidth, int modeWidth, int rarrowWidth);
|
3
spmenu.c
3
spmenu.c
|
@ -90,6 +90,7 @@
|
||||||
// various headers
|
// various headers
|
||||||
#include "libs/sl/draw.h"
|
#include "libs/sl/draw.h"
|
||||||
#include "libs/sl/main.h"
|
#include "libs/sl/main.h"
|
||||||
|
#include "libs/draw.h"
|
||||||
#include "libs/stream.h"
|
#include "libs/stream.h"
|
||||||
#include "libs/schemes.h"
|
#include "libs/schemes.h"
|
||||||
#include "libs/arg.h"
|
#include "libs/arg.h"
|
||||||
|
@ -187,8 +188,6 @@ static char **history;
|
||||||
static size_t histsz, histpos;
|
static size_t histsz, histpos;
|
||||||
|
|
||||||
// declare functions
|
// declare functions
|
||||||
static void drawmenu(void);
|
|
||||||
static void drawhighlights(struct item *item, int x, int y, int w);
|
|
||||||
static void calcoffsets(void);
|
static void calcoffsets(void);
|
||||||
static void recalculatenumbers(void);
|
static void recalculatenumbers(void);
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
|
|
Loading…
Reference in a new issue