mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-19 07:41:26 +00:00
first, incomplete attempt at using the anti-aliased mode of the canvas for
first, incomplete attempt at using the anti-aliased mode of the canvas for the icon container. It's optionally enabled by a compile-time flag. There's no text drawing yet.
This commit is contained in:
parent
c8c4ad60f6
commit
ec38801b2f
23
ChangeLog
23
ChangeLog
|
@ -1,3 +1,26 @@
|
|||
2000-05-22 Andy Hertzfeld <andy@eazel.com>
|
||||
|
||||
first, incomplete attempt to use the anti-aliased canvas.
|
||||
For now, it's a compile-time flag in nautilus-icon-container to
|
||||
optionally enable it, and there's no text drawing in aa mode yet.
|
||||
|
||||
* libnautilus-extensions/nautilus-icon-canvas-item.c:
|
||||
(nautilus_icon_canvas_item_initialize_class), (draw_pixbuf),
|
||||
(nautilus_icon_canvas_item_render):
|
||||
added a render method to draw the item in anti-aliased mode
|
||||
|
||||
* libnautilus-extensions/nautilus-icon-container.c:
|
||||
(start_rubberbanding), (nautilus_icon_container_new):
|
||||
optionally put the canvas in anti-aliased mode if a compile-time
|
||||
flag is set; added code to make the selection rectangle semi-transparent
|
||||
in anti-aliased mode.
|
||||
|
||||
* libnautilus-extensions/nautilus-icon-dnd.c:
|
||||
(nautilus_icon_dnd_begin_drag):
|
||||
at Arlo's suggestion, changed the alpha threshold used to compute
|
||||
the pixmap to drag from the pixbuf, so it doesn't look so lumpy when
|
||||
there's lots of information in the alpha channel
|
||||
|
||||
2000-05-22 J Shane Culpepper <pepper@eazel.com>
|
||||
|
||||
* components/services/time/service/.cvsignore: Adding .cvsignore.
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
#include <libgnome/gnome-i18n.h>
|
||||
#include <libgnomeui/gnome-canvas-util.h>
|
||||
#include <libgnomeui/gnome-icon-text.h>
|
||||
#include <libart_lgpl/art_rgb_affine.h>
|
||||
#include <libart_lgpl/art_rgb_rgba_affine.h>
|
||||
#include "nautilus-icon-private.h"
|
||||
#include "nautilus-string.h"
|
||||
#include "nautilus-glib-extensions.h"
|
||||
|
@ -131,6 +133,8 @@ static void nautilus_icon_canvas_item_draw (GnomeCanvasItem
|
|||
int y,
|
||||
int width,
|
||||
int height);
|
||||
static void nautilus_icon_canvas_item_render (GnomeCanvasItem *item,
|
||||
GnomeCanvasBuf *buffer);
|
||||
static double nautilus_icon_canvas_item_point (GnomeCanvasItem *item,
|
||||
double x,
|
||||
double y,
|
||||
|
@ -210,6 +214,7 @@ nautilus_icon_canvas_item_initialize_class (NautilusIconCanvasItemClass *class)
|
|||
|
||||
item_class->update = nautilus_icon_canvas_item_update;
|
||||
item_class->draw = nautilus_icon_canvas_item_draw;
|
||||
item_class->render = nautilus_icon_canvas_item_render;
|
||||
item_class->point = nautilus_icon_canvas_item_point;
|
||||
item_class->bounds = nautilus_icon_canvas_item_bounds;
|
||||
item_class->event = nautilus_icon_canvas_item_event;
|
||||
|
@ -921,10 +926,9 @@ draw_pixbuf (GdkPixbuf *pixbuf, GdkDrawable *drawable, int x, int y)
|
|||
gdk_pixbuf_get_height (pixbuf),
|
||||
GDK_PIXBUF_ALPHA_BILEVEL, 128, GDK_RGB_DITHER_MAX,
|
||||
0, 0);
|
||||
|
||||
}
|
||||
|
||||
/* Draw the icon item. */
|
||||
/* Draw the icon item for non-anti-aliased mode. */
|
||||
static void
|
||||
nautilus_icon_canvas_item_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
|
||||
int x, int y, int width, int height)
|
||||
|
@ -986,6 +990,51 @@ nautilus_icon_canvas_item_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
|
|||
draw_label_text (icon_item, drawable, icon_rect.x0, icon_rect.y1);
|
||||
}
|
||||
|
||||
|
||||
/* draw the item for anti-aliased mode */
|
||||
|
||||
static void
|
||||
nautilus_icon_canvas_item_render (GnomeCanvasItem *item, GnomeCanvasBuf *buf)
|
||||
{
|
||||
|
||||
GdkPixbuf *pixbuf;
|
||||
NautilusIconCanvasItem *icon_item;
|
||||
double i2c[6];
|
||||
|
||||
icon_item = NAUTILUS_ICON_CANVAS_ITEM (item);
|
||||
pixbuf = icon_item->details->pixbuf;
|
||||
|
||||
if (!pixbuf)
|
||||
return;
|
||||
|
||||
gnome_canvas_item_i2c_affine (item, i2c);
|
||||
gnome_canvas_buf_ensure_buf (buf);
|
||||
|
||||
if (gdk_pixbuf_get_has_alpha(pixbuf))
|
||||
art_rgb_rgba_affine (buf->buf,
|
||||
buf->rect.x0, buf->rect.y0, buf->rect.x1, buf->rect.y1,
|
||||
buf->buf_rowstride,
|
||||
gdk_pixbuf_get_pixels(pixbuf),
|
||||
gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf),
|
||||
gdk_pixbuf_get_rowstride(pixbuf),
|
||||
i2c,
|
||||
ART_FILTER_NEAREST,
|
||||
NULL);
|
||||
else
|
||||
art_rgb_affine (buf->buf,
|
||||
buf->rect.x0, buf->rect.y0, buf->rect.x1, buf->rect.y1,
|
||||
buf->buf_rowstride,
|
||||
gdk_pixbuf_get_pixels(pixbuf),
|
||||
gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf),
|
||||
gdk_pixbuf_get_rowstride(pixbuf),
|
||||
i2c,
|
||||
ART_FILTER_NEAREST,
|
||||
NULL);
|
||||
|
||||
buf->is_bg = FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* handle events */
|
||||
|
||||
static int
|
||||
|
|
|
@ -75,6 +75,9 @@
|
|||
#define MAXIMUM_IMAGE_SIZE 1000
|
||||
#define MAXIMUM_EMBLEM_SIZE 100
|
||||
|
||||
/* for now, anti-aliased mode is a compile time option, defaulted off */
|
||||
#define ANTI_ALIASED 0
|
||||
|
||||
static void activate_selected_items (NautilusIconContainer *container);
|
||||
static void nautilus_icon_container_initialize_class (NautilusIconContainerClass *class);
|
||||
static void nautilus_icon_container_initialize (NautilusIconContainer *container);
|
||||
|
@ -886,6 +889,21 @@ start_rubberbanding (NautilusIconContainer *container,
|
|||
event->x, event->y,
|
||||
&band_info->start_x, &band_info->start_y);
|
||||
|
||||
if (GNOME_CANVAS(container)->aa) {
|
||||
band_info->selection_rectangle = gnome_canvas_item_new
|
||||
(gnome_canvas_root
|
||||
(GNOME_CANVAS (container)),
|
||||
gnome_canvas_rect_get_type (),
|
||||
"x1", band_info->start_x,
|
||||
"y1", band_info->start_y,
|
||||
"x2", band_info->start_x,
|
||||
"y2", band_info->start_y,
|
||||
"fill_color_rgba", 0x77bbdd80,
|
||||
"outline_color_rgba", 0x77bbddFF,
|
||||
"width_pixels", 1,
|
||||
NULL);
|
||||
|
||||
} else {
|
||||
band_info->selection_rectangle = gnome_canvas_item_new
|
||||
(gnome_canvas_root
|
||||
(GNOME_CANVAS (container)),
|
||||
|
@ -899,6 +917,7 @@ start_rubberbanding (NautilusIconContainer *container,
|
|||
"outline_color", "lightblue",
|
||||
"width_pixels", 1,
|
||||
NULL);
|
||||
}
|
||||
|
||||
band_info->prev_x = event->x;
|
||||
band_info->prev_y = event->y;
|
||||
|
@ -2595,6 +2614,7 @@ item_event_callback (GnomeCanvasItem *item,
|
|||
GtkWidget *
|
||||
nautilus_icon_container_new (void)
|
||||
{
|
||||
GnomeCanvas *canvas;
|
||||
GtkWidget *new;
|
||||
|
||||
gtk_widget_push_visual (gdk_rgb_get_visual ());
|
||||
|
@ -2605,6 +2625,10 @@ nautilus_icon_container_new (void)
|
|||
gtk_widget_pop_visual ();
|
||||
gtk_widget_pop_colormap ();
|
||||
|
||||
canvas = GNOME_CANVAS(new);
|
||||
if (ANTI_ALIASED)
|
||||
canvas->aa = TRUE;
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
|
|
|
@ -1138,7 +1138,7 @@ nautilus_icon_dnd_begin_drag (NautilusIconContainer *container,
|
|||
gdk_pixbuf_render_pixmap_and_mask (transparent_pixbuf,
|
||||
&pixmap_for_dragged_file,
|
||||
&mask_for_dragged_file,
|
||||
128);
|
||||
2);
|
||||
|
||||
gdk_pixbuf_unref (transparent_pixbuf);
|
||||
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
#include <libgnome/gnome-i18n.h>
|
||||
#include <libgnomeui/gnome-canvas-util.h>
|
||||
#include <libgnomeui/gnome-icon-text.h>
|
||||
#include <libart_lgpl/art_rgb_affine.h>
|
||||
#include <libart_lgpl/art_rgb_rgba_affine.h>
|
||||
#include "nautilus-icon-private.h"
|
||||
#include "nautilus-string.h"
|
||||
#include "nautilus-glib-extensions.h"
|
||||
|
@ -131,6 +133,8 @@ static void nautilus_icon_canvas_item_draw (GnomeCanvasItem
|
|||
int y,
|
||||
int width,
|
||||
int height);
|
||||
static void nautilus_icon_canvas_item_render (GnomeCanvasItem *item,
|
||||
GnomeCanvasBuf *buffer);
|
||||
static double nautilus_icon_canvas_item_point (GnomeCanvasItem *item,
|
||||
double x,
|
||||
double y,
|
||||
|
@ -210,6 +214,7 @@ nautilus_icon_canvas_item_initialize_class (NautilusIconCanvasItemClass *class)
|
|||
|
||||
item_class->update = nautilus_icon_canvas_item_update;
|
||||
item_class->draw = nautilus_icon_canvas_item_draw;
|
||||
item_class->render = nautilus_icon_canvas_item_render;
|
||||
item_class->point = nautilus_icon_canvas_item_point;
|
||||
item_class->bounds = nautilus_icon_canvas_item_bounds;
|
||||
item_class->event = nautilus_icon_canvas_item_event;
|
||||
|
@ -921,10 +926,9 @@ draw_pixbuf (GdkPixbuf *pixbuf, GdkDrawable *drawable, int x, int y)
|
|||
gdk_pixbuf_get_height (pixbuf),
|
||||
GDK_PIXBUF_ALPHA_BILEVEL, 128, GDK_RGB_DITHER_MAX,
|
||||
0, 0);
|
||||
|
||||
}
|
||||
|
||||
/* Draw the icon item. */
|
||||
/* Draw the icon item for non-anti-aliased mode. */
|
||||
static void
|
||||
nautilus_icon_canvas_item_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
|
||||
int x, int y, int width, int height)
|
||||
|
@ -986,6 +990,51 @@ nautilus_icon_canvas_item_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
|
|||
draw_label_text (icon_item, drawable, icon_rect.x0, icon_rect.y1);
|
||||
}
|
||||
|
||||
|
||||
/* draw the item for anti-aliased mode */
|
||||
|
||||
static void
|
||||
nautilus_icon_canvas_item_render (GnomeCanvasItem *item, GnomeCanvasBuf *buf)
|
||||
{
|
||||
|
||||
GdkPixbuf *pixbuf;
|
||||
NautilusIconCanvasItem *icon_item;
|
||||
double i2c[6];
|
||||
|
||||
icon_item = NAUTILUS_ICON_CANVAS_ITEM (item);
|
||||
pixbuf = icon_item->details->pixbuf;
|
||||
|
||||
if (!pixbuf)
|
||||
return;
|
||||
|
||||
gnome_canvas_item_i2c_affine (item, i2c);
|
||||
gnome_canvas_buf_ensure_buf (buf);
|
||||
|
||||
if (gdk_pixbuf_get_has_alpha(pixbuf))
|
||||
art_rgb_rgba_affine (buf->buf,
|
||||
buf->rect.x0, buf->rect.y0, buf->rect.x1, buf->rect.y1,
|
||||
buf->buf_rowstride,
|
||||
gdk_pixbuf_get_pixels(pixbuf),
|
||||
gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf),
|
||||
gdk_pixbuf_get_rowstride(pixbuf),
|
||||
i2c,
|
||||
ART_FILTER_NEAREST,
|
||||
NULL);
|
||||
else
|
||||
art_rgb_affine (buf->buf,
|
||||
buf->rect.x0, buf->rect.y0, buf->rect.x1, buf->rect.y1,
|
||||
buf->buf_rowstride,
|
||||
gdk_pixbuf_get_pixels(pixbuf),
|
||||
gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf),
|
||||
gdk_pixbuf_get_rowstride(pixbuf),
|
||||
i2c,
|
||||
ART_FILTER_NEAREST,
|
||||
NULL);
|
||||
|
||||
buf->is_bg = FALSE;
|
||||
}
|
||||
|
||||
|
||||
/* handle events */
|
||||
|
||||
static int
|
||||
|
|
|
@ -75,6 +75,9 @@
|
|||
#define MAXIMUM_IMAGE_SIZE 1000
|
||||
#define MAXIMUM_EMBLEM_SIZE 100
|
||||
|
||||
/* for now, anti-aliased mode is a compile time option, defaulted off */
|
||||
#define ANTI_ALIASED 0
|
||||
|
||||
static void activate_selected_items (NautilusIconContainer *container);
|
||||
static void nautilus_icon_container_initialize_class (NautilusIconContainerClass *class);
|
||||
static void nautilus_icon_container_initialize (NautilusIconContainer *container);
|
||||
|
@ -886,6 +889,21 @@ start_rubberbanding (NautilusIconContainer *container,
|
|||
event->x, event->y,
|
||||
&band_info->start_x, &band_info->start_y);
|
||||
|
||||
if (GNOME_CANVAS(container)->aa) {
|
||||
band_info->selection_rectangle = gnome_canvas_item_new
|
||||
(gnome_canvas_root
|
||||
(GNOME_CANVAS (container)),
|
||||
gnome_canvas_rect_get_type (),
|
||||
"x1", band_info->start_x,
|
||||
"y1", band_info->start_y,
|
||||
"x2", band_info->start_x,
|
||||
"y2", band_info->start_y,
|
||||
"fill_color_rgba", 0x77bbdd80,
|
||||
"outline_color_rgba", 0x77bbddFF,
|
||||
"width_pixels", 1,
|
||||
NULL);
|
||||
|
||||
} else {
|
||||
band_info->selection_rectangle = gnome_canvas_item_new
|
||||
(gnome_canvas_root
|
||||
(GNOME_CANVAS (container)),
|
||||
|
@ -899,6 +917,7 @@ start_rubberbanding (NautilusIconContainer *container,
|
|||
"outline_color", "lightblue",
|
||||
"width_pixels", 1,
|
||||
NULL);
|
||||
}
|
||||
|
||||
band_info->prev_x = event->x;
|
||||
band_info->prev_y = event->y;
|
||||
|
@ -2595,6 +2614,7 @@ item_event_callback (GnomeCanvasItem *item,
|
|||
GtkWidget *
|
||||
nautilus_icon_container_new (void)
|
||||
{
|
||||
GnomeCanvas *canvas;
|
||||
GtkWidget *new;
|
||||
|
||||
gtk_widget_push_visual (gdk_rgb_get_visual ());
|
||||
|
@ -2605,6 +2625,10 @@ nautilus_icon_container_new (void)
|
|||
gtk_widget_pop_visual ();
|
||||
gtk_widget_pop_colormap ();
|
||||
|
||||
canvas = GNOME_CANVAS(new);
|
||||
if (ANTI_ALIASED)
|
||||
canvas->aa = TRUE;
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
|
|
|
@ -1138,7 +1138,7 @@ nautilus_icon_dnd_begin_drag (NautilusIconContainer *container,
|
|||
gdk_pixbuf_render_pixmap_and_mask (transparent_pixbuf,
|
||||
&pixmap_for_dragged_file,
|
||||
&mask_for_dragged_file,
|
||||
128);
|
||||
2);
|
||||
|
||||
gdk_pixbuf_unref (transparent_pixbuf);
|
||||
|
||||
|
|
Loading…
Reference in a new issue