Bug 1030843 - Fix crash in nsNativeThemeCocoa::GetMinimumWidgetSize. r=roc

This commit is contained in:
Jonathan Watt 2014-06-27 10:19:00 +01:00
parent 56ca526f86
commit b6e95499e1
15 changed files with 41 additions and 51 deletions

View File

@ -28,14 +28,14 @@ class nsIAtom;
class nsIWidget;
// IID for the nsITheme interface
// {b0f3efe9-0bd4-4f6b-8daa-0ec7f6006822}
// {7a3474d9-3bd6-407c-8657-c5c7633639f0}
#define NS_ITHEME_IID \
{ 0x4440b5c7, 0xd8bd, 0x4d9c, \
{ 0x9c, 0x3e, 0xa5, 0xe6, 0x26, 0x81, 0x10, 0xa0 } }
// {D930E29B-6909-44e5-AB4B-AF10D6923705}
{ 0x7a3474d9, 0x3bd6, 0x407c, \
{ 0x86, 0x57, 0xc5, 0xc7, 0x63, 0x36, 0x39, 0xf0 } }
// {0ae05515-cf7a-45a8-9e02-6556de7685b1}
#define NS_THEMERENDERER_CID \
{ 0x9020805b, 0x14a3, 0x4125, \
{ 0xa5, 0x63, 0x4a, 0x8c, 0x5d, 0xe0, 0xa9, 0xa3 } }
{ 0x0ae05515, 0xcf7a, 0x45a8, \
{ 0x9e, 0x02, 0x65, 0x56, 0xde, 0x76, 0x85, 0xb1 } }
/**
* nsITheme is a service that provides platform-specific native
@ -113,7 +113,7 @@ public:
* minimum size; if false, this size is the only valid size for the
* widget.
*/
NS_IMETHOD GetMinimumWidgetSize(nsRenderingContext* aContext,
NS_IMETHOD GetMinimumWidgetSize(nsPresContext* aPresContext,
nsIFrame* aFrame,
uint8_t aWidgetType,
nsIntSize* aResult,

View File

@ -3883,7 +3883,7 @@ nsLayoutUtils::IntrinsicForContainer(nsRenderingContext *aRenderingContext,
bool canOverride = true;
nsPresContext *presContext = aFrame->PresContext();
presContext->GetTheme()->
GetMinimumWidgetSize(aRenderingContext, aFrame, disp->mAppearance,
GetMinimumWidgetSize(presContext, aFrame, disp->mAppearance,
&size, &canOverride);
nscoord themeWidth = presContext->DevPixelsToAppUnits(size.width);

View File

@ -499,12 +499,10 @@ nsRangeFrame::GetValueAtEventPoint(WidgetGUIEvent* aEvent)
if (IsThemed()) {
// We need to get the size of the thumb from the theme.
nsPresContext *presContext = PresContext();
nsRefPtr<nsRenderingContext> tmpCtx =
presContext->PresShell()->CreateReferenceRenderingContext();
bool notUsedCanOverride;
nsIntSize size;
presContext->GetTheme()->
GetMinimumWidgetSize(tmpCtx.get(), this, NS_THEME_RANGE_THUMB, &size,
GetMinimumWidgetSize(presContext, this, NS_THEME_RANGE_THUMB, &size,
&notUsedCanOverride);
thumbSize.width = presContext->DevPixelsToAppUnits(size.width);
thumbSize.height = presContext->DevPixelsToAppUnits(size.height);

View File

@ -1000,7 +1000,7 @@ nsFlexContainerFrame::GenerateFlexItemForChild(
nsIntSize widgetMinSize(0, 0);
bool canOverride = true;
aPresContext->GetTheme()->
GetMinimumWidgetSize(childRS.rendContext, aChildFrame,
GetMinimumWidgetSize(aPresContext, aChildFrame,
disp->mAppearance,
&widgetMinSize, &canOverride);

View File

@ -4132,7 +4132,7 @@ nsFrame::ComputeSize(nsRenderingContext *aRenderingContext,
bool canOverride = true;
nsPresContext *presContext = PresContext();
presContext->GetTheme()->
GetMinimumWidgetSize(aRenderingContext, this, disp->mAppearance,
GetMinimumWidgetSize(presContext, this, disp->mAppearance,
&widget, &canOverride);
nsSize size;

View File

@ -974,17 +974,14 @@ ScrollFrameHelper::GetNondisappearingScrollbarWidth(nsBoxLayoutState* aState)
mVScrollbarBox,
NS_THEME_SCROLLBAR_NON_DISAPPEARING)) {
nsIntSize size;
nsRenderingContext* rendContext = aState->GetRenderingContext();
if (rendContext) {
bool canOverride = true;
theme->GetMinimumWidgetSize(rendContext,
mVScrollbarBox,
NS_THEME_SCROLLBAR_NON_DISAPPEARING,
&size,
&canOverride);
if (size.width) {
return aState->PresContext()->DevPixelsToAppUnits(size.width);
}
bool canOverride = true;
theme->GetMinimumWidgetSize(aState->PresContext(),
mVScrollbarBox,
NS_THEME_SCROLLBAR_NON_DISAPPEARING,
&size,
&canOverride);
if (size.width) {
return aState->PresContext()->DevPixelsToAppUnits(size.width);
}
}
}

View File

@ -682,18 +682,15 @@ nsIFrame::AddCSSMinSize(nsBoxLayoutState& aState, nsIFrame* aBox, nsSize& aSize,
nsITheme *theme = aState.PresContext()->GetTheme();
if (theme && theme->ThemeSupportsWidget(aState.PresContext(), aBox, display->mAppearance)) {
nsIntSize size;
nsRenderingContext* rendContext = aState.GetRenderingContext();
if (rendContext) {
theme->GetMinimumWidgetSize(rendContext, aBox,
display->mAppearance, &size, &canOverride);
if (size.width) {
aSize.width = aState.PresContext()->DevPixelsToAppUnits(size.width);
aWidthSet = true;
}
if (size.height) {
aSize.height = aState.PresContext()->DevPixelsToAppUnits(size.height);
aHeightSet = true;
}
theme->GetMinimumWidgetSize(aState.PresContext(), aBox,
display->mAppearance, &size, &canOverride);
if (size.width) {
aSize.width = aState.PresContext()->DevPixelsToAppUnits(size.width);
aWidthSet = true;
}
if (size.height) {
aSize.height = aState.PresContext()->DevPixelsToAppUnits(size.height);
aHeightSet = true;
}
}
}

View File

@ -167,9 +167,7 @@ nsScrollbarFrame::GetMargin(nsMargin& aMargin)
if (theme) {
nsIntSize size;
bool isOverridable;
nsRefPtr<nsRenderingContext> rc =
presContext->PresShell()->CreateReferenceRenderingContext();
theme->GetMinimumWidgetSize(rc, this, NS_THEME_SCROLLBAR, &size,
theme->GetMinimumWidgetSize(presContext, this, NS_THEME_SCROLLBAR, &size,
&isOverridable);
if (IsHorizontal()) {
aMargin.top = -presContext->DevPixelsToAppUnits(size.height);

View File

@ -2087,7 +2087,7 @@ nsTreeBodyFrame::GetTwistyRect(int32_t aRowIndex,
if (useTheme) {
nsIntSize minTwistySizePx(0,0);
bool canOverride = true;
theme->GetMinimumWidgetSize(&aRenderingContext, this, twistyDisplayData->mAppearance,
theme->GetMinimumWidgetSize(aPresContext, this, twistyDisplayData->mAppearance,
&minTwistySizePx, &canOverride);
// GMWS() returns size in pixels, we need to convert it back to app units

View File

@ -52,7 +52,7 @@ public:
virtual bool GetWidgetOverflow(nsDeviceContext* aContext, nsIFrame* aFrame,
uint8_t aWidgetType, nsRect* aOverflowRect);
NS_IMETHOD GetMinimumWidgetSize(nsRenderingContext* aContext, nsIFrame* aFrame,
NS_IMETHOD GetMinimumWidgetSize(nsPresContext* aPresContext, nsIFrame* aFrame,
uint8_t aWidgetType,
nsIntSize* aResult, bool* aIsOverridable);
NS_IMETHOD WidgetStateChanged(nsIFrame* aFrame, uint8_t aWidgetType,

View File

@ -2933,7 +2933,7 @@ static const int32_t kRegularScrollbarThumbMinSize = 26;
static const int32_t kSmallScrollbarThumbMinSize = 26;
NS_IMETHODIMP
nsNativeThemeCocoa::GetMinimumWidgetSize(nsRenderingContext* aContext,
nsNativeThemeCocoa::GetMinimumWidgetSize(nsPresContext* aPresContext,
nsIFrame* aFrame,
uint8_t aWidgetType,
nsIntSize* aResult,
@ -3223,7 +3223,7 @@ nsNativeThemeCocoa::GetMinimumWidgetSize(nsRenderingContext* aContext,
}
}
if (IsHiDPIContext(aFrame->PresContext())) {
if (IsHiDPIContext(aPresContext)) {
*aResult = *aResult * 2;
}

View File

@ -1046,7 +1046,7 @@ nsNativeThemeGTK::GetWidgetOverflow(nsDeviceContext* aContext,
}
NS_IMETHODIMP
nsNativeThemeGTK::GetMinimumWidgetSize(nsRenderingContext* aContext,
nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
nsIFrame* aFrame, uint8_t aWidgetType,
nsIntSize* aResult, bool* aIsOverridable)
{

View File

@ -39,7 +39,7 @@ public:
uint8_t aWidgetType,
nsRect* aOverflowRect);
NS_IMETHOD GetMinimumWidgetSize(nsRenderingContext* aContext,
NS_IMETHOD GetMinimumWidgetSize(nsPresContext* aPresContext,
nsIFrame* aFrame, uint8_t aWidgetType,
nsIntSize* aResult, bool* aIsOverridable);

View File

@ -2240,7 +2240,7 @@ nsNativeThemeWin::GetWidgetOverflow(nsDeviceContext* aContext,
}
NS_IMETHODIMP
nsNativeThemeWin::GetMinimumWidgetSize(nsRenderingContext* aContext, nsIFrame* aFrame,
nsNativeThemeWin::GetMinimumWidgetSize(nsPresContext* aPresContext, nsIFrame* aFrame,
uint8_t aWidgetType,
nsIntSize* aResult, bool* aIsOverridable)
{
@ -2249,7 +2249,7 @@ nsNativeThemeWin::GetMinimumWidgetSize(nsRenderingContext* aContext, nsIFrame* a
HANDLE theme = GetTheme(aWidgetType);
if (!theme)
return ClassicGetMinimumWidgetSize(aContext, aFrame, aWidgetType, aResult, aIsOverridable);
return ClassicGetMinimumWidgetSize(aPresContext, aFrame, aWidgetType, aResult, aIsOverridable);
switch (aWidgetType) {
case NS_THEME_GROUPBOX:
@ -2290,7 +2290,7 @@ nsNativeThemeWin::GetMinimumWidgetSize(nsRenderingContext* aContext, nsIFrame* a
case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL:
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
case NS_THEME_DROPDOWN_BUTTON:
return ClassicGetMinimumWidgetSize(aContext, aFrame, aWidgetType, aResult, aIsOverridable);
return ClassicGetMinimumWidgetSize(aPresContext, aFrame, aWidgetType, aResult, aIsOverridable);
case NS_THEME_MENUITEM:
case NS_THEME_CHECKMENUITEM:
@ -2887,7 +2887,7 @@ nsNativeThemeWin::ClassicGetWidgetPadding(nsDeviceContext* aContext,
}
nsresult
nsNativeThemeWin::ClassicGetMinimumWidgetSize(nsRenderingContext* aContext, nsIFrame* aFrame,
nsNativeThemeWin::ClassicGetMinimumWidgetSize(nsPresContext* aPresContext, nsIFrame* aFrame,
uint8_t aWidgetType,
nsIntSize* aResult, bool* aIsOverridable)
{

View File

@ -48,7 +48,7 @@ public:
uint8_t aWidgetType,
nsRect* aOverflowRect);
NS_IMETHOD GetMinimumWidgetSize(nsRenderingContext* aContext, nsIFrame* aFrame,
NS_IMETHOD GetMinimumWidgetSize(nsPresContext* aPresContext, nsIFrame* aFrame,
uint8_t aWidgetType,
nsIntSize* aResult,
bool* aIsOverridable);
@ -96,7 +96,7 @@ protected:
nsIFrame* aFrame,
uint8_t aWidgetType,
nsIntMargin* aResult);
nsresult ClassicGetMinimumWidgetSize(nsRenderingContext* aContext, nsIFrame* aFrame,
nsresult ClassicGetMinimumWidgetSize(nsPresContext* aPresContext, nsIFrame* aFrame,
uint8_t aWidgetType,
nsIntSize* aResult,
bool* aIsOverridable);