~ubuntu-branches/ubuntu/trusty/nautilus/trusty-proposed

« back to all changes in this revision

Viewing changes to libnautilus-private/nautilus-icon-info.c

  • Committer: Package Import Robot
  • Author(s): Tim Lunn
  • Date: 2014-01-02 16:50:06 UTC
  • mfrom: (1.17.43)
  • Revision ID: package-import@ubuntu.com-20140102165006-1ghk9ropzitdc8pp
Tags: 1:3.10.1-0ubuntu1
* New upstream release
* debian/control.in: bump depend on gtk+ 3.9.11
* debian/patches:
  - Dropped git patches, that are included in new version
  - 06_never_exec_nonexec_launchers.patch, refreshed
  - disconnect-extra-location-widgets.patch, dropped included in new version
  - 16_unity_new_documents.patch, refreshed
  - ubuntu_show_titlebar.patch, disable CSD titlebar on non-GNOME sessions
  - ubuntu_titlebar_css.patch, theme fixes (LP: #1272602)

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
        GdkPoint *attach_points;
41
41
        char *display_name;
42
42
        char *icon_name;
 
43
 
 
44
        gint  orig_scale;
43
45
};
44
46
 
45
47
struct _NautilusIconInfoClass
118
120
}
119
121
 
120
122
NautilusIconInfo *
121
 
nautilus_icon_info_new_for_pixbuf (GdkPixbuf *pixbuf)
 
123
nautilus_icon_info_new_for_pixbuf (GdkPixbuf *pixbuf,
 
124
                                   gint       scale)
122
125
{
123
126
        NautilusIconInfo *icon;
124
127
 
126
129
 
127
130
        if (pixbuf) {
128
131
                icon->pixbuf = g_object_ref (pixbuf);
129
 
        } 
 
132
        }
 
133
 
 
134
        icon->orig_scale = scale;
130
135
        
131
136
        return icon;
132
137
}
133
138
 
134
139
static NautilusIconInfo *
135
 
nautilus_icon_info_new_for_icon_info (GtkIconInfo *icon_info)
 
140
nautilus_icon_info_new_for_icon_info (GtkIconInfo *icon_info,
 
141
                                      gint         scale)
136
142
{
137
143
        NautilusIconInfo *icon;
138
144
        GdkPoint *points;
163
169
                }
164
170
                icon->icon_name = basename;
165
171
        }
 
172
 
 
173
        icon->orig_scale = scale;
166
174
        
167
175
        return icon;
168
176
}
326
334
 
327
335
NautilusIconInfo *
328
336
nautilus_icon_info_lookup (GIcon *icon,
329
 
                           int size)
 
337
                           int size,
 
338
                           int scale)
330
339
{
331
340
        NautilusIconInfo *icon_info;
332
341
        GdkPixbuf *pixbuf;
354
363
 
355
364
                pixbuf = NULL;
356
365
                stream = g_loadable_icon_load (G_LOADABLE_ICON (icon),
357
 
                                               size,
 
366
                                               size * scale,
358
367
                                               NULL, NULL, NULL);
359
368
                if (stream) {
360
369
                        pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream,
361
 
                                                                      size, size, TRUE,
 
370
                                                                      size * scale, size * scale,
 
371
                                                                      TRUE,
362
372
                                                                      NULL, NULL);
363
373
                        g_input_stream_close (stream, NULL, NULL);
364
374
                        g_object_unref (stream);
365
375
                }
366
376
 
367
 
                icon_info = nautilus_icon_info_new_for_pixbuf (pixbuf);
 
377
                icon_info = nautilus_icon_info_new_for_pixbuf (pixbuf, scale);
368
378
 
369
379
                key = loadable_icon_key_new (icon, size);
370
380
                g_hash_table_insert (loadable_icon_cache, key, icon_info);
389
399
                names = g_themed_icon_get_names (G_THEMED_ICON (icon));
390
400
 
391
401
                icon_theme = gtk_icon_theme_get_default ();
392
 
                gtkicon_info = gtk_icon_theme_choose_icon (icon_theme, (const char **)names, size, 0);
 
402
                gtkicon_info = gtk_icon_theme_choose_icon_for_scale (icon_theme, (const char **)names,
 
403
                                                                     size, scale, 0);
393
404
 
394
405
                if (gtkicon_info == NULL) {
395
 
                        return nautilus_icon_info_new_for_pixbuf (NULL);
 
406
                        return nautilus_icon_info_new_for_pixbuf (NULL, scale);
396
407
                }
397
408
 
398
409
                filename = gtk_icon_info_get_filename (gtkicon_info);
399
410
                if (filename == NULL) {
400
411
                        g_object_unref (gtkicon_info);
401
 
                        return nautilus_icon_info_new_for_pixbuf (NULL);
 
412
                        return nautilus_icon_info_new_for_pixbuf (NULL, scale);
402
413
                }
403
414
 
404
415
                lookup_key.filename = (char *)filename;
410
421
                        return g_object_ref (icon_info);
411
422
                }
412
423
                
413
 
                icon_info = nautilus_icon_info_new_for_icon_info (gtkicon_info);
 
424
                icon_info = nautilus_icon_info_new_for_icon_info (gtkicon_info, scale);
414
425
                
415
426
                key = themed_icon_key_new (filename, size);
416
427
                g_hash_table_insert (themed_icon_cache, key, icon_info);
422
433
                GdkPixbuf *pixbuf;
423
434
                GtkIconInfo *gtk_icon_info;
424
435
 
425
 
                gtk_icon_info = gtk_icon_theme_lookup_by_gicon (gtk_icon_theme_get_default (),
426
 
                                                                icon,
427
 
                                                                size,
428
 
                                                                GTK_ICON_LOOKUP_GENERIC_FALLBACK);
 
436
                gtk_icon_info = gtk_icon_theme_lookup_by_gicon_for_scale (gtk_icon_theme_get_default (),
 
437
                                                                          icon,
 
438
                                                                          size,
 
439
                                                                          scale,
 
440
                                                                          GTK_ICON_LOOKUP_GENERIC_FALLBACK);
429
441
                if (gtk_icon_info != NULL) {
430
442
                        pixbuf = gtk_icon_info_load_icon (gtk_icon_info, NULL);
431
443
                        g_object_unref (gtk_icon_info);
433
445
                        pixbuf = NULL;
434
446
                }
435
447
 
436
 
                icon_info = nautilus_icon_info_new_for_pixbuf (pixbuf);
 
448
                icon_info = nautilus_icon_info_new_for_pixbuf (pixbuf, scale);
437
449
 
438
450
                if (pixbuf != NULL) {
439
451
                        g_object_unref (pixbuf);
445
457
 
446
458
NautilusIconInfo *
447
459
nautilus_icon_info_lookup_from_name (const char *name,
448
 
                                     int size)
 
460
                                     int size,
 
461
                                     int scale)
449
462
{
450
463
        GIcon *icon;
451
464
        NautilusIconInfo *info;
452
465
 
453
466
        icon = g_themed_icon_new (name);
454
 
        info = nautilus_icon_info_lookup (icon, size);
 
467
        info = nautilus_icon_info_lookup (icon, size, scale);
455
468
        g_object_unref (icon);
456
469
        return info;
457
470
}
458
471
 
459
472
NautilusIconInfo *
460
473
nautilus_icon_info_lookup_from_path (const char *path,
461
 
                                     int size)
 
474
                                     int size,
 
475
                                     int scale)
462
476
{
463
477
        GFile *icon_file;
464
478
        GIcon *icon;
466
480
 
467
481
        icon_file = g_file_new_for_path (path);
468
482
        icon = g_file_icon_new (icon_file);
469
 
        info = nautilus_icon_info_lookup (icon, size);
 
483
        info = nautilus_icon_info_lookup (icon, size, scale);
470
484
        g_object_unref (icon);
471
485
        g_object_unref (icon_file);
472
486
        return info;
527
541
 
528
542
        if (pixbuf == NULL)
529
543
          return NULL;
530
 
          
531
 
        w = gdk_pixbuf_get_width (pixbuf);
532
 
        h = gdk_pixbuf_get_height (pixbuf);
 
544
 
 
545
        w = gdk_pixbuf_get_width (pixbuf) / icon->orig_scale;
 
546
        h = gdk_pixbuf_get_height (pixbuf) / icon->orig_scale;
533
547
        s = MAX (w, h);
534
548
        if (s == forced_size) {
535
549
                return pixbuf;
554
568
 
555
569
        pixbuf = nautilus_icon_info_get_pixbuf (icon);
556
570
 
557
 
        w = gdk_pixbuf_get_width (pixbuf);
558
 
        h = gdk_pixbuf_get_height (pixbuf);
 
571
        w = gdk_pixbuf_get_width (pixbuf) / icon->orig_scale;
 
572
        h = gdk_pixbuf_get_height (pixbuf) / icon->orig_scale;
559
573
        s = MAX (w, h);
560
574
        if (s == forced_size) {
561
575
                return pixbuf;