mirror of
https://github.com/brl/mutter.git
synced 2024-11-28 11:00:54 -05:00
make this look a little nicer
2001-08-22 Havoc Pennington <hp@pobox.com> * src/tabpopup.c: make this look a little nicer
This commit is contained in:
parent
cebbafdd22
commit
ddfffe270f
@ -1,3 +1,7 @@
|
|||||||
|
2001-08-22 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
|
* src/tabpopup.c: make this look a little nicer
|
||||||
|
|
||||||
2001-08-22 Havoc Pennington <hp@pobox.com>
|
2001-08-22 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
* src/window.c (update_mwm_hints): all the MWM flag tests were
|
* src/window.c (update_mwm_hints): all the MWM flag tests were
|
||||||
|
185
src/tabpopup.c
185
src/tabpopup.c
@ -24,6 +24,9 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#define OUTSIDE_SELECT_RECT 2
|
||||||
|
#define INSIDE_SELECT_RECT 2
|
||||||
|
|
||||||
typedef struct _TabEntry TabEntry;
|
typedef struct _TabEntry TabEntry;
|
||||||
|
|
||||||
struct _TabEntry
|
struct _TabEntry
|
||||||
@ -43,6 +46,10 @@ struct _MetaTabPopup
|
|||||||
GtkWidget *current_selected_widget;
|
GtkWidget *current_selected_widget;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static GtkWidget* selectable_image_new (GdkPixbuf *pixbuf);
|
||||||
|
static void select_image (GtkWidget *widget);
|
||||||
|
static void unselect_image (GtkWidget *widget);
|
||||||
|
|
||||||
MetaTabPopup*
|
MetaTabPopup*
|
||||||
meta_ui_tab_popup_new (const MetaTabEntry *entries)
|
meta_ui_tab_popup_new (const MetaTabEntry *entries)
|
||||||
{
|
{
|
||||||
@ -108,7 +115,7 @@ meta_ui_tab_popup_new (const MetaTabEntry *entries)
|
|||||||
popup->label,
|
popup->label,
|
||||||
0, width, height, height + 1,
|
0, width, height, height + 1,
|
||||||
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
|
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
|
||||||
0, 2);
|
3, 3);
|
||||||
|
|
||||||
|
|
||||||
top = 0;
|
top = 0;
|
||||||
@ -123,27 +130,24 @@ meta_ui_tab_popup_new (const MetaTabEntry *entries)
|
|||||||
while (tmp && left < width)
|
while (tmp && left < width)
|
||||||
{
|
{
|
||||||
GtkWidget *image;
|
GtkWidget *image;
|
||||||
GtkWidget *highlight;
|
|
||||||
|
|
||||||
TabEntry *te;
|
TabEntry *te;
|
||||||
|
|
||||||
te = tmp->data;
|
te = tmp->data;
|
||||||
|
|
||||||
highlight = gtk_frame_new (NULL);
|
image = selectable_image_new (te->icon);
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (highlight),
|
gtk_misc_set_padding (GTK_MISC (image),
|
||||||
GTK_SHADOW_NONE);
|
INSIDE_SELECT_RECT + OUTSIDE_SELECT_RECT + 1,
|
||||||
image = gtk_image_new_from_pixbuf (te->icon);
|
INSIDE_SELECT_RECT + OUTSIDE_SELECT_RECT + 1);
|
||||||
gtk_misc_set_padding (GTK_MISC (image), 3, 3);
|
gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.5);
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (highlight), image);
|
te->widget = image;
|
||||||
|
|
||||||
te->widget = highlight;
|
|
||||||
|
|
||||||
gtk_table_attach (GTK_TABLE (table),
|
gtk_table_attach (GTK_TABLE (table),
|
||||||
te->widget,
|
te->widget,
|
||||||
left, right, top, bottom,
|
left, right, top, bottom,
|
||||||
0, 0,
|
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
|
||||||
0, 0);
|
0, 0);
|
||||||
|
|
||||||
tmp = tmp->next;
|
tmp = tmp->next;
|
||||||
|
|
||||||
@ -199,14 +203,11 @@ display_entry (MetaTabPopup *popup,
|
|||||||
TabEntry *te)
|
TabEntry *te)
|
||||||
{
|
{
|
||||||
if (popup->current_selected_widget)
|
if (popup->current_selected_widget)
|
||||||
{
|
unselect_image (popup->current_selected_widget);
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (popup->current_selected_widget),
|
|
||||||
GTK_SHADOW_NONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_label_set_text (GTK_LABEL (popup->label), te->title);
|
gtk_label_set_text (GTK_LABEL (popup->label), te->title);
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (te->widget),
|
select_image (te->widget);
|
||||||
GTK_SHADOW_ETCHED_IN);
|
|
||||||
popup->current_selected_widget = te->widget;
|
popup->current_selected_widget = te->widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,3 +289,149 @@ meta_ui_tab_popup_select (MetaTabPopup *popup,
|
|||||||
tmp = tmp->next;
|
tmp = tmp->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define META_TYPE_SELECT_IMAGE (meta_select_image_get_type ())
|
||||||
|
#define META_SELECT_IMAGE(obj) (GTK_CHECK_CAST ((obj), META_TYPE_SELECT_IMAGE, MetaSelectImage))
|
||||||
|
|
||||||
|
typedef struct _MetaSelectImage MetaSelectImage;
|
||||||
|
typedef struct _MetaSelectImageClass MetaSelectImageClass;
|
||||||
|
|
||||||
|
struct _MetaSelectImage
|
||||||
|
{
|
||||||
|
GtkImage parent_instance;
|
||||||
|
guint selected : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _MetaSelectImageClass
|
||||||
|
{
|
||||||
|
GtkImageClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static GType meta_select_image_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
static GtkWidget*
|
||||||
|
selectable_image_new (GdkPixbuf *pixbuf)
|
||||||
|
{
|
||||||
|
GtkWidget *w;
|
||||||
|
|
||||||
|
w = g_object_new (meta_select_image_get_type (), NULL);
|
||||||
|
gtk_image_set_from_pixbuf (GTK_IMAGE (w), pixbuf);
|
||||||
|
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
select_image (GtkWidget *widget)
|
||||||
|
{
|
||||||
|
META_SELECT_IMAGE (widget)->selected = TRUE;
|
||||||
|
gtk_widget_queue_draw (widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unselect_image (GtkWidget *widget)
|
||||||
|
{
|
||||||
|
META_SELECT_IMAGE (widget)->selected = FALSE;
|
||||||
|
gtk_widget_queue_draw (widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void meta_select_image_class_init (MetaSelectImageClass *klass);
|
||||||
|
static gboolean meta_select_image_expose_event (GtkWidget *widget,
|
||||||
|
GdkEventExpose *event);
|
||||||
|
|
||||||
|
static GtkImageClass *parent_class;
|
||||||
|
|
||||||
|
GType
|
||||||
|
meta_select_image_get_type (void)
|
||||||
|
{
|
||||||
|
static GtkType image_type = 0;
|
||||||
|
|
||||||
|
if (!image_type)
|
||||||
|
{
|
||||||
|
static const GTypeInfo image_info =
|
||||||
|
{
|
||||||
|
sizeof (MetaSelectImageClass),
|
||||||
|
NULL, /* base_init */
|
||||||
|
NULL, /* base_finalize */
|
||||||
|
(GClassInitFunc) meta_select_image_class_init,
|
||||||
|
NULL, /* class_finalize */
|
||||||
|
NULL, /* class_data */
|
||||||
|
sizeof (MetaSelectImage),
|
||||||
|
16, /* n_preallocs */
|
||||||
|
(GInstanceInitFunc) NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
image_type = g_type_register_static (GTK_TYPE_IMAGE, "MetaSelectImage", &image_info, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return image_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_select_image_class_init (MetaSelectImageClass *klass)
|
||||||
|
{
|
||||||
|
GtkWidgetClass *widget_class;
|
||||||
|
|
||||||
|
parent_class = gtk_type_class (gtk_image_get_type ());
|
||||||
|
|
||||||
|
widget_class = GTK_WIDGET_CLASS (klass);
|
||||||
|
|
||||||
|
widget_class->expose_event = meta_select_image_expose_event;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_select_image_expose_event (GtkWidget *widget,
|
||||||
|
GdkEventExpose *event)
|
||||||
|
{
|
||||||
|
if (META_SELECT_IMAGE (widget)->selected)
|
||||||
|
{
|
||||||
|
int x, y, w, h;
|
||||||
|
GtkMisc *misc;
|
||||||
|
|
||||||
|
misc = GTK_MISC (widget);
|
||||||
|
|
||||||
|
x = (widget->allocation.x * (1.0 - misc->xalign) +
|
||||||
|
(widget->allocation.x + widget->allocation.width
|
||||||
|
- (widget->requisition.width - misc->xpad * 2)) *
|
||||||
|
misc->xalign) + 0.5;
|
||||||
|
y = (widget->allocation.y * (1.0 - misc->yalign) +
|
||||||
|
(widget->allocation.y + widget->allocation.height
|
||||||
|
- (widget->requisition.height - misc->ypad * 2)) *
|
||||||
|
misc->yalign) + 0.5;
|
||||||
|
|
||||||
|
x -= INSIDE_SELECT_RECT;
|
||||||
|
y -= INSIDE_SELECT_RECT;
|
||||||
|
|
||||||
|
|
||||||
|
w = widget->requisition.width - OUTSIDE_SELECT_RECT * 2 - 1;
|
||||||
|
h = widget->requisition.height - OUTSIDE_SELECT_RECT * 2 - 1;
|
||||||
|
|
||||||
|
gdk_draw_rectangle (widget->window,
|
||||||
|
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
|
||||||
|
FALSE,
|
||||||
|
x, y, w, h);
|
||||||
|
gdk_draw_rectangle (widget->window,
|
||||||
|
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
|
||||||
|
FALSE,
|
||||||
|
x - 1, y - 1, w + 2, h + 2);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
gdk_draw_rectangle (widget->window,
|
||||||
|
widget->style->bg_gc[GTK_STATE_SELECTED],
|
||||||
|
TRUE,
|
||||||
|
x, y, w, h);
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
gtk_paint_focus (widget->style, widget->window,
|
||||||
|
&event->area, widget, "meta-tab-image",
|
||||||
|
x, y, w, h);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user