1
0
mirror of https://github.com/roytam1/UXP.git synced 2026-05-26 22:48:47 +00:00
Files
UXP/layout/xul/nsTextBoxFrame.h
T
FranklinDM 60c344a56b Issue #2104 - Part 1: Implement "clip" attribute value for XUL string cropping
This implements the "clip" attribute value for the "crop" attribute found in XUL label elements. It functions similarly to having the text-overflow property set to an empty string or "". This shouldn't break previously established behavior as it only adds a new value to be checked.

The behavior of the "none" attribute value in the documentation (https://udn.realityripple.com/docs/Archive/Mozilla/XUL/Attribute/crop) is incorrect. The "none" attribute value literally means "don't crop anything" if you'd check the code and is also equivalent to not setting the "crop" attribute at all. This has always been the case since Firefox 2 (earliest version I checked) and apparently, this section of the documentation was copied verbatim from XULPlanet without even checking if it's correct.
2023-02-08 16:56:51 +08:00

134 lines
4.4 KiB
C++

/* -*- 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 nsTextBoxFrame_h___
#define nsTextBoxFrame_h___
#include "mozilla/Attributes.h"
#include "nsLeafBoxFrame.h"
class nsAccessKeyInfo;
class nsAsyncAccesskeyUpdate;
class nsFontMetrics;
class nsTextBoxFrame : public nsLeafBoxFrame
{
public:
NS_DECL_QUERYFRAME_TARGET(nsTextBoxFrame)
NS_DECL_QUERYFRAME
NS_DECL_FRAMEARENA_HELPERS
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, CropClip, CropAuto };
friend nsIFrame* NS_NewTextBoxFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
virtual void Init(nsIContent* aContent,
nsContainerFrame* aParent,
nsIFrame* asPrevInFlow) override;
virtual void DestroyFrom(nsIFrame* aDestructRoot) override;
virtual nsresult AttributeChanged(int32_t aNameSpaceID,
nsIAtom* aAttribute,
int32_t aModType) override;
#ifdef DEBUG_FRAME_DUMP
virtual nsresult GetFrameName(nsAString& aResult) const override;
#endif
void UpdateAttributes(nsIAtom* aAttribute,
bool& aResize,
bool& aRedraw);
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayListSet& aLists) override;
virtual ~nsTextBoxFrame();
void PaintTitle(nsRenderingContext& aRenderingContext,
const nsRect& aDirtyRect,
nsPoint aPt,
const nscolor* aOverrideColor);
nsRect GetComponentAlphaBounds();
virtual bool ComputesOwnOverflowArea() override;
void GetCroppedTitle(nsString& aTitle) const { aTitle = mCroppedTitle; }
virtual void DidSetStyleContext(nsStyleContext* aOldStyleContext) override;
protected:
friend class nsAsyncAccesskeyUpdate;
friend class nsDisplayXULTextBox;
// Should be called only by nsAsyncAccesskeyUpdate.
// Returns true if accesskey was updated.
bool UpdateAccesskey(nsWeakFrame& 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,
nsRenderingContext& aRenderingContext,
const nsRect& aRect);
void CalculateUnderline(DrawTarget* aDrawTarget, nsFontMetrics& aFontMetrics);
void CalcTextSize(nsBoxLayoutState& aBoxLayoutState);
void CalcDrawRect(nsRenderingContext &aRenderingContext);
explicit nsTextBoxFrame(nsStyleContext* aContext);
nscoord CalculateTitleForWidth(nsRenderingContext& aRenderingContext,
nscoord aWidth);
void GetTextSize(nsRenderingContext& aRenderingContext,
const nsString& aString,
nsSize& aSize,
nscoord& aAscent);
nsresult RegUnregAccessKey(bool aDoReg);
private:
bool AlwaysAppendAccessKey();
bool InsertSeparatorBeforeAccessKey();
void DrawText(nsRenderingContext& 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___ */