fix(ui): draw mixer volume badges from the rounded art swatch
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
ac01d0f6b7
commit
5b2c8137eb
|
|
@ -1,4 +1,5 @@
|
|||
#include "includes.h"
|
||||
#include "mixer_knob_0902.h"
|
||||
extern const Touch_AreaTypeDef *pCurrentTouch_Area;
|
||||
static int8_t s_mixer_focus = -1;
|
||||
static int8_t s_mixer_grab = -1; /* 按下锁定的推子,松手前不换轨 */
|
||||
|
|
@ -54,39 +55,22 @@ void DrawAllFaders(void)
|
|||
drv_nvm_save_to_flash();
|
||||
}
|
||||
|
||||
/* 0902-06:圆钮定位半径 = 色条半宽;填充略大以盖住柱端抗锯齿白边(夹紧不画出柱外) */
|
||||
#define MIXER_KNOB_R 15
|
||||
#define MIXER_KNOB_FILL_R 16
|
||||
#define MIXER_TRACK_HALF_W 15
|
||||
/* 美工 0902-31 方圆色块 24x23;透明角贴在色条上,数字另画 */
|
||||
#define MIXER_KNOB_W MIXER_KNOB_ART_W
|
||||
#define MIXER_KNOB_H MIXER_KNOB_ART_H
|
||||
|
||||
/* 与柱端半圆同形的实心圆钮:顶/底档位与色条圆角完美贴合,无虚线白边 */
|
||||
static void DrawMixerKnob(uint16_t cx, uint16_t cy)
|
||||
{
|
||||
int16_t dy;
|
||||
int32_t r2 = (int32_t)MIXER_KNOB_FILL_R * (int32_t)MIXER_KNOB_FILL_R;
|
||||
for (dy = -(int16_t)MIXER_KNOB_R; dy <= (int16_t)MIXER_KNOB_R; dy++)
|
||||
{
|
||||
int32_t xx = r2 - (int32_t)dy * (int32_t)dy;
|
||||
int16_t dx = 0;
|
||||
int16_t half;
|
||||
if (xx < 0)
|
||||
continue;
|
||||
while ((int32_t)(dx + 1) * (dx + 1) <= xx)
|
||||
dx++;
|
||||
half = dx;
|
||||
if (half > (int16_t)MIXER_TRACK_HALF_W)
|
||||
half = (int16_t)MIXER_TRACK_HALF_W;
|
||||
LCD_FillByColor((uint16_t)(cx - half), (uint16_t)(cy + dy),
|
||||
(uint16_t)(cx + half + 1), (uint16_t)(cy + dy + 1),
|
||||
COLOR_GRAD_MID);
|
||||
}
|
||||
uint16_t x = (uint16_t)(cx - MIXER_KNOB_W / 2);
|
||||
uint16_t y = (uint16_t)(cy - MIXER_KNOB_H / 2);
|
||||
LCD_WR_PIC_Trans(x, y, MIXER_KNOB_W, MIXER_KNOB_H, gImage_MixerKnob_24x23, BLACK);
|
||||
}
|
||||
|
||||
static void DrawFaderSlider(Fader_t *f, uint16_t slider_y)
|
||||
{
|
||||
uint16_t cx = f->x + f->w / 2;
|
||||
uint16_t ly = f->y + f->h + 8;
|
||||
uint16_t cy = (uint16_t)(slider_y + MIXER_KNOB_R);
|
||||
uint16_t cy = (uint16_t)(slider_y + MIXER_KNOB_H / 2);
|
||||
char buf[8];
|
||||
DrawMixerKnob(cx, cy);
|
||||
sprintf(buf, "%d", f->val);
|
||||
|
|
@ -175,14 +159,15 @@ void UpdateFaderByTouch(int idx, uint16_t y)
|
|||
}
|
||||
|
||||
// ============================================================
|
||||
// 滑块顶边 Y:val0/10 时圆心落在色条底/顶半圆中心,两端对称贴合
|
||||
// 滑块顶边 Y:0/10 档方圆贴色条底/顶,不超出柱身
|
||||
// ============================================================
|
||||
static uint16_t CalcSliderY(Fader_t *f)
|
||||
{
|
||||
uint16_t top_cy = (uint16_t)(f->y + MIXER_KNOB_R);
|
||||
uint16_t bot_cy = (uint16_t)(f->y + f->h - 1 - MIXER_KNOB_R);
|
||||
uint16_t half = (uint16_t)(MIXER_KNOB_H / 2);
|
||||
uint16_t top_cy = (uint16_t)(f->y + half);
|
||||
uint16_t bot_cy = (uint16_t)(f->y + f->h - (MIXER_KNOB_H - half));
|
||||
uint16_t cy = (uint16_t)(bot_cy - ((uint32_t)(bot_cy - top_cy) * f->val) / 10);
|
||||
return (uint16_t)(cy - MIXER_KNOB_R);
|
||||
return (uint16_t)(cy - half);
|
||||
}
|
||||
|
||||
int CheckTouchFader(uint16_t x, uint16_t y)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,78 @@
|
|||
#ifndef MIXER_KNOB_0902_H
|
||||
#define MIXER_KNOB_0902_H
|
||||
/* Doc/UI/调音台色块.zip 0902-31 24x23 方圆,透明角。a<128 为 0x0000。 */
|
||||
#include <stdint.h>
|
||||
#define MIXER_KNOB_ART_W 24
|
||||
#define MIXER_KNOB_ART_H 23
|
||||
static const uint8_t gImage_MixerKnob_24x23[1104] = {
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x00,0x00,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,
|
||||
0x00,0x00,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,0x02,0x7A,
|
||||
0x02,0x7A,0x02,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
};
|
||||
#endif
|
||||
Loading…
Reference in New Issue