mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-03 12:35:58 +00:00
Fix for bug 377285 - sync nsIAccessNode::scrollTo with IA2, r=aaronlev
This commit is contained in:
parent
3e9cd86c99
commit
0d225ddd5e
@ -51,6 +51,7 @@ XPIDL_MODULE= accessibility
|
||||
GRE_MODULE = 1
|
||||
|
||||
XPIDLSRCS = \
|
||||
nsIAccessibleTypes.idl \
|
||||
nsIAccessibilityService.idl \
|
||||
nsIAccessibleRetrieval.idl \
|
||||
nsIAccessible.idl \
|
||||
|
@ -55,7 +55,7 @@ interface nsIAccessibleDocument;
|
||||
*
|
||||
* @status UNDER_REVIEW
|
||||
*/
|
||||
[scriptable, uuid(0bd7ccde-486d-483c-a6df-79869cb6647d)]
|
||||
[scriptable, uuid(11c0007f-531c-43b7-be63-a3060a13d8d2)]
|
||||
interface nsIAccessNode : nsISupports
|
||||
{
|
||||
/**
|
||||
@ -118,10 +118,22 @@ interface nsIAccessNode : nsISupports
|
||||
/**
|
||||
* Makes an object visible on screen.
|
||||
*
|
||||
* @param topLeft - if false then it will scroll the shortest distance it
|
||||
* needs to put the element on-screen.
|
||||
* @param scrollType - defines where the object should be placed on
|
||||
* the screen (see nsIAccessibleScrollType for
|
||||
* available constants).
|
||||
*/
|
||||
void scrollTo(in boolean aTopLeft);
|
||||
void scrollTo(in unsigned long aScrollType);
|
||||
|
||||
/**
|
||||
* Moves the top left of an object to a specified location.
|
||||
*
|
||||
* @param coordinateType - specifies whether the coordinates are relative to
|
||||
* the screen or the parent object (for available
|
||||
* constants refer to nsIAccessibleCoordinateType)
|
||||
* @param aX - defines the x coordinate
|
||||
* @param aY - defines the y coordinate
|
||||
*/
|
||||
void scrollToPoint(in unsigned long aCoordinateType, in long aX, in long aY);
|
||||
|
||||
/**
|
||||
* The OS window handle for the window this node
|
||||
|
103
accessible/public/nsIAccessibleTypes.idl
Executable file
103
accessible/public/nsIAccessibleTypes.idl
Executable file
@ -0,0 +1,103 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2007
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Alexander Surkov <surkov.alexander@gmail.com> (original author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
/**
|
||||
* These constants control the scrolling of an object or substring into a
|
||||
* window. Note, keep them synchronized with IA2ScrollType.
|
||||
*/
|
||||
[scriptable, uuid(05cd38b1-94b3-4cdf-8371-3935a9611405)]
|
||||
interface nsIAccessibleScrollType : nsISupports
|
||||
{
|
||||
/**
|
||||
* Scroll the top left of the object or substring to the top left of the
|
||||
* window (or as close as possible).
|
||||
*/
|
||||
const unsigned long SCROLL_TYPE_TOP_LEFT =0x00;
|
||||
|
||||
/**
|
||||
* Scroll the bottom right of the object or substring to the bottom right of
|
||||
* the window (or as close as possible).
|
||||
*/
|
||||
const unsigned long SCROLL_TYPE_BOTTOM_RIGHT = 0x01;
|
||||
|
||||
/**
|
||||
* Scroll the top edge of the object or substring to the top edge of the
|
||||
* window (or as close as possible).
|
||||
*/
|
||||
const unsigned long SCROLL_TYPE_TOP_EDGE = 0x02;
|
||||
|
||||
/**
|
||||
* Scroll the bottom edge of the object or substring to the bottom edge of
|
||||
* the window (or as close as possible).
|
||||
*/
|
||||
const unsigned long SCROLL_TYPE_BOTTOM_EDGE = 0x03;
|
||||
|
||||
/**
|
||||
* Scroll the left edge of the object or substring to the left edge of the
|
||||
* window (or as close as possible).
|
||||
*/
|
||||
const unsigned long SCROLL_TYPE_LEFT_EDGE =0x04;
|
||||
|
||||
/**
|
||||
* Scroll the right edge of the object or substring to the right edge of the
|
||||
* window (or as close as possible).
|
||||
*/
|
||||
const unsigned long SCROLL_TYPE_RIGHT_EDGE = 0x05;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* These constants define which coordinate system a point is located in. Note,
|
||||
* keep them synchronized with IA2CoordinateType.
|
||||
*/
|
||||
[scriptable, uuid(15a523bb-fb3b-4cb2-af87-ad26ea792c4c)]
|
||||
interface nsIAccessibleCoordinateType : nsISupports
|
||||
{
|
||||
/**
|
||||
* The coordinates are relative to the screen.
|
||||
*/
|
||||
const unsigned long COORDTYPE_SCREEN_RELATIVE = 0x00;
|
||||
|
||||
/**
|
||||
* The coordinates are relative to the upper left corner of the bounding box
|
||||
* of the immediate parent.
|
||||
*/
|
||||
const unsigned long COORDTYPE_PARENT_RELATIVE = 0x01;
|
||||
};
|
@ -354,7 +354,7 @@ nsAccessNode::GetInnerHTML(nsAString& aInnerHTML)
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsAccessNode::ScrollTo(PRBool aTopLeft)
|
||||
nsAccessNode::ScrollTo(PRUint32 aScrollType)
|
||||
{
|
||||
NS_ENSURE_TRUE(mDOMNode, NS_ERROR_FAILURE);
|
||||
|
||||
@ -367,9 +367,42 @@ nsAccessNode::ScrollTo(PRBool aTopLeft)
|
||||
nsCOMPtr<nsIContent> content = frame->GetContent();
|
||||
NS_ENSURE_TRUE(content, NS_ERROR_FAILURE);
|
||||
|
||||
PRInt32 percent = aTopLeft ? NS_PRESSHELL_SCROLL_TOP :
|
||||
NS_PRESSHELL_SCROLL_ANYWHERE;
|
||||
return shell->ScrollContentIntoView(content, percent, percent);
|
||||
PRInt32 vPercent, hPercent;
|
||||
switch (aScrollType)
|
||||
{
|
||||
case nsIAccessibleScrollType::SCROLL_TYPE_TOP_LEFT:
|
||||
vPercent = NS_PRESSHELL_SCROLL_TOP;
|
||||
hPercent = NS_PRESSHELL_SCROLL_LEFT;
|
||||
break;
|
||||
case nsIAccessibleScrollType::SCROLL_TYPE_BOTTOM_RIGHT:
|
||||
vPercent = NS_PRESSHELL_SCROLL_BOTTOM;
|
||||
hPercent = NS_PRESSHELL_SCROLL_RIGHT;
|
||||
break;
|
||||
case nsIAccessibleScrollType::SCROLL_TYPE_TOP_EDGE:
|
||||
vPercent = NS_PRESSHELL_SCROLL_TOP;
|
||||
hPercent = NS_PRESSHELL_SCROLL_ANYWHERE;
|
||||
break;
|
||||
case nsIAccessibleScrollType::SCROLL_TYPE_BOTTOM_EDGE:
|
||||
vPercent = NS_PRESSHELL_SCROLL_BOTTOM;
|
||||
hPercent = NS_PRESSHELL_SCROLL_ANYWHERE;
|
||||
break;
|
||||
case nsIAccessibleScrollType::SCROLL_TYPE_LEFT_EDGE:
|
||||
vPercent = NS_PRESSHELL_SCROLL_ANYWHERE;
|
||||
hPercent = NS_PRESSHELL_SCROLL_LEFT;
|
||||
break;
|
||||
case nsIAccessibleScrollType::SCROLL_TYPE_RIGHT_EDGE:
|
||||
vPercent = NS_PRESSHELL_SCROLL_ANYWHERE;
|
||||
hPercent = NS_PRESSHELL_SCROLL_RIGHT;
|
||||
break;
|
||||
}
|
||||
|
||||
return shell->ScrollContentIntoView(content, vPercent, hPercent);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsAccessNode::ScrollToPoint(PRUint32 aCoordinateType, PRInt32 aX, PRInt32 aY)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -45,6 +45,7 @@
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsAccessibilityAtoms.h"
|
||||
#include "nsIAccessibleTypes.h"
|
||||
#include "nsIAccessNode.h"
|
||||
#include "nsIContent.h"
|
||||
#include "nsPIAccessNode.h"
|
||||
|
@ -314,14 +314,17 @@ STDMETHODIMP nsAccessNodeWrap::get_computedStyleForProperties(
|
||||
|
||||
STDMETHODIMP nsAccessNodeWrap::scrollTo(/* [in] */ boolean aScrollTopLeft)
|
||||
{
|
||||
nsresult rv = ScrollTo(aScrollTopLeft);
|
||||
PRUint32 scrollType =
|
||||
aScrollTopLeft ? nsIAccessibleScrollType::SCROLL_TYPE_TOP_LEFT :
|
||||
nsIAccessibleScrollType::SCROLL_TYPE_BOTTOM_RIGHT;
|
||||
|
||||
nsresult rv = ScrollTo(scrollType);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
return S_OK;
|
||||
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
|
||||
ISimpleDOMNode* nsAccessNodeWrap::MakeAccessNode(nsIDOMNode *node)
|
||||
{
|
||||
if (!node)
|
||||
|
@ -1081,10 +1081,9 @@ nsAccessibleWrap::role(long *role)
|
||||
}
|
||||
|
||||
STDMETHODIMP
|
||||
nsAccessibleWrap::scrollTo(enum IA2ScrollType scrollType)
|
||||
nsAccessibleWrap::scrollTo(enum IA2ScrollType aScrollType)
|
||||
{
|
||||
// XXX Handle scrollType
|
||||
if (NS_SUCCEEDED(ScrollTo(PR_TRUE)))
|
||||
if (NS_SUCCEEDED(ScrollTo(aScrollType)))
|
||||
return S_OK;
|
||||
return E_FAIL;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user