diff options
author | bptato <nincsnevem662@gmail.com> | 2022-01-19 18:12:02 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2022-01-19 18:21:33 +0100 |
commit | bcaaf4e6b68ce1245558bc41559116a7a3296904 (patch) | |
tree | c6d97036f0bd553802917e17a2baf86e67a27d43 /src | |
parent | 0c0aa01a19d5dfb86562650c200cdc8c4b216fa0 (diff) | |
download | chawan-bcaaf4e6b68ce1245558bc41559116a7a3296904.tar.gz |
Re-implement inline blocks
Diffstat (limited to 'src')
-rw-r--r-- | src/css/cascade.nim | 6 | ||||
-rw-r--r-- | src/layout/box.nim | 5 | ||||
-rw-r--r-- | src/layout/engine.nim | 80 | ||||
-rw-r--r-- | src/render/renderdocument.nim | 5 |
4 files changed, 62 insertions, 34 deletions
diff --git a/src/css/cascade.nim b/src/css/cascade.nim index 3f85bfd8..fcec96d6 100644 --- a/src/css/cascade.nim +++ b/src/css/cascade.nim @@ -100,17 +100,13 @@ func calcRules(elem: Element, rules: CSSStylesheet): RuleList = #TODO couldn't these two procedures be merged? proc applyNormal(ares: var ApplyResult, decls: seq[CSSDeclaration]) = for decl in decls: - if decl.important: - ares.important.add(decl) - else: + if not decl.important: ares.normal.add(decl) proc applyImportant(ares: var ApplyResult, decls: seq[CSSDeclaration]) = for decl in decls: if decl.important: ares.important.add(decl) - else: - ares.normal.add(decl) proc applyRules(element: Element, ua, user, author: RuleList, pseudo: PseudoElem) = var ares: ApplyResult diff --git a/src/layout/box.nim b/src/layout/box.nim index 74e97c97..44e423ba 100644 --- a/src/layout/box.nim +++ b/src/layout/box.nim @@ -25,6 +25,7 @@ type InlineAtom* = ref object of RootObj relx*: int width*: int + height*: int InlineWord* = ref object of InlineAtom str*: string @@ -53,7 +54,6 @@ type maxwidth*: int BlockContext* = ref object of InlineAtom - height*: int margin_done*: int margin_todo*: int inline*: InlineContext @@ -84,6 +84,7 @@ type newline*: bool BlockBox* = ref object of CSSBox bctx*: BlockContext - InlineBlockBox* = ref object of CSSBox + InlineBlockBox* = ref object of BlockBox + ictx*: InlineContext ListItemBox* = ref object of CSSBox diff --git a/src/layout/engine.nim b/src/layout/engine.nim index 417d5d2c..562c5b4e 100644 --- a/src/layout/engine.nim +++ b/src/layout/engine.nim @@ -515,15 +515,20 @@ proc newWord(state: var InlineState) = word.nodes = state.nodes state.word = word +proc addAtom(row: InlineRow, atom: InlineAtom) = + atom.relx = row.width + row.width += atom.width + row.height = max(row.height, atom.height) + row.atoms.add(atom) + proc addWord(state: var InlineState) = if state.word.str != "": let row = state.ictx.thisrow var word = state.word - word.relx = state.ictx.thisrow.width - row.width += word.width - if row.height == 0: #first word => higher than 0 - row.height = 1 - row.atoms.add(word) + # Note, this should technically be set as soon as word has one letter but + # in practice this doesn't matter. + word.height = 1 + row.addAtom(word) state.newWord() proc finishRow(iass="o">="#ffffff">ranger</font></a>.ext</strong></big></big></font></td ><td align=right valign=bottom ><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/home/hut/ranger/ranger/ext/__init__.py">/home/hut/ranger/ranger/ext/__init__.py</a></font></td></tr></table> <p><tt>This package includes extensions with broader usability</tt></p> <p> <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section"> <tr bgcolor="#aa55cc"> <td colspan=3 valign=bottom> <br> <font color="#ffffff" face="helvetica, arial"><big><strong>Package Contents</strong></big></font></td></tr> <tr><td bgcolor="#aa55cc"><tt> </tt></td><td> </td> <td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="ranger.ext.accumulator.html">accumulator</a><br> <a href="ranger.ext.command_parser.html">command_parser</a><br> <a href="ranger.ext.curses_interrupt_handler.html">curses_interrupt_handler</a><br> <a href="ranger.ext.get_all_modules.html">get_all_modules</a><br> </td><td width="25%" valign=top><a href="ranger.ext.get_executables.html">get_executables</a><br> <a href="ranger.ext.human_readable.html">human_readable</a><br> <a href="ranger.ext.iter_tools.html">iter_tools</a><br> <a href="ranger.ext.mount_path.html">mount_path</a><br> </td><td width="25%" valign=top><a href="ranger.ext.move.html">move</a><br> <a href="ranger.ext.openstruct.html">openstruct</a><br> <a href="ranger.ext.shell_escape.html">shell_escape</a><br> <a href="ranger.ext.shutil_generatorized.html">shutil_generatorized</a><br> </td><td width="25%" valign=top><a href="ranger.ext.signal_dispatcher.html">signal_dispatcher</a><br> <a href="ranger.ext.waitpid_no_intr.html">waitpid_no_intr</a><br> </td></tr></table></td></tr></table> </body></html> |