Closed
Bug 291381
Opened 20 years ago
Closed 20 years ago
nsIconChannel fixes & enhancements for OS/2
Categories
(Core :: Graphics: ImageLib, defect)
Tracking
()
RESOLVED
FIXED
People
(Reporter: dragtext, Assigned: mkaply)
Details
Attachments
(3 files, 1 obsolete file)
|
13.60 KB,
text/plain
|
Details | |
|
31.83 KB,
patch
|
mkaply
:
review+
mkaply
:
superreview+
|
Details | Diff | Splinter Review |
|
2.50 KB,
patch
|
mkaply
:
review+
mkaply
:
superreview+
mkaply
:
approval1.8b3+
|
Details | Diff | Splinter Review |
This patch fixes color corruption seen in 256-color icons, adds a simple full-size to mini icon converter, and yields more appropriate icons than the current code. It also greatly simplifies the icon-conversion code, eliminates unnecessary functions, and reduces overhead. Color corruption is caused by the use of an nsCString as an output buffer. On my system, it changes 0xF0 to 0xDA and 0xF1 thru 0xFF to 0x00. It has been replaced by a conventional byte buffer. Inappropriate icons are often displayed because the current code relies on a file's MIME-type. Since most downloads are described as "application/octet-stream", this produces the icon for an EXE. The revised code ignores the MIME-type and relies solely on the file's extension. FYI... I started working on nsIconChannel as part of a project to provide thorough-going WPS integration. A future enhancement will enable this code to display whatever icon the WPS would display for a given file. Since that enhancement is still a work-in-progress while these revisions are ready to be used, I'm submitting them now. Further changes to implement that enhancement will be trivial.
| Reporter | ||
Comment 1•20 years ago
|
||
| Reporter | ||
Comment 2•20 years ago
|
||
The diff is particularly unreadable - even Bugzilla makes a mess of it. Here are all of the substantive changes in one easy-to-read package.
| Assignee | ||
Comment 3•20 years ago
|
||
So am I to understand that you aren't using the 16x16 and 20x20 icons that are in the icons anymore if needed? You shrink it yourself? (this is based on your comments, I haven't read the code yet)
| Assignee | ||
Comment 4•20 years ago
|
||
Never mind, I just read and you use a mini if available. We had a strange problem in the past that maybe you could help solve. It's best that we always use the 16x16 icons (never 20x20) because the Mozilla UI is designed around the fact that mini icons are 16x16. This affects things like tree views where system icons are used and things like that. Any idea how we can always get the 16x16 icon regardless of the system resolution?
Comment 5•20 years ago
|
||
Much of the code I don't understand (I still don't have a clue about graphics programming), but you could use NS_OS_TEMP_DIR instead of the getenv bit in GetFileIcon. An example is in widget/src/os2/nsSound.cpp: nsCOMPtr<nsIFile> soundTmp; rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(soundTmp));
| Assignee | ||
Comment 6•20 years ago
|
||
The temp dir stuff was a relic from my code, so I made that mistake originally - probably a good idea.
| Reporter | ||
Comment 7•20 years ago
|
||
Attachment #181475 -
Attachment is obsolete: true
| Reporter | ||
Comment 8•20 years ago
|
||
(In reply to comment #5) > you could use NS_OS_TEMP_DIR instead of the getenv bit in > GetFileIcon. An example is in widget/src/os2/nsSound.cpp: Done. I didn't like it either but I didn't know how to do it properly. P.S. I always wondered how that mozsound.wav kept appearing in my temp dir - now I know why, thanks to your reference.
| Reporter | ||
Comment 9•20 years ago
|
||
(In reply to comment #4) > you use a mini if available. The shrink code is required when I fetch icons from the WPS because I cannot get WinCreatePointerIndirect() to create a mini-icon - it completely ignores the mini bitmaps. When I put them in the full-sized fields, GPI stretches the image by doubling everything. The shrink code simply reverses the process and produces an exact duplicate of the original. > Any idea how we can always get the 16x16 icon regardless of the system > resolution? No. Except for really mechanical stuff like the above, I'm out of my depth when it comes to graphics (I'm a text guy, ya know?). In any case, I doubt there's an application level call available. The very fact that SNAP has an environment variable that lets you choose between small & large icons makes me think that the decision as to which one to use is buried deep within PM's GRE.
| Assignee | ||
Comment 10•20 years ago
|
||
Comment on attachment 181558 [details] [diff] [review] revised patch using NS_OS_TEMP_DIR r=mkaply, sr=mkaply (platform specific)
Attachment #181558 -
Flags: superreview+
Attachment #181558 -
Flags: review+
| Assignee | ||
Comment 11•20 years ago
|
||
Fix checked in to trunk only.
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
| Assignee | ||
Comment 12•20 years ago
|
||
Rich, I'm going to back this out. On at least two machines, it is causing crashes when doing downloads. The download I am testing with is: http://www.innotek.de/products/ft2lib/ft2libgeneral_e.html First link. the NS_NewPipe is failing which probably implies some memory corruption going on....
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
| Reporter | ||
Comment 13•20 years ago
|
||
(In reply to comment #12) > The download I am testing with is: > http://www.innotek.de/products/ft2lib/ft2libgeneral_e.html > First link. Not surprisingly, I can't duplicate it - I assume you mean the link to the v2.6 beta exe. Does opening the d/l dialog cause it to crash? Any idea of what flavor(s) of Warp this occurs on? (E.g. Does it happen on eCS with its 256-color icons or standard IBM versions with 16 colors - the code is different for each.) If this is something you've experienced, could you try to duplicate it using my WPS-enabled version of Firefox? (See my newsgroup posting for more details.) http://e-vertise.com/warpzilla/fx-wps-v1.zip
| Assignee | ||
Comment 14•20 years ago
|
||
I've recreated on two machines, both straight up OS/2 with SNAP graphics - one is my machine at work, one is my machine at home. Both are Convenience Pack 2. The crash is definitely as the download dialog is coming up as it goes to grab icon info.
| Assignee | ||
Comment 15•20 years ago
|
||
I narrowed down the problem at least to a function - ConvertColorBitMap http://lxr.mozilla.org/seamonkey/source/modules/libpr0n/decoders/icon/os2/nsIconChannel.cpp#476 If this function isn't called, we don't crash.... still looking.
| Assignee | ||
Comment 16•20 years ago
|
||
um, no it's convertmaskbitmap causing the problem http://lxr.mozilla.org/seamonkey/source/modules/libpr0n/decoders/icon/os2/nsIconChannel.cpp#566
| Assignee | ||
Comment 17•20 years ago
|
||
In the bad call pBMInfo->cx = 20 pBMInfo->cy = 40 pBMInfo->cBitCount = 1 bprIn = 4 lprIn = 1 outBuf is 1282 bytes per original allocation inbuf is 240 bytes per original allocation
| Reporter | ||
Comment 18•20 years ago
|
||
Mike, Thanks for your efforts. My testing with XGA icons wasn't as thorough as it should have been. Perhaps my assumptions about padding are incorrect. I'll check this out later today.
| Reporter | ||
Comment 19•20 years ago
|
||
> Perhaps my assumptions about padding are incorrect.
Yep. 20x20 16-color icons have two bytes of padding that ConvertColorBitMap()
fails to ignore. This causes a buffer overrun of 240 bytes. I'll fix this and
submit a patch on Wednesday. Do you want a diff for just this fix or a revised
version of the original patch?| Reporter | ||
Comment 20•20 years ago
|
||
Correction - that was two bytes of padding _per row_ that it fails to ignore.
Comment 21•20 years ago
|
||
As the first version is still in CVS Mike most likely needs just an additional patch to correct the problem.
| Assignee | ||
Comment 22•20 years ago
|
||
Given that you have an idea of the fix, I won't back this out - please just submit a patch on what is in CVS. Thanks!
| Reporter | ||
Comment 23•20 years ago
|
||
| Reporter | ||
Comment 24•20 years ago
|
||
I tested this latest patch with 16 & 256 color icons in both VGA & XGA sizes. I also tested with icons that had no mini-icon counterpart to ensure the shrink code worked as well at all sizes & color-depths.
| Assignee | ||
Updated•20 years ago
|
Attachment #185705 -
Flags: superreview+
Attachment #185705 -
Flags: review+
Attachment #185705 -
Flags: approval1.8b3+
| Assignee | ||
Comment 25•20 years ago
|
||
checked in. Thanks!
Status: REOPENED → RESOLVED
Closed: 20 years ago → 20 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•