* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <stdlib.h>
-#include <gtk/gtk.h> /* To define GTK_CHECK_VERSION */
-#include "main.h"
#include "cellrenderericon.h"
-#include "intl.h"
+#include <cstddef>
-#define FIXED_ICON_SIZE_MAX 512
+#include <cairo.h>
+#include <gdk/gdk.h>
+namespace
+{
+
+constexpr gint FIXED_ICON_SIZE_MAX = 512;
+
+} // namespace
static void gqv_cell_renderer_icon_get_property(GObject *object,
guint param_id,
const GValue *value,
GParamSpec *pspec);
static void gqv_cell_renderer_icon_init_wrapper(void *, void *);
-static void gqv_cell_renderer_icon_init(GQvCellRendererIcon *celltext);
+static void gqv_cell_renderer_icon_init(GQvCellRendererIcon *cellicon);
static void gqv_cell_renderer_icon_class_init_wrapper(void *, void *);
static void gqv_cell_renderer_icon_class_init(GQvCellRendererIconClass *icon_class);
static void gqv_cell_renderer_icon_finalize(GObject *object);
static void gqv_cell_renderer_icon_get_size(GtkCellRenderer *cell,
GtkWidget *widget,
- const GdkRectangle *rectangle,
+ const GdkRectangle *cell_area,
gint *x_offset,
gint *y_offset,
gint *width,
static gpointer parent_class;
GType
-gqv_cell_renderer_icon_get_type(void)
+gqv_cell_renderer_icon_get_type()
{
static GType cell_icon_type = 0;
static const GTypeInfo cell_icon_info =
{
sizeof(GQvCellRendererIconClass), /* class_size */
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gqv_cell_renderer_icon_class_init_wrapper, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
+ nullptr, /* base_init */
+ nullptr, /* base_finalize */
+ static_cast<GClassInitFunc>(gqv_cell_renderer_icon_class_init_wrapper), /* class_init */
+ nullptr, /* class_finalize */
+ nullptr, /* class_data */
sizeof(GQvCellRendererIcon), /* instance_size */
0, /* n_preallocs */
- (GInstanceInitFunc) gqv_cell_renderer_icon_init_wrapper, /* instance_init */
- NULL, /* value_table */
+ reinterpret_cast<GInstanceInitFunc>(gqv_cell_renderer_icon_init_wrapper), /* instance_init */
+ nullptr, /* value_table */
};
cell_icon_type = g_type_register_static(GTK_TYPE_CELL_RENDERER,
"GQvCellRendererIcon",
- &cell_icon_info, 0);
+ &cell_icon_info, static_cast<GTypeFlags>(0));
}
return cell_icon_type;
}
static void
-gqv_cell_renderer_icon_init_wrapper(void *data, void *UNUSED(user_data))
+gqv_cell_renderer_icon_init_wrapper(void *data, void *)
{
- gqv_cell_renderer_icon_init(data);
+ gqv_cell_renderer_icon_init(static_cast<GQvCellRendererIcon *>(data));
}
static void
}
static void
-gqv_cell_renderer_icon_class_init_wrapper(void *data, void *UNUSED(user_data))
+gqv_cell_renderer_icon_class_init_wrapper(void *data, void *)
{
- gqv_cell_renderer_icon_class_init(data);
+ gqv_cell_renderer_icon_class_init(static_cast<GQvCellRendererIconClass *>(data));
}
static void
g_param_spec_string("text",
"Text",
"Text to render",
- NULL,
+ nullptr,
G_PARAM_READWRITE));
g_object_class_install_property(object_class,
PROP_BACKGROUND_GDK,
- g_param_spec_boxed("background_gdk",
+ g_param_spec_boxed("background_rgba",
"Background color",
- "Background color as a GdkColor",
- GDK_TYPE_COLOR,
+ "Background color as a GdkRGBA",
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE));
g_object_class_install_property(object_class,
PROP_FOREGROUND_GDK,
- g_param_spec_boxed("foreground_gdk",
+ g_param_spec_boxed("foreground_rgba",
"Foreground color",
- "Foreground color as a GdkColor",
- GDK_TYPE_COLOR,
+ "Foreground color as a GdkRGBA",
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE));
g_object_class_install_property(object_class,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GQvCellRendererIconClass, toggled),
- NULL, NULL,
+ nullptr, nullptr,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1,
G_TYPE_STRING);
switch (param_id)
{
case PROP_PIXBUF:
- g_value_set_object(value, cellicon->pixbuf ? G_OBJECT(cellicon->pixbuf) : NULL);
+ g_value_set_object(value, cellicon->pixbuf ? G_OBJECT(cellicon->pixbuf) : nullptr);
break;
case PROP_TEXT:
g_value_set_string(value, cellicon->text);
break;
case PROP_BACKGROUND_GDK:
{
- GdkColor color;
+ GdkRGBA color;
- color.red = cellicon->background.red;
- color.green = cellicon->background.green;
- color.blue = cellicon->background.blue;
+ color.red = cellicon->background.red / 65535.0;
+ color.green = cellicon->background.green / 65535.0;
+ color.blue = cellicon->background.blue / 65535.0;
g_value_set_boxed(value, &color);
}
break;
case PROP_FOREGROUND_GDK:
{
- GdkColor color;
+ GdkRGBA color;
- color.red = cellicon->foreground.red;
- color.green = cellicon->foreground.green;
- color.blue = cellicon->foreground.blue;
+ color.red = cellicon->foreground.red / 65535.0;
+ color.green = cellicon->foreground.green / 65535.0;
+ color.blue = cellicon->foreground.blue / 65535.0;
g_value_set_boxed(value, &color);
}
}
}
-static void
-set_bg_color(GQvCellRendererIcon *cellicon,
- GdkColor *color)
+static void set_bg_color(GQvCellRendererIcon *cellicon, GdkRGBA *color)
{
if (color)
{
g_object_notify(G_OBJECT(cellicon), "background_set");
}
- cellicon->background.red = color->red;
- cellicon->background.green = color->green;
- cellicon->background.blue = color->blue;
+ cellicon->background.red = color->red * 65535;
+ cellicon->background.green = color->green * 65535;
+ cellicon->background.blue = color->blue * 65535;
}
else
{
}
}
-static void set_fg_color(GQvCellRendererIcon *cellicon,
- GdkColor *color)
+static void set_fg_color(GQvCellRendererIcon *cellicon, GdkRGBA *color)
{
if (color)
{
cellicon->foreground_set = TRUE;
g_object_notify(G_OBJECT(cellicon), "foreground_set");
}
-
- cellicon->foreground.red = color->red;
- cellicon->foreground.green = color->green;
- cellicon->foreground.blue = color->blue;
+ cellicon->foreground.red = color->red * 65535;
+ cellicon->foreground.green = color->green * 65535;
+ cellicon->foreground.blue = color->blue * 65535;
}
else
{
{
GdkPixbuf *pixbuf;
- pixbuf = (GdkPixbuf *) g_value_get_object(value);
+ pixbuf = static_cast<GdkPixbuf *>(g_value_get_object(value));
if (pixbuf) g_object_ref(pixbuf);
if (cellicon->pixbuf) g_object_unref(cellicon->pixbuf);
cellicon->pixbuf = pixbuf;
}
break;
case PROP_BACKGROUND_GDK:
- set_bg_color(cellicon, g_value_get_boxed(value));
+ set_bg_color(cellicon, static_cast<GdkRGBA *>(g_value_get_boxed(value)));
break;
case PROP_FOREGROUND_GDK:
- set_fg_color(cellicon, g_value_get_boxed(value));
+ set_fg_color(cellicon, static_cast<GdkRGBA *>(g_value_get_boxed(value)));
break;
case PROP_FOCUSED:
cellicon->focused = g_value_get_boolean(value);
* Return value: the new cell renderer
**/
GtkCellRenderer *
-gqv_cell_renderer_icon_new(void)
+gqv_cell_renderer_icon_new()
{
- return g_object_new(GQV_TYPE_CELL_RENDERER_ICON, NULL);
+ return static_cast<GtkCellRenderer *>(g_object_new(GQV_TYPE_CELL_RENDERER_ICON, nullptr));
}
static void gqv_cell_renderer_icon_get_size(GtkCellRenderer *cell,
gint *width,
gint *height)
{
- GQvCellRendererIcon *cellicon = (GQvCellRendererIcon *) cell;
+ auto cellicon = reinterpret_cast<GQvCellRendererIcon *>(cell);
gint calc_width;
gint calc_height;
- gint xpad, ypad;
- gfloat xalign, yalign;
+ gint xpad;
+ gint ypad;
+ gfloat xalign;
+ gfloat yalign;
gtk_cell_renderer_get_padding(cell, &xpad, &ypad);
gtk_cell_renderer_get_alignment(cell, &xalign, &yalign);
PangoRectangle rect;
layout = gqv_cell_renderer_icon_get_layout(cellicon, widget, FALSE);
- pango_layout_get_pixel_extents(layout, NULL, &rect);
+ pango_layout_get_pixel_extents(layout, nullptr, &rect);
g_object_unref(layout);
calc_width = MAX(calc_width, rect.width);
static void gqv_cell_renderer_icon_render(GtkCellRenderer *cell,
cairo_t *cr,
GtkWidget *widget,
- const GdkRectangle *UNUSED(background_area),
+ const GdkRectangle *,
const GdkRectangle *cell_area,
GtkCellRendererState flags)
{
GtkStyleContext *context = gtk_widget_get_style_context(widget);
- GQvCellRendererIcon *cellicon = (GQvCellRendererIcon *) cell;
+ auto cellicon = reinterpret_cast<GQvCellRendererIcon *>(cell);
GdkPixbuf *pixbuf;
const gchar *text;
GdkRectangle cell_rect;
GtkStateFlags state;
- gint xpad, ypad;
+ gint xpad;
+ gint ypad;
pixbuf = cellicon->pixbuf;
}
else
{
- if (gtk_widget_get_state(widget) == GTK_STATE_INSENSITIVE)
+ if (!gtk_widget_is_sensitive(widget))
state = GTK_STATE_FLAG_INSENSITIVE;
else
state = GTK_STATE_FLAG_NORMAL;
GdkRectangle pix_rect;
GdkRectangle draw_rect;
layout = gqv_cell_renderer_icon_get_layout(cellicon, widget, TRUE);
- pango_layout_get_pixel_extents(layout, NULL, &text_rect);
+ pango_layout_get_pixel_extents(layout, nullptr, &text_rect);
pix_rect.width = text_rect.width;
pix_rect.height = text_rect.height;
{
for (i = 0; i < cellicon->num_marks; i++)
{
- state &= ~(GTK_STATE_FLAG_CHECKED);
+ state = static_cast<GtkStateFlags>(state & ~GTK_STATE_FLAG_CHECKED);
if ((cellicon->marks & (1 << i)))
- state |= GTK_STATE_FLAG_CHECKED;
+ state = static_cast<GtkStateFlags>(state | GTK_STATE_FLAG_CHECKED);
cairo_save (cr);
cairo_rectangle(cr,
- pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
+ pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2.0,
pix_rect.y,
TOGGLE_WIDTH, TOGGLE_WIDTH);
cairo_clip (cr);
gtk_style_context_add_class(context, GTK_STYLE_CLASS_CHECK);
gtk_style_context_add_class(context, "marks");
- GtkStyleProvider *provider;
- provider = (GtkStyleProvider *)gtk_css_provider_new();
- gtk_css_provider_load_from_data(GTK_CSS_PROVIDER(provider),
- ".marks {\n"
- "border-color: #808080;\n"
- "border-style: solid;\n"
- "border-width: 1px;\n"
- "border-radius: 0px;\n"
- "}\n"
- ,-1, NULL);
- gtk_style_context_add_provider(context, provider,
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
if (state & GTK_STATE_FLAG_CHECKED)
{
gtk_render_check(context, cr,
- pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
+ pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2.0,
pix_rect.y,
TOGGLE_WIDTH, TOGGLE_WIDTH);
}
gtk_render_frame(context, cr,
- pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
+ pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2.0,
pix_rect.y,
TOGGLE_WIDTH, TOGGLE_WIDTH);
if (cellicon->focused && gtk_widget_has_focus(widget))
{
gtk_render_focus(context, cr,
- pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
+ pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2.0,
pix_rect.y, TOGGLE_WIDTH, TOGGLE_WIDTH);
}
gtk_style_context_restore(context);
cairo_restore(cr);
- gtk_style_context_remove_provider(context, provider);
- g_object_unref(provider);
}
}
}
GdkEvent *event,
GtkWidget *widget,
const gchar *path,
- const GdkRectangle *UNUSED(background_area),
+ const GdkRectangle *,
const GdkRectangle *cell_area,
- GtkCellRendererState UNUSED(flags))
+ GtkCellRendererState)
{
- GQvCellRendererIcon *cellicon = (GQvCellRendererIcon *) cell;
+ auto cellicon = reinterpret_cast<GQvCellRendererIcon *>(cell);
GdkEventButton *bevent = &event->button;
if (cellicon->show_marks &&
GdkRectangle rect;
GdkRectangle cell_rect;
gint i;
- gint xpad, ypad;
+ gint xpad;
+ gint ypad;
gtk_cell_renderer_get_padding(cell, &xpad, &ypad);