Mercurial > dillo_port1.3
annotate src/styleengine.hh @ 990:36d9fee90159
whitespace
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> |
---|---|
date | Mon, 09 Mar 2009 22:16:21 +0100 |
parents | d04d960da3f4 |
children | 474b9814a8fa |
rev | line source |
---|---|
497
96713a0f5d8b
css.[ch][ch] -> styleengine.[ch][ch]
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
495
diff
changeset
|
1 #ifndef __STYLEENGINE_HH__ |
96713a0f5d8b
css.[ch][ch] -> styleengine.[ch][ch]
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
495
diff
changeset
|
2 #define __STYLEENGINE_HH__ |
493 | 3 |
4 #include "dw/core.hh" | |
501 | 5 #include "doctree.hh" |
506
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
6 #include "css.hh" |
643
eb0279297fde
hook up <style>...</style> parsing
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
631
diff
changeset
|
7 #include "cssparser.hh" |
493 | 8 |
503
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
9 class StyleEngine : public Doctree { |
493 | 10 private: |
503
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
11 class Node : public DoctreeNode { |
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
12 public: |
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
13 dw::core::style::Style *style; |
644
9e4ad941cbdc
add wordStyle() method to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
643
diff
changeset
|
14 dw::core::style::Style *wordStyle; |
509
fd2454cd0120
pass Layout to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
506
diff
changeset
|
15 const char *styleAttribute; |
615
d0694361ecd0
add workaround for table row coloring
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
598
diff
changeset
|
16 bool inheritBackgroundColor; |
503
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
17 }; |
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
18 |
509
fd2454cd0120
pass Layout to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
506
diff
changeset
|
19 dw::core::Layout *layout; |
503
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
20 lout::misc::SimpleVector <Node> *stack; |
509
fd2454cd0120
pass Layout to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
506
diff
changeset
|
21 CssContext *cssContext; |
763
df8153796f48
initial implementation of a CSS selector matching optimization
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
713
diff
changeset
|
22 int num; |
493 | 23 |
590
eb1072890045
setNonCssProperties() -> setNonCssHints()
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
589
diff
changeset
|
24 dw::core::style::Style *style0 (CssPropertyList *nonCssHints = NULL); |
644
9e4ad941cbdc
add wordStyle() method to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
643
diff
changeset
|
25 dw::core::style::Style *wordStyle0 (CssPropertyList *nonCssHints = NULL); |
509
fd2454cd0120
pass Layout to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
506
diff
changeset
|
26 void apply (dw::core::style::StyleAttrs *attrs, CssPropertyList *props); |
693
478dfc078e12
make StyleEngine::computeValue() and computeLength() return bool
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
679
diff
changeset
|
27 bool computeValue (int *dest, CssLength value, dw::core::style::Font *font); |
478dfc078e12
make StyleEngine::computeValue() and computeLength() return bool
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
679
diff
changeset
|
28 bool computeValue (int *dest, CssLength value, dw::core::style::Font *font, |
990 | 29 int percentageBase); |
30 bool computeLength (dw::core::style::Length *dest, CssLength value, | |
31 dw::core::style::Font *font); | |
506
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
32 |
493 | 33 public: |
509
fd2454cd0120
pass Layout to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
506
diff
changeset
|
34 StyleEngine (dw::core::Layout *layout); |
493 | 35 ~StyleEngine (); |
930
b277eed3119c
whitespace cleanup: 's/ +$//g'
Jorge Arellano Cid <jcid@dillo.org>
parents:
901
diff
changeset
|
36 |
503
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
37 /* Doctree interface */ |
506
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
38 inline const DoctreeNode *top () { |
503
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
39 return stack->getRef (stack->size () - 1); |
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
40 }; |
506
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
41 |
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
42 inline const DoctreeNode *parent (const DoctreeNode *n) { |
631
4c9f7f03caf0
fix DocTree implementation in StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
615
diff
changeset
|
43 if (n->depth > 1) |
503
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
44 return stack->getRef (n->depth - 1); |
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
45 else |
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
46 return NULL; |
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
47 }; |
493 | 48 |
895
816f3c5f9286
remove unused order_count parameter
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
763
diff
changeset
|
49 void parse (const char *buf, int buflen, CssOrigin origin); |
598
4ff90b6242f9
fix id, class, style attribute handling
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
590
diff
changeset
|
50 void startElement (int tag); |
982
d04d960da3f4
remove bg_color dillorc option
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
956
diff
changeset
|
51 void startElement (const char *tagname); |
598
4ff90b6242f9
fix id, class, style attribute handling
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
590
diff
changeset
|
52 void setId (const char *id); |
901
f44e88b06200
fix check for name/id mismatch (noticed by corvid)
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
895
diff
changeset
|
53 const char * getId () { return top ()->id; }; |
598
4ff90b6242f9
fix id, class, style attribute handling
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
590
diff
changeset
|
54 void setClass (const char *klass); |
4ff90b6242f9
fix id, class, style attribute handling
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
590
diff
changeset
|
55 void setStyle (const char *style); |
495 | 56 void endElement (int tag); |
679
14ce954d98c0
inherit pseudo classes "link" and "visited"
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
664
diff
changeset
|
57 void setPseudoLink (); |
14ce954d98c0
inherit pseudo classes "link" and "visited"
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
664
diff
changeset
|
58 void setPseudoVisited (); |
590
eb1072890045
setNonCssProperties() -> setNonCssHints()
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
589
diff
changeset
|
59 void setNonCssHints (CssPropertyList *nonCssHints); |
664
109eaf60aea2
add comment about inheritBackgroundColor()
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
659
diff
changeset
|
60 void inheritBackgroundColor (); /* \todo get rid of this somehow */ |
956
dd46fa6ceb94
fix missing background color for ComplexButton (noticed by corvid)
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
930
diff
changeset
|
61 dw::core::style::Style *backgroundStyle (); |
503
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
62 |
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
63 inline dw::core::style::Style *style () { |
506
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
64 dw::core::style::Style *s = stack->getRef (stack->size () - 1)->style; |
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
65 if (s) |
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
66 return s; |
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
67 else |
03de2284bfa6
switch to original enum names from dillo-0.8.0-css-3
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
503
diff
changeset
|
68 return style0 (); |
503
00b31843839b
implement various apply() methods
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
501
diff
changeset
|
69 }; |
990 | 70 |
644
9e4ad941cbdc
add wordStyle() method to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
643
diff
changeset
|
71 inline dw::core::style::Style *wordStyle () { |
9e4ad941cbdc
add wordStyle() method to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
643
diff
changeset
|
72 dw::core::style::Style *s = stack->getRef (stack->size () - 1)->wordStyle; |
9e4ad941cbdc
add wordStyle() method to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
643
diff
changeset
|
73 if (s) |
9e4ad941cbdc
add wordStyle() method to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
643
diff
changeset
|
74 return s; |
9e4ad941cbdc
add wordStyle() method to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
643
diff
changeset
|
75 else |
9e4ad941cbdc
add wordStyle() method to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
643
diff
changeset
|
76 return wordStyle0 (); |
9e4ad941cbdc
add wordStyle() method to StyleEngine
Johannes Hofmann <Johannes.Hofmann@gmx.de>
parents:
643
diff
changeset
|
77 }; |
493 | 78 }; |
79 | |
80 #endif |