1999-02-19 21:23:02 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Netscape Public License
|
|
|
|
* Version 1.0 (the "License"); you may not use this file except in
|
|
|
|
* compliance with the License. You may obtain a copy of the License at
|
|
|
|
* http://www.mozilla.org/NPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the License is distributed on an "AS IS"
|
|
|
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
|
|
|
* the License for the specific language governing rights and limitations
|
|
|
|
* under the License.
|
|
|
|
*
|
|
|
|
* The Original Code is Mozilla Communicator client code.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
|
|
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
|
|
|
* Netscape Communications Corporation. All Rights Reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
#ifndef nsButtonFrameRenderer_h___
|
|
|
|
#define nsButtonFrameRenderer_h___
|
|
|
|
|
|
|
|
#include "nsCoord.h"
|
|
|
|
#include "nsIStyleContext.h"
|
|
|
|
#include "nsCOMPtr.h"
|
|
|
|
#include "nsFrame.h"
|
|
|
|
|
|
|
|
class nsButtonFrameRenderer {
|
|
|
|
public:
|
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
enum ButtonState {
|
|
|
|
active,
|
|
|
|
hover,
|
|
|
|
normal
|
|
|
|
};
|
1999-02-19 21:23:02 +03:00
|
|
|
nsButtonFrameRenderer();
|
1999-02-26 09:41:10 +03:00
|
|
|
virtual ~nsButtonFrameRenderer();
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
NS_IMETHOD HandleEvent(nsIPresContext& aPresContext,
|
|
|
|
nsGUIEvent* aEvent,
|
|
|
|
nsEventStatus& aEventStatus);
|
1999-02-19 21:23:02 +03:00
|
|
|
|
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
virtual void PaintButton(nsIPresContext& aPresContext,
|
|
|
|
nsIRenderingContext& aRenderingContext,
|
|
|
|
const nsRect& aDirtyRect,
|
|
|
|
nsFramePaintLayer aWhichLayer,
|
|
|
|
const nsRect& aRect);
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
virtual void PaintOutlineAndFocusBorders(nsIPresContext& aPresContext,
|
|
|
|
nsIRenderingContext& aRenderingContext,
|
|
|
|
const nsRect& aDirtyRect,
|
|
|
|
nsFramePaintLayer aWhichLayer,
|
|
|
|
const nsRect& aRect);
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
virtual void PaintBorderAndBackground(nsIPresContext& aPresContext,
|
|
|
|
nsIRenderingContext& aRenderingContext,
|
|
|
|
const nsRect& aDirtyRect,
|
|
|
|
nsFramePaintLayer aWhichLayer,
|
|
|
|
const nsRect& aRect);
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
virtual void SetNameSpace(PRInt32 aNameSpace);
|
1999-03-26 22:39:23 +03:00
|
|
|
virtual void SetFrame(nsIFrame* aFrame, nsIPresContext& aPresContext);
|
1999-02-26 11:48:24 +03:00
|
|
|
|
1999-03-06 22:43:13 +03:00
|
|
|
virtual void SetActive(PRBool aActive, PRBool notify);
|
|
|
|
virtual void SetHover(PRBool aHover, PRBool notify);
|
1999-02-26 11:48:24 +03:00
|
|
|
virtual void SetFocus(PRBool aFocus, PRBool notify);
|
|
|
|
virtual void SetDisabled(PRBool aDisabled, PRBool notify);
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-03-06 22:43:13 +03:00
|
|
|
PRBool isActive();
|
|
|
|
PRBool isHover();
|
1999-02-26 11:48:24 +03:00
|
|
|
PRBool isDisabled();
|
|
|
|
PRBool isFocus();
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
virtual void GetButtonOutlineRect(const nsRect& aRect, nsRect& aResult);
|
|
|
|
virtual void GetButtonOuterFocusRect(const nsRect& aRect, nsRect& aResult);
|
|
|
|
virtual void GetButtonRect(const nsRect& aRect, nsRect& aResult);
|
|
|
|
virtual void GetButtonInnerFocusRect(const nsRect& aRect, nsRect& aResult);
|
|
|
|
virtual void GetButtonContentRect(const nsRect& aRect, nsRect& aResult);
|
1999-03-26 22:39:23 +03:00
|
|
|
virtual nsMargin GetButtonOuterFocusBorderAndPadding();
|
|
|
|
virtual nsMargin GetButtonBorderAndPadding();
|
|
|
|
virtual nsMargin GetButtonInnerFocusMargin();
|
|
|
|
virtual nsMargin GetButtonInnerFocusBorderAndPadding();
|
|
|
|
virtual nsMargin GetButtonOutlineBorderAndPadding();
|
|
|
|
virtual nsMargin GetFullButtonBorderAndPadding();
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 11:48:24 +03:00
|
|
|
virtual void ReResolveStyles(nsIPresContext& aPresContext);
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
/**
|
|
|
|
* Subroutine to add in borders and padding
|
|
|
|
*/
|
1999-03-02 04:25:33 +03:00
|
|
|
virtual void AddFocusBordersAndPadding(nsIPresContext& aPresContext,
|
1999-02-26 09:41:10 +03:00
|
|
|
const nsHTMLReflowState& aReflowState,
|
|
|
|
nsHTMLReflowMetrics& aDesiredSize,
|
|
|
|
nsMargin& aBorderPadding);
|
1999-02-19 21:23:02 +03:00
|
|
|
|
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
protected:
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 11:48:24 +03:00
|
|
|
virtual nsString GetPseudoClassAttribute();
|
|
|
|
virtual void SetPseudoClassAttribute(const nsString& value, PRBool notify);
|
|
|
|
virtual void ToggleClass(PRBool aEnabled, const nsString& c, PRBool notify);
|
|
|
|
virtual void AddClass(nsString& pseudoclass, const nsString newClass);
|
|
|
|
virtual void RemoveClass(nsString& pseudoclass, const nsString newClass);
|
|
|
|
virtual PRInt32 IndexOfClass(nsString& pseudoclass, const nsString& c);
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 11:48:24 +03:00
|
|
|
private:
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
// cached styles for focus and outline.
|
|
|
|
nsCOMPtr<nsIStyleContext> mBorderStyle;
|
|
|
|
nsCOMPtr<nsIStyleContext> mInnerFocusStyle;
|
|
|
|
nsCOMPtr<nsIStyleContext> mOuterFocusStyle;
|
|
|
|
nsCOMPtr<nsIStyleContext> mOutlineStyle;
|
1999-02-19 21:23:02 +03:00
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
PRInt32 mNameSpace;
|
1999-03-26 22:39:23 +03:00
|
|
|
nsIFrame* mFrame;
|
1999-02-19 21:23:02 +03:00
|
|
|
};
|
|
|
|
|
1999-02-26 09:41:10 +03:00
|
|
|
|
1999-02-19 21:23:02 +03:00
|
|
|
#endif
|
|
|
|
|