зеркало из https://github.com/mozilla/pjs.git
125 строки
4.3 KiB
C
125 строки
4.3 KiB
C
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||
|
*
|
||
|
* The contents of this file are subject to the Netscape Public License
|
||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||
|
* http://www.mozilla.org/NPL/
|
||
|
*
|
||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||
|
* for the specific language governing rights and limitations under the
|
||
|
* NPL.
|
||
|
*
|
||
|
* The Initial Developer of this code under the NPL is Netscape
|
||
|
* Communications Corporation. Portions created by Netscape are
|
||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||
|
* Reserved.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* macmocha.h
|
||
|
* MacFE mocha hacks
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include "structs.h" // mjc
|
||
|
#include "libevent.h"
|
||
|
|
||
|
/*
|
||
|
* static class that encapsulates most of the Macha hacks
|
||
|
*/
|
||
|
class CMochaHacks
|
||
|
{
|
||
|
private:
|
||
|
static LO_Element* sMouseOverElement; // layout element the cursor is over
|
||
|
static MWContext* sMouseOverElementContext; // context associated with sMouseOverElement
|
||
|
static LO_AnchorData* sMouseOverMapArea; // AREA tag the cursor is over
|
||
|
|
||
|
public:
|
||
|
static void ClearSelectionForContext( MWContext* context )
|
||
|
{
|
||
|
if (context == sMouseOverElementContext)
|
||
|
{
|
||
|
sMouseOverElement = NULL;
|
||
|
sMouseOverElementContext = NULL;
|
||
|
sMouseOverMapArea = NULL;
|
||
|
}
|
||
|
}
|
||
|
static void SendOutOfElementEvent(MWContext * winContext, CL_Layer* layer, SPoint32 where); // add layer param 1997-03-02 mjc
|
||
|
static void SendOutOfMapAreaEvent(MWContext * winContext, CL_Layer* layer, SPoint32 where); // add layer param 1997-03-02 mjc
|
||
|
static void ResetMochaMouse();
|
||
|
|
||
|
static Boolean IsMouseOverElement(LO_Element* inElement)
|
||
|
{ return inElement == sMouseOverElement; }
|
||
|
static Boolean IsMouseOverMapArea(LO_AnchorData* inAnchorData)
|
||
|
{ return inAnchorData == sMouseOverMapArea; }
|
||
|
|
||
|
static void SetMouseOverElement(LO_Element* inElement, MWContext* inElementContext = NULL)
|
||
|
{
|
||
|
sMouseOverElement = inElement;
|
||
|
sMouseOverElementContext = inElementContext;
|
||
|
}
|
||
|
static void RemoveReferenceToMouseOverElementContext(MWContext *context)
|
||
|
{
|
||
|
if (sMouseOverElementContext == context)
|
||
|
sMouseOverElementContext = NULL;
|
||
|
}
|
||
|
static void SetMouseOverMapArea(LO_AnchorData* inAnchorData)
|
||
|
{ sMouseOverMapArea = inAnchorData; }
|
||
|
|
||
|
static LO_Element* GetMouseOverElement()
|
||
|
{ return sMouseOverElement; }
|
||
|
static LO_AnchorData* GetMouseOverMapArea()
|
||
|
{ return sMouseOverMapArea; }
|
||
|
|
||
|
static uint32 MochaModifiers(const UInt16 inModifiers);
|
||
|
static uint32 MochaModifiersFromKeyboard(void);
|
||
|
|
||
|
// manage windows declared as dependent in javascript
|
||
|
static Boolean IsDependent(MWContext* inContext);
|
||
|
static void AddDependent(MWContext* inParent, MWContext* inChild);
|
||
|
static void RemoveDependents(MWContext* inContext);
|
||
|
|
||
|
// Whenever a window or frame moves or resizes send an event to javascript
|
||
|
static void SendMoveEvent(MWContext* inContext, int32 inX, int32 inY);
|
||
|
|
||
|
static void SendEvent(MWContext* inContext, int32 inType, LO_Element* inElement = nil);
|
||
|
|
||
|
// Send navigation events - currently not cancellable
|
||
|
static void SendBackEvent(MWContext* inContext)
|
||
|
{ SendEvent(inContext, EVENT_BACK); }
|
||
|
|
||
|
static void SendForwardEvent(MWContext* inContext)
|
||
|
{ SendEvent(inContext, EVENT_FORWARD); }
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* CMochaEventCallback
|
||
|
* class that encapsulates sending of mocha events
|
||
|
* Subclasses should override EventComplete
|
||
|
*/
|
||
|
|
||
|
class CMochaEventCallback {
|
||
|
public:
|
||
|
|
||
|
// Constructors
|
||
|
CMochaEventCallback();
|
||
|
virtual ~CMochaEventCallback();
|
||
|
|
||
|
// Mocha interface
|
||
|
void SendEvent(MWContext * context, LO_Element * element, int32 type, CL_Layer* layer, SPoint32 where);
|
||
|
void SendEvent(MWContext * context, LO_AnchorData * data, int32 type, CL_Layer* layer, SPoint32 where);
|
||
|
|
||
|
// MochaCallback calls EventComplete. You'll be deleted after this call
|
||
|
virtual void Complete(MWContext * context, LO_Element * element,
|
||
|
int32 type, ETEventStatus status);
|
||
|
|
||
|
static void MochaCallback(MWContext * context, LO_Element * element,
|
||
|
int32 type, void * inCallback, ETEventStatus status);
|
||
|
|
||
|
private:
|
||
|
// Old Mocha calls used to accept either LO_Element, or LO_AnchorData
|
||
|
// New ones only accept LO_Element, so sometimes we need to create/dispose
|
||
|
// dummy layout elements. This is encapsulated in this class
|
||
|
LO_Element * fDummyElement;
|
||
|
};
|