icon size can now be configurable and change with the screen width
author"Luc Saillard <luc@saillard.org>"
Sun Apr 27 10:39:27 2008 +0200 (2 weeks ago)
changeset 200862f3914b50b
parent 1998d4616e6acce
child 2016f4dfb7acd50
icon size can now be configurable and change with the screen width
src/minidesk.h
src/minidesk_desktop_view.c
src/minidesk_dock.c
src/minidesk_settings.c
--- a/src/minidesk.h Wed Apr 16 11:01:37 2008 +0200
+++ b/src/minidesk.h Sun Apr 27 10:39:27 2008 +0200
@@ -35,11 +35,7 @@
#define USE_VERTICAL_ALIGNMENT 1
#define SCREEN_MARGIN 12
-#define SCREEN_MARGIN_BOTTOM 96
-#define ICON_SIZE 48
-#define TEXT_WIDTH ((ICON_SIZE << 1) + (ICON_SIZE >> 1)) /* aka 2.5x */
#define ICON_PAD 8
-#define CELL_SIZE 96
#define STEP_ANIMATION 6
#define ZOOM_MAX 1.75
#define DEFAULT_FONT_SIZE 12
@@ -69,6 +65,7 @@ struct globalCfg {
char *osd_font;
char *osd_color;
char *shadow_color;
+ int icon_size;
int font_size;
char *desktop_right;
char *desktop_right_icon;
--- a/src/minidesk_desktop_view.c Wed Apr 16 11:01:37 2008 +0200
+++ b/src/minidesk_desktop_view.c Sun Apr 27 10:39:27 2008 +0200
@@ -42,6 +42,9 @@ extern int global_lock_launching_applica
extern int global_lock_launching_application;
extern t_minideskCfg cfg;
+#define CELL_SIZE (cfg.global.icon_size*2)
+#define SCREEN_MARGIN_BOTTOM CELL_SIZE
+
/*
* Local variables
*/
@@ -442,7 +445,7 @@ minidesk_desktop_view_load_pixmap(struct
/* Load the pixmap and the max using the default resolution */
if (filename)
- pixbuf = minidesk_get_pixbuf_from_file(filename, ICON_SIZE);
+ pixbuf = minidesk_get_pixbuf_from_file(filename, cfg.global.icon_size);
if (pixbuf == NULL)
pixbuf = gdk_pixbuf_new_from_xpm_data(icon_missing);
@@ -458,7 +461,7 @@ minidesk_desktop_view_load_pixmap(struct
scale_zoom=1.0;
while (scale_zoom<ZOOM_MAX)
{
- size_wanted = (int)((float)ICON_SIZE*scale_zoom);
+ size_wanted = (int)((float)cfg.global.icon_size*scale_zoom);
icon->pixbufs[i] = gdk_pixbuf_scale_simple(pixbuf,
size_wanted,
@@ -501,7 +504,7 @@ minidesk_desktop_view_load_dummy_icon(st
scale_zoom=1.0;
while (scale_zoom<ZOOM_MAX)
{
- size_wanted = (int)((float)ICON_SIZE*scale_zoom);
+ size_wanted = (int)((float)cfg.global.icon_size*scale_zoom);
pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB,
TRUE,
8,
@@ -551,7 +554,7 @@ updateClock(gpointer data)
priv->tooltip = g_strdup(string_date);
/* Calculate new pixbufs */
- size = ICON_SIZE;
+ size = cfg.global.icon_size;
for (i=0; i<STEP_ANIMATION; i++) {
oldPixbuf = icon->pixbufs[i];
oldPixbufMask = icon->pixbufs_mask[i];
@@ -595,7 +598,7 @@ minidesk_desktop_view_load_svg(struct ic
float scale_zoom;
int icon_size;
- icon_size = ICON_SIZE + 20;
+ icon_size = cfg.global.icon_size + 20;
RsvgHandle *rsvg = minidesk_get_rsvg_from_file(filename);
if (rsvg == NULL)
@@ -619,7 +622,7 @@ minidesk_desktop_view_load_svg(struct ic
gtk_container_add(GTK_CONTAINER(window), drawingArea);
pango_layout_set_markup(desktop_view.pango_layout, priv->datas.label, -1);
- pango_layout_set_width(desktop_view.pango_layout, PANGO_SCALE*ICON_SIZE);
+ pango_layout_set_width(desktop_view.pango_layout, PANGO_SCALE*cfg.global.icon_size);
pango_layout_set_ellipsize(desktop_view.pango_layout, PANGO_ELLIPSIZE_MIDDLE);
pango_layout_get_pixel_size(desktop_view.pango_layout, &text_width, &text_height);
@@ -656,7 +659,7 @@ minidesk_desktop_view_load_svg(struct ic
} else
#endif
{
- pixbuf = minidesk_rsvg_rescale(rsvg, ICON_SIZE);
+ pixbuf = minidesk_rsvg_rescale(rsvg, cfg.global.icon_size);
icon->pixbufs[0] = pixbuf;
gdk_pixbuf_render_pixmap_and_mask_for_colormap(
@@ -672,7 +675,7 @@ minidesk_desktop_view_load_svg(struct ic
scale_zoom=1.0;
while (scale_zoom<ZOOM_MAX)
{
- rsvg_size_wanted = (int)((float)ICON_SIZE*scale_zoom);
+ rsvg_size_wanted = (int)((float)cfg.global.icon_size*scale_zoom);
icon->pixbufs[i] = minidesk_rsvg_rescale(rsvg, rsvg_size_wanted);
gdk_pixbuf_render_pixmap_and_mask_for_colormap(icon->pixbufs[i],
gdk_rgb_get_colormap(),
--- a/src/minidesk_dock.c Wed Apr 16 11:01:37 2008 +0200
+++ b/src/minidesk_dock.c Sun Apr 27 10:39:27 2008 +0200
@@ -47,7 +47,7 @@
#endif
#define INFLUENCE 150
-#define START_INFLUENCE ((ICON_SIZE*2)+ICON_PAD)
+#define START_INFLUENCE ((cfg.global.icon_size*2)+ICON_PAD)
#define FONT_SCALE_FACTOR_M 1.0
#define FONT_SCALE_FACTOR_S 0.7
@@ -206,6 +206,14 @@ minidesk_dock_refresh(void)
screen_width = gdk_screen_get_width(screen);
screen_height = gdk_screen_get_height(screen);
+ /* Icon size depends of height of the screen */
+ if (screen_width < 800 || screen_height <= 480)
+ cfg.global.icon_size = 24;
+ else if (screen_width == 1024 && screen_height == 768)
+ cfg.global.icon_size = 32;
+ else if (screen_width > 1024 && screen_height > 768)
+ cfg.global.icon_size = 48;
+
minidesk_dock_calculate_max_size(&global_dock, screen_width, screen_height);
minidesk_dock_calculate_position(&global_dock, screen_width, screen_height);
minidesk_dock_get_background(&global_dock);
@@ -262,7 +270,7 @@ minidesk_addicon_event(int argc, char **
screen = gdk_screen_get_default();
screen_width = gdk_screen_get_width(screen);
- if (global_dock.width + ICON_SIZE + ICON_PAD > screen_width)
+ if (global_dock.width + cfg.global.icon_size + ICON_PAD > screen_width)
{
minidesk_dock_show_dialog_error(_("Too many shortcuts on the dock panel"));
return;
@@ -434,11 +442,16 @@ minidesk_dock_init(void)
screen_width = gdk_screen_get_width(screen);
screen_height = gdk_screen_get_height(screen);
-
memset(&global_dock, 0, sizeof(struct dock));
if (!cfg.global.show_dock)
return 0;
+
+ /* Icon size depends of height of the screen */
+ if ((screen_width < 800 || screen_height <= 480) && cfg.global.icon_size > 40)
+ cfg.global.icon_size = 24;
+ else if (screen_width == 1024 && screen_height == 768)
+ cfg.global.icon_size = 32;
if (cfg.dock.position)
{
@@ -526,14 +539,14 @@ minidesk_dock_load_icon_from_filename(co
if (filename) {
/* Load icon */
if (strstr(filename, ".svg") == NULL) {
- pixbuf = minidesk_get_pixbuf_from_file(filename, ICON_SIZE*2);
+ pixbuf = minidesk_get_pixbuf_from_file(filename, cfg.global.icon_size*2);
}
#if HAVE_LIBRSVG
else {
icon->is_svg = 1;
icon->rsvg = minidesk_get_rsvg_from_file(filename);
if (icon->rsvg != NULL) {
- pixbuf = minidesk_rsvg_rescale(icon->rsvg, ICON_SIZE*2);
+ pixbuf = minidesk_rsvg_rescale(icon->rsvg, cfg.global.icon_size*2);
if (pixbuf == NULL) {
rsvg_handle_free(icon->rsvg);
icon->rsvg = NULL;
@@ -608,12 +621,12 @@ minidesk_dock_calculate_max_size(struct
trace("Size of the font: %dx%d\n", text_width, text_height);
- dock->width = g_list_length(dock->entries) * (ICON_SIZE + ICON_PAD);
+ dock->width = g_list_length(dock->entries) * (cfg.global.icon_size + ICON_PAD);
dock->width += START_INFLUENCE*2;
- dock->height = (ICON_SIZE * 2.0) + text_height*2;
+ dock->height = (cfg.global.icon_size * 2.0) + text_height*2;
dock->icon_x_start = START_INFLUENCE;
- dock->icon_x_finish = START_INFLUENCE + g_list_length(dock->entries) * (ICON_SIZE + ICON_PAD);
+ dock->icon_x_finish = START_INFLUENCE + g_list_length(dock->entries) * (cfg.global.icon_size + ICON_PAD);
if (dock->width > screen_width)
{
@@ -828,7 +841,7 @@ minidesk_dock_recalculate_icon_position(
/* icon_x_position is the position of the (current) icon when the dock is not zoomed.
* The position is calculated using the center of the icon */
- icon_x_position = START_INFLUENCE + (ICON_SIZE/2);
+ icon_x_position = START_INFLUENCE + (cfg.global.icon_size/2);
for (listElt = g_list_first(dock->entries); listElt; listElt = g_list_next(listElt)) {
int new_icon_size;
@@ -837,13 +850,13 @@ minidesk_dock_recalculate_icon_position(
scaled_x = scale_position(icon_x_position, mouse_x, dock->magnitude);
zoom_factor = scale(icon_x_position, mouse_x, dock->magnitude);
- new_icon_size = ICON_SIZE * zoom_factor;
-
- icon->x = scaled_x - (ICON_SIZE/2)*zoom_factor;
+ new_icon_size = cfg.global.icon_size * zoom_factor;
+
+ icon->x = scaled_x - (cfg.global.icon_size/2)*zoom_factor;
icon->y = (dock->height - new_icon_size)-ICON_PAD;
icon->zoom_factor = zoom_factor;
- icon_x_position += ICON_SIZE + ICON_PAD;
+ icon_x_position += cfg.global.icon_size + ICON_PAD;
if (dock->mouse_x >= icon->x) dock->iconeSelected = icon;
}
}
@@ -895,7 +908,7 @@ on_expose_event(GtkWidget *widget, GdkEv
struct dock_entry *icon = listElt->data;
GdkPixbuf *pixbuf_scaled;
int text_width, text_height;
- int icon_size = ICON_SIZE * icon->zoom_factor;
+ int icon_size = cfg.global.icon_size * icon->zoom_factor;
if (icon->app->flags & APP_CLOCK) {
time_t timestamp;
@@ -1093,7 +1106,7 @@ on_motion_notify_event(GtkWidget *w
{
trace("inside\n");
/* If the mouse is the sphere of influence */
- if (dock->magnitude == 0 && dock->timer_id == 0 && mouse_y>= ICON_SIZE/2)
+ if (dock->magnitude == 0 && dock->timer_id == 0 && mouse_y>= cfg.global.icon_size/2)
dock->timer_id = g_timeout_add(20, grow_up, data);
else if (dock->magnitude == 1.0)
{
@@ -1180,7 +1193,7 @@ on_button_press_event(GtkWidget *widget,
return TRUE;
icon = global_dock.iconeSelected;
- if (icon && event->x >= icon->x && event->x <= (icon->x + ICON_SIZE*icon->zoom_factor)) {
+ if (icon && event->x >= icon->x && event->x <= (icon->x + cfg.global.icon_size*icon->zoom_factor)) {
if (dock->timer_id) {
g_source_remove(dock->timer_id);
dock->timer_id = 0;
--- a/src/minidesk_settings.c Wed Apr 16 11:01:37 2008 +0200
+++ b/src/minidesk_settings.c Sun Apr 27 10:39:27 2008 +0200
@@ -188,12 +188,16 @@ load_configuration_file(const char *conf
return FALSE;
}
+ /* Default value */
+ cfg.global.icon_size = 48;
+
/* global section */
ini_get_string(INIfile, "global", "wallpaper", &cfg.global.wallpaper);
ini_get_boolean(INIfile, "global", "show_dock", &cfg.global.show_dock);
ini_get_string(INIfile, "global", "osd_font", &cfg.global.osd_font);
ini_get_string(INIfile, "global", "osd_color", &cfg.global.osd_color);
ini_get_integer(INIfile, "global", "font_size", &cfg.global.font_size);
+ ini_get_integer(INIfile, "global", "icon_size", &cfg.global.icon_size);
ini_get_string(INIfile, "global", "desktop_right", &cfg.global.desktop_right);
ini_get_string(INIfile, "global", "desktop_right_icon", &cfg.global.desktop_right_icon);
ini_get_string(INIfile, "global", "desktop_left", &cfg.global.desktop_left);
@@ -394,6 +398,7 @@ save_configuration(void)
saveLineString(fd, "osd_font", cfg.global.osd_font);
saveLineString(fd, "osd_color", cfg.global.osd_color);
saveLineInteger(fd, "font_size", cfg.global.font_size);
+ //saveLineInteger(fd, "icon_size", cfg.global.icon_size);
saveLineString(fd, "desktop_right", cfg.global.desktop_right);
saveLineString(fd, "desktop_right_icon", cfg.global.desktop_right_icon);
saveLineString(fd, "desktop_left", cfg.global.desktop_left);