15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Copyright (C) 2007 Rob Buis <buis@kde.org>
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    This library is free software; you can redistribute it and/or
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    modify it under the terms of the GNU Library General Public
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    License as published by the Free Software Foundation; either
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    version 2 of the License, or (at your option) any later version.
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    This library is distributed in the hope that it will be useful,
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    but WITHOUT ANY WARRANTY; without even the implied warranty of
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Library General Public License for more details.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    You should have received a copy of the GNU Library General Public License
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    aint with this library; see the file COPYING.LIB.  If not, write to
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Boston, MA 02110-1301, USA.
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)*/
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
2153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/PointerEventsHitRules.h"
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
23c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PointerEventsHitRules::PointerEventsHitRules(EHitTesting hitTesting, const HitTestRequest& request, EPointerEvents pointerEvents)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : requireVisible(false)
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , requireFill(false)
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , requireStroke(false)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , canHitStroke(false)
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , canHitFill(false)
31a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    , canHitBoundingBox(false)
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (request.svgClipContent())
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        pointerEvents = PE_FILL;
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    if (hitTesting == SVG_GEOMETRY_HITTESTING) {
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        switch (pointerEvents)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
39a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            case PE_BOUNDINGBOX:
40a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                canHitBoundingBox = true;
41a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                break;
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_VISIBLE_PAINTED:
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_AUTO: // "auto" is like "visiblePainted" when in SVG content
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireFill = true;
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireStroke = true;
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_VISIBLE:
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireVisible = true;
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitFill = true;
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitStroke = true;
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_VISIBLE_FILL:
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireVisible = true;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitFill = true;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_VISIBLE_STROKE:
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireVisible = true;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitStroke = true;
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_PAINTED:
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireFill = true;
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireStroke = true;
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_ALL:
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitFill = true;
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitStroke = true;
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_FILL:
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitFill = true;
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_STROKE:
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitStroke = true;
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_NONE:
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                // nothing to do here, defaults are all false.
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    } else {
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        switch (pointerEvents)
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
79a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            case PE_BOUNDINGBOX:
80a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                canHitBoundingBox = true;
81a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                break;
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_VISIBLE_PAINTED:
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_AUTO: // "auto" is like "visiblePainted" when in SVG content
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireVisible = true;
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireFill = true;
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireStroke = true;
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitFill = true;
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitStroke = true;
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_VISIBLE_FILL:
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_VISIBLE_STROKE:
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_VISIBLE:
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireVisible = true;
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitFill = true;
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitStroke = true;
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_PAINTED:
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireFill = true;
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                requireStroke = true;
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitFill = true;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitStroke = true;
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_FILL:
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_STROKE:
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_ALL:
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitFill = true;
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                canHitStroke = true;
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            case PE_NONE:
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                // nothing to do here, defaults are all false.
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                break;
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// vim:ts=4:noet
119