KR20160020486A - 터치패드 조작 및 더블 탭 주밍을 위한 독립적 히트 테스팅 - Google Patents

터치패드 조작 및 더블 탭 주밍을 위한 독립적 히트 테스팅 Download PDF

Info

Publication number
KR20160020486A
KR20160020486A KR1020167000683A KR20167000683A KR20160020486A KR 20160020486 A KR20160020486 A KR 20160020486A KR 1020167000683 A KR1020167000683 A KR 1020167000683A KR 20167000683 A KR20167000683 A KR 20167000683A KR 20160020486 A KR20160020486 A KR 20160020486A
Authority
KR
South Korea
Prior art keywords
input
thread
hit test
independent
response
Prior art date
Application number
KR1020167000683A
Other languages
English (en)
Inventor
매튜 앨런 라코우
크리쉬난 메논
마이클 제이 엔스
조나단 윌스
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20160020486A publication Critical patent/KR20160020486A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0487Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser
    • G06F3/0488Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures
    • G06F3/04883Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures for inputting data by handwriting, e.g. gesture or text
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0481Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
    • G06F9/4443
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Abstract

하나 이상의 실시예에서, 웹 콘텐츠에 대한 히트 테스트를 위해, 메인 스레드, 예를 들어 사용자 인터페이스 스레드와 별개인 히트 테스트 스레드가 이용된다. 히트 테스트를 위해 별개의 스레드를 이용하는 것은 타겟들이 신속하게 확인되는 것을 허용할 수 있다. 적절한 응답이 별개의 스레드, 예컨대 패닝 및 핀치 주밍과 같은 터치 조작을 위해 이용될 수 있는 조작 스레드에 의해 핸들링되는 경우들에서, 메인 스레드 상에서의 차단 없이 조작이 발생할 수 있다. 이것은 다양한 시나리오들에 걸쳐 로우 엔드 하드웨어에서 조차도 일관되게 신속한 응답 시간을 야기한다.

Description

터치패드 조작 및 더블 탭 주밍을 위한 독립적 히트 테스팅{INDEPENDENT HIT TESTING FOR TOUCHPAD MANIPULATIONS AND DOUBLE-TAP ZOOMING}
본 발명은 터치패드 조작 및 더블 탭 주밍을 위한 독립적 히트 테스트(hit testing)에 관한 것이다.
히트 테스트는 웹 페이지와 같은 웹 콘텐츠 내에서 주어진 좌표 세트에 위치된 콘텐츠를 결정하는 프로세스를 지칭한다. 히트 테스트에 대한 공통의 시나리오는 사용자 입력을 수반하는 것, 예를 들어 터치 입력 또는 마우스 클릭 입력을 수신하는 것에 관련이 있다. 구체적으로, 사용자 입력에 대한 올바른 응답을 결정하기 위해, 어느 콘텐츠가 사용자의 상호작용의 대상인지를 알아내기 위해 히트 테스트가 수행된다. 히트 테스트를 지연시키는 것은 무엇이든 간에 결국 시스템의 응답을 지연시키고, 사용자의 경험을 저하시킬 수 있다.
많은 시스템들에서, 히트 테스트는 메인 스레드, 예를 들어 사용자 인터페이스 스레드 상에서 수행된다. 그러나, 사용자 인터페이스 스레드는 다른 작업을 수행하느라고 바쁜 경우가 많을 수 있다. 이러한 다른 작업은 자바스크립트 실행, 레이아웃 태스크, 렌더링 동작 및 그와 유사한 것을 포함할 수 있다. 결과적으로, 메인 스레드 상에서 발생하는 히트 테스트는 가변적인 긴 기간 동안 차단될 수 있다.
본 개요는 이하의 상세한 설명에서 더 설명되는 개념들 중 선택된 것들을 단순한 형태로 소개하기 위해 제공된 것이다. 본 개요는 청구되는 발명의 주제의 핵심적인 특징 또는 본질적인 특징을 식별하도록 의도된 것이 아니다.
하나 이상의 실시예에서, 웹 콘텐츠에 대한 히트 테스트를 위해, 메인 스레드, 예를 들어 사용자 인터페이스 스레드와 별개인 히트 테스트 스레드가 이용된다. 히트 테스트를 위해 별개의 스레드를 이용하는 것은 타겟들이 신속하게 확인되는(ascertained) 것을 허용할 수 있다. 적절한 응답이 별개의 스레드, 예컨대 패닝 및 핀치 주밍과 같은 터치 조작을 위해 이용될 수 있는 조작 스레드에 의해 핸들링되는 경우들에서, 메인 스레드 상에서의 차단 없이 조작이 발생할 수 있다. 이것은 다양한 시나리오들에 걸쳐 로우 엔드 하드웨어(low-end hardware)에서 조차도 일관되게 신속한 응답 시간을 야기한다.
적어도 일부 실시예들에서, 웹 개발자들이 자신의 웹 페이지 상에서 터치 행동과 같은 특정한 디폴트 행동을 요청하기 위한 메커니즘이 제공된다. 적어도 일부 구현들에서, 패닝(panning), 핀치 줌(pinch zoom) 및 더블 탭 줌(double-tap-zoom) 조작과 같은 조작들을 활성화 또는 비활성화하기 위해 캐스캐이딩 스타일 시트(CSS: Cascading Style Sheets) 규칙이 이용된다. 메커니즘은 장래에 더해지는 추가의 디폴트 행동들을 수용하도록 확장가능할 수 있다. 다양한 실시예들에서, 행동들은 전위(up front)에 선언되고, 따라서 명령 모델(imperative model)을 이용하는 솔루션들과 차이가 있다. 이러한 접근법의 선언적 본질은 독립적 히트 테스트를 이용하여 올바른 응답을 정하는 데에 있어서 메인 스레드로부터의 완전한 독립을 달성하는 것을 허용한다.
일부 실시예들은 독립적 히트 테스트 스레드 내에서 추가의 처리 및/또는 로직 핸들링을 수행하는 능력을 제공한다. 일부 경우들에서, 독립적 히트 테스트 스레드는 하나 이상의 입력 시나리오들 간을 식별하도록 구성될 수 있다. 대안적으로 또는 추가적으로, 입력 시나리오들에 대한 하나 이상의 응답 액션이 적어도 부분적으로 초기화될 수 있다. 하나 이상의 입력 시나리오로부터 명백한(distinct) 입력 시나리오를 결정하면, 연관된 응답 액션이 개시되고/되거나 별개의 실행 스레드에 전달될 수 있다. 때때로, 부분적으로 초기화된 응답 액션들을 관리하는 스레드들에, 응답 액션을 종료하라는 통지가 송신될 수 있다.
상세한 설명은 첨부 도면들을 참조한다. 도면들에서, 참조 번호 중 제일 왼쪽에 있는 숫자(들)는 해당 참조 번호가 제일 먼저 나오는 도면을 식별한다. 설명 및 도면들의 상이한 상황들에서 동일한 참조 번호들을 이용하는 것은 유사하거나 동일한 항목들을 나타낼 수 있다.
도 1은 본원에 설명된 다양한 실시예들을 수행하도록 동작가능한 예시적인 구현의 환경의 실례이다.
도 2는 하나 이상의 실시예에 따른 시퀀스도이다.
도 3은 하나 이상의 실시예에 따른 방법의 단계들을 설명하는 흐름도이다.
도 3a는 하나 이상의 실시예에 따른 방법의 단계들을 설명하는 흐름도이다.
도 3b는 하나 이상의 실시예에 따른 방법의 단계들을 설명하는 흐름도이다.
도 4는 하나 이상의 실시예에 따른 시퀀스도이다.
도 5는 하나 이상의 실시예에 따른 시퀀스도이다.
도 6은 하나 이상의 실시예에 따른 방법의 단계들을 설명하는 흐름도이다.
도 7은 도 1을 참조하여 설명된 것과 같은 컴퓨팅 디바이스를 포함하는 예시적인 시스템을 도시한다.
도 8은 본원에 설명된 것과 같은 임의의 타입의 컴퓨팅 디바이스로서 구현될 수 있는 예시적인 디바이스의 다양한 컴포넌트들을 도시한다.
개요
하나 이상의 실시예에서, 본원에서 "독립적 히트 테스트"라고 칭해지는 웹 콘텐츠 상에서의 히트 테스트를 위해, 메인 스레드, 예를 들어 사용자 인터페이스 스레드와 별개인 히트 테스트 스레드가 이용된다. 히트 테스트를 위해 별개의 스레드를 이용하는 것은 타겟들이 신속하게 확인되는 것을 허용할 수 있다. 적절한 응답이 별개의 스레드, 예컨대 패닝 및 핀치 주밍과 같은 터치 조작을 위해 이용될 수 있는 조작 스레드에 의해 핸들링되는 경우들에서, 메인 스레드 상에서의 차단 없이 조작이 발생할 수 있다. 이것은 다양한 시나리오들에 걸쳐 로우 엔드 하드웨어에서 조차도 일관되게 신속한 응답 시간을 야기한다.
적어도 일부 실시예들에서, 이러한 히트 테스트 동안 스코핑된 디스플레이 트리 트래버설(scoped display tree traversal)이 수행될 수 있다. 일부 경우들에서, 이것은 적절한 응답을 결정하기 위한 완전한 트리 트래버설을 방지할 수 있다. 결과적으로, 디스플레이 트리의 무관한 부분들을 스킵하는 것에 의해 성능이 개선될 수 있다.
또한, 적어도 일부 실시예는 단일 디스플레이 트리 노드 중에서 독립적 히트 테스트 동안 고려될 특정 영역들을 지정하는 능력을 가능하게 한다. 이것은 예를 들어 단일 디스플레이 트리 노드가 적절한 응답에 관한 결정을 변경할 관심 부영역들(sub-regions of interest)을 갖는 경우에서 이용될 수 있다. 그러한 대상 영역들은 제한이 아닌 예로서, 비디오 요소 상의 재생 슬라이더(playback slider) 또는 편집가능한 콘텐츠 상의 크기 조정 그립퍼(resize gripper)를 포함할 수 있다.
또 다른 실시예들에서, 애플리케이션은 히트 테스트에 대한 응답의 일부로서 실행될 콜백 핸들러(callback handler)를 등록할 수 있다. 이것은 전형적인 빌트인 기능성(built-in functionality)을 넘어서는 추가의 호스트-특정 액션들(host-specific actions)을 위해 이용될 수 있다.
적어도 일부 실시예들에서, 웹 개발자들이 자신의 웹 페이지 상에서 터치 행동과 같은 특정한 디폴트 행동을 요청하기 위한 메커니즘이 제공된다. 적어도 일부 구현들에서, 패닝, 핀치 줌 및 더블 탭 줌 조작과 같은 조작을 활성화 또는 비활성화하기 위해 캐스캐이딩 스타일 시트(CSS: Cascading Style Sheets) 규칙이 이용된다. 메커니즘은 장래에 더해지는 추가의 디폴트 행동들을 수용하도록 확장가능할 수 있다. 다양한 실시예들에서, 행동들은 전위에(up front) 선언되고, 따라서 명령 모델(imperative model)을 이용하는 솔루션들과 차이가 있다. 이러한 접근법의 선언적 본질은 독립적 히트 테스트를 이용하여 올바른 응답을 정하는 데에 있어서 메인 스레드로부터의 완전한 독립을 달성하는 것을 허용한다.
CSS 규칙의 이용은 웹 페이지 상의 다수의 별개의 영역에 대한 요청된 특정 디폴트 행동의 적용을 용이하게 할 수 있다. 이것은 구성될 각각의 영역 상의 CSS 클래스를 세팅하는 것처럼 단순할 수 있다.
이하의 논의에서, 본원에 설명되는 기술들을 이용할 수 있는 예시적인 환경이 먼저 설명된다. 다음으로, 예시적인 환경은 물론 다른 환경들에서도 수행될 수 있는 예시적인 절차들이 설명된다. 결과적으로, 예시적인 절차들의 수행은 예시적인 환경에 한정되지 않으며, 예시적인 환경은 예시적인 절차들의 수행에 한정되지 않는다.
예시적인 환경
도 1은 하나 이상의 실시예에 따른 운영 환경을 개괄적으로 100으로 도시한다. 환경(100)은 하나 이상의 프로세서(104), 하나 이상의 컴퓨터 판독가능한 저장 매체(106), 컴퓨터 판독가능한 저장 매체에 상주하고 프로세서(104)에 의해 실행가능한 하나 이상의 애플리케이션(108)을 갖는 로컬 클라이언트 머신의 형태의 컴퓨팅 디바이스(102)를 포함한다. 컴퓨팅 디바이스(102)는 또한 아래에 설명되는 바와 같이 동작하는 독립적 히트 테스트 컴포넌트(110)를 포함한다. 컴퓨팅 디바이스(102)는 제한이 아닌 예로서, 데스크탑 컴퓨터, 휴대용 컴퓨터, PDA(personal digital assistant)와 같은 핸드핼드형 컴퓨터, 이동 전화, 텔레비젼, 태블릿 컴퓨터 및 그와 유사한 것과 같은 임의의 적적한 컴퓨팅 디바이스로서 구현될 수 있다. 컴퓨팅 디바이스(102)의 여러 다양한 예들은 아래에서 도 4 및 도 5에 도시되고 설명된다.
애플리케이션들(108)은 제한이 아닌 예로서, 웹 브라우저 및/또는 다양한 다른 웹 애플리케이션을 포함하는 임의의 적절한 타입의 애플리케이션을 포함할 수 있다. 웹 브라우저는 네트워크(112)를 통해 네비게이트하도록 구성된다. 네트워크(112)가 인터넷으로서 도시되어 있지만, 네트워크는 광범위하게 다양한 구성을 취할 수 있다. 예를 들어, 네트워크(112)는 광역 네트워크(WAN), 근거리 네트워크(LAN), 무선 네트워크, 공중 전화 네트워크, 인트라넷 등을 포함할 수 있다. 또한, 단일 네트워크(112)가 도시되어 있지만, 네트워크(112)는 복수의 네트워크를 포함하도록 구성될 수 있다.
예를 들어, 브라우저는 하나 이상의 웹 서버(114)에 데이터를 통신, 예를 들어 다운로드 및 업로드를 수행할 뿐만 아니라, 하나 이상의 웹 서버(114)로부터 입수가능한 콘텐츠와 상호작용하기 위해 네트워크(112)를 통해 네비게이트하도록 구성될 수 있다. 웹 서버들(114)은 네트워크(112)를 통해 액세스가능한 하나 이상의 서비스를 제공하도록 구성될 수 있다. 그러한 서비스들의 예들은 이메일, 웹 페이지, 사진 공유 사이트, 소셜 네트워크, 콘텐츠 공유 서비스, 미디어 스트리밍 서비스 등을 포함한다.
또한, 애플리케이션들(108) 중 하나 이상은 예를 들어 그들 자신이 직접 및/또는 (애플리케이션(108)이 웹 브라우저가 아닌 경우) 브라우저를 통해, 네트워크(112)에 액세스하도록 구성될 수 있다. 예를 들어, 애플리케이션들(108) 중 하나 이상은 메시지들, 예컨대 이메일, 인스턴트 메시지 등을 통신하도록 구성될 수 있다. 추가의 예들에서, 애플리케이션(108)은 예를 들어 소셜 네트워크에 액세스하고, 날씨 업데이트를 획득하고, 웹 서버들(114) 중 하나 이상에 의해 구현되는 북스토어 서비스와 상호작용하고, 워드 프로세싱을 지원하고, 스프레드시트 기능성을 제공하고, 프레젠테이션의 생성 및 출력을 지원하는 등을 위해 구성될 수 있다.
따라서, 애플리케이션들(108)은 또한 직접 또는 간접적인 네트워크(112) 액세스를 수반할 수 있는 다양한 기능성을 위해 구성될 수 있다. 예를 들어, 애플리케이션들(108)은 애플리케이션(108)에 의해 로컬로 레버리지(leverage)될 수 있을 뿐만 아니라, 다른 컴퓨팅 디바이스에서 실행되는 애플리케이션들과 동기화될 수 있는 구성 세팅들 및 다른 데이터를 포함할 수 있다. 이러한 방식으로, 이러한 세팅들은 디바이스들에 의해 공유될 수 있다. 다양한 다른 인스턴스들도 예상된다. 따라서, 컴퓨팅 디바이스(102)는 여러 다양한 소스로부터 다양한 방식으로 콘텐츠와 상호작용할 수 있다. 추가로, 애플리케이션들은 예를 들어 USB 디바이스로부터의 콘텐츠를 브라우징하는 것과 같이, 오프라인 시나리오들에서도 물론 작동할 수 있다.
동작 시에, 독립적 히트 테스트 컴포넌트(110)는 메인 스레드, 예를 들어 사용자 인터페이스 스레드와 별개인 히트 테스트 스레드를 제공한다. 히트 테스트가 메인 스레드에 미치는 영향을 완화하기 위해, 웹 콘텐츠에 대한 히트 테스트를 위해 독립적 히트 테스트 스레드가 이용된다. 히트 테스트를 위해 별개의 스레드를 이용하는 것은 타겟들이 신속하게 확인되는 것을 허용할 수 있다. 적절한 응답이 별개의 스레드, 예컨대 패닝 및 핀치 주밍과 같은 터치 조작을 위해 이용될 수 있는 조작 스레드에 의해 핸들링되는 경우들에서, 메인 스레드 상에서의 차단 없이 조작이 발생할 수 있다. 이것은 다양한 시나리오들에 걸쳐 로우 엔드 하드웨어에서 조차도 일관되게 신속한 응답 시간을 야기한다. 대안적으로 또는 추가적으로, 독립적 히트 테스트 컴포넌트(110)는 하나 이상의 입력 시나리오를 식별하고/거나, 대안적인 스레드들을 통해 연관된 응답 액션(들)의 적어도 부분적 초기화를 수행하는 데에 유효하도록 그 대안적인 스레드(들)에게 입력 시나리오들을 통지하도록 구성될 수 있다.
일반적으로, 본원에 설명되는 기능들 중 임의의 것은 소프트웨어, 펌웨어, 하드웨어(예를 들어, 고정된 로직 회로망), 또는 이러한 구현들의 조합을 이용하여 구현될 수 있다. 본원에서 이용될 때의 용어 "모듈", "기능성", "컴포넌트" 및 "로직"은 일반적으로 소프트웨어, 펌웨어, 하드웨어 또는 그들의 조합을 나타낸다. 소프트웨어 구현의 경우에서, 모듈, 기능성 또는 로직은 프로세서(예를 들어, CPU 또는 CPU들) 상에서 실행될 때 지정된 테스크들을 수행하는 프로그램 코드를 표현한다. 프로그램 코드는 하나 이상의 컴퓨터 판독가능한 메모리 디바이스에 저장될 수 있다. 아래에 설명되는 기술들의 특징들은 플랫폼에 독립적인데, 이는 기술들이 다양한 프로세서를 갖는 다양한 상용 컴퓨팅 플랫폼 상에서 구현될 수 있음을 의미한다.
예를 들어, 컴퓨팅 디바이스(102)는 컴퓨팅 디바이스(102)의 하드웨어 또는 가상 머신들, 예를 들어 프로세서들, 기능 블록들 등이 동작들을 수행하게 하는 엔티티(예를 들어, 소프트웨어)를 더 포함할 수 있다. 예를 들어, 컴퓨팅 디바이스(102)는 컴퓨팅 디바이스, 더 구체적으로는 컴퓨팅 디바이스(102)의 운영 체제 및 관련 하드웨어가 동작들을 수행하게 하는 명령어들을 유지하도록 구성될 수 있는 컴퓨터 판독가능한 매체를 포함할 수 있다. 따라서, 명령어들은 동작들을 수행하도록 운영 체제 및 관련 하드웨어를 구성하는 기능을 하고, 이러한 방식으로 기능들을 수행하기 위한 운영 체제 및 관련 하드웨어의 변형(transformation)을 야기한다. 명령어들은 여러 상이한 구성을 통해 컴퓨터 판독가능한 매체에 의해 컴퓨팅 디바이스(102)에 제공될 수 있다.
컴퓨터 판독가능한 매체의 그러한 구성 중 하나는 신호 보유 매체(signal bearing medium)이고, 따라서 네트워크를 통하는 것과 같이 컴퓨팅 디바이스에 명령어들을 (예를 들어, 반송파로서) 전송하도록 구성된다. 컴퓨터 판독가능한 매체는 또한 컴퓨터 판독가능한 저장 매체로서 구성될 수 있고, 따라서 신호 보유 매체가 아니다. 컴퓨터 판독가능한 저장 매체의 예들은 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 광학 디스크, 플래시 메모리, 하드 디스크 메모리, 및 명령어들 및 다른 데이터를 저장하기 위해 자기, 광학 및 다른 기술들을 이용할 수 있는 다른 메모리 디바이스를 포함한다.
본원에 설명되는 기술들이 동작할 수 있는 예시적인 환경을 설명하였고, 이하에서는 본원에 설명되는 원리들을 이용할 수 있는 일부 예시적인 실시예들의 논의를 고찰하기로 한다.
예시적인 실시예들
이하의 논의에서, 아래의 용어들이 이용된다. 종속적 및 독립적 영역들의 개념이 도입된다.
"종속적 영역"은 히트 테스트를 위해, 메인 스레드, 즉 사용자 인터페이스 스레드를 이용하는 웹 콘텐츠의 영역이다. 종속적 영역들은 <input type= "range">와 같은 컨트롤에 걸쳐 발생하는 입력 또는 "히트들"에 연관될 수 있으며, 페이지와의 상호작용은 조작을 트리거하지 않는다. 이런 종속적 영역들은 비디오 및 오디오 콘텐츠를 위한 선택 핸들러, 표시기(adorner), 스크롤바, 및 컨트롤에 연관된 것들을 제한이 아닌 예로서 포함할 수 있다. 다른 종속적 영역들은 제3자 코드의 의도가 알려지지 않은 윈도우리스(windowless) ActiveX 컨트롤을 제한이 아닌 예로서 포함할 수 있다.
"독립적 영역"은 히트 테스트를 위해, 메인 스레드를 반드시 이용할 필요는 없는 웹 콘텐츠의 영역이다. 전형적으로, 독립적 영역들은 통상적으로 사용자에 의해 패닝 또는 주밍되는 영역들을 포함한다.
도 2는 사용자가 콘텐츠를 패닝하기 위해, "포인터 다운" 제스쳐 형태의 제스터를 실행한 후 슬라이드하는 팬 조작(pan manipulation)에 연관된 예시적인 시퀀스도를 개괄적으로 200에서 도시한다. 포인터 다운 제스쳐를 위해 임의의 적절한 타입의 입력이 제공될 수 있다. 예를 들어, 도시된 예에서, 포인터 다운 제스쳐는 사용자가 디스플레이 스크린 상에 디스플레이되는 콘텐츠를 터치 체결(touch-engaging)하고 자신의 손가락을 이동하여 팬을 실행하는 것에 의해 실행된다. 제한이 아닌 예로서, 마우스 입력, 스타일러스 입력, NUI(natural user interface) 입력 및 그와 유사한 것과 같은 다른 타입들의 입력이 입력 디바이스들로부터 수신될 수 있다. 추가로, 다른 조작들은 바로 아래에 설명되는 것과 같이 처리될 수 있다. 그러한 다른 조작들은 청구되는 발명의 주제의 취지 및 범위를 벗어나지 않고서, 핀치 줌 조작, 더블 탭 줌 조작은 물론, 다른 조작들을 제한이 아닌 예로서 포함할 수 있다.
본 예에서, 3개의 상이한 스레드가 202, 204 및 206에 도시된다. 독립적 히트 테스트 스레드(202)는 위와 아래에서 설명되는 것과 같은 독립적 히트 테스트를 수행하기 위해 이용되는 스레드를 구성한다. 조작 스레드(204)는 디스플레이된 콘텐츠에 연관된 독립적 영역들에 대하여 수신된 입력들을 위한 조작을 수행하도록 구성되는 스레드를 이룬다. 사용자 인터페이스 스레드(206)는 디스플레이된 콘텐츠에 연관된 종속적 영역들 상에서 완전한 히트 테스트와 같은 다양한 활동들을 수행하도록 구성되는 메인 스레드를 이룬다.
하나 이상의 실시예에서, 독립적 히트 테스트는 아래와 같이 동작할 수 있다. 독립적 히트 테스트 스레드(202)는 디스플레이된 페이지 상에서 독립적 및 종속적인 영역들을 인식한다. 조작 스레드(204)는 다양한 타입의 입력에 연관된 메시지들을 수신하도록 등록되는 위임 스레드(delegate thread)로서 기능하거나 그것을 관리한다. 조작 스레드(204)는 사용자 인터페이스 스레드(206) 이전에 입력 메시지들 및 업데이트들을 수신한다. 독립적 히트 테스트 스레드(202)는 조작 스레드로부터 입력 메시지들을 수신하기 위해 조작 스레드(204)에 등록된다. 입력이 수신될 때, 조작 스레드는 연관된 메시지를 수신하고, 독립적 히트 테스트 스레드(202)에 동기적 통지를 송신한다. 독립적 히트 테스트 스레드(202)는 메시지를 수신하고, 히트 테스트를 수행하기 위해 연관된 디스플레이 트리를 워킹(walking) 하기 위해 그 내부에 포함된 데이터를 이용한다. 아래에 설명되는 바와 같이, 전체 디스플레이 트리가 워킹될 수 있거나, 스코핑된 트래버설(scoped traversal)이 발생할 수 있다. 독립적 영역에 대해 입력이 발생하는 경우, 독립적 히트 테스트 스레드(202)는 조작 스레드에게 그것이 패닝을 개시할 수 있음을 알리기 위해 조작 스레드(204)를 호출한다. 적어도 일부 실시예들에서, 종속적 영역에 대하여 입력이 발생한다면, 조작 스레드(204)는 완전한 히트 테스트에 의한 처리를 위해 사용자 인터페이스 스레드(206)에 입력 메시지들을 재배정한다. 입력 메시지들을 사용자 인터페이스 스레드(206)에 재배정하는 것은 효율성을 갖는데, 왜냐하면 메시지들은 재배정이 발생할 때까지 동일 큐 또는 위치 내에 유지되고, 따라서 메시지가 큐 내에서 이동하는 것이 방지되기 때문이다. 독립적 히트 테스트에 기초한 조작에 속하지 않는 종속적 영역들은 슬라이더 컨트롤, 비디오/오디오 재생 및 볼륨 슬라이더, ActiveX 컨트롤, 스크롤바, 텍스트 선택 그립퍼(및 다른 표시기), 및 오버플로우하도록 설정된 페이지들을 포함하는 요소들에 대응하는 영역들을 제한이 아닌 예로서 포함한다.
적어도 일부 실시예들에서, 독립적 히트 테스트가 수행된 후, 또는 조작의 개시 동안, 독립적 히트 테스트를 낳은(spawn) 입력 메시지는 통상의 처리를 위해 사용자 인터페이스 스레드(206)에 포워드된다. 통상의 처리는 제한이 아닌 예로서, 입력의 대상인 요소들에 다양한 스타일을 적용할 수 있는 처리와 같은 기본적인 상호작용들에 연관된다. 이러한 경우들에서, 입력 메시지를 사용자 인터페이스 스레드에 포워드하는 것은 조작 스레드(204)에 의해 수행되는 조작을 차단하지 않는다.
도 2의 시퀀스도로 되돌아가면, 액션들의 시퀀스가 도시되어 있으며, 액션들 각각은 열거된 원 내에 나타난다. 시퀀스는 팬 조작의 맥락에서 설명된다. 그러나, 독립적 히트 테스트가 줌 조작 및 그와 유사한 것과 같은 다른 조작들과 함께 수행될 수 있음을 알고 이해해야 한다. 추가로, 시퀀스도의 주제인 입력은 터치 입력의 형태이다. 위에서 언급된 바와 같이, 청구되는 발명의 주제의 취지 또는 범위를 벗어나지 않고서, 다른 타입의 입력들이 유사하게 수신되고 처리될 수 있다.
"1"에서, 사용자가 웹페이지 상에 나타나는 요소를 터치 체결(touch-engaging)하는 것에 응답하여 핑거 다운 이벤트가 발생하며, 이는 결국 포인터 다운 입력 메시지를 낳는다. 포인터 다운 입력 메시지는 조작 스레드(204)에 의해 수신되고, 큐 내에 배치된다. 다음으로, 포인터 다운 입력 메시지는 조작 스레드(204)에 의해 독립적 히트 테스트 스레드(202)에 송신된다. 독립적 히트 테스트 스레드(202)는 "2"에서 포인터 다운 입력 메시지를 수신한다. 이것은 포인터 다운 입력 메시지가 사용자 인터페이스 스레드(206)에 송신되던 과거의 관행으로부터의 새로운 발전을 이루는데, 그러한 관행은 위에서 설명된 바와 같이, 사용자 인터페이스 스레드(206)가 수행하고 있을 수 있는 다른 처리로 인한 지연들을 야기할 수 있었다. 포인터 다운 입력 메시지를 수신하는 것에 응답하여, 독립적 히트 테스트 스레드(202)는 "3"에서 연관된 디스플레이 트리를 워킹함으로써 독립적 히트 테스트를 수행한다. 독립적 히트 테스트 스레드(202)가 핑거 다운 이벤트에 대응하는 영역이 독립적 영역임을 확인한다면, 이는 사용자 인터페이스 스레드(206)가 조작의 발생을 필요로 하지 않는다는 것을 의미하고, 독립적 히트 테스트 스레드(202)는 조작 스레드에게 직접 조작이 발생할 수 있음을 알리기 위해 조작 스레드를 호출한다. "4"에서, 조작 스레드는 조작을 시작하는데, 본 예에서는 이것이 패닝 조작이다. 또한, "3"에서, 독립적 히트 테스트 스레드(202)는 사용자 인터페이스 스레드(206)를 호출할 수 있고, 그에 의해 사용자 인터페이스 스레드는 "5"에서 완전한 히트 테스트를 수행하여, CSS 스타일을 적용하는 것 및 다른 DOM 관련 처리와 같은 것들을 할 수 있게 된다. 독립적 히트 테스트 스레드(202)가 핑거 다운 이벤트에 대응하는 영역이 종속적 영역임을 확인한다면, 독립적 히트 테스트 스레드는 직접 조작을 위해 조작 스레드를 호출하지 않는다. 대신에, 입력 메시지들은 처리를 위해 조작 스레드에 의해 사용자 인터페이스 스레드에 재배정된다. 영역이 독립적 영역임을 가정하면, 사용자의 손가락이 이동함에 따라, 조작은 "6"에서 조작 스레드(204)의 영향 하에서 계속된다. 조작 스레드(204)는 "7"에서 핑거 업 이벤트에 응답하여 조작을 종료한다.
독립적 히트 테스트 스레드(202)가 없다면, 포인터 다운 입력 메시지는 조작이 시작할 수 있기 전에 처리 및 완전 히트 테스트의 수행을 위해 사용자 인터페이스 스레드(206)에 송신되었을 것임에 주목해야 한다. 사용자 인터페이스 스레드(206)가 수행하고 있을 수 있는 다른 처리로 인해, 조작을 목적으로 하는 완전 히트 테스트가 지연될 수 있다. 그러한 것으로서, 조작은 점선 화살표(208)에 의해 나타나 있는 바와 같이, 완전 히트 테스트의 종결 후에 개시될 것이었다. 이것은 독립적 히트 테스트 스레드의 영향 하에서 조작이 개시되는 때와 독립적 히트 테스트 스레드의 영향 없이 조작이 개시되는 때 사이의 시간으로부터, 양방향 화살표에 의해 나타난 대응 지연을 야기했을 것이다. 따라서, 사용자 인터페이스 스레드(206) 상에서의 활동에 무관하게, 조작 응답 시간들이 개선되고 일관되게 신속하다.
하나 이상의 실시예에 따른 예시적인 시스템을 고려하였고, 이하에서는 하나 이상의 실시예에 따른 예시적인 방법을 고찰하기로 한다.
예시적인 방법
도 3은 하나 이상의 실시예에 따른 방법의 단계들을 설명하는 흐름도이다. 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어 또는 그들의 조합과 관련하여 구현될 수 있다. 적어도 일부 실시예에서, 방법은 독립적 히트 테스트 스레드를 포함하는 것과 같은 적절하게 구성된 시스템에 의해 구현될 수 있다.
단계(300)는 입력을 수신한다. 임의의 적절한 타입의 입력이 수신될 수 있다. 적어도 일부 실시예에서, 입력은 터치 입력을 포함한다. 청구되는 발명의 주제의 취지 또는 범위를 벗어나지 않고서, 다른 타입의 입력들이 수신될 수 있다. 단계(302)는 입력에 연관된 입력 메시지를 수신한다. 이 단계는 임의의 적절한 방식으로 수행될 수 있다. 적어도 일부 실시예에서, 입력 메시지는 조작 스레드에 의해 수신되고, 큐 내에 배치된다. 단계(304)는 입력 메시지를 독립적 히트 테스트 스레드에 송신한다. 입력 메시지를 수신하는 것에 응답하여, 독립적 히트 테스트 스레드는 독립적 히트 테스트를 수행한다. 단계(308)는 완전한 히트 테스트를 수행하기 위해 사용자 인터페이스 스레드를 호출한다. 이것이 어떤 방법 및 어떤 이유로 행해질 수 있는지의 예들이 위에 제공되어 있다. 단계(310)는 입력에 연관된 영역이 독립적 영역인지를 확인한다. 영역이 독립적 영역인 것으로 확인된다면, 단계(312)는 직접 조작을 위해 조작 스레드를 호출한다. 이것이 어떤 방법으로 행해질 수 있는지의 예가 위에 제공되어 있다. 한편, 영역이 독립적이지 않다고 확인되는 경우, 즉 종속적이라고 확인되는 경우, 단계(314)는 입력 메시지를 처리를 위해 사용자 인터페이스 스레드에 재배정한다.
독립적 히트 테스트를 위한 스코핑된(scoped) 트리 트래버설의 이용
하나 이상의 실시예에서, 스코핑된 트리 트래버설이 독립적 히트 테스트 동안 수행될 수 있다. 이러한 경우들에서, 독립적 히트 테스트는 적절한 응답을 결정하기 위해 완전한 트리 트래버설(tree traversal)을 수행할 필요가 없다. 오히려, 대응하는 디스플레이 트리의 부분들은 그들이 독립적 히트 테스트에 대하여 무관한 것으로 확인될 때 스킵될 수 있다.
적어도 일부 실시예에서, 디스플레이 트리의 요소들은 그러한 요소들이 독립적 히트 테스트 동안 트래버설되도록 마킹될 수 있다. 대안적으로, 디스플레이 트리의 요소들은, 마킹된 요소들이 독립적 히트 테스트 동안 트래버설되지 않도록, 마킹될 수 있다. 이러한 방식으로, 디스플레이 트리를 마킹하는 것은 요소들이 독립적 히트 테스트 동안 트래버설되는지의 여부를 결정할 수 있다.
예를 들어, 디스플레이 트리 내에서의 자신의 기능으로 인해 있는 그대로는 히트 테스트를 수행하기에 적합하지 않은 디스플레이 트리 내의 요소들의 특성들 및 속성들이 존재한다. 그러한 경우들에서, 이러한 요소들은 히트 테스트되지 않을 것으로 마킹된다. 구체적인 예에서, 디스플레이 트리 내의 일부 요소들은 그들의 속성 및 특성으로 인해 디스플레이 클라이언트에 의해 처리된다. 그러한 요소들은 레인지 컨트롤(range control)을 포함할 수 있다. 이러한 경우들에서, 레인지 컨트롤에 대응하는 디스플레이 노드는 컨테이너이며, 그 아래의 수 개의 노드가 컨트롤의 부분들에 대응한다. 그러나, 레인지 컨트롤 자체는 사용자 인터페이스 스레드 상에서 터치 입력의 특수한 처리를 행하며, 따라서 그 처리를 수행하기 위해 디스플레이 클라이언트를 구현하고, 자신의 디스플레이 노드를 트래버설용이 아닌 것으로 마킹한다. 따라서, 독립적 히트 테스트 스레드가 디스플레이 노드를 만날 때, 그것은 레인지 컨트롤 아래의 노드들의 트래버설을 스킵한다.
독립적 히트 테스트를 위한 디스플레이 트리 노드의 특정 영역들의 지정
적어도 일부 실시예에서, 디스플레이 트리 노드의 특정 영역들은 독립적 히트 테스트 동안의 고려를 위해 지정될 수 있다. 이러한 접근법은 단일 디스플레이 트리 노드가 적절한 조작 응답에 관한 결정을 변경할 수 있는 관심 부영역들을 갖는 경우에서 이용될 수 있다. 예시적인 부영역들은 비디오 요소 상의 재생 슬라이더 또는 편집가능한 콘텐츠 상의 크기 조정 그립퍼를 제한이 아닌 예로서 포함할 수 있다.
내부에 소정의 콘텐츠를 갖는 직사각형 형태의 디스플레이 트리 노드를 고찰하기로 한다. 디스플레이 트리 노드의 예는 비디오 콘텐츠를 포함하는 것일 수 있다. 사용자가 이러한 디스플레이 트리 노드에 대응하는 영역을 터치하는 경우, 빨리감기, 일시정지, 볼륨 및 그와 유사한 것과 같은 컨트롤이 나타날 수 있다. 통상적으로, 특정 비디오 컨트롤 상의 컨택트들을 빨리감기, 일시정지 또는 비디오 볼륨의 조절에 의한 것과 같은 통상의 일반적 방식으로 처리하는 것이 바람직하다. 통상적으로, 이러한 컨트롤들이 가시적인 경우, 이러한 타입들의 입력들은 사용자 인터페이스 스레드에 의해 핸들링된다. 그러나, 비디오 콘텐츠에 대응하는 디스플레이 요소의 패닝 및 주밍과 같은 조작들은 독립적 히트 테스트를 이용하여 독립적으로 행해질 수 있다. 이러한 경우에서, 컨트롤들은 가시적일 수 있으며, 수신되는 입력은 비디오 상의 핀치 또는 팬 입력을 포함하고, 이는 독립적 히트 테스트 스레드가 입력 메시지들을 처리하여 대응 조작에 영향을 주게 할 것이다.
하나 이상의 실시예에서, 별개의 데이터 구조가 이러한 타입의 요소에 대응하는 디스플레이 트리의 일부로서 유지된다. 별개의 데이터 구조는 이러한 타입들의 디스플레이 노드를 위한 정보를 유지한다. 수신되는 입력에 따라, 예를 들어 입력이 비디오 컨트롤 상에서 발생하는 경우들에서는 사용자 인터페이스 스레드가 입력 메시지들을 처리하거나, 패닝 또는 주밍이 발생할 때에는 이러한 요소들에 대해 독립적 히트 테스트 스레드 및 조작 스레드가 입력을 처리할 것이다.
독립적 히트 테스트에 대한 응답의 일부로서 실행될 콜백 핸들러의 등록
사용자가 자신의 웹 브라우저에 의해 디스플레이되는 콘텐츠에 대해 왼쪽 또는 오른쪽으로 패닝하는 상황을 고찰하기로 한다. 오른쪽으로의 패닝은 브라우저 내에서 역방향으로 네비게이트하기 위해 뒤로 가기 버튼을 클릭하는 것과 등가이다. 따라서, 사용자는 다양한 페이지들을 앞뒤로 넘길 수 있다. 이에 의해, 사용자는 네비게이션에 연관된 트래블 로그(travel log)를 통해 역방향 및 순방향으로 네비게이트할 수 있게 된다. 이 경우, 콘텐츠를 통한 역방향 및 순방향 네비게이션은 독립적 히트 테스트 스레드와는 다른 컴포넌트에 의해 핸들링된다. 이 경우, 역방향 및 순방향 네비게이션을 핸들링하는 컴포넌트는 독립적 히트 테스트에 대한 응답의 일부로서 콜백에 대해 등록할 수 있다.
예를 들어, I 프레임 및 대응하는 웹페이지를 고찰하기로 한다. 패닝 조작에 응답하여, I 프레임은 먼저 그것이 에지를 히트할 때까지 패닝하고, 그 지점에서 페이지가 패닝을 시작한다. 페이지가 자신의 에지를 히트하고 나면, 역방향 네비게이션이 개시될 수 있다. 독립적 히트 테스트에 대한 응답의 일부로서 실행되도록 콜백 핸들러를 등록함으로써, 호스트가 이 체인에 참여할 수 있다. 예를 들어, 핑거 다운 입력이 수신될 때, 그 입력에 연관된 디스플레이 트리 위로 스크롤가능한 영역들 전부의 리스트가 구축된다. 따라서, 예를 들어, 사용자가 10개의 스크롤가능한 영역 깊이의 영역을 터치하는 경우, 독립적 히트 테스트 스레드는 그러한 10개의 스크롤가능한 영역 각각에 대한 조작 스레드를 호출하여 조작이 발생할 수 있게 한다. 독립적 히트 테스트에 대한 응답의 일부로서 콜백 핸들러를 이용하는 것은 이러한 10개의 영역의 최상부 상의 층까지 역방향 및 순방향 네비게이션을 처리하는 컴포넌트가 적절한 대로 역방향 및 순방향 네비게이션을 시행하는 것을 가능하게 할 수 있다.
디폴트 행동들을 위한 선언적 스타일 규칙
적어도 일부 실시예들에서, 웹 개발자들이 자신의 웹 페이지 상에서 터치 행동과 같은 특정한 디폴트 행동을 요청하기 위한 메커니즘이 제공된다. 적어도 일부 구현들에서, 패닝, 핀치 줌 및 더블 탭 줌 조작과 같은 조작을 활성화 또는 비활성화하기 위해 캐스캐이딩 스타일 시트 규칙이 이용된다. 메커니즘은 장래에 더해지는 추가의 디폴트 행동들을 수용하도록 확장가능할 수 있다. 다양한 실시예들에서, 행동들은 전위에 선언되고, 따라서 명령 모델을 이용하는 솔루션들과 차이가 있다. 이러한 접근법의 선언적 본질은 메인 스레드로부터의 완전한 독립을 달성하고, 독립적 히트 테스트를 이용하여 올바른 응답을 정하는 것을 허용한다.
하나 이상의 실시예에서, 터치 액션들과 같은 디폴트 액션들을 제어하는 능력은 새로운 CSS 속성인 "터치 액션"의 이용을 통해 제공된다. CSS 속성은 제한이 아닌 예로서 "auto", "none", 및 "inherit"를 포함하는 값들을 허용한다. 추가로, 이용될 수 있는 터치 액션들과 같은 특정 액션들의 공간 구분 리스트(space delimited list)의 이용을 가능하게 하는 한, CSS 속성은 확장가능하다. 제한이 아닌 예로서, 이 리스트는 팬/핀치 줌 및 더블 탭 줌을 각각 제어하기 위해 값 "조작" 및 "더블 탭 줌"을 포함한다. 이러한 특징으로 활성화 또는 비활성화될 수 있는 추가의 능력들이 더해질 수 있고, 따라서 이러한 속성의 확장가능성을 추가한다.
하나 이상의 실시예에서, 독립적 히트 테스트 이후의 올바른 응답은 터치 상호작용을 핸들링할 수 있는 타겟의 제1 상위항목(ancestor)이 그렇게 하는 것이다. 조작을 위해, 이것은 실제로 조작가능한 영역들, 즉 스크롤 가능하거나 주밍 가능한 것으로 지정된 영역들은 물론, 자바스크립트, 예를 들어 "touch-action: none"을 통해 상호작용을 핸들링하기로 선택하는 요소들을 포함할 수 있다. 이것은 또한 자기 자신의 조작 응답을 갖는 소정 요소들, 예를 들어 슬라이더들을 포함할 수 있다.
동작 시에, 사용자의 손가락 아래에 있는 웹 페이지 상의 특정 요소를 결정하는 독립적 히트 테스트 동안, 대응하는 디스플레이 트리는 이러한 CSS 속성에 부분적으로 기초하여 트래버설된다. 올바른 응답을 결정하기 위해 추가의 정보가 필요하지 않은 경우에서, 이는 트리 트래버설의 스코핑을 가능하게 한다.
디폴트 행동들을 위한 선언적 스타일 규칙들에 대한 개요를 고찰하였고, 이하에서는 위에서 설명된 기술들을 이용하는 구현 예시의 논의를 고찰하기로 한다.
구현 예시
이하의 논의에서, 아래의 용어들이 이용된다. 조작가능 요소는 (a) 오버플로우 콘텐츠를 갖고 오버플로우가 자동적으로 핸들링되어야 한다고 지정하거나 (b) 오버플로우 콘텐츠를 위해 스크롤이 허용된다는 것을 지정하거나 (c) 주밍 능력을 갖는 요소이다. 조작 차단 요소는 선언적 마크업을 통해 직접 조작을 명시적으로 차단하고, 대신에 제스쳐 시작, 제스쳐 변화, 및 제스쳐 종료 이벤트들과 같은 제스쳐 이벤트들을 점화할 요소이다. 조작 유발 요소(manipulation-causing element)는 선언적 마크업을 통해 직접 조작을 명시적으로 요청하는 요소이다. 패시브 요소(passive element)는 위의 3개의 카테고리에 속하지 않는 요소이다. 그것은 터치 액션 결정에 기여하지 않는다.
CSS 속성 "touch action"에 대하여, 이하를 고찰하기로 한다. "touch action" 속성은 선언적 마크업을 이용하여 웹 개발자들에 의해 설정될 수 있는 다음 값들: 자동(auto), 없음(none), 상속(inherit), 및 <공간 구분 제스처 리스트(space-delimited gesture list)>를 포함한다. 공간 구분된 제스쳐 리스트는 "조작" 및 "더블 탭 줌"을 포함할 수 있다. 공간 구분된 제스쳐 리스트는 또한 장래에 추가되는 제스쳐들을 지원하도록 확장가능하다.
"자동" 값은 특정 요소의 부모에게 터치 액션 결정을 미루고, 따라서 그 특정 요소를 패시브 요소로 한다. 따라서, 예를 들어, 터치 입력이 그 자체로는 패닝을 할 수 없으면서 패닝 조작을 차단하지 않은 요소 상에서 발생하는 경우, 터치 액션 결정은 그 요소의 부모에게 미뤄진다. 이것은 터치 액션 결정이 해결되어 조작 또는 비조작을 야기할 때까지 요소의 상위요소들의 체인을 따라 상향 스크롤을 계속할 수 있다. 이 값은 디스플레이 트리 체인 내의 모든 단일 요소에 대한 속성들을 지정해야만 하는 것을 경감할 수 있다.
"없음" 값은 이 요소 상에서는 패닝 또는 주밍이 발생하지 않을 것임을 지정한다.
"상속" 값은 요소가 표준 CSS 상속에 따라 자신의 부모로부터 자신의 속성 값을 물려받는다는 것을 지정한다.
"조작" 값은 연관된 요소가 조작 유발 요소, 즉 직접 조작을 명시적으로 요청하는 요소로서 취급되어야 함을 지정한다. 따라서, 이 요소는 패닝 및/또는 주밍을 할 것이고, 어떠한 제스쳐 이벤트도 점화(fire)하지 않을 것이다.
"더블 탭 줌" 값은 연관된 요소가 조작 차단 요소로서 취급되어야 함을 지정하며, 이는 요소가 직접 조작을 명시적으로 차단하고, 대신에 제스쳐 이벤트들이 점화되게 할 것임을 의미한다. 이 경우, 요소에 대해 "더블 탭 줌"만이 지정되는 경우, 요소는 패닝 또는 핀치 주밍을 하지 않을 것이다. 요소에 대해 "manipulation"이 지정되지만 "double-tap-zoom"은 지정되지 않은 경우, 요소는 패닝 및 핀치 주밍만 될 수 있다는 점에 주목해야 한다.
동작 시에, 조작은 타겟 요소의 부모 체인 내의 제1 조작가능 또는 조작 차단 요소에 배정된다. 요소가 조작가능인 동시에 조작 차단인 경우, 직접 조작은 발생하지 않으며, 이는 조작 차단이 발생한다는 의미이다. 타겟 요소의 부모 체인 내에 조작가능 또는 조작 차단 요소가 존재하지 않는 경우, 조작 이벤트들이 송신되거나 점화된다.
이하에서는, 독립적 히트 테스트 동안 위의 값들이 어떻게 처리되는지를 고찰하기로 한다. 디스플레이 트리가 초기에 특정 페이지를 위해 구축될 때, 상술한 속상 값들을 만나는 경우, 속성 값이 지정된 특정 요소에 대응하는 각각의 디스플레이 트리 노드에 플래그가 푸쉬(push)된다. 따라서, 각각의 디스플레이 트리 노드는 상술한 속성 값들에 의해 정의된 대로의 자신의 상태를 지닌다.
독립적 히트 테스트 동안, 디스플레이 트리가 워킹되고, 이 플래그들이 누적되어, 독립적 히트 테스트 스레드가 직접 조작을 위해 조작 스레드를 호출해야 하는지가 확인된다. 이 플래그들은 본질적으로 위에 설명된 방식으로 구축되고, 다음으로 페이지 또는 콘텐츠가 어떻게 패닝, 주밍 또는 조작될지를 궁극적으로 결정하는 뷰포트에 배정된다. 따라서, 조작은 히트 테스트 결과들에 기초하여 온-더-플라이 방식으로 구성될 수 있다. 독립적 히트 테스트가 완료되고 구성이 확인되고 나면, 독립적 히트 테스트 스레드는 직접 조작을 위해 조작 스레드에 적절한 호출을 할 수 있다.
도 3a는 하나 이상의 실시예에 따른 방법의 단계들을 설명하는 흐름도이다. 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어 또는 그들의 조합과 관련하여 구현될 수 있다. 적어도 일부 실시예에서, 방법은 개발자가 웹 페이지를 개발할 수 있게 하는 소프트웨어를 포함하는, 적절하게 구성된 웹 페이지 개발 시스템에 의해 구현될 수 있다.
단계(320)는 웹 페이지를 구축한다. 이 단계는 임의의 적절하게 구성된 웹 페이지 개발 소프트웨어 패키지를 이용하여 임의의 적절한 방식으로 수행될 수 있다. 단계(322)는 하나 이상의 개별 디폴트 터치 행동을 요청하기 위해 웹 페이지의 요소들에 하나 이상의 속성을 배정한다. 이것이 어떤 방법으로 행해질 수 있는지의 예들이 위에 제공되어 있다.
도 3b는 하나 이상의 실시예에 따른 방법의 단계들을 설명하는 흐름도이다. 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어 또는 그들의 조합과 관련하여 구현될 수 있다. 적어도 일부 실시예에서, 방법은 다른 컴포넌트들 중에서도 위에서 설명된 것과 같은 독립적 히트 테스트 컴포넌트를 포함하는 것과 같이 적절하게 구성된 시스템에 의해 구현될 수 있다.
단계(330)는 웹 페이지를 수신한다. 단계(332)는 웹 페이지에 연관된 디스플레이 트리를 구축한다. 단계(334)는 디폴트 터치 행동이 지정되어 있는 요소에 대응하는 디스플레이 트리 노드 상에 적어도 하나의 플래그를 설정한다. 이것이 어떤 방법으로 행해질 수 있는지의 예들이 위에 제공되어 있다. 단계(336)는 디스플레이 트리 상에서 독립적 히트 테스트를 수행한다. 이것이 어떤 방법으로 행해질 수 있는지의 예들이 위에 제공되어 있다. 단계(338)는 디폴트 터치 행동이 지정되어 있는 하나 이상의 요소에 대한 직접 조작을 위해 조작 스레드를 호출한다. 이것이 어떤 방법으로 행해질 수 있는지의 예들이 위에 제공되어 있다.
예시적인 구현을 고찰하였고, 이하에서는 다양한 입력 제스처를 식별하고 핸들링하기 위한 다른 실시예들의 논의를 고찰하기로 한다.
터치 패드 및 더블 탭 주밍에 대한 고찰
상술한 기술들을 이용하여, 다른 것들 중에서도 특히 콘텐츠 내에 포함된 독립적 및 종속적 영역들을 식별하고, 이러한 영역들에 관련된 액션들의 병렬 처리를 더 가능하게 하기 위해, 독립적 히트 스레드가 구성될 수 있다. 예를 들어, 독립적 히트 스레드는 독립적 영역을 식별하고 연관된 처리를 조작 스레드에 핸드오프하도록 구성될 수 있다. 대안적으로 또는 추가적으로, 독립적 히트 스레드는 종속적 영역들을 식별할 수 있고, 사용자 인터페이스 스레드와 같이 연관된 종속성들을 관리하는 스레드에 처리를 핸드오프할 수 있다. 처리를 상이한 스레드들에 분산시킴으로써, 이전에는 실행 병목으로 인해 지연되었던 조작들이 더 시기적절하게 처리될 수 있고, 그에 의해 병목 아키텍쳐 내에서보다 더 반응적인 사용자 인터페이스를 야기한다. 그러나, 때로는 멀티 제스쳐 입력들을 식별할 때 지연이 초래될 수 있다.
예를 들어, 더블 탭 주밍을 고찰하기로 한다. 이름에 의해 나타나 있는 바와 같이, 일부 실시예들은 더블 마우스 클릭에 연관된 더블 탭 입력인지 터치 스크린에 연관된 더블 탭 입력인지, 터치 패드 상의 더블 탭인지 등에 무관하게, 더블 탭 입력을 식별한 것에 응답하여 줌 기능성을 불러온다(invoke). 시퀀스 내의 2개의 탭이 식별되고 나면, 주밍 기능성을 불러올 수 있다. 그러나, 멀티 제스쳐의 제2 탭이 식별될 때까지는, 제1 탭, 및 그것을 독립적 입력(예를 들어, 싱글 탭 선택 입력)으로서 해석할지 아니면 멀티 제스쳐 입력(예를 들어, 더블 탭 줌)의 일부로서 해석할지에 연관된 불확실성이 있을 수 있다. 제1 탭을 식별하는 데에 있어서의 이러한 불확실성은 결국에는 제1 탭의 연관된 역할(예를 들어, 독립적 입력 또는 멀티 제스쳐 입력)이 식별될 때까지 응답성에 지연을 유발할 수 있다. 예를 들어, 탭 입력이 단일 및/또는 독립적 입력에 연관되는 경우, 잠재적인 제2 탭 및/또는 타임아웃을 대기하는 데에 있어서의 임의의 지연은 그 대기 기간 동안의 사용자의 인지에 영향을 줄 수 있다.
일부 실시예들은 입력을 단일 및/또는 독립적 입력으로서 해석하는 것, 입력을 멀티 제스쳐 입력으로서 해석하는 것 등과 같이, 입력에 연관된 하나 이상의 입력 시나리오를 식별하도록 구성된 독립적 히트 테스트 스레드를 제공한다. 일부 경우들에서, 각각의 입력 시나리오는 적어도 부분적으로 개시되고/거나 초기화를 위해 별개의 스레드에 넘겨질 수 있는 연관된 응답 액션을 갖는다. 부분적으로 초기화된 응답 액션은 위에 더 설명된 것과 같은 객체 및/또는 디스플레이 조작을 제한이 아닌 예로서 포함할 수 있다. 위와 아래에 더 설명되는 바와 같이, 입력이 하나 이상의 응답 액션으로부터의 명백한 응답 액션을 갖는 명백한 입력으로서 식별된 때, 완전한 응답 액션을 불러올 수 있다.
더블 탭 줌에 연관된 예시적인 시퀀스도를 개괄적으로 400으로 도시한 도 4를 고찰하기로 한다. 여기에서, 사용자는 터치 스크린을 통해 검출되는 2개의 별개의 "핑거 다운- 핑거 업" 제스쳐 형태의 멀티 제스쳐 입력을 실행한다. 그러나, "핑거 다운 - 핑거 업" 제스쳐를 위해 임의의 적절한 타입의 입력이 제공될 수 있다는 것을 알아야 하고, 그들의 예는 위와 아래에 제공된다. 또한, 더블 탭 줌 및 그것에 연관된 더블 탭의 멀티 제스쳐 입력의 맥락에서 설명되었지만, 본원에 설명된 기술들은 청구되는 발명의 주제의 범위를 벗어나지 않고서 임의의 멀티 제스쳐 입력에 적용가능하다는 것을 알아야 한다.
여기에서, 개괄적으로 400으로 설명된 시퀀스도는 도 2를 참조하여 위에 논의된 바와 같이, 독립적 히트 테스트 스레드(202), 조작 스레드(204), 및 사용자 인터페이스 스레드(206)를 포함한다. "1"에서, 웹페이지 상에 나타나는 요소 상에서의 사용자 탭의 검출에 응답하여 핑거 다운 - 핑거 업 이벤트가 발생하며, 이는 결국 탭 입력 메시지를 낳는다. 이것은 조작 스레드(204)에 의해 수신되고, 큐 내에 배치된다. 다음으로, 탭 입력 메시지는 독립적 히트 테스트 스레드(202)에 송신되고, 이는 "2"에서 수신된다. 탭 입력 이벤트의 통지를 수신하는 것의 맥락에서 설명되었지만, 임의의 다른 적절한 타입의 이벤트도 물론 식별될 수 있음을 알아야 한다. 예를 들어, 핑거 다운 및 핑거 업의 다중 입력 이벤트들을 포함하는 탭 이벤트를 식별하는 것을 대신하여, 일부 실시예들은 핑거 다운 이벤트 및 핑거 업 이벤트를 따로따로 식별하고, 포인터 다운 이벤트 메시지 및 포인터 업 이벤트 메시지와 같은 별개의 입력 메시지들을 송신한다.
"2"에서 탭 입력 메시지를 수신하면, 독립적 히트 테스트 스레드는 "3"에서, 위에서 설명된 것과 같은 디스플레이 트리 트래버설 및/또는 다중 제스처 입력 분석과 같은 하나 이상의 액션을 시작한다. 본 예에서, 독립적 히트 테스트 스레드(202)는 탭 이벤트가 싱글 탭 입력 또는 멀티 제스쳐 입력의 일부인 것과 같이 복수의 방식으로 해석될 수 있음을 알아차리는 로직 및/또는 지식을 포함한다. 따라서, 독립적 히트 테스트 스레드(202)는 싱글 탭 입력의 통지로서 사용자 인터페이스 스레드(206)에 메시지 및/또는 호출을 송신하고, 이는 여기에 "4"에서 나타나 있다. 대안적으로 또는 추가적으로, 사용자 인터페이스 스레드(206)는 이벤트 통지를 수신할 수 있다. 일부 실시예들에서, 사용자 인터페이스 스레드(206)에의 통지는 싱글 탭 입력이 명백하게 식별되지 않았으며, 그것이 잠재적으로 복수의 방식으로 해석될 수 있음을 나타내는 정보를 포함할 수 있다. 즉, 싱글 탭 입력은 최종 및/또는 명백한 해석이 아니라, 입력의 잠재적 해석으로서 식별된다. 이것은 사용자 인터페이스 스레드(206)에 의해 수신되는 메시지 내에 정보를 포함시키는 것을 통하는 것, 사용자 인터페이스 스레드(206)에 대한 호출 동안 전달되는 파라미터(들)를 통하는 것, 독립적 히트 테스트 스레드(202)와 사용자 인터페이스 스레드(206) 사이의 공유 데이터 구조 내에 정보를 저장하는 것을 통하는 것 등과 같이 임의의 적절한 방식으로 달성될 수 있다. 싱글 탭 입력을 잠재적 해석으로서 식별하는 것에 응답하여, 사용자 인터페이스 스레드(206)는 연관된 응답 액션의 부분적 초기화를 수행한다.
"4"에서, 사용자 인터페이스 스레드(206)는 부분적 초기화를 수행한다. 이것은 임의의 적절한 타입의 액션을 포함할 수 있고, 그것의 예는 위에 제공되었다. 예를 들어, CSS 규칙의 상기 논의를 참조하면, 부분적 초기화는 사용자 인터페이스 스레드(206)를 통해 디스플레이되는 하나 이상의 요소의 모습을 바꾸는 데에 유효하도록, 하나 이상의 요소에 연관된 하나 이상의 CSS 규칙을 처리하는 것을 포함할 수 있다. 대안적으로 또는 추가적으로, 사용자 인터페이스 스레드(206)는 자바스크립트와 같은 연관된 스크립트들을 실행할 수 있다. 따라서, 사용자 인터페이스 스레드(206)는 싱글 탭 입력의 수신에 연관된 응답 액션을 적어도 부분적으로 처리하는 것을 시작한다.
"5"에서, 조작 스레드(204)는 제2 탭 이벤트의 통지를 수신한다. 위의 경우에서와 같이, 다음으로, 조작 스레드(204)는 메시지 및/또는 통지를 독립적 히트 테스트 스레드(202)에 전달한다. "6"에서, 독립적 히트 테스트 스레드(202)는 제2 탭 이벤트의 통지를 수신한다. "7"에서, 독립적 히트 테스트 스레드(202)는 제1 탭 이벤트 및 제2 탭 이벤트의 조합을 멀티 제스쳐 입력(예를 들어, 더블 탭)으로서 식별한다. 멀티 제스쳐 입력을 식별하는 것은 임의의 적절한 방식으로 수행될 수 있다. 예를 들어, 제2 탭 이벤트가 미리 정의된 시간 윈도우 내에 발생하는지를 결정하는 데에 유효하도록, 제1 탭 이벤트 통지의 수신 시에 타이머가 시작될 수 있다. 대안적으로 또는 추가적으로, 각각의 탭 이벤트는 타임스탬프될 수 있고, 제1 탭 이벤트와 제2 탭 이벤트 사이의 시간의 측정값이 계산되어 임계값과 비교될 수 있다. 따라서, 독립적 히트 테스트 스레드(202)는 제1 탭 이벤트 및 제2 탭 이벤트의 조합을 제1 탭 이벤트와 연관있을 수 있는 다수의 잠재적 입력 해석(예를 들어, 단일 클릭, 더블 탭, 탭-앤드-홀드 등) 중에서 멀티 제스쳐 입력(예를 들어, 더블 탭)으로서 식별한다.
제1 탭 이벤트 및 제2 탭 이벤트의 해석을 명백하게 식별하면(예를 들어, 더블 탭 입력으로서 명백하게 식별하면), 다음으로 독립적 히트 테스트 스레드(202)는 어떤 다른 해석 응답 액션들이 부분적으로 초기화될 수 있었는지를 분석한다. 예를 들어, "3"에서는, 싱글 탭 입력 응답 액션이 사용자 인터페이스 스레드(206) 내에서 적어도 부분적으로 초기화되었다. 다음으로, 독립적 히트 테스트 스레드(202)는 부분적으로 초기화된 응답 액션들을 갖는 스레드들에 통지를 송신한다. 대안적으로 또는 추가적으로, 독립적 히트 테스트 스레드(202)는 자기 자신의 스레드 내에서 관리되는 임의의 부분적으로 초기화된 응답 액션들을 종료할 수 있다. 이러한 예에서, 독립적 히트 테스트 스레드(206)는 사용자 인터페이스 스레드(206)에 싱글 탭 입력 응답 액션의 처리를 종료 및/또는 정지하라는 메시지를 송신한다. 이것은 "8"에 나타나 있으며, 거기에서 사용자 인터페이스 스레드(206)는 취소 통지를 수신한다. 청구되는 발명의 주제의 범위를 벗어나지 않고서, 임의의 적절한 타입의 통지가 이용될 수 있음을 알아야 한다. 예를 들어, 공유 데이터 구조에 대한 위의 예로 되돌아가면, 일부 실시예들에서, 사용자 인터페이스 스레드(206)는 종료 요청의 통지 및/또는 식별을 위해 공유 데이터 구조에 액세스할 수 있다. "8"에서 통지를 수신한 것에 응답하여, 사용자 인터페이스 스레드(206)는 "4"에서 실행되는 임의의 선행 액션을 종료 및/또는 반전시킨다.
"9"에서, 독립적 히트 테스트 스레드(202)는 다중 제스처 입력의 통지를 조작 스레드(204)에 송신한다. 여기에서, 위에서 논의된 바와 같이, 독립적 히트 테스트 스레드(202)가 임의의 연관된 요소들 및/또는 액션들이 조작 스레드(204)에 의해 관리 및/또는 처리될 수 있다고 결정한 것에 응답하여, 통지가 조작 스레드(204)에 송신된다. "10"에서, 조작 스레드(204)는 임의의 적절한 방식으로 통지를 수신하고, 그것의 예는 위에 설명되어 있다. 도 4에서는, 독립적 히트 테스트 스레드(202)가 먼저 사용자 인터페이스 스레드(205)에 선행 응답 액션(예를 들어, 싱글 탭 입력 응답 액션)을 취소하라는 통지를 송신한 다음에 조작 스레드(204)에 멀티 제스쳐 입력의 통지를 송신하는 것으로서 도시되어 있지만, 이러한 이벤트들의 시퀀스는 청구되는 발명의 주제의 범위를 벗어나지 않고서 임의의 순서로 발생할 수 있음을 알고 이해해야 한다. "11"에서, 조작 스레드는 멀티 제스쳐 입력(예를 들어, 더블 탭 줌)에 대한 연관된 응답 액션을 처리 및/또는 실행한다.
간단히 하기 위해, 도 4는 멀티 제스쳐 입력을 결정하고 복수의 잠재적 응답을 스태거링하는 것에 관련된 타임라인을 설명하는 시퀀스도를 도시하고 있다. 예를 들어, "1"에서 제1 탭이 검출될 때, 싱글 제스쳐 입력인 제1 탭에 관련된 부분 응답 액션이 초기화된다(여기에서는 "3" 및 "4"에 나타나 있음). 멀티 제스쳐 입력은 "5"에서 제2 탭이 검출되고 나서야 멀티 제스쳐 입력으로서 인식된다. 이 지점에서, 멀티 제스쳐 입력 응답 액션이 초기화되고, 싱글 제스쳐 입력은 "7" 및 "8"에서 종료된다. 그러나, 일부 실시예들에서, 부분적 응답은 멀티 제스쳐 입력이 결코 발생하지 않는다고 결정한 때와 같이, 더 나중의 시점에서 완전하게 초기화될 수 있다. 멀티 제스쳐 입력의 부재를 결정하는 것은 타임아웃 타이머의 이용을 통하는 것과 같은 임의의 적절한 방식으로 수행될 수 있다. 도 4와 관련하여, "5"에서의 이벤트가 미리 결정된 시간 임계 내에서 발생하지 않는 경우, 멀티 제스쳐 입력은 인식되지 않는다. 결국, 이것은 싱글 제스쳐 입력에 연관된 임의의 부분적으로 초기화된 응답 액션을 완료하라는 메시지를 트리거할 수 있다. 대안적으로 또는 추가적으로, "3"에서 개시된 싱글 제스쳐 응답 액션은 "5"에서의 이벤트의 부재(및 후속하여 "7" 및 "8"에서의 종료 메시지)로 인해 완료까지 이어지는 (부분적 초기화가 아닌) 완전한 초기화일 수 있다.
다른 예로서, 더블 탭 줌에 연관된 시퀀스도를 개괄적으로 500으로 도시한 도 5를 고찰하기로 한다. 도 4의 경우에서와 같이, 도 5는 사용자가 2개의 별개의 "핑거 다운 - 핑거 업" 제스쳐 형태로 멀티 제스쳐 입력을 수행하는 것에 연관된다. 또한, 도 5는 도 2 및 도 4를 참조하여 위에 논의된 바와 같이, 독립적 히트 테스트 스레드(202), 조작 스레드(204), 및 사용자 인터페이스 스레드(206)를 포함한다. "1"에서, 사용자가 웹페이지 상에 나타나는 요소를 터치 체결하는 것에 응답하여 "핑거 다운 - 핑거 업" 이벤트가 발생하며, 이는 결국 탭 입력 메시지를 낳는다. 이것은 조작 스레드(204)에 의해 수신되고, 큐 내에 배치된다. 다음으로, 탭 입력 메시지는 독립적 히트 테스트 스레드(202)에 송신되고, 이는 위에서 설명된 것과 유사한 방식으로 "2"에서 독립적 히트 테스트 스레드(202)에 의해 수신된다. 그러나, 여기에서, 도 5에서 이벤트들이 수신되는 타이밍의 차이들은 약간 다른 행동을 불러온다.
독립적 히트 테스트 스레드(202)가 제1 탭 입력 메시지를 처리하고, 사용자 인터페이스 스레드(206)에게 부분적 초기화를 수행하라는 통지를 송신하기 전에, 제2 탭 입력 메시지가 "3"에서 조작 스레드(204)에 의해 수신된다. 결국, 조작 스레드(204)는 독립적 히트 테스트 스레드(202)에 통지를 송신하고, 그것은 "4"에서 수신된다. 사용자 인터페이스 스레드(206)가 독립적 히트 테스트 스레드(202)로부터 부분적 초기화 메시지를 아직 수신하지 않았으므로, 독립적 히트 테스트 스레드(202)는 이러한 이벤트들의 시퀀스에 대해 임의의 부분적 초기화 메시지들을 사용자 인터페이스 스레드(206)에 송신하는 것을 우회한다. 대신에, "5"에서, 독립적 히트 테스트 스레드(202)는 2개의 탭 입력 메시지를 더블 탭 줌 기능성에 연관된 멀티 제스쳐 입력인 것으로서 식별한다. 결국, 더블 탭 줌 및/또는 멀티 제스쳐 입력의 통지가 독립적 히트 테스트 스레드(202)에 의해 송신되고 "6"에서 조작 스레드(204)에 의해 수신된다. "7"에서, 조작 스레드(204)는 앞에서 논의된 바와 같이 더블 탭 줌을 수행한다.
따라서, 독립적 히트 테스트 스레드는 조작 및/또는 연관된 콘텐츠가 독립적인지 종속적인지를 결정(그리고, 어느 스레드들이 콘텐츠에 연관된 기능성을 처리할지를 관리)할 수 있을 뿐만 아니라, 싱글 입력 제스쳐와 멀티 입력 제스쳐를 구별하기 위한 기능성 및/또는 로직을 또한 포함할 수 있다. 일부 경우들에서, 추가의 로직은 미국 특허 출원 제13/363,127호에 설명된 입력 포인터 지연 및/또는 주밍 알고리즘과 같은 알고리즘들을 포함할 수 있다. 이러한 알고리즘들은 나중에 조작 스레드에 전달되는 파라미터들 및/또는 옵션들을 식별하기 위해 이용될 수 있다. 예를 들어, 알고리즘들은 어느 콘텐츠가 줌인되고 있는지에 기초하는 줌 비율을 결정하기 위해 이용될 수 있다. 결국, 이러한 줌 비율들은 주밍 프로세스의 일부로서 조작 스레드에 건네진다.
때로는, 독립적 히트 테스트 기능성을 활성화 및 비활성화하는 것이 이로울 수 있다. 예를 들어, 터치패드를 고찰하기로 한다. 일부 실시예들에서, 사용자가 터치패드와 상호작용할 때, 입력은 마우스 주변 디바이스의 입력과 유사한 방식으로 해석될 수 있다. 이러한 "마우스 모드"에 있을 때, 사용자는 터치패드 인터페이스를 터치하고, 탭을 통해 요소들을 "클릭"할 수 있고, 인터페이스에 대한 터치 컨택트를 유지하고 원하는 방향으로 슬라이딩하는 것에 의해, 디스플레이된 마우스 포인터를 이동시키는 등을 한다. 그러나, 일부 시나리오들에서는 히트 테스트를 활성화하는 것이 바람직할 수 있다. 패닝 기능성에 관련된 위의 논의를 고찰하기로 한다. 때로는, 패닝 기능성을 처리할 때, 적절한 조작 타겟을 결정하기 위해 히트 테스트를 수행하는 것이 이로울 수 있다. 일부 실시예들은 "제스쳐 모드"로(그리고, 제스쳐 모드로부터) 전이하는 능력을 제공한다. 예를 들어, 일부 경우들에서, 터치패드 상에서 복수의 동시적 손가락 상호작용을 검출하는 것과 같이 멀티 제스쳐 입력을 검출하는 것은 "제스쳐 모드"를 활성화한다. "제스쳐 모드"로 전이할 때, 입력들은 위에서 설명된 것들과 유사한 독립적 히트 테스트 스레드 기술을 이용하여 처리 및/또는 분석될 수 있다. 대안적으로 또는 추가적으로, 새로운 규칙들이 적용될 수 있고/거나 입력들은 "마우스 모드"에 있을 때와는 다르게 해석될 수 있다. 예를 들어, "마우스 모드"에 있을 때, 손가락이 터치패드를 가로질러 이동하는 것에 연관된 입력을 검출하는 것은 마우스 아이콘이 손가락 이동과 관련된 방향으로 이동하게 하는 응답 액션을 불러올 수 있다. 그러나, "제스쳐 모드"에 있을 때 유사한 입력을 검출하는 것은 연관된 디스플레이가 왼쪽 또는 오른쪽으로 패닝하게 하는 응답 액션을 대신 불러올 수 있다. 임의의 적절한 타입의 이벤트 및/또는 입력은 "터치-앤드-홀드" 제스쳐에 연관된 제1 입력을 "스와이프" 제스쳐에 연관된 제2 입력과 함께 검출하는 것, 제스쳐의 결핍을 검출하는 것(예를 들어, "터치-앤드-홀드" 제스쳐 및/또는 "스와이프" 제스쳐의 부재를 검출하는 것) 등과 같이, "제스쳐 모드"로의(그리고, 제스쳐 모드로부터의) 전이를 야기할 수 있다. 일부 실시예들은 "제스쳐 모드"에 연관된 멀티 제스쳐 입력에의 종료, "마우스 모드"로의 전이에 연관된 명백한 입력의 검출과 같이 마우스 모드 입력 이벤트를 검출한 때, "마우스 모드"로 다시 전이한다.
도 6은 하나 이상의 실시예에 따른 방법의 단계들을 설명하는 흐름도이다. 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어 또는 그들의 조합과 관련하여 구현될 수 있다. 적어도 일부 실시예에서, 방법은 다른 컴포넌트들 중에서도 위에서 설명된 것과 같은 독립적 히트 테스트 컴포넌트를 포함하는 것과 같은 적절하게 구성된 시스템에 의해 구현될 수 있다.
단계(600)는 제1 입력에 연관된 제1 입력 메시지를 수신한다. 이것은 터치 스크린, 터치패드, 마우스 디바이스, 키보드 입력 등으로부터의 입력과 같은 임의의 적절한 타입의 입력 메시지 및/또는 입력을 포함할 수 있다. 일부 경우들에서, 제1 입력 메시지는 사용자 인터페이스 스레드 및/또는 독립적 히트 테스트 스레드와는 별개인 스레드 상에서 수신된다. 단계(602)는 제1 입력 메시지를 독립적 히트 테스트 스레드에 송신한다.
제1 입력 메시지를 수신한 것에 응답하여, 단계(604)는 제1 입력 메시지에 연관된 제1 입력이 복수의 해석을 갖는다고 결정한다. 예를 들어, 제1 입력은 싱글 제스쳐 입력으로서 해석되거나, 하나 이상의 멀티 제스쳐 입력의 일부로서 해석될 수 있다. 대안적으로 또는 추가적으로, 제1 입력 메시지를 수신하는 것에 응답하여, 독립적 히트 테스트 스레드는 적어도 일부의 히트 테스트를 수행할 수 있으며, 그들의 예는 위에 제공되어 있다.
단계(606)는 복수의 해석 중 적어도 하나의 해석에 연관된 적어도 하나의 응답 액션을 초기화한다. 이것은 연관된 응답 액션의 완전한 초기화 및/또는 부분적 초기화를 포함할 수 있다. 일부 경우들에서, 독립적 히트 테스트 스레드는 초기화를 수행하라는 통지를 별개의 스레드에 송신하며, 여기에서 통지는 초기화가 완전한 초기화여야 하는지 부분적 초기화여야 하는지의 지시자를 포함할 수 있다. 대안적으로 또는 추가적으로, 별개의 스레드는 어느 타입의 초기화를 수행할지를 결정하기 위해 공유 데이터 구조를 이용할 수 있다. 초기화는 하나 이상의 CSS 규칙을 요소에 적용하는 것, 데이터 구조들을 할당하는 것 등과 같은 임의의 적절한 타입의 액션을 포함할 수 있다.
단계(608)는 적어도 제2 입력이 수신되는지를 결정한다. 일부 경우들에서, 이것은 제2 입력이 미리 정의된 시간 윈도우 내에서 수신되는지를 결정하는 것을 포함할 수 있다. 예를 들어, 제2 입력에 연관된 제2 입력 메시지는 제1 입력 메시지와 유사한 방식으로 수신될 수 있다. 제2 입력 메시지가 미리 정의된 시간 윈도우 내에서 수신되지 않는 경우, 일부 실시예들은 제2 입력 메시지가 제1 입력 메시지와 연관되지 않는다고 결정한 다음, 제1 입력 메시지와는 독립적으로 제2 입력 메시지를 처리하고/거나 그에 응답한다. 그러나, 제2 입력 메시지가 미리 정의된 시간 윈도우 내에서 수신되는 경우, 입력들은 제1 및 제2 입력이 멀티 제스쳐 입력의 일부인지를 더 결정하기 위해 분석된다.
제2 입력이 수신되지 않는다고 결정한 것에 응답하여, 단계(610)는 부분적으로 초기화된 응답 액션을 완료한다. 일부 경우들에서, 응답 액션을 완료하라는 메시지가 부분적으로 초기화된 응답을 처리하도록 배정된 스레드에 송신된다. 다른 경우들에서, 부분적으로 초기화된 응답 액션을 완료하는 것은 단순히 단계(606)에서 수행된 초기화가 차단되지 않고서 완료되게 함으로써 성취된다.
제2 입력이 수신되었다고 결정한 것에 응답하여, 단계(612)는 제1 및 제2 입력에 기초하여 제1 입력의 명백한 해석을 결정한다. 예를 들어, 제1 입력이 4개의 가능한 해석을 가진 경우, 단계(612)는 입력들이 무엇을 수신하였는지, 그리고 잠재적으로는 언제 수신하였는지에 기초하여 4개의 해석 중 하나를 선택한다. 더블 탭 제스쳐의 상기 예를 참조하면, 제1 탭 입력은 제2 탭 입력이 수신되는지의 여부, 및 제2 탭 입력이 미리 정의된 시간 윈도우 내에서 수신되는지의 여부에 기초하여, 명백한 더블 탭 입력으로서 결정된다. 따라서, 입력의 명백한 해석을 결정하는 것은 어느 입력들이 수신되었는지에 기초할 뿐만 아니라, 추가로 입력들이 미리 정의된 시간 윈도우 내에서 수신되었는지의 여부, 그들이 수신되는 순서, 입력의 지속시간 등에 기초할 수 있다.
입력에 연관된 명백한 해석을 결정한 것에 응답하여, 단계(614)는 명백한 해석에 연관된 응답 액션을 불러온다. 임의의 적절한 타입의 응답 액션을 불러올 수 있고, 그것의 예는 위에 제공되었다. 일부 경우들에서, 응답 액션을 불러오는 것은 별개의 스레드가 응답 액션을 처리할 수 있게 하는 데에 유효하도록, 별개의 스레드를 통지하는 것을 포함할 수 있다. 대안적으로 또는 추가적으로, 응답 액션은 위에서 설명된 "제스쳐 모드" 및 "마우스 모두" 예시와 같이, 디바이스가 어느 상태 또는 모드에서 운영되고 있는지에 적어도 부분적으로 기초할 수 있다.
단계(616)는 적어도 하나의 부분적으로 초기화된 응답 액션을 종료한다. 일부 실시예들에서, 부분적으로 초기화된 응답 액션을 처리한 스레드에 통지 및/또는 메시지가 송신된다. 다른 실시예들에서, 부분적 응답 액션을 종료하라는 통지를 이용하여 공유 데이터 구조가 업데이트된다.
다양한 실시예들을 고찰하였고, 이하에서는 그들이 위에 설명된 실시예들을 구현하기 위해 이용할 수 있는 예시적인 시스템 및 디바이스를 고찰하기로 한다.
예시적인 시스템 및 디바이스
도 7은 도 1을 참조하여 설명된 것과 같은 컴퓨팅 디바이스(102)를 포함하는 예시적인 시스템(700)을 도시한다. 예시적인 시스템(700)은 퍼스널 컴퓨터(PC), 텔레비젼 디바이스, 및/또는 모바일 디바이스 상에서 애플리케이션을 실행할 때의 심리스한(seamless) 사용자 경험을 위한 유비쿼터스 환경을 가능하게 한다. 애플리케이션을 이용하고, 비디오 게임을 하고, 비디오를 시청하는 등의 동안 하나의 디바이스로부터 다음 디바이스로 옮겨갈 때의 공통의 사용자 경험을 위해, 서비스들 및 애플리케이션들은 3가지 환경 전부에서 실질적으로 유사하게 운영된다.
예시적인 시스템(700)에서, 복수의 디바이스는 중앙 컴퓨팅 디바이스를 통해 상호접속된다. 중앙 컴퓨팅 디바이스는 복수의 디바이스에 로컬일 수 있거나 복수의 디바이스로부터 원격 위치되어 있을 수 있다. 일 실시예에서, 중앙 컴퓨팅 디바이스는 네트워크, 인터넷 또는 다른 데이터 통신 링크를 통해 복수의 디바이스에 접속되는 하나 이상의 서버 컴퓨터의 클라우드일 수 있다. 일 실시예에서, 이러한 상호접속 아키텍쳐는 복수의 디바이스의 사용자에게 공통적이고 심리스한 경험을 제공하기 위해 복수의 디바이스에 걸쳐 기능이 전달되게 할 수 있다. 복수의 디바이스 각각은 상이한 물리적 요건들 및 능력들을 가질 수 있고, 중앙 컴퓨팅 디바이스는 그 디바이스에 맞춰지면서도 모든 디바이스에 공통인 경험을 디바이스에 전달하는 것을 가능하게 하기 위해 플랫폼을 이용한다. 일 실시예에서, 타겟 디바이스들의 클래스가 생성되고, 경험들은 디바이스들의 포괄적인 클래스의 맞춰진다. 디바이스들의 클래스는 디바이스들의 물리적 특징들, 사용 유형들, 또는 다른 공통적 특성들에 의해 정의될 수 있다.
다양한 구현들에서, 컴퓨팅 디바이스(102)는 컴퓨터(702), 모바일(704) 및 텔레비젼(706) 사용을 위한 것과 같이 여러 상이한 구성을 취할 수 있다. 이러한 구성들 각각은 일반적으로 상이한 구조 및 능력을 가질 수 있는 디바이스들을 포함하고, 따라서 컴퓨팅 디바이스(102)는 상이한 디바이스 클래스들 중 하나 이상에 따라 구성될 수 있다. 예를 들어, 컴퓨팅 디바이스(102)는 퍼스널 컴퓨터, 데스크탑 컴퓨터, 멀티스크린 컴퓨터, 랩탑 컴퓨터, 넷북 등을 포함하는 컴퓨터(702) 클래스의 디바이스로서 구현될 수 있다. 애플리케이션(108) 및 독립적 히트 테스트 컴포넌트(110)를 포함하는 것에 의해 도시되어 있는 바와 같이, 이러한 상이한 구성들 각각은 본원에 설명된 기술들을 이용할 수 있다.
컴퓨팅 디바이스(102)는 또한 이동 전화, 휴대용 뮤직 플레이어, 휴대용 게임 디바이스, 태블릿 컴퓨터, 멀티스크린 컴퓨터 등과 같은 모바일 디바이스를 포함하는 모바일(704) 클래스의 디바이스로서 구현될 수 있다. 컴퓨팅 디바이스(102)는 일상의 시청 환경에서 일반적으로 더 큰 스크린을 갖거나 그에 연결되는 디바이스들을 포함하는 텔레비젼(706) 클래스의 디바이스로서도 구현될 수 있다. 이 디바이스들은 텔레비젼, 셋탑 박스, 게이밍 콘솔 등을 포함한다. 본원에 설명된 기술들은 컴퓨팅 디바이스(102)의 이러한 다양한 구성들에 의해 지원될 수 있고, 본원에 설명되는 기술들의 구체적인 예시들에 한정되지 않는다.
클라우드(708)는 콘텐츠 서비스들(712)을 위한 플랫폼(710)을 포함하고/거나 나타낸다. 플랫폼(710)은 클라우드(708)의 하드웨어(예를 들어, 서버들) 및 소프트웨어 자원들의 기저 기능을 추상화한다. 콘텐츠 서비스들(712)은 컴퓨터 프로세싱이 컴퓨팅 디바이스(102)로부터 멀리 떨어져 있는 서버들 상에서 실행되는 동안 이용될 수 있는 애플리케이션들 및/또는 데이터를 포함할 수 있다. 콘텐츠 서비스들(712)은 인터넷을 통해 및/또는 가입자 네트워크, 예를 들어 셀룰러 또는 WiFi 네트워크를 통해 제공되는 서비스로서 제공될 수 있다.
플랫폼(710)은 컴퓨팅 디바이스(102)를 다른 컴퓨팅 디바이스들에 접속하기 위해 자원들 및 기능들을 추상화할 수 있다. 플랫폼(710)은 플랫폼(710)을 통해 구현되는 콘텐츠 서비스(712)에 대한 직면되는 요구에 대해 대응하는 레벨의 스케일을 제공하기 위해 자원들의 스케일링을 추상화하는 역할도 할 수 있다. 따라서, 상호접속되는 디바이스 구현에서, 본원에 설명된 기능의 구현은 시스템(700) 전반에 분산될 수 있다. 예를 들어, 기능은 컴퓨팅 디바이스(102) 상에서 부분적으로 구현될 수 있는 것은 물론, 클라우드(708)의 기능을 추상화하는 플랫폼(710)을 통해서도 구현될 수 있다.
도 8은 본원에 설명된 기능들의 실시예들을 구현하기 위해 도 1 내지 도 7을 참조하여 설명된 것과 같은 임의의 타입의 컴퓨팅 디바이스로서 구현될 수 있는 예시적인 디바이스(800)의 다양한 컴포넌트들을 도시한다. 디바이스(800)는 디바이스 데이터(804)(예를 들어, 수신된 데이터, 수신되고 있는 데이터, 브로드캐스트를 위해 스케줄링된 데이터, 데이터의 데이터 패킷 등)의 유선 및/또는 무선 통신을 가능하게 하는 통신 디바이스들(802)을 포함한다. 디바이스 데이터(804) 또는 다른 디바이스 콘텐츠는 디바이스의 구성 세팅, 디바이스 상에 저장된 미디어 콘텐츠, 및/또는 디바이스의 사용자에 연관된 정보를 포함할 수 있다. 디바이스(800) 상에 저장된 미디어 콘텐츠는 임의의 타입의 오디오, 비디오 및/또는 이미지 데이터를 포함할 수 있다. 디바이스(800)는 하나 이상의 데이터 입력부(806)를 포함하며, 그것을 통하여, 임의의 콘텐츠 및/또는 데이터 소스로부터 수신된 사용자 선택가능한 입력, 메시지, 음악, 텔레비젼 미디어 콘텐츠, 기록된 비디오 콘텐츠, 및 임의의 다른 타입의 오디오, 비디오 및/또는 이미지 데이터와 같은 임의의 타입의 데이터, 미디어 콘텐츠 및/또는 입력이 수신될 수 있다.
디바이스(800)는 또한 직렬 및/또는 병렬 인터페이스, 무선 인터페이스, 임의의 타입의 네트워크 인터페이스, 모뎀 중 임의의 하나 이상으로서, 그리고 임의의 다른 타입의 통신 인터페이스로서 구현될 수 있는 통신 인터페이스들(808)을 포함한다. 통신 인터페이스들(808)은 디바이스(800)와 통신 네트워크 사이의 접속 및/또는 통신 링크를 제공하며, 그에 의해 다른 전자, 컴퓨팅 및 통신 디바이스가 디바이스(800)와 데이터 통신을 한다.
디바이스(800)는 디바이스(800)의 동작을 제어하고 본원에 설명된 기술들의 실시예들을 구현하기 위해 다양한 컴퓨터 실행가능한 명령어들을 처리하는 하나 이상의 프로세서(810)(예를 들어, 마이크로프로세서, 제어기 및 그와 유사한 것 중 임의의 것)를 포함한다. 대안적으로 또는 추가적으로, 디바이스(800)는 개괄적으로 812로 식별된 처리 및 제어 회로에 관련하여 구현되는 하드웨어, 펌웨어 또는 고정 로직 회로망 중 임의의 하나 또는 그들의 조합으로 구현될 수 있다. 도시되지는 않았지만, 디바이스(800)는 디바이스 내의 다양한 컴포넌트들을 연결하는 시스템 버스 또는 데이터 전달 시스템을 포함할 수 있다. 시스템 버스는 메모리 버스 또는 메모리 컨트롤러, 주변 버스, 유니버설 시리얼 버스, 및/또는 다양한 버스 아키텍쳐들 중 임의의 것을 이용하는 프로세서 또는 로컬 버스와 같은 상이한 버스 구조들 중 임의의 것 또는 그들의 조합을 포함할 수 있다.
디바이스(800)는 또한 하나 이상의 메모리 컴포넌트와 같은 컴퓨터 판독가능한 매체(814)를 포함하며, 그것의 예는 랜덤 액세스 메모리(RAM), 비휘발성 메모리(예를 들어, 판독 전용 메모리(ROM), 플래쉬 메모리, EPROM, EEPROM 등 중 임의의 하나 이상), 및 디스크 저장 디바이스를 포함한다. 디스크 저장 디바이스는 하드 디스크 드라이브, 기록가능한 및/또는 재기입가능한 컴팩트 디스크(CD)와 같은 임의의 타입의 자기 또는 광학 저장 디바이스, 임의의 타입의 DVD(digital versatile disc), 및 그와 유사한 것으로서 구현될 수 있다. 디바이스(800)는 대용량 저장 매체 디바이스(816)를 또한 포함할 수 있다.
컴퓨터 판독가능한 매체(814)는 디바이스 데이터(804)는 물론, 다양한 디바이스 애플리케이션들(818), 및 디바이스(800)의 동작 양상들에 관련된 임의의 다른 타입의 정보 및/또는 데이터를 저장하기 위해 데이터 저장 메커니즘을 제공한다. 예를 들어, 운영 체제(820)는 컴퓨터 판독가능한 매체(814)로 컴퓨터 애플리케이션으로서 유지될 수 있고 프로세서들(810) 상에서 실행될 수 있다. 디바이스 애플리케이션들(818)은 디바이스 관리자(예를 들어, 제어 애플리케이션, 소프트웨어 애플리케이션, 신호 처리 및 제어 모듈, 특정 디바이스에 고유한 코드, 특정 디바이스를 위한 하드웨어 추상화 계층 등)를 포함할 수 있다. 디바이스 애플리케이션들(818)은 또한 본원에 설명된 기술들의 실시예들을 구현하기 위해 임의의 시스템 컴포넌트들 또는 모듈들을 포함한다. 이러한 예에서, 디바이스 애플리케이션들(818)은 소프트웨어 모듈들 및/또는 컴퓨터 애플리케이션들로서 도시된 인터페이스 애플리케이션(822) 및 입력/출력 모듈(824)을 포함한다. 입력/출력 모듈(824)은 터치스크린, 트랙 패드, 카메라, 마이크로폰 등과 같은 입력들을 캡쳐하도록 구성된 디바이스와의 인터페이스를 제공하기 위해 이용되는 소프트웨어를 나타낸다. 대안적으로 또는 추가로, 인터페이스 애플리케이션(822) 및 입력/출력 모듈(824)은 하드웨어, 소프트웨어, 펌웨어 또는 그들의 임의의 조합으로 구현될 수 있다. 추가로, 입력/출력 모듈(824)은 시각 및 오디오 입력을 각각 캡쳐하기 위한 별개의 디바이스들과 같은 복수의 입력 디바이스를 지원하도록 구성될 수 있다.
디바이스(800)는 또한 오디오 데이터를 오디오 시스템(828)에 제공하고/거나 비디오 데이터를 디스플레이 시스템(830)에 제공하는 오디오 및/또는 비디오 입력-출력 시스템(826)을 포함한다. 오디오 시스템(828) 및/또는 디스플레이 시스템(830)은 오디오, 비디오 및 이미지 데이터를 처리, 디스플레이 및/또는 다르게 렌더링하는 임의의 디바이스들을 포함할 수 있다. 비디오 신호 및 오디오 신호는 RF(radio frequency) 링크, S-비디오 링크, 콤포지트 비디오 링크, 컴포넌트 비디오 링크, DVI(digital video interface), 아날로그 오디오 접속, 또는 다른 유사한 통신 링크를 통해, 디바이스(800)로부터 오디오 디바이스 및/또는 디스플레이 디바이스에 통신될 수 있다. 실시예에서, 오디오 시스템(828) 및/또는 디스플레이 시스템(830)은 디바이스(800) 외부의 컴포넌트로서 구현된다. 대안적으로, 오디오 시스템(828) 및/또는 디스플레이 시스템(830)은 예시적인 디바이스(800)의 통합된 컴포넌트들로서 구현된다.
결론
하나 이상의 실시예에서, 웹 콘텐츠에 대한 히트 테스트를 위해, 메인 스레드, 예를 들어 사용자 인터페이스 스레드와 별개인 히트 테스트 스레드가 이용된다. 히트 테스트를 위해 별개의 스레드를 이용하는 것은 타겟들이 신속하게 확인되는 것을 허용할 수 있다. 적절한 응답이 별개의 스레드, 예컨대 패닝 및 핀치 주밍과 같은 터치 조작을 위해 이용될 수 있는 조작 스레드에 의해 핸들링되는 경우들에서, 메인 스레드 상에서의 차단 없이 조작이 발생할 수 있다. 이것은 다양한 시나리오들에 걸쳐 로우 엔드 하드웨어에서 조차도 일관되게 신속한 응답 시간을 야기한다.
적어도 일부 실시예들에서, 웹 개발자들이 자신의 웹 페이지 상에서 터치 행동과 같은 특정한 디폴트 행동을 요청하기 위한 메커니즘이 제공된다. 적어도 일부 구현들에서, 패닝, 핀치 줌 및 더블 탭 줌 조작과 같은 조작을 활성화 또는 비활성화하기 위해 캐스캐이딩 스타일 시트(CSS) 규칙이 이용된다. 메커니즘은 장래에 더해지는 추가의 디폴트 행동들을 수용하도록 확장가능할 수 있다. 다양한 실시예들에서, 행동들은 전위에 선언되고, 따라서 명령 모델을 이용하는 솔루션들과 차이가 있다. 이러한 접근법의 선언적 본질은 메인 스레드로부터의 완전한 독립을 달성하고, 독립적 히트 테스트를 이용하여 올바른 응답을 정하는 것을 허용한다.
일부 실시예들은 독립적 히트 테스트 스레드 내의 추가의 처리 및/또는 로직 핸들링을 수행하는 능력을 제공한다. 일부 경우들에서, 독립적 히트 테스트 스레드는 하나 이상의 입력 시나리오를 식별하도록 구성될 수 있다. 대안적으로 또는 추가적으로, 입력 시나리오들에 대한 하나 이상의 응답 액션이 적어도 부분적으로 초기화될 수 있다. 하나 이상의 입력 시나리오로부터 명백한 입력 시나리오를 결정하면, 연관된 응답 액션이 개시되고/되거나 실행을 위해 별개의 스레드에 전달될 수 있다. 때때로, 적어도 부분적으로 초기화된 응답 액션들을 관리하는 스레드들에 응답 액션을 종료하라는 통지가 송신될 수 있다.
실시예들이 구조적 특징들 및/또는 방법론적 동작들에 특정한 언어로 설명되었지만, 첨부된 청구항들에 정의된 다양한 실시예들이 반드시 설명된 구체적 특징들 또는 동작들에 한정되는 것은 아니라는 점이 이해되어야 한다. 오히려, 구체적인 특징들 및 동작들은 다양한 실시예들을 구현하는 예시적인 형태로서 개시된다.

Claims (10)

  1. 컴퓨터 구현 방법으로서,
    독립적 히트 테스트 스레드 상에서, 제1 입력에 연관된 제1 입력 메시지를 수신하는 단계;
    상기 독립적 히트 테스트 스레드를 이용하여, 상기 제1 입력 메시지에 연관된 상기 제1 입력이 복수의 해석을 가짐을 결정하는 단계;
    상기 독립적 히트 테스트 스레드를 이용하여, 상기 복수의 해석 중 적어도 하나의 해석에 연관된 적어도 하나의 응답 액션을 초기화하는 단계;
    상기 독립적 히트 테스트 스레드를 이용하여, 제2 입력이 수신되는지를 결정하는 단계;
    상기 제2 입력이 수신된다는 결정에 응답하여, 상기 독립적 히트 테스트 스레드를 이용하여, 상기 제1 입력 및 상기 제2 입력에 적어도 부분적으로 기초하여, 상기 복수의 해석 중에서 상기 제1 입력의 명백한 해석을 결정하는 단계; 및
    상기 독립적 히트 테스트 스레드를 이용하여, 상기 명백한 해석에 연관된 응답 액션을 불러오는 단계
    를 포함하는, 컴퓨터 구현 방법.
  2. 제1항에 있어서,
    상기 독립적 히트 테스트 스레드를 이용하여, 상기 적어도 하나의 응답 액션을 종료하는 단계
    를 더 포함하는, 컴퓨터 구현 방법.
  3. 제1항에 있어서, 상기 적어도 하나의 응답 액션을 초기화하는 단계는 상기 적어도 하나의 응답 액션의 부분적 초기화를 더 포함하는, 컴퓨터 구현 방법.
  4. 제3항에 있어서, 상기 적어도 하나의 응답 액션의 부분적 초기화를 완료하는 단계를 더 포함하는, 컴퓨터 구현 방법.
  5. 제4항에 있어서, 상기 적어도 하나의 응답 액션의 부분적 초기화를 완료하는 단계는 상기 제2 입력이 미리 정의된 시간 윈도우 밖에서 수신된다는 결정에 응답하는 것인, 컴퓨터 구현 방법.
  6. 제3항에 있어서, 상기 부분적 초기화는 상기 제1 입력에 연관된 하나 이상의 요소에 하나 이상의 캐스캐이딩 스타일 시트(CSS: Cascading Style Sheet) 규칙을 적용하는 단계를 포함하는 것인, 컴퓨터 구현 방법.
  7. 제1항에 있어서,
    상기 독립적 히트 테스트 스레드를 이용하여, 상기 제1 입력에 연관된 줌 비율을 결정하는 단계를 더 포함하는, 컴퓨터 구현 방법.
  8. 프로세서 실행가능한 명령어들을 포함하는 하나 이상의 컴퓨터 판독가능한 저장 메모리로서,
    상기 프로세서 실행가능한 명령어들은 적어도 하나의 프로세서에 의한 실행에 응답하여,
    제1 입력에 연관된 제1 입력 메시지를 수신하고;
    상기 제1 입력 메시지에 연관된 상기 제1 입력이 복수의 해석을 가짐을 결정하고;
    상기 복수의 해석 중 적어도 하나의 해석에 연관된 적어도 하나의 응답 액션을 부분적으로 초기화하고;
    미리 정의된 시간 윈도우 내에서 적어도 제2 입력이 수신되는지를 결정하고;
    상기 미리 정의된 시간 윈도우 내에서 상기 적어도 제2 입력이 수신되지 않는다는 결정에 응답하여, 부분적으로 초기화된 상기 적어도 하나의 응답 액션 중 하나를 완료하고;
    상기 미리 정의된 시간 윈도우 내에서 상기 적어도 제2 입력이 수신된다는 결정에 응답하여, 상기 제1 입력 및 상기 적어도 제2 입력에 적어도 부분적으로 기초하여, 상기 제1 입력의 명백한 해석에 연관된 응답 액션을 호출하도록
    구성되는, 컴퓨터 판독가능한 저장 메모리.
  9. 제8항에 있어서, 상기 제1 입력 및 상기 적어도 제2 입력은 터치패드를 통해 수신된 입력에 연관되는 것인, 컴퓨터 판독가능한 저장 메모리.
  10. 제9항에 있어서, 상기 프로세서 실행가능한 명령어들은,
    상기 터치패드를 통해 수신된 입력에 연관된 멀티 제스쳐 입력을 식별하고;
    상기 멀티 제스쳐 입력을 식별한 것에 응답하여, 독립적 히트 테스트 스레드를 이용하여 상기 터치패드를 통해 수신된 입력의 독립적 히트 테스트를 가능하게 하도록 구성되는 제스쳐 모드로 전이하고 ;
    마우스 모드 입력 이벤트를 식별하는 것에 응답하여, 상기 제스쳐 모드로부터 마우스 모드로 전이하도록
    더 구성되고, 상기 마우스 모드 및 상기 제스쳐 모드는 상기 터치패드를 통해 수신된 입력을 다르게 해석하는 것인, 컴퓨터 판독가능한 저장 메모리.
KR1020167000683A 2013-06-14 2013-09-20 터치패드 조작 및 더블 탭 주밍을 위한 독립적 히트 테스팅 KR20160020486A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/918,547 US20140372903A1 (en) 2013-06-14 2013-06-14 Independent Hit Testing for Touchpad Manipulations and Double-Tap Zooming
US13/918,547 2013-06-14
PCT/US2013/061046 WO2014200546A1 (en) 2013-06-14 2013-09-20 Independent hit testing for touchpad manipulations and double-tap zooming

Publications (1)

Publication Number Publication Date
KR20160020486A true KR20160020486A (ko) 2016-02-23

Family

ID=49293908

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167000683A KR20160020486A (ko) 2013-06-14 2013-09-20 터치패드 조작 및 더블 탭 주밍을 위한 독립적 히트 테스팅

Country Status (11)

Country Link
US (1) US20140372903A1 (ko)
EP (1) EP3008568A1 (ko)
JP (1) JP6250151B2 (ko)
KR (1) KR20160020486A (ko)
CN (1) CN105493018A (ko)
AU (1) AU2013392041A1 (ko)
BR (1) BR112015030741A2 (ko)
CA (1) CA2915268A1 (ko)
MX (1) MX2015017170A (ko)
RU (1) RU2015153214A (ko)
WO (1) WO2014200546A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190107765A (ko) * 2016-12-30 2019-09-20 구글 엘엘씨 음성 기동 컴퓨터 네트워크 환경에서의 시퀀스 종속 데이터 메시지 통합

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8874969B2 (en) 2012-07-09 2014-10-28 Microsoft Corporation Independent hit testing
CN106164839B (zh) * 2014-02-04 2019-10-22 触觉实验室股份有限公司 以减小的等待时间提供对输入的视觉响应的方法
US10163184B2 (en) * 2016-08-17 2018-12-25 Adobe Systems Incorporated Graphics performance for complex user interfaces
CN110018917B (zh) * 2019-04-11 2023-07-28 深圳市智微智能科技股份有限公司 实现独立鼠标输入通道的方法、系统、终端及存储介质
CN116719468A (zh) * 2022-09-02 2023-09-08 荣耀终端有限公司 交互事件的处理方法及装置
CN115220853A (zh) * 2022-09-21 2022-10-21 广州市保伦电子有限公司 基于多线程的墨迹作图方法、装置、设备及存储介质

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7886236B2 (en) * 2003-03-28 2011-02-08 Microsoft Corporation Dynamic feedback for gestures
US7436535B2 (en) * 2003-10-24 2008-10-14 Microsoft Corporation Real-time inking
US7752633B1 (en) * 2005-03-14 2010-07-06 Seven Networks, Inc. Cross-platform event engine
US7577925B2 (en) * 2005-04-08 2009-08-18 Microsoft Corporation Processing for distinguishing pen gestures and dynamic self-calibration of pen-based computing systems
JP2009053986A (ja) * 2007-08-28 2009-03-12 Kyocera Mita Corp 文字入力装置、画像形成装置及び情報端末装置
US8289193B2 (en) * 2007-08-31 2012-10-16 Research In Motion Limited Mobile wireless communications device providing enhanced predictive word entry and related methods
US20090100383A1 (en) * 2007-10-16 2009-04-16 Microsoft Corporation Predictive gesturing in graphical user interface
US8526767B2 (en) * 2008-05-01 2013-09-03 Atmel Corporation Gesture recognition
US9684521B2 (en) * 2010-01-26 2017-06-20 Apple Inc. Systems having discrete and continuous gesture recognizers
WO2011061603A1 (en) * 2009-11-20 2011-05-26 Nokia Corporation Methods and apparatuses for generating and utilizing haptic style sheets
US20110126094A1 (en) * 2009-11-24 2011-05-26 Horodezky Samuel J Method of modifying commands on a touch screen user interface
US20110148786A1 (en) * 2009-12-18 2011-06-23 Synaptics Incorporated Method and apparatus for changing operating modes
US8786559B2 (en) * 2010-01-06 2014-07-22 Apple Inc. Device, method, and graphical user interface for manipulating tables using multi-contact gestures
US8589950B2 (en) * 2011-01-05 2013-11-19 Blackberry Limited Processing user input events in a web browser
US9069459B2 (en) * 2011-05-03 2015-06-30 Microsoft Technology Licensing, Llc Multi-threaded conditional processing of user interactions for gesture processing using rendering thread or gesture processing thread based on threshold latency
US20130067314A1 (en) * 2011-09-10 2013-03-14 Microsoft Corporation Batch Document Formatting and Layout on Display Refresh
WO2013170383A1 (en) * 2012-05-16 2013-11-21 Xtreme Interactions Inc. System, device and method for processing interlaced multimodal user input
US9286081B2 (en) * 2012-06-12 2016-03-15 Apple Inc. Input device event processing
US9977683B2 (en) * 2012-12-14 2018-05-22 Facebook, Inc. De-coupling user interface software object input from output

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190107765A (ko) * 2016-12-30 2019-09-20 구글 엘엘씨 음성 기동 컴퓨터 네트워크 환경에서의 시퀀스 종속 데이터 메시지 통합

Also Published As

Publication number Publication date
JP6250151B2 (ja) 2017-12-20
CA2915268A1 (en) 2014-12-18
AU2013392041A1 (en) 2015-12-17
CN105493018A (zh) 2016-04-13
US20140372903A1 (en) 2014-12-18
MX2015017170A (es) 2016-10-21
JP2016531335A (ja) 2016-10-06
RU2015153214A (ru) 2017-06-16
EP3008568A1 (en) 2016-04-20
WO2014200546A1 (en) 2014-12-18
BR112015030741A2 (pt) 2017-07-25

Similar Documents

Publication Publication Date Title
US10496268B2 (en) Content transfer to non-running targets
US10191633B2 (en) Closing applications
JP6250151B2 (ja) タッチパッド操作およびダブルタップ・ズーミングに対する独立ヒット・テスト
US10055388B2 (en) Declarative style rules for default touch behaviors
KR101278346B1 (ko) 이벤트 인식
US10762277B2 (en) Optimization schemes for controlling user interfaces through gesture or touch
CN109857303B (zh) 交互控制方法及装置
KR20180030603A (ko) 세기에 기초하여 터치 입력을 프로세싱하기 위한 디바이스 및 방법
US9383908B2 (en) Independent hit testing
CN105474160A (zh) 高性能触摸拖放
KR20140039209A (ko) 빠른 사이트 액세스 사용자 인터페이스를 갖춘 웹 브라우저
JP2016502200A (ja) スワイプジェスチャ認識技術を使用したコンテンツ操作
US20130176344A1 (en) Input Pointer Delay and Zoom Logic
JP2014523056A (ja) オンデマンドタブ回復
JP2015503804A (ja) 入力ポインタの遅滞
US20180088767A1 (en) View Activation via Hit Testing in an Asynchronous Windowing System
CN107562346A (zh) 终端控制方法、装置、终端及计算机可读存储介质
KR102225476B1 (ko) 임베디드 웹 콘텐츠 실행의 애플리케이션 제어
JP6175682B2 (ja) 効率的なカスケードオペレーションの実現
US20200150851A1 (en) Recognizing user interface element selection

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid