feat: Full UI internationalization, pool hashrate stats, and layout caching
- Replace all hardcoded English strings with TR() translation keys across every tab, dialog, and component (~20 UI files) - Expand all 8 language files (de, es, fr, ja, ko, pt, ru, zh) with complete translations (~37k lines added) - Improve i18n loader with exe-relative path fallback and English base fallback for missing keys - Add pool-side hashrate polling via pool stats API in xmrig_manager - Introduce Layout::beginFrame() per-frame caching and refresh balance layout config only on schema generation change - Offload daemon output parsing to worker thread - Add CJK subset fallback font for Chinese/Japanese/Korean glyphs
This commit is contained in:
@@ -572,12 +572,12 @@ void AcrylicMaterial::drawRect(ImDrawList* drawList, const ImVec2& pMin, const I
|
||||
float u1 = localX1 / viewportWidth_;
|
||||
float v1 = 1.0f - localY1 / viewportHeight_; // V at bottom-right (low)
|
||||
|
||||
// Draw the blurred background. The glass opacity comes from
|
||||
// fallbackColor.w — blur always renders at full strength.
|
||||
// UI opacity is handled separately by card surface alpha.
|
||||
// Draw the blurred background. Scale by both the glass preset
|
||||
// opacity (fallbackColor.w) AND the user's UI opacity slider so
|
||||
// that lowering card opacity lets the sharp background through.
|
||||
ImTextureID blurTex = getBlurredTexture();
|
||||
uint8_t glassAlpha = static_cast<uint8_t>(
|
||||
std::min(255.0f, std::max(0.0f, params.fallbackColor.w * 255.0f)));
|
||||
std::min(255.0f, std::max(0.0f, params.fallbackColor.w * settings_.uiOpacity * 255.0f)));
|
||||
|
||||
if (blurTex) {
|
||||
drawList->AddImageRounded(
|
||||
@@ -774,11 +774,11 @@ AcrylicFallback AcrylicMaterial::detectFallback() const
|
||||
void AcrylicMaterial::drawTintedRect(ImDrawList* drawList, const ImVec2& pMin, const ImVec2& pMax,
|
||||
const AcrylicParams& params, float rounding)
|
||||
{
|
||||
// Draw semi-transparent tint without blur
|
||||
// This is the "Tinted Only" fallback mode (not affected by UI opacity)
|
||||
// Draw semi-transparent tint without blur — scale by UI opacity
|
||||
// so the tinted fallback also respects the card transparency slider.
|
||||
ImU32 tintCol = ImGui::ColorConvertFloat4ToU32(
|
||||
ImVec4(params.tintColor.x, params.tintColor.y, params.tintColor.z,
|
||||
params.tintColor.w * params.tintOpacity * 0.9f)
|
||||
params.tintColor.w * params.tintOpacity * 0.9f * settings_.uiOpacity)
|
||||
);
|
||||
drawList->AddRectFilled(pMin, pMax, tintCol, rounding);
|
||||
|
||||
@@ -1528,11 +1528,11 @@ void AcrylicMaterial::drawRect(ImDrawList* drawList, const ImVec2& pMin, const I
|
||||
(void*)blurTex, u0, v0, u1, v1);
|
||||
}
|
||||
|
||||
// Draw the blurred background. Glass opacity from fallbackColor
|
||||
// alpha. Blur always renders at full strength; UI opacity is
|
||||
// handled separately by card surface alpha.
|
||||
// Draw the blurred background. Scale by both the glass preset
|
||||
// opacity (fallbackColor.w) AND the user's UI opacity slider so
|
||||
// that lowering card opacity lets the sharp background through.
|
||||
uint8_t glassAlpha = (uint8_t)std::min(255.f,
|
||||
std::max(0.f, params.fallbackColor.w * 255.f));
|
||||
std::max(0.f, params.fallbackColor.w * settings_.uiOpacity * 255.f));
|
||||
|
||||
if (blurTex) {
|
||||
drawList->AddImageRounded(
|
||||
@@ -1559,7 +1559,7 @@ void AcrylicMaterial::drawTintedRect(ImDrawList* drawList, const ImVec2& pMin, c
|
||||
{
|
||||
ImU32 tintCol = ImGui::ColorConvertFloat4ToU32(
|
||||
ImVec4(params.tintColor.x, params.tintColor.y, params.tintColor.z,
|
||||
params.tintColor.w * params.tintOpacity * 0.9f));
|
||||
params.tintColor.w * params.tintOpacity * 0.9f * settings_.uiOpacity));
|
||||
drawList->AddRectFilled(pMin, pMax, tintCol, rounding);
|
||||
|
||||
// Noise grain overlay — single draw call via pre-tiled texture
|
||||
|
||||
@@ -105,6 +105,12 @@ public:
|
||||
bool hasSandstorm() const { return enabled_ && sandstorm_.enabled; }
|
||||
bool hasViewportOverlay() const { return enabled_ && (viewport_overlay_.colorWashEnabled || viewport_overlay_.vignetteEnabled); }
|
||||
|
||||
/// True when any per-panel visual effect is active (rainbow, shimmer, specular, edge, ember, gradient)
|
||||
bool hasAnyPanelEffect() const {
|
||||
return hasRainbowBorder() || hasShimmer() || hasSpecularGlare()
|
||||
|| hasEdgeTrace() || hasEmberRise() || hasGradientBorder();
|
||||
}
|
||||
|
||||
/// True when any time-dependent effect is active and needs continuous redraws
|
||||
bool hasActiveAnimation() const {
|
||||
if (!enabled_) return false;
|
||||
|
||||
Reference in New Issue
Block a user