From 3d2fc6df46fcb09fbde456de936527e319364e70 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Wed, 5 Mar 2014 09:29:03 +0400 Subject: [PATCH] project refactoring - win32 platform support --- 3rdparty/libpng/lib/libpng15.dll | Bin 0 -> 175104 bytes 3rdparty/libpng/lib/libpng15.lib | Bin 0 -> 30720 bytes dlangui.visualdproj | 5 +- src/dlangui/platforms/windows/win32drawbuf.d | 69 +++ src/dlangui/platforms/windows/win32fonts.d | 479 ++++++++++++++++ src/dlangui/platforms/windows/winapp.d | 566 +------------------ 6 files changed, 552 insertions(+), 567 deletions(-) create mode 100644 3rdparty/libpng/lib/libpng15.dll create mode 100644 3rdparty/libpng/lib/libpng15.lib create mode 100644 src/dlangui/platforms/windows/win32drawbuf.d create mode 100644 src/dlangui/platforms/windows/win32fonts.d diff --git a/3rdparty/libpng/lib/libpng15.dll b/3rdparty/libpng/lib/libpng15.dll new file mode 100644 index 0000000000000000000000000000000000000000..fad7e845d8fa677173b3b13feec206d339e47916 GIT binary patch literal 175104 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≀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 OOaX!a{QW!C)k!hN#i=aqsV*`|)O) z2*}4K-R<0S{=ako=iYnnIp?1Loqsvixx1V@(>0v@nO^A5-x#d4JKb(?JZ?YG8;$$J zL3^;dzStYN?SpRm+YNU?dnU`1*7}P?oWFJlloL&r#eYxFa%V8uVsFr28MJ$&(U8Q< zi4=CP>*4Nd-<% zaVN7p60$bzy6r0k{wV^lZ9ubpP{H&(cdk6Yx;eNn)4~e{>#2%W(1APad66+a)14mi zy?UP`z-Jg>Apo&>0^N1fJ?_kiceFDa^am?$d%qx_We`0Hn3bm@s+kWLxeEk;IH0*V zX)lk4>+SJmwAr1sC+lweMiF$O3aauz;!ZdaJw4w&wU9UIulL#$w|#>MJFgU`43IPv z0b=li7;oSA$*?_I?#|CI?04JAco%d?)A26oPJ{t})ay)o?fzhS=+&3u7xWCjpjYvU zYiTEZL$Bf+y2ro3ohRd=@(sPc;IJ_Jy*5m@2*_ywk!B!e+!-A9bC%v->MeIR*T|6C{oGQ3D*L&m1U*epbEk0s zR(g~6;X^Mu;wTZQ z1miti-xyI;!vW3W=JIlH)E@Vbld#)l@Gp&nUuT5mT@mB7Nc3r7^(_m1W*m?h^_g+x zZyfw{(fx2^Yt&y^B?D~z^MnKmupeDK72hIGkPu%9$mVF&8%!v+qDV1Bh&H~O!33ES zU(I0hFE;h@faMwuk3yV{2kJbKChCu-5^Pd4E8#)Mp^Tz?<|9r^<)f=2bZ={ass zn2*c-wF%8ZoeI~<96TFy&=4V``eZsv*1oSCxb;A3-?fEw!f=~@3^zEfkN&}fx0m|hR$xIN!duhFx$f*R-}>vFl^*q4O~Umu;m*N?vsB>M zpEYvqd{%^`{U!ET^7(9tK*xMG#7yNOeqnw0$=2*&NaL5-4pfO>VtWc`{R_hDjn+C{ ziuGmBvGKQm-q3-M@ynhUtxTWl&Vjy%?XIM42Ay@7eo|zIJ~m zK9hIAm#2a6<3)M@p&CCMFUEEtMtv)PfKvNm{KGz{A}A|S`a^*NO!z~A5=PP5BTY5d z*LS1=6YD$D0%|nSAz#Mtx!zk>1=xI%Vgm*W*Lw8sDw?VBHJm#(8nepZ)+e;h$a=ZftxESw13D|c3-=HvH zt=$=K^e7oP>P-5>G#|(#Q1UY)*p1qrrLZ5UN$m78vOknp&T&lpBnD<9+}28-kBNnusKckh!HsxFSP(TdPCe8NTe=K<*74xU$iGpqX zM}F$!)}&X7{{jWrnE!zi5bb&=T4jB5D{x>xgg4VYE5+iCUwpXYZ*gmhC%n7iRqfHZ zYLB=zydwsS`)A^F<_Rk<_ctRAeT99Gv{HigCxnkQn(uGg4qWVSo}obSIAYOUZgZw=3%r?EBMWQTPA zC*5}LA9w;#;U9!2BCz#0gt~uz2HyVp8F=)>PI%-nSNperVHVzk#WV2^WuFGaqXTtn zY2D=ha!Lm}{N>NzcO~=vrsRQC>^CJ(6kO;}!Y_Tjs{TNSoH#zLAJD!2{P_Uu z?}5%*pVF}Qd;rZrlk)*I$Budh+5P`md$_zjCSdk%c$>`k|BL}LFdi90A&u-u{|=DuCDf-O+GBFP!K9at=s^f0c9OuUyryI%PZP zR~aC!)UQX#-;VU_>qU6PkE!<^9n$nXv&sUQa-LabNnX*euSA~rSo8H&@<1ZiSIHAa zT77QqHeWLaNP<2yhA1YOk7T}P+_UCul?}2nU#o0I4{SVuCuYvqoC8uZUvrLJU{$}f z<}1Kv&DV?}7e-pP^L1x z-1fU}ntv+DkRth~f(!w{Uy;I+{(w#>_ox1aApleSA432djmN3(DQuqwiUazmi8Ve& ztg&wdPQt0SC_KM59IV{CzL7rf8`I|lr+?npZ|NylTEC@jcv|YWJRb~Uh*$h68BV-y zypqy@C-F*3Gl~iOrS~^IA6HeS`Zfe0i@puPz=rikNriP9ymc-eph_VM3bOsT!T@}+ zXB7q`Cm6I44{wZyQc%eCCTTv%QXoO%VM__n!QZhoI)EY+%C7M$( z?w^kzg@X)B<$b9YXz_iS7ppqHaDpcTROpXdD|pOX!}I>M^pALG)meWU%|MLrE8IEc z)SvIjgPR+)ytL@gZQJvmoCrfe{%^xHrAWQxrAz4@` zIP53m4kZD@0gsJW4FT9<-weSZ2YVyb5N;>+N0tIau{V|yAWJ+xfwJ{X@hKBgXL$6C zAGk1|Ses=%Q)orMWPXO$fC1&1`OZ92qm-=g&|2aNZ$6nA&(|OElbxldc4uv4l?=8W z?}P+o8SjKt>n`$p!pYd}_2ClPZo6NmG)R#BGNqLwg8!QG1=rceTQv^I692WvkxR7W zS=N6sLRtS6T5~KO*WgbGPp5m|%4oRBRy)_vB53F{^b={N1goFOH%mV`2V_A%IY%xr z?5FZRrpBM_p50FiG9<}g2cMCpB)x`r%d}U_AB^)vAz=+vF>&fT;l$&Cq zS@m-j2FMeCx58lL@Y>}+c716o)BE94u$SAPoC6ZEzH*LSWTIbF8#c4PO!9Qi0MT`I$)5@oXF#ricJHH_#*b$%Jf`1;9y*d2B0yEHoXrw};b4kXtj%=@1?ky8~;@=qxuwk$9Ot9BJK4N|Kj%`pDCXJ6`JFp}^itXm**`64GO!4Hz zDfh=f0xJA5kWyft%=Bk^sk=DLFV89G_H+5P{CRHsR+(X!V20KCAbB^uWDG() z$?s1kk8An&DX|^+(3j`m2~VmRo+bU)?_E3|wO8?&KgIL;?f4v>AZ?EN<4M0uGv9u% zQ)Ph^*f(F;X;7>{yWR@Uu<_^XZ3ZJ`W4+B_G_M@uae0}w%`sJ-*!UF9z?S$F%?8QO zFCULHht!xB{uQ?Z4gQtzTE!?_Vh>DRX<-i{4cM>;kydmU-@{0MJL~Hd`{eJx!p%U% z`%7~H80sT|7sk-mM`lD|OMPTU%p@fET-d@N6s|0$^_Kz>i52`v%<;|mmG!v{T-N7? z)(lEU(E8hDeJej%*0+Y%DxTSoV?CziujRwkd_OLEpbhNDB~O%$dH#s%-mh8K)H#a=%!vSU4^7%(E!@`*ebj&|P zwBWpd`0uS5|Gr*tBOEuNNWgv%FoOy5B%e8h$;-9ziqGV?dB@KEfk*>7)_mwEk34@IT*fo&r>y_vcP;BbLu=W)6tArR)`uq;VC$bTb$ql#srcMK3lt#2KMRxq8O{&1e{v@P zOlBTW`#S?X9oUGcQ@Tp9>%nH`CCAE>DPIp2CP>11s4)2#viiAyvon~;2Ti$t0tLv> zPoO|QX8h3SeEd8CXc)inL|g(^-$LaI@XfKTt6bkH9q7<^O85FU_Fw2yETd5~t2?*< zB@g7l{+B#KJGB0cza05ukq^tv{pC6zQGC2ZitWsdv1s+JkG~? zeHgCbwdDS8!2((EcMFz8qP35D9AeK`q!&efYiLb?SUL2^;+6HS{A5|*8d`V7E9zV2 z$)dhBv{vzaeQV$eip}@0Si=g9V*iS?Qi9#Te7$P1e`z~#v445~xOj7Ya?NVtznAr` z@@~7-w+c^D-x^xcH^c+uS@o@E{WFgQ8Ep!?CHq>g|B?r?u>MP)sAp?$^=26^0L|@f zpa2{8Hc$ehjkm_D{bedp&EpMe1`^^8kJ1(t`Cr`N`1TV*P>!?6`hGD<#d;!n^WV1x z9(IoWh~?)wEDmI70p~dh8KRQ+FY2{LYEiEpS^Yp(QeQ?Ug;0{02ye7~;q z;SI1~*ZI<3Os{a4h5TBI zj7BBX%iX@2`UvT2w|$4G;T{Os_O*)jlk_gIIr6u{Zj0!}}pJi0jJ=CY-raN0-kl%49{R^DF ze?Fd8O-Njt<_ir0y^?s^5KM={`x>ghw#mM4P6e{OZ%#Gvh%YUVlnvVTnGu05>oX%- zaJDbrf3RGX5*U%+YyF3U3>o4-6l6#V{P|Od-}?uUOm$3Qc5b>==th0 zn@_3pK#s&yb)G0Q9WUC6)A&apr)Hp<@nY_%2_3N%kBcyqcuMi8xrWEw1zw_G%}|v3 z<#r$%{R)2qnf8wiT&;i93^en;%$5MK{2xAfAN)^3x}Q3YIoh;@8V5#zu?Xj4F19gUuo!fUkgo7t5lT#Qq%2P z7If8|(`$2hOElT0=eL~R636WvtG&7P1RTmwwLF?m70o1)9ocu1*UJyrKZ}z+*SPoT zJKaS8ywhFkuA_hHPGI@-2IuZ|ADndu?Rie`=;cxE(xDsQcJ?8s+}xIWfPdG}i-UCz z=r=sL-Qc#S+qs72p1C;6Qlg+Iogbewqs(WKpPbW+ZF$uF3Ek)CT&!LwVibu2A8$pD zq}TAf|F)%<1~YEvBeB{2M$74yi8^m+t-j(1X2$G!(}ObD*S+nwN1fXuTktL(cJ~@? zz4?Y~9@n*7xoz}z=igfIZlsSprp}CisDRWg=VN}Pc>MX4_xwh@#gR|J?lM2~Js_`X z#E&vFo1uW$H=Q5rSUvvfroWz=$Em1y_%%CQxDMcbbJ0d{J@(%;naJ@sc9X#yZ+g|I&vXis@m_3Yt;jp!v{oOPqv+jM&Cx6T2xd&rlR&+uc+RM-mt-Rgm+ zN@v~0di8HNV?~&r+<(*T95S1h2m4yyn(?#V@$upKRjp_#*v~s;e&!tQLoMA0WyF%3 z6TaGFrGB6Mx!AdnJp9SOaG(Fm0{ePysJx+3D`4Y&Ip zO!u2zg>%k--Z1`2a^t~&HR22_zp=fmnS7MG+Vqx>#}{A9e6{IUhqU7R7TvDCVdi11 zSG{*G&O@!N+%$U3IksW^FL&F(+kgv+A*}<`%)$3Q4oYwT~i|i!657qBEf5q>_vg&A) zeb}#8wex(H;Ui5QFV>5-L~1hcFjlxyne-3VClt)gsaqcGZ^gZzwmUiNdVTAOWq?1| z(%EXFh;w%`!=ms1hrhOHwLABzPXy7A-{}@_eBHamD{w#c;YZx1Z@J%n!TbNk?;N`s` z8DZ+g?^$nw&Gtva43t^qZ?M+Md4Y{Mxad=xKWu$S_G3Ra7x$M~TlP<86|*<%T5+B0 zZuhE|S`=Q>oaQ{qzlqKnF{mc@a^Sl&eO|Xe3_WKOZt*`H+w&^7_sYKi>4dHWdq4Xd zj4#h4|88Riav$rDjWs8g%aQau%!p#YR`YSl#{7i`uVe6#jrmP=;#cO3_iu6m`qY7z z@z%mg{Mhc>v_Cw&i^UA;`r-KZ9@_uqPw%#?-MsuCy8+j0qjLxOe}>T~$L-Kxww^!k zJpQIL^Mb!IeT(^->nc8Kc5(lC?&llcYg8*7zhVA(Gwyr%isAU2w;!?_lJ~4b`-;Tg zN|yAx@6Lh=n)xC5ckhPNl;0zioPT=Pxf8d)LtgDe{P*3Q0sO>gqBj;I`bUiwkM;CT z<6A}B&bK4)G3(uU3G54OHB81pEVvpFvflsL(AbWBKKWv>86tkMj(Yz{x9Rj!-Nc9B zI~(5C^l_+-!pv<8ztIf#fb$1_I{u~g(s)0RuO2U*)5t`23Axl4UhK2yY>v{zkmeh_ z7uYz_X9))1YH7cXkHGg*jwVn0p3dCoIrk#>^S}RIa{c$wXun=3_6j+Mzjeqx+Z}Po zKc2?_vQ9PrrzBD3LSy#fpWiT6KiultGrl<2;l11Z%#rVBbL+5w{)-KtTj4pNH{>mR zx#4G@|F+WKx-u~%Cp9VZZTZ(sMu%tb8OGn%-Q`#3G-~Cs^?Qjt{>8Z%!KJmnr~3?$ z*dVUjI@a=04!7udqR{o*X^c*%7Kgs436I$`9Zh!R$-fek#nzhd+Gn* zEgr%9b^Ry5iOsD4E`I;Qr+w~$$BObgbX)f|#;>#cv1;edCNCg9k*u}H%&g$*!awji zq2xA+PnK(U|H5B2V-~mmmD<#JWxPLq$;1#b3Qz;IJa}d+Mi^yP;9ASio9z7fl<%wI zl@Xo!*XJm~^CqFb-Ca)q&cD(vJ9qng-A~hWm^k-m&V6*xmv;PhdGs3u)jo86d?3HG zO@Boi1(H5?Am!54B*t_c^j4GSijCfk)%>jWCgeLKyNj3`bZD!1W5eVbvRL!S!wym0 zYxSz8Qy<*>?Q3CH*}deKn=wCUduj@P7U%rT=k-rkg}!6lHc>&`A>VIe3XLhn)NHq` zSA+V%xBD4pcL=^g>B8^W4BH4Z)r$0RF89*V^%C3;$>%=Hg>6R(-7hX{s;5Ysl_3;~%r$Q}95~ znN#0TRvg!5yl2jzMRALKjrqGaQsi^O2p&ZGZn!)Hl&R;-Lpv2!7O-F32A!|Yey>OE_o2}zytBQ0<5eU;W(>1hc^6)*Ua HngIU`oA>z@ literal 0 HcmV?d00001 diff --git a/dlangui.visualdproj b/dlangui.visualdproj index 7dd16d7a..45492c93 100644 --- a/dlangui.visualdproj +++ b/dlangui.visualdproj @@ -191,9 +191,6 @@ - - - @@ -266,6 +263,8 @@ + + diff --git a/src/dlangui/platforms/windows/win32drawbuf.d b/src/dlangui/platforms/windows/win32drawbuf.d new file mode 100644 index 00000000..2b8f64a7 --- /dev/null +++ b/src/dlangui/platforms/windows/win32drawbuf.d @@ -0,0 +1,69 @@ +module dlangui.platforms.windows.win32drawbuf; + +version (Windows) { + +import win32.windows; +import dlangui.graphics.drawbuf; + +class Win32ColorDrawBuf : ColorDrawBufBase { + uint * _pixels; + HDC _drawdc; + HBITMAP _drawbmp; + @property HDC dc() { return _drawdc; } + this(int width, int height) { + resize(width, height); + } + override uint * scanLine(int y) { + if (y >= 0 && y < _dy) + return _pixels + _dx * (_dy - 1 - y); + return null; + } + override void clear() { + if (_drawbmp !is null) { + DeleteObject( _drawbmp ); + DeleteObject( _drawdc ); + _pixels = null; + _dx = 0; + _dy = 0; + } + } + override void resize(int width, int height) { + if (width< 0) + width = 0; + if (height < 0) + height = 0; + if (_dx == width && _dy == height) + return; + clear(); + _dx = width; + _dy = height; + if (_dx > 0 && _dy > 0) { + BITMAPINFO bmi; + //memset( &bmi, 0, sizeof(bmi) ); + bmi.bmiHeader.biSize = (bmi.bmiHeader.sizeof); + bmi.bmiHeader.biWidth = _dx; + bmi.bmiHeader.biHeight = _dy; + bmi.bmiHeader.biPlanes = 1; + bmi.bmiHeader.biBitCount = 32; + bmi.bmiHeader.biCompression = BI_RGB; + bmi.bmiHeader.biSizeImage = 0; + bmi.bmiHeader.biXPelsPerMeter = 1024; + bmi.bmiHeader.biYPelsPerMeter = 1024; + bmi.bmiHeader.biClrUsed = 0; + bmi.bmiHeader.biClrImportant = 0; + _drawbmp = CreateDIBSection( NULL, &bmi, DIB_RGB_COLORS, cast(void**)(&_pixels), NULL, 0 ); + _drawdc = CreateCompatibleDC(NULL); + SelectObject(_drawdc, _drawbmp); + } + } + override void fill(uint color) { + int len = _dx * _dy; + for (int i = 0; i < len; i++) + _pixels[i] = color; + } + void drawTo(HDC dc, int x, int y) { + BitBlt(dc, x, y, _dx, _dx, _drawdc, 0, 0, SRCCOPY); + } +} + +} diff --git a/src/dlangui/platforms/windows/win32fonts.d b/src/dlangui/platforms/windows/win32fonts.d new file mode 100644 index 00000000..944e7250 --- /dev/null +++ b/src/dlangui/platforms/windows/win32fonts.d @@ -0,0 +1,479 @@ +module dlangui.platforms.windows.win32fonts; + +version (Windows) { + +import win32.windows; +import dlangui.graphics.fonts; +import dlangui.platforms.windows.win32drawbuf; +import std.string; +import std.utf; + +//auto toUTF16z(S)(S s) +//{ + //return toUTFz!(const(wchar)*)(s); +//} + +struct FontDef { + immutable FontFamily _family; + immutable string _face; + immutable ubyte _pitchAndFamily; + @property FontFamily family() { return _family; } + @property string face() { return _face; } + @property ubyte pitchAndFamily() { return _pitchAndFamily; } + this(FontFamily family, string face, ubyte putchAndFamily) { + _family = family; + _face = face; + _pitchAndFamily = pitchAndFamily; + } +} + + +/** +* Font implementation based on Win32 API system fonts. +*/ +class Win32Font : Font { + HFONT _hfont; + int _size; + int _height; + int _weight; + int _baseline; + bool _italic; + string _face; + FontFamily _family; + LOGFONTA _logfont; + Win32ColorDrawBuf _drawbuf; + GlyphCache _glyphCache; + + /// need to call create() after construction to initialize font + this() { + } + + /// do cleanup + ~this() { + clear(); + } + + /// cleanup resources + override void clear() { + if (_hfont !is null) + { + DeleteObject(_hfont); + _hfont = NULL; + _height = 0; + _baseline = 0; + _size = 0; + } + if (_drawbuf !is null) { + destroy(_drawbuf); + _drawbuf = null; + } + } + + uint getGlyphIndex(dchar code) + { + if (_drawbuf is null) + return 0; + wchar[2] s; + wchar[2] g; + s[0] = cast(wchar)code; + s[1] = 0; + g[0] = 0; + GCP_RESULTSW gcp; + gcp.lStructSize = GCP_RESULTSW.sizeof; + gcp.lpOutString = null; + gcp.lpOrder = null; + gcp.lpDx = null; + gcp.lpCaretPos = null; + gcp.lpClass = null; + gcp.lpGlyphs = g.ptr; + gcp.nGlyphs = 2; + gcp.nMaxFit = 2; + + DWORD res = GetCharacterPlacementW( + _drawbuf.dc, s.ptr, 1, + 1000, + &gcp, + 0 + ); + if (!res) + return 0; + return g[0]; + } + + override Glyph * getCharGlyph(dchar ch) { + uint glyphIndex = getGlyphIndex(ch); + if (!glyphIndex) + return null; + if (glyphIndex >= 0xFFFF) + return null; + Glyph * found = _glyphCache.find(cast(ushort)glyphIndex); + if (found !is null) + return found; + GLYPHMETRICS metrics; + + MAT2 identity = { {0,1}, {0,0}, {0,0}, {0,1} }; + uint res; + res = GetGlyphOutlineW( _drawbuf.dc, cast(wchar)ch, + GGO_METRICS, + &metrics, + 0, + null, + &identity ); + if (res==GDI_ERROR) + return null; + int gs = GetGlyphOutlineW( _drawbuf.dc, cast(wchar)ch, + GGO_GRAY8_BITMAP, //GGO_METRICS + &metrics, + 0, + NULL, + &identity ); + if (gs >= 0x10000 || gs < 0) + return null; + + Glyph g; + g.blackBoxX = cast(ubyte)metrics.gmBlackBoxX; + g.blackBoxY = cast(ubyte)metrics.gmBlackBoxY; + g.originX = cast(byte)metrics.gmptGlyphOrigin.x; + g.originY = cast(byte)metrics.gmptGlyphOrigin.y; + g.width = cast(ubyte)metrics.gmCellIncX; + g.glyphIndex = cast(ushort)glyphIndex; + + if (g.blackBoxX>0 && g.blackBoxY>0) + { + g.glyph = new ubyte[g.blackBoxX * g.blackBoxY]; + if (gs>0) + { + ubyte glyph[] = new ubyte[gs]; + res = GetGlyphOutlineW( _drawbuf.dc, cast(wchar)ch, + GGO_GRAY8_BITMAP, //GGO_METRICS + &metrics, + gs, + glyph.ptr, + &identity ); + if (res==GDI_ERROR) + { + return null; + } + int glyph_row_size = (g.blackBoxX + 3) / 4 * 4; + ubyte * src = glyph.ptr; + ubyte * dst = g.glyph.ptr; + for (int y = 0; y < g.blackBoxY; y++) + { + for (int x = 0; x < g.blackBoxX; x++) + { + ubyte b = src[x]; + if (b>=64) + b = 63; + b = (b<<2) & 0xFC; + dst[x] = b; + } + src += glyph_row_size; + dst += g.blackBoxX; + } + } + else + { + // empty glyph + for (int i = g.blackBoxX * g.blackBoxY - 1; i >= 0; i--) + g.glyph[i] = 0; + } + } + // found! + return _glyphCache.put(cast(ushort)glyphIndex, &g); + } + + // draw text string to buffer + override void drawText(DrawBuf buf, int x, int y, const dchar[] text, uint color) { + int[] widths; + int charsMeasured = measureText(text, widths, 3000); + for (int i = 0; i < charsMeasured; i++) { + int xx = (i > 0) ? widths[i - 1] : 0; + Glyph * glyph = getCharGlyph(text[i]); + if (glyph is null) + continue; + if ( glyph.blackBoxX && glyph.blackBoxY ) { + buf.drawGlyph( x + xx + glyph.originX, + y + _baseline - glyph.originY, + glyph.glyph, + glyph.blackBoxX, + glyph.blackBoxY, + color); + } + } + } + + override int measureText(const dchar[] text, ref int[] widths, int maxWidth) { + if (_hfont is null || _drawbuf is null || text.length == 0) + return 0; + wstring utf16text = toUTF16(text); + const wchar * pstr = utf16text.ptr; + uint len = cast(uint)utf16text.length; + GCP_RESULTSW gcpres; + gcpres.lStructSize = gcpres.sizeof; + if (widths.length < len + 1) + widths.length = len + 1; + gcpres.lpDx = widths.ptr; + gcpres.nMaxFit = len; + gcpres.nGlyphs = len; + uint res = GetCharacterPlacementW( + _drawbuf.dc, + pstr, + len, + maxWidth, + &gcpres, + GCP_MAXEXTENT); //|GCP_USEKERNING + if (!res) { + widths[0] = 0; + return 0; + } + uint measured = gcpres.nMaxFit; + int total = 0; + for (int i = 0; i < measured; i++) { + int w = widths[i]; + total += w; + widths[i] = total; + } + return measured; + } + + bool create(FontDef * def, int size, int weight, bool italic) { + if (!isNull()) + clear(); + LOGFONTA lf; + lf.lfCharSet = ANSI_CHARSET; //DEFAULT_CHARSET; + lf.lfFaceName[0..def.face.length] = def.face; + lf.lfFaceName[def.face.length] = 0; + lf.lfHeight = -size; + lf.lfItalic = italic; + lf.lfOutPrecision = OUT_TT_ONLY_PRECIS; + lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; + lf.lfQuality = ANTIALIASED_QUALITY; + lf.lfPitchAndFamily = def.pitchAndFamily; + _hfont = CreateFontIndirectA(&lf); + _drawbuf = new Win32ColorDrawBuf(1, 1); + SelectObject(_drawbuf.dc, _hfont); + + TEXTMETRICW tm; + GetTextMetricsW(_drawbuf.dc, &tm); + + _size = size; + _height = tm.tmHeight; + _baseline = _height - tm.tmDescent; + _weight = weight; + _italic = italic; + _face = def.face; + _family = def.family; + Log.d("Created font ", _face, " ", _size); + return true; + } + + // clear usage flags for all entries + override void checkpoint() { + _glyphCache.checkpoint(); + } + + // removes entries not used after last call of checkpoint() or cleanup() + override void cleanup() { + _glyphCache.cleanup(); + } + + @property override int size() { return _size; } + @property override int height() { return _height; } + @property override int weight() { return _weight; } + @property override int baseline() { return _baseline; } + @property override bool italic() { return _italic; } + @property override string face() { return _face; } + @property override FontFamily family() { return _family; } + @property override bool isNull() { return _hfont is null; } +} + + +/** +* Font manager implementation based on Win32 API system fonts. +*/ +class Win32FontManager : FontManager { + FontList _activeFonts; + FontDef[] _fontFaces; + FontDef*[string] _faceByName; + + /// initialize in constructor + this() { + instance = this; + init(); + } + + /// initialize font manager by enumerating of system fonts + bool init() { + Log.i("Win32FontManager.init()"); + Win32ColorDrawBuf drawbuf = new Win32ColorDrawBuf(1,1); + LOGFONTA lf; + lf.lfCharSet = ANSI_CHARSET; //DEFAULT_CHARSET; + lf.lfFaceName[0] = 0; + HDC dc = drawbuf.dc; + int res = + EnumFontFamiliesExA( + dc, // handle to DC + &lf, // font information + &LVWin32FontEnumFontFamExProc, // callback function (FONTENUMPROC) + cast(LPARAM)(cast(void*)this), // additional data + 0U // not used; must be 0 + ); + destroy(drawbuf); + Log.i("Found ", _fontFaces.length, " font faces"); + return res!=0; + } + + /// for returning of not found font + FontRef _emptyFontRef; + + /// get font by properties + override ref FontRef getFont(int size, int weight, bool italic, FontFamily family, string face) { + Log.i("getFont()"); + FontDef * def = findFace(family, face); + if (def !is null) { + int index = _activeFonts.find(size, weight, italic, def.family, def.face); + if (index >= 0) + return _activeFonts.get(index); + Log.d("Creating new font"); + Win32Font item = new Win32Font(); + if (!item.create(def, size, weight, italic)) + return _emptyFontRef; + Log.d("Adding to list of active fonts"); + return _activeFonts.add(item); + } else { + return _emptyFontRef; + } + } + + /// find font face definition by family only (try to get one of defaults for family if possible) + FontDef * findFace(FontFamily family) { + FontDef * res = null; + switch(family) { + case FontFamily.SansSerif: + res = findFace("Arial"); if (res !is null) return res; + res = findFace("Tahoma"); if (res !is null) return res; + res = findFace("Calibri"); if (res !is null) return res; + res = findFace("Verdana"); if (res !is null) return res; + res = findFace("Lucida Sans"); if (res !is null) return res; + break; + case FontFamily.Serif: + res = findFace("Times New Roman"); if (res !is null) return res; + res = findFace("Georgia"); if (res !is null) return res; + res = findFace("Century Schoolbook"); if (res !is null) return res; + res = findFace("Bookman Old Style"); if (res !is null) return res; + break; + case FontFamily.MonoSpace: + res = findFace("Courier New"); if (res !is null) return res; + res = findFace("Lucida Console"); if (res !is null) return res; + res = findFace("Century Schoolbook"); if (res !is null) return res; + res = findFace("Bookman Old Style"); if (res !is null) return res; + break; + case FontFamily.Cursive: + res = findFace("Comic Sans MS"); if (res !is null) return res; + res = findFace("Lucida Handwriting"); if (res !is null) return res; + res = findFace("Monotype Corsiva"); if (res !is null) return res; + break; + default: + break; + } + return null; + } + + /// find font face definition by face only + FontDef * findFace(string face) { + if (face.length == 0) + return null; + if (face in _faceByName) + return _faceByName[face]; + return null; + } + + /// find font face definition by family and face + FontDef * findFace(FontFamily family, string face) { + // by face only + FontDef * res = findFace(face); + if (res !is null) + return res; + // best for family + res = findFace(family); + if (res !is null) + return res; + for (int i = 0; i < _fontFaces.length; i++) { + res = &_fontFaces[i]; + if (res.family == family) + return res; + } + res = findFace(FontFamily.SansSerif); + if (res !is null) + return res; + return &_fontFaces[0]; + } + + /// register enumerated font + bool registerFont(FontFamily family, string fontFace, ubyte pitchAndFamily) { + Log.d("registerFont(", family, ",", fontFace, ")"); + _fontFaces ~= FontDef(family, fontFace, pitchAndFamily); + _faceByName[fontFace] = &_fontFaces[$ - 1]; + return true; + } + + /// clear usage flags for all entries + override void checkpoint() { + _activeFonts.checkpoint(); + } + + /// removes entries not used after last call of checkpoint() or cleanup() + override void cleanup() { + _activeFonts.cleanup(); + //_list.cleanup(); + } +} + +string fromStringz(const(char[]) s) { + int i = 0; + while(s[i]) + i++; + return cast(string)(s[0..i].dup); +} + +FontFamily pitchAndFamilyToFontFamily(ubyte flags) { + if ((flags & FF_DECORATIVE) == FF_DECORATIVE) + return FontFamily.Fantasy; + else if ((flags & (FIXED_PITCH)) != 0) // | | MONO_FONT + return FontFamily.MonoSpace; + else if ((flags & (FF_ROMAN)) != 0) + return FontFamily.Serif; + else if ((flags & (FF_SCRIPT)) != 0) + return FontFamily.Cursive; + return FontFamily.SansSerif; +} + +// definition +extern(Windows) { + int LVWin32FontEnumFontFamExProc( + const (LOGFONTA) *lf, // logical-font data + const (TEXTMETRICA) *lpntme, // physical-font data + //ENUMLOGFONTEX *lpelfe, // logical-font data + //NEWTEXTMETRICEX *lpntme, // physical-font data + DWORD fontType, // type of font + LPARAM lParam // application-defined data + ) + { + // + //Log.d("LVWin32FontEnumFontFamExProc fontType=", fontType); + if (fontType == TRUETYPE_FONTTYPE) + { + void * p = cast(void*)lParam; + Win32FontManager fontman = cast(Win32FontManager)p; + string face = fromStringz(lf.lfFaceName); + FontFamily family = pitchAndFamilyToFontFamily(lf.lfPitchAndFamily); + if (face.length < 2 || face[0] == '@') + return 1; + //Log.d("face:", face); + fontman.registerFont(family, face, lf.lfPitchAndFamily); + } + return 1; + } +} + +} diff --git a/src/dlangui/platforms/windows/winapp.d b/src/dlangui/platforms/windows/winapp.d index 15ce9795..758314b8 100644 --- a/src/dlangui/platforms/windows/winapp.d +++ b/src/dlangui/platforms/windows/winapp.d @@ -9,6 +9,8 @@ import std.utf; import std.stdio; import std.algorithm; import dlangui.platforms.common.platform; +import dlangui.platforms.windows.win32fonts; +import dlangui.platforms.windows.win32drawbuf; import dlangui.graphics.drawbuf; import dlangui.graphics.fonts; import dlangui.core.logger; @@ -17,468 +19,6 @@ pragma(lib, "gdi32.lib"); pragma(lib, "user32.lib"); pragma(lib, "libpng15.lib"); -struct FontDef { - immutable FontFamily _family; - immutable string _face; - immutable ubyte _pitchAndFamily; - @property FontFamily family() { return _family; } - @property string face() { return _face; } - @property ubyte pitchAndFamily() { return _pitchAndFamily; } - this(FontFamily family, string face, ubyte putchAndFamily) { - _family = family; - _face = face; - _pitchAndFamily = pitchAndFamily; - } -} - -/** -* Font implementation based on Win32 API system fonts. -*/ -class Win32Font : Font { - HFONT _hfont; - int _size; - int _height; - int _weight; - int _baseline; - bool _italic; - string _face; - FontFamily _family; - LOGFONTA _logfont; - Win32ColorDrawBuf _drawbuf; - GlyphCache _glyphCache; - - /// need to call create() after construction to initialize font - this() { - } - - /// do cleanup - ~this() { - clear(); - } - - /// cleanup resources - override void clear() { - if (_hfont !is null) - { - DeleteObject(_hfont); - _hfont = NULL; - _height = 0; - _baseline = 0; - _size = 0; - } - if (_drawbuf !is null) { - destroy(_drawbuf); - _drawbuf = null; - } - } - - uint getGlyphIndex(dchar code) - { - if (_drawbuf is null) - return 0; - wchar[2] s; - wchar[2] g; - s[0] = cast(wchar)code; - s[1] = 0; - g[0] = 0; - GCP_RESULTSW gcp; - gcp.lStructSize = GCP_RESULTSW.sizeof; - gcp.lpOutString = null; - gcp.lpOrder = null; - gcp.lpDx = null; - gcp.lpCaretPos = null; - gcp.lpClass = null; - gcp.lpGlyphs = g.ptr; - gcp.nGlyphs = 2; - gcp.nMaxFit = 2; - - DWORD res = GetCharacterPlacementW( - _drawbuf.dc, s.ptr, 1, - 1000, - &gcp, - 0 - ); - if (!res) - return 0; - return g[0]; - } - - override Glyph * getCharGlyph(dchar ch) { - uint glyphIndex = getGlyphIndex(ch); - if (!glyphIndex) - return null; - if (glyphIndex >= 0xFFFF) - return null; - Glyph * found = _glyphCache.find(cast(ushort)glyphIndex); - if (found !is null) - return found; - GLYPHMETRICS metrics; - - MAT2 identity = { {0,1}, {0,0}, {0,0}, {0,1} }; - uint res; - res = GetGlyphOutlineW( _drawbuf.dc, cast(wchar)ch, - GGO_METRICS, - &metrics, - 0, - null, - &identity ); - if (res==GDI_ERROR) - return null; - int gs = GetGlyphOutlineW( _drawbuf.dc, cast(wchar)ch, - GGO_GRAY8_BITMAP, //GGO_METRICS - &metrics, - 0, - NULL, - &identity ); - if (gs >= 0x10000 || gs < 0) - return null; - - Glyph g; - g.blackBoxX = cast(ubyte)metrics.gmBlackBoxX; - g.blackBoxY = cast(ubyte)metrics.gmBlackBoxY; - g.originX = cast(byte)metrics.gmptGlyphOrigin.x; - g.originY = cast(byte)metrics.gmptGlyphOrigin.y; - g.width = cast(ubyte)metrics.gmCellIncX; - g.glyphIndex = cast(ushort)glyphIndex; - - if (g.blackBoxX>0 && g.blackBoxY>0) - { - g.glyph = new ubyte[g.blackBoxX * g.blackBoxY]; - if (gs>0) - { - ubyte glyph[] = new ubyte[gs]; - res = GetGlyphOutlineW( _drawbuf.dc, cast(wchar)ch, - GGO_GRAY8_BITMAP, //GGO_METRICS - &metrics, - gs, - glyph.ptr, - &identity ); - if (res==GDI_ERROR) - { - return null; - } - int glyph_row_size = (g.blackBoxX + 3) / 4 * 4; - ubyte * src = glyph.ptr; - ubyte * dst = g.glyph.ptr; - for (int y = 0; y < g.blackBoxY; y++) - { - for (int x = 0; x < g.blackBoxX; x++) - { - ubyte b = src[x]; - if (b>=64) - b = 63; - b = (b<<2) & 0xFC; - dst[x] = b; - } - src += glyph_row_size; - dst += g.blackBoxX; - } - } - else - { - // empty glyph - for (int i = g.blackBoxX * g.blackBoxY - 1; i >= 0; i--) - g.glyph[i] = 0; - } - } - // found! - return _glyphCache.put(cast(ushort)glyphIndex, &g); - } - - // draw text string to buffer - override void drawText(DrawBuf buf, int x, int y, const dchar[] text, uint color) { - int[] widths; - int charsMeasured = measureText(text, widths, 3000); - for (int i = 0; i < charsMeasured; i++) { - int xx = (i > 0) ? widths[i - 1] : 0; - Glyph * glyph = getCharGlyph(text[i]); - if (glyph is null) - continue; - if ( glyph.blackBoxX && glyph.blackBoxY ) { - buf.drawGlyph( x + xx + glyph.originX, - y + _baseline - glyph.originY, - glyph.glyph, - glyph.blackBoxX, - glyph.blackBoxY, - color); - } - } - } - - override int measureText(const dchar[] text, ref int[] widths, int maxWidth) { - if (_hfont is null || _drawbuf is null || text.length == 0) - return 0; - wstring utf16text = toUTF16(text); - const wchar * pstr = utf16text.ptr; - uint len = cast(uint)utf16text.length; - GCP_RESULTSW gcpres; - gcpres.lStructSize = gcpres.sizeof; - if (widths.length < len + 1) - widths.length = len + 1; - gcpres.lpDx = widths.ptr; - gcpres.nMaxFit = len; - gcpres.nGlyphs = len; - uint res = GetCharacterPlacementW( - _drawbuf.dc, - pstr, - len, - maxWidth, - &gcpres, - GCP_MAXEXTENT); //|GCP_USEKERNING - if (!res) { - widths[0] = 0; - return 0; - } - uint measured = gcpres.nMaxFit; - int total = 0; - for (int i = 0; i < measured; i++) { - int w = widths[i]; - total += w; - widths[i] = total; - } - return measured; - } - - bool create(FontDef * def, int size, int weight, bool italic) { - if (!isNull()) - clear(); - LOGFONTA lf; - lf.lfCharSet = ANSI_CHARSET; //DEFAULT_CHARSET; - lf.lfFaceName[0..def.face.length] = def.face; - lf.lfFaceName[def.face.length] = 0; - lf.lfHeight = -size; - lf.lfItalic = italic; - lf.lfOutPrecision = OUT_TT_ONLY_PRECIS; - lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; - lf.lfQuality = ANTIALIASED_QUALITY; - lf.lfPitchAndFamily = def.pitchAndFamily; - _hfont = CreateFontIndirectA(&lf); - _drawbuf = new Win32ColorDrawBuf(1, 1); - SelectObject(_drawbuf.dc, _hfont); - - TEXTMETRICW tm; - GetTextMetricsW(_drawbuf.dc, &tm); - - _size = size; - _height = tm.tmHeight; - _baseline = _height - tm.tmDescent; - _weight = weight; - _italic = italic; - _face = def.face; - _family = def.family; - Log.d("Created font ", _face, " ", _size); - return true; - } - - // clear usage flags for all entries - override void checkpoint() { - _glyphCache.checkpoint(); - } - - // removes entries not used after last call of checkpoint() or cleanup() - override void cleanup() { - _glyphCache.cleanup(); - } - - @property override int size() { return _size; } - @property override int height() { return _height; } - @property override int weight() { return _weight; } - @property override int baseline() { return _baseline; } - @property override bool italic() { return _italic; } - @property override string face() { return _face; } - @property override FontFamily family() { return _family; } - @property override bool isNull() { return _hfont is null; } -} - - -/** - * Font manager implementation based on Win32 API system fonts. - */ -class Win32FontManager : FontManager { - FontList _activeFonts; - FontDef[] _fontFaces; - FontDef*[string] _faceByName; - - /// initialize in constructor - this() { - instance = this; - init(); - } - - /// initialize font manager by enumerating of system fonts - bool init() { - Log.i("Win32FontManager.init()"); - Win32ColorDrawBuf drawbuf = new Win32ColorDrawBuf(1,1); - LOGFONTA lf; - lf.lfCharSet = ANSI_CHARSET; //DEFAULT_CHARSET; - lf.lfFaceName[0] = 0; - HDC dc = drawbuf.dc; - int res = - EnumFontFamiliesExA( - dc, // handle to DC - &lf, // font information - &LVWin32FontEnumFontFamExProc, // callback function (FONTENUMPROC) - cast(LPARAM)(cast(void*)this), // additional data - 0U // not used; must be 0 - ); - destroy(drawbuf); - Log.i("Found ", _fontFaces.length, " font faces"); - return res!=0; - } - - /// for returning of not found font - FontRef _emptyFontRef; - - /// get font by properties - override ref FontRef getFont(int size, int weight, bool italic, FontFamily family, string face) { - Log.i("getFont()"); - FontDef * def = findFace(family, face); - if (def !is null) { - int index = _activeFonts.find(size, weight, italic, def.family, def.face); - if (index >= 0) - return _activeFonts.get(index); - Log.d("Creating new font"); - Win32Font item = new Win32Font(); - if (!item.create(def, size, weight, italic)) - return _emptyFontRef; - Log.d("Adding to list of active fonts"); - return _activeFonts.add(item); - } else { - return _emptyFontRef; - } - } - - /// find font face definition by family only (try to get one of defaults for family if possible) - FontDef * findFace(FontFamily family) { - FontDef * res = null; - switch(family) { - case FontFamily.SansSerif: - res = findFace("Arial"); if (res !is null) return res; - res = findFace("Tahoma"); if (res !is null) return res; - res = findFace("Calibri"); if (res !is null) return res; - res = findFace("Verdana"); if (res !is null) return res; - res = findFace("Lucida Sans"); if (res !is null) return res; - break; - case FontFamily.Serif: - res = findFace("Times New Roman"); if (res !is null) return res; - res = findFace("Georgia"); if (res !is null) return res; - res = findFace("Century Schoolbook"); if (res !is null) return res; - res = findFace("Bookman Old Style"); if (res !is null) return res; - break; - case FontFamily.MonoSpace: - res = findFace("Courier New"); if (res !is null) return res; - res = findFace("Lucida Console"); if (res !is null) return res; - res = findFace("Century Schoolbook"); if (res !is null) return res; - res = findFace("Bookman Old Style"); if (res !is null) return res; - break; - case FontFamily.Cursive: - res = findFace("Comic Sans MS"); if (res !is null) return res; - res = findFace("Lucida Handwriting"); if (res !is null) return res; - res = findFace("Monotype Corsiva"); if (res !is null) return res; - break; - default: - break; - } - return null; - } - - /// find font face definition by face only - FontDef * findFace(string face) { - if (face.length == 0) - return null; - if (face in _faceByName) - return _faceByName[face]; - return null; - } - - /// find font face definition by family and face - FontDef * findFace(FontFamily family, string face) { - // by face only - FontDef * res = findFace(face); - if (res !is null) - return res; - // best for family - res = findFace(family); - if (res !is null) - return res; - for (int i = 0; i < _fontFaces.length; i++) { - res = &_fontFaces[i]; - if (res.family == family) - return res; - } - res = findFace(FontFamily.SansSerif); - if (res !is null) - return res; - return &_fontFaces[0]; - } - - /// register enumerated font - bool registerFont(FontFamily family, string fontFace, ubyte pitchAndFamily) { - Log.d("registerFont(", family, ",", fontFace, ")"); - _fontFaces ~= FontDef(family, fontFace, pitchAndFamily); - _faceByName[fontFace] = &_fontFaces[$ - 1]; - return true; - } - - /// clear usage flags for all entries - override void checkpoint() { - _activeFonts.checkpoint(); - } - - /// removes entries not used after last call of checkpoint() or cleanup() - override void cleanup() { - _activeFonts.cleanup(); - //_list.cleanup(); - } -} - -string fromStringz(const(char[]) s) { - int i = 0; - while(s[i]) - i++; - return cast(string)(s[0..i].dup); -} - -FontFamily pitchAndFamilyToFontFamily(ubyte flags) { - if ((flags & FF_DECORATIVE) == FF_DECORATIVE) - return FontFamily.Fantasy; - else if ((flags & (FIXED_PITCH)) != 0) // | | MONO_FONT - return FontFamily.MonoSpace; - else if ((flags & (FF_ROMAN)) != 0) - return FontFamily.Serif; - else if ((flags & (FF_SCRIPT)) != 0) - return FontFamily.Cursive; - return FontFamily.SansSerif; -} - -// definition -extern(Windows) { - int LVWin32FontEnumFontFamExProc( - const (LOGFONTA) *lf, // logical-font data - const (TEXTMETRICA) *lpntme, // physical-font data - //ENUMLOGFONTEX *lpelfe, // logical-font data - //NEWTEXTMETRICEX *lpntme, // physical-font data - DWORD fontType, // type of font - LPARAM lParam // application-defined data - ) - { - // - //Log.d("LVWin32FontEnumFontFamExProc fontType=", fontType); - if (fontType == TRUETYPE_FONTTYPE) - { - void * p = cast(void*)lParam; - Win32FontManager fontman = cast(Win32FontManager)p; - string face = fromStringz(lf.lfFaceName); - FontFamily family = pitchAndFamilyToFontFamily(lf.lfPitchAndFamily); - if (face.length < 2 || face[0] == '@') - return 1; - //Log.d("face:", face); - fontman.registerFont(family, face, lf.lfPitchAndFamily); - } - return 1; - } -} - extern (C) int UIAppMain(); immutable WIN_CLASS_NAME = "DLANGUI_APP"; @@ -572,11 +112,6 @@ class Win32Platform : Platform { } } -auto toUTF16z(S)(S s) -{ - return toUTFz!(const(wchar)*)(s); -} - extern (Windows) int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) @@ -625,103 +160,6 @@ int myWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int return UIAppMain(); } -class Win32ColorDrawBuf : ColorDrawBufBase { - uint * _pixels; - HDC _drawdc; - HBITMAP _drawbmp; - @property HDC dc() { return _drawdc; } - this(int width, int height) { - resize(width, height); - } - override uint * scanLine(int y) { - if (y >= 0 && y < _dy) - return _pixels + _dx * (_dy - 1 - y); - return null; - } - override void clear() { - if (_drawbmp !is null) { - DeleteObject( _drawbmp ); - DeleteObject( _drawdc ); - _pixels = null; - _dx = 0; - _dy = 0; - } - } - override void resize(int width, int height) { - if (width< 0) - width = 0; - if (height < 0) - height = 0; - if (_dx == width && _dy == height) - return; - clear(); - _dx = width; - _dy = height; - if (_dx > 0 && _dy > 0) { - BITMAPINFO bmi; - //memset( &bmi, 0, sizeof(bmi) ); - bmi.bmiHeader.biSize = (bmi.bmiHeader.sizeof); - bmi.bmiHeader.biWidth = _dx; - bmi.bmiHeader.biHeight = _dy; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = 32; - bmi.bmiHeader.biCompression = BI_RGB; - bmi.bmiHeader.biSizeImage = 0; - bmi.bmiHeader.biXPelsPerMeter = 1024; - bmi.bmiHeader.biYPelsPerMeter = 1024; - bmi.bmiHeader.biClrUsed = 0; - bmi.bmiHeader.biClrImportant = 0; - _drawbmp = CreateDIBSection( NULL, &bmi, DIB_RGB_COLORS, cast(void**)(&_pixels), NULL, 0 ); - _drawdc = CreateCompatibleDC(NULL); - SelectObject(_drawdc, _drawbmp); - } - } - override void fill(uint color) { - int len = _dx * _dy; - for (int i = 0; i < len; i++) - _pixels[i] = color; - } - void drawTo(HDC dc, int x, int y) { - BitBlt(dc, x, y, _dx, _dx, _drawdc, 0, 0, SRCCOPY); - } -} - -//void drawBuf2DC(HDC dc, int x, int y, DrawBuf buf) -//{ -// uint * drawpixels; -// HDC drawdc; -// HBITMAP drawbmp; -// -// int buf_width = buf.width(); -// int bytesPerRow = buf_width * 4; -// BITMAPINFO bmi; -// //memset( &bmi, 0, sizeof(bmi) ); -// bmi.bmiHeader.biSize = (bmi.bmiHeader.sizeof); -// bmi.bmiHeader.biWidth = buf_width; -// bmi.bmiHeader.biHeight = buf.height; -// bmi.bmiHeader.biPlanes = 1; -// bmi.bmiHeader.biBitCount = 32; -// bmi.bmiHeader.biCompression = BI_RGB; -// bmi.bmiHeader.biSizeImage = 0; -// bmi.bmiHeader.biXPelsPerMeter = 1024; -// bmi.bmiHeader.biYPelsPerMeter = 1024; -// bmi.bmiHeader.biClrUsed = 0; -// bmi.bmiHeader.biClrImportant = 0; -// drawbmp = CreateDIBSection( NULL, &bmi, DIB_RGB_COLORS, cast(void**)(&drawpixels), NULL, 0 ); -// drawdc = CreateCompatibleDC(NULL); -// SelectObject(drawdc, drawbmp); -// for (int yy=0; yy < buf.height; yy++) -// { -// uint * src = buf.scanLine(yy); -// uint * dst = drawpixels + (buf.height - 1 - yy) * buf.width; -// for (int xx = 0; xx < buf_width; xx++) -// dst[xx] = src[xx]; -// } -// BitBlt( dc, x, y, buf_width, buf.height, drawdc, 0, 0, SRCCOPY); -// DeleteObject( drawbmp ); -// DeleteObject( drawdc ); -//} - extern(Windows) LRESULT WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)