Who renders the icons?
Posted by: JohnHell
Date: March 13, 2017 11:24PM

This should be answered by a developer, and better by Dorian, but, do anyone know who renders the toolbars icons? K-meleon internal functions or the OS? (as looks system dependant)

The question is, of course, is there is some limit or odd displaying.

I'm asking because with all this story the last days about the icons and the toolbars for the flash toggling, I just asked myself (not the first time BTW), well, the skinning system provides a method to tell what is the size of an icon inside an image so it can be resampled/resized¹, so, why not distributing images at, for example,... 256x256? (icon size supported and preferred since Vista because of the higher DPI coming with the new screens).

I just tested and it looks fairly good even the resampling is at 16x (from 256 pixels to 16 pixels).

And, well, the biggest problem is the file size, obviously, but in PNG format isn't very dramatic for these days. About 100KB for a 3 icon set with quite a few white colors ratio (COLD, HOT, DEAD).

Even though I only tested one button, the memory consumption was the same (in my case 68MB with 75.0).

It is something that comes to my mind because if K-meleon or the system develops well, and looks like, I'd save tons of trials errors when trying to make icons looking good at 16x16. Really, is hardest than you could imagine. Pixel-art is an art winking smiley

What users think, starting by old users? What sizes do you use for icons or toolbars (independent values with old skinning¹)?

Would come the day when K-meleon or any other app would support vector graphics like SVG? That would be so time saving smiling smiley



¹ in the old skinning system through toolbars.cfg every button in a toolbar can set their own size; with new skinning system through skin.cfg all icons in an image are expected to have the same size.

Re: Who renders the icons?
Posted by: rodocop
Date: March 14, 2017 12:13AM

I use ICO-files, storing multiple sizes in 1 file.
First I created this when found that KM pictire sizing isn't good enough for some fine details - it was icon set for Adblockcontrol macro by JamesD, that manages inbuilt adblock plugin.

But I had very different experience with them: firstly, I supposed that KM picks right icon size for corresponding toolbar size.

But then I found that it uses some particular size from that ico-set, but the selection principle is partly mysterious. Not always it's the biggest one - usually it's the size, that is read from ico-file as 'primary', read by OS.

(you can use Total Commander with Lister plugins to see what icon size is treated as 'primary' - it depends somehow on the icon editor from which ICO was exported or saved, but logics are not clear to the end.)

P.S. I still use ICO-files (sized from 48 to 16 pix usually) but cannot answer your question about what is their renderer in KM.



Edited 2 time(s). Last edit at 03/14/2017 12:16AM by rodocop.

Re: Who renders the icons?
Posted by: rodocop
Date: March 14, 2017 12:18AM

And it would be REALLY GREAT if KM toolbars plugin will get the ability to pick correct sized icon from icon set, according to toolbar size set in KM.

Re: Who renders the icons?
Posted by: Yogi
Date: March 14, 2017 01:43AM

Sorry, I'm not a programmer but AFAIK rendering of images is done by browsers.

Edit:
Basically KM/FF can render SVG files.
IMHO it wouldn't be useful at the moment if developers would implement SVG files for skinning. The main disadvantage would be an increased resource wastage.
Rendering of vector graphics is considerable more resource intensive than that of raster graphics.



Edited 2 time(s). Last edit at 03/14/2017 02:16AM by Yogi.

Re: Who renders the icons?
Posted by: siria
Date: March 14, 2017 02:20AM

Inside the same toolbar all icons must have the same size.
Have a dim memory from too long back that auto-downscaled icons on Vista looked very fuzzy sad smiley
But not sure if that was the fault of an early KM7x version or still the same for KM76... Also remember struggling mighty with getting the correct icon 'cutout' from a multi-icon picture, had some very weird results...
Sorry probably doesn't help much such fuzzy memory snippets.
But guess we can safely assume that KM itself renders the icons.

Re: Who renders the icons?
Posted by: JamesD
Date: March 14, 2017 12:17PM

The icon for basic addblock is 192x32 in png format. I had it done that way in order to support skins with toolbars of 32, 24, 20, and 16 size. I cannot see that much definition is lost when using with a toolbar of size 16. The old system for icons required that I code my macro such that it chose an icon based on there being one of the strings, LG or Large, in the skin name. To say that the old system was a bit hard to use is just being tactful.

I was about to suggest that JohnHell make a resized icon for plugin.state.flash in the 32 size instead of the 16. That is just my idea. I have no skills in making icons so I don't know if 32 is right. I suppose the scaling up works too?

Do icons in the bmp format scale?

Re: Who renders the icons?
Posted by: JohnHell
Date: March 14, 2017 05:03PM

Quote
rodocop
And it would be REALLY GREAT if KM toolbars plugin will get the ability to pick correct sized icon from icon set, according to toolbar size set in KM.

Yep, if we use your system of an ICL (icon file with various sizes is actually an ICL file, standing for icon library), that would be great.

Or is not an ICL, whatever, similar. ICO, ICL, the same.

Quote
siria
Inside the same toolbar all icons must have the same size.

That was said by Dorian when he asked for the new skinning system. If it was any problem if he set the new system to have all icons of a said toolbar the same size.

He proposed it here:
http://kmeleonbrowser.org/forum/read.php?2,130547,page=1

And we accepted.

But in the old skinning system, a toolbar can have icons of different sizes. What K-meleon does is get the size told for that icon to crop from the image with that dimensions and adjust then to the toolbar size.

What I don't know is who actually renders it. Might be the OS, but depending of which filter is being used, the difference is dramatic.

http://www.imagemagick.org/Usage/filter/

It would be great to know to decide how to create icons.

Ideally a system like rodocop ICL/ICO, would be great. K-meleon decides based on the toolbar size and voilà, no more problems.


Quote
Yogi
Sorry, I'm not a programmer but AFAIK rendering of images is done by browsers.


But, also for the interface buttons?

That's the doubt.

Sure SVG requires more processing power, but also the files are smaller. Dilemma winking smiley


Quote
JamesD
Do icons in the bmp format scale?


They do scale, as replied now to siria above, but the upscaling is like hell. It is so blurry. Better effect gives the downscaling.

For my 256x256 try I used a PNG for size purposes, but BMP can be used too.


Quote
JamesD
I was about to suggest that JohnHell make a resized icon for plugin.state.flash in the 32 size instead of the 16. That is just my idea. I have no skills in making icons so I don't know if 32 is right. I suppose the scaling up works too?


I can upload them, yep. I redraw in a vector graphic program, so is not a mistake to make them bigger and bigger.

The problem comes when the output is as tiny as 16x16. Then you have to play with the antialiasing system for the output. Sometimes I end taking the output as base and create the final result in Microsoft Paint. Better "at hand" pixel-art program. Pure art grinning smiley



Edited 2 time(s). Last edit at 03/14/2017 05:07PM by JohnHell.

Re: Who renders the icons?
Posted by: Yogi
Date: March 14, 2017 06:46PM

Quote
JohnHell
Sure SVG requires more processing power, but also the files are smaller. Dilemma winking smiley
Generally speaking that's correct.
But it also depends on the complexity of the drawing and the complexity of the colors/gradients.
Therefore in some cases an SVG can be much bigger in size than a PNG at 16x16, 32x32, 64x64, 128x128 or even 256x256.

Re: Who renders the icons?
Posted by: JohnHell
Date: March 14, 2017 07:28PM

Quote
Yogi
Quote
JohnHell
Sure SVG requires more processing power, but also the files are smaller. Dilemma winking smiley
Generally speaking that's correct.
But it also depends on the complexity of the drawing and the complexity of the colors/gradients.
Therefore in some cases an SVG can be much bigger in size than a PNG at 16x16, 32x32, 64x64, 128x128 or even 256x256.

True, but I was "generally speaking" winking smiley

We can't give a dissertation about this in this topic smiling smiley

Re: Who renders the icons?
Posted by: siria
Date: March 14, 2017 08:58PM

On my Vista big icons looked blurry even DOWNscaled too. But was long ago, could have been one of the old 7X beta versions, no idea if newer KMs are better.

Hm, you sure the old toolbar system can have different button sizes in 1 toolbar??? Not to my knowledge, neither in theory nor reality. Have you tested that?

Re: Who renders the icons?
Posted by: rodocop
Date: March 14, 2017 09:21PM

Dorian's question being recalled here was about all TOOLBARS to be equal-sized in skin, not about all buttons in toolbar.

siria,
at least there was a possibility to set size for every single button (when created by macros). But I haven't tested this.

Re: Who renders the icons?
Posted by: JohnHell
Date: March 14, 2017 09:37PM

Quote
rodocop
Dorian's question being recalled here was about all TOOLBARS to be equal-sized in skin, not about all buttons in toolbar.

siria,
at least there was a possibility to set size for every single button (when created by macros). But I haven't tested this.

Might be as rodocop is telling here. I might be confused by de (x, y) dimensions to crop from the source image.

I was confused till the end LOL:
http://kmeleonbrowser.org/forum/read.php?2,130547,page=4#msg-131077

Re: Who renders the icons?
Posted by: adodupan
Date: March 15, 2017 05:12PM

You can embed image data directly in kmm file using data uri.
Using data uri you can use high quality images and keep good performance.
Here is an example of how to use it:
$OnInit = $OnInit."_psf_;";
$_psf = true;
function psf1($p) {
  if($p == "cold") # it is not used, here is just in case if you want to add other stuff
    return "data:image/png;base64,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";
  else if($p == "hot")
    return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAcFSURBVHjaYvz//z/DQAKAAGJiGGAAEEAsMAYjIyMx6lWA2B2IHYEu1+ZiYBAA6mL8zsDw+Q8Dwy2g+CEg3gHEFwkZBAt5gABihDPwO8AciHPUGRg8nBgYRGyAHGUREQZ+AQEGBiYmhk8fPzI8fP2a4cS/fwx7gY4B2n4QqGQKEO8k5ACAAAIz8KQDPpBB+gwMf+cB9bw2Nf3/v7v7//9jx/7/f/Hi//9v3/7///79//9Xr/7/P3v2//9p0/5/cHL6v5qR8b8dUD1Q72oglsXlABAGCCB8DlABBvPZfKDap8rK///Png2xCGThx4///795A+GDMIj94QNE7v37///Xrv3/1sTkfwtQLzcDw0OgWVa4HAAQQLiiQJmDgWFXGwODUrqtLQNXdTXQH0CPfPnCwAAMZvzJGuhsbqC1Hz4w/OrrY1i9bh1DAQPDxzcMDD5A2SPoUQAQQNgcwMsMTExAyw0yjI0Z+LKzGRh4eBgYfv4EKcIVoQwMLMD0zAzU+QeYHP/+ZWBgZ2dg+P2b4dvChQxrdu1iyGFgePGZgcESqPoBsgMAAogFi3EdiUDLw4GJjNcJmOSePoVYgAuAHMXKyvAeqO76xYsMb96/Z/gMDCVRPj4GNx8fBi5zcwbXO3cYCu/dk2hiYJgFzUVwAwECCN0BJsCUnhELZPDr6TEwAoOR4d073D4HiQPxqRMnGO4Bfa0UHc1g5ujI8AOo51RSEgPD/fuQlKyry+Dz8CHDwb9/XYHZIxQotApmBEAAoTugMBIYi3zAOGRkY2P4+uQJAxPQAmYgZkQqtRhhGBjfh0+dYvhqY8MQNGsWA5uQEFj+4717DGzAUPgBDJU/IO8Co4ZNUJAh4s0bhqMMDGVAsXVAYZAUA0AAITtACZjMvEyAjN9cXAyfgb5nBMYnyFKwI6CWMkFpVqCht4E+/Ar0nceqVZDEB7Ls1y+Gz9evM/z/8YPhPbBs+AvUC3LAX05OcClmwMBgfAaSK0CFFgNAACE7wMsYWLJxAhm/gK7/+PYtAyOQZoZayoRkOYj+A0yUj4CWuAB9DrP85bZtDBfKyhh+PX7MwAsqoIDpARwCQEf8BCZIRmiJdgaSI8AOAAggZAc4q0PD5R/QYCZgCDABEx82B7AADXwB9J1Cbi4Dl6IiJNiB6eCwtzcDP6jkAUUFMFeASkhgfgCHwg+gg3+C8jfEHHi5ABBALEi1kqYoyPcgS4CK/wN9D7IQ5gDkKABls1/AlK+Sng53/bfLlxkUw8MZPl+4wPD67l0GdqA82HKQh0DmAqMT5DkBUD5nYFCA6QMIIHhtyAZM+GzQEAAp/g4MBRD+BqW/Qtkg/BEYzxLOzgxc2tpwB0impjIYr1jBIAsMhZ9A/d+Q9IIwKAr+QD0CjGZumD6AAEKOAkZkF/9DCv5/yL6HapJPTsaaM1mh6eEXqKiFmQU1lwHKhhoHBgABBHfAb2BBC6xWxWGK/0Mxcvz/heqUUVNjEPDxgaT6798ZXnd3M/z79g1cEv44cADs8F9Qc/8iOQIEgHYw/IBQYAAQQHAHABXefgVMI0rQaGBGcgTMQSAxcSBWrK9nYODgAOv7CizrrwP5n5ES6U8kPcghAJJ/D8RAtU9g9gIEEHKL6OAdqKY/kBCBpAdonQyqU1WAdYJObS0DT1QURAcwrt/19DB8ADkEiIFVFcMnJAf8QTML5Lj7ELlTMEsBAgjZAVsvARPzVyQXwzSDUq5RWxuDHjClCzQ1wTX87OpieAJM9d+Q4vcfmuV/oHyY2AWI0m0wMwACCNkBlx8zMBy4Dg3qP0iaQIrYgJUKowI89zD8AxZA94Gh8RDJUmSL0Pkg3z8GWQJpuu2DmQMQQCiNUmDwT9gGDXbkHMEKMgDUFgBVTvv3M/wG5vfrwDLgPLCs+I3FAbCQ+I8W/7sg0TORASkRAgQQtvbAOmAMBzpD4xIUGqD6QUVamuEn0MK3z5+Dff0cKWv+R3gATsPwT2hKvwLEU4Ex8BfSJvgBsxcggLA5QBqYvk9kg3Ib1AIOqGXI+ZkFKTNjs5gBKQ0BcxfI29+BFbsdpCpANEgAAghbv+ApMJ+GzQYW7zeRDGSBRgUnFLNCxWDirJDSFIw5oOIgB78A4plAJtDyRJjlyAAggPA1y22BFq0IZmCQAoWZCBBzIYUEss8Z0EpKUAQDLWQ4D2l5fAWyU4DMFdia5QABRKhfoAxtloP6Awygkl8CiHlgCRPJIX+gZQEouEEhdwCITwJ9DHQsMDYR+R7dAQABRGzHJBLouzxgg8JCE+oqcaQQAfkY2OpluAfEoGwMzGfXgDlpOpA5G5oOcXZMAAKIWAfA0gsoEXkCsSUwehTZIYEBSmjfgYXRY6BJp4Hc7dB8/p2YrhlAADEOdO8YIIAGvHcMEGAAMvXkw2piFIQAAAAASUVORK5CYII=";
  else if($p == "dead")
    return "data:image/png;base64,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";
}
function psf2($p) {
  $locale = _("Plugin State Flash");
  $cmnd = "macros(_psf_)";
  if($p) {
    addtoolbar($locale);
    addbutton($locale, $cmnd, "", $locale);
    $_psf = false;
  } else
    togglepref(INT, "plugin.state.flash", 0, 2);
  checkbutton($locale, $cmnd, getpref(INT, "plugin.state.flash") == 0 ? true : false);
  setcmdicon($cmnd, getpref(INT, "plugin.state.flash") == 0 ? psf1("dead") : psf1("hot"));
}
# functions can not be used as commands
_psf_ {
  psf2($_psf);
}
Code above requires km 75.1

Code below requires km 75.0
$OnInit = $OnInit."_psf_01;";
$_psf_locale = _("Plugin State Flash");
$_psf_cold = "data:image/png;base64,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";
$_psf_hot = "data:image/png;base64,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";
$_psf_dead = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAZeSURBVHjaYvz//z/DQAKAAGJiGGAAEEAsMAYjIyMx6lWA2B2IHZmZmbW5uLgEQFp//Pjx+ffv37eA7ENAvAOILxIyCBbyAAHECGfgd4A5EOdoamp6uLq6ilhbWzMoKSkxCAgIgA36/Pkzw8OHDxlOnjzJsHv37s/nzp07CFQ/BYh3EnIAQACBGXjSAR/IICMjo7+LFy/+/+7du/+EANAx/zds2PDfyckJZOhqIJbF5QAQBgggfA5QAQbz2dLS0v/Pnz+HW/Dv3z+8GAZAju3q6vrPy8v7EGiWFS4HAAQQLgcoc3Jy3p02bRrYRz9//vz/69cvOA2M7/9//vyBYxAfhJHVgOgvX778X7NmzX9xcfEPQDNtsDkAIICwOYCXhYXl/MSJE/+/efPm/8ePH8GOABn29evX/9++fQPj79+/o2CQhSBHgNggtSD84cMHsBkrV678z8/P/xxotgK6AwACCFsinJoFBOXl5QxsbGwMQMcwMDExgeVhGMRHzj0gNUCLGO7cucMAtJQB6AgGQUFBBlNTUwagoxiAIcKwdOlShqqqqt3QXPQfZi9AAKGXAyZaWloZCQkJYI0gDPQZGIMMgYnB2MDgB+MzZ84wHD16lAEYbQxmZmYM5ubmDMCQg+sDYW9vbwZnZ2dXoB2hyBYCBBALmgMK4+LimDg4OBj+/v0LNgDkW2BihPscOSRA4pcvXwar9ff3ZwDpA4FPnz4xsLOzg/WDHAhMnODgjo2NZTh06FAZ0PHrgMr+gNQCBBByCCjJy8t7gXwACkKYy0EY2ScwDLL0/v37YBpYNsAtB/FB0QByILI+YGHFoKqqymAMBMi5AiCAkEMAZLkAKBhhQQ/yMXoIwEIB5EhQvNvb28PTDzC7Mly5cgVsITD7gc0AOQgUAqCQAKmztLRkOHHihA+01GQACMBEFZsAAIOwHCAurn7T7/1FfKFGsFTIEtSECP4GTn+6EecQi8LECq84ucyEu0NEpreqEBFQVZjZcGuA4F6egSn0/EvgCiC4A4CCmqKiomDXw+IM5nv0UAABkI9AxTEMALMdg6ysLAMwq4KLZlZWVrjlsBAAmQkqvoGhA8+OAAEEdwAwy/GDsh3MpSBNIEtBBiD7HkSDDBMREQEHMwyALAfhu3fvgtMGSD8yBpkDMhdkJrAS44bpAwgg5ChghCmEWQ4LBWTLYVEjLS2NtfIA+RwEkD0CMxcEQGyQXTD1AAEEdwBQwxdgwhJHdi1y3IMwLDSARSuDkJAQ3EBQYgTRIEeCohDkQBANk4d5CgRAuQGIv8PsBQgguAOAwXr71atXykAAdwAMIydKUDoBBTUs5YPi/N69e2AaVj7AEh9yCIAwyPHASgpUTjyB2QsQQMhRcPD27dseFhYW4DiG+RoEQPENSu3AuGOQlJREiXtQiQcqeEDZEmQ5rIhFtxyEQYUTKH0AzT8F0w8QQMgF0dbz588D65lv8GADYZBjgBUJg46ODoO6ujo4FcMAKDhfvnwJ9j0suJH1YsNnz54FKd0GMwMggJAdcBnougNXr14FBzXIYpgDQCEByiHIlRDIomfPnjE8fvwYp6UwcVgh9OjRIwagJ0FNt30wcwACiAmtjp6wadMmeGEEMwSUspGbbCBxULxfunQJnNiwBTd6FgQ5ftu2baBQmwg0Ap4IAQIIvTbcDaxc1u/btw/sY5jLQYaAogZU2oHi8MiRIwzAdh/YcpDByAkWHYDMAHkA6HOGAwcOXAAKzUOWBwggbO0BaWB9cKK4uFgGFOcgcVhFg54jkEMFOfHB2LDqGpROuru7v79+/doOKHwGWT1AAOFqFVsCE9v27Oxsfg0NDbADQL4At2AINN9hakAOBYXa06dPGaZOnfoPmFaigNIr0R0MEED4muW23NzcKyIiIqRsbGzAFQyopoRFCUrTGqofFh2gcgCU30HBvmTJkq9An6cAlazA1iwHCCBC/QJlULMcWIV7uLu7g7MiqBQEOgzcDIMVPLCEBvIx0DKGGzduMOzdu5fh8OHDZ4By2UAzTuHqFwAEELEdk0hgnOcB04SFrq4ug4qKCtwhIABrG4AqIlB74Pr169eAqX06UGo2qFbG1zEBCCBiHQDLMaBE5AlUawksFRWBJRsPtB75DiyMHgN9exrI3Q7N59+J6ZoBBBDjQPeOAQJowHvHAAEGABLK880wfQDaAAAAAElFTkSuQmCC";
_psf_01 {
  addtoolbar($_psf_locale);
  addbutton($_psf_locale, "macros(_psf_02)", "", $_psf_locale);
  &_psf_03;
}
_psf_02 {
  togglepref(INT, "plugin.state.flash", 0, 2);
  &_psf_03;
}
_psf_03 {
  checkbutton($_psf_locale, "macros(_psf_02)", getpref(INT, "plugin.state.flash") == 0 ? true : false);
  setcmdicon("macros(_psf_02)", getpref(INT, "plugin.state.flash") == 0 ? $_psf_dead : $_psf_hot);
}



Edited 3 time(s). Last edit at 03/15/2017 07:50PM by adodupan.

Re: Who renders the icons?
Posted by: JohnHell
Date: March 15, 2017 06:35PM

Nice one adodupan. I'll try later this feature.



BTW, the question of this thread might be answered here, even though this is for favicons:

http://kmeleonbrowser.org/forum/read.php?1,126717#msg-128662


Maybe Dorian uses Gecko as well to render the toolbar icons. And can be possible looking at the way adodupan loads image by data images.

K-meleon shell only resizes it.



Edited 1 time(s). Last edit at 03/15/2017 06:35PM by JohnHell.

Re: Who renders the icons?
Posted by: rodocop
Date: March 15, 2017 06:45PM

And how to create this data:uri from the real image?

Well I know about PHF converters but how can I do it with single image not on html-page?

Re: Who renders the icons?
Posted by: JohnHell
Date: March 15, 2017 06:52PM

Quote
rodocop
And how to create this data:uri from the real image?

Well I know about PHF converters but how can I do it with single image not on html-page?

With a base64 encoder.

http://www.fourmilab.ch/ (under Windows utilities section)

The command will be base64 image.extension output.txt.

Open output.txt and there it is the image encoded. Note that the base64 encoded images will be quite larger than original.

Re: Who renders the icons?
Posted by: JohnHell
Date: March 15, 2017 07:29PM

I forgot I can't test adodupan code.

Functions weren't available in 75.0.

Re: Who renders the icons?
Posted by: JamesD
Date: March 15, 2017 08:02PM

If we macro writers could define the image in the way adodupan does with data uri, it would mean the kmm file could contain everything. There would not be a need to create a 7z with folders skins and shared.

It would be interesting to know about space requirements. Kmm files are plain text. Also could the kmm file work like an omni and be zipped with some compression?

Re: Who renders the icons?
Posted by: rodocop
Date: March 15, 2017 08:11PM

Well, my lovely Total Commander can encode this, I found!

Have tested:
1) BMP image 1590b in size was converted into 2174b data code;
2) PNG image 5681b in size was converted into 7774b data code.

Code size is almost 137% of image size in general.



Edited 1 time(s). Last edit at 03/15/2017 08:20PM by rodocop.

Re: Who renders the icons?
Posted by: JamesD
Date: March 15, 2017 08:11PM

Quote
JohnHell
I forgot I can't test adodupan code.

Functions weren't available in 75.0.

Try this::

Quote
adodupan
Code below requires km 75.0
$OnInit = $OnInit."_psf_01;";
$_psf_locale = _("Plugin State Flash");
$_psf_cold = "data:image/png;base64,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";
$_psf_hot = "data:image/png;base64,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";
$_psf_dead = "data:image/png;base64,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";
_psf_01 {
  addtoolbar($_psf_locale);
  addbutton($_psf_locale, "macros(_psf_02)", "", $_psf_locale);
  &_psf_03;
}
_psf_02 {
  togglepref(INT, "plugin.state.flash", 0, 2);
  &_psf_03;
}
_psf_03 {
  checkbutton($_psf_locale, "macros(_psf_02)", getpref(INT, "plugin.state.flash") == 0 ? true : false);
  setcmdicon("macros(_psf_02)", getpref(INT, "plugin.state.flash") == 0 ? $_psf_dead : $_psf_hot);
}




Re: Who renders the icons?
Posted by: JohnHell
Date: March 15, 2017 09:36PM

Ok, that worked.

So,looks like Gecko might be used to read images for interface as well.

Nice discovery, really.

I had the feeling of the connection between JS and macro language, but not at this level.

Re: Who renders the icons?
Posted by: rodocop
Date: March 17, 2017 08:02PM

Quote
JohnHell
Yep, if we use your system of an ICL (icon file with various sizes is actually an ICL file, standing for icon library), that would be great.

Just to be precise: ICL-file contains multiple icons in multiple (optionally) sizes; ICO-file contains single icon but also can store multiple sizes of it. This doesn't make it ICL.

K-Meleon forum is powered by Phorum.