some UI improvements in Music Editor

This commit is contained in:
BADIM-PC\Vadim 2017-12-25 23:57:58 +03:00
parent 951e5f7e02
commit a2ed1a0453
2 changed files with 68 additions and 22 deletions

View File

@ -54,15 +54,25 @@ const tic_music_pos* getMusicPos(Music* music)
return &music->tic->ram.music_pos; return &music->tic->ram.music_pos;
} }
static void drawDownBorder(Music* music, s32 x, s32 y, s32 w, s32 h)
{
tic_mem* tic = music->tic;
tic->api.rect(tic, x, y-1, w, 1, tic_color_dark_gray);
tic->api.rect(tic, x-1, y, 1, h, tic_color_dark_gray);
tic->api.rect(tic, x, y+h, w, 1, tic_color_light_blue);
tic->api.rect(tic, x+w, y, 1, h, tic_color_light_blue);
}
static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music*, s32, s32 channel), s32 channel) static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music*, s32, s32 channel), s32 channel)
{ {
static const u8 LeftArrow[] = static const u8 LeftArrow[] =
{ {
0b00010000, 0b00100000,
0b00110000, 0b01100000,
0b01110000, 0b11100000,
0b00110000, 0b01100000,
0b00010000, 0b00100000,
0b00000000, 0b00000000,
0b00000000, 0b00000000,
0b00000000, 0b00000000,
@ -70,11 +80,11 @@ static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music*
static const u8 RightArrow[] = static const u8 RightArrow[] =
{ {
0b01000000, 0b00100000,
0b01100000, 0b00110000,
0b01110000, 0b00111000,
0b01100000, 0b00110000,
0b01000000, 0b00100000,
0b00000000, 0b00000000,
0b00000000, 0b00000000,
0b00000000, 0b00000000,
@ -84,16 +94,20 @@ static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music*
SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT }; SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
bool over = false; bool over = false;
bool down = false;
if (checkMousePos(&rect)) if (checkMousePos(&rect))
{ {
setCursor(SDL_SYSTEM_CURSOR_HAND); setCursor(SDL_SYSTEM_CURSOR_HAND);
over = true; over = true;
if (checkMouseDown(&rect, SDL_BUTTON_LEFT))
down = true;
if (checkMouseClick(&rect, SDL_BUTTON_LEFT)) if (checkMouseClick(&rect, SDL_BUTTON_LEFT))
set(music, -1, channel); set(music, -1, channel);
} }
drawBitIcon(rect.x, rect.y, LeftArrow, (over ? tic_color_light_blue : tic_color_dark_gray)); drawBitIcon(rect.x, rect.y + (down ? 1 : 0), LeftArrow, (over ? tic_color_light_blue : tic_color_dark_gray));
} }
{ {
@ -116,6 +130,7 @@ static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music*
} }
music->tic->api.rect(music->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_black)); music->tic->api.rect(music->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_black));
drawDownBorder(music, rect.x, rect.y, rect.w, rect.h);
if(music->tracker.row == -1 && music->tracker.col / CHANNEL_COLS == channel) if(music->tracker.row == -1 && music->tracker.col / CHANNEL_COLS == channel)
{ {
@ -133,16 +148,20 @@ static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music*
SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT }; SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
bool over = false; bool over = false;
bool down = false;
if (checkMousePos(&rect)) if (checkMousePos(&rect))
{ {
setCursor(SDL_SYSTEM_CURSOR_HAND); setCursor(SDL_SYSTEM_CURSOR_HAND);
over = true; over = true;
if (checkMouseDown(&rect, SDL_BUTTON_LEFT))
down = true;
if (checkMouseClick(&rect, SDL_BUTTON_LEFT)) if (checkMouseClick(&rect, SDL_BUTTON_LEFT))
set(music, +1, channel); set(music, +1, channel);
} }
drawBitIcon(rect.x, rect.y, RightArrow, (over ? tic_color_light_blue : tic_color_dark_gray)); drawBitIcon(rect.x, rect.y + (down ? 1 : 0), RightArrow, (over ? tic_color_light_blue : tic_color_dark_gray));
} }
} }
@ -172,6 +191,7 @@ static void drawSwitch(Music* music, s32 x, s32 y, const char* label, s32 value,
0b00000000, 0b00000000,
}; };
music->tic->api.text(music->tic, label, x, y+1, (tic_color_black));
music->tic->api.text(music->tic, label, x, y, (tic_color_white)); music->tic->api.text(music->tic, label, x, y, (tic_color_white));
{ {
@ -179,20 +199,28 @@ static void drawSwitch(Music* music, s32 x, s32 y, const char* label, s32 value,
SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT }; SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
bool over = false;
bool down = false;
if (checkMousePos(&rect)) if (checkMousePos(&rect))
{ {
setCursor(SDL_SYSTEM_CURSOR_HAND); setCursor(SDL_SYSTEM_CURSOR_HAND);
over = true;
if (checkMouseDown(&rect, SDL_BUTTON_LEFT))
down = true;
if (checkMouseClick(&rect, SDL_BUTTON_LEFT)) if (checkMouseClick(&rect, SDL_BUTTON_LEFT))
set(music, -1, data); set(music, -1, data);
} }
drawBitIcon(rect.x, rect.y, LeftArrow, (tic_color_dark_gray)); drawBitIcon(rect.x, rect.y + (down ? 1 : 0), LeftArrow, over ? tic_color_light_blue : tic_color_dark_gray);
} }
{ {
char val[] = "999"; char val[] = "999";
sprintf(val, "%02i", value); sprintf(val, "%02i", value);
music->tic->api.fixed_text(music->tic, val, x + TIC_FONT_WIDTH, y+1, (tic_color_black));
music->tic->api.fixed_text(music->tic, val, x += TIC_FONT_WIDTH, y, (tic_color_white)); music->tic->api.fixed_text(music->tic, val, x += TIC_FONT_WIDTH, y, (tic_color_white));
} }
@ -201,15 +229,22 @@ static void drawSwitch(Music* music, s32 x, s32 y, const char* label, s32 value,
SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT }; SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
bool over = false;
bool down = false;
if (checkMousePos(&rect)) if (checkMousePos(&rect))
{ {
setCursor(SDL_SYSTEM_CURSOR_HAND); setCursor(SDL_SYSTEM_CURSOR_HAND);
over = true;
if (checkMouseDown(&rect, SDL_BUTTON_LEFT))
down = true;
if (checkMouseClick(&rect, SDL_BUTTON_LEFT)) if (checkMouseClick(&rect, SDL_BUTTON_LEFT))
set(music, +1, data); set(music, +1, data);
} }
drawBitIcon(rect.x, rect.y, RightArrow, (tic_color_dark_gray)); drawBitIcon(rect.x, rect.y + (down ? 1 : 0), RightArrow, over ? tic_color_light_blue : tic_color_dark_gray);
} }
} }
@ -1113,6 +1148,7 @@ static void drawTrackerFrames(Music* music, s32 x, s32 y)
} }
music->tic->api.rect(music->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_black)); music->tic->api.rect(music->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_black));
drawDownBorder(music, rect.x, rect.y, rect.w, rect.h);
} }
for (s32 i = 0; i < MUSIC_FRAMES; i++) for (s32 i = 0; i < MUSIC_FRAMES; i++)
@ -1131,7 +1167,8 @@ static void drawTrackerFrames(Music* music, s32 x, s32 y)
0b00000000, 0b00000000,
}; };
drawBitIcon(x - TIC_FONT_WIDTH, y - 1 + i*TIC_FONT_HEIGHT, Icon, (tic_color_white)); drawBitIcon(x - TIC_FONT_WIDTH-1, y + i*TIC_FONT_HEIGHT, Icon, tic_color_black);
drawBitIcon(x - TIC_FONT_WIDTH-1, y - 1 + i*TIC_FONT_HEIGHT, Icon, tic_color_white);
} }
if (i == music->tracker.frame) if (i == music->tracker.frame)
@ -1148,7 +1185,8 @@ static void drawTrackerFrames(Music* music, s32 x, s32 y)
{ {
char buf[] = "99"; char buf[] = "99";
sprintf(buf, "%02i", music->tracker.row); sprintf(buf, "%02i", music->tracker.row);
music->tic->api.fixed_text(music->tic, buf, x, y - 9, (tic_color_white)); music->tic->api.fixed_text(music->tic, buf, x, y - 10, (tic_color_black));
music->tic->api.fixed_text(music->tic, buf, x, y - 11, (tic_color_white));
} }
} }
@ -1216,6 +1254,7 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
} }
music->tic->api.rect(music->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_black)); music->tic->api.rect(music->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_black));
drawDownBorder(music, rect.x, rect.y, rect.w, rect.h);
s32 start = music->tracker.scroll; s32 start = music->tracker.scroll;
s32 end = start + Rows; s32 end = start + Rows;
@ -1297,7 +1336,7 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
} }
if (i % NOTES_PER_BEET == 0) if (i % NOTES_PER_BEET == 0)
music->tic->api.pixel(music->tic, x - 4, y + pos*TIC_FONT_HEIGHT + 2, (tic_color_dark_gray)); music->tic->api.pixel(music->tic, x - 4, y + pos*TIC_FONT_HEIGHT + 2, (tic_color_black));
} }
} }
@ -1341,8 +1380,8 @@ static void drawTracker(Music* music, s32 x, s32 y)
for (s32 i = 0; i < TIC_SOUND_CHANNELS; i++) for (s32 i = 0; i < TIC_SOUND_CHANNELS; i++)
{ {
s32 patternId = tic_tool_get_pattern_id(getTrack(music), music->tracker.frame, i); s32 patternId = tic_tool_get_pattern_id(getTrack(music), music->tracker.frame, i);
drawEditbox(music, x + ChannelWidth * i + 2*TIC_FONT_WIDTH, y - 9, patternId, setChannelPattern, i); drawEditbox(music, x + ChannelWidth * i + 2*TIC_FONT_WIDTH, y - 11, patternId, setChannelPattern, i);
drawTumbler(music, x + ChannelWidth * i + 7*TIC_FONT_WIDTH, y - 9, i); drawTumbler(music, x + ChannelWidth * i + 7*TIC_FONT_WIDTH, y - 11, i);
} }
for (s32 i = 0; i < TIC_SOUND_CHANNELS; i++) for (s32 i = 0; i < TIC_SOUND_CHANNELS; i++)
@ -1453,10 +1492,11 @@ static void drawModeTabs(Music* music)
{ {
SDL_Rect rect = { TIC80_WIDTH - Width * (Count - i), 0, Width, Height }; SDL_Rect rect = { TIC80_WIDTH - Width * (Count - i), 0, Width, Height };
bool over = false;
static const s32 Tabs[] = { MUSIC_PIANO_TAB, MUSIC_TRACKER_TAB }; static const s32 Tabs[] = { MUSIC_PIANO_TAB, MUSIC_TRACKER_TAB };
bool over = false;
if (checkMousePos(&rect)) if (checkMousePos(&rect))
{ {
setCursor(SDL_SYSTEM_CURSOR_HAND); setCursor(SDL_SYSTEM_CURSOR_HAND);
@ -1470,7 +1510,10 @@ static void drawModeTabs(Music* music)
} }
if (music->tab == Tabs[i]) if (music->tab == Tabs[i])
{
music->tic->api.rect(music->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_gray)); music->tic->api.rect(music->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_gray));
drawBitIcon(rect.x, rect.y + 1, Icons + i*Rows, tic_color_black);
}
drawBitIcon(rect.x, rect.y, Icons + i*Rows, music->tab == Tabs[i] ? (tic_color_white) : over ? (tic_color_dark_gray) : (tic_color_light_blue)); drawBitIcon(rect.x, rect.y, Icons + i*Rows, music->tab == Tabs[i] ? (tic_color_white) : over ? (tic_color_dark_gray) : (tic_color_light_blue));
} }
@ -1573,8 +1616,8 @@ static void drawTrackerLayout(Music* music)
music->tic->api.clear(music->tic, (tic_color_gray)); music->tic->api.clear(music->tic, (tic_color_gray));
drawTopPanel(music, 6, TOOLBAR_SIZE + 3); drawTopPanel(music, 7, TOOLBAR_SIZE + 4);
drawTracker(music, 6, 35); drawTracker(music, 7, 35);
} }
static void tick(Music* music) static void tick(Music* music)

View File

@ -781,6 +781,9 @@ void drawToolbar(tic_mem* tic, u8 color, bool bg)
if(mode == i) if(mode == i)
drawBitIcon(i * Size, 0, TabIcon, color); drawBitIcon(i * Size, 0, TabIcon, color);
if(mode == i)
drawBitIcon(i * Size, 1, Icons + i * BITS_IN_BYTE, tic_color_black);
drawBitIcon(i * Size, 0, Icons + i * BITS_IN_BYTE, mode == i ? (tic_color_white) : (over ? (tic_color_dark_gray) : (tic_color_light_blue))); drawBitIcon(i * Size, 0, Icons + i * BITS_IN_BYTE, mode == i ? (tic_color_white) : (over ? (tic_color_dark_gray) : (tic_color_light_blue)));
} }