<p><a href="https://github.com/elextr" class="user-mention">@elextr</a></p>
<blockquote>
<p>The problem is the use of binary floating point fractions to represent whole numbers with differing resolutions (a GdkColor has 16 bits per component, <code>#RRGGBB</code> has only 8)</p>
</blockquote>
<p>Exactly. But GTK+ does this conversion as well — they too have a <a href="https://git.gnome.org/browse/gtk+/tree/gtk/gtkcolorsel.c?h=gtk-2-24&id=ca2e62da22d7a740800e577baeb67afa8b7f117a#n2150"><code>scale_round</code></a> function, and they use the formula that is commented out in Geany.</p>
<blockquote>
<p>the <code>utils_scale_round</code> was probably changed because the first equation does not handle out of range values.</p>
</blockquote>
<p>The first equation is supposed to operate on doubles in the range of 0..1 (GDK’s internal representation, same as in <code>GdkRGBA</code> in GTK+3). We can force <code>color->red</code> to 0..1 with <code>color->red / 65535.0</code>.</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/geany/geany/issues/1527#issuecomment-312528823">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABDrJ-yvsiznJnqThrVPbSJdQj74bJ23ks5sKD_CgaJpZM4OLpgI">mute the thread</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/ABDrJxPb0WO-i8fZo5I421FUXZ9ebKv2ks5sKD_CgaJpZM4OLpgI.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/geany/geany/issues/1527#issuecomment-312528823"></link>
  <meta itemprop="name" content="View Issue"></meta>
</div>
<meta itemprop="description" content="View this Issue on GitHub"></meta>
</div>

<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/geany/geany","title":"geany/geany","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/geany/geany"}},"updates":{"snippets":[{"icon":"PERSON","message":"@vfaronov in #1527: @elextr \r\n\r\n\u003e The problem is the use of binary floating point fractions to represent whole numbers with differing resolutions (a GdkColor has 16 bits per component, `#RRGGBB` has only 8)\r\n\r\nExactly. But GTK+ does this conversion as well — they too have a [`scale_round`](https://git.gnome.org/browse/gtk+/tree/gtk/gtkcolorsel.c?h=gtk-2-24\u0026id=ca2e62da22d7a740800e577baeb67afa8b7f117a#n2150) function, and they use the formula that is commented out in Geany.\r\n\r\n\u003e  the `utils_scale_round` was probably changed because the first equation does not handle out of range values.\r\n\r\nThe first equation is supposed to operate on doubles in the range of 0..1 (GDK’s internal representation, same as in `GdkRGBA` in GTK+3). We can force `color-\u003ered` to 0..1 with `color-\u003ered / 65535.0`."}],"action":{"name":"View Issue","url":"https://github.com/geany/geany/issues/1527#issuecomment-312528823"}}}</script>