forked from mirrors/gecko-dev
This lifts a bunch of string conversions higher up the stack, but allows us to make the servo code use utf-8 unconditionally, and seemed faster in my benchmarking (see comment 0). It should also make a bunch of attribute setters faster too (like setting .cssText), now that we use UTF8String for them (we couldn't because we couldn't specify different string types for the getter and setters). Differential Revision: https://phabricator.services.mozilla.com/D99590
83 lines
2.9 KiB
C++
83 lines
2.9 KiB
C++
/* -*- 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 nsResizerFrame_h___
|
|
#define nsResizerFrame_h___
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "mozilla/EventForwards.h"
|
|
#include "nsTitleBarFrame.h"
|
|
|
|
class nsIBaseWindow;
|
|
|
|
namespace mozilla {
|
|
class PresShell;
|
|
} // namespace mozilla
|
|
|
|
class nsResizerFrame final : public nsTitleBarFrame {
|
|
protected:
|
|
typedef mozilla::LayoutDeviceIntPoint LayoutDeviceIntPoint;
|
|
typedef mozilla::LayoutDeviceIntRect LayoutDeviceIntRect;
|
|
|
|
struct Direction {
|
|
int8_t mHorizontal;
|
|
int8_t mVertical;
|
|
};
|
|
|
|
public:
|
|
NS_DECL_FRAMEARENA_HELPERS(nsResizerFrame)
|
|
|
|
friend nsIFrame* NS_NewResizerFrame(mozilla::PresShell* aPresShell,
|
|
ComputedStyle* aStyle);
|
|
|
|
explicit nsResizerFrame(ComputedStyle* aStyle, nsPresContext* aPresContext);
|
|
|
|
virtual nsresult HandleEvent(nsPresContext* aPresContext,
|
|
mozilla::WidgetGUIEvent* aEvent,
|
|
nsEventStatus* aEventStatus) override;
|
|
|
|
MOZ_CAN_RUN_SCRIPT_BOUNDARY
|
|
virtual void MouseClicked(mozilla::WidgetMouseEvent* aEvent) override;
|
|
|
|
protected:
|
|
nsIContent* GetContentToResize(mozilla::PresShell* aPresShell,
|
|
nsIBaseWindow** aWindow);
|
|
|
|
Direction GetDirection();
|
|
|
|
/**
|
|
* Adjust the window position and size in a direction according to the mouse
|
|
* movement and the resizer direction. The minimum and maximum size is used
|
|
* to constrain the size.
|
|
*
|
|
* @param aPos left or top position
|
|
* @param aSize width or height
|
|
* @param aMinSize minimum width or height
|
|
* @param aMacSize maximum width or height
|
|
* @param aMovement the amount the mouse was moved
|
|
* @param aResizerDirection resizer direction returned by GetDirection
|
|
*/
|
|
static void AdjustDimensions(int32_t* aPos, int32_t* aSize, int32_t aMinSize,
|
|
int32_t aMaxSize, int32_t aMovement,
|
|
int8_t aResizerDirection);
|
|
|
|
struct SizeInfo {
|
|
nsCString width, height;
|
|
};
|
|
static void SizeInfoDtorFunc(void* aObject, nsAtom* aPropertyName,
|
|
void* aPropertyValue, void* aData);
|
|
static void ResizeContent(nsIContent* aContent, const Direction& aDirection,
|
|
const SizeInfo& aSizeInfo,
|
|
SizeInfo* aOriginalSizeInfo);
|
|
static void MaybePersistOriginalSize(nsIContent* aContent,
|
|
const SizeInfo& aSizeInfo);
|
|
static void RestoreOriginalSize(nsIContent* aContent);
|
|
|
|
protected:
|
|
LayoutDeviceIntRect mMouseDownRect;
|
|
LayoutDeviceIntPoint mMouseDownPoint;
|
|
}; // class nsResizerFrame
|
|
|
|
#endif /* nsResizerFrame_h___ */
|