diff options
| author | Yuri Kobets <yuri.kobets@gmail.com> | 2023-06-07 02:52:59 +0300 |
|---|---|---|
| committer | Yuri Kobets <yuri.kobets@gmail.com> | 2023-06-07 02:52:59 +0300 |
| commit | 7ec04267b170160c995cc2e8986baba8e577dd99 (patch) | |
| tree | 9046f9a6fd6739be229e2294ecd42ad840cf4648 /src/render_block.cpp | |
| parent | b0a6930308e9381d68ab86bdbfb59a6ae2f217d8 (diff) | |
Fixed calculating min with for elements with floats
Fixes issue #99
Diffstat (limited to 'src/render_block.cpp')
| -rw-r--r-- | src/render_block.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/render_block.cpp b/src/render_block.cpp index 6faafba0..3c5dbdb8 100644 --- a/src/render_block.cpp +++ b/src/render_block.cpp @@ -21,13 +21,14 @@ int litehtml::render_item_block::place_float(const std::shared_ptr<render_item> { if(el->right() > line_right) { - int new_top = fmt_ctx->find_next_line_top(el->top(), el->width(), self_size.render_width); - el->pos().x = fmt_ctx->get_line_left(new_top) + el->content_offset_left(); - el->pos().y = new_top + el->content_offset_top(); + line_top = fmt_ctx->find_next_line_top(el->top(), el->width(), self_size.render_width); + el->pos().x = fmt_ctx->get_line_left(line_top) + el->content_offset_left(); + el->pos().y = line_top + el->content_offset_top(); } fmt_ctx->add_float(el, min_rendered_width, self_size.context_idx); fix_line_width(float_left, self_size, fmt_ctx); - ret_width = el->right(); + + ret_width = fmt_ctx->find_min_left(line_top, self_size.context_idx); } else if (el->src_el()->css().get_float() == float_right) { if(line_left + el->width() > line_right) @@ -41,11 +42,8 @@ int litehtml::render_item_block::place_float(const std::shared_ptr<render_item> } fmt_ctx->add_float(el, min_rendered_width, self_size.context_idx); fix_line_width(float_right, self_size, fmt_ctx); - line_left = 0; - line_right = self_size.render_width; - fmt_ctx->get_line_left_right(line_top, self_size.render_width, line_left, line_right); - - ret_width = ret_width + (self_size.render_width - line_right); + line_right = fmt_ctx->find_min_right(line_top, self_size.render_width, self_size.context_idx); + ret_width = self_size.render_width - line_right; } return ret_width; } @@ -257,7 +255,10 @@ int litehtml::render_item_block::_render(int x, int y, const containing_block_co // Set block height if (self_size.height.type != containing_block_context::cbc_value_type_auto) { - m_pos.height = self_size.height; + if(self_size.height > 0) + { + m_pos.height = self_size.height; + } if(src_el()->css().get_box_sizing() == box_sizing_border_box) { m_pos.height -= box_sizing_height(); |
