diff options
Diffstat (limited to 'layout/generic/MiddleCroppingBlockFrame.h')
-rw-r--r-- | layout/generic/MiddleCroppingBlockFrame.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/layout/generic/MiddleCroppingBlockFrame.h b/layout/generic/MiddleCroppingBlockFrame.h new file mode 100644 index 0000000000..9086b2b0a3 --- /dev/null +++ b/layout/generic/MiddleCroppingBlockFrame.h @@ -0,0 +1,62 @@ +/* -*- 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 mozilla_MiddleCroppingBlockFrame_h +#define mozilla_MiddleCroppingBlockFrame_h + +#include "nsBlockFrame.h" +#include "nsIAnonymousContentCreator.h" +#include "nsQueryFrame.h" + +namespace mozilla { + +// A block frame that implements a simplistic version of middle-cropping. Note +// that this is not fully l10n aware or complex-writing-system-friendly, so it's +// generally mostly useful for filenames / urls / etc. +class MiddleCroppingBlockFrame : public nsBlockFrame, + public nsIAnonymousContentCreator { + public: + virtual void GetUncroppedValue(nsAString&) = 0; + void UpdateDisplayedValueToUncroppedValue(bool aNotify); + + NS_DECL_QUERYFRAME_TARGET(MiddleCroppingBlockFrame) + NS_DECL_QUERYFRAME + NS_DECL_ABSTRACT_FRAME(MiddleCroppingBlockFrame) + + protected: + MiddleCroppingBlockFrame(ComputedStyle*, nsPresContext*, ClassID); + + ~MiddleCroppingBlockFrame(); + + void Reflow(nsPresContext*, ReflowOutput&, const ReflowInput&, + nsReflowStatus&) override; + + nscoord GetMinISize(gfxContext*) override; + nscoord GetPrefISize(gfxContext*) override; + + /** + * Crop aText to fit inside aWidth using the styles of aFrame. + * @return true if aText was modified + */ + bool CropTextToWidth(gfxContext& aRenderingContext, nscoord aWidth, + nsString& aText) const; + + nsresult CreateAnonymousContent(nsTArray<ContentInfo>&) override; + void AppendAnonymousContentTo(nsTArray<nsIContent*>&, + uint32_t aFilter) override; + + /** + * Updates the displayed value by using aValue. + */ + void UpdateDisplayedValue(const nsAString& aValue, bool aNotify); + void Destroy(DestroyContext&) override; + + RefPtr<dom::Text> mTextNode; +}; + +} // namespace mozilla + +#endif |