KHtml

dom_restyler.cpp
1 /*
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 2006 Allan Sandfeld Jensen ([email protected])
5  * (C) 2009 Vyacheslav Tokarev ([email protected])
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB. If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23 
24 #include "dom_restyler.h"
25 
26 namespace khtml
27 {
28 
29 DynamicDomRestyler::DynamicDomRestyler()
30 {
31 }
32 
33 void DynamicDomRestyler::addDependency(ElementImpl *subject, ElementImpl *dependency, StructuralDependencyType type)
34 {
35  assert(type < LastStructuralDependency);
36  if (subject == dependency && type == HoverDependency) {
37  subject->setHasHoverDependency(true);
38  return;
39  }
40 
41  dependency_map[type].add(dependency, subject);
42  reverse_map.add(subject, dependency);
43 }
44 
45 void DynamicDomRestyler::resetDependencies(ElementImpl *subject)
46 {
47  subject->setHasHoverDependency(false);
48 
49  ElementMap::ElementsList list;
50  reverse_map.getElements(subject, list);
51  if (list.isEmpty()) {
52  return;
53  }
54  for (int i = 0; i < list.size(); ++i)
55  for (int type = 0; type < LastStructuralDependency; ++type) {
56  dependency_map[type].remove(list[i], subject);
57  }
58  reverse_map.remove(subject);
59 }
60 
61 void DynamicDomRestyler::restyleDependent(ElementImpl *dependency, StructuralDependencyType type)
62 {
63  assert(type < LastStructuralDependency);
64  if (type == HoverDependency && dependency->hasHoverDependency()) {
65  dependency->setChanged(true);
66  }
67 
68  ElementMap::ElementsList list;
69  dependency_map[type].getElements(dependency, list);
70  for (int i = 0; i < list.size(); ++i) {
71  list[i]->setChanged(true);
72  }
73 }
74 
75 void DynamicDomRestyler::dumpStats() const
76 {
77  /*
78  // qCDebug(KHTML_LOG) << "Keys in structural dependencies: " << dependency_map[StructuralDependency].size();
79  // qCDebug(KHTML_LOG) << "Keys in attribute dependencies: " << dependency_map[AttributeDependency].size();
80 
81  // qCDebug(KHTML_LOG) << "Keys in reverse map: " << reverse_map.size();
82  */
83 }
84 
85 void DynamicDomRestyler::addDependency(uint attrID, AttributeDependencyType type)
86 {
87  assert(type < LastAttributeDependency);
88 
89  unsigned int hash = (attrID * 257) % 512;
90  attribute_map[type][hash] = true;
91 }
92 
93 bool DynamicDomRestyler::checkDependency(uint attrID, AttributeDependencyType type)
94 {
95  assert(type < LastAttributeDependency);
96 
97  unsigned int hash = (attrID * 257) % 512;
98  // ### gives false positives, but that's okay.
99  return attribute_map[type][hash];
100 }
101 
102 } // namespace
This file is part of the HTML rendering engine for KDE.
KIOFILEWIDGETS_EXPORT QStringList list(const QString &fileClass)
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Tue Oct 19 2021 22:47:59 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.