32 #include <boost/filesystem.hpp>
36 #include <QPixmapCache>
41 boost::filesystem::path
getPath(
const QString& url)
43 boost::filesystem::path path;
45 if (url.indexOf(
"package://", 0, Qt::CaseInsensitive) == 0)
47 QString package_name = url.section(
'/', 2, 2);
48 QString file_name = url.section(
'/', 3);
50 path = path / file_name.toStdString();
52 else if (url.indexOf(
"file://", 0, Qt::CaseInsensitive) == 0)
54 path = url.section(
'/', 2).toStdString();
58 ROS_ERROR(
"Invalid or unsupported URL: '%s'", url.toStdString().c_str());
70 if (QPixmapCache::find(url, &pixmap))
75 boost::filesystem::path path =
getPath(url);
79 if (boost::filesystem::exists(path))
81 ROS_DEBUG_NAMED(
"load_resource",
"Loading '%s'", path.string().c_str());
82 if (!pixmap.load(QString::fromStdString(path.string())))
84 ROS_ERROR(
"Could not load pixmap '%s'", path.string().c_str());
90 QPixmapCache::insert(url, pixmap);
98 return QCursor(Qt::ArrowCursor);
104 if (icon.width() == 0 || icon.height() == 0)
106 ROS_ERROR(
"Could not load pixmap '%s' -- using default cursor instead.", url.toStdString().c_str());
109 QString cache_key = url +
".cursor";
113 QCursor
makeIconCursor(
const QPixmap& icon,
const QString& cache_key,
bool fill_cache)
117 if (QPixmapCache::find(cache_key, &cursor_img))
119 return QCursor(cursor_img, 0, 0);
122 QPixmap base_cursor =
loadPixmap(
"package://rviz/icons/cursor.svg", fill_cache);
124 const int cursor_size = 32;
126 cursor_img = QPixmap(cursor_size, cursor_size);
127 cursor_img.fill(QColor(0, 0, 0, 0));
130 QPainter painter(&cursor_img);
136 if (draw_x + icon.width() > cursor_size)
138 draw_x = cursor_size - icon.width();
140 if (draw_y + icon.height() > cursor_size)
142 draw_y = cursor_size - icon.height();
145 painter.drawPixmap(0, 0, base_cursor);
146 painter.drawPixmap(draw_x, draw_y, icon);
150 QPixmapCache::insert(cache_key, cursor_img);
153 return QCursor(cursor_img, 1, 1);