CtrlCore: GTK backend now compiles in Debian 6.0

git-svn-id: svn://ultimatepp.org/upp/trunk@6727 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2014-01-07 12:36:19 +00:00
parent 91e798de08
commit 276f2f2a5b
7 changed files with 164 additions and 136 deletions

View file

@ -2,6 +2,12 @@
#define PLATFORM_X11 // To keep legacy code happy #define PLATFORM_X11 // To keep legacy code happy
#ifdef GDK_KEY_Delete
#define GDKEY(x) GDK_KEY_##x
#else
#define GDKEY(x) GDK_##x
#endif
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h> #include <gdk/gdkkeysyms.h>
@ -47,6 +53,7 @@ private:
Vector<Rect> clip; Vector<Rect> clip;
cairo_t *cr; cairo_t *cr;
GdkDrawable *drawable;
SystemDraw() {} SystemDraw() {}
@ -64,7 +71,7 @@ public:
bool CanSetSurface() { return true; } bool CanSetSurface() { return true; }
static void Flush() {} // TODO? static void Flush() {} // TODO?
SystemDraw(cairo_t *cr) : cr(cr) {} SystemDraw(cairo_t *cr, GdkDrawable *dw = NULL) : cr(cr), drawable(dw) {}
}; };
class ImageDraw : public SystemDraw { class ImageDraw : public SystemDraw {

View file

@ -31,17 +31,17 @@ bool Ctrl::GuiPlatformSetFullRefreshSpecial()
String GuiPlatformGetKeyDesc(dword key) String GuiPlatformGetKeyDesc(dword key)
{ {
static Tuple2<dword, const char *> nkey[] = { static Tuple2<dword, const char *> nkey[] = {
{ K_DELTA|GDK_KEY_grave, "[`]" }, { K_DELTA|GDKEY(grave), "[`]" },
{ K_DELTA|GDK_KEY_minus, "[-]" }, { K_DELTA|GDKEY(minus), "[-]" },
{ K_DELTA|GDK_KEY_equal, "[=]" }, { K_DELTA|GDKEY(equal), "[=]" },
{ K_DELTA|GDK_KEY_backslash, "[\\]" }, { K_DELTA|GDKEY(backslash), "[\\]" },
{ K_DELTA|GDK_KEY_bracketleft, "[[]" }, { K_DELTA|GDKEY(bracketleft), "[[]" },
{ K_DELTA|GDK_KEY_bracketright, "[]]" }, { K_DELTA|GDKEY(bracketright), "[]]" },
{ K_DELTA|GDK_KEY_semicolon, "[;]" }, { K_DELTA|GDKEY(semicolon), "[;]" },
{ K_DELTA|GDK_KEY_apostrophe, "[']" }, { K_DELTA|GDKEY(apostrophe), "[']" },
{ K_DELTA|GDK_KEY_comma, "[,]" }, { K_DELTA|GDKEY(comma), "[,]" },
{ K_DELTA|GDK_KEY_period, "[.]" }, { K_DELTA|GDKEY(period), "[.]" },
{ K_DELTA|GDK_KEY_underscore, "[/]" }, { K_DELTA|GDKEY(underscore), "[/]" },
{ 0, NULL } { 0, NULL }
}; };
const Tuple2<dword, const char *> *x = FindTuple(nkey, __countof(nkey), key); const Tuple2<dword, const char *> *x = FindTuple(nkey, __countof(nkey), key);

View file

@ -54,8 +54,12 @@ void Ctrl::GtkDragEnd(GtkWidget *widget, GdkDragContext *context, gpointer user_
{ {
LLOG("GtkDragEnd"); LLOG("GtkDragEnd");
dnd_result = DND_NONE; dnd_result = DND_NONE;
#if GTK_CHECK_VERSION(2,22,0) // No drag&drop support before 2.22, sorry...
GdkDragAction a = gdk_drag_context_get_selected_action(context); GdkDragAction a = gdk_drag_context_get_selected_action(context);
dnd_result = a == GDK_ACTION_MOVE ? DND_MOVE : a == GDK_ACTION_COPY ? DND_COPY : DND_NONE; dnd_result = a == GDK_ACTION_MOVE ? DND_MOVE : a == GDK_ACTION_COPY ? DND_COPY : DND_NONE;
#else
dnd_result = DND_NONE;
#endif
dnd_source = NULL; dnd_source = NULL;
} }
@ -176,6 +180,7 @@ void Ctrl::DndTargets(GdkDragContext *context)
} }
dnd_targets.Clear(); dnd_targets.Clear();
dnd_text_target.Clear(); dnd_text_target.Clear();
#if GTK_CHECK_VERSION(2,22,0) // No drag&drop support before 2.22, sorry...
for(GList *list = gdk_drag_context_list_targets(context); list; list = g_list_next (list)) { for(GList *list = gdk_drag_context_list_targets(context); list; list = g_list_next (list)) {
String g = gdk_atom_name((GdkAtom)list->data); String g = gdk_atom_name((GdkAtom)list->data);
if(text_targets.Find(g) >= 0) { if(text_targets.Find(g) >= 0) {
@ -198,6 +203,7 @@ void Ctrl::DndTargets(GdkDragContext *context)
else else
dnd_targets.Add(g); dnd_targets.Add(g);
} }
#endif
} }
void Ctrl::GtkDragDataReceived(GtkWidget *widget, GdkDragContext *context, void Ctrl::GtkDragDataReceived(GtkWidget *widget, GdkDragContext *context,

View file

@ -117,10 +117,20 @@ void SystemDraw::DrawRectOp(int x, int y, int cx, int cy, Color color)
return; return;
cairo_rectangle(cr, x, y, cx, cy); cairo_rectangle(cr, x, y, cx, cy);
if(color == InvertColor()) { if(color == InvertColor()) {
#if GTK_CHECK_VERSION(2,24,0)
SetColor(White()); SetColor(White());
cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE); cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE);
cairo_fill(cr); cairo_fill(cr);
cairo_set_operator(cr, CAIRO_OPERATOR_OVER); cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
#else
if(drawable) {
GdkGC *gc = gdk_gc_new(drawable);
gdk_gc_set_function(gc, GDK_INVERT);
gdk_draw_drawable(drawable, gc, drawable, x, y, x, y, cx, cy);
gdk_gc_set_function(gc, GDK_COPY);
gdk_gc_destroy(drawable);
}
#endif
} }
else { else {
SetColor(color); SetColor(color);

View file

@ -408,37 +408,37 @@ void Ctrl::Proc()
if(kv >= 'a' && kv <= 'z') if(kv >= 'a' && kv <= 'z')
kv = kv - 'a' + 'A'; kv = kv - 'a' + 'A';
static Tuple2<int, int> cv[] = { static Tuple2<int, int> cv[] = {
{ GDK_KEY_BackSpace, K_BACKSPACE }, { GDKEY(BackSpace), K_BACKSPACE },
{ GDK_KEY_Tab, K_TAB }, { GDKEY(Tab), K_TAB },
{ GDK_KEY_ISO_Left_Tab, K_TAB }, { GDKEY(ISO_Left_Tab), K_TAB },
{ GDK_KEY_Return, K_ENTER }, { GDKEY(Return), K_ENTER },
{ GDK_KEY_Escape, K_ESCAPE }, { GDKEY(Escape), K_ESCAPE },
{ GDK_KEY_space, K_SPACE }, { GDKEY(space), K_SPACE },
{ GDK_KEY_Control_L, K_CTRL_KEY }, { GDKEY(Control_L), K_CTRL_KEY },
{ GDK_KEY_Control_R, K_CTRL_KEY }, { GDKEY(Control_R), K_CTRL_KEY },
{ GDK_KEY_Shift_L, K_SHIFT_KEY }, { GDKEY(Shift_L), K_SHIFT_KEY },
{ GDK_KEY_Shift_R, K_SHIFT_KEY }, { GDKEY(Shift_R), K_SHIFT_KEY },
{ GDK_KEY_Alt_L, K_ALT_KEY }, { GDKEY(Alt_L), K_ALT_KEY },
{ GDK_KEY_Alt_R, K_ALT_KEY }, { GDKEY(Alt_R), K_ALT_KEY },
{ GDK_KEY_KP_Space, K_SPACE }, { GDKEY(KP_Space), K_SPACE },
{ GDK_KEY_KP_Tab, K_TAB }, { GDKEY(KP_Tab), K_TAB },
{ GDK_KEY_KP_Enter, K_ENTER }, { GDKEY(KP_Enter), K_ENTER },
{ GDK_KEY_KP_F1, K_F1 }, { GDKEY(KP_F1), K_F1 },
{ GDK_KEY_KP_F2, K_F2 }, { GDKEY(KP_F2), K_F2 },
{ GDK_KEY_KP_F3, K_F3 }, { GDKEY(KP_F3), K_F3 },
{ GDK_KEY_KP_F4, K_F4 }, { GDKEY(KP_F4), K_F4 },
{ GDK_KEY_KP_Home, K_HOME }, { GDKEY(KP_Home), K_HOME },
{ GDK_KEY_KP_Left, K_LEFT }, { GDKEY(KP_Left), K_LEFT },
{ GDK_KEY_KP_Up, K_UP }, { GDKEY(KP_Up), K_UP },
{ GDK_KEY_KP_Right, K_RIGHT }, { GDKEY(KP_Right), K_RIGHT },
{ GDK_KEY_KP_Down, K_DOWN }, { GDKEY(KP_Down), K_DOWN },
{ GDK_KEY_KP_Page_Up, K_PAGEUP }, { GDKEY(KP_Page_Up), K_PAGEUP },
{ GDK_KEY_KP_Page_Down, K_PAGEDOWN }, { GDKEY(KP_Page_Down), K_PAGEDOWN },
{ GDK_KEY_KP_End, K_END }, { GDKEY(KP_End), K_END },
{ GDK_KEY_KP_Begin, K_HOME }, { GDKEY(KP_Begin), K_HOME },
{ GDK_KEY_KP_Insert, K_INSERT }, { GDKEY(KP_Insert), K_INSERT },
{ GDK_KEY_KP_Delete, K_DELETE }, { GDKEY(KP_Delete), K_DELETE },
}; };
Tuple2<int, int> *x = FindTuple(cv, __countof(cv), kv); Tuple2<int, int> *x = FindTuple(cv, __countof(cv), kv);
if(x) if(x)

View file

@ -9,103 +9,103 @@ K_ESCAPE = 27,
K_SPACE = 32, K_SPACE = 32,
K_DELETE = GDK_KEY_Delete|K_DELTA, K_DELETE = GDKEY(Delete)|K_DELTA,
K_SHIFT_KEY = GDK_KEY_Shift_L|K_DELTA, K_SHIFT_KEY = GDKEY(Shift_L)|K_DELTA,
K_CTRL_KEY = GDK_KEY_Control_L|K_DELTA, K_CTRL_KEY = GDKEY(Control_L)|K_DELTA,
K_ALT_KEY = GDK_KEY_Alt_L|K_DELTA, K_ALT_KEY = GDKEY(Alt_L)|K_DELTA,
K_CAPSLOCK = GDK_KEY_Caps_Lock|K_DELTA, K_CAPSLOCK = GDKEY(Caps_Lock)|K_DELTA,
K_PRIOR = GDK_KEY_Page_Up|K_DELTA, K_PRIOR = GDKEY(Page_Up)|K_DELTA,
K_PAGEUP = GDK_KEY_Page_Up|K_DELTA, K_PAGEUP = GDKEY(Page_Up)|K_DELTA,
K_NEXT = GDK_KEY_Page_Down|K_DELTA, K_NEXT = GDKEY(Page_Down)|K_DELTA,
K_PAGEDOWN = GDK_KEY_Page_Down|K_DELTA, K_PAGEDOWN = GDKEY(Page_Down)|K_DELTA,
K_END = GDK_KEY_End|K_DELTA, K_END = GDKEY(End)|K_DELTA,
K_HOME = GDK_KEY_Home|K_DELTA, K_HOME = GDKEY(Home)|K_DELTA,
K_LEFT = GDK_KEY_Left|K_DELTA, K_LEFT = GDKEY(Left)|K_DELTA,
K_UP = GDK_KEY_Up|K_DELTA, K_UP = GDKEY(Up)|K_DELTA,
K_RIGHT = GDK_KEY_Right|K_DELTA, K_RIGHT = GDKEY(Right)|K_DELTA,
K_DOWN = GDK_KEY_Down|K_DELTA, K_DOWN = GDKEY(Down)|K_DELTA,
K_INSERT = GDK_KEY_Insert|K_DELTA, K_INSERT = GDKEY(Insert)|K_DELTA,
K_NUMPAD0 = GDK_KEY_KP_0|K_DELTA, K_NUMPAD0 = GDKEY(KP_0)|K_DELTA,
K_NUMPAD1 = GDK_KEY_KP_1|K_DELTA, K_NUMPAD1 = GDKEY(KP_1)|K_DELTA,
K_NUMPAD2 = GDK_KEY_KP_2|K_DELTA, K_NUMPAD2 = GDKEY(KP_2)|K_DELTA,
K_NUMPAD3 = GDK_KEY_KP_3|K_DELTA, K_NUMPAD3 = GDKEY(KP_3)|K_DELTA,
K_NUMPAD4 = GDK_KEY_KP_4|K_DELTA, K_NUMPAD4 = GDKEY(KP_4)|K_DELTA,
K_NUMPAD5 = GDK_KEY_KP_5|K_DELTA, K_NUMPAD5 = GDKEY(KP_5)|K_DELTA,
K_NUMPAD6 = GDK_KEY_KP_6|K_DELTA, K_NUMPAD6 = GDKEY(KP_6)|K_DELTA,
K_NUMPAD7 = GDK_KEY_KP_7|K_DELTA, K_NUMPAD7 = GDKEY(KP_7)|K_DELTA,
K_NUMPAD8 = GDK_KEY_KP_8|K_DELTA, K_NUMPAD8 = GDKEY(KP_8)|K_DELTA,
K_NUMPAD9 = GDK_KEY_KP_9|K_DELTA, K_NUMPAD9 = GDKEY(KP_9)|K_DELTA,
K_MULTIPLY = GDK_KEY_KP_Multiply|K_DELTA, K_MULTIPLY = GDKEY(KP_Multiply)|K_DELTA,
K_ADD = GDK_KEY_KP_Add|K_DELTA, K_ADD = GDKEY(KP_Add)|K_DELTA,
K_SEPARATOR = GDK_KEY_KP_Separator|K_DELTA, K_SEPARATOR = GDKEY(KP_Separator)|K_DELTA,
K_SUBTRACT = GDK_KEY_KP_Subtract|K_DELTA, K_SUBTRACT = GDKEY(KP_Subtract)|K_DELTA,
K_DECIMAL = GDK_KEY_KP_Decimal|K_DELTA, K_DECIMAL = GDKEY(KP_Decimal)|K_DELTA,
K_DIVIDE = GDK_KEY_KP_Divide|K_DELTA, K_DIVIDE = GDKEY(KP_Divide)|K_DELTA,
K_SCROLL = GDK_KEY_Scroll_Lock|K_DELTA, K_SCROLL = GDKEY(Scroll_Lock)|K_DELTA,
K_F1 = GDK_KEY_F1|K_DELTA, K_F1 = GDKEY(F1)|K_DELTA,
K_F2 = GDK_KEY_F2|K_DELTA, K_F2 = GDKEY(F2)|K_DELTA,
K_F3 = GDK_KEY_F3|K_DELTA, K_F3 = GDKEY(F3)|K_DELTA,
K_F4 = GDK_KEY_F4|K_DELTA, K_F4 = GDKEY(F4)|K_DELTA,
K_F5 = GDK_KEY_F5|K_DELTA, K_F5 = GDKEY(F5)|K_DELTA,
K_F6 = GDK_KEY_F6|K_DELTA, K_F6 = GDKEY(F6)|K_DELTA,
K_F7 = GDK_KEY_F7|K_DELTA, K_F7 = GDKEY(F7)|K_DELTA,
K_F8 = GDK_KEY_F8|K_DELTA, K_F8 = GDKEY(F8)|K_DELTA,
K_F9 = GDK_KEY_F9|K_DELTA, K_F9 = GDKEY(F9)|K_DELTA,
K_F10 = GDK_KEY_F10|K_DELTA, K_F10 = GDKEY(F10)|K_DELTA,
K_F11 = GDK_KEY_F11|K_DELTA, K_F11 = GDKEY(F11)|K_DELTA,
K_F12 = GDK_KEY_F12|K_DELTA, K_F12 = GDKEY(F12)|K_DELTA,
K_A = GDK_KEY_A|K_DELTA, K_A = GDKEY(A)|K_DELTA,
K_B = GDK_KEY_B|K_DELTA, K_B = GDKEY(B)|K_DELTA,
K_C = GDK_KEY_C|K_DELTA, K_C = GDKEY(C)|K_DELTA,
K_D = GDK_KEY_D|K_DELTA, K_D = GDKEY(D)|K_DELTA,
K_E = GDK_KEY_E|K_DELTA, K_E = GDKEY(E)|K_DELTA,
K_F = GDK_KEY_F|K_DELTA, K_F = GDKEY(F)|K_DELTA,
K_G = GDK_KEY_G|K_DELTA, K_G = GDKEY(G)|K_DELTA,
K_H = GDK_KEY_H|K_DELTA, K_H = GDKEY(H)|K_DELTA,
K_I = GDK_KEY_I|K_DELTA, K_I = GDKEY(I)|K_DELTA,
K_J = GDK_KEY_J|K_DELTA, K_J = GDKEY(J)|K_DELTA,
K_K = GDK_KEY_K|K_DELTA, K_K = GDKEY(K)|K_DELTA,
K_L = GDK_KEY_L|K_DELTA, K_L = GDKEY(L)|K_DELTA,
K_M = GDK_KEY_M|K_DELTA, K_M = GDKEY(M)|K_DELTA,
K_N = GDK_KEY_N|K_DELTA, K_N = GDKEY(N)|K_DELTA,
K_O = GDK_KEY_O|K_DELTA, K_O = GDKEY(O)|K_DELTA,
K_P = GDK_KEY_P|K_DELTA, K_P = GDKEY(P)|K_DELTA,
K_Q = GDK_KEY_Q|K_DELTA, K_Q = GDKEY(Q)|K_DELTA,
K_R = GDK_KEY_R|K_DELTA, K_R = GDKEY(R)|K_DELTA,
K_S = GDK_KEY_S|K_DELTA, K_S = GDKEY(S)|K_DELTA,
K_T = GDK_KEY_T|K_DELTA, K_T = GDKEY(T)|K_DELTA,
K_U = GDK_KEY_U|K_DELTA, K_U = GDKEY(U)|K_DELTA,
K_V = GDK_KEY_V|K_DELTA, K_V = GDKEY(V)|K_DELTA,
K_W = GDK_KEY_W|K_DELTA, K_W = GDKEY(W)|K_DELTA,
K_X = GDK_KEY_X|K_DELTA, K_X = GDKEY(X)|K_DELTA,
K_Y = GDK_KEY_Y|K_DELTA, K_Y = GDKEY(Y)|K_DELTA,
K_Z = GDK_KEY_Z|K_DELTA, K_Z = GDKEY(Z)|K_DELTA,
K_0 = GDK_KEY_0|K_DELTA, K_0 = GDKEY(0)|K_DELTA,
K_1 = GDK_KEY_1|K_DELTA, K_1 = GDKEY(1)|K_DELTA,
K_2 = GDK_KEY_2|K_DELTA, K_2 = GDKEY(2)|K_DELTA,
K_3 = GDK_KEY_3|K_DELTA, K_3 = GDKEY(3)|K_DELTA,
K_4 = GDK_KEY_4|K_DELTA, K_4 = GDKEY(4)|K_DELTA,
K_5 = GDK_KEY_5|K_DELTA, K_5 = GDKEY(5)|K_DELTA,
K_6 = GDK_KEY_6|K_DELTA, K_6 = GDKEY(6)|K_DELTA,
K_7 = GDK_KEY_7|K_DELTA, K_7 = GDKEY(7)|K_DELTA,
K_8 = GDK_KEY_8|K_DELTA, K_8 = GDKEY(8)|K_DELTA,
K_9 = GDK_KEY_9|K_DELTA, K_9 = GDKEY(9)|K_DELTA,
K_CTRL_LBRACKET = K_CTRL|GDK_KEY_bracketleft|K_DELTA, K_CTRL_LBRACKET = K_CTRL|GDKEY(bracketleft)|K_DELTA,
K_CTRL_RBRACKET = K_CTRL|GDK_KEY_bracketright|K_DELTA, K_CTRL_RBRACKET = K_CTRL|GDKEY(bracketright)|K_DELTA,
K_CTRL_MINUS = K_CTRL|GDK_KEY_minus|K_DELTA, K_CTRL_MINUS = K_CTRL|GDKEY(minus)|K_DELTA,
K_CTRL_GRAVE = K_CTRL|GDK_KEY_grave|K_DELTA, K_CTRL_GRAVE = K_CTRL|GDKEY(grave)|K_DELTA,
K_CTRL_SLASH = K_CTRL|GDK_KEY_slash|K_DELTA, K_CTRL_SLASH = K_CTRL|GDKEY(slash)|K_DELTA,
K_CTRL_BACKSLASH = K_CTRL|GDK_KEY_backslash|K_DELTA, K_CTRL_BACKSLASH = K_CTRL|GDKEY(backslash)|K_DELTA,
K_CTRL_COMMA = K_CTRL|GDK_KEY_comma|K_DELTA, K_CTRL_COMMA = K_CTRL|GDKEY(comma)|K_DELTA,
K_CTRL_PERIOD = K_CTRL|GDK_KEY_period|K_DELTA, K_CTRL_PERIOD = K_CTRL|GDKEY(period)|K_DELTA,
K_CTRL_SEMICOLON = K_CTRL|GDK_KEY_semicolon|K_DELTA, K_CTRL_SEMICOLON = K_CTRL|GDKEY(semicolon)|K_DELTA,
K_CTRL_EQUAL = K_CTRL|GDK_KEY_equal|K_DELTA, K_CTRL_EQUAL = K_CTRL|GDKEY(equal)|K_DELTA,
K_CTRL_APOSTROPHE= K_CTRL|GDK_KEY_apostrophe|K_DELTA, K_CTRL_APOSTROPHE= K_CTRL|GDKEY(apostrophe)|K_DELTA,
K_BREAK = GDK_KEY_Break|K_DELTA, K_BREAK = GDKEY(Break)|K_DELTA,

View file

@ -187,8 +187,13 @@ Rect Ctrl::GetWndScreenRect() const
if(top) { if(top) {
gint x, y; gint x, y;
gdk_window_get_position(gdk(), &x, &y); gdk_window_get_position(gdk(), &x, &y);
#if GTK_CHECK_VERSION(2, 24, 0)
gint width = gdk_window_get_width(gdk()); gint width = gdk_window_get_width(gdk());
gint height = gdk_window_get_height(gdk()); gint height = gdk_window_get_height(gdk());
#else
gint width, height;
gdk_drawable_get_size(gdk(), &width, &height);
#endif
return RectC(x, y, width, height); return RectC(x, y, width, height);
} }
return Null; return Null;