Add more colors and custom color item
This commit is contained in:
@@ -32,17 +32,17 @@ ColorPicker::ColorPicker(QWidget *parent) : QWidget(parent) {
|
||||
// extraSize represents the extra space needed for the highlight of the
|
||||
// selected color.
|
||||
const int extraSize = 6;
|
||||
double radius = (m_colorList.size()*m_colorAreaSize/1.3)/(3.141592);
|
||||
resize(radius*2 + m_colorAreaSize + extraSize,
|
||||
radius*2 + m_colorAreaSize+ extraSize);
|
||||
double radius = (m_colorList.size() * m_colorAreaSize / 1.3) / 3.141592;
|
||||
resize(radius * 2 + m_colorAreaSize + extraSize,
|
||||
radius * 2 + m_colorAreaSize + extraSize);
|
||||
double degree = 360 / (m_colorList.size());
|
||||
double degreeAcum = degree;
|
||||
// this line is the radius of the circle which will be rotated to add
|
||||
// the color components.
|
||||
QLineF baseLine = QLineF(QPoint(radius+extraSize/2, radius+extraSize/2),
|
||||
QPoint(radius*2, radius));
|
||||
QLineF baseLine = QLineF(QPoint(radius + extraSize / 2, radius+extraSize / 2),
|
||||
QPoint(radius * 2, radius));
|
||||
|
||||
for (int i = 0; i<m_colorList.size(); ++i) {
|
||||
for (int i = 0; i < m_colorList.size(); ++i) {
|
||||
m_colorAreaList.append(QRect(baseLine.x2(), baseLine.y2(),
|
||||
m_colorAreaSize, m_colorAreaSize));
|
||||
baseLine.setAngle(degreeAcum);
|
||||
@@ -85,8 +85,38 @@ void ColorPicker::paintEvent(QPaintEvent *) {
|
||||
painter.drawRoundRect(highlight, 100, 100);
|
||||
painter.setPen(QColor(Qt::black));
|
||||
}
|
||||
painter.setBrush(QColor(m_colorList.at(i)));
|
||||
painter.drawRoundRect(rects.at(i), 100, 100);
|
||||
|
||||
// draw available colors
|
||||
if (m_colorList.at(i).isValid()) {
|
||||
// draw preset color
|
||||
painter.setBrush(QColor(m_colorList.at(i)));
|
||||
painter.drawRoundRect(rects.at(i), 100, 100);
|
||||
}
|
||||
else {
|
||||
// draw rainbow (part) for custom color
|
||||
QRect lastRect = rects.at(i);
|
||||
int nStep = 1;
|
||||
int nSteps = lastRect.height() / nStep;
|
||||
// 0.02 - start rainbow color, 0.33 - end rainbow color from range: 0.0 - 1.0
|
||||
float h = 0.02;
|
||||
for (int radius = nSteps; radius > 0; radius -= nStep*2) {
|
||||
// calculate color
|
||||
float fHStep = (0.33 - h) / (nSteps / nStep / 2);
|
||||
QColor color = QColor::fromHslF(h, 0.95, 0.5);
|
||||
|
||||
// set color and draw circle
|
||||
painter.setPen(color);
|
||||
painter.setBrush(color);
|
||||
painter.drawRoundRect(lastRect, 100, 100);
|
||||
|
||||
// set next color, circle geometry
|
||||
h += fHStep;
|
||||
lastRect.setX(lastRect.x() + nStep);
|
||||
lastRect.setY(lastRect.y() + nStep);
|
||||
lastRect.setHeight(lastRect.height() - nStep);
|
||||
lastRect.setWidth(lastRect.width() - nStep);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user