0
+#include <cairo/cairo.h>
0
+#include <clutter/clutter.h>
0
+#include <clutter-cairo/clutter-cairo.h>
0
+#include <twitter-glib/twitter-glib.h>
0
+#include "tweet-status-renderer.h"
0
+#define DEFAULT_WIDTH (ICON_WIDTH + (2 * H_PADDING) + 230)
0
+#define DEFAULT_HEIGHT (ICON_HEIGHT + (2 * V_PADDING))
0
+#define TEXT_X (ICON_WIDTH + (2 * H_PADDING))
0
+#define TEXT_Y (V_PADDING)
0
+#define BG_ROUND_RADIUS 12
0
+G_DEFINE_TYPE (TweetStatusRenderer,
0
+ tweet_status_renderer,
0
+ TIDY_TYPE_CELL_RENDERER);
0
+create_cell (TwitterStatus *status,
0
+ const gchar *font_name)
0
+ ClutterActor *base, *bg, *label;
0
+ ClutterColor bg_color = { 162, 162, 162, 0xcc };
0
+ ClutterColor label_color = { 0xee, 0xee, 0xee, 255 };
0
+ width = DEFAULT_WIDTH;
0
+ height = DEFAULT_HEIGHT;
0
+ base = clutter_group_new ();
0
+ /* background texture */
0
+ bg = clutter_cairo_new (DEFAULT_WIDTH, DEFAULT_HEIGHT);
0
+ clutter_container_add_actor (CLUTTER_CONTAINER (base), bg);
0
+ clutter_actor_show (bg);
0
+ cr = clutter_cairo_create (CLUTTER_CAIRO (bg));
0
+ g_assert (cr != NULL);
0
+ cairo_move_to (cr, BG_ROUND_RADIUS, 0);
0
+ cairo_line_to (cr, width - BG_ROUND_RADIUS, 0);
0
+ cairo_curve_to (cr, width, 0, width, 0, width, BG_ROUND_RADIUS);
0
+ cairo_line_to (cr, width, height - BG_ROUND_RADIUS);
0
+ cairo_curve_to (cr, width, height, width, height, width - BG_ROUND_RADIUS, height);
0
+ cairo_line_to (cr, BG_ROUND_RADIUS, height);
0
+ cairo_curve_to (cr, 0, height, 0, height, 0, height - BG_ROUND_RADIUS);
0
+ cairo_line_to (cr, 0, BG_ROUND_RADIUS);
0
+ cairo_curve_to (cr, 0, 0, 0, 0, BG_ROUND_RADIUS, 0);
0
+ cairo_close_path (cr);
0
+ clutter_cairo_set_source_color (cr, &bg_color);
0
+ cairo_fill_preserve (cr);
0
+ g_assert (TWITTER_IS_STATUS (status));
0
+ label = clutter_label_new ();
0
+ clutter_label_set_color (CLUTTER_LABEL (label), &label_color);
0
+ clutter_label_set_font_name (CLUTTER_LABEL (label), font_name);
0
+ clutter_label_set_line_wrap (CLUTTER_LABEL (label), TRUE);
0
+ clutter_label_set_text (CLUTTER_LABEL (label), twitter_status_get_text (status));
0
+ clutter_container_add_actor (CLUTTER_CONTAINER (base), label);
0
+ clutter_actor_set_position (label, TEXT_X, TEXT_Y);
0
+ clutter_actor_set_width (label, 230);
0
+ clutter_actor_show (label);
0
+tweet_status_renderer_get_cell_actor (TidyCellRenderer *renderer,
0
+ TidyCellState cell_state,
0
+ ClutterGeometry *size,
0
+ ClutterActor *retval = NULL;
0
+ ClutterColor *background_color, *active_color, *text_color;
0
+ ClutterFixed x_align, y_align;
0
+ tidy_stylable_get (TIDY_STYLABLE (list_view),
0
+ "font-name", &font_name,
0
+ "bg-color", &background_color,
0
+ "active-color", &active_color,
0
+ "text-color", &text_color,
0
+ tidy_cell_renderer_get_alignmentx (renderer, &x_align, &y_align);
0
+ if (row == -1 || cell_state == TIDY_CELL_HEADER)
0
+ retval = tidy_frame_new ();
0
+ tidy_actor_set_alignmentx (TIDY_ACTOR (retval), x_align, y_align);
0
+ label = g_object_new (CLUTTER_TYPE_LABEL,
0
+ "font-name", font_name,
0
+ "text", g_value_get_string (value),
0
+ "alignment", PANGO_ALIGN_CENTER,
0
+ "ellipsize", PANGO_ELLIPSIZE_END,
0
+ clutter_container_add_actor (CLUTTER_CONTAINER (retval), label);
0
+ clutter_actor_show (label);
0
+ if (G_VALUE_TYPE (value) != TWITTER_TYPE_STATUS)
0
+ TwitterStatus *status;
0
+ status = g_value_get_object (value);
0
+ height = size->height;
0
+ retval = create_cell (status, width, height, font_name);
0
+ clutter_color_free (background_color);
0
+ clutter_color_free (active_color);
0
+ clutter_color_free (text_color);
0
+tweet_status_renderer_class_init (TweetStatusRendererClass *klass)
0
+ TidyCellRendererClass *renderer_class = TIDY_CELL_RENDERER_CLASS (klass);
0
+ renderer_class->get_cell_actor = tweet_status_renderer_get_cell_actor;
0
+tweet_status_renderer_init (TweetStatusRenderer *renderer)
0
+tweet_status_renderer_new (void)
0
+ return g_object_new (TWEET_TYPE_STATUS_RENDERER, NULL);
Comments
No one has commented yet.