Closed
Bug 264708
Opened 20 years ago
Closed 20 years ago
Single-bit transparency not supported on Win98
Categories
(Core :: XUL, defect)
Tracking
()
RESOLVED
FIXED
mozilla1.8alpha6
People
(Reporter: nrm, Assigned: jonitis)
References
()
Details
Attachments
(3 files, 3 obsolete files)
(deleted),
image/png
|
Details | |
(deleted),
image/png
|
Details | |
(deleted),
patch
|
emaijala+moz
:
review+
emaijala+moz
:
superreview+
|
Details | Diff | Splinter Review |
Even though Windows 98 doesn't support alpha transparencies,
non-rectangular windows should still be possible using (eg)
transparent GIFs. This allows non-rectangular windows across
all Windows ports except (the officially not supported) win95.
It also reduces the dependancy on OS APIs if XUL apps are built
without any transparency.
See attachments for examples of ancient windows apps that
support this under win98 and provide a heightened visual
experience.
- N.
Reporter | ||
Comment 1•20 years ago
|
||
Built using a 3rd party theme engine. freeware. No longer maintained. No
source.
Reporter | ||
Comment 2•20 years ago
|
||
HotBurn CD burner. ancient version. commercial.
Assignee | ||
Comment 3•20 years ago
|
||
Assignee | ||
Comment 4•20 years ago
|
||
This patch adds support for non-rectangular windows for anything older than
Windows 2000 (Win95, Win NT 3.51). It uses complex shaped window regions to set
window transparency map. Every non-zero AlphaMask value maps to opaque window pixel.
Works pretty well with static images. For animated octopus sample it takes up to
80% CPU time on 1.6 GHz P4 and around 30% on Athlon64 3200+. Window region for
average octopus frame consists from approx. 300 rectangles.
Assignee | ||
Updated•20 years ago
|
Attachment #165560 -
Flags: superreview?(roc)
Attachment #165560 -
Flags: review?(emaijala)
Assignee | ||
Comment 5•20 years ago
|
||
David,
Can you check if this compiles with MinGW?
Comment 6•20 years ago
|
||
It doesn't compile under Win32/MinGW/cygwin....
I get :-
In file included from e:/mozilla/source/mozilla/widget/src/windows/nsNativeDragT
arget.cpp:47:
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.h:529: error: ISO C++ proh
ibits anonymous structs
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.h:534: error: ISO C++ proh
ibits anonymous structs
e:/mozilla/source/mozilla/widget/src/windows/nsNativeDragTarget.h: In constructo
r `nsNativeDragTarget::nsNativeDragTarget(nsIWidget*)':
e:/mozilla/source/mozilla/widget/src/windows/nsNativeDragTarget.h:107: warning:
`nsNativeDragTarget::mWindow' will be initialized after
e:/mozilla/source/mozilla/widget/src/windows/nsNativeDragTarget.h:104: warning:
`PRBool nsNativeDragTarget::mCanMove'
e:/mozilla/source/mozilla/widget/src/windows/nsNativeDragTarget.cpp:78: warning:
when initialized here
make[5]: *** [nsNativeDragTarget.o] Error 1
make[5]: Leaving directory `/cygdrive/e/mozilla/source/mozilla/widget/src/window
s'
make[4]: *** [libs] Error 2
make[4]: Leaving directory `/cygdrive/e/mozilla/source/mozilla/widget/src'
make[3]: *** [libs] Error 2
make[3]: Leaving directory `/cygdrive/e/mozilla/source/mozilla/widget'
make[2]: *** [libs] Error 2
make[2]: Leaving directory `/cygdrive/e/mozilla/source/mozilla'
make[1]: *** [alldep] Error 2
make[1]: Leaving directory `/cygdrive/e/mozilla/source/mozilla'
make: *** [alldep] Error 2
Assignee | ||
Comment 7•20 years ago
|
||
Make it compile on MinGW. Instead of anonymous structures use named ones w2k
and w9x inside the anonymous union.
Assignee: nobody → Dainis_Jonitis
Attachment #165560 -
Attachment is obsolete: true
Status: NEW → ASSIGNED
Assignee | ||
Updated•20 years ago
|
Attachment #165560 -
Flags: superreview?(roc)
Attachment #165560 -
Flags: review?(emaijala)
Assignee | ||
Updated•20 years ago
|
Attachment #165664 -
Flags: superreview?(roc)
Attachment #165664 -
Flags: review?(emaijala)
Comment 8•20 years ago
|
||
Ummm, still got some MinGW problems....
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
irtual nsresult nsWindow::StandardWindowCreate(nsIWidget*, const nsRect&, nsEven
tStatus (*)(nsGUIEvent*), nsIDeviceContext*, nsIAppShell*, nsIToolkit*, nsWidget
InitData*, void*)':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:1531: warning: passing
NULL used for non-pointer converting 5 of `HWND__* CreateDialogIndirectParamA(H
INSTANCE__*, const DLGTEMPLATE*, HWND__*, BOOL (*)(HWND__*, UINT, WPARAM, LPARAM
), LPARAM)'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
irtual nsresult nsWindow::SetCursor(nsCursor)':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:2545: warning: unused
variable 'oldCursor'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In function `void Pri
ntEvent(UINT, PRBool, PRBool)':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:3628: warning: int for
mat, long int arg (arg 2)
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In function `nsresult
HeapDump(const char*, const char*)':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:3668: warning: unused
variable 'written'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
oid nsWindow::DispatchPendingEvents()':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:3755: warning: passing
NULL used for non-pointer converting 3 of `BOOL EnumChildWindows(HWND__*, BOOL
(*)(HWND__*, LPARAM), LPARAM)'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
irtual PRBool nsWindow::ProcessMessage(UINT, WPARAM, LPARAM, LRESULT*)':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:4078: warning: compari
son between signed and unsigned integer expressions
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:4188: warning: unused
variable 'result'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:4390: warning: unused
variable 'hOldPal'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:4393: warning: unused
variable 'i'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:4480: warning: unused
variable 'rv'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:3761: warning: unused
variable 'vkKeyCached'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
irtual const WCHAR* nsWindow::WindowClassW()':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:4741: warning: cast fr
om pointer to integer of different size
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
irtual const WCHAR* nsWindow::WindowPopupClassW()':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:4793: warning: cast fr
om pointer to integer of different size
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `B
OOL nsWindow::OnIMEComposition(LPARAM)':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6131: warning: convert
ing to non-pointer type `HIMC' from NULL
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6132: warning: NULL us
ed in arithmetic
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `B
OOL nsWindow::OnIMEEndComposition()':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6330: warning: convert
ing to non-pointer type `HIMC' from NULL
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6331: warning: NULL us
ed in arithmetic
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `B
OOL nsWindow::OnIMEStartComposition()':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6566: warning: convert
ing to non-pointer type `HIMC' from NULL
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6567: warning: NULL us
ed in arithmetic
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
irtual nsresult nsWindow::ResetInputState()':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6582: warning: convert
ing to non-pointer type `HIMC' from NULL
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6585: warning: passing
NULL used for non-pointer converting 4 of `virtual HRESULT IActiveIMMApp::Notif
yIME(HIMC, DWORD, DWORD, DWORD)'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6585: warning: passing
NULL used for non-pointer converting 4 of `LONG nsIMM::NotifyIME(HIMC, DWORD, D
WORD, DWORD)'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6586: warning: passing
NULL used for non-pointer converting 4 of `virtual HRESULT IActiveIMMApp::Notif
yIME(HIMC, DWORD, DWORD, DWORD)'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6586: warning: passing
NULL used for non-pointer converting 4 of `LONG nsIMM::NotifyIME(HIMC, DWORD, D
WORD, DWORD)'
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
irtual nsresult nsWindow::SetIMEOpenState(PRBool)':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6600: warning: convert
ing to non-pointer type `HIMC' from NULL
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
irtual nsresult nsWindow::GetIMEOpenState(PRBool*)':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6612: warning: convert
ing to non-pointer type `HIMC' from NULL
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `P
RBool nsWindow::HandleMouseActionOfIME(int, POINT*)':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6659: warning: convert
ing to non-pointer type `HIMC' from NULL
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:6660: warning: convert
ing to non-pointer type `HIMC' from NULL
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp: In member function `v
oid nsWindow::SetWindowRegionToAlphaMask()':
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:7601: error: name look
up of `sx' changed for new ISO `for' scoping
e:/mozilla/source/mozilla/widget/src/windows/nsWindow.cpp:7579: error: using o
bsolete binding at `sx'
make[5]: *** [nsWindow.o] Error 1
make[5]: Leaving directory `/cygdrive/e/mozilla/source/mozilla/widget/src/window
s'
make[4]: *** [libs] Error 2
make[4]: Leaving directory `/cygdrive/e/mozilla/source/mozilla/widget/src'
make[3]: *** [libs] Error 2
make[3]: Leaving directory `/cygdrive/e/mozilla/source/mozilla/widget'
make[2]: *** [libs] Error 2
make[2]: Leaving directory `/cygdrive/e/mozilla/source/mozilla'
make[1]: *** [alldep] Error 2
make[1]: Leaving directory `/cygdrive/e/mozilla/source/mozilla'
make: *** [alldep] Error 2
Assignee | ||
Comment 9•20 years ago
|
||
This compiles with Visual C++ 6.0 and .Net 2003. Hopefully should compile with
MinGW, too.
Attachment #165664 -
Attachment is obsolete: true
Assignee | ||
Updated•20 years ago
|
Attachment #165686 -
Flags: superreview?(roc)
Attachment #165686 -
Flags: review?(emaijala)
Assignee | ||
Updated•20 years ago
|
Attachment #165664 -
Flags: superreview?(roc)
Attachment #165664 -
Flags: review?(emaijala)
Comment 10•20 years ago
|
||
I can't test this at the moment as the fix for Bug #267767 has broken my build.
Comment 11•20 years ago
|
||
Works fine with Win32/MinGW/cygwin. Good work.
(In reply to comment #9)
> Created an attachment (id=165686)
> diff -d -u -8 Fix MinGW
>
> This compiles with Visual C++ 6.0 and .Net 2003. Hopefully should compile with
> MinGW, too.
Comment 12•20 years ago
|
||
Comment on attachment 165686 [details] [diff] [review]
diff -d -u -8 Fix MinGW
>+ for (PRInt32 x = 0; x < aRect.width ; x++)
>+ {
>+ if (!*pDest != !*pSrc)
>+ {
>+ TransparencyMaskChanged = PR_TRUE;
>+ SkipMaskChangeCheck = PR_TRUE;
>+ }
>+
>+ *pDest++ = *pSrc++;
>+ }
Couldn't you just compare the lines with memcmp to be more efficient?
Attachment #165686 -
Flags: superreview?(roc)
Attachment #165686 -
Flags: review?(emaijala)
Attachment #165686 -
Flags: review-
Assignee | ||
Comment 13•20 years ago
|
||
> Couldn't you just compare the lines with memcmp to be more efficient?
No. Please note that translucency values are first converted to boolean value
(with !) and only then comparison is made.
There are four different states what should be checked:
0 -> 0
0 -> 1..255 (mask changes)
1..255 -> 0 (mask changes)
1..255 -> 1..255
1. I can't just cast to PRBool, because it is just PRIntn
2. I can cast to bool, bet then Visual C++ generates warning that cast to bool
limits the performance
3. I can use (!!*pDest != !!*pSrc)
4. I can write the check as:
if ((*pDest == 0 && *pSrc != 0) || (*pDest != 0 && *pSrc == 0))
Comment 14•20 years ago
|
||
Comment on attachment 165686 [details] [diff] [review]
diff -d -u -8 Fix MinGW
Right, I missed that. r=ere provided it compiles with MingW and actually works
for Win98 (I couldn't test these).
Attachment #165686 -
Flags: superreview?(roc)
Attachment #165686 -
Flags: review-
Attachment #165686 -
Flags: review+
Assignee | ||
Comment 15•20 years ago
|
||
I checked and it works on Win98SE. Should work on Win95 and NT 4.
Just noticed that for:
for (PRInt32 x = 0; x < aRect.width ; x++)
{
if (!*pDest != !*pSrc)
does not have space between 0 and ;. To be pretty one could add it before
checking in.
Comment 16•20 years ago
|
||
Or rather remove the space between aRect.width and ;. That's the normal (and
pretty, of course :) ) style.
Comment on attachment 165686 [details] [diff] [review]
diff -d -u -8 Fix MinGW
please make the local variables all start with lowercase
Attachment #165686 -
Flags: superreview?(roc) → superreview+
Assignee | ||
Comment 18•20 years ago
|
||
Same as one that got reviews, but uses lowercase for local variables and
removes space between function name and opening parenthesis to be more
consistent with surrounding code.
Ere, please check this is when you have time. Thanks!
Attachment #165686 -
Attachment is obsolete: true
Assignee | ||
Updated•20 years ago
|
Attachment #166312 -
Flags: review?(emaijala)
Comment 19•20 years ago
|
||
Comment on attachment 166312 [details] [diff] [review]
lowercase local variables
You can carry the + from the previous patch if you don't make other than the
suggested changes.
Attachment #166312 -
Flags: review?(emaijala) → review+
Comment 20•20 years ago
|
||
Comment on attachment 166312 [details] [diff] [review]
lowercase local variables
Carrying over sr+ from previous patch.
Attachment #166312 -
Flags: superreview+
Comment 21•20 years ago
|
||
Fix checked in to trunk.
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Reporter | ||
Comment 22•20 years ago
|
||
Confirmed. See also bug 274150.
- N.
Updated•16 years ago
|
Target Milestone: --- → mozilla1.8alpha6
Component: XP Toolkit/Widgets: XUL → XUL
QA Contact: xptoolkit.widgets
You need to log in
before you can comment on or make changes to this bug.
Description
•