void nsNativeThemeQt::InitComboStyle(PRUint8 aWidgetType, nsIFrame* aFrame, QRect rect, QStyleOptionComboBox &opt) { PRInt32 eventState = GetContentState(aFrame, aWidgetType); PRBool disabled = IsDisabled(aFrame); if (!disabled) opt.state |= QStyle::State_Enabled; if (eventState & NS_EVENT_STATE_HOVER) opt.state |= QStyle::State_MouseOver; if (eventState & NS_EVENT_STATE_FOCUS) opt.state |= QStyle::State_HasFocus; if (!(eventState & NS_EVENT_STATE_ACTIVE)) opt.state |= QStyle::State_Raised; if (!disabled && eventState & NS_EVENT_STATE_ACTIVE) // Don't allow sunken when disabled opt.state |= QStyle::State_Sunken; opt.rect = rect; opt.palette = mNoBackgroundPalette; }
PRBool nsNativeTheme::IsPressedButton(nsIFrame* aFrame) { nsEventStates eventState = GetContentState(aFrame, NS_THEME_TOOLBAR_BUTTON); if (IsDisabled(aFrame, eventState)) return PR_FALSE; return IsOpenButton(aFrame) || eventState.HasAllStates(NS_EVENT_STATE_ACTIVE | NS_EVENT_STATE_HOVER); }
void nsNativeThemeQt::InitPlainStyle(PRUint8 aWidgetType, nsIFrame* aFrame, QRect rect, QStyleOption &opt, QStyle::State extraFlags) { nsEventStates eventState = GetContentState(aFrame, aWidgetType); opt.rect = rect; if (!IsDisabled(aFrame, eventState)) opt.state |= QStyle::State_Enabled; if (eventState.HasState(NS_EVENT_STATE_HOVER)) opt.state |= QStyle::State_MouseOver; if (eventState.HasState(NS_EVENT_STATE_FOCUS)) opt.state |= QStyle::State_HasFocus; opt.state |= extraFlags; }
void nsNativeThemeQt::InitButtonStyle(PRUint8 aWidgetType, nsIFrame* aFrame, QRect rect, QStyleOptionButton &opt) { nsEventStates eventState = GetContentState(aFrame, aWidgetType); opt.rect = rect; opt.palette = mNoBackgroundPalette; bool isDisabled = IsDisabled(aFrame, eventState); if (!isDisabled) opt.state |= QStyle::State_Enabled; if (eventState.HasState(NS_EVENT_STATE_HOVER)) opt.state |= QStyle::State_MouseOver; if (eventState.HasState(NS_EVENT_STATE_FOCUS)) opt.state |= QStyle::State_HasFocus; if (!isDisabled && eventState.HasState(NS_EVENT_STATE_ACTIVE)) // Don't allow sunken when disabled opt.state |= QStyle::State_Sunken; switch (aWidgetType) { case NS_THEME_RADIO: case NS_THEME_CHECKBOX: if (IsChecked(aFrame)) opt.state |= QStyle::State_On; else opt.state |= QStyle::State_Off; break; default: if (!eventState.HasState(NS_EVENT_STATE_ACTIVE)) opt.state |= QStyle::State_Raised; break; } }
void nsNativeThemeQt::InitComboStyle(uint8_t aWidgetType, nsIFrame* aFrame, QRect rect, QStyleOptionComboBox &opt) { nsEventStates eventState = GetContentState(aFrame, aWidgetType); bool isDisabled = IsDisabled(aFrame, eventState); if (!isDisabled) opt.state |= QStyle::State_Enabled; if (eventState.HasState(NS_EVENT_STATE_HOVER)) opt.state |= QStyle::State_MouseOver; if (eventState.HasState(NS_EVENT_STATE_FOCUS)) opt.state |= QStyle::State_HasFocus; if (!eventState.HasState(NS_EVENT_STATE_ACTIVE)) opt.state |= QStyle::State_Raised; if (!isDisabled && eventState.HasState(NS_EVENT_STATE_ACTIVE)) // Don't allow sunken when disabled opt.state |= QStyle::State_Sunken; opt.rect = rect; opt.palette = mNoBackgroundPalette; }
nsresult nsNativeThemeQt::DrawWidgetBackground(QPainter *qPainter, nsRenderingContext* aContext, nsIFrame* aFrame, PRUint8 aWidgetType, const nsRect& aRect, const nsRect& aClipRect) { gfxContext* context = aContext->ThebesContext(); nsRefPtr<gfxASurface> surface = context->CurrentSurface(); context->UpdateSurfaceClip(); QStyle* style = qApp->style(); qPainter->save(); gfxPoint offs = surface->GetDeviceOffset(); qPainter->translate(offs.x, offs.y); gfxMatrix ctm = context->CurrentMatrix(); if (!ctm.HasNonTranslation()) { ctm.x0 = NSToCoordRound(ctm.x0); ctm.y0 = NSToCoordRound(ctm.y0); } QMatrix qctm(ctm.xx, ctm.yx, ctm.xy, ctm.yy, ctm.x0, ctm.y0); qPainter->setWorldMatrix(qctm, true); PRInt32 p2a = aContext->AppUnitsPerDevPixel(); QRect r = qRectInPixels(aRect, p2a); QRect cr = qRectInPixels(aClipRect, p2a); QStyle::State extraFlags = QStyle::State_None; switch (aWidgetType) { case NS_THEME_RADIO: case NS_THEME_CHECKBOX: { QStyleOptionButton opt; InitButtonStyle (aWidgetType, aFrame, r, opt); if (aWidgetType == NS_THEME_CHECKBOX) { style->drawPrimitive (QStyle::PE_IndicatorCheckBox, &opt, qPainter); } else { style->drawPrimitive (QStyle::PE_IndicatorRadioButton, &opt, qPainter); } break; } case NS_THEME_BUTTON: case NS_THEME_BUTTON_BEVEL: { QStyleOptionButton opt; InitButtonStyle (aWidgetType, aFrame, r, opt); if (aWidgetType == NS_THEME_BUTTON) { style->drawPrimitive(QStyle::PE_PanelButtonCommand, &opt, qPainter); if (IsDefaultButton(aFrame)) style->drawPrimitive(QStyle::PE_FrameDefaultButton, &opt, qPainter); } else { style->drawPrimitive(QStyle::PE_PanelButtonBevel, &opt, qPainter); style->drawPrimitive(QStyle::PE_FrameButtonBevel, &opt, qPainter); } break; } case NS_THEME_SCROLLBAR: { qPainter->fillRect(r, qApp->palette().brush(QPalette::Normal, QPalette::Window)); break; } case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL: { qPainter->fillRect(r, qApp->palette().brush(QPalette::Active, QPalette::Window)); break; } case NS_THEME_SCROLLBAR_TRACK_VERTICAL: { qPainter->fillRect(r, qApp->palette().brush(QPalette::Active, QPalette::Window)); break; } case NS_THEME_SCROLLBAR_BUTTON_LEFT: { QStyleOptionSlider opt; InitPlainStyle(aWidgetType, aFrame, r, (QStyleOption&)opt, QStyle::State_Horizontal); opt.orientation = Qt::Horizontal; style->drawControl(QStyle::CE_ScrollBarSubLine, &opt, qPainter, NULL); break; } case NS_THEME_SCROLLBAR_BUTTON_RIGHT: { QStyleOptionSlider opt; InitPlainStyle(aWidgetType, aFrame, r, (QStyleOption&)opt, QStyle::State_Horizontal); opt.orientation = Qt::Horizontal; style->drawControl(QStyle::CE_ScrollBarAddLine, &opt, qPainter, NULL); break; } case NS_THEME_SCROLLBAR_BUTTON_UP: { QStyleOptionSlider opt; InitPlainStyle(aWidgetType, aFrame, r, (QStyleOption&)opt); opt.orientation = Qt::Vertical; style->drawControl(QStyle::CE_ScrollBarSubLine, &opt, qPainter, NULL); break; } case NS_THEME_SCROLLBAR_BUTTON_DOWN: { QStyleOptionSlider opt; InitPlainStyle(aWidgetType, aFrame, r, (QStyleOption&)opt); opt.orientation = Qt::Vertical; style->drawControl(QStyle::CE_ScrollBarAddLine, &opt, qPainter, NULL); break; } case NS_THEME_SCROLLBAR_THUMB_HORIZONTAL: { extraFlags |= QStyle::State_Horizontal; QStyleOptionSlider option; InitPlainStyle(aWidgetType, aFrame, r, (QStyleOption&)option, extraFlags); option.orientation = Qt::Horizontal; style->drawControl(QStyle::CE_ScrollBarSlider, &option, qPainter, NULL); break; } case NS_THEME_SCROLLBAR_THUMB_VERTICAL: { QStyleOptionSlider option; InitPlainStyle(aWidgetType, aFrame, r, (QStyleOption&)option, extraFlags); option.orientation = Qt::Vertical; style->drawControl(QStyle::CE_ScrollBarSlider, &option, qPainter, NULL); break; } case NS_THEME_DROPDOWN: { QStyleOptionComboBox comboOpt; InitComboStyle(aWidgetType, aFrame, r, comboOpt); style->drawComplexControl(QStyle::CC_ComboBox, &comboOpt, qPainter); break; } case NS_THEME_DROPDOWN_BUTTON: { QStyleOptionComboBox option; InitComboStyle(aWidgetType, aFrame, r, option); style->drawPrimitive(QStyle::PE_FrameDefaultButton, &option, qPainter); style->drawPrimitive(QStyle::PE_IndicatorSpinDown, &option, qPainter); break; } case NS_THEME_DROPDOWN_TEXT: case NS_THEME_DROPDOWN_TEXTFIELD: case NS_THEME_TEXTFIELD: case NS_THEME_TEXTFIELD_MULTILINE: case NS_THEME_LISTBOX: { QStyleOptionFrameV2 frameOpt; nsEventStates eventState = GetContentState(aFrame, aWidgetType); if (!IsDisabled(aFrame, eventState)) frameOpt.state |= QStyle::State_Enabled; frameOpt.rect = r; frameOpt.features = QStyleOptionFrameV2::Flat; if (aWidgetType == NS_THEME_TEXTFIELD || aWidgetType == NS_THEME_TEXTFIELD_MULTILINE) { QRect contentRect = style->subElementRect(QStyle::SE_LineEditContents, &frameOpt); contentRect.adjust(mFrameWidth, mFrameWidth, -mFrameWidth, -mFrameWidth); qPainter->fillRect(contentRect, QBrush(Qt::white)); } frameOpt.palette = mNoBackgroundPalette; style->drawPrimitive(QStyle::PE_FrameLineEdit, &frameOpt, qPainter, NULL); break; } case NS_THEME_MENUPOPUP: { QStyleOptionMenuItem option; InitPlainStyle(aWidgetType, aFrame, r, (QStyleOption&)option, extraFlags); style->drawPrimitive(QStyle::PE_FrameMenu, &option, qPainter, NULL); break; } default: break; } qPainter->restore(); return NS_OK; }