Closed
Bug 291381
Opened 21 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•21 years ago
|
||
| Reporter | ||
Comment 2•21 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•21 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•21 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•21 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•21 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•21 years ago
|
||
Attachment #181475 -
Attachment is obsolete: true
| Reporter | ||
Comment 8•21 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•21 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
•