Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Ability to display transparent tray icon #271

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

XakerTwo
Copy link

As noted in #229, when transparent background is enabled, text become jagged (aliased) and this happens due to 1bit mask.
However, since WinXP (docs; 2nd approach; comments) tray icons supports transparency(alpha/32bit), so it's possible to solve this issue

There some complications and troubles with using GDI and ClearType(especially ClearType - it's additive and subpixel-alpha-ed)
But here is possible solution: calculating of additive alpha and applying it to bitmap manually

Note: this is not perfect solution because calculated alpha is additive, which is not what actual alpha blending expects.

Note: i'm continue to use BITMAPINFOHEADER because ARGB is a default order; if you wish you can switch to BITMAPV5HEADER and init bitmap according to docs (that was initial implementation, so rest of the code would works as is)

This is a cumulative PR, includes #269 #270

when selected color is black next attempt to change it would be rejected
zero is valid for CHOOSECOLOR because COLORREF is A,R,G,B, packed into Int32
additionally skip value updating if it's actually not changed
require 3e8b35b2c08fe9b46607122962451be055eb5fbc for routine
fix staircases only for text when transparent background enabled
fix invisible border when transparent background enabled (it was masked)
alpha in tray icons supported since WinXP

original icon drawing functions are untouched
new function draw the border as overlay so icon size always same, that's better (IMHO)
rounded corners now drawn as ... rounded corners and not ellipse

added following fields to the _STATIC_DATA struct
  HBITMAP hbitmap_alpha - black-white 32bits mask, used for alpha calculation
  PDWORD dwbits_icon_argb - hold pointer to hbitmap bits
  PDWORD dwbits_icon_bw - hold pointer to hbitmap_alpha bits
  LONG dwbits_icon_length - length of dwbits_icon_*

added following functions
  _app_drawbackground_withalpha()
  _app_setupalpha()
  _app_iconcreate_withalpha()

replace calls of _app_iconcreate() with _app_iconcreate_withalpha()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant