1197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// found in the LICENSE file.
4197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
5197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#ifndef MouseEventHitRegion_h
6197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#define MouseEventHitRegion_h
7197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
8197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/events/MouseEvent.h"
9197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/html/HTMLCanvasElement.h"
10197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/html/canvas/CanvasRenderingContext.h"
11197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/html/canvas/CanvasRenderingContext2D.h"
12197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
14197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
15197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass MouseEventHitRegion {
16197021e6b966cfb06891637935ef33fff06433d1Ben Murdochpublic:
17197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    static String region(MouseEvent& event)
18197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    {
19197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (!event.target() || !isHTMLCanvasElement(event.target()->toNode()))
20197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            return String();
21197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
22197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        HTMLCanvasElement* canvas = toHTMLCanvasElement(event.target()->toNode());
23197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        CanvasRenderingContext* context = canvas->renderingContext();
24197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (!context || !context->is2d())
25197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            return String();
26197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
27197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        HitRegion* hitRegion = toCanvasRenderingContext2D(context)->
28197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            hitRegionAtPoint(LayoutPoint(event.offsetX(), event.offsetY()));
29197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
30197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (!hitRegion)
31197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            return String();
32197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        String id = hitRegion->id();
34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (id.isEmpty())
35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            return String();
36197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
37197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return id;
38197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    }
39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch};
40197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
42197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
43197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif
44