Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e8dc2ed

Browse filesBrowse files
committed
update scrollbars position on widget size change
1 parent 7cfd0a7 commit e8dc2ed
Copy full SHA for e8dc2ed

File tree

Expand file treeCollapse file tree

2 files changed

+30
-5
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+30
-5
lines changed

‎src/widget/html_widget.cpp

Copy file name to clipboardExpand all lines: src/widget/html_widget.cpp
+28-5Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,19 @@ void html_widget::size_allocate_vfunc(int width, int height, int /* baseline */)
424424

425425
void html_widget::allocate_scrollbars(int width, int height)
426426
{
427+
m_do_force_redraw_on_adjustment = false;
428+
m_hadjustment->set_page_size(width);
429+
m_vadjustment->set_page_size(height);
430+
if(m_vadjustment->get_value() > m_vadjustment->get_upper() - m_vadjustment->get_page_size())
431+
{
432+
m_vadjustment->set_value(m_vadjustment->get_upper() - m_vadjustment->get_page_size());
433+
}
434+
if(m_hadjustment->get_value() > m_hadjustment->get_upper() - m_hadjustment->get_page_size())
435+
{
436+
m_hadjustment->set_value(m_hadjustment->get_upper() - m_hadjustment->get_page_size());
437+
}
438+
m_do_force_redraw_on_adjustment = true;
439+
427440
int minimum = 0, natural = 0, m_baseline = 0, n_baseline = 0;
428441

429442
m_vscrollbar->measure(Gtk::Orientation::HORIZONTAL, -1, minimum, natural, m_baseline, n_baseline);
@@ -434,25 +447,35 @@ void html_widget::allocate_scrollbars(int width, int height)
434447
m_hscrollbar->measure(Gtk::Orientation::VERTICAL, -1, minimum, natural, m_baseline, n_baseline);
435448
Gtk::Allocation hscrollbar_allocation(0, height - natural, width, natural);
436449
m_hscrollbar->size_allocate(hscrollbar_allocation, -1);
437-
438-
m_hadjustment->set_page_size(width);
439-
m_vadjustment->set_page_size(height);
440450
}
441451

442452
void html_widget::on_vadjustment_changed()
443453
{
444454
m_draw_buffer.on_scroll( current_page(),
445455
(int) m_hadjustment->get_value(),
446456
(int) m_vadjustment->get_value());
447-
force_redraw();
457+
458+
if(m_do_force_redraw_on_adjustment)
459+
{
460+
force_redraw();
461+
} else
462+
{
463+
queue_draw();
464+
}
448465
}
449466

450467
void html_widget::on_hadjustment_changed()
451468
{
452469
m_draw_buffer.on_scroll( current_page(),
453470
(int) m_hadjustment->get_value(),
454471
(int) m_vadjustment->get_value());
455-
force_redraw();
472+
if(m_do_force_redraw_on_adjustment)
473+
{
474+
force_redraw();
475+
} else
476+
{
477+
queue_draw();
478+
}
456479
}
457480

458481
void html_widget::on_adjustments_changed()

‎src/widget/html_widget.h

Copy file name to clipboardExpand all lines: src/widget/html_widget.h
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ enum page_state
1414
page_state_downloading = 0x04,
1515
};
1616

17+
/// @brief Allows perform actions in the GUI thread via notifications
1718
class html_widget_notifier : public litebrowser::browser_notify_interface
1819
{
1920
public:
@@ -493,6 +494,7 @@ class html_widget : public Gtk::Widget,
493494
{
494495
int m_rendered_width = 0;
495496
int m_rendered_height = 0;
497+
bool m_do_force_redraw_on_adjustment = true;
496498
std::mutex m_page_mutex;
497499
std::shared_ptr<litebrowser::web_page> m_current_page;
498500
std::shared_ptr<litebrowser::web_page> m_next_page;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.