void Element::drawBody(DrawContext dc, double zoom) { hints.draw(dc); if(flag & ELEMENT_FLG_IS_SELECT) Gdk::Cairo::set_source_rgba(dc, colorDark); else Gdk::Cairo::set_source_rgba(dc, *color); /* //---------- Cairo::RefPtr<Cairo::LinearGradient> ptr = Cairo::LinearGradient::create(x, y, x, y + height); dc->set_source(ptr); ptr->add_color_stop_rgb(0, 1.0, 1.0, 1.0); if(flag & ELEMENT_FLG_IS_SELECT) ptr->add_color_stop_rgb(1, colorDark.get_red_p(), colorDark.get_green_p(), colorDark.get_blue_p()); else ptr->add_color_stop_rgb(1, color.get_red_p(), color.get_green_p(), color.get_blue_p()); //---------- */ if(zoom == 1) dc->rectangle(x, y, width, height); else roundRect(dc, x, y, width, height); dc->fill(); if(flag & ELEMENT_FLG_IS_FREEZE) dc->set_source_rgb(0.0, 0.0, 1.0); else Gdk::Cairo::set_source_rgba(dc, colorDark); if(zoom == 1) { //dc->rectangle(x, y, width, height); dc->move_to(x + width, y); dc->line_to(x + width, y + height); dc->line_to(x, y + height); dc->stroke(); Gdk::Cairo::set_source_rgba(dc, colorLight); dc->move_to(x, y + height); dc->line_to(x, y); dc->line_to(x + width, y); dc->stroke(); } else roundRect(dc, x, y, width, height); dc->stroke(); if(isELink()) { if(isMainELink()) Gdk::Cairo::set_source_rgba(dc, *color); else Gdk::Cairo::set_source_rgba(dc, colorLight); dc->rectangle(x + width - POINT_OFF, y + height - POINT_OFF, POINT_OFF*2, POINT_OFF*2); dc->fill(); Gdk::Cairo::set_source_rgba(dc, colorDark); dc->rectangle(x + width - POINT_OFF, y + height - POINT_OFF, POINT_OFF*2, POINT_OFF*2); dc->stroke(); } }
void normalRoundRect (COORDS figure, HDC hdc, HPEN& hPen) { HGDIOBJ orig = SelectObject (hdc, hPen); roundRect (figure, hdc); deleteNormalObjetFigure (orig, hdc, hPen); }
void filledRoundRect (COORDS figure, HDC hdc, COLORREF color) { HBRUSH hBrush = CreateSolidBrush (color); HGDIOBJ orig = SelectObject (hdc, hBrush); roundRect (figure, hdc); deleteFilledObjetFigure (orig, hdc, hBrush); }
void WebTestThemeEngineMock::paint( blink::WebCanvas* canvas, WebThemeEngine::Part part, WebThemeEngine::State state, const blink::WebRect& rect, const WebThemeEngine::ExtraParams* extraParams) { SkIRect irect = webRectToSkIRect(rect); SkPaint paint; // Indent amounts for the check in a checkbox or radio button. const int checkIndent = 3; // Indent amounts for short and long sides of the scrollbar notches. const int notchLongOffset = 1; const int notchShortOffset = 4; const int noOffset = 0; // Indent amounts for the short and long sides of a scroll thumb box. const int thumbLongIndent = 0; const int thumbShortIndent = 2; // Indents for the crosshatch on a scroll grip. const int gripLongIndent = 3; const int gripShortIndent = 5; // Indents for the the slider track. const int sliderIndent = 2; int halfHeight = irect.height() / 2; int halfWidth = irect.width() / 2; int quarterHeight = irect.height() / 4; int quarterWidth = irect.width() / 4; int left = irect.fLeft; int right = irect.fRight; int top = irect.fTop; int bottom = irect.fBottom; switch (part) { case WebThemeEngine::PartScrollbarDownArrow: box(canvas, irect, bgColors[state]); triangle(canvas, left + quarterWidth, top + quarterHeight, right - quarterWidth, top + quarterHeight, left + halfWidth, bottom - quarterHeight, edgeColor); markState(canvas, irect, state); break; case WebThemeEngine::PartScrollbarLeftArrow: box(canvas, irect, bgColors[state]); triangle(canvas, right - quarterWidth, top + quarterHeight, right - quarterWidth, bottom - quarterHeight, left + quarterWidth, top + halfHeight, edgeColor); break; case WebThemeEngine::PartScrollbarRightArrow: box(canvas, irect, bgColors[state]); triangle(canvas, left + quarterWidth, top + quarterHeight, right - quarterWidth, top + halfHeight, left + quarterWidth, bottom - quarterHeight, edgeColor); break; case WebThemeEngine::PartScrollbarUpArrow: box(canvas, irect, bgColors[state]); triangle(canvas, left + quarterWidth, bottom - quarterHeight, left + halfWidth, top + quarterHeight, right - quarterWidth, bottom - quarterHeight, edgeColor); markState(canvas, irect, state); break; case WebThemeEngine::PartScrollbarHorizontalThumb: { // Draw a narrower box on top of the outside box. nestedBoxes(canvas, irect, thumbLongIndent, thumbShortIndent, thumbLongIndent, thumbShortIndent, bgColors[state], bgColors[state]); // Draw a horizontal crosshatch for the grip. int longOffset = halfWidth - gripLongIndent; line(canvas, left + gripLongIndent, top + halfHeight, right - gripLongIndent, top + halfHeight, edgeColor); line(canvas, left + longOffset, top + gripShortIndent, left + longOffset, bottom - gripShortIndent, edgeColor); line(canvas, right - longOffset, top + gripShortIndent, right - longOffset, bottom - gripShortIndent, edgeColor); markState(canvas, irect, state); break; } case WebThemeEngine::PartScrollbarVerticalThumb: { // Draw a shorter box on top of the outside box. nestedBoxes(canvas, irect, thumbShortIndent, thumbLongIndent, thumbShortIndent, thumbLongIndent, bgColors[state], bgColors[state]); // Draw a vertical crosshatch for the grip. int longOffset = halfHeight - gripLongIndent; line(canvas, left + halfWidth, top + gripLongIndent, left + halfWidth, bottom - gripLongIndent, edgeColor); line(canvas, left + gripShortIndent, top + longOffset, right - gripShortIndent, top + longOffset, edgeColor); line(canvas, left + gripShortIndent, bottom - longOffset, right - gripShortIndent, bottom - longOffset, edgeColor); markState(canvas, irect, state); break; } case WebThemeEngine::PartScrollbarHorizontalTrack: { int longOffset = halfHeight - notchLongOffset; int shortOffset = irect.width() - notchShortOffset; if (extraParams->scrollbarTrack.isBack) { // back, notch on left nestedBoxes(canvas, irect, noOffset, longOffset, shortOffset, longOffset, bgColors[state], edgeColor); } else { // forward, notch on right nestedBoxes(canvas, irect, shortOffset, longOffset, noOffset, longOffset, bgColors[state], edgeColor); } markState(canvas, irect, state); break; } case WebThemeEngine::PartScrollbarVerticalTrack: { int longOffset = halfWidth - notchLongOffset; int shortOffset = irect.height() - notchShortOffset; if (extraParams->scrollbarTrack.isBack) { // back, notch at top nestedBoxes(canvas, irect, longOffset, noOffset, longOffset, shortOffset, bgColors[state], edgeColor); } else { // forward, notch at bottom nestedBoxes(canvas, irect, longOffset, shortOffset, longOffset, noOffset, bgColors[state], edgeColor); } markState(canvas, irect, state); break; } case WebThemeEngine::PartCheckbox: if (extraParams->button.indeterminate) { nestedBoxes(canvas, irect, checkIndent, halfHeight, checkIndent, halfHeight, bgColors[state], edgeColor); } else if (extraParams->button.checked) { irect = validate(irect, part); nestedBoxes(canvas, irect, checkIndent, checkIndent, checkIndent, checkIndent, bgColors[state], edgeColor); } else { irect = validate(irect, part); box(canvas, irect, bgColors[state]); } break; case WebThemeEngine::PartRadio: irect = validate(irect, part); halfHeight = irect.height() / 2; if (extraParams->button.checked) { circle(canvas, irect, SkIntToScalar(halfHeight), bgColors[state]); circle(canvas, irect, SkIntToScalar(halfHeight - checkIndent), edgeColor); } else { circle(canvas, irect, SkIntToScalar(halfHeight), bgColors[state]); } break; case WebThemeEngine::PartButton: roundRect(canvas, irect, bgColors[state]); markState(canvas, irect, state); break; case WebThemeEngine::PartTextField: paint.setColor(extraParams->textField.backgroundColor); paint.setStyle(SkPaint::kFill_Style); canvas->drawIRect(irect, paint); paint.setColor(edgeColor); paint.setStyle(SkPaint::kStroke_Style); canvas->drawIRect(irect, paint); markState(canvas, irect, state); break; case WebThemeEngine::PartMenuList: if (extraParams->menuList.fillContentArea) { box(canvas, irect, extraParams->menuList.backgroundColor); } else { SkPaint paint; paint.setColor(edgeColor); paint.setStyle(SkPaint::kStroke_Style); canvas->drawIRect(irect, paint); } // clip the drop-down arrow to be inside the select box if (extraParams->menuList.arrowX - 4 > irect.fLeft) irect.fLeft = extraParams->menuList.arrowX - 4; if (extraParams->menuList.arrowX + 12 < irect.fRight) irect.fRight = extraParams->menuList.arrowX + 12; irect.fTop = extraParams->menuList.arrowY - (extraParams->menuList.arrowHeight) / 2; irect.fBottom = extraParams->menuList.arrowY + (extraParams->menuList.arrowHeight - 1) / 2; halfWidth = irect.width() / 2; quarterWidth = irect.width() / 4; if (state == WebThemeEngine::StateFocused) // FIXME: draw differenty? state = WebThemeEngine::StateNormal; box(canvas, irect, bgColors[state]); triangle(canvas, irect.fLeft + quarterWidth, irect.fTop, irect.fRight - quarterWidth, irect.fTop, irect.fLeft + halfWidth, irect.fBottom, edgeColor); break; case WebThemeEngine::PartSliderTrack: { SkIRect lirect = irect; // Draw a narrow rect for the track plus box hatches on the ends. if (state == WebThemeEngine::StateFocused) // FIXME: draw differently? state = WebThemeEngine::StateNormal; if (extraParams->slider.vertical) { lirect.inset(halfWidth - sliderIndent, noOffset); box(canvas, lirect, bgColors[state]); line(canvas, left, top, right, top, edgeColor); line(canvas, left, bottom, right, bottom, edgeColor); } else { lirect.inset(noOffset, halfHeight - sliderIndent); box(canvas, lirect, bgColors[state]); line(canvas, left, top, left, bottom, edgeColor); line(canvas, right, top, right, bottom, edgeColor); } break; } case WebThemeEngine::PartSliderThumb: if (state == WebThemeEngine::StateFocused) // FIXME: draw differently? state = WebThemeEngine::StateNormal; oval(canvas, irect, bgColors[state]); break; case WebThemeEngine::PartInnerSpinButton: { // stack half-height up and down arrows on top of each other SkIRect lirect; int halfHeight = rect.height / 2; if (extraParams->innerSpin.readOnly) state = blink::WebThemeEngine::StateDisabled; lirect.set(rect.x, rect.y, rect.x + rect.width - 1, rect.y + halfHeight - 1); box(canvas, lirect, bgColors[state]); bottom = lirect.fBottom; quarterHeight = lirect.height() / 4; triangle(canvas, left + quarterWidth, bottom - quarterHeight, right - quarterWidth, bottom - quarterHeight, left + halfWidth, top + quarterHeight, edgeColor); lirect.set(rect.x, rect.y + halfHeight, rect.x + rect.width - 1, rect.y + 2 * halfHeight - 1); top = lirect.fTop; bottom = lirect.fBottom; quarterHeight = lirect.height() / 4; box(canvas, lirect, bgColors[state]); triangle(canvas, left + quarterWidth, top + quarterHeight, right - quarterWidth, top + quarterHeight, left + halfWidth, bottom - quarterHeight, edgeColor); markState(canvas, irect, state); break; } case WebThemeEngine::PartProgressBar: { paint.setColor(bgColors[state]); paint.setStyle(SkPaint::kFill_Style); canvas->drawIRect(irect, paint); // Emulate clipping SkIRect tofill = irect; if (extraParams->progressBar.determinate) { tofill.set(extraParams->progressBar.valueRectX, extraParams->progressBar.valueRectY, extraParams->progressBar.valueRectX + extraParams->progressBar.valueRectWidth - 1, extraParams->progressBar.valueRectY + extraParams->progressBar.valueRectHeight); } tofill.intersect(irect, tofill); paint.setColor(edgeColor); paint.setStyle(SkPaint::kFill_Style); canvas->drawIRect(tofill, paint); markState(canvas, irect, state); break; } default: // FIXME: Should we do something here to indicate that we got an invalid part? // Unfortunately, we can't assert because we don't have access to WTF or base. break; } }
void FoundCountIcon::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter, option, index); // Get access to basket pointer BasketListViewItem* basketInTree = m_basketTree->getBasketInTree(index); if (basketInTree == NULL) return; const int BASKET_ICON_SIZE = 16; // [replace with m_basketTree->iconSize()] const int MARGIN = 1; BasketScene* basket = basketInTree->basket(); // If we are filtering all baskets, and are effectively filtering on something: bool showLoadingIcon = false; bool showEncryptedIcon = false; QPixmap countPixmap; bool showCountPixmap = Global::bnpView->isFilteringAllBaskets() && Global::bnpView->currentBasket()->decoration()->filterBar()->filterData().isFiltering; if (showCountPixmap) { showLoadingIcon = (!basket->isLoaded() && !basket->isLocked()) || basketInTree->haveHiddenChildsLoading(); showEncryptedIcon = basket->isLocked() || basketInTree->haveHiddenChildsLocked(); bool childrenAreLoading = basketInTree->haveHiddenChildsLoading() || basketInTree->haveHiddenChildsLocked(); countPixmap = foundCountPixmap(!basket->isLoaded(), basket->countFounds(), childrenAreLoading, basketInTree->countHiddenChildsFound(), m_basketTree->font(), option.rect.height() - 2 * MARGIN); } int effectiveWidth = option.rect.right() - (countPixmap.isNull() ? 0 : countPixmap.width() + MARGIN) - (showLoadingIcon || showEncryptedIcon ? BASKET_ICON_SIZE + MARGIN : 0); bool drawRoundRect = basket->backgroundColorSetting().isValid() || basket->textColorSetting().isValid(); // Draw the rounded rectangle: if (drawRoundRect) { QPixmap roundRectBmp; QColor background = basket->backgroundColor(); int textWidth = m_basketTree->fontMetrics().width(basketInTree->text(/*column=*/0)); int iconTextMargin = m_basketTree->style()->pixelMetric(QStyle::PM_FocusFrameHMargin); ///< Space between icon and text // Don't forget to update the key computation if parameters // affecting the rendering logic change QString key = QString("BLIRR::%1.%2.%3.%4") .arg(option.rect.width()) .arg(option.rect.size().height()) .arg(textWidth) .arg(background.rgb()); if (QPixmap* cached = QPixmapCache::find(key)) { // Qt's documentation recommends copying the pointer // into a QPixmap immediately roundRectBmp = *cached; } else { // Draw first time roundRectBmp = QPixmap(option.rect.size()); roundRectBmp.fill(Qt::transparent); QPainter brushPainter(&roundRectBmp); int cornerR = option.rect.height()/2 - MARGIN; QRect roundRect(0, MARGIN, BASKET_ICON_SIZE + iconTextMargin + textWidth + 2*cornerR, option.rect.height() - 2*MARGIN); brushPainter.setPen(background); brushPainter.setBrush(background); brushPainter.setRenderHint(QPainter::Antialiasing); brushPainter.drawRoundedRect(roundRect, cornerR, cornerR); QPixmapCache::insert(key, roundRectBmp); } basketInTree->setBackground(0, QBrush(roundRectBmp)); basketInTree->setForeground(0, QBrush(basket->textColor())); } //end if drawRoundRect // Render icons on the right int y = option.rect.center().y() - BASKET_ICON_SIZE/2; if (!countPixmap.isNull()) { painter->drawPixmap(effectiveWidth, y, countPixmap); effectiveWidth += countPixmap.width() + MARGIN; } if (showLoadingIcon) { QPixmap icon = KIconLoader::global()->loadIcon(IconNames::LOADING, KIconLoader::NoGroup, BASKET_ICON_SIZE); painter->drawPixmap(effectiveWidth, y, icon); effectiveWidth += BASKET_ICON_SIZE + MARGIN; } if (showEncryptedIcon && !showLoadingIcon) { QPixmap icon = KIconLoader::global()->loadIcon(IconNames::LOCKED, KIconLoader::NoGroup, BASKET_ICON_SIZE); painter->drawPixmap(effectiveWidth, y, icon); } }
void WebTestThemeControlWin::draw() { int halfWidth = m_width / 2; int halfHeight = m_height / 2; int quarterWidth = m_width / 4; int quarterHeight = m_height / 4; // Indent amounts for the check in a checkbox or radio button. const int checkIndent = 3; // Indent amounts for short and long sides of the scrollbar notches. const int notchLongOffset = 1; const int notchShortOffset = 4; const int noOffset = 0; // Indent amounts for the short and long sides of a scroll thumb box. const int thumbLongIndent = 0; const int thumbShortIndent = 2; // Indents for the crosshatch on a scroll grip. const int gripLongIndent = 3; const int gripShortIndent = 5; // Indents for the the slider track. const int sliderIndent = 2; switch (m_type) { case UnknownType: BLINK_ASSERT_NOT_REACHED(); break; case TextFieldType: // We render this by hand outside of this function. BLINK_ASSERT_NOT_REACHED(); break; case PushButtonType: // push buttons render as a rounded rectangle roundRect(m_bgColor); break; case UncheckedBoxType: // Unchecked boxes are simply plain boxes. box(m_irect, m_bgColor); break; case CheckedBoxType: nestedBoxes(checkIndent, checkIndent, checkIndent, checkIndent, m_bgColor, m_fgColor); break; case IndeterminateCheckboxType: // Indeterminate checkbox is a box containing '-'. nestedBoxes(checkIndent, halfHeight, checkIndent, halfHeight, m_bgColor, m_fgColor); break; case UncheckedRadioType: circle(SkIntToScalar(halfHeight), m_bgColor); break; case CheckedRadioType: circle(SkIntToScalar(halfHeight), m_bgColor); circle(SkIntToScalar(halfHeight - checkIndent), m_fgColor); break; case HorizontalScrollTrackBackType: { // Draw a box with a notch at the left. int longOffset = halfHeight - notchLongOffset; int shortOffset = m_width - notchShortOffset; nestedBoxes(noOffset, longOffset, shortOffset, longOffset, m_bgColor, m_edgeColor); break; } case HorizontalScrollTrackForwardType: { // Draw a box with a notch at the right. int longOffset = halfHeight - notchLongOffset; int shortOffset = m_width - notchShortOffset; nestedBoxes(shortOffset, longOffset, noOffset, longOffset, m_bgColor, m_fgColor); break; } case VerticalScrollTrackBackType: { // Draw a box with a notch at the top. int longOffset = halfWidth - notchLongOffset; int shortOffset = m_height - notchShortOffset; nestedBoxes(longOffset, noOffset, longOffset, shortOffset, m_bgColor, m_fgColor); break; } case VerticalScrollTrackForwardType: { // Draw a box with a notch at the bottom. int longOffset = halfWidth - notchLongOffset; int shortOffset = m_height - notchShortOffset; nestedBoxes(longOffset, shortOffset, longOffset, noOffset, m_bgColor, m_fgColor); break; } case HorizontalScrollThumbType: // Draw a narrower box on top of the outside box. nestedBoxes(thumbLongIndent, thumbShortIndent, thumbLongIndent, thumbShortIndent, m_bgColor, m_bgColor); break; case VerticalScrollThumbType: // Draw a shorter box on top of the outside box. nestedBoxes(thumbShortIndent, thumbLongIndent, thumbShortIndent, thumbLongIndent, m_bgColor, m_bgColor); break; case HorizontalSliderThumbType: case VerticalSliderThumbType: // Slider thumbs are ovals. oval(m_bgColor); break; case HorizontalScrollGripType: { // Draw a horizontal crosshatch for the grip. int longOffset = halfWidth - gripLongIndent; line(m_left + gripLongIndent, m_top + halfHeight, m_right - gripLongIndent, m_top + halfHeight, m_fgColor); line(m_left + longOffset, m_top + gripShortIndent, m_left + longOffset, m_bottom - gripShortIndent, m_fgColor); line(m_right - longOffset, m_top + gripShortIndent, m_right - longOffset, m_bottom - gripShortIndent, m_fgColor); break; } case VerticalScrollGripType: { // Draw a vertical crosshatch for the grip. int longOffset = halfHeight - gripLongIndent; line(m_left + halfWidth, m_top + gripLongIndent, m_left + halfWidth, m_bottom - gripLongIndent, m_fgColor); line(m_left + gripShortIndent, m_top + longOffset, m_right - gripShortIndent, m_top + longOffset, m_fgColor); line(m_left + gripShortIndent, m_bottom - longOffset, m_right - gripShortIndent, m_bottom - longOffset, m_fgColor); break; } case LeftArrowType: // Draw a left arrow inside a box. box(m_irect, m_bgColor); triangle(m_right - quarterWidth, m_top + quarterHeight, m_right - quarterWidth, m_bottom - quarterHeight, m_left + quarterWidth, m_top + halfHeight, m_fgColor); break; case RightArrowType: // Draw a left arrow inside a box. box(m_irect, m_bgColor); triangle(m_left + quarterWidth, m_top + quarterHeight, m_right - quarterWidth, m_top + halfHeight, m_left + quarterWidth, m_bottom - quarterHeight, m_fgColor); break; case UpArrowType: // Draw an up arrow inside a box. box(m_irect, m_bgColor); triangle(m_left + quarterWidth, m_bottom - quarterHeight, m_left + halfWidth, m_top + quarterHeight, m_right - quarterWidth, m_bottom - quarterHeight, m_fgColor); break; case DownArrowType: // Draw a down arrow inside a box. box(m_irect, m_bgColor); triangle(m_left + quarterWidth, m_top + quarterHeight, m_right - quarterWidth, m_top + quarterHeight, m_left + halfWidth, m_bottom - quarterHeight, m_fgColor); break; case HorizontalSliderTrackType: { // Draw a narrow rect for the track plus box hatches on the ends. SkIRect lirect; lirect = m_irect; lirect.inset(noOffset, halfHeight - sliderIndent); box(lirect, m_bgColor); line(m_left, m_top, m_left, m_bottom, m_edgeColor); line(m_right, m_top, m_right, m_bottom, m_edgeColor); break; } case VerticalSliderTrackType: { // Draw a narrow rect for the track plus box hatches on the ends. SkIRect lirect; lirect = m_irect; lirect.inset(halfWidth - sliderIndent, noOffset); box(lirect, m_bgColor); line(m_left, m_top, m_right, m_top, m_edgeColor); line(m_left, m_bottom, m_right, m_bottom, m_edgeColor); break; } case DropDownButtonType: // Draw a box with a big down arrow on top. box(m_irect, m_bgColor); triangle(m_left + quarterWidth, m_top, m_right - quarterWidth, m_top, m_left + halfWidth, m_bottom, m_fgColor); break; default: BLINK_ASSERT_NOT_REACHED(); break; } markState(); }