| Age | Commit message (Collapse) | Author |
|
|
|
For each of gabbro, emery, and basalt:
- presets: fast duration selection screen
- menu: main menu with running fast (Stop/Cancel visible)
- history: completed fasts log with streak counter
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Countdown timer screenshots for the three primary color platforms:
- gabbro (260×260 round, Pebble Round 2)
- emery (200×228 rect, Pebble Time 2)
- basalt (144×168 rect, Pebble Time)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Four representative screenshots (Pebble Round 2 menu, countdown, history;
Pebble Time countdown) showing v1.0.0 UI. Also updated the workflow
command list to reflect gabbro as the primary emulator target.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
The MenuLayer section header was inconsistent with every other screen
which uses a dedicated title TextLayer. Replace it with a fixed
GOTHIC_24_BOLD title ("HISTORY N S:cur/max") above the menu, matching
the style of the stats, settings, and other windows. The section header
height is now 0 and its draw callback is a no-op.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Timer window now uses three distinct background states:
- Idle (no fast running): mint green
- Countdown (fast running, goal not reached): vivid cerulean blue with white text
- Goal hit: Islamic green with white text
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
gabbro is now the primary dev target. Adds -basalt variants for all
emulator commands so the old rectangular display is still reachable:
just dev-basalt, just debug-dev-basalt
just logs-basalt, just screenshot-basalt
just reset-flash-basalt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Add a content_rect() helper that computes a safe inset origin and width
for the current display shape:
- Round platforms (chalk 180px, gabbro 260px): inset = display_width/6
(~30px on chalk, ~43px on gabbro) keeps all text within the circle.
- Rectangular platforms: inset = 0, no change in behavior.
Apply the inset to every window_load function:
- SimpleMenuLayer/MenuLayer windows (menu, presets, history): use
inset bounds so items are never clipped by the circular frame.
- Menu windows use GColorWhite background on round so the area outside
the inset menu rectangle blends seamlessly with the menu cells.
- All text-layer windows (timer, goal, edit-running, history-edit,
stats, settings, detail): offset all GRect positions by (ox, oy) and
use content width cw instead of bounds.size.w.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
When a fast was just started, DOWN appeared to do nothing because
format_duration_hours_minutes rounds to minutes — both 8s and 0s
display as "0h 00m". Now the edit window shows the exact seconds
(e.g. "Elapsed 8s") for sub-minute elapsed times, giving clear
feedback when UP/DOWN adjustments change the value.
Also adds 'just reset-flash' recipe to recover from SPI flash
corruption that causes the emulator to hang on the boot screen.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
pebble install races against the emulator boot animation when no
emulator is running, leaving the boot screen up with no app. Killing
any stale instance first gives install a clean start.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
debug_refresh_menu() set all SimpleMenuItem.callback fields to NULL.
debug_window_load() then set them to debug_menu_select_callback in a
separate loop — but that loop ran *before* the debug_refresh_menu()
call that immediately cleared them again. debug_window_appear also
calls debug_refresh_menu(), so every re-focus wiped the callbacks.
Fix: move the callback assignment into debug_refresh_menu() itself
(adding a forward declaration so the function is in scope), and remove
the now-redundant loop from debug_window_load().
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Stage names like "DEEP AUTOPHAGY" combined with the "[DEV]" suffix
exceeded the 144-px stage layer width and were silently truncated.
Move the indicator to the title text as a compact '*' suffix
(e.g. "COUNTDOWN*", "GOAL REACHED*", "NO FAST RUNNING*") where
the base strings are short enough to always leave room for one char.
The stage layer now always shows just "Stage: <name>".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Two display bugs fixed:
1. Timer font: BITHAM_34_MEDIUM_NUMBERS overflows the 144-px display when
all digits are wide zeros (e.g. "00:00:00"). Switch the timer layer to
GOTHIC_28_BOLD once at creation — it fits both the 8-char "HH:MM:SS"
countdown and the 9-char "-HH:MM:SS" overtime without truncation, so the
per-refresh font swap is no longer needed.
2. Goal colour: theme_goal_background_color returned GColorOxfordBlue (dark
navy) making the GOAL HIT overlay and GOAL REACHED timer state hard to
distinguish from a plain dark screen. Changed to GColorIslamicGreen so
both the overlay window and the post-goal timer background are vivid green,
clearly signalling goal completion.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Pebble OS intercepts BACK at the firmware level before long-click
handlers can fire, making window_long_click_subscribe(BUTTON_ID_BACK)
unreliable. Move the 700 ms delete gesture to DOWN, which has no
OS-level conflict. Update hint text accordingly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Adds a new "Resume Last Fast" item at index 1 in the main menu that
restores the most-recently completed history entry as the running fast
(undo accidental stop). Subtitle shows the last fast duration, or
"No previous fast" when unavailable or a fast is already running.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- Goal window auto-continues the fast; BACK/DOWN dismisses, SELECT stops
- 10s dev preset added as last menu item (fires alarm after 10 s)
- Switch to GOTHIC_28_BOLD for negative overtime to prevent truncation
- Rewrite streak computation with UTC day integers to fix stack overflow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Calling snprintf(buf, n, "%s", buf) is undefined behaviour; Pebble's ARM
libc zeroes the buffer, making every placeholder window render blank.
Replace the set_placeholder_content call in detail_window_load with direct
text_layer_set_text calls since the static buffers are already populated by
show_placeholder_window before the window is pushed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Adds history_delete_entry() in fastforge_core.c which removes an entry at
a given index by shifting the tail with memmove, zeroing the vacated slot,
recomputing streaks, and persisting. Wires a long-press BACK (700ms) handler
in the history edit window that calls it. Updates the hint text to inform
the user. Fixed hint text buffer from [40] to [48] to fit the full string.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Adds fast_cancel() in fastforge_core.c which clears the running fast and
saves state without appending to history. Wires a new "Cancel Current Fast"
main menu item (index 3) that calls it, showing a confirmation placeholder.
Updates sync_main_menu_state() to reflect cancel availability dynamically.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Adds an About entry at the bottom of the main menu. Selecting it shows
a detail window with the author (Paul Buetow) and source code location
(codeberg.org/snonux/fastforge). Reuses the existing detail window
infrastructure via show_placeholder_window — no new window needed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Deleted all science-related code: window, text layers, buffers, callbacks,
click handlers, window load/unload/appear functions, menu item, and enum entry.
Renumbered main menu enum (8 items → 7). Updated AGENTS.md and PLAN.md to
reflect the removal.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|