Isn't atomic commits preferred? This is beyond my knowledge for so many changes, especially during this big-change stage. If there is any contribute from me, it's just the idea. Others are all your efforts. Please commit it at the proper time by your schedule. Many thanks!
I thought it would be in 2 commits. Thanks for your detailed description and codes. Here is the updates. Known issues with legacy GDI: 1. SurfaceGDI::LineDraw and SurfaceGDI::PolyLine for DrawTabArrow don't work well with alpha drawing. Maybe also others. 2. SurfaceGDI::AlphaRectangle is not efficiency enough for "many" tasks.
Update scite_5599_Make-whitespace.fore-accept-rgba.patch, as SetWhitespaceFore calling shouldn't be removed currently.
I totally agree with you that some rendering technologies are really out dated, and new ones should be in priority. It all depends on the minimum OS version that will be supported. Take this ticket as a notice or description on this. Maybe someone who really needs it or has interests will read this and take action ... PS: Nowadays mingw-w64-headers seems support GDI+.
Implement Surface GDIPlus for Windows
OK, to make it simple: no whitespace.fore.alpha, just make whitespace.fore accept also rgba besides rgb.
Final effect: 1. 2 alpha can be set separately: whitespace.fore.alpha=<alpha> and whitespace.fore=#rrggbbaa. 2. whitespace.fore.alpha controls all colours including that inherited from grammar settings; whitespace.fore controls the colour specified manually. 3. whitespace.fore.alpha > whitespace.fore, if both exist.
Here is an update for the multiple options files to work well. OptionalSetColour(wEditor, SA::Element::WhiteSpace, props, "whitespace.fore"); added, but SetWhitespaceFore not removed. The more I read, the more I learnt. ❤👍🌹
An email ping of attachment updated.
a bunch of existing APIs that can be unified Seems all on your list 👍 people that want visible whitespace will want it to be fully opaque to be most visible Here we just give users an option, making it more customizable. Of course, with serveral lines of code, rather than heavy code. Use or not, or use which one, all depend on themselves. To me, making visible whitespace the 2nd attractive and code always the 1st attractive is really appreciated. const ColourAlpha whiteSpaceFore = vsDraw.ElementColour(SC_ELEMENT_WHITE_SPACE).value_or(textFore);...
a bunch of existing APIs that can be unified Seems all on your list 👍 people that want visible whitespace will want it to be fully opaque to be most visible Here we just give users an option, making it more customizable. Of course, with serveral lines of code, rather than heavy code. Use or not, or use which one, all depend on themselves. To me, making visible whitespace the 2nd attractive and code always the 1st attractive is really appreciated. const ColourAlpha whiteSpaceFore = vsDraw.ElementColour(SC_ELEMENT_WHITE_SPACE).value_or(textFore);...
a bunch of existing APIs that can be unified Seems all on your list 👍 people that want visible whitespace will want it to be fully opaque to be most visible Here we just give users an option, making it more customizable. Of course, with serveral lines of code, rather than heavy code. Use or not, or use which one, all depend on themselves. To me, making visible whitespace the 2nd attractive and code always the 1st attractive is really appreciated. const ColourAlpha whiteSpaceFore = vsDraw.ElementColour(SC_ELEMENT_WHITE_SPACE).value_or(textFore);...
Using SCI_SETELEMENTCOLOUR to set/store alpha only seems possible, but makes people confused ... Still haven't got an easier/better solution. Just update the current as attached. PS: hg transplant doesn't place the alpha setting right for SciTE, so the patch also updated.
if ((phasesDraw == PhasesDraw::one) && drawWhitespaceBackground) was changed to two tests You are right. Not necessary anymore, would be amended. SCI_SETELEMENTCOLOUR I noticed it. And it seems many existing 'SetColour' APIs, like SetWhitespaceFore, SetWhitespaceBack, SetSelFore and etc., can be replaced by reconstructing (This is beyond this topic). Thanks for your good example on how to use it, that explains my wonders clear. But I got issues if don't add new API to store the alpha and then get...
Implemented whitespace.size so that visible spaces can be made more visible.
I have amended and regenerated the 3 patches using the new ColourAlpha based drawing APIs. Locally tested. One known problem is: to legacy GDI, it would be CPU consuming when there are many blanks. Test files are in: test-wsfa\technology-0\.
Hi Neil, I'm back on this ticket to upload an update for the patches and test files bundle. Based on the discussion https://github.com/zufuliu/notepad2/pull/298#issuecomment-801542554, I generated a new patch using simple alpha blending rather than AlphaRectangle or SimpleAlphaRectangle, in case of there are dense blanks (test file: 256000-blanks.zip). That will cause lagging if use GDI rendering (technology=0). I also amended the Implement whitespace.fore.alpha to be compact, and then added patch...
False positive, it's namespace!
No indentation? I'm not sure if it's intentional. Maybe you have changed them already. Just in case.
Good news to me is I am already v5.0.0 based 😂. Hoping it won't conflict with others ...
There is a large set of platform layer patches pending from [feature-requests:#1364]. Applying this change will interfere in their incorporation so won't happen until after they have been processed. If you are interested, the 5.patch file contains most changes to Surface which can be found by searching for "--- a/include/Platform.h". Okey, I'll have a try to see if I can help in anything. However, the high contrast themes are far too ugly to use unless needed because of sight problems. That's tr...
Many thanks for your examples! I have compiled SciTE successfully and solved it to get the same alpha blended result. And choose clearer new variable names. See 'wsfa-markall-draw0.png', 'wsfa-markall-draw1.png', and 'Add-SCI_SETWHITESPACEFOREALPHA-and-SCI_GETWHITESPACEFOREALPHA.patch' in the zip file. For screenshots, SciTE instance: the left is official one with strong color; the right is patched one with weak color File opend: 1 is with phases.draw=0; 2 is with phases.draw=1 highlighted all tabs...
showing significantly different results with single phase drawing and multi-phase drawing I think you mean, for example: https://sourceforge.net/p/scintilla/code/ci/8585/tree/src/EditView.cxx#l1923 to l1931 ColourDesired textBack = TextBackground(model, vsDraw, ll, background, inSelection, inHotspot, styleMain, i); if (ts.representation) { if (ll->chars[i] == '\t') { // Tab display if (phasesDraw == phasesOne) { if (drawWhitespaceBackground && vsDraw.WhiteSpaceVisible(inIndentation)) textBack = vsDraw.whitespaceColours.back;...
showing significantly different results with single phase drawing and multi-phase drawing I think you mean, for example: https://sourceforge.net/p/scintilla/code/ci/default/tree/src/EditView.cxx#l1923 to l1931 ColourDesired textBack = TextBackground(model, vsDraw, ll, background, inSelection, inHotspot, styleMain, i); if (ts.representation) { if (ll->chars[i] == '\t') { // Tab display if (phasesDraw == phasesOne) { if (drawWhitespaceBackground && vsDraw.WhiteSpaceVisible(inIndentation)) textBack...
Thanks for your comments. single phase drawing and multi-phase drawing (in SciTE: phases.draw) I'll study more about it. It would be better to use translucent drawing which will become available for lines in a 5.0.x release. Good idea for a more general new translucent drawing function. I assumed "the least changes". AlphaRectangle or the SimpleAlphaRectangle I tried, but the arrow head is oblique line. I will do more research on that ... SC_ALPHA_NOALPHA is also something to avoid Do you mean use...
Glad to contribute :) PS: patch file failed to be uploaded, trying zip file ...
SCI_SETWHITESPACEFORE / SCI_SETWHITESPACEBACK, yes, related, defined in Scintilla.h saying generated from Scintilla.iface, the SetWhitespace*. I tried your example. It's appearance-sensitive. SciTE gives plenty customization switches, that awesome! There are other editors derived from scintilla. They focus on others features , but lack this feature. So I'm wondering, as a library, if there is a way that scintilla can implement, then all others will benefit from won't repeat it. I choose show white...
Add SetWhitespaceAlpha