mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
finally fixed PAINT problem
This commit is contained in:
parent
d8e4b34c93
commit
bb5393bae1
2 changed files with 19 additions and 15 deletions
|
|
@ -197,6 +197,7 @@ Vector<int> GetPropertyInts(GdkWindow *w, const char *property);
|
|||
String bar_css_class; \
|
||||
Color bar_color; \
|
||||
int bar_cy; \
|
||||
bool draw_after_configure = false; \
|
||||
|
||||
#define GUIPLATFORM_CTRL_DECLS_INCLUDE <CtrlCore/GtkCtrl.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
namespace Upp {
|
||||
|
||||
#define LLOG(x) // DLOG(x)
|
||||
// #define LOG_EVENTS _DBG_
|
||||
#define LOG_EVENTS _DBG_
|
||||
|
||||
BiVector<Ctrl::GEvent> Ctrl::Events;
|
||||
|
||||
|
|
@ -121,10 +121,13 @@ gboolean Ctrl::GtkDraw(GtkWidget *widget, cairo_t *cr, gpointer user_data)
|
|||
p->fullrefresh = false;
|
||||
|
||||
cairo_scale(cr, 1.0 / scale, 1.0 / scale); // cancel scaling to be pixel perfect
|
||||
|
||||
// TODO: this makes it slow(er)
|
||||
p->InvalidateScreenRect(); // for some reason Draw seems to be sent sooner than CONFIGURE (?)
|
||||
p->SyncWndRect(); // try to avoid black areas when resizing
|
||||
|
||||
Top *top = p->GetTop();
|
||||
if(top && top->draw_after_configure) {
|
||||
p->InvalidateScreenRect();
|
||||
top->draw_after_configure = false;
|
||||
}
|
||||
p->SyncWndRect();
|
||||
|
||||
SystemDraw w(cr);
|
||||
painting = true;
|
||||
|
|
@ -144,7 +147,6 @@ gboolean Ctrl::GtkDraw(GtkWidget *widget, cairo_t *cr, gpointer user_data)
|
|||
}
|
||||
cairo_rectangle_list_destroy(list);
|
||||
|
||||
Top *top = p->GetTop();
|
||||
TopWindow *tw = dynamic_cast<TopWindow *>(p);
|
||||
if(top && tw && top->header_area && widget != top->header_area) {
|
||||
int h = tw->GetCustomTitleBarMetrics().height;
|
||||
|
|
@ -181,6 +183,7 @@ gboolean Ctrl::TopGtkEvent(GtkWidget *widget, GdkEvent *event, gpointer user_dat
|
|||
LOG(rmsecs() << " TOP FETCH EVENT " << ev);
|
||||
#endif
|
||||
Ctrl *p = GetTopCtrlFromId(user_data);
|
||||
Top *top = p ? p->GetTop() : nullptr;
|
||||
TopWindow *tw = dynamic_cast<TopWindow *>(p);
|
||||
switch(event->type) {
|
||||
case GDK_SETTING:
|
||||
|
|
@ -192,6 +195,8 @@ gboolean Ctrl::TopGtkEvent(GtkWidget *widget, GdkEvent *event, gpointer user_dat
|
|||
// case GDK_EXPOSE:
|
||||
if(p)
|
||||
p->InvalidateScreenRect();
|
||||
if(top)
|
||||
top->draw_after_configure = true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -206,6 +211,7 @@ gboolean Ctrl::GtkEvent(GtkWidget *widget, GdkEvent *event, gpointer user_data)
|
|||
bool retval = true;
|
||||
Value value;
|
||||
Ctrl *p = GetTopCtrlFromId(user_data);
|
||||
Top *top = p ? p->GetTop() : nullptr;
|
||||
#ifdef LOG_EVENTS
|
||||
String ev = "? " + AsString((int)event->type);
|
||||
Tuple2<int, const char *> *f = FindTuple(xEvent, __countof(xEvent), event->type);
|
||||
|
|
@ -280,19 +286,16 @@ gboolean Ctrl::GtkEvent(GtkWidget *widget, GdkEvent *event, gpointer user_data)
|
|||
case GDK_KEY_RELEASE:
|
||||
key = (GdkEventKey *)event;
|
||||
value << (int) key->keyval << (int) key->hardware_keycode;
|
||||
if(pressed) {
|
||||
p = GetTopCtrlFromId(user_data);
|
||||
if(p) {
|
||||
Top *top = p->GetTop();
|
||||
if(top && gtk_im_context_filter_keypress(top->im_context, key))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(pressed && top && gtk_im_context_filter_keypress(top->im_context, key))
|
||||
return true;
|
||||
break;
|
||||
// case GDK_EXPOSE:
|
||||
case GDK_CONFIGURE: {
|
||||
retval = false;
|
||||
p->InvalidateScreenRect();
|
||||
if(p)
|
||||
p->InvalidateScreenRect();
|
||||
if(top)
|
||||
top->draw_after_configure = true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue