FrameGetRect, FrameHitTest requests

This commit is contained in:
Andrey Sidorov 2012-06-07 12:17:24 +10:00
parent 41ceeb67d8
commit d7765b01bf

View file

@ -40,49 +40,80 @@ exports.requireExt = function(display, callback)
X.pack_stream.flush(); X.pack_stream.flush();
} }
/* ext.FrameRect = {
Titlebar: 1,
Tracking: 2,
Growbox: 3
};
ext.FrameGetRect = function(frame_class, frame_rect, ix, iy, iw, ih, ox, oy, ow, oh, cb)
{
X.seq_num++;
X.pack_stream.pack('CCSSSSSSSSSSS', [ext.majorOpcode, 1, 6, frame_class, frame_rect, ix, iy, iw, ih, ox, oy, ow, oh, cb]);
X.replies[X.seq_num] = [
function(buf, opt) {
var res = buf.unpack('SSSS');
return {
x: res[0],
y: res[1],
w: res[2],
h: res[3]
};
},
cb
];
X.pack_stream.flush();
}
ext.FrameHitTest = function(frame_class, px, py, ix, iy, iw, ih, ox, oy, ow, oh, cb)
{
X.seq_num++;
X.pack_stream.pack('CCSSxxSSSSSSSSSS', [ext.majorOpcode, 2, 7, frame_class, px, py, ix, iy, iw, ih, ox, oy, ow, oh]);
X.replies[X.seq_num] = [
function(buf, opt) {
var res = buf.unpack('L');
return res[0];
},
cb
];
X.pack_stream.flush();
}
// from /usr/include/Xplugin.h // from /usr/include/Xplugin.h
enum xp_frame_class_enum { ext.FrameClass = {
XP_FRAME_CLASS_DECOR_LARGE = 1 << 0, DecorLarge: 1,
XP_FRAME_CLASS_RESERVED1 = 1 << 1, Reserved1: 2,
XP_FRAME_CLASS_RESERVED2 = 1 << 2, Reserved2: 4,
XP_FRAME_CLASS_RESERVED3 = 1 << 3, Reserved3: 8,
XP_FRAME_CLASS_DECOR_SMALL = 1 << 4, DecorSmall: 16,
XP_FRAME_CLASS_RESERVED5 = 1 << 5, Reserved5: 32,
XP_FRAME_CLASS_RESERVED6 = 1 << 6, Reserved6: 64,
XP_FRAME_CLASS_DECOR_NONE = 1 << 7, Reserved8: 128,
XP_FRAME_CLASS_RESERVED8 = 1 << 8, Managed: 1<<15,
XP_FRAME_CLASS_BEHAVIOR_MANAGED = 1 << 15, Transient: 1<<16,
XP_FRAME_CLASS_BEHAVIOR_TRANSIENT = 1 << 16, Stationary: 1<<17
XP_FRAME_CLASS_BEHAVIOR_STATIONARY = 1 << 17, };
};
typedef enum xp_frame_class_enum xp_frame_class;
// Attributes of window frames. ext.FrameAttr = {
Active: 1,
enum xp_frame_attr_enum { Urgent: 2,
XP_FRAME_ATTR_ACTIVE = 0x0001, Title: 4,
XP_FRAME_ATTR_URGENT = 0x0002, Prelight: 8,
XP_FRAME_ATTR_TITLE = 0x0004, Shaded: 16,
XP_FRAME_ATTR_PRELIGHT = 0x0008, CloseBox: 0x100,
XP_FRAME_ATTR_SHADED = 0x0010, Collapse: 0x200,
XP_FRAME_ATTR_CLOSE_BOX = 0x0100, Zoom: 0x400,
XP_FRAME_ATTR_COLLAPSE = 0x0200, CloseBoxClicked: 0x800,
XP_FRAME_ATTR_ZOOM = 0x0400, CollapseBoxClicked: 0x1000,
XP_FRAME_ATTR_CLOSE_BOX_CLICKED = 0x0800, ZoomBoxClicked: 0x2000,
XP_FRAME_ATTR_COLLAPSE_BOX_CLICKED = 0x1000, GrowBox: 0x4000
XP_FRAME_ATTR_ZOOM_BOX_CLICKED = 0x2000, };
XP_FRAME_ATTR_GROW_BOX = 0x4000,
};
typedef enum xp_frame_attr_enum xp_frame_attr;
*/
ext.FrameDraw = function(screen, window, frameClass, attr, ix, iy, iw, ih, ox, oy, ow, oh, title) ext.FrameDraw = function(screen, window, frameClass, attr, ix, iy, iw, ih, ox, oy, ow, oh, title)
{ {
X.seq_num++; X.seq_num++;
var titleReqWords = xutil.padded_length(title.length); var titleReqWords = xutil.padded_length(title.length)/4;
X.pack_stream.pack('CCSLLSSSSSSSSSSLp', [ext.majorOpcode, 3, 9+titleReqWords, screen, window, frameClass, attr, ix, iy, iw, ih, ox, oy, ow, oh, title.length, title]); X.pack_stream.pack('CCSLLSSSSSSSSSSLp', [ext.majorOpcode, 3, 9+titleReqWords, screen, window, frameClass, attr, ix, iy, iw, ih, ox, oy, ow, oh, title.length, title]);
X.pack_stream.flush(); X.pack_stream.flush();
} }
@ -167,11 +198,14 @@ typedef enum xp_frame_attr_enum xp_frame_attr;
X.pack_stream.flush(); X.pack_stream.flush();
} }
callback(ext);
/*
ext.QueryVersion(function(err, vers) { ext.QueryVersion(function(err, vers) {
ext.major = vers[0]; ext.major = vers[0];
ext.minor = vers[1]; ext.minor = vers[1];
ext.patch = vers[2]; ext.patch = vers[2];
callback(ext); callback(ext);
}); });
*/
}); });
} }