1 #ifndef RADIAL_MENU_RVIZ_RADIAL_IMAGE_DRAWER_HPP 2 #define RADIAL_MENU_RVIZ_RADIAL_IMAGE_DRAWER_HPP 17 #include <QPaintDevice> 44 if (!
model_->isEnabled()) {
61 QImage alpha_image(image->size(), QImage::Format_Grayscale8);
62 alpha_image.fill(QColor(0, 0, 0));
65 QPainter rgb_painter(image), alpha_painter(&alpha_image);
66 rgb_painter.setRenderHint(QPainter::Antialiasing);
67 alpha_painter.setRenderHint(QPainter::Antialiasing);
71 level = level->parentLevel()) {
79 image->setAlphaChannel(alpha_image);
85 const QPoint image_center(
deviceCenter(*rgb_painter->device()));
86 const int n_sibilings(level->numSibilings()), depth(level->depth());
89 if (n_sibilings > 0) {
92 alpha_painter->setPen(bg_alpha);
93 alpha_painter->setBrush(bg_alpha);
97 rect.moveCenter(image_center);
100 for (
int sid = 0; sid < n_sibilings; ++sid) {
106 const bool is_selected(
model_->isSelected(item)), is_pointed(
model_->isPointed(item));
107 if (is_selected && is_pointed) {
109 rgb_painter->setPen(QPen(rgb));
110 rgb_painter->setBrush(QBrush(rgb));
111 }
else if (is_selected && !is_pointed) {
114 }
else if (!is_selected && is_pointed) {
116 rgb_painter->setPen(QPen(rgb));
117 rgb_painter->setBrush(QBrush(rgb));
124 const int start_angle(center_angle - span_angle / 2);
125 rgb_painter->drawPie(rect, start_angle, span_angle);
126 alpha_painter->drawPie(rect, start_angle, span_angle);
133 for (
int sid = 0; sid < n_sibilings; ++sid) {
134 alpha_painter->drawLine(image_center,
142 alpha_painter->setBrush(QColor(0, 0, 0));
145 rect.moveCenter(image_center);
146 alpha_painter->drawEllipse(rect);
154 const QPoint image_center(
deviceCenter(*rgb_painter->device()));
156 const QRect rect(image_center - relative_corner, image_center + relative_corner);
161 rgb_painter->drawEllipse(rect);
164 alpha_painter->setPen(bg_alpha);
165 alpha_painter->setBrush(bg_alpha);
166 alpha_painter->drawEllipse(rect);
168 alpha_painter->setPen(QColor(0, 0, 0));
169 alpha_painter->setBrush(QColor(0, 0, 0));
170 alpha_painter->drawEllipse(rect);
176 QPainter painter(image);
178 painter.setRenderHint(QPainter::TextAntialiasing);
179 painter.setRenderHint(QPainter::Antialiasing);
182 level = level->parentLevel()) {
190 const QPoint image_center(
deviceCenter(*painter->device()));
191 const int n_sibilings(level->numSibilings()), depth(level->depth());
194 for (
int sid = 0; sid < n_sibilings; ++sid) {
204 rect.translate(image_center);
206 const bool is_selected(
model_->isSelected(item)), is_pointed(
model_->isPointed(item));
207 if (is_selected && is_pointed) {
210 }
else if (is_selected && !is_pointed) {
212 }
else if (!is_selected && is_pointed) {
234 switch (item->displayType()) {
236 painter->drawText(rect, Qt::AlignCenter | Qt::TextWordWrap,
237 QString::fromStdString(item->name()));
240 painter->drawText(rect, Qt::AlignCenter | Qt::TextWordWrap,
241 QString::fromStdString(item->altTxt()));
249 << item->name() <<
"' has unexpected type (" 250 <<
static_cast< int >(item->displayType()) <<
")");
261 return QSize(len, len);
266 return (n_sibilings == 0) ? 0 : (360 * 16 * sid / n_sibilings + 90 * 16);
271 return (n_sibilings == 0) ? 0 : (360 * 16 / n_sibilings);
278 const double th((n_sibilings == 0) ? 0. : (2. * M_PI * (0.5 + sid) / n_sibilings));
282 const double u(radius * std::cos(th)), v(radius * std::sin(th));
284 return QPoint(-static_cast< int >(v), -static_cast< int >(u));
290 const double th((n_sibilings == 0) ? 0. : (2. * M_PI * sid / n_sibilings));
294 const double u(radius * std::cos(th)), v(radius * std::sin(th));
296 return QPoint(-static_cast< int >(v), -static_cast< int >(u));
300 return QPoint(device.width() / 2, device.height() / 2);
304 const QColor color1(rgb1), color2(rgb2);
305 return QColor((color1.red() + color2.red()) / 2, (color1.green() + color2.green()) / 2,
306 (color1.blue() + color2.blue()) / 2)
310 static QColor
makeColor(
const QRgb &rgb,
const int alpha) {
313 color.setAlpha(alpha);
#define ROS_ERROR_STREAM(args)
QPixmap loadPixmap(QString url, bool fill_cache)