зеркало из https://github.com/mozilla/pjs.git
Fix for 115759, support for textfields in WinXP, r=hixie, sr=jst
This commit is contained in:
Родитель
602406dd66
Коммит
a87576bb28
|
@ -64,12 +64,16 @@
|
||||||
#define TS_HOVER 2
|
#define TS_HOVER 2
|
||||||
#define TS_ACTIVE 3
|
#define TS_ACTIVE 3
|
||||||
#define TS_DISABLED 4
|
#define TS_DISABLED 4
|
||||||
|
#define TS_FOCUSED 5
|
||||||
|
|
||||||
// Button constants
|
// Button constants
|
||||||
#define BP_BUTTON 1
|
#define BP_BUTTON 1
|
||||||
#define BP_RADIO 2
|
#define BP_RADIO 2
|
||||||
#define BP_CHECKBOX 3
|
#define BP_CHECKBOX 3
|
||||||
#define BS_DEFAULT 5
|
|
||||||
|
// Textfield constants
|
||||||
|
#define TFP_TEXTFIELD 1
|
||||||
|
#define TFS_READONLY 6
|
||||||
|
|
||||||
// Scrollbar constants
|
// Scrollbar constants
|
||||||
#define SP_BUTTON 1
|
#define SP_BUTTON 1
|
||||||
|
@ -134,6 +138,7 @@ nsNativeThemeWin::nsNativeThemeWin() {
|
||||||
NS_INIT_ISUPPORTS();
|
NS_INIT_ISUPPORTS();
|
||||||
mThemeDLL = NULL;
|
mThemeDLL = NULL;
|
||||||
mButtonTheme = NULL;
|
mButtonTheme = NULL;
|
||||||
|
mTextFieldTheme = NULL;
|
||||||
mTooltipTheme = NULL;
|
mTooltipTheme = NULL;
|
||||||
mToolbarTheme = NULL;
|
mToolbarTheme = NULL;
|
||||||
mRebarTheme = NULL;
|
mRebarTheme = NULL;
|
||||||
|
@ -157,6 +162,8 @@ nsNativeThemeWin::nsNativeThemeWin() {
|
||||||
mDisabledAtom = getter_AddRefs(NS_NewAtom("disabled"));
|
mDisabledAtom = getter_AddRefs(NS_NewAtom("disabled"));
|
||||||
mSelectedAtom = getter_AddRefs(NS_NewAtom("selected"));
|
mSelectedAtom = getter_AddRefs(NS_NewAtom("selected"));
|
||||||
mTypeAtom = getter_AddRefs(NS_NewAtom("type"));
|
mTypeAtom = getter_AddRefs(NS_NewAtom("type"));
|
||||||
|
mReadOnlyAtom = getter_AddRefs(NS_NewAtom("readonly"));
|
||||||
|
mDefaultAtom = getter_AddRefs(NS_NewAtom("default"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,6 +199,11 @@ nsNativeThemeWin::GetTheme(PRUint8 aWidgetType)
|
||||||
mButtonTheme = openTheme(NULL, L"Button");
|
mButtonTheme = openTheme(NULL, L"Button");
|
||||||
return mButtonTheme;
|
return mButtonTheme;
|
||||||
}
|
}
|
||||||
|
case NS_THEME_TEXTFIELD: {
|
||||||
|
if (!mTextFieldTheme)
|
||||||
|
mTextFieldTheme = openTheme(NULL, L"Edit");
|
||||||
|
return mTextFieldTheme;
|
||||||
|
}
|
||||||
case NS_THEME_TOOLTIP: {
|
case NS_THEME_TOOLTIP: {
|
||||||
if (!mTooltipTheme)
|
if (!mTooltipTheme)
|
||||||
mTooltipTheme = openTheme(NULL, L"Tooltip");
|
mTooltipTheme = openTheme(NULL, L"Tooltip");
|
||||||
|
@ -315,6 +327,11 @@ PRBool nsNativeThemeWin::IsDisabled(nsIFrame* aFrame)
|
||||||
return CheckBooleanAttr(aFrame, mDisabledAtom);
|
return CheckBooleanAttr(aFrame, mDisabledAtom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PRBool nsNativeThemeWin::IsReadOnly(nsIFrame* aFrame)
|
||||||
|
{
|
||||||
|
return CheckBooleanAttr(aFrame, mReadOnlyAtom);
|
||||||
|
}
|
||||||
|
|
||||||
PRBool nsNativeThemeWin::IsChecked(nsIFrame* aFrame)
|
PRBool nsNativeThemeWin::IsChecked(nsIFrame* aFrame)
|
||||||
{
|
{
|
||||||
if (!aFrame)
|
if (!aFrame)
|
||||||
|
@ -355,12 +372,16 @@ nsNativeThemeWin::GetThemePartAndState(nsIFrame* aFrame, PRUint8 aWidgetType,
|
||||||
if (eventState & NS_EVENT_STATE_HOVER && eventState & NS_EVENT_STATE_ACTIVE)
|
if (eventState & NS_EVENT_STATE_HOVER && eventState & NS_EVENT_STATE_ACTIVE)
|
||||||
aState = TS_ACTIVE;
|
aState = TS_ACTIVE;
|
||||||
else if (eventState & NS_EVENT_STATE_FOCUS)
|
else if (eventState & NS_EVENT_STATE_FOCUS)
|
||||||
aState = BS_DEFAULT;
|
aState = TS_FOCUSED;
|
||||||
else if (eventState & NS_EVENT_STATE_HOVER)
|
else if (eventState & NS_EVENT_STATE_HOVER)
|
||||||
aState = TS_HOVER;
|
aState = TS_HOVER;
|
||||||
else
|
else
|
||||||
aState = TS_NORMAL;
|
aState = TS_NORMAL;
|
||||||
|
|
||||||
|
// Check for default dialog buttons. These buttons should always look
|
||||||
|
// focused.
|
||||||
|
if (aState == TS_NORMAL && CheckBooleanAttr(aFrame, mDefaultAtom))
|
||||||
|
aState = TS_FOCUSED;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
case NS_THEME_CHECKBOX:
|
case NS_THEME_CHECKBOX:
|
||||||
|
@ -388,6 +409,35 @@ nsNativeThemeWin::GetThemePartAndState(nsIFrame* aFrame, PRUint8 aWidgetType,
|
||||||
aState += 4; // 4 unchecked states, 4 checked states.
|
aState += 4; // 4 unchecked states, 4 checked states.
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
case NS_THEME_TEXTFIELD: {
|
||||||
|
aPart = TFP_TEXTFIELD;
|
||||||
|
if (!aFrame) {
|
||||||
|
aState = TS_NORMAL;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsDisabled(aFrame)) {
|
||||||
|
aState = TS_DISABLED;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsReadOnly(aFrame)) {
|
||||||
|
aState = TFS_READONLY;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRInt32 eventState = GetContentState(aFrame);
|
||||||
|
if (eventState & NS_EVENT_STATE_HOVER && eventState & NS_EVENT_STATE_ACTIVE)
|
||||||
|
aState = TS_ACTIVE;
|
||||||
|
else if (eventState & NS_EVENT_STATE_FOCUS)
|
||||||
|
aState = TS_FOCUSED;
|
||||||
|
else if (eventState & NS_EVENT_STATE_HOVER)
|
||||||
|
aState = TS_HOVER;
|
||||||
|
else
|
||||||
|
aState = TS_NORMAL;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
case NS_THEME_TOOLTIP: {
|
case NS_THEME_TOOLTIP: {
|
||||||
aPart = TTP_STANDARD;
|
aPart = TTP_STANDARD;
|
||||||
aState = TS_NORMAL;
|
aState = TS_NORMAL;
|
||||||
|
@ -552,7 +602,7 @@ nsNativeThemeWin::GetThemePartAndState(nsIFrame* aFrame, PRUint8 aWidgetType,
|
||||||
if (eventState & NS_EVENT_STATE_HOVER && eventState & NS_EVENT_STATE_ACTIVE)
|
if (eventState & NS_EVENT_STATE_HOVER && eventState & NS_EVENT_STATE_ACTIVE)
|
||||||
aState = TS_ACTIVE;
|
aState = TS_ACTIVE;
|
||||||
else if (eventState & NS_EVENT_STATE_FOCUS)
|
else if (eventState & NS_EVENT_STATE_FOCUS)
|
||||||
aState = BS_DEFAULT;
|
aState = TS_FOCUSED;
|
||||||
else if (eventState & NS_EVENT_STATE_HOVER)
|
else if (eventState & NS_EVENT_STATE_HOVER)
|
||||||
aState = TS_HOVER;
|
aState = TS_HOVER;
|
||||||
else
|
else
|
||||||
|
@ -568,34 +618,6 @@ nsNativeThemeWin::GetThemePartAndState(nsIFrame* aFrame, PRUint8 aWidgetType,
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
|
||||||
GetSystemColor(PRUint8 aWidgetType, nsILookAndFeel::nsColorID& aColorID)
|
|
||||||
{
|
|
||||||
switch (aWidgetType) {
|
|
||||||
case NS_THEME_BUTTON:
|
|
||||||
case NS_THEME_TOOLBAR_BUTTON:
|
|
||||||
case NS_THEME_TAB: {
|
|
||||||
aColorID = nsILookAndFeel::eColor_buttontext;
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
GetSystemFont(PRUint8 aWidgetType, nsSystemFontID& aFont)
|
|
||||||
{
|
|
||||||
switch (aWidgetType) {
|
|
||||||
case NS_THEME_BUTTON:
|
|
||||||
case NS_THEME_TOOLBAR_BUTTON:
|
|
||||||
case NS_THEME_TAB: {
|
|
||||||
aFont = eSystemFont_Button;
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsNativeThemeWin::DrawWidgetBackground(nsIRenderingContext* aContext,
|
nsNativeThemeWin::DrawWidgetBackground(nsIRenderingContext* aContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
|
@ -632,7 +654,7 @@ nsNativeThemeWin::DrawWidgetBackground(nsIRenderingContext* aContext,
|
||||||
// For left edge and right edge tabs, we need to adjust the widget
|
// For left edge and right edge tabs, we need to adjust the widget
|
||||||
// rects and clip rects so that the edges don't get drawn.
|
// rects and clip rects so that the edges don't get drawn.
|
||||||
if (aWidgetType == NS_THEME_TAB_LEFT_EDGE || aWidgetType == NS_THEME_TAB_RIGHT_EDGE) {
|
if (aWidgetType == NS_THEME_TAB_LEFT_EDGE || aWidgetType == NS_THEME_TAB_RIGHT_EDGE) {
|
||||||
// There appears to be no way to really obtain this value, so we're forced
|
// HACK ALERT: There appears to be no way to really obtain this value, so we're forced
|
||||||
// to just use the default value for Luna (which also happens to be correct for
|
// to just use the default value for Luna (which also happens to be correct for
|
||||||
// all the other skins I've tried).
|
// all the other skins I've tried).
|
||||||
PRInt32 edgeSize = 2;
|
PRInt32 edgeSize = 2;
|
||||||
|
@ -783,7 +805,7 @@ nsNativeThemeWin::WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType,
|
||||||
// disabled, checked, dlgtype, default, etc.
|
// disabled, checked, dlgtype, default, etc.
|
||||||
*aShouldRepaint = PR_FALSE;
|
*aShouldRepaint = PR_FALSE;
|
||||||
if (aAttribute == mDisabledAtom || aAttribute == mCheckedAtom ||
|
if (aAttribute == mDisabledAtom || aAttribute == mCheckedAtom ||
|
||||||
aAttribute == mSelectedAtom)
|
aAttribute == mSelectedAtom || aAttribute == mReadOnlyAtom)
|
||||||
*aShouldRepaint = PR_TRUE;
|
*aShouldRepaint = PR_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -813,6 +835,10 @@ nsNativeThemeWin::CloseData()
|
||||||
closeTheme(mButtonTheme);
|
closeTheme(mButtonTheme);
|
||||||
mButtonTheme = NULL;
|
mButtonTheme = NULL;
|
||||||
}
|
}
|
||||||
|
if (mTextFieldTheme) {
|
||||||
|
closeTheme(mTextFieldTheme);
|
||||||
|
mTextFieldTheme = NULL;
|
||||||
|
}
|
||||||
if (mTooltipTheme) {
|
if (mTooltipTheme) {
|
||||||
closeTheme(mTooltipTheme);
|
closeTheme(mTooltipTheme);
|
||||||
mTooltipTheme = NULL;
|
mTooltipTheme = NULL;
|
||||||
|
|
|
@ -64,12 +64,14 @@ protected:
|
||||||
nsresult GetThemePartAndState(nsIFrame* aFrame, PRUint8 aWidgetType,
|
nsresult GetThemePartAndState(nsIFrame* aFrame, PRUint8 aWidgetType,
|
||||||
PRInt32& aPart, PRInt32& aState);
|
PRInt32& aPart, PRInt32& aState);
|
||||||
PRBool IsDisabled(nsIFrame* aFrame);
|
PRBool IsDisabled(nsIFrame* aFrame);
|
||||||
|
PRBool IsReadOnly(nsIFrame* aFrame);
|
||||||
PRBool IsChecked(nsIFrame* aFrame);
|
PRBool IsChecked(nsIFrame* aFrame);
|
||||||
PRBool IsSelected(nsIFrame* aFrame);
|
PRBool IsSelected(nsIFrame* aFrame);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HMODULE mThemeDLL;
|
HMODULE mThemeDLL;
|
||||||
HANDLE mButtonTheme;
|
HANDLE mButtonTheme;
|
||||||
|
HANDLE mTextFieldTheme;
|
||||||
HANDLE mTooltipTheme;
|
HANDLE mTooltipTheme;
|
||||||
HANDLE mToolbarTheme;
|
HANDLE mToolbarTheme;
|
||||||
HANDLE mRebarTheme;
|
HANDLE mRebarTheme;
|
||||||
|
@ -83,6 +85,8 @@ private:
|
||||||
nsCOMPtr<nsIAtom> mDisabledAtom;
|
nsCOMPtr<nsIAtom> mDisabledAtom;
|
||||||
nsCOMPtr<nsIAtom> mSelectedAtom;
|
nsCOMPtr<nsIAtom> mSelectedAtom;
|
||||||
nsCOMPtr<nsIAtom> mTypeAtom;
|
nsCOMPtr<nsIAtom> mTypeAtom;
|
||||||
|
nsCOMPtr<nsIAtom> mReadOnlyAtom;
|
||||||
|
nsCOMPtr<nsIAtom> mDefaultAtom;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Creator function
|
// Creator function
|
||||||
|
|
|
@ -32,7 +32,9 @@
|
||||||
|
|
||||||
/* ::::: textbox ::::: */
|
/* ::::: textbox ::::: */
|
||||||
|
|
||||||
textbox {
|
textbox
|
||||||
|
{
|
||||||
|
-moz-appearance: textfield;
|
||||||
cursor: text;
|
cursor: text;
|
||||||
margin: 2px 4px;
|
margin: 2px 4px;
|
||||||
border: 2px solid;
|
border: 2px solid;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче