Show older

spoilers about the meaning of `i686-w64-mingw32-gcc-win32` 

  • i686 is the target archiecture
  • w64-mingw32 refers to the mingw-w64 fork of mingw, a gcc distribution for targeting win32; as the name suggests the fork was originally to add 64-bit support
  • win32 (as opposed to posix) is the threading model

🎶 Perfect. Please move quickly to the chamber-lock, as the effects of prolonged exposure to the button are not part of this test.

okay here's what I spent all day on: blorbobar!™

blorbobar!™ it's the hot new utility for your windows install! blorbobar!™

I got transparency working for Start Menu icons!! >:)

the trick is to set hbmpItem to HBMMENU_CALLBACK and then draw the icon yourself (with DrawIconEx) instead of using a bitmap!

I also fixed the spacing between the icon and text (b[0] = L' '; strcpy(b+1,a);… ^^;)

alt text corrections:

  • the icon next to “Run…” is the little pixel art of a wine glass
  • “respective” not “respect”

I have discovered that the spacing of the text on Start Menu icons differs between at least these three Windows versions and now I will never know peace

I am not going to check more versions I don't want to worsen the feeling that no spacing is correct

æsthetically I prefer a much narrower spacing but I have realised that the wide gap Microsoft put between the icon and text makes it easier for your brain to separate them when trying to scan through the titles

🎉 just got our* first commit merged into upstream WINE!! Start Menu icons are on master now

it'll be fun if the loss32 PoC ships a version of WINE that has zero non-upstream content eheheh

* under our legal name because of WINE's real names policy, sigh

writing COM code for the first time

this is a COBJMACROS appreciation post
❤️❤️❤️COBJMACROS❤️❤️❤️

forced to write C code that manually accesses a specific vtable member… what am I now, a decompiler?

local idiot owns self by passing wide character string where narrow character string expected, gets confused by mojibake

LOCAL IDIOT OWNS SELF BY CONSTRUCTING VTABLE FUNCTION POINTER WITH INCORRECT CALLING CONVENTION AND THEN WONDERING WHY THE STACK IS CORRUPTED

if I say “I am enjoying writing lots of Win32 COM code in C involving the Windows Shell” would you think I've been kidnapped

going back through time and begging Microsoft engineers to add some way to test if an HBITMAP has an alpha channel

are WINE's bundled EXEs and DLLs real? depends!

if you build with MingW available: yes! and many of the apps work on Windows!

if you don't: nope, they're stubs and the real implementations live in .so files

they differ in filesize and the signature you can see in a hex editor

oh wow, WINE's version of Windows Explorer runs under Windows 10! I guess that makes sense as I think (in its file-browsing capacity) is mostly a wrapper around an IShellView OLE object

but its toolbar and location bar (right) get hidden by the object's toolbar (left), ahah

we now have 6 open merge requests for WINE…

I think I should let myself slow down for a little bit

if you think our work on WINE/loss32 is cool: https://github.com/sponsors/hikari-no-yume

it's a common misconception that the Windows GDI stands for “Graphics Device Interface”. it actually stands for God Damn It, because its arcanities will make you want to kill yourself

anyway after seven long hours I have finally managed to write code that successfully tests combining of an alpha-transparent shortcut overlay with a non-alpha-transparent icon without smashing the stack

oh god rgba(255, 0, 0, 255) gets alpha-blended on Windows XP as rgb(254, 0, 0)

I need to add an epsilon 😭

this is almost certainly because the fast way to implement alpha-blending is (r*a)>>8 rather than (r*a)/255

got the bit-endianness of a bitmap format wrong again award

I discovered the Win32 DrawEdge function and took the opportunity to make the WINE taskbar feel a little comfier :)

before / after

I finally figured out the wineserver protocol and shared memory(!) dance needed to synchronise changes in the “work area” rectangle between different WINE processes, which is the difficult part of getting maximised windows to not cover the taskbar, yaaaaay

a maximised window that doesn't cover the taskbar or appbars!! finally!! (okay it overhangs slightly but I think that's just WINE not supporting always-on-top windows yet)

turns out WINE's IShellBrowser (the COM widget that gives you a folder browser) is way more complete than you'd think it is from looking at how WINE's own code makes use of it. Open and Save dialogs and WINE explorer lack a big icons button, but it supports big icons!

also for god knows how long now we'd been thinking of slapping an IShellBrowser on the desktop to get desktop icons. but we'd figured it might not work because of the transparent background and lack of scrollbars

lol. lmao.

it's Win32

they documented the APIs for everything!

it never ceases to amaze me how there's officially documented Win32 APIs for many things you'd only need when trying to replace fundamental OS components. it's the antithesis of Apple's attitude where they claim an Apostolic Mandate over the user experience. they would never

uhhhh I typed IShellBrowser but I meant IExplorerBrowser? but the former is also an interface that exists. don't ask me what the difference is

there's no place like ::{20d04fe0-3aea-1069-a2d8-08002b30309d}

Follow

@hikari Why do I have a feeling I should put this into the location bar of Windows Explorer?

Sign in to participate in the conversation
Computer Fairies

Computer Fairies is a Mastodon instance that aims to be as queer, friendly and furry as possible. We welcome all kinds of computer fairies!