Document member badge painting and ignored state flags

This commit is contained in:
evgeny committed 2026-10-27 03:43:31 +01:00
1 parent efe879bfd9
commit 1820128f5b
1 file changed
+14 -8
+14 -8
View File
@@ -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 <QColor>
#include <stdint.h>
#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);