Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion include/litehtml/line_box.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ namespace litehtml
virtual pixel_t left() const;
virtual element_type get_type() const { return type_text_part; }
virtual pixel_t get_rendered_min_width() const { return m_rendered_min_width; }
virtual void set_rendered_min_width(pixel_t min_width) { m_rendered_min_width = min_width; }
virtual void set_rendered_min_width(pixel_t min_width) { m_rendered_min_width = min_width; }
virtual void y_shift(pixel_t shift);

void reset_items_height() { m_items_top = m_items_bottom = 0; }
void add_item_height(pixel_t item_top, pixel_t item_bottom)
Expand Down Expand Up @@ -101,6 +102,7 @@ namespace litehtml
pixel_t right() const override;
pixel_t left() const override;
element_type get_type() const override { return type_inline_end; }
void y_shift(pixel_t) override {}
};

class lbi_continue : public lbi_start
Expand Down
12 changes: 12 additions & 0 deletions include/litehtml/render_inline.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define LITEHTML_RENDER_INLINE_H

#include "render_item.h"
#include "types.h"

namespace litehtml
{
Expand Down Expand Up @@ -31,6 +32,17 @@ namespace litehtml
{
return std::make_shared<render_item_inline>(src_el());
}
virtual void y_shift(pixel_t shift) override
{
if(css().get_display() == display_inline_text)
{
render_item::y_shift(shift);
}
for(auto& box : m_boxes)
{
box.y += shift;
}
}
};
}

Expand Down
3 changes: 2 additions & 1 deletion include/litehtml/render_item.h
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,8 @@ namespace litehtml
std::shared_ptr<element> get_element_by_point(pixel_t x, pixel_t y, pixel_t client_x, pixel_t client_y);
bool is_point_inside( pixel_t x, pixel_t y );
void dump(litehtml::dumper& cout);
position get_placement() const;
position get_placement() const;
virtual void y_shift(pixel_t shift);
/**
* Returns the boxes of rendering element. All coordinates are absolute
*
Expand Down
13 changes: 9 additions & 4 deletions src/line_box.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ litehtml::pixel_t litehtml::line_box_item::height() const
return m_element->height();
}

void litehtml::line_box_item::y_shift(pixel_t shift)
{
m_element->y_shift(shift);
}

//////////////////////////////////////////////////////////////////////////////////////////

litehtml::lbi_start::lbi_start(const std::shared_ptr<render_item>& element) : line_box_item(element)
Expand Down Expand Up @@ -820,10 +825,10 @@ litehtml::pixel_t litehtml::line_box::bottom_margin() const
void litehtml::line_box::y_shift( pixel_t shift )
{
m_top += shift;
for (auto& el : m_items)
{
el->pos().y += shift;
}
for (auto& el : m_items)
{
el->y_shift(shift);
}
}

bool litehtml::line_box::is_break_only() const
Expand Down
5 changes: 5 additions & 0 deletions src/render_item.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1360,3 +1360,8 @@ std::tuple<litehtml::pixel_t, litehtml::pixel_t> litehtml::render_item::element_

return {offset_x, offset_y};
}

void litehtml::render_item::y_shift(pixel_t delta)
{
m_pos.y += delta;
}