File: pixmap.cc

package info (click to toggle)
littlewizard 1.2.2-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 3,400 kB
  • ctags: 1,127
  • sloc: sh: 9,388; cpp: 7,685; xml: 420; makefile: 384; awk: 40; ansic: 38
file content (118 lines) | stat: -rw-r--r-- 3,143 bytes parent folder | download | duplicates (4)
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
109
110
111
112
113
114
115
116
117
118
/*
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 */

 /* (C) Marcin Kwadrans <quarter@users.sourceforge.net> */

#include "include/support.h"
#include "include/pixmap.h"
#include "include/environment.h"

/*! \brief Konstruktor

	Tworzy ikonę
*/	
LWPixmap::LWPixmap (): name(NULL), pixbuf(NULL)
{
}

/*! \brief Destruktor

	Niszczy ikonę
*/	
LWPixmap::~LWPixmap ()
{
	if (pixbuf != NULL) 
		g_object_unref (G_OBJECT(pixbuf));
	
	if (name != NULL)
		g_free (name);
}

/*! \brief Konstruktor kopiujący

	Kopiuje ikonę
	\param pixmap Kopiowana ikona
*/	
LWPixmap::LWPixmap (const LWPixmap *pixmap)
{
	pixbuf = ((LWPixmap *) pixmap)->getPixbuf();
	name = g_strdup (((LWPixmap *) pixmap)->getName());
}

/*! \brief Odtwarza ikonę z węzła XML

	Odtwarza ikonę na podstawie opisu zawartego w węźle drzewa XML
	\param node Węzeł na podstawie zostanie dokonana rekonstrukcja
*/
void LWPixmap::restoreFromXML (xmlNode *node)
{
GError *error=NULL;

	g_return_if_fail (!xmlStrcasecmp (node->name, (xmlChar *) "Pixmap"));
	
	/* Pobieranie atrybutu name, wynik jest zaalakowany w pamieci */
	name = (gchar *) xmlGetProp (node, (xmlChar *) "name");
	
	/* Pobieranie atrybutu src, wynik jest zaalakowany w pamieci */
	xmlChar *srcutf = xmlGetProp (node, (xmlChar *) "src");
	
	/* Dekodowanie nazwy pliku do kodowania uzywanego w systemie plików */
	gchar *src = g_filename_from_utf8 ((gchar *) srcutf, -1, NULL, NULL, NULL);
	
	/* Zwolnianie pamięci zaalakowanej podczas pobierania atrybutu */
	xmlFree (srcutf);

	/* Zbudowanie pełnej nazwy ze ścieżką do pliku */
	gchar *filename = LWEnvironment::buildPixmapFilename (src);

	/* Zwonienie pamięci zaalakowanej podczas konwersji kodowania */
	g_free (src);
	
	/* Odczytanie pliku obrazka z dysku */
	pixbuf = gdk_pixbuf_new_from_file (filename, &error);

	/* Upewnij się, że obrazek jest w odpowiedniej rozdzielczości */
	if ((ICON_XSIZE != gdk_pixbuf_get_width(pixbuf)) || 
		 (ICON_YSIZE != gdk_pixbuf_get_height(pixbuf))) {
			GdkPixbuf *tmp = gdk_pixbuf_scale_simple (pixbuf, ICON_XSIZE, ICON_YSIZE, GDK_INTERP_HYPER);
			g_object_unref (pixbuf);
			pixbuf = tmp;
		 }

	/* Zwonienie pamięci zaalakowanej podczas budowania ścieżki */
	g_free (filename);
}

/*! \brief Pobranie danych ikony

	Pobiera dane ikony w postaci takiej jaka jest używana wewnętrznie
	przez bibliotekę Gdk-Pixbuf
	\return Zwrócone dane ikony
*/	
GdkPixbuf *LWPixmap::getPixbuf ()
{
	g_return_val_if_fail (pixbuf != NULL, NULL);
	
	return pixbuf;
}

/*! \brief Pobranie nazwy ikony

	Pobiera związaną z ikoną nazwę
	\return Zwrócona nazwa
*/	
gchar *LWPixmap::getName ()
{
	g_return_val_if_fail (name != NULL, NULL);

	return name;
}