Classic Blue is a visual style that uses blue as the main color and doesn't have bitmaps for UI controls.
Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com --- configure.ac | 1 + dlls/setupapi/fakedll.c | 51 +++++++------- loader/wine.inf.in | 2 + themes/light/Makefile.in | 3 + themes/light/light.rc | 140 +++++++++++++++++++++++++++++++++++++++ themes/light/resources.h | 25 +++++++ tools/make_makefiles | 8 +-- tools/makedep.c | 14 ++-- 8 files changed, 209 insertions(+), 35 deletions(-) create mode 100644 themes/light/Makefile.in create mode 100644 themes/light/light.rc create mode 100644 themes/light/resources.h
diff --git a/configure.ac b/configure.ac index f76dd047825..4888b70ae20 100644 --- a/configure.ac +++ b/configure.ac @@ -4002,6 +4002,7 @@ WINE_CONFIG_MAKEFILE(programs/wusa) WINE_CONFIG_MAKEFILE(programs/xcopy) WINE_CONFIG_MAKEFILE(programs/xcopy/tests) WINE_CONFIG_MAKEFILE(server) +WINE_CONFIG_MAKEFILE(themes/light) WINE_CONFIG_MAKEFILE(tools,,[test "x$enable_tools" = xno]) WINE_CONFIG_MAKEFILE(tools/sfnt2fon,,[test "x$enable_tools" = xno]) WINE_CONFIG_MAKEFILE(tools/widl,,[test "x$enable_tools" = xno]) diff --git a/dlls/setupapi/fakedll.c b/dlls/setupapi/fakedll.c index 203d7c393ce..416db544303 100644 --- a/dlls/setupapi/fakedll.c +++ b/dlls/setupapi/fakedll.c @@ -417,11 +417,22 @@ static const WCHAR *enum_load_path( unsigned int idx ) /* try to load a pre-compiled fake dll */ static void *load_fake_dll( const WCHAR *name, SIZE_T *size ) { + static const struct + { + const WCHAR *suffix; + const WCHAR *dir; + } + search_dirs[] = + { + {L".dll", L"\dlls"}, + {L".exe", L"\programs"}, + {L".msstyles", L"\themes"}, + }; const WCHAR *build_dir = _wgetenv( L"WINEBUILDDIR" ); const WCHAR *path; WCHAR *file, *ptr; void *data = NULL; - unsigned int i, pos, len, namelen, maxlen = 0; + unsigned int i, pos, len, namelen, suffixlen, maxlen = 0; WCHAR *p; int res = 0;
@@ -441,29 +452,21 @@ static void *load_fake_dll( const WCHAR *name, SIZE_T *size )
if (build_dir) { - /* try as a dll */ - ptr = file + pos; - namelen = len + 1; - file[pos + len + 1] = 0; - if (namelen > 4 && !wcsncmp( ptr + namelen - 4, L".dll", 4 )) namelen -= 4; - ptr = prepend( ptr, ptr, namelen ); - ptr = prepend( ptr, L"\dlls", 5 ); - ptr = prepend( ptr, build_dir, lstrlenW(build_dir) ); - if ((res = read_file( ptr, &data, size ))) goto done; - lstrcpyW( file + pos + len + 1, L".fake" ); - if ((res = read_file( ptr, &data, size ))) goto done; - - /* now as a program */ - ptr = file + pos; - namelen = len + 1; - file[pos + len + 1] = 0; - if (namelen > 4 && !wcsncmp( ptr + namelen - 4, L".exe", 4 )) namelen -= 4; - ptr = prepend( ptr, ptr, namelen ); - ptr = prepend( ptr, L"\programs", 9 ); - ptr = prepend( ptr, build_dir, lstrlenW(build_dir) ); - if ((res = read_file( ptr, &data, size ))) goto done; - lstrcpyW( file + pos + len + 1, L".fake" ); - if ((res = read_file( ptr, &data, size ))) goto done; + for (i = 0; i < ARRAY_SIZE(search_dirs); ++i) + { + ptr = file + pos; + namelen = len + 1; + file[pos + len + 1] = 0; + suffixlen = lstrlenW( search_dirs[i].suffix ); + if (namelen > suffixlen && !wcsncmp( ptr + namelen - suffixlen, search_dirs[i].suffix, suffixlen )) + namelen -= suffixlen; + ptr = prepend( ptr, ptr, namelen ); + ptr = prepend( ptr, search_dirs[i].dir, lstrlenW( search_dirs[i].dir )); + ptr = prepend( ptr, build_dir, lstrlenW( build_dir ) ); + if ((res = read_file( ptr, &data, size ))) goto done; + lstrcpyW( file + pos + len + 1, L".fake" ); + if ((res = read_file( ptr, &data, size ))) goto done; + } }
file[pos + len + 1] = 0; diff --git a/loader/wine.inf.in b/loader/wine.inf.in index 24da6f3af6b..0eaa75191bd 100644 --- a/loader/wine.inf.in +++ b/loader/wine.inf.in @@ -2658,6 +2658,8 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G" 11,,iexplore.exe 11,,notepad.exe 11,,winetest.exe,- +; Themes +10,Resources\Themes\light,light.msstyles ; skip .NET fake dlls in Wine Mono package 11,,aspnet_regiis.exe,- 11,,ngen.exe,- diff --git a/themes/light/Makefile.in b/themes/light/Makefile.in new file mode 100644 index 00000000000..d6b7a53d7f8 --- /dev/null +++ b/themes/light/Makefile.in @@ -0,0 +1,3 @@ +MODULE = light.msstyles + +RC_SRCS = light.rc diff --git a/themes/light/light.rc b/themes/light/light.rc new file mode 100644 index 00000000000..e0ace9cb52e --- /dev/null +++ b/themes/light/light.rc @@ -0,0 +1,140 @@ +/* + * Copyright 2021 Zhiyi Zhang for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "resources.h" + +#pragma makedep po + +LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT + +/* Theme color display names */ +STRINGTABLE +{ + IDS_COLOR_DISPLAY_NAME_CLASSIC_BLUE "Classic Blue" +} + +/* Theme color tooltips */ +STRINGTABLE +{ + IDS_COLOR_TOOLTIP_CLASSIC_BLUE "Classic Blue" +} + +/* Theme size display names */ +STRINGTABLE +{ + IDS_SIZE_DISPLAY_NAME_NORMAL "Normal" +} + +/* Theme size tooltips */ +STRINGTABLE +{ + IDS_SIZE_TOOLTIP_NORMAL "Normal" +} + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +/* Theme version */ +1 PACKTHEM_VERSION {0x3} + +/* Theme color names */ +1 COLORNAMES +{ +"Classic Blue\0" +"\0" +} + +/* Theme size names */ +1 SIZENAMES +{ +"NormalSize\0" +"\0" +} + +/* Theme ini files */ +1 FILERESNAMES +{ +"CLASSIC_BLUE_INI\0" +"\0" +} + +/* Theme definition */ +THEMES_INI TEXTFILE +{ +"[documentation]\r\n" +"DisplayName = Light\r\n" +"ToolTip = Light Visual Style\r\n" +} + +/* Light theme definition */ +/* Classic blue theme, no bitmaps */ +CLASSIC_BLUE_INI TEXTFILE +{ +"[Globals]\r\n" +"EdgeLightColor = 255 255 255\r\n" +"EdgeHighLightColor = 255 255 255\r\n" +"EdgeShadowColor = 189 189 189\r\n" +"EdgeDkShadowColor = 158 158 158\r\n" +"EdgeFillColor = 255 255 255\r\n" + +"\r\n[SysMetrics]\r\n" +"; System colors\r\n" +"Scrollbar = 255 255 255\r\n" +"Background = 37 111 149\r\n" +"ActiveCaption = 50 150 250\r\n" +"InactiveCaption = 245 245 245\r\n" +"Menu = 255 255 255\r\n" +"Window = 255 255 255\r\n" +"WindowFrame = 158 158 158\r\n" +"MenuText = 0 0 0\r\n" +"WindowText = 0 0 0\r\n" +"CaptionText = 0 0 0\r\n" +"ActiveBorder = 255 255 255\r\n" +"InactiveBorder = 255 255 255\r\n" +"AppWorkSpace = 128 128 128\r\n" +"Highlight = 48 150 250\r\n" +"HighlightText = 255 255 255\r\n" +"BtnFace = 245 245 245\r\n" +"BtnShadow = 166 166 166\r\n" +"GrayText = 166 166 166\r\n" +"BtnText = 0 0 0\r\n" +"InactiveCaptionText = 100 100 100\r\n" +"BtnHighlight = 255 255 255\r\n" +"DkShadow3d = 106 106 106\r\n" +"Light3d = 227 227 227\r\n" +"InfoText = 0 0 0\r\n" +"InfoBk = 255 255 255\r\n" +"ButtonAlternateFace = 255 255 255\r\n" +"HotTracking = 224 224 224\r\n" +"GradientActiveCaption = 50 150 250\r\n" +"GradientInactiveCaption = 245 245 245\r\n" +"MenuHilight = 48 150 250\r\n" +"MenuBar = 255 255 255\r\n" + +"\r\n; Flat menus\r\n" +"FlatMenus = true\r\n" +} + +/* File version */ +#define WINE_FILEDESCRIPTION_STR "Light Theme" +#define WINE_FILENAME_STR "light.msstyles" +#define WINE_FILEVERSION 1,0,0,1 +#define WINE_FILEVERSION_STR "1.0.0.1" +#define WINE_PRODUCTVERSION 1,0,0,1 +#define WINE_PRODUCTVERSION_STR "1.0.0.1" + +#include "wine/wine_common_ver.rc" diff --git a/themes/light/resources.h b/themes/light/resources.h new file mode 100644 index 00000000000..ef75da9f628 --- /dev/null +++ b/themes/light/resources.h @@ -0,0 +1,25 @@ +/* + * Copyright 2021 Zhiyi Zhang for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <winnt.h> + +#define IDS_COLOR_DISPLAY_NAME_CLASSIC_BLUE 1000 +#define IDS_COLOR_TOOLTIP_CLASSIC_BLUE 2000 +#define IDS_SIZE_DISPLAY_NAME_NORMAL 3000 +#define IDS_SIZE_TOOLTIP_NORMAL 4000 + diff --git a/tools/make_makefiles b/tools/make_makefiles index 3abba2da840..fe337c52196 100755 --- a/tools/make_makefiles +++ b/tools/make_makefiles @@ -439,12 +439,12 @@ sub update_makefiles(@) die "APPMODE should not be defined in $file" if defined $make{"APPMODE"}; die "STATICLIB should not be defined in $file" if defined $make{"STATICLIB"}; } - elsif (defined($make{"MODULE"})) # dll or program + elsif (defined($make{"MODULE"})) # dll or program or theme { - (my $name = $file) =~ s/^(dlls|programs)/(.*)/Makefile/$2/; + (my $name = $file) =~ s/^(dlls|programs|themes)/(.*)/Makefile/$2/; my $dllflags = $make{"EXTRADLLFLAGS"} || ""; if (defined $make{"APPMODE"}) { $dllflags .= " " . $make{"APPMODE"}; } - die "MODULE should not be defined in $file" unless $file =~ /^(dlls|programs)//; + die "MODULE should not be defined in $file" unless $file =~ /^(dlls|programs|themes)//; die "STATICLIB should not be defined in $file" if defined $make{"STATICLIB"}; if ($file =~ /^programs//) { @@ -456,7 +456,7 @@ sub update_makefiles(@) { die "APPMODE should not be defined in $file" if defined $make{"APPMODE"} ; die "EXTRADLLFLAGS should not contain -mconsole or -mwindows in $file" if $dllflags =~ /-m(console|windows)/; - die "Invalid MODULE in $file" unless ($name =~ /./ && $make{"MODULE"} eq $name) || $make{"MODULE"} eq "$name.dll"; + die "Invalid MODULE in $file" unless ($name =~ /./ && $make{"MODULE"} eq $name) || $make{"MODULE"} eq "$name.dll" || $make{"MODULE"} eq "$name.msstyles"; } if (defined $make{"IMPORTLIB"}) { diff --git a/tools/makedep.c b/tools/makedep.c index db076d0c057..0d1cb5166bb 100644 --- a/tools/makedep.c +++ b/tools/makedep.c @@ -208,6 +208,7 @@ struct makefile int is_cross; int is_win16; int is_exe; + int is_msstyles;
/* values generated at output time */ struct strarray in_files; @@ -3286,7 +3287,8 @@ static void output_module( struct makefile *make ) char *spec_file = NULL; unsigned int i;
- if (!make->is_exe) spec_file = src_dir_path( make, replace_extension( make->module, ".dll", ".spec" )); + if (!make->is_exe && !make->is_msstyles) + spec_file = src_dir_path( make, replace_extension( make->module, ".dll", ".spec" )); strarray_addall( &all_libs, add_import_libs( make, &dep_libs, make->delayimports, 1, 0 )); strarray_addall( &all_libs, add_import_libs( make, &dep_libs, make->imports, 0, 0 )); add_import_libs( make, &dep_libs, get_default_imports( make ), 0, 0 ); /* dependencies only */ @@ -3319,7 +3321,7 @@ static void output_module( struct makefile *make ) strmake( "d%s/%s", pe_dir, make->module )); output( "%s%s %s.fake:", module_path, dll_ext, module_path ); } - else + else if (!make->is_msstyles) { strarray_addall( &all_libs, add_unix_libraries( make, &dep_libs )); strarray_add( &make->all_targets, make->module ); @@ -3338,11 +3340,8 @@ static void output_module( struct makefile *make ) output( "\n" ); output_winegcc_command( make, make->is_cross ); if (make->is_cross) output_filename( "-Wl,--wine-builtin" ); - if (spec_file) - { - output_filename( "-shared" ); - output_filename( spec_file ); - } + if (make->is_msstyles || spec_file) output_filename( "-shared" ); + if (spec_file) output_filename( spec_file ); output_filenames( make->extradllflags ); output_filenames_obj_dir( make, make->is_cross ? make->crossobj_files : make->object_files ); output_filenames_obj_dir( make, make->res_files ); @@ -4229,6 +4228,7 @@ static void load_sources( struct makefile *make ) make->use_msvcrt = strarray_exists( &make->extradllflags, "-mno-cygwin" ); make->is_exe = strarray_exists( &make->extradllflags, "-mconsole" ) || strarray_exists( &make->extradllflags, "-mwindows" ); + make->is_msstyles = make->module && strendswith( make->module, ".msstyles" );
if (make->module && !make->install_lib.count && !make->install_dev.count) {
Zhiyi Zhang zzhang@codeweavers.com writes:
@@ -417,11 +417,22 @@ static const WCHAR *enum_load_path( unsigned int idx ) /* try to load a pre-compiled fake dll */ static void *load_fake_dll( const WCHAR *name, SIZE_T *size ) {
- static const struct
- {
const WCHAR *suffix;
const WCHAR *dir;
- }
- search_dirs[] =
- {
{L".dll", L"\\dlls"},
{L".exe", L"\\programs"},
{L".msstyles", L"\\themes"},
- };
I don't think we need to add a new category of files. A .msstyles file is just a dll, it can go into a dlls/light.msstyles directory.