Model darker matte + re-enable status screen node; wider panels/text; download yields SMB lock (responsive browser); drop post-completion status line

This commit is contained in:
Pixelplanet committed 2026-10-15 14:44:15 +02:00
1 parent c9dc24293f
commit 60b23fd8f6
4 files changed
+19 -17

No files matched your search

+2 -2
View File
@@ -28,7 +28,7 @@ void main() {
// with plain diffuse only (no specular/rim) so there is no shimmer, while the
// printed button labels still read.
float diff = max(dot(N, L), 0.0);
float amb = 0.18 + 0.12 * (N.y * 0.5 + 0.5);
outColor = vec4(tex.rgb * (amb + 0.75 * diff) * pc.color.rgb,
float amb = 0.08 + 0.07 * (N.y * 0.5 + 0.5);
outColor = vec4(tex.rgb * (amb + 0.55 * diff) * pc.color.rgb,
tex.a * pc.color.a);
}
+6 -5
View File
@@ -533,9 +533,10 @@ int App::run() {
downloadToast_ = nowT + std::chrono::seconds(10);
}
const bool dlRecent = browser_.downloadActive() || nowT < downloadToast_;
const std::string dlLine =
browser_.downloadActive() ? downloadToastText_ : browser_.status();
renderer_.setDownloadStatus(!browser_.isOpen() && dlRecent, dlLine);
// Head-locked line only while a download is actually running; the
// completion is shown by the Downloads window / green button badge.
renderer_.setDownloadStatus(!browser_.isOpen() && browser_.downloadActive(),
browser_.downloadText());
renderer_.setDownloadsBadge(browser_.downloadActive(),
!browser_.downloadActive() &&
browser_.hasDownloads() && dlRecent);
@@ -578,10 +579,10 @@ int App::run() {
rows.reserve(browser_.entries().size());
for (const auto& e : browser_.entries()) {
std::string name = e.label;
if (name.size() > 32) name = name.substr(0, 31) + "~";
if (name.size() > 44) name = name.substr(0, 43) + "~";
std::string row = name;
if (!e.detail.empty()) {
while (row.size() < 36) row += ' ';
while (row.size() < 50) row += ' ';
row += e.detail;
}
rows.push_back(std::move(row));
+7 -8
View File
@@ -50,7 +50,7 @@ struct TextPush {
// Shared UI panel layout (panel-local metres), used by both the browser render
// and the pointer raycast so the cursor and highlight line up exactly.
constexpr float kPanelW = 0.7f;
constexpr float kPanelW = 1.0f;
constexpr float kPanelTop = 0.8f;
constexpr float kRowH = 0.09f;
constexpr int kMaxRows = 13;
@@ -1738,11 +1738,11 @@ void VulkanRenderer::renderView(uint32_t viewIndex, uint32_t imageIndex,
for (int i = first; i < lastRow; ++i) {
const float ry = panelTop - 0.2f - (i - first) * rowH;
drawString(-panelW + 0.05f, ry, sc, white2,
browserRows_[static_cast<std::size_t>(i)].substr(0, 46));
browserRows_[static_cast<std::size_t>(i)].substr(0, 62));
}
if (!browserStatus_.empty()) {
drawString(-panelW + 0.04f, -panelTop + 0.05f, sc * 0.85f, dim,
browserStatus_.substr(0, 46));
browserStatus_.substr(0, 70));
}
}
@@ -1822,11 +1822,11 @@ void VulkanRenderer::renderView(uint32_t viewIndex, uint32_t imageIndex,
(i < static_cast<int>(settingsEnabled_.size()) &&
settingsEnabled_[i] != 0);
drawString(-panelW + 0.05f, ry, sc, en ? white2 : disabledCol,
settingsRows_[static_cast<std::size_t>(i)].substr(0, 46));
settingsRows_[static_cast<std::size_t>(i)].substr(0, 62));
}
if (!settingsStatus_.empty()) {
drawString(-panelW + 0.04f, -panelTop + 0.05f, sc * 0.82f, dim,
settingsStatus_.substr(0, 52));
settingsStatus_.substr(0, 70));
}
}
@@ -1879,11 +1879,11 @@ void VulkanRenderer::renderView(uint32_t viewIndex, uint32_t imageIndex,
downloadsTitle_.substr(0, 42));
for (std::size_t i = 0; i < downloadsRows_.size(); ++i) {
const float ry = panelTop - 0.2f - static_cast<float>(i) * rowH;
drawString(-panelW + 0.05f, ry, sc, white2, downloadsRows_[i].substr(0, 46));
drawString(-panelW + 0.05f, ry, sc, white2, downloadsRows_[i].substr(0, 62));
}
if (!downloadsStatus_.empty()) {
drawString(-panelW + 0.04f, -panelTop + 0.05f, sc * 0.82f, dim,
downloadsStatus_.substr(0, 52));
downloadsStatus_.substr(0, 70));
}
}
@@ -1956,7 +1956,6 @@ void VulkanRenderer::renderView(uint32_t viewIndex, uint32_t imageIndex,
!modelNodeStates_.empty() && !modelNodeStates_[0].name.empty();
for (std::size_t si = 0; si < modelSubmeshes_.size(); ++si) {
const ModelSubmesh& sm = modelSubmeshes_[si];
if (sm.nodeName == "status") continue; // full-atlas screen node
const float* np = identityPos;
const float* nq = identityQuat;
if (haveNames) {
+4 -2
View File
@@ -443,7 +443,7 @@ void Browser::startDownloadFile(const std::string& uri, const std::string& local
dlActive_.store(false);
return;
}
std::vector<char> buf(1 << 20);
std::vector<char> buf(1 << 18); // small chunks so the SMB lock is freed
ssize_t n = 0;
long long got = 0;
for (;;) {
@@ -455,6 +455,7 @@ void Browser::startDownloadFile(const std::string& uri, const std::string& local
std::fwrite(buf.data(), 1, static_cast<std::size_t>(n), out);
got += n;
dlBytes_.store(got);
std::this_thread::yield(); // let the browser's scan take the lock
}
std::fclose(out);
{
@@ -518,7 +519,7 @@ void Browser::startDownloadFolder(const std::string& uri,
ok = false;
return;
}
std::vector<char> buf(1 << 20);
std::vector<char> buf(1 << 18); // small chunks: yield the SMB lock
for (;;) {
ssize_t n = 0;
{
@@ -529,6 +530,7 @@ void Browser::startDownloadFolder(const std::string& uri,
std::fwrite(buf.data(), 1, static_cast<std::size_t>(n), out);
got += n;
dlBytes_.store(got);
std::this_thread::yield();
}
std::fclose(out);
{