2001-09-29 00:14:13 +04:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2012-05-21 15:12:37 +04:00
|
|
|
/* 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/. */
|
1999-04-21 01:39:52 +04:00
|
|
|
|
1999-04-21 01:43:09 +04:00
|
|
|
#ifndef nsSliderFrame_h__
|
|
|
|
#define nsSliderFrame_h__
|
1999-04-21 01:39:52 +04:00
|
|
|
|
2012-09-14 20:10:08 +04:00
|
|
|
#include "mozilla/Attributes.h"
|
2008-02-15 05:04:34 +03:00
|
|
|
#include "nsRepeatService.h"
|
2000-03-31 11:02:06 +04:00
|
|
|
#include "nsBoxFrame.h"
|
1999-04-21 01:39:52 +04:00
|
|
|
#include "nsIAtom.h"
|
|
|
|
#include "nsCOMPtr.h"
|
2002-09-07 09:38:16 +04:00
|
|
|
#include "nsITimer.h"
|
2011-06-28 21:59:14 +04:00
|
|
|
#include "nsIDOMEventListener.h"
|
1999-04-21 01:39:52 +04:00
|
|
|
|
|
|
|
class nsString;
|
1999-08-20 02:16:23 +04:00
|
|
|
class nsITimer;
|
2000-04-26 08:00:29 +04:00
|
|
|
class nsSliderFrame;
|
1999-08-20 02:16:23 +04:00
|
|
|
|
2006-03-27 01:30:36 +04:00
|
|
|
nsIFrame* NS_NewSliderFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
|
1999-04-21 01:39:52 +04:00
|
|
|
|
2011-06-28 21:59:14 +04:00
|
|
|
class nsSliderMediator : public nsIDOMEventListener
|
2000-04-26 08:00:29 +04:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
|
|
|
|
nsSliderFrame* mSlider;
|
|
|
|
|
2003-01-09 00:19:10 +03:00
|
|
|
nsSliderMediator(nsSliderFrame* aSlider) { mSlider = aSlider; }
|
2000-04-26 08:00:29 +04:00
|
|
|
virtual ~nsSliderMediator() {}
|
|
|
|
|
|
|
|
virtual void SetSlider(nsSliderFrame* aSlider) { mSlider = aSlider; }
|
|
|
|
|
2013-05-29 23:37:49 +04:00
|
|
|
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) MOZ_OVERRIDE;
|
2008-02-15 05:04:34 +03:00
|
|
|
};
|
2000-04-26 08:00:29 +04:00
|
|
|
|
|
|
|
class nsSliderFrame : public nsBoxFrame
|
1999-04-21 01:39:52 +04:00
|
|
|
{
|
|
|
|
public:
|
2009-09-12 20:49:24 +04:00
|
|
|
NS_DECL_FRAMEARENA_HELPERS
|
|
|
|
|
2003-09-14 05:25:04 +04:00
|
|
|
friend class nsSliderMediator;
|
|
|
|
|
2006-03-27 01:30:36 +04:00
|
|
|
nsSliderFrame(nsIPresShell* aShell, nsStyleContext* aContext);
|
1999-08-20 02:16:23 +04:00
|
|
|
virtual ~nsSliderFrame();
|
1999-04-21 01:39:52 +04:00
|
|
|
|
2014-01-06 03:31:14 +04:00
|
|
|
#ifdef DEBUG_FRAME_DUMP
|
2014-02-18 11:47:48 +04:00
|
|
|
virtual nsresult GetFrameName(nsAString& aResult) const MOZ_OVERRIDE {
|
2001-11-14 04:33:42 +03:00
|
|
|
return MakeFrameName(NS_LITERAL_STRING("SliderFrame"), aResult);
|
1999-04-21 01:39:52 +04:00
|
|
|
}
|
1999-11-02 01:12:45 +03:00
|
|
|
#endif
|
1999-06-15 08:02:43 +04:00
|
|
|
|
2012-09-14 20:10:08 +04:00
|
|
|
virtual nsSize GetPrefSize(nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
|
|
|
|
virtual nsSize GetMinSize(nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
|
|
|
|
virtual nsSize GetMaxSize(nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
|
|
|
|
NS_IMETHOD DoLayout(nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
|
2000-03-31 11:02:06 +04:00
|
|
|
|
1999-11-02 01:12:45 +03:00
|
|
|
// nsIFrame overrides
|
2012-09-14 20:10:08 +04:00
|
|
|
virtual void DestroyFrom(nsIFrame* aDestructRoot) MOZ_OVERRIDE;
|
1999-08-29 14:51:15 +04:00
|
|
|
|
2013-02-14 15:12:27 +04:00
|
|
|
virtual void BuildDisplayListForChildren(nsDisplayListBuilder* aBuilder,
|
|
|
|
const nsRect& aDirtyRect,
|
|
|
|
const nsDisplayListSet& aLists) MOZ_OVERRIDE;
|
2006-01-26 05:29:17 +03:00
|
|
|
|
2013-02-14 15:12:27 +04:00
|
|
|
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|
|
|
const nsRect& aDirtyRect,
|
|
|
|
const nsDisplayListSet& aLists) MOZ_OVERRIDE;
|
1999-06-15 08:02:43 +04:00
|
|
|
|
2014-02-18 11:47:48 +04:00
|
|
|
virtual nsresult AttributeChanged(int32_t aNameSpaceID,
|
2014-02-18 12:36:33 +04:00
|
|
|
nsIAtom* aAttribute,
|
|
|
|
int32_t aModType) MOZ_OVERRIDE;
|
1999-06-15 08:02:43 +04:00
|
|
|
|
2014-05-25 02:20:40 +04:00
|
|
|
virtual void Init(nsIContent* aContent,
|
|
|
|
nsContainerFrame* aParent,
|
|
|
|
nsIFrame* asPrevInFlow) MOZ_OVERRIDE;
|
1999-06-15 08:02:43 +04:00
|
|
|
|
|
|
|
|
2014-02-18 11:47:48 +04:00
|
|
|
virtual nsresult HandleEvent(nsPresContext* aPresContext,
|
2014-02-18 12:36:33 +04:00
|
|
|
mozilla::WidgetGUIEvent* aEvent,
|
|
|
|
nsEventStatus* aEventStatus) MOZ_OVERRIDE;
|
1999-06-15 08:02:43 +04:00
|
|
|
|
2012-09-14 20:10:08 +04:00
|
|
|
virtual nsIAtom* GetType() const MOZ_OVERRIDE;
|
2007-05-25 14:09:29 +04:00
|
|
|
|
2014-05-28 23:36:58 +04:00
|
|
|
// nsContainerFrame overrides
|
|
|
|
virtual void SetInitialChildList(ChildListID aListID,
|
|
|
|
nsFrameList& aChildList) MOZ_OVERRIDE;
|
|
|
|
virtual void AppendFrames(ChildListID aListID,
|
|
|
|
nsFrameList& aFrameList) MOZ_OVERRIDE;
|
|
|
|
virtual void InsertFrames(ChildListID aListID,
|
|
|
|
nsIFrame* aPrevFrame,
|
|
|
|
nsFrameList& aFrameList) MOZ_OVERRIDE;
|
|
|
|
virtual void RemoveFrame(ChildListID aListID,
|
|
|
|
nsIFrame* aOldFrame) MOZ_OVERRIDE;
|
|
|
|
|
2012-07-09 20:55:35 +04:00
|
|
|
nsresult StartDrag(nsIDOMEvent* aEvent);
|
1999-06-15 08:02:43 +04:00
|
|
|
|
2012-08-22 19:56:38 +04:00
|
|
|
static int32_t GetCurrentPosition(nsIContent* content);
|
|
|
|
static int32_t GetMinPosition(nsIContent* content);
|
|
|
|
static int32_t GetMaxPosition(nsIContent* content);
|
|
|
|
static int32_t GetIncrement(nsIContent* content);
|
|
|
|
static int32_t GetPageIncrement(nsIContent* content);
|
|
|
|
static int32_t GetIntegerAttribute(nsIContent* content, nsIAtom* atom, int32_t defaultValue);
|
2000-03-31 11:02:06 +04:00
|
|
|
void EnsureOrient();
|
1999-06-15 08:02:43 +04:00
|
|
|
|
2004-08-01 03:15:21 +04:00
|
|
|
NS_IMETHOD HandlePress(nsPresContext* aPresContext,
|
2013-10-02 07:46:03 +04:00
|
|
|
mozilla::WidgetGUIEvent* aEvent,
|
|
|
|
nsEventStatus* aEventStatus) MOZ_OVERRIDE;
|
1999-08-20 02:16:23 +04:00
|
|
|
|
2004-08-01 03:15:21 +04:00
|
|
|
NS_IMETHOD HandleMultiplePress(nsPresContext* aPresContext,
|
2013-10-02 07:46:03 +04:00
|
|
|
mozilla::WidgetGUIEvent* aEvent,
|
|
|
|
nsEventStatus* aEventStatus,
|
|
|
|
bool aControlHeld) MOZ_OVERRIDE
|
|
|
|
{
|
|
|
|
return NS_OK;
|
|
|
|
}
|
1999-08-20 02:16:23 +04:00
|
|
|
|
2011-08-03 07:39:02 +04:00
|
|
|
NS_IMETHOD HandleDrag(nsPresContext* aPresContext,
|
2013-10-02 07:46:03 +04:00
|
|
|
mozilla::WidgetGUIEvent* aEvent,
|
|
|
|
nsEventStatus* aEventStatus) MOZ_OVERRIDE
|
|
|
|
{
|
|
|
|
return NS_OK;
|
|
|
|
}
|
2011-08-03 07:39:02 +04:00
|
|
|
|
2004-08-01 03:15:21 +04:00
|
|
|
NS_IMETHOD HandleRelease(nsPresContext* aPresContext,
|
2013-10-02 07:46:03 +04:00
|
|
|
mozilla::WidgetGUIEvent* aEvent,
|
|
|
|
nsEventStatus* aEventStatus) MOZ_OVERRIDE;
|
1999-08-20 02:16:23 +04:00
|
|
|
|
1999-06-15 08:02:43 +04:00
|
|
|
private:
|
|
|
|
|
2011-09-29 10:19:26 +04:00
|
|
|
bool GetScrollToClick();
|
2012-08-06 07:00:57 +04:00
|
|
|
nsIFrame* GetScrollbar();
|
2013-10-02 07:46:03 +04:00
|
|
|
bool ShouldScrollForEvent(mozilla::WidgetGUIEvent* aEvent);
|
|
|
|
bool ShouldScrollToClickForEvent(mozilla::WidgetGUIEvent* aEvent);
|
|
|
|
bool IsEventOverThumb(mozilla::WidgetGUIEvent* aEvent);
|
2000-03-31 11:02:06 +04:00
|
|
|
|
2007-04-10 02:39:57 +04:00
|
|
|
void PageUpDown(nscoord change);
|
2011-09-29 10:19:26 +04:00
|
|
|
void SetCurrentThumbPosition(nsIContent* aScrollbar, nscoord aNewPos, bool aIsSmooth,
|
2013-02-27 01:26:41 +04:00
|
|
|
bool aMaySnap);
|
|
|
|
void SetCurrentPosition(nsIContent* aScrollbar, int32_t aNewPos, bool aIsSmooth);
|
2012-08-22 19:56:38 +04:00
|
|
|
void SetCurrentPositionInternal(nsIContent* aScrollbar, int32_t pos,
|
2013-02-27 01:26:41 +04:00
|
|
|
bool aIsSmooth);
|
2013-02-27 20:56:00 +04:00
|
|
|
void CurrentPositionChanged();
|
2012-07-09 20:55:35 +04:00
|
|
|
|
2011-09-29 10:19:26 +04:00
|
|
|
void DragThumb(bool aGrabMouseEvents);
|
1999-06-15 08:02:43 +04:00
|
|
|
void AddListener();
|
|
|
|
void RemoveListener();
|
2011-09-29 10:19:26 +04:00
|
|
|
bool isDraggingThumb();
|
1999-06-15 08:02:43 +04:00
|
|
|
|
2008-02-15 05:04:34 +03:00
|
|
|
void StartRepeat() {
|
|
|
|
nsRepeatService::GetInstance()->Start(Notify, this);
|
|
|
|
}
|
|
|
|
void StopRepeat() {
|
|
|
|
nsRepeatService::GetInstance()->Stop(Notify, this);
|
|
|
|
}
|
|
|
|
void Notify();
|
|
|
|
static void Notify(void* aData) {
|
|
|
|
(static_cast<nsSliderFrame*>(aData))->Notify();
|
|
|
|
}
|
|
|
|
|
2009-05-12 14:13:09 +04:00
|
|
|
nsPoint mDestinationPoint;
|
|
|
|
nsRefPtr<nsSliderMediator> mMediator;
|
|
|
|
|
1999-06-15 08:02:43 +04:00
|
|
|
float mRatio;
|
|
|
|
|
2004-08-28 15:41:02 +04:00
|
|
|
nscoord mDragStart;
|
1999-06-15 08:02:43 +04:00
|
|
|
nscoord mThumbStart;
|
1999-04-21 01:39:52 +04:00
|
|
|
|
2012-08-22 19:56:38 +04:00
|
|
|
int32_t mCurPos;
|
1999-06-23 21:00:17 +04:00
|
|
|
|
1) implememted box reflow coelescing.
2) implemented gfx scrollbars for list boxes
3) fixed progess meter to be an animated gif
4) fixed bugs 23521, 24721, 19114, 20546, 24385, 24457, 23156, 20226, 22543
-r hyatt, troy, rod
2000-02-10 01:02:40 +03:00
|
|
|
nscoord mChange;
|
|
|
|
|
2009-01-14 21:21:58 +03:00
|
|
|
// true if an attribute change has been caused by the user manipulating the
|
|
|
|
// slider. This allows notifications to tell how a slider's current position
|
|
|
|
// was changed.
|
2011-09-29 10:19:26 +04:00
|
|
|
bool mUserChanged;
|
2009-01-14 21:21:58 +03:00
|
|
|
|
2011-09-29 10:19:26 +04:00
|
|
|
static bool gMiddlePref;
|
2012-08-22 19:56:38 +04:00
|
|
|
static int32_t gSnapMultiplier;
|
1999-04-21 01:43:09 +04:00
|
|
|
}; // class nsSliderFrame
|
1999-04-21 01:39:52 +04:00
|
|
|
|
|
|
|
#endif
|