/src/libtomahawk/playlist/topbar/clearbutton.cpp

http://github.com/tomahawk-player/tomahawk · C++ · 92 lines · 49 code · 12 blank · 31 comment · 4 complexity · d42227a5721f2fc18153bfb9faaa0aac MD5 · raw file

  1. /**
  2. * Copyright (c) 2009, Benjamin C. Meyer <ben@meyerhome.net>
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * 3. Neither the name of the Benjamin Meyer nor the names of its contributors
  13. * may be used to endorse or promote products derived from this software
  14. * without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  17. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  20. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  21. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  22. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  23. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  24. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  25. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  26. * SUCH DAMAGE.
  27. */
  28. #include "clearbutton.h"
  29. #include <qpainter.h>
  30. ClearButton::ClearButton(QWidget *parent)
  31. : QAbstractButton(parent)
  32. {
  33. setCursor(Qt::ArrowCursor);
  34. setFocusPolicy(Qt::NoFocus);
  35. setToolTip(tr("Clear"));
  36. setMinimumSize(22, 22);
  37. setVisible(false);
  38. #if QT_VERSION >= 0x040600
  39. // First check for a style icon, current KDE provides one
  40. if (m_styleImage.isNull()) {
  41. QLatin1String iconName = (layoutDirection() == Qt::RightToLeft)
  42. ? QLatin1String("edit-clear-locationbar-ltr")
  43. : QLatin1String("edit-clear-locationbar-rtl");
  44. QIcon icon = QIcon::fromTheme(iconName);
  45. if (!icon.isNull())
  46. m_styleImage = icon.pixmap(16, 16).toImage();
  47. }
  48. #endif
  49. }
  50. void ClearButton::textChanged(const QString &text)
  51. {
  52. setVisible(!text.isEmpty());
  53. }
  54. void ClearButton::paintEvent(QPaintEvent *event)
  55. {
  56. Q_UNUSED(event);
  57. QPainter painter(this);
  58. if (!m_styleImage.isNull()) {
  59. int x = (width() - m_styleImage.width()) / 2 - 1;
  60. int y = (height() - m_styleImage.height()) / 2 - 1;
  61. painter.drawImage(x, y, m_styleImage);
  62. return;
  63. }
  64. // Fall back to boring circle X
  65. painter.setRenderHint(QPainter::Antialiasing, true);
  66. QPalette p = palette();
  67. QColor circleColor = isDown() ? p.color(QPalette::Dark) : p.color(QPalette::Mid);
  68. QColor xColor = p.color(QPalette::Window);
  69. // draw circle
  70. painter.setBrush(circleColor);
  71. painter.setPen(circleColor);
  72. int padding = width() / 5;
  73. int circleRadius = width() - (padding * 2);
  74. painter.drawEllipse(padding, padding, circleRadius, circleRadius);
  75. // draw X
  76. painter.setPen(xColor);
  77. padding = padding * 2;
  78. painter.drawLine(padding, padding, width() - padding, width() - padding);
  79. painter.drawLine(padding, height() - padding, width() - padding, padding);
  80. }