gint clear_images(gint desired_size);
void add_image_to_cache(const gchar *url, GdkPixbuf *image);
- virtual void redraw(gboolean force_render) = 0;
+ virtual void rerender() = 0;
virtual GdkPixbuf *get_local_image(const litehtml::tstring url) const = 0;
protected:
{
GtkWidget *item;
+ m_force_render = false;
+
/* scrolled window */
m_scrolled_window = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(m_scrolled_window),
lh_widget_statusbar_pop();
}
+void lh_widget::rerender()
+{
+ m_force_render = true;
+ gtk_widget_queue_draw(m_drawing_area);
+}
+
void lh_widget::draw(cairo_t *cr)
{
double x1, x2, y1, y2;
m_html->draw((litehtml::uint_ptr)cr, 0, 0, &pos);
}
-void lh_widget::redraw(gboolean force_render)
+void lh_widget::redraw()
{
GtkAllocation rect;
gint width;
m_height = rect.height;
/* If the available width has changed, rerender the HTML content. */
- if (m_rendered_width != width || force_render) {
+ if (m_rendered_width != width || std::atomic_exchange(&m_force_render, false)) {
debug_print("lh_widget::redraw: width changed: %d != %d\n",
m_rendered_width, width);
gpointer user_data)
{
lh_widget *w = (lh_widget *)user_data;
- w->redraw(FALSE);
+ w->redraw();
return FALSE;
}
#include <gtk/gtk.h>
#include <glib.h>
#include <gio/gio.h>
+#include <atomic>
#include "procmime.h"
void draw_text(litehtml::uint_ptr hdc, const litehtml::tchar_t* text, litehtml::uint_ptr hFont, litehtml::web_color color, const litehtml::position& pos);
void draw(cairo_t *cr);
- void redraw(gboolean force_render);
+ void rerender();
+ void redraw();
void open_html(const gchar *contents);
void clear();
void update_cursor(const litehtml::tchar_t* cursor);
litehtml::tchar_t *m_font_name;
int m_font_size;
+ std::atomic<bool> m_force_render;
};