1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
From 8c868b20f3e19871f3f09e972cd20dbe3640084a Mon Sep 17 00:00:00 2001
From: Evangelos Foutras <evangelos@foutrelis.com>
Date: Wed, 6 Mar 2013 04:27:07 +0200
Subject: [PATCH] Revert "SVG images are no longer pixilated when scaled up"
This reverts commit ebad377e5cd067cec9f2b402dff4991ddc4cc3b5.
---
src/xfce-backdrop.c | 38 +++++++++++++++++---------------------
1 file changed, 17 insertions(+), 21 deletions(-)
diff --git a/src/xfce-backdrop.c b/src/xfce-backdrop.c
index 9a4d7db..b07492f 100644
--- a/src/xfce-backdrop.c
+++ b/src/xfce-backdrop.c
@@ -933,10 +933,17 @@ xfce_backdrop_get_pixbuf(XfceBackdrop *backdrop)
g_return_val_if_fail(XFCE_IS_BACKDROP(backdrop), NULL);
- if(backdrop->priv->show_image && backdrop->priv->image_path)
- gdk_pixbuf_get_file_info(backdrop->priv->image_path, &iw, &ih);
-
+ if(backdrop->priv->show_image && backdrop->priv->image_path) {
+ image = gdk_pixbuf_new_from_file(backdrop->priv->image_path, NULL);
+ if(image) {
+ iw = gdk_pixbuf_get_width(image);
+ ih = gdk_pixbuf_get_height(image);
+ }
+ }
+
if(backdrop->priv->width == 0 || backdrop->priv->height == 0) {
+ if(!image)
+ return NULL;
w = iw;
h = ih;
} else {
@@ -956,9 +963,7 @@ xfce_backdrop_get_pixbuf(XfceBackdrop *backdrop)
final_image = create_solid(&backdrop->priv->color1, w, h, FALSE, 0xff);
}
- /*check if the file exists,
- *and if it doesn't then make the background the single colour*/
- if(!g_file_test(backdrop->priv->image_path, G_FILE_TEST_EXISTS)) {
+ if(!image) {
if(backdrop->priv->brightness != 0)
final_image = adjust_brightness(final_image, backdrop->priv->brightness);
@@ -996,7 +1001,6 @@ xfce_backdrop_get_pixbuf(XfceBackdrop *backdrop)
switch(istyle) {
case XFCE_BACKDROP_IMAGE_CENTERED:
- image = gdk_pixbuf_new_from_file(backdrop->priv->image_path, NULL);
dx = MAX((w - iw) / 2, 0);
dy = MAX((h - ih) / 2, 0);
xo = MIN((w - iw) / 2, dx);
@@ -1007,7 +1011,6 @@ xfce_backdrop_get_pixbuf(XfceBackdrop *backdrop)
break;
case XFCE_BACKDROP_IMAGE_TILED:
- image = gdk_pixbuf_new_from_file(backdrop->priv->image_path, NULL);
tmp = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, w, h);
for(i = 0; (i * iw) < w; i++) {
for(j = 0; (j * ih) < h; j++) {
@@ -1030,10 +1033,10 @@ xfce_backdrop_get_pixbuf(XfceBackdrop *backdrop)
break;
case XFCE_BACKDROP_IMAGE_STRETCHED:
- image = gdk_pixbuf_new_from_file_at_scale(
- backdrop->priv->image_path, w, h, FALSE, NULL);
+ xscale = (gdouble)w / iw;
+ yscale = (gdouble)h / ih;
gdk_pixbuf_composite(image, final_image, 0, 0, w, h,
- 0, 0, 1, 1, interp, 255);
+ 0, 0, xscale, yscale, interp, 255);
break;
case XFCE_BACKDROP_IMAGE_SCALED:
@@ -1050,12 +1053,9 @@ xfce_backdrop_get_pixbuf(XfceBackdrop *backdrop)
}
dx = xo;
dy = yo;
-
- image = gdk_pixbuf_new_from_file_at_scale(
- backdrop->priv->image_path, iw * xscale,
- ih * yscale, TRUE, NULL);
+
gdk_pixbuf_composite(image, final_image, dx, dy,
- iw * xscale, ih * yscale, xo, yo, 1, 1,
+ iw * xscale, ih * yscale, xo, yo, xscale, yscale,
interp, 255);
break;
@@ -1071,12 +1071,8 @@ xfce_backdrop_get_pixbuf(XfceBackdrop *backdrop)
xo = 0;
yo = (h - (ih * yscale)) * 0.5;
}
-
- image = gdk_pixbuf_new_from_file_at_scale(
- backdrop->priv->image_path, iw * xscale,
- ih * yscale, TRUE, NULL);
gdk_pixbuf_composite(image, final_image, 0, 0,
- w, h, xo, yo, 1, 1, interp, 255);
+ w, h, xo, yo, xscale, yscale, interp, 255);
break;
default:
--
1.8.1.5
|