#ifndef __UI_DEBUG_BOUNDS_HPP__ #define __UI_DEBUG_BOUNDS_HPP__ #include #include #include #include #include "Theme.hpp" namespace jdi { /** * @brief 布局边界描边颜色(按层级取色,风格参考 Android 的「Show layout bounds」)。 * * 层级只用于**区分归属**,不代表重要性:层级越深说明越靠近叶子控件。 * * @param [IN] depth 层级(0 = 顶层组件区域,≥1 = 内部控件)。 * @return ARGB 颜色(不透明)。 */ std::uint32_t UiDebugBoundsColor(int depth); /** * @brief 绘制一个矩形的布局边界。 * * 视觉规则(Android「Show layout bounds」风): * * 层级 0(顶层组件区域):2 设备像素描边 + 青蓝; * * 层级 1(控件节点):1 设备像素描边 + 品红; * * 层级 ≥2(内部子块):1 设备像素描边 + 琥珀 / 绿。 * * **只描边、不填充** —— 填充会在几十个嵌套矩形上层层叠加,把内容糊成一片。 * * ⚠️ **描边宽度按设备像素固定**(不乘 `scale`):这类调试线一旦随 DPI 变粗就会盖住内容。 * ⚠️ 描绘边时**临时切到 `PixelOffsetModeNone` + 无抗锯齿**并把矩形对齐到整像素, * 否则 1px 线会被抗锯齿摊成 2px 灰边(难以判断真实边界)。 * * @param [IN,OUT] g 绘图上下文。 * @param [IN] rect 目标矩形(客户区坐标)。 * @param [IN] depth 层级(决定颜色与粗细,见上)。 * @param [IN] scale DPI 缩放系数(只用于对齐,不用于线宽)。 */ void UiDebugPaintBounds(gd::Graphics& g, const gd::RectF& rect, int depth, float scale); } // namespace jdi #endif // __UI_DEBUG_BOUNDS_HPP__