summaryrefslogtreecommitdiffstats
path: root/layout/forms/nsButtonFrameRenderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'layout/forms/nsButtonFrameRenderer.h')
-rw-r--r--layout/forms/nsButtonFrameRenderer.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/layout/forms/nsButtonFrameRenderer.h b/layout/forms/nsButtonFrameRenderer.h
new file mode 100644
index 000000000..8662c52e0
--- /dev/null
+++ b/layout/forms/nsButtonFrameRenderer.h
@@ -0,0 +1,88 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef nsButtonFrameRenderer_h___
+#define nsButtonFrameRenderer_h___
+
+#include "imgIContainer.h"
+#include "nsMargin.h"
+
+class nsIFrame;
+class nsFrame;
+class nsDisplayList;
+class nsDisplayListBuilder;
+class nsPresContext;
+class nsRenderingContext;
+struct nsRect;
+class nsStyleContext;
+
+
+#define NS_BUTTON_RENDERER_FOCUS_INNER_CONTEXT_INDEX 0
+#define NS_BUTTON_RENDERER_FOCUS_OUTER_CONTEXT_INDEX 1
+#define NS_BUTTON_RENDERER_LAST_CONTEXT_INDEX NS_BUTTON_RENDERER_FOCUS_OUTER_CONTEXT_INDEX
+
+class nsButtonFrameRenderer {
+ typedef mozilla::image::DrawResult DrawResult;
+
+public:
+
+ nsButtonFrameRenderer();
+ ~nsButtonFrameRenderer();
+
+ /**
+ * Create display list items for the button
+ */
+ nsresult DisplayButton(nsDisplayListBuilder* aBuilder,
+ nsDisplayList* aBackground, nsDisplayList* aForeground);
+
+
+ DrawResult PaintOutlineAndFocusBorders(nsDisplayListBuilder* aBuilder,
+ nsPresContext* aPresContext,
+ nsRenderingContext& aRenderingContext,
+ const nsRect& aDirtyRect,
+ const nsRect& aRect);
+
+ DrawResult PaintBorder(nsDisplayListBuilder* aBuilder,
+ nsPresContext* aPresContext,
+ nsRenderingContext& aRenderingContext,
+ const nsRect& aDirtyRect,
+ const nsRect& aRect);
+
+ void SetFrame(nsFrame* aFrame, nsPresContext* aPresContext);
+
+ void SetDisabled(bool aDisabled, bool notify);
+
+ bool isActive();
+ bool isDisabled();
+
+ void GetButtonOuterFocusRect(const nsRect& aRect, nsRect& aResult);
+ void GetButtonRect(const nsRect& aRect, nsRect& aResult);
+ void GetButtonInnerFocusRect(const nsRect& aRect, nsRect& aResult);
+ nsMargin GetButtonOuterFocusBorderAndPadding();
+ nsMargin GetButtonBorderAndPadding();
+ nsMargin GetButtonInnerFocusMargin();
+ nsMargin GetButtonInnerFocusBorderAndPadding();
+ nsMargin GetAddedButtonBorderAndPadding();
+
+ nsStyleContext* GetStyleContext(int32_t aIndex) const;
+ void SetStyleContext(int32_t aIndex, nsStyleContext* aStyleContext);
+ void ReResolveStyles(nsPresContext* aPresContext);
+
+ nsIFrame* GetFrame();
+
+protected:
+
+private:
+
+ // cached styles for focus and outline.
+ RefPtr<nsStyleContext> mInnerFocusStyle;
+ RefPtr<nsStyleContext> mOuterFocusStyle;
+
+ nsFrame* mFrame;
+};
+
+
+#endif
+