fix: 自定义颜色色块与预设色块保持一致,拾色浮窗改为锚点定位并放行面板内点击

- 自定义颜色入口改为与预设色块完全一致的呈现:当前颜色不在预设中时,
  方格直接填充该自定义颜色(并自动选择浅色/深色加号图标以保证可读性),
  外框尺寸与选中样式与预设色块完全相同。
- 拾色浮窗改为以触发控件矩形为锚点定位:优先紧贴其下方展开,空间不足时改到上方,
  修复此前浮窗遮挡「加号」方格的问题。
- 拾色浮窗展开时点击面板内的其它控件(预设色、线宽、样式、透明度等)不再被吞掉,
  改为「先收起浮窗、再放行该次点击」,一次点击即可切换预设色;
  点击面板外或绘图区仍只收起浮窗。
This commit is contained in:
DeepSeek V4.1 Flash committed 2026-09-29 17:23:45 +08:00
1 parent 729494d1ec
commit 0f98dd9a85
4 files changed
+64 -31

No files matched your search

+5 -7
View File
@@ -41,11 +41,10 @@ namespace jdi
/**
* @brief 在指定位置打开拾色面板。
* @param [IN] bounds 宿主客户区矩形,用于把面板限制在窗口内。
* @param [IN] x 锚点横坐标(客户区坐标)。
* @param [IN] y 锚点纵坐标(客户区坐标)。
* @param [IN] anchor 触发控件矩形(客户区坐标),面板会紧贴其下方或上方展开。
* @param [IN] color 初始颜色(0xAARRGGBB,仅取 RGB 分量)。
*/
void Open(const gd::RectF& bounds, int x, int y, std::uint32_t color);
void Open(const gd::RectF& bounds, const gd::RectF& anchor, std::uint32_t color);
/**
* @brief 关闭拾色面板。
@@ -116,12 +115,11 @@ namespace jdi
private:
/**
* @brief 依据锚点与客户区计算面板矩形与内部控件矩形。
* @brief 依据锚点矩形与客户区计算面板矩形与内部控件矩形。
* @param [IN] bounds 宿主客户区矩形。
* @param [IN] x 锚点横坐标。
* @param [IN] y 锚点纵坐标。
* @param [IN] anchor 触发控件矩形。
*/
void BuildLayout(const gd::RectF& bounds, int x, int y);
void BuildLayout(const gd::RectF& bounds, const gd::RectF& anchor);
/**
* @brief 查询坐标命中的滑块下标。