summaryrefslogtreecommitdiffstats
path: root/layout/xul/nsTextBoxFrame.h
diff options
context:
space:
mode:
Diffstat (limited to 'layout/xul/nsTextBoxFrame.h')
-rw-r--r--layout/xul/nsTextBoxFrame.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/layout/xul/nsTextBoxFrame.h b/layout/xul/nsTextBoxFrame.h
new file mode 100644
index 0000000000..14e45bc9bd
--- /dev/null
+++ b/layout/xul/nsTextBoxFrame.h
@@ -0,0 +1,128 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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 nsTextBoxFrame_h___
+#define nsTextBoxFrame_h___
+
+#include "mozilla/Attributes.h"
+#include "nsLeafBoxFrame.h"
+
+class nsAccessKeyInfo;
+class nsAsyncAccesskeyUpdate;
+class nsFontMetrics;
+
+namespace mozilla {
+class nsDisplayXULTextBox;
+class PresShell;
+} // namespace mozilla
+
+class nsTextBoxFrame final : public nsLeafBoxFrame {
+ public:
+ NS_DECL_QUERYFRAME
+ NS_DECL_FRAMEARENA_HELPERS(nsTextBoxFrame)
+
+ virtual nsSize GetXULPrefSize(nsBoxLayoutState& aBoxLayoutState) override;
+ virtual nsSize GetXULMinSize(nsBoxLayoutState& aBoxLayoutState) override;
+ virtual nscoord GetXULBoxAscent(nsBoxLayoutState& aBoxLayoutState) override;
+ NS_IMETHOD DoXULLayout(nsBoxLayoutState& aBoxLayoutState) override;
+ virtual void MarkIntrinsicISizesDirty() override;
+
+ enum CroppingStyle { CropNone, CropLeft, CropRight, CropCenter, CropAuto };
+
+ friend nsIFrame* NS_NewTextBoxFrame(mozilla::PresShell* aPresShell,
+ ComputedStyle* aStyle);
+
+ virtual void Init(nsIContent* aContent, nsContainerFrame* aParent,
+ nsIFrame* asPrevInFlow) override;
+
+ virtual nsresult AttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute,
+ int32_t aModType) override;
+
+#ifdef DEBUG_FRAME_DUMP
+ virtual nsresult GetFrameName(nsAString& aResult) const override;
+#endif
+
+ void UpdateAttributes(nsAtom* aAttribute, bool& aResize, bool& aRedraw);
+
+ virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
+ const nsDisplayListSet& aLists) override;
+
+ virtual ~nsTextBoxFrame();
+
+ void PaintTitle(gfxContext& aRenderingContext, const nsRect& aDirtyRect,
+ nsPoint aPt, const nscolor* aOverrideColor);
+
+ nsRect GetComponentAlphaBounds() const;
+
+ virtual bool XULComputesOwnOverflowArea() override;
+
+ void GetCroppedTitle(nsString& aTitle) const { aTitle = mCroppedTitle; }
+
+ virtual void DidSetComputedStyle(ComputedStyle* aOldComputedStyle) override;
+
+ // Helper for GetCroppedTitle, factored out so that we can also use it from
+ // nsTreeBodyFrame::AdjustForCellText.
+ static void CropStringForWidth(nsAString& aText,
+ gfxContext& aRenderingContext,
+ nsFontMetrics& aFontMetrics, nscoord aWidth,
+ CroppingStyle aCropType);
+
+ static bool AlwaysAppendAccessKey();
+ static bool InsertSeparatorBeforeAccessKey();
+
+ protected:
+ friend class nsAsyncAccesskeyUpdate;
+ friend class mozilla::nsDisplayXULTextBox;
+ // Should be called only by nsAsyncAccesskeyUpdate.
+ // Returns true if accesskey was updated.
+ bool UpdateAccesskey(WeakFrame& aWeakThis);
+ void UpdateAccessTitle();
+ void UpdateAccessIndex();
+
+ // Recompute our title, ignoring the access key but taking into
+ // account text-transform.
+ void RecomputeTitle();
+
+ // REVIEW: SORRY! Couldn't resist devirtualizing these
+ void LayoutTitle(nsPresContext* aPresContext, gfxContext& aRenderingContext,
+ const nsRect& aRect);
+
+ void CalculateUnderline(DrawTarget* aDrawTarget, nsFontMetrics& aFontMetrics);
+
+ void CalcTextSize(nsBoxLayoutState& aBoxLayoutState);
+
+ void CalcDrawRect(gfxContext& aRenderingContext);
+
+ explicit nsTextBoxFrame(ComputedStyle* aStyle, nsPresContext* aPresContext);
+
+ nscoord CalculateTitleForWidth(gfxContext& aRenderingContext, nscoord aWidth);
+
+ void GetTextSize(gfxContext& aRenderingContext, const nsString& aString,
+ nsSize& aSize, nscoord& aAscent);
+
+ private:
+ void DrawText(gfxContext& aRenderingContext, const nsRect& aDirtyRect,
+ const nsRect& aTextRect, const nscolor* aOverrideColor);
+
+ nsString mTitle;
+ nsString mCroppedTitle;
+ nsString mAccessKey;
+ nsSize mTextSize;
+ nsRect mTextDrawRect;
+ nsAccessKeyInfo* mAccessKeyInfo;
+
+ CroppingStyle mCropType;
+ nscoord mAscent;
+ bool mNeedsRecalc;
+ bool mNeedsReflowCallback;
+
+ static bool gAlwaysAppendAccessKey;
+ static bool gAccessKeyPrefInitialized;
+ static bool gInsertSeparatorBeforeAccessKey;
+ static bool gInsertSeparatorPrefInitialized;
+
+}; // class nsTextBoxFrame
+
+#endif /* nsTextBoxFrame_h___ */