| 277 | } |
| 278 | |
| 279 | void drawLayer(const DrawArgs& args, int layer) override |
| 280 | { |
| 281 | if (layer == 1) |
| 282 | { |
| 283 | nvgFontSize(args.vg, 17); |
| 284 | nvgFillColor(args.vg, nvgRGBf(0.76f, 0.11f, 0.22f)); |
| 285 | |
| 286 | char timeString1[24]; |
| 287 | char timeString2[24]; |
| 288 | |
| 289 | std::shared_ptr<Font> monoFont = APP->window->loadFont(monoFontPath); |
| 290 | |
| 291 | if (module != nullptr && monoFont != nullptr) |
| 292 | { |
| 293 | nvgFontFaceId(args.vg, monoFont->handle); |
| 294 | |
| 295 | const uint32_t seconds = module->timeInfo.seconds; |
| 296 | std::snprintf(timeString1, sizeof(timeString1), " %02d:%02d:%02d", |
| 297 | (seconds / 3600) % 100, |
| 298 | (seconds / 60) % 60, |
| 299 | seconds % 60); |
| 300 | std::snprintf(timeString2, sizeof(timeString2), "%03d:%02d:%04d", |
| 301 | module->timeInfo.bar % 1000, |
| 302 | module->timeInfo.beat % 100, |
| 303 | static_cast<int>(module->timeInfo.tick + 0.5)); |
| 304 | } |
| 305 | else |
| 306 | { |
| 307 | std::strcpy(timeString1, " 00:00:00"); |
| 308 | std::strcpy(timeString2, "001:01:0000"); |
| 309 | } |
| 310 | |
| 311 | nvgText(args.vg, startX + 3.5f, startY_top + 15.0f, timeString1, nullptr); |
| 312 | nvgText(args.vg, startX + 3.5f, startY_top + 33.0f, timeString2, nullptr); |
| 313 | } |
| 314 | |
| 315 | ModuleWidget::drawLayer(args, layer); |
| 316 | } |
| 317 | |
| 318 | void appendContextMenu(Menu* menu) override { |
| 319 | struct BarDivisionItem : MenuItem { |
nothing calls this directly
no test coverage detected