Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(progress): last gradient color off by one #338

Merged
merged 2 commits into from
Mar 24, 2023

Conversation

residualmind
Copy link
Contributor

@residualmind residualmind commented Feb 26, 2023

When rendering a progress bar with a gradient, the calculation of the ratio (p) used to determine the color at a given point is off by one. This results in the very last color rendered in a gradient not being the same as the specified second color of the gradient.

This PR adds a test to show this behavior and a fix for the off-by-one calculation.

Fixes #342

The progress bar component does not render the gradient 100% correctly:
The very last color that appears in the rendered progress bar should be
the second color defined in the gradient but it is not, due to an
off-by-one one error.

This test case shows this. The next commit will contain the fix.
Due to an off-by-one error, the very last rendered color+char was never
exactly the second specified gradient color. The fixed code looks less
elegant unfortunately, but now the last color is the desired one.
@residualmind residualmind changed the title fix(progress colors): last color off-by-one fix(progress gradient colors): last color off by one Feb 26, 2023
@residualmind residualmind changed the title fix(progress gradient colors): last color off by one fix(progress): last gradient color off by one Feb 27, 2023
@bashbunni
Copy link
Member

This looks great! Thank you so much for the PR.

@bashbunni bashbunni merged commit 876d5af into charmbracelet:master Mar 24, 2023
@residualmind
Copy link
Contributor Author

This looks great! Thank you so much for the PR.

sorry for the typo

@muesli muesli added the bug Something isn't working label Mar 25, 2023
renovate bot referenced this pull request in sheldonhull/az-pr Jun 5, 2023
… to v0.16.1 (#18)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[github.com/charmbracelet/bubbles](https://togithub.com/charmbracelet/bubbles)
| require | minor | `v0.15.0` -> `v0.16.1` |

copilot:all

---

### Release Notes

<details>
<summary>charmbracelet/bubbles</summary>

###
[`v0.16.1`](https://togithub.com/charmbracelet/bubbles/releases/tag/v0.16.1)

[Compare
Source](https://togithub.com/charmbracelet/bubbles/compare/v0.16.0...v0.16.1)

### File Picker Bubble  📁 🫧

This release introduces a brand new `filepicker` bubble, new features,
and a tonne of bugfixes.
Let us know what you think, ask questions, or just say hello in our
[Discord](https://charm.sh/chat).

<img src="https://vhs.charm.sh/vhs-yET2HNiJNEbyqaVfYuLnY.gif"
width="600" alt="File picker example">

For a quick start on how to use this bubble, take a look at the [Example
code](https://togithub.com/charmbracelet/bubbletea/tree/master/examples/file-picker/main.go).

##### Getting Started

Create a new file picker and add it to your Bubble Tea model.

```go
picker := filepicker.New()
picker.CurrentDirectory, err = os.UserHomeDir()
if err != nil {
    // ...
}

m := model{
    picker: picker,
    // ...
}
```

Initialize the file picker in your `Model`'s `Init` function.

```go
func (m model) Init() tea.Cmd {
    return tea.Batch(
        m.picker.Init(),
        // ...
    )
}
```

Update the filepicker as any other bubble in the `Update` function.
After the `picker.Update`, use the `DidSelectFile(msg tea.Msg)` function
to perform an action when the user selects a valid file.
You may allow only certain file types to be selected with the
`AllowedTypes` property and allow directories to be selected with the
`DirAllowed` property. To see the currently selected file/directory use
the `Path` property.

```go
var cmd tea.Cmd
m.picker, cmd = m.picker.Update(msg)

// Did the user select a file?
if didSelect, path := m.picker.DidSelectFile(msg); didSelect {
	// Get the path of the selected file.
	return m, tea.Println("You selected: " + selectedPath)
}

return m, cmd
```

For the full example on how to use this bubble, take a look at the
[Example
code](https://togithub.com/charmbracelet/bubbletea/tree/master/examples/file-picker/main.go).

#### New

- Filepicker: new bubble by
[@&#8203;maaslalani](https://togithub.com/maaslalani) in
[https://github.com/charmbracelet/bubbles/pull/343](https://togithub.com/charmbracelet/bubbles/pull/343)
- Textarea: max width/height configurable by
[@&#8203;knz](https://togithub.com/knz) in
[https://github.com/charmbracelet/bubbles/pull/370](https://togithub.com/charmbracelet/bubbles/pull/370)
- Spinner: periods of ellipsis by
[@&#8203;meowgorithm](https://togithub.com/meowgorithm) in
[https://github.com/charmbracelet/bubbles/pull/375](https://togithub.com/charmbracelet/bubbles/pull/375)
- List: infinite scrolling by
[@&#8203;jon4hz](https://togithub.com/jon4hz) in
[https://github.com/charmbracelet/bubbles/pull/316](https://togithub.com/charmbracelet/bubbles/pull/316)

#### Fixed

- app would crash if `deleteWordRight` was called at the end of line by
[@&#8203;infastin](https://togithub.com/infastin) in
[https://github.com/charmbracelet/bubbles/pull/313](https://togithub.com/charmbracelet/bubbles/pull/313)
- support pastes that end with a newline character by
[@&#8203;knz](https://togithub.com/knz) in
[https://github.com/charmbracelet/bubbles/pull/314](https://togithub.com/charmbracelet/bubbles/pull/314)
- data corruption after multi-line input by
[@&#8203;knz](https://togithub.com/knz) in
[https://github.com/charmbracelet/bubbles/pull/318](https://togithub.com/charmbracelet/bubbles/pull/318)
- Remove unused `BackgroundStyle` in TextInput by
[@&#8203;savannahostrowski](https://togithub.com/savannahostrowski) in
[https://github.com/charmbracelet/bubbles/pull/341](https://togithub.com/charmbracelet/bubbles/pull/341)
- add bounds checking to the `SelectedRow` by
[@&#8203;MikaelFangel](https://togithub.com/MikaelFangel) in
[https://github.com/charmbracelet/bubbles/pull/351](https://togithub.com/charmbracelet/bubbles/pull/351)
- fix(progress): last gradient color off by one by
[@&#8203;residualmind](https://togithub.com/residualmind) in
[https://github.com/charmbracelet/bubbles/pull/338](https://togithub.com/charmbracelet/bubbles/pull/338)
- deprecate `CursorStyle` in favour of `Cursor.Style` by
[@&#8203;maaslalani](https://togithub.com/maaslalani) in
[https://github.com/charmbracelet/bubbles/pull/365](https://togithub.com/charmbracelet/bubbles/pull/365)
- Reset blink only when `CursorBlink` by
[@&#8203;remiposo](https://togithub.com/remiposo) in
[https://github.com/charmbracelet/bubbles/pull/378](https://togithub.com/charmbracelet/bubbles/pull/378)

#### New Contributors

- [@&#8203;infastin](https://togithub.com/infastin) made their first
contribution in
[https://github.com/charmbracelet/bubbles/pull/313](https://togithub.com/charmbracelet/bubbles/pull/313)
- [@&#8203;gzipChrist](https://togithub.com/gzipChrist) made their first
contribution in
[https://github.com/charmbracelet/bubbles/pull/332](https://togithub.com/charmbracelet/bubbles/pull/332)
- [@&#8203;savannahostrowski](https://togithub.com/savannahostrowski)
made their first contribution in
[https://github.com/charmbracelet/bubbles/pull/341](https://togithub.com/charmbracelet/bubbles/pull/341)
- [@&#8203;MikaelFangel](https://togithub.com/MikaelFangel) made their
first contribution in
[https://github.com/charmbracelet/bubbles/pull/351](https://togithub.com/charmbracelet/bubbles/pull/351)
- [@&#8203;stefanbildl](https://togithub.com/stefanbildl) made their
first contribution in
[https://github.com/charmbracelet/bubbles/pull/339](https://togithub.com/charmbracelet/bubbles/pull/339)
- [@&#8203;residualmind](https://togithub.com/residualmind) made their
first contribution in
[https://github.com/charmbracelet/bubbles/pull/338](https://togithub.com/charmbracelet/bubbles/pull/338)
- [@&#8203;bashbunni](https://togithub.com/bashbunni) made their first
contribution in
[https://github.com/charmbracelet/bubbles/pull/359](https://togithub.com/charmbracelet/bubbles/pull/359)
- [@&#8203;squrki](https://togithub.com/squrki) made their first
contribution in
[https://github.com/charmbracelet/bubbles/pull/373](https://togithub.com/charmbracelet/bubbles/pull/373)
- [@&#8203;remiposo](https://togithub.com/remiposo) made their first
contribution in
[https://github.com/charmbracelet/bubbles/pull/378](https://togithub.com/charmbracelet/bubbles/pull/378)

**Full Changelog**:
charmbracelet/bubbles@v0.15.0...v0.16.0

***

<a href="https://charm.sh/"><img alt="The Charm logo"
src="https://stuff.charm.sh/charm-badge.jpg?1" width="400"></a>

Thoughts? Questions? We love hearing from you. Feel free to reach out on
[Twitter](https://twitter.com/charmcli), [The
Fediverse](https://mastodon.technology/@&#8203;charm), or on
[Discord](https://charm.sh/chat).

###
[`v0.16.0`](https://togithub.com/charmbracelet/bubbles/compare/v0.15.0...v0.16.0)

[Compare
Source](https://togithub.com/charmbracelet/bubbles/compare/v0.15.0...v0.16.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/sheldonhull/az-pr).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjExMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
ReallyLiri pushed a commit to ReallyLiri/bubbles that referenced this pull request Jun 13, 2024
* fix(progress): add failing test

The progress bar component does not render the gradient 100% correctly:
The very last color that appears in the rendered progress bar should be
the second color defined in the gradient but it is not, due to an
off-by-one one error.

This test case shows this. The next commit will contain the fix.

* fix(progress): use the second gradient color as the last char of the bar

Due to an off-by-one error, the very last rendered color+char was never
exactly the second specified gradient color. The fixed code looks less
elegant unfortunately, but now the last color is the desired one.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

progress: last color of bar with gradient isn't the gradient's second color (off by one)
3 participants