[california/wip/725768-colors] Fixes some bugs with "invisible" events and color parsing



commit ab1774f0aaa5ea1da42586122f5e69db0914348b
Author: Jim Nelson <jim yorba org>
Date:   Thu Mar 20 15:04:57 2014 -0700

    Fixes some bugs with "invisible" events and color parsing

 src/backing/backing-source.vala |    5 +----
 src/util/util-gfx.vala          |   28 ++++++++++++++++++++++++----
 src/view/month/month-cell.vala  |   10 +++++-----
 3 files changed, 30 insertions(+), 13 deletions(-)
---
diff --git a/src/backing/backing-source.vala b/src/backing/backing-source.vala
index 3a1d411..21e3912 100644
--- a/src/backing/backing-source.vala
+++ b/src/backing/backing-source.vala
@@ -92,10 +92,7 @@ public abstract class Source : BaseObject {
     }
     
     public void set_color_to_rgba(Gdk.RGBA rgba) {
-        Gdk.Color rgb = Gfx.rgba_to_rgb(rgba);
-        
-        color = rgb.to_string();
-        debug("set-color: %s", color);
+        color = Gfx.rgb_to_uint8_rgb_string(Gfx.rgba_to_rgb(rgba));
     }
     
     public override string to_string() {
diff --git a/src/util/util-gfx.vala b/src/util/util-gfx.vala
index 1246529..2225df4 100644
--- a/src/util/util-gfx.vala
+++ b/src/util/util-gfx.vala
@@ -15,7 +15,7 @@ namespace California.Gfx {
 public Gdk.Color rgb_string_to_rgb(string rgb_string, Gdk.Color default_rgb, out bool used_default) {
     Gdk.Color rgb;
     if (!Gdk.Color.parse(rgb_string, out rgb)) {
-        debug("Unable to parse calendar color \"%s\"", rgb_string);
+        debug("Unable to parse RGB color \"%s\"", rgb_string);
         
         used_default = true;
         
@@ -36,7 +36,7 @@ public Gdk.Color rgb_string_to_rgb(string rgb_string, Gdk.Color default_rgb, out
 public Gdk.RGBA rgb_string_to_rgba(string rgb_string, Gdk.RGBA default_rgba, out bool used_default) {
     Gdk.Color rgb;
     if (!Gdk.Color.parse(rgb_string, out rgb)) {
-        debug("Unable to parse calendar color \"%s\"", rgb_string);
+        debug("Unable to parse RGB color \"%s\"", rgb_string);
         
         used_default = true;
         
@@ -56,7 +56,7 @@ public Gdk.RGBA rgb_string_to_rgba(string rgb_string, Gdk.RGBA default_rgba, out
 
 // compiler error if this calculation is done inline when initializing struct
 private inline double uint16_to_fp(uint16 value) {
-    return (double) value / (double) uint8.MAX;
+    return (double) value / (double) uint16.MAX;
 }
 
 /**
@@ -88,7 +88,27 @@ public Gdk.Color rgba_to_rgb(Gdk.RGBA rgba) {
 }
 
 private inline uint16 fp_to_uint16(double value) {
-    return (uint16) Math.round(value * (double) uint8.MAX);
+    return (uint16) Math.round(value * (double) uint16.MAX);
+}
+
+public string rgb_to_uint8_rgb_string(Gdk.Color rgb) {
+    return "#%02x%02x%02x".printf(
+        uint16_to_uint8(rgb.red),
+        uint16_to_uint8(rgb.green),
+        uint16_to_uint8(rgb.blue)
+    );
+}
+
+private inline uint8 uint16_to_uint8(uint16 value) {
+    return (uint8) (value / (uint8.MAX + 1));
+}
+
+public string rgb_to_string(Gdk.Color rgb) {
+    return "(%d,%d,%d)".printf(rgb.red, rgb.green, rgb.blue);
+}
+
+public string rgba_to_string(Gdk.RGBA rgba) {
+    return "(%lf,%lf,%lf,%lf)".printf(rgba.red, rgba.green, rgba.blue, rgba.alpha);
 }
 
 }
diff --git a/src/view/month/month-cell.vala b/src/view/month/month-cell.vala
index be85b69..2aa450f 100644
--- a/src/view/month/month-cell.vala
+++ b/src/view/month/month-cell.vala
@@ -315,12 +315,12 @@ public class Cell : Gtk.EventBox {
      * The Gdk.Point must be relative to the widget's coordinate system.
      */
     public Component.Event? get_event_at(Gdk.Point point) {
-        int line_number = 0;
-        foreach (Component.Event event in days_events) {
-            int y = get_line_top_y(line_number++);
-            
+        for (int line_number = 0; line_number < line_to_event.size; line_number++) {
+            int y = get_line_top_y(line_number);
             if (point.y >= y && point.y < (y + line_height_px))
-                return event;
+                return line_to_event.get(line_number);
+            
+            line_number++;
         }
         
         return null;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]