diff --git a/rainbow/DevDraw/DevDraw.upp b/rainbow/DevDraw/DevDraw.upp index b5be94b68..ce3687b7b 100644 --- a/rainbow/DevDraw/DevDraw.upp +++ b/rainbow/DevDraw/DevDraw.upp @@ -1,6 +1,10 @@ uses - Draw; + Draw, + Gtk; file main.cpp; +mainconfig + "" = "GUI GTK"; + diff --git a/rainbow/DevDraw/init b/rainbow/DevDraw/init index ef6b91d46..fee7bc7ba 100644 --- a/rainbow/DevDraw/init +++ b/rainbow/DevDraw/init @@ -1,4 +1,5 @@ #ifndef _DevDraw_icpp_init_stub #define _DevDraw_icpp_init_stub #include "Draw/init" +#include "Gtk/init" #endif diff --git a/rainbow/DevDraw/main.cpp b/rainbow/DevDraw/main.cpp index a10e8dfa0..c5559d4cb 100644 --- a/rainbow/DevDraw/main.cpp +++ b/rainbow/DevDraw/main.cpp @@ -92,7 +92,6 @@ GUI_APP_MAIN gtk_widget_set_events(darea, 0xffffffff); g_signal_connect(darea, "expose-event", G_CALLBACK(on_expose_event), &myapp); - g_signal_connect(darea, "event", G_CALLBACK(CtrlEvent), &myapp); // g_signal_connect(window, "expose-event", G_CALLBACK(on_expose_event), NULL); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); diff --git a/rainbow/Gtk/DrawImage.cpp b/rainbow/Gtk/DrawImage.cpp index fa20cf71c..27faa7db8 100644 --- a/rainbow/Gtk/DrawImage.cpp +++ b/rainbow/Gtk/DrawImage.cpp @@ -54,7 +54,7 @@ void SystemDraw::SysDrawImageOp(int x, int y, const Image& img, Color color) GuiLock __; if(img.GetLength() == 0) return; - LLOG("SysDrawImageOp " << img.GetSerialId() << ' ' << img.GetSize()); + DLOG("SysDrawImageOp " << img.GetSerialId() << ' ' << x << ", " << y << ", "<< img.GetSize()); ImageSysDataMaker m; static LRUCache cache; LLOG("SysImage cache pixels " << cache.GetSize() << ", count " << cache.GetCount()); diff --git a/rainbow/Gtk/DrawOp.cpp b/rainbow/Gtk/DrawOp.cpp index 5b68a8f48..0e1ccdb17 100644 --- a/rainbow/Gtk/DrawOp.cpp +++ b/rainbow/Gtk/DrawOp.cpp @@ -103,6 +103,8 @@ Rect SystemDraw::GetPaintRect() const void SystemDraw::DrawRectOp(int x, int y, int cx, int cy, Color color) { + if(IsNull(color)) + return; SetColor(color); cairo_rectangle(cr, x, y, cx, cy); cairo_fill(cr); diff --git a/rainbow/Gtk/Gtk.upp b/rainbow/Gtk/Gtk.upp index 6fcfbf953..8b69f50d0 100644 --- a/rainbow/Gtk/Gtk.upp +++ b/rainbow/Gtk/Gtk.upp @@ -1,4 +1,4 @@ -description "Skeleton rainbow code\377"; +description "Gtk backend\377"; file Gtk.h, diff --git a/rainbow/Gtk/Proc.cpp b/rainbow/Gtk/Proc.cpp index 1fc1a22b2..104d4bb89 100644 --- a/rainbow/Gtk/Proc.cpp +++ b/rainbow/Gtk/Proc.cpp @@ -79,10 +79,20 @@ bool Ctrl::Proc(GdkEvent *event) if(kv >= 0 && kv < 65536) DispatchKey((pressed ? K_KEYUP : kv + K_DELTA), 1); break; + + case GDK_CONFIGURE: { + GdkEventConfigure *e = (GdkEventConfigure *)event; + Rect rect = RectC(e->x, e->y, e->width, e->height); + LLOG("CongigureNotify " << rect); + if(GetRect() != rect) + SetWndRect(rect); + // TODO: Add DHCtrl support + } + break; default: return false; } - return false; + return true; } END_UPP_NAMESPACE diff --git a/rainbow/GtkMain/main.cpp b/rainbow/GtkMain/main.cpp index 8fa4394f5..dc405492d 100644 --- a/rainbow/GtkMain/main.cpp +++ b/rainbow/GtkMain/main.cpp @@ -11,6 +11,32 @@ struct MyApp : TopWindow { { log.Add(s); log.Remove(0, max(log.GetCount() - 16, 0)); + Refresh(); + } + + virtual void Activate() + { + Log("Activate"); + } + + virtual void Deactivate() + { + Log("Deactivate"); + } + + virtual void Layout() + { + Log("Layout"); + } + + virtual void GotFocus() + { + Log("GotFocus"); + } + + virtual void LostFocus() + { + Log("LostFocus"); } virtual Image MouseEvent(int event, Point p, int zdelta, dword keyflags) @@ -33,14 +59,12 @@ struct MyApp : TopWindow { Tuple2 *b = FindTuple(map, __countof(map), event & ACTION); Log(String().Cat() << "MOUSE " << (a ? a->b : "") << '|' << (b ? b->b : "") << ' ' << p); - Refresh(); return TopWindow::MouseEvent(event, p, zdelta, keyflags); } virtual bool Key(dword key, int count) { Log(GetKeyDesc(key).Cat() << ' ' << count); - Refresh(); } virtual void MouseMove(Point p, dword keyflags) @@ -71,8 +95,8 @@ struct MyApp : TopWindow { GUI_APP_MAIN { -// MyApp().Run(); -// return; + MyApp().Run(); + return; PromptOK("Hello world!"); return;