From 67b4534b70f0559e2eb80793ebca2dba9f614e9b Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Tue, 18 Mar 2014 09:16:00 +0400 Subject: [PATCH] fix xcb build; update button resources --- dlanguilib.dproj | 11 + .../res/btn_default_small_normal.9.png | Bin 0 -> 1508 bytes .../btn_default_small_normal_disable.9.png | Bin 0 -> 1487 bytes ...default_small_normal_disable_focused.9.png | Bin 0 -> 1506 bytes .../res/btn_default_small_pressed.9.png | Bin 0 -> 1413 bytes .../res/btn_default_small_selected.9.png | Bin 0 -> 1391 bytes src/dlangui/platforms/x11/x11app.d | 825 ++++++------- src/dlangui/widgets/styles.d | 1020 +++++++++-------- 8 files changed, 940 insertions(+), 916 deletions(-) create mode 100644 examples/example1/res/btn_default_small_normal.9.png create mode 100644 examples/example1/res/btn_default_small_normal_disable.9.png create mode 100644 examples/example1/res/btn_default_small_normal_disable_focused.9.png create mode 100644 examples/example1/res/btn_default_small_pressed.9.png create mode 100644 examples/example1/res/btn_default_small_selected.9.png diff --git a/dlanguilib.dproj b/dlanguilib.dproj index 584b02d1..8e382708 100644 --- a/dlanguilib.dproj +++ b/dlanguilib.dproj @@ -161,11 +161,22 @@ + + + 3rdparty\DerelictFI\freeimage.d + + + 3rdparty\DerelictFI\functions.d + + + 3rdparty\DerelictFI\types.d + + \ No newline at end of file diff --git a/examples/example1/res/btn_default_small_normal.9.png b/examples/example1/res/btn_default_small_normal.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5dddd4640d9c603443dc3fc2ac3dc01e82a92c91 GIT binary patch literal 1508 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 I&MBb@0Bgbd7XSbN literal 0 HcmV?d00001 diff --git a/examples/example1/res/btn_default_small_selected.9.png b/examples/example1/res/btn_default_small_selected.9.png new file mode 100644 index 0000000000000000000000000000000000000000..7a376a97f0d695fb8dedaf5f7dc8708276f8a174 GIT binary patch literal 1391 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3M!3HD`oXegDq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfgZOhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo`G(%fti7VnW3Jc zv5C34xsHO7fuVuEfswwUk*=Y+m9dePfq?=PC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3Uk4Ff!5ws?aU2%qvN((9J7WhMC}!TAW;zSx}OhpQivaF)=B> zw8T~k=u(ImatnNY;RfdwLjwvJWcn3}1^R}12Ku?VAb){X7ncO3BAkI$b#X{#L8^XG zYH@yPQ8F+-(v)GEfnkT=B9KC$Ypnc>GJ%njnB$V4T$-DjSK{ens|1wMOUX>JGIVls zHa9e}FflYTFtac;bTYHFbT)K#a&vYxbv83JgqeX&ucd{Bft#VRsgsMLxuKzpn}w5w znT5Hble3eVo1vkh2~4kNUU5lcUUDkT-b|pqP`xI2^;$U>r6!i-7lq{K=fF}xKt_H^ zesM;Afr4|ese*4}a%LWg4~ia$Z(UN0GRsm^+=}vZ6~N(Zm5IfEXG0@%b2D>eBNHQI z?EZ%6O(7@D^ns4i2PF=q!~zonra%xAp7ennc;-pX1Ll|_VAkmW$CAy!z&PL2#WAGf z)}1hGKW0M#*=lnRjUOc(6WJKK+&f&HXFm=oVmKAk7=7WALLsAygNI4yihw2!j>a|Z z>FXVTpKQwA0Xl^y3LzPfedO6%i8eHwR8`ybSN43se}_Vw*o`Y33wMaB z9*yigv}YQ}rbSndC&|^ur0+hP7BFLZMqEmFIz`}@mA^MJ$8*w+8P@Quyp%FZb(Yrcupez)3igGEfH z@_qyR11IL<> ne0!aRy;o_**zlbCFOb0CD713zv9QicP!Z_q>gTe~DWM4fzpL@p literal 0 HcmV?d00001 diff --git a/src/dlangui/platforms/x11/x11app.d b/src/dlangui/platforms/x11/x11app.d index b2618933..b31bec03 100644 --- a/src/dlangui/platforms/x11/x11app.d +++ b/src/dlangui/platforms/x11/x11app.d @@ -2,419 +2,430 @@ module src.dlangui.platforms.x11.x11app; version(linux) { -import std.string; -import std.c.linux.X11.xcb.xcb; -import std.c.linux.X11.xcb.shm; -import std.c.linux.X11.xcb.xproto; -import std.c.linux.X11.xcb.image; -import std.c.linux.X11.keysymdef; -import std.c.linux.linux; -import std.c.stdlib; -import std.conv; + import std.string; + import std.c.linux.X11.xcb.xcb; + import std.c.linux.X11.xcb.shm; + import std.c.linux.X11.xcb.xproto; + import std.c.linux.X11.xcb.image; + import std.c.linux.X11.keysymdef; + import std.c.linux.linux; + import std.c.stdlib; + import std.conv; -import dlangui.core.logger; -import dlangui.graphics.drawbuf; -import dlangui.graphics.fonts; -import dlangui.graphics.ftfonts; -import dlangui.platforms.common.platform; + import dlangui.core.logger; + import dlangui.graphics.drawbuf; + import dlangui.graphics.fonts; + import dlangui.graphics.ftfonts; + import dlangui.platforms.common.platform; -class XCBWindow : Window { - xcb_window_t _w; - xcb_gcontext_t _g; - xcb_image_t * _image; - xcb_shm_segment_info_t shminfo; - @property xcb_window_t windowId() { return _w; } - this(string caption, Window parent) { - _caption = caption; - Log.d("Creating XCB window"); - create(); - } - ~this() { - Log.d("Destroying window"); - } - bool create() { - uint mask; - uint values[2]; - - /* create black graphics context */ - _g = xcb_generate_id(_xcbconnection); - _w = _xcbscreen.root; - mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES; - values[0] = _xcbscreen.black_pixel; - values[1] = 0; - xcb_create_gc(_xcbconnection, _g, _w, mask, &values[0]); - - /* create window */ - _w = xcb_generate_id(_xcbconnection); - - Log.d("window=", _w, " gc=", _g); - - mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK; - values[0] = _xcbscreen.white_pixel; - values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE - | XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_BUTTON_MOTION - | XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW - | XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE - | XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_VISIBILITY_CHANGE; - xcb_create_window(_xcbconnection, _xcbscreen.root_depth, _w, _xcbscreen.root, - 50, 50, 500, 400, 1, - XCB_WINDOW_CLASS_INPUT_OUTPUT, _xcbscreen.root_visual, - mask, &values[0]); - xcb_flush(_xcbconnection); - windowCaption = _caption; - return true; - } - - void createImage() { - Log.i("CRXCBScreen::createImage ", _dx, "x", _dy); - if (_image) - xcb_image_destroy(_image); - _image = null; - xcb_shm_query_version_reply_t * rep_shm; - rep_shm = xcb_shm_query_version_reply (_xcbconnection, - xcb_shm_query_version(_xcbconnection), - null); - if(rep_shm) { - xcb_image_format_t format; - int shmctl_status; - - if (rep_shm.shared_pixmaps && - (rep_shm.major_version > 1 || rep_shm.minor_version > 0)) - format = cast(xcb_image_format_t)rep_shm.pixmap_format; - else - format = XCB_IMAGE_FORMAT_Z_PIXMAP; - - _image = xcb_image_create_native (_xcbconnection, cast(short)_dx, cast(short)_dy, - format, _xcbscreendepth, null, ~0, null); - //format, depth, NULL, ~0, NULL); - //format, depth, NULL, ~0, NULL); - assert(_image); - - shminfo.shmid = shmget (IPC_PRIVATE, - _image.stride*_image.height, - IPC_CREAT | octal!777); - assert(shminfo.shmid != cast(uint)-1); - shminfo.shmaddr = cast(ubyte*)shmat (shminfo.shmid, null, 0); - assert(shminfo.shmaddr); - _image.data = shminfo.shmaddr; - Log.d("Created image depth=", _image.depth, " bpp=", _image.bpp, " stride=", _image.stride ); - - shminfo.shmseg = xcb_generate_id (_xcbconnection); - xcb_shm_attach (_xcbconnection, shminfo.shmseg, - shminfo.shmid, 0); - shmctl_status = shmctl(shminfo.shmid, IPC_RMID, null); - assert(shmctl_status != -1); - free(rep_shm); - } else { - Log.e("Can't get shms"); - } - } - - void draw(ColorDrawBuf buf) { - int i; - i = xcb_image_shm_get(_xcbconnection, _w, - _image, shminfo, - 0, 0, - XCB_ALL_PLANES); - if (!i) { - Log.e("cannot get shm image"); - return; - } - Rect rc; - rc.right = buf.width; - rc.bottom = buf.height; - switch ( _image.bpp ) { - case 32: - { - for (int y = rc.top; y 1 || rep_shm.minor_version > 0)) + format = cast(xcb_image_format_t)rep_shm.pixmap_format; + else + format = XCB_IMAGE_FORMAT_Z_PIXMAP; + + _image = xcb_image_create_native (_xcbconnection, cast(short)_dx, cast(short)_dy, + format, _xcbscreendepth, null, ~0, null); + //format, depth, NULL, ~0, NULL); + //format, depth, NULL, ~0, NULL); + assert(_image); + + shminfo.shmid = shmget (IPC_PRIVATE, + _image.stride*_image.height, + IPC_CREAT | octal!777); + assert(shminfo.shmid != cast(uint)-1); + shminfo.shmaddr = cast(ubyte*)shmat (shminfo.shmid, null, 0); + assert(shminfo.shmaddr); + _image.data = shminfo.shmaddr; + Log.d("Created image depth=", _image.depth, " bpp=", _image.bpp, " stride=", _image.stride ); + + shminfo.shmseg = xcb_generate_id (_xcbconnection); + xcb_shm_attach (_xcbconnection, shminfo.shmseg, + shminfo.shmid, 0); + shmctl_status = shmctl(shminfo.shmid, IPC_RMID, null); + assert(shmctl_status != -1); + free(rep_shm); + } else { + Log.e("Can't get shms"); + } + } + + void draw(ColorDrawBuf buf) { + int i; + i = xcb_image_shm_get(_xcbconnection, _w, + _image, shminfo, + 0, 0, + XCB_ALL_PLANES); + if (!i) { + Log.e("cannot get shm image"); + return; + } + Rect rc; + rc.right = buf.width; + rc.bottom = buf.height; + switch ( _image.bpp ) { + case 32: + { + for (int y = rc.top; y