diff --git a/tools/chatgui/src/flagpainter.h b/tools/chatgui/src/flagpainter.h index 550cf395..e516cd26 100644 --- a/tools/chatgui/src/flagpainter.h +++ b/tools/chatgui/src/flagpainter.h @@ -1,4 +1,7 @@ -/* Отрисовка флагов участника и общих значков storage/рации. */ +/* Чистая отрисовка значков участника/storage/рации, без владения painter/paint device. + * p — ненулевой активный QPainter; x/y — верхний левый угол, sz>0 — размер в координатах painter. + * Каждый рисунок сохраняет/восстанавливает состояние painter, включая transform/pen/brush. + * Состояние участников не меняется; синхронизацию совместного paint device обеспечивает вызывающий. */ #ifndef FLAGPAINTER_H #define FLAGPAINTER_H @@ -6,17 +9,20 @@ #include #include -#define MEMBER_FLAG_SUPERNODE 0x01 -#define MEMBER_FLAG_ADMIN 0x02 -#define MEMBER_FLAG_MODER 0x04 -#define MEMBER_FLAG_DELETED 0x08 -#define MEMBER_FLAG_RADIO 0x10 +// Значения совпадают с CHAT_MEMBER_FLAG_* (src/chat/chat_member.h). +#define MEMBER_FLAG_SUPERNODE 0x01 // молния +#define MEMBER_FLAG_ADMIN 0x02 // звезда +#define MEMBER_FLAG_MODER 0x04 // щит +#define MEMBER_FLAG_DELETED 0x08 // draw игнорирует; делегат отдельно зачёркивает имя +#define MEMBER_FLAG_RADIO 0x10 // draw игнорирует; делегат отдельно выбирает цвет рации class FlagPainter { public: + // SUPERNODE -> ADMIN -> MODER, только установленные биты, с промежутком 2 между квадратами sz×sz. + // Общая ширина при n>0: n*sz+(n-1)*2; flags без этих битов не рисует ничего. static void draw(QPainter* p, uint8_t flags, int x, int y, int sz); - static void drawStorage(QPainter* p, int x, int y, int sz); - static void drawRadio(QPainter* p, int x, int y, int sz, const QColor& color); + static void drawStorage(QPainter* p, int x, int y, int sz); // серый значок диска в квадрате sz×sz + static void drawRadio(QPainter* p, int x, int y, int sz, const QColor& color); // контур рации заданного цвета, без заливки private: static void drawLightning(QPainter* p, int x, int y, int sz);