alice-mkh / gnomerunner

Native look for SeaMonkey on Linux
https://addons.mozilla.org/en-US/seamonkey/addon/gnomerunnergtk-revived
3 stars 1 forks source link

Windows compatibility #6

Open D0ve opened 10 years ago

D0ve commented 10 years ago

Thank you for so wonderful SM theme! Would be great to see it working on win systems either! Could you remove linux dependency in the theme? ...or include windows compatibility, please!

alice-mkh commented 10 years ago

Umm, the whole point of the theme is to use (overuse :)) Linux-specific feature: native icons. moz-icon://stock/gtk-directory?size=dialog What does it show for you?

D0ve commented 10 years ago

it shows nothing unfortunately( - (and the applyed theme shows holes on icons places( )....seems it's because of out of icons... could you include icons pack to the theme and make it optional in config. extension? -so could be possible use it in any OSes!

alice-mkh commented 10 years ago

Yes, it shows nothing. And that's why the theme is Linux-only. :) If I include an icon pack, the theme will become useless, as it will be just default with different icons. Also, which icon pack? This theme will look differently on each computer, because it takes icons from the system.

Additionally, "just" creating an optional icon theme is really difficult. You may have noticed that I have splitted Freedesktop option to a separate theme for 0.3. If it was possible to define several URLs so that the engine uses the first working one, if would be awesome. But it doesn't, as I know.

D0ve commented 10 years ago

I didn't get about splitting a little - what's the difference between the both your themes?

alice-mkh commented 10 years ago

One uses stock GTK icons, and another one uses Freedesktop ones. For example, stock: moz-icon://stock/gtk-file?size=dialog and Freedesktop: moz-icon://stock/text-x-generic?size=dialog Once again these things are Linux-specific...

D0ve commented 10 years ago

and the both icons don't included in the exact themes packs, right?

alice-mkh commented 10 years ago

Of course.

alice-mkh commented 10 years ago

If you have some Linux computer or virtual machine, do this: Open Composer on SM with default theme. Insert this:

    <img alt="fd" title="FD" src="moz-icon://stock/text-x-generic?size=dialog" height="48" width="48">
    <img alt="gtk" title="GTK" src="moz-icon://stock/gtk-file?size=dialog" height="48" width="48">

See yourself. Edit: Oh, it has got messed up. Wait a bit. Edit: Fixed.

D0ve commented 10 years ago

oh, I see.... since I've started as dos and win user - I didn't know that dependences;)

I always have keeping a wish about an ideal SM theme... since the best of it was dropt and forgotten... the idea is - one theme with config extension - like yours, and in that config with changing some styles and other settings could it be possible to change\switch to another icons sets. (contained in the current theme pack) I know at least 3-5 great icons packs in Linux style from droped good SM themes!

alice-mkh commented 10 years ago

I would like to make it switch icon sets in the config extensions, but it's pretty hard: places where icons are used are scattered through the theme, and there are lots of them. It's pretty much impossible to implement such an option in a nice way. :( Once again, if there was a way to detect which icons are available, it would be possible to combine the themes (use FD icon, if it's not available, use stock icon, if it's not available, use built-in icon) and to make a set of fallback icons so that the theme is usable on other OSes.

alice-mkh commented 10 years ago

Also, "Linux style" — is it Tango style? Screenshots on AMO show default GNOME (MATE really :D) icon theme, old default Ubuntu theme, new default Ubuntu theme. Every other DE and distro will have its own default icon set, and there are much more custom sets.

D0ve commented 10 years ago

Yes, Tango , and there're at least 3 (qite specific D but great) - Nuvola (http://img73.imageshack.us/img73/2267/20070106cto3.png) original from http://www.icon-king.com/projects/nuvola/ , Sirena (http://vectorlinux.osuosl.org/incognu/) ...looking for a pic.... just the theme pack http://distro.ibiblio.org/vectorlinux/incognu/gnu/sirena.jar and Pinball (http://mozilla-themes.schellen.net/img/pinball-preview-small.png)

It's a pity..... so, it won't possible to theme to contain more then one icon pack inside and switch between them at all? .... may be via using substitution and restart?

alice-mkh commented 10 years ago

It is possible, but the code that would properly handle it would be half of the theme size. :) I don't have enough will to do that, as it's basically another project. For that I need to split 52 CSS files (every one that uses system icons) to the main file and an icon-only file that the first one would import, and somehow replace those 52 imported files using JS. And after that every change in the theme would require a change in the options addon. It's not worth it, I think. After all, it's MUCH simpler to just modify the theme and rebuild it than to implement any kind of runtime switch.

alice-mkh commented 10 years ago

If you want to repackage it, it's not very hard. I don't directly use moz-icon:// there. Instead, I use %NATIVE-ICON and %CUSTOM-ICON constructions, which get replaced when I package the theme. It's like this to allow me only have one source for two themes. So, when you run build script, it creates 2 themes, and replaces the constructions like this: Src:

%STOCK-ICON gtk-find edit-find 16 disabled
%CUSTOM-ICON web-browser 24

GTK:

moz-icon://stock/gtk-find?size=menu&state=disabled
chrome://global/skin/icons/24x24/web-browser.png

FD:

moz-icon://stock/edit-find?size=menu&state=disabled
moz-icon://stock/web-browser?size=toolbar

You can modify the build script so that it will always use chrome://global/skin/icons/. Then, if you get the needed icons, it will work.

However, disabled states would be messed up, because you can't use "state=disabled" with images. I handle it like this:

#namedAnchorButton[disabled="true"],
#hlineButton[disabled="true"],
#tableButton[disabled="true"] {
  opacity: %DISABLED-OPACITY !important;
}

%DISABLED-OPACITY gets replaced with 0.5F on GTK theme, and 1.0F on FD one. However, the icons that are always native (%NATIVE-ICON ones) don't have it, so they will look wrong with images. You will have to add those statements for them.

alice-mkh commented 9 years ago

No activity, closing.

alice-mkh commented 9 years ago

I have an idea that would totally allow this (along with merging stock GTK and FD flavors back into one, and switching themes on the fly), but it will limit compatibility to 2.28+. AMO statistics say that old SM versions are used by literally one or two people, so I think I can drop them. After all, they'll just be stuck with an old theme version, so they'll not lose any features.

The idea is replacing all usages of native icons with variables and making several css files containing only those variables, which will then be loaded with JS. Like that, I can make several layers:

  1. Few base files that contain all used icons. Those would work usable even in non-Unix environments.
  2. Stock GTK "layer". It is meant to be used in combination with one of the above.
  3. Freedesktop "layer". Same as above, excluding GTK one. So, it will be like: Icon theme: ... Native icons: None/GTK/Freedesktop/(Possibly)KDE. Like that all the icon usage will be in a single file and easily controlled.

Like this: Base file: --icon-go-previous-16: url("chrome://icon-themes/gnome/16x16/go-previous.png"); --icon-go-previous-16-dis: var(--icon-go-previous-16); --icon-go-previous-24: url("chrome://icon-themes/gnome/24x24/go-previous.png"); --icon-go-previous-24-dis: var(--icon-go-previous-24); --icon-go-previous-48: url("chrome://icon-themes/gnome/48x48/go-previous.png"); --icon-go-previous-48-dis: var(--icon-go-previous-48); --icon-go-previous-dis-opacity: .5;

GTK layer: --icon-go-previous-16: url("moz-icon://stock/gtk-go-back?size=menu"); --icon-go-previous-16-dis: url("moz-icon://stock/gtk-go-back?size=menu&state=disabled"); --icon-go-previous-24: url("moz-icon://stock/gtk-go-back?size=toolbar"); --icon-go-previous-24-dis: url("moz-icon://stock/gtk-go-back?size=toolbar&state=disabled"); --icon-go-previous-48: url("moz-icon://stock/gtk-go-back?size=dialog"); --icon-go-previous-48-dis: url("moz-icon://stock/gtk-go-back?size=dialog&state=disabled"); --icon-go-previous-dis-opacity: 1;

Freedesktop layer: --icon-go-previous-16: url("moz-icon://stock/go-previous?size=menu"); --icon-go-previous-16-dis: url("moz-icon://stock/go-previous?size=menu&state=disabled"); --icon-go-previous-24: url("moz-icon://stock/go-previous?size=toolbar"); --icon-go-previous-24-dis: url("moz-icon://stock/go-previous?size=toolbar&state=disabled"); --icon-go-previous-48: url("moz-icon://stock/go-previous?size=dialog"); --icon-go-previous-48-dis: url("moz-icon://stock/go-previous?size=dialog&state=disabled"); --icon-go-previous-dis-opacity: 1;

This approach works well, as far as I tested.

dumol commented 9 years ago

I would add that this theme shouldn't be Linux only. IIRC I had to install it in Linux and then move the profile to the BSD installation I was using at the time to get it working there too. I think all the BSDs could benefit from installing this… And I can confirm it works beatifully in FreeBSD and OpenBSD. Thanks!

alice-mkh commented 9 years ago

The platform restriction is entirely addons.mozilla.org thing. There aren't any ways to disable it just for non-GTK SeaMonkey builds, you are only offered by this: default

alice-mkh commented 9 years ago

Of course, if I implement this, I will be able to remove the restriction altogether.

alice-mkh commented 9 years ago

Also, you could just download the theme even though it says to be incompatible and then force install it. The theme itself isn't restricted, and that's not even possible, as far as I know.

dumol commented 9 years ago

Thanks for the tips, I'll keep that in mind.

alice-mkh commented 9 years ago

Hmm. Icons are the least problem, is seems. With XP Luna theme it mostly looks acceptable, but in Windows Classic theme it's completely broken. SeaMonkey Unix skin and GNOMErunner rely mostly on -moz-appearance for widgets. However, Classic does not support it, so toolbars are borderless, toolbar buttons are borderless, menu popups are transparent etc.

alice-mkh commented 8 years ago

I've finally merged the slowly developed config-rewrite branch. The icon themes are there, and they'll work on Windows as well. I won't allow Windows platform by default on AMO for now, but the theme itself should work on non-classic themes. On windows classic, it will be a mess because moz-appearance is not supported there, see my previous comment.