Wine-devel
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
June 2021
- 82 participants
- 607 discussions
[PATCH 1/5] wined3d: Store the map pitch in the wined3d_texture_sub_resource structure.
by Zebediah Figura 24 Jun '21
by Zebediah Figura 24 Jun '21
24 Jun '21
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/wined3d/texture.c | 34 +++++++++++++++++++++++-----------
dlls/wined3d/wined3d_private.h | 2 ++
2 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 165d83eb035..ad34e44b406 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -1711,6 +1711,20 @@ void CDECL wined3d_texture_get_pitch(const struct wined3d_texture *texture,
width, height, row_pitch, slice_pitch);
}
+static void wined3d_texture_get_map_pitch(const struct wined3d_texture *texture,
+ unsigned int level, unsigned int *row_pitch, unsigned int *slice_pitch)
+{
+ if (texture->resource.format_flags & WINED3DFMT_FLAG_BROKEN_PITCH)
+ {
+ *row_pitch = wined3d_texture_get_level_width(texture, level) * texture->resource.format->byte_count;
+ *slice_pitch = wined3d_texture_get_level_height(texture, level) * (*row_pitch);
+ }
+ else
+ {
+ wined3d_texture_get_pitch(texture, level, row_pitch, slice_pitch);
+ }
+}
+
DWORD CDECL wined3d_texture_set_lod(struct wined3d_texture *texture, DWORD lod)
{
struct wined3d_resource *resource;
@@ -1992,6 +2006,8 @@ HRESULT CDECL wined3d_texture_update_desc(struct wined3d_texture *texture, unsig
sub_resource->size = texture->slice_pitch;
sub_resource->locations = WINED3D_LOCATION_DISCARDED;
+ wined3d_texture_get_map_pitch(texture, level, &sub_resource->map_row_pitch, &sub_resource->map_slice_pitch);
+
if (texture->texture_ops == &texture_gl_ops)
{
if (multisample_type && gl_info->supported[ARB_TEXTURE_MULTISAMPLE])
@@ -3587,15 +3603,8 @@ static HRESULT texture_resource_sub_resource_map(struct wined3d_resource *resour
context_release(context);
- if (fmt_flags & WINED3DFMT_FLAG_BROKEN_PITCH)
- {
- map_desc->row_pitch = wined3d_texture_get_level_width(texture, texture_level) * format->byte_count;
- map_desc->slice_pitch = wined3d_texture_get_level_height(texture, texture_level) * map_desc->row_pitch;
- }
- else
- {
- wined3d_texture_get_pitch(texture, texture_level, &map_desc->row_pitch, &map_desc->slice_pitch);
- }
+ map_desc->row_pitch = sub_resource->map_row_pitch;
+ map_desc->slice_pitch = sub_resource->map_slice_pitch;
if (!box)
{
@@ -3950,6 +3959,8 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc
for (i = 0; i < sub_count; ++i)
{
struct wined3d_texture_sub_resource *sub_resource;
+ unsigned int level = i % texture->level_count;
+ unsigned int layer = i / texture->level_count;
sub_resource = &texture->sub_resources[i];
sub_resource->locations = WINED3D_LOCATION_DISCARDED;
@@ -3959,6 +3970,8 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc
wined3d_texture_invalidate_location(texture, i, ~WINED3D_LOCATION_SYSMEM);
}
+ wined3d_texture_get_map_pitch(texture, level, &sub_resource->map_row_pitch, &sub_resource->map_slice_pitch);
+
if (FAILED(hr = device_parent->ops->texture_sub_resource_created(device_parent,
desc->resource_type, texture, i, &sub_resource->parent, &sub_resource->parent_ops)))
{
@@ -3970,8 +3983,7 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc
TRACE("parent %p, parent_ops %p.\n", sub_resource->parent, sub_resource->parent_ops);
- TRACE("Created sub-resource %u (level %u, layer %u).\n",
- i, i % texture->level_count, i / texture->level_count);
+ TRACE("Created sub-resource %u (level %u, layer %u).\n", i, level, layer);
if (desc->usage & WINED3DUSAGE_OWNDC)
{
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index da1cf638606..1e6a315e72c 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4259,6 +4259,8 @@ struct wined3d_texture
DWORD locations;
struct wined3d_bo_gl bo;
+ unsigned int map_row_pitch, map_slice_pitch;
+
void *user_memory;
} *sub_resources;
};
--
2.30.2
3
11
[PATCH 1/5] ntdll/tests: Fix AVX tests on processors that don't support XSAVEOPT.
by Zebediah Figura 24 Jun '21
by Zebediah Figura 24 Jun '21
24 Jun '21
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/ntdll/tests/exception.c | 57 ++++++++++++++++++++++++------------
1 file changed, 39 insertions(+), 18 deletions(-)
diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c
index 7e849fba1aa..cf2f6b1e7fb 100644
--- a/dlls/ntdll/tests/exception.c
+++ b/dlls/ntdll/tests/exception.c
@@ -7562,7 +7562,7 @@ static const unsigned test_extended_context_spoil_data1[8] = {0x10, 0x20, 0x30,
static const unsigned test_extended_context_spoil_data2[8] = {0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, 0x85};
static BOOL test_extended_context_modified_state;
-static BOOL compaction_enabled;
+static BOOL xsaveopt_enabled, compaction_enabled;
static DWORD test_extended_context_handler(EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame,
CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher)
@@ -7603,9 +7603,11 @@ static DWORD test_extended_context_handler(EXCEPTION_RECORD *rec, EXCEPTION_REGI
context_ymm_data = (unsigned int *)&xs->YmmContext;
ok(!((ULONG_PTR)xs % 64), "Got unexpected xs %p.\n", xs);
- ok((compaction_enabled && (xs->CompactionMask & (expected_compaction_mask | 3)) == expected_compaction_mask)
- || (!compaction_enabled && !xs->CompactionMask), "Got unexpected CompactionMask %s, compaction %#x.\n",
- wine_dbgstr_longlong(xs->CompactionMask), compaction_enabled);
+ if (compaction_enabled)
+ ok((xs->CompactionMask & (expected_compaction_mask | 3)) == expected_compaction_mask,
+ "Got compaction mask %#I64x.\n", xs->CompactionMask);
+ else
+ ok(!xs->CompactionMask, "Got compaction mask %#I64x.\n", xs->CompactionMask);
if (test_extended_context_modified_state)
{
@@ -7615,9 +7617,12 @@ static DWORD test_extended_context_handler(EXCEPTION_RECORD *rec, EXCEPTION_REGI
}
else
{
- ok(!xs->Mask, "Got unexpected Mask %s.\n", wine_dbgstr_longlong(xs->Mask));
- /* The save area has garbage in this case, the state should be restored to INIT_STATE
- * without using these data. */
+ ok(xs->Mask == (xsaveopt_enabled ? 0 : 4), "Got unexpected Mask %#I64x.\n", xs->Mask);
+ /* The save area has garbage if xsaveopt is available.
+ *
+ * Clear the mask; the state should be restored to INIT_STATE without
+ * using this data. */
+ xs->Mask = 0;
memcpy(context_ymm_data, test_extended_context_spoil_data1 + 4, sizeof(M128A));
}
@@ -7897,6 +7902,7 @@ static void test_extended_context(void)
int regs[4];
__cpuidex(regs, 0xd, 1);
+ xsaveopt_enabled = regs[0] & 1;
compaction_enabled = regs[0] & 2;
}
@@ -8547,7 +8553,7 @@ static void test_extended_context(void)
"Got unexpected bret %#x, GetLastError() %u.\n", bret, GetLastError());
ok(context->ContextFlags == expected_flags, "Got unexpected ContextFlags %#x.\n",
context->ContextFlags);
- ok(xs->Mask == (compaction_enabled ? 0 : 4), "Got unexpected Mask %s.\n", wine_dbgstr_longlong(xs->Mask));
+ ok(xs->Mask == (compaction_enabled ? 0 : 4), "Got unexpected Mask %#I64x.\n", xs->Mask);
ok(xs->CompactionMask == 4, "Got unexpected CompactionMask %s.\n",
wine_dbgstr_longlong(xs->CompactionMask));
for (i = 0; i < 4; ++i)
@@ -8618,7 +8624,7 @@ static void test_extended_context(void)
expected_compaction = compaction_enabled ? ((ULONG64)1 << 63) | 4 : 0;
xs = (XSTATE *)((BYTE *)context_ex + context_ex->XState.Offset);
- ok(!xs->Mask, "Got unexpected Mask %s.\n", wine_dbgstr_longlong(xs->Mask));
+ ok(xs->Mask == (xsaveopt_enabled ? 0 : 4), "Got unexpected Mask %#I64x.\n", xs->Mask);
ok(xs->CompactionMask == expected_compaction, "Got unexpected CompactionMask %s.\n",
wine_dbgstr_longlong(xs->CompactionMask));
@@ -8626,12 +8632,13 @@ static void test_extended_context(void)
ok(!data[i], "Got unexpected data %#x, i %u.\n", data[i], i);
for (i = 0; i < 4; ++i)
- ok(((ULONG *)&xs->YmmContext)[i] == 0xcccccccc
+ ok(((ULONG *)&xs->YmmContext)[i] == ((xs->Mask & 4) ? 0 : 0xcccccccc)
|| broken(((ULONG *)&xs->YmmContext)[i] == test_extended_context_data[i + 4]),
"Got unexpected data %#x, i %u.\n", ((ULONG *)&xs->YmmContext)[i], i);
/* Test fault exception context. */
memset(data, 0xff, sizeof(data));
+ xs->Mask = 0;
test_extended_context_modified_state = FALSE;
run_exception_test(test_extended_context_handler, NULL, except_code_reset_ymm_state,
ARRAY_SIZE(except_code_reset_ymm_state), PAGE_EXECUTE_READ);
@@ -8664,12 +8671,13 @@ static void test_extended_context(void)
bret = GetThreadContext(thread, context);
ok(bret, "Got unexpected bret %#x, GetLastError() %u.\n", bret, GetLastError());
- ok(!xs->Mask, "Got unexpected Mask %s.\n", wine_dbgstr_longlong(xs->Mask));
+ todo_wine_if (!xsaveopt_enabled)
+ ok(xs->Mask == (xsaveopt_enabled ? 0 : 4), "Got unexpected Mask %#I64x.\n", xs->Mask);
ok(xs->CompactionMask == expected_compaction, "Got unexpected CompactionMask %s.\n",
wine_dbgstr_longlong(xs->CompactionMask));
for (i = 0; i < 16 * 4; ++i)
- ok(((ULONG *)&xs->YmmContext)[i] == 0xcccccccc, "Got unexpected value %#x, i %u.\n",
- ((ULONG *)&xs->YmmContext)[i], i);
+ ok(((ULONG *)&xs->YmmContext)[i] == ((xs->Mask & 4) ? 0 : 0xcccccccc),
+ "Got unexpected value %#x, i %u.\n", ((ULONG *)&xs->YmmContext)[i], i);
pSetXStateFeaturesMask(context, 4);
memset(&xs->YmmContext, 0, sizeof(xs->YmmContext));
@@ -8725,11 +8733,24 @@ static void test_extended_context(void)
memset(&xs->YmmContext, 0xcc, sizeof(xs->YmmContext));
bret = GetThreadContext(thread, context);
ok(bret, "Got unexpected bret %#x, GetLastError() %u.\n", bret, GetLastError());
- ok(!xs->Mask || (sizeof(void *) == 4 && xs->Mask == 4),
- "Got unexpected Mask %s.\n", wine_dbgstr_longlong(xs->Mask));
- for (i = 0; i < 16 * 4; ++i)
- ok(((ULONG *)&xs->YmmContext)[i] == (xs->Mask ? (i < 8 * 4 ? 0 : 0x48484848) : 0xcccccccc),
- "Got unexpected value %#x, i %u.\n", ((ULONG *)&xs->YmmContext)[i], i);
+ if (sizeof(void *) == 4)
+ {
+ ok(xs->Mask == 4, "Got unexpected Mask %#I64x.\n", xs->Mask);
+ for (i = 0; i < 8 * 4; ++i)
+ ok(((ULONG *)&xs->YmmContext)[i] == 0,
+ "Got unexpected value %#x, i %u.\n", ((ULONG *)&xs->YmmContext)[i], i);
+ for (; i < 16 * 4; ++i)
+ ok(((ULONG *)&xs->YmmContext)[i] == 0x48484848,
+ "Got unexpected value %#x, i %u.\n", ((ULONG *)&xs->YmmContext)[i], i);
+ }
+ else
+ {
+ todo_wine_if (!xsaveopt_enabled)
+ ok(xs->Mask == (xsaveopt_enabled ? 0 : 4), "Got unexpected Mask %#I64x.\n", xs->Mask);
+ for (i = 0; i < 16 * 4; ++i)
+ ok(((ULONG *)&xs->YmmContext)[i] == ((xs->Mask & 4) ? 0 : 0xcccccccc),
+ "Got unexpected value %#x, i %u.\n", ((ULONG *)&xs->YmmContext)[i], i);
+ }
bret = ResumeThread(thread);
ok(bret, "Got unexpected bret %#x, GetLastError() %u.\n", bret, GetLastError());
--
2.30.2
4
11
24 Jun '21
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49395
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/d2d1/bitmap.c | 39 ++++++++++++++++++++++++---------------
1 file changed, 24 insertions(+), 15 deletions(-)
diff --git a/dlls/d2d1/bitmap.c b/dlls/d2d1/bitmap.c
index 0b5f3e6dc5a..03982924efa 100644
--- a/dlls/d2d1/bitmap.c
+++ b/dlls/d2d1/bitmap.c
@@ -414,7 +414,7 @@ HRESULT d2d_bitmap_create_shared(struct d2d_device_context *context, REFIID iid,
if (IsEqualGUID(iid, &IID_ID2D1Bitmap))
{
struct d2d_bitmap *src_impl = unsafe_impl_from_ID2D1Bitmap(data);
- ID3D10Device *device;
+ ID3D11Device *device;
HRESULT hr = S_OK;
if (src_impl->factory != context->factory)
@@ -423,9 +423,9 @@ HRESULT d2d_bitmap_create_shared(struct d2d_device_context *context, REFIID iid,
goto failed;
}
- ID3D10Resource_GetDevice(src_impl->resource, &device);
- ID3D10Device_Release(device);
- if (device != context->d3d_device)
+ ID3D11Resource_GetDevice(src_impl->d3d11_resource, &device);
+ ID3D11Device_Release(device);
+ if (device != (ID3D11Device *)context->d3d11_device)
{
hr = D2DERR_UNSUPPORTED_OPERATION;
goto failed;
@@ -466,28 +466,37 @@ HRESULT d2d_bitmap_create_shared(struct d2d_device_context *context, REFIID iid,
{
DXGI_SURFACE_DESC surface_desc;
IDXGISurface *surface = data;
- ID3D10Resource *resource;
+ ID3D11Resource *resource;
+ ID3D10Resource *d3d10_resource;
D2D1_SIZE_U pixel_size;
- ID3D10Device *device;
+ ID3D11Device *device;
HRESULT hr;
- if (FAILED(IDXGISurface_QueryInterface(surface, &IID_ID3D10Resource, (void **)&resource)))
+ if (FAILED(IDXGISurface_QueryInterface(surface, &IID_ID3D11Resource, (void **)&resource)))
{
WARN("Failed to get d3d resource from dxgi surface.\n");
return E_FAIL;
}
- ID3D10Resource_GetDevice(resource, &device);
- ID3D10Device_Release(device);
- if (device != context->d3d_device)
+ if (FAILED(hr = ID3D11Resource_QueryInterface(resource, &IID_ID3D10Resource, (void **)&d3d10_resource)))
{
- ID3D10Resource_Release(resource);
+ ERR("Failed to query ID3D10Resource interface, hr %#x.\n", hr);
+ ID3D11Resource_Release(resource);
+ return hr;
+ }
+
+ ID3D11Resource_GetDevice(resource, &device);
+ ID3D11Resource_Release(resource);
+ ID3D11Device_Release(device);
+ if (device != (ID3D11Device *)context->d3d11_device)
+ {
+ ID3D10Resource_Release(d3d10_resource);
return D2DERR_UNSUPPORTED_OPERATION;
}
if (!(*bitmap = heap_alloc_zero(sizeof(**bitmap))))
{
- ID3D10Resource_Release(resource);
+ ID3D10Resource_Release(d3d10_resource);
return E_OUTOFMEMORY;
}
@@ -495,7 +504,7 @@ HRESULT d2d_bitmap_create_shared(struct d2d_device_context *context, REFIID iid,
if (FAILED(hr = IDXGISurface_GetDesc(surface, &surface_desc)))
{
WARN("Failed to get surface desc, hr %#x.\n", hr);
- ID3D10Resource_Release(resource);
+ ID3D10Resource_Release(d3d10_resource);
return hr;
}
@@ -522,8 +531,8 @@ HRESULT d2d_bitmap_create_shared(struct d2d_device_context *context, REFIID iid,
pixel_size.width = surface_desc.Width;
pixel_size.height = surface_desc.Height;
- d2d_bitmap_init(*bitmap, context, resource, pixel_size, &d);
- ID3D10Resource_Release(resource);
+ d2d_bitmap_init(*bitmap, context, d3d10_resource, pixel_size, &d);
+ ID3D10Resource_Release(d3d10_resource);
TRACE("Created bitmap %p.\n", *bitmap);
return S_OK;
--
2.32.0
3
11
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/light.msstyles/light.rc | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/dlls/light.msstyles/light.rc b/dlls/light.msstyles/light.rc
index bebee8788c4..cb51b8a5246 100644
--- a/dlls/light.msstyles/light.rc
+++ b/dlls/light.msstyles/light.rc
@@ -333,6 +333,13 @@ BLUE_INI TEXTFILE
"[Edit.Edittext(ReadOnly)]\r\n"
"FillColor = 245 245 245\r\n"
"TextColor = 0 0 0\r\n"
+
+"\r\n; ListBox\r\n"
+"[ListBox]\r\n"
+"BgType = BorderFill\r\n"
+"BorderSize = 1\r\n"
+"FillColor = 255 255 255\r\n"
+"BorderColor = 174 174 174\r\n"
}
/* Button */
--
2.30.2
1
0
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/light.msstyles/light.rc | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/dlls/light.msstyles/light.rc b/dlls/light.msstyles/light.rc
index 2451ffcd4f0..bebee8788c4 100644
--- a/dlls/light.msstyles/light.rc
+++ b/dlls/light.msstyles/light.rc
@@ -318,6 +318,21 @@ BLUE_INI TEXTFILE
"GlyphImageFile = blue_combobutton_glyph.bmp\r\n"
"GlyphTransparent = True\r\n"
"Transparent = True\r\n"
+
+"\r\n; Edit\r\n"
+"[Edit]\r\n"
+"BgType = BorderFill\r\n"
+"BorderSize = 1\r\n"
+"FillColor = 255 255 255\r\n"
+"BorderColor = 174 174 174\r\n"
+
+"[Edit.Edittext(Disabled)]\r\n"
+"FillColor = 245 245 245\r\n"
+"TextColor = 166 166 166\r\n"
+
+"[Edit.Edittext(ReadOnly)]\r\n"
+"FillColor = 245 245 245\r\n"
+"TextColor = 0 0 0\r\n"
}
/* Button */
--
2.30.2
1
0
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/light.msstyles/Makefile.in | 2 ++
dlls/light.msstyles/blue_combobutton.bmp | Bin 0 -> 6858 bytes
dlls/light.msstyles/blue_combobutton.svg | 18 ++++++++++
.../light.msstyles/blue_combobutton_glyph.bmp | Bin 0 -> 1258 bytes
.../light.msstyles/blue_combobutton_glyph.svg | 28 ++++++++++++++++
dlls/light.msstyles/light.rc | 31 ++++++++++++++++++
6 files changed, 79 insertions(+)
create mode 100644 dlls/light.msstyles/blue_combobutton.bmp
create mode 100644 dlls/light.msstyles/blue_combobutton.svg
create mode 100644 dlls/light.msstyles/blue_combobutton_glyph.bmp
create mode 100644 dlls/light.msstyles/blue_combobutton_glyph.svg
diff --git a/dlls/light.msstyles/Makefile.in b/dlls/light.msstyles/Makefile.in
index 599609def60..8f4ffdb9a22 100644
--- a/dlls/light.msstyles/Makefile.in
+++ b/dlls/light.msstyles/Makefile.in
@@ -7,6 +7,8 @@ SVG_SRCS = \
blue_checkbox_13px.svg \
blue_checkbox_16px.svg \
blue_checkbox_25px.svg \
+ blue_combobutton_glyph.svg \
+ blue_combobutton.svg \
blue_commandlink_glyph_30px.svg \
blue_commandlink_glyph_45px.svg \
blue_commandlink.svg \
diff --git a/dlls/light.msstyles/blue_combobutton.bmp b/dlls/light.msstyles/blue_combobutton.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..a2b12ba3e1f3c3506f30c0dd75e567612a6e526c
GIT binary patch
literal 6858
zcmeI1&raJw5XN1B$_sGf(B#lVLJm0M1rV2>dO>}Y9_svgf*vdCh*yY|<Q9n}TxrS+
zrA|Q03}&29-pkA;m2$AfFrRn7`DMMa2H9MHeL9QYj-T|qPjO1|jp9R8kB%r`z0Z?`
z!$nd4!(;CH%guL~RLNtNYd6zqG^&lq;~7Op;f%pG_ru}vldNJgnaqjVrLm7Prp;VK
z^?hQ_q=s}B!jk&wbb3OJe{xQmzLnh$WS|bEA_H~B)9nE68ERd%??MJ(a)->Dlx25Mck
z??MJ(a)->Dlx25Mck??MJ(a)->Dlx25Mck??MLYee{=1K81J->S3Lbp2am(-=iq{-+O;v
z(a)H#2X{h9kQaf|*e>pax#dd-?kntxo<cy^tpGeutW=zg?{>!tc7g`Kti>}Ot&>{rmb
zwygYmy62mMSDp(zuXx6LrL(a)o0{#E;D={5iDehKM&rF)rs)OLN1C)a7bSgx()<=(k0
zcuAv9=YNCxV18{&?(xDq^t`%l*Vez|**c9g3TKQgOXK_1-DUCji0bE?H14`#%lv%A
zHJkLJ&+CzW<8_6wq~87dd_s)k`G~Ji=0Y<vP**(N4&a`l)>Zp1WT5t)x)Efc)>Zp1
zWT5t)x)Efc)>Zp1WT5t)x)Efc)>Zp1WT5t)x)EfM-ba5ao{!dP`(ZO^Cm}s6?|*TZ
z)-;zZSq<X)dT_Deb(a)IB6!8LR4(a)xnXwT)nTee?$D-ELEsw%$kvb+R70>GEmFBH6sJH
zl_P#+pq6=SMh0ptNBqb(a)E%Vll4AfSR_>qBH=B*hSsI46FBLlU}TQf3HTRGxK2I+mj
guX`Y768gT5|JT9q*krAw>%`mXeI56B;q5cO0viV(a)SpWb4
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_combobutton.svg b/dlls/light.msstyles/blue_combobutton.svg
new file mode 100644
index 00000000000..aab7ff06812
--- /dev/null
+++ b/dlls/light.msstyles/blue_combobutton.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:20-32" width="20" height="84" version="1.1" viewBox="0 0 5.2917 22.225" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g stroke-width=".26458">
+ <rect x=".39687" y=".39687" width="4.4979" height="4.7625" rx=".52917" ry=".52917" fill="none" stroke="#aeaeae"/>
+ <rect x=".39687" y="5.9531" width="4.4979" height="4.7625" rx=".52917" ry=".52917" fill="none" stroke="#3096fa"/>
+ <rect x=".39687" y="11.509" width="4.4979" height="4.7625" rx=".52917" ry=".52917" fill="#2979ff" stroke="#2979ff"/>
+ <rect x=".39687" y="17.066" width="4.4979" height="4.7625" rx=".52917" ry=".52917" fill="none" stroke="#aeaeae"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_combobutton_glyph.bmp b/dlls/light.msstyles/blue_combobutton_glyph.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..2c0bd8a357fbffce7007fb3606beba2cf9a7b606
GIT binary patch
literal 1258
zcmd6jO>ToQ5QQBztDK>W-XP8iKy13|CMU=pDrJQd3wGTDQg<AHpL68~luGV52}HOc
z#G+DT@!2zPo{{{5x64{x*9UtD8+eA5dQnfDhi*<eSXQaqCz=gj_wR$@qH^-Li*CB6
zvMlquu0LJX?W(GZAS{Z);6J(3TgNOGPd^hc{kiYu<gSNy9BNXF5B%TyfA-ee9A<N2
z9zh5OCUZfL#nZo~^E$bpc`(Wa?F<i<%U7!N?@Z6;(j?ocO}Al_Xw#;<$y}Or7mKIQ
z<?79}lM8pfHqoP8T72+Ox$ur0W^-X4fxOwkWG?72+;gEe;N(K@!6=u`=X3t~`T;?t
Bf*t?>
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_combobutton_glyph.svg b/dlls/light.msstyles/blue_combobutton_glyph.svg
new file mode 100644
index 00000000000..0caf1c4b696
--- /dev/null
+++ b/dlls/light.msstyles/blue_combobutton_glyph.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:10-32" width="10" height="28" version="1.1" viewBox="0 0 2.6458 7.4083" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g>
+ <path d="m0-1.8521h6.35v6.35h-6.35z" fill="none" stroke-width=".26458"/>
+ <path d="m0 3.7042h6.35v6.35h-6.35z" fill="none" stroke-width=".26458"/>
+ <path d="m0.39688 0.66961 0.92136 0.91789 0.13162-0.13113-0.92136-0.91789z" stroke-width=".26458"/>
+ <path d="m2.1173 0.52917-0.92136 0.91789 0.13162 0.13113 0.92136-0.91789z" stroke-width=".26458"/>
+ <g>
+ <g stroke-width=".26458">
+ <path d="m0.39688 2.5217 0.92136 0.91789 0.13162-0.13113-0.92136-0.91789z" fill="#3096fa"/>
+ <path d="m2.1173 2.3812-0.92136 0.91789 0.13162 0.13113 0.92136-0.91789z" fill="#3096fa"/>
+ <path d="m0.39688 4.3738 0.92136 0.91789 0.13162-0.13113-0.92136-0.91789z" fill="#fff"/>
+ <path d="m2.1173 4.2333-0.92136 0.91789 0.13162 0.13113 0.92136-0.91789z" fill="#fff"/>
+ </g>
+ <path d="m0.39688 6.2259 0.92136 0.91789 0.13162-0.13113-0.92136-0.91789z" fill="#aeaeae"/>
+ <path d="m2.1173 6.0854-0.92136 0.91789 0.13162 0.13113 0.92136-0.91789z" fill="#aeaeae"/>
+ </g>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/light.rc b/dlls/light.msstyles/light.rc
index cc5b371da8c..2451ffcd4f0 100644
--- a/dlls/light.msstyles/light.rc
+++ b/dlls/light.msstyles/light.rc
@@ -294,6 +294,30 @@ BLUE_INI TEXTFILE
"ImageFile2 = blue_commandlink_glyph_45px.bmp\r\n"
"MinDpi1 = 96\r\n"
"MinDpi2 = 144\r\n"
+
+"\r\n; ComboBox\r\n"
+"[ComboBox]\r\n"
+"BgType = BorderFill\r\n"
+"BorderSize = 1\r\n"
+"FillColor = 255 255 255\r\n"
+"BorderColor = 174 174 174\r\n"
+
+"[ComboBox(Disabled)]\r\n"
+"BorderColor = 228 228 228\r\n"
+"FillColor = 231 231 231\r\n"
+
+"[ComboBox.DropDownButton]\r\n"
+"BgType = ImageFile\r\n"
+"ImageLayout = Vertical\r\n"
+"SizingType = Stretch\r\n"
+"ImageFile = blue_combobutton.bmp\r\n"
+"SizingMargins = 3, 3, 3, 3\r\n"
+"ContentMargins = 0, 0, 0, 0\r\n"
+"ImageCount = 4\r\n"
+"GlyphType = ImageGlyph\r\n"
+"GlyphImageFile = blue_combobutton_glyph.bmp\r\n"
+"GlyphTransparent = True\r\n"
+"Transparent = True\r\n"
}
/* Button */
@@ -330,6 +354,13 @@ BLUE_COMMANDLINK_GLYPH_30PX_BMP BITMAP "blue_commandlink_glyph_30px.bmp"
/* @makedep: blue_commandlink_glyph_45px.bmp */
BLUE_COMMANDLINK_GLYPH_45PX_BMP BITMAP "blue_commandlink_glyph_45px.bmp"
+/* ComboBox */
+/* @makedep: blue_combobutton.bmp */
+BLUE_COMBOBUTTON_BMP BITMAP "blue_combobutton.bmp"
+
+/* @makedep: blue_combobutton_glyph.bmp */
+BLUE_COMBOBUTTON_GLYPH_BMP BITMAP "blue_combobutton_glyph.bmp"
+
/* File version */
#define WINE_FILEDESCRIPTION_STR "Light Theme"
#define WINE_FILENAME_STR "light.msstyles"
--
2.30.2
1
0
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
v2: Supersede 208166~208171. Move from themes/light to dlls/light.msstyles. Save SVGs in optimized SVG instead of Inkscape SVG to save space.
v3: Supersede 208185~208189. Use buildimage to generate bitmaps.
dlls/light.msstyles/Makefile.in | 13 ++
dlls/light.msstyles/blue_button.bmp | Bin 0 -> 12282 bytes
dlls/light.msstyles/blue_button.svg | 24 +++
dlls/light.msstyles/blue_checkbox_13px.bmp | Bin 0 -> 8250 bytes
dlls/light.msstyles/blue_checkbox_13px.svg | 44 ++++++
dlls/light.msstyles/blue_checkbox_16px.bmp | Bin 0 -> 12426 bytes
dlls/light.msstyles/blue_checkbox_16px.svg | 36 +++++
dlls/light.msstyles/blue_checkbox_25px.bmp | Bin 0 -> 30138 bytes
dlls/light.msstyles/blue_checkbox_25px.svg | 40 +++++
dlls/light.msstyles/blue_commandlink.bmp | Bin 0 -> 13074 bytes
dlls/light.msstyles/blue_commandlink.svg | 18 +++
.../blue_commandlink_glyph_30px.bmp | Bin 0 -> 18138 bytes
.../blue_commandlink_glyph_30px.svg | 19 +++
.../blue_commandlink_glyph_45px.bmp | Bin 0 -> 40638 bytes
.../blue_commandlink_glyph_45px.svg | 19 +++
dlls/light.msstyles/blue_groupbox.bmp | Bin 0 -> 1898 bytes
dlls/light.msstyles/blue_groupbox.svg | 15 ++
dlls/light.msstyles/blue_radiobutton_13px.bmp | Bin 0 -> 5546 bytes
dlls/light.msstyles/blue_radiobutton_13px.svg | 28 ++++
dlls/light.msstyles/blue_radiobutton_16px.bmp | Bin 0 -> 8330 bytes
dlls/light.msstyles/blue_radiobutton_16px.svg | 28 ++++
dlls/light.msstyles/blue_radiobutton_25px.bmp | Bin 0 -> 20138 bytes
dlls/light.msstyles/blue_radiobutton_25px.svg | 28 ++++
dlls/light.msstyles/light.rc | 149 ++++++++++++++++++
24 files changed, 461 insertions(+)
create mode 100644 dlls/light.msstyles/blue_button.bmp
create mode 100644 dlls/light.msstyles/blue_button.svg
create mode 100644 dlls/light.msstyles/blue_checkbox_13px.bmp
create mode 100644 dlls/light.msstyles/blue_checkbox_13px.svg
create mode 100644 dlls/light.msstyles/blue_checkbox_16px.bmp
create mode 100644 dlls/light.msstyles/blue_checkbox_16px.svg
create mode 100644 dlls/light.msstyles/blue_checkbox_25px.bmp
create mode 100644 dlls/light.msstyles/blue_checkbox_25px.svg
create mode 100644 dlls/light.msstyles/blue_commandlink.bmp
create mode 100644 dlls/light.msstyles/blue_commandlink.svg
create mode 100644 dlls/light.msstyles/blue_commandlink_glyph_30px.bmp
create mode 100644 dlls/light.msstyles/blue_commandlink_glyph_30px.svg
create mode 100644 dlls/light.msstyles/blue_commandlink_glyph_45px.bmp
create mode 100644 dlls/light.msstyles/blue_commandlink_glyph_45px.svg
create mode 100644 dlls/light.msstyles/blue_groupbox.bmp
create mode 100644 dlls/light.msstyles/blue_groupbox.svg
create mode 100644 dlls/light.msstyles/blue_radiobutton_13px.bmp
create mode 100644 dlls/light.msstyles/blue_radiobutton_13px.svg
create mode 100644 dlls/light.msstyles/blue_radiobutton_16px.bmp
create mode 100644 dlls/light.msstyles/blue_radiobutton_16px.svg
create mode 100644 dlls/light.msstyles/blue_radiobutton_25px.bmp
create mode 100644 dlls/light.msstyles/blue_radiobutton_25px.svg
diff --git a/dlls/light.msstyles/Makefile.in b/dlls/light.msstyles/Makefile.in
index d6b7a53d7f8..599609def60 100644
--- a/dlls/light.msstyles/Makefile.in
+++ b/dlls/light.msstyles/Makefile.in
@@ -1,3 +1,16 @@
MODULE = light.msstyles
RC_SRCS = light.rc
+
+SVG_SRCS = \
+ blue_button.svg \
+ blue_checkbox_13px.svg \
+ blue_checkbox_16px.svg \
+ blue_checkbox_25px.svg \
+ blue_commandlink_glyph_30px.svg \
+ blue_commandlink_glyph_45px.svg \
+ blue_commandlink.svg \
+ blue_groupbox.svg \
+ blue_radiobutton_13px.svg \
+ blue_radiobutton_16px.svg \
+ blue_radiobutton_25px.svg
diff --git a/dlls/light.msstyles/blue_button.bmp b/dlls/light.msstyles/blue_button.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..6dd20ad167d73dd2a5e607df51b73197295a177e
GIT binary patch
literal 12282
zcmeI1&rZTX5XNit89YLdpa=hOmID`0UVIW04}$sxo{a>B7a#!+(a)C;D!&l#SC*mg6{
zblH?}GIUBp@@-hUQ1WH>V<x}uZ0#mI^OE+$@6X(ixy$&#^Swj9-mUKQaIKN&*_V7r
zwd>pawVVGM9&P+;`Fc?dJ6A#2yo|%QbIR03qg|aWTa^N9PR)1QkclXBGa;GJ_e48v
zR$}7MYAyaH(Uf&-H|HgEZCt?z_#iQWys()7A9mnFKD>xhzA3P1jc+NBEt6b~Y;_f`
zt$3X1^4PI%D?RsoAiACEc*Xg^e0}IJIq{*DC+8zsw{~-0LKl3K7(hJOOn?vY!8))5
zAM)Y6aBgOPI=qin;yklb_S?(mxi8NUdOT)L-pluTz2a~<oD2qoxZm$nmM$8sHSTu1
zh0$mf%;)pi7_<JDZZ#GS(Q@<D&~y_KEuMEI>(*}0OX%9Tf)DUPVgPwzGXXy2?}IQY
z2VMw^ri;abrFHqX;_+0A$HHOZF+G)wR4-4cUW%zvrcB*xjOpRDz&Zi<?3(GEVzqgu
zns&X9CsC$#Z|dQ5wm5=+(a)DDM77|@6T4X$m(a)Bhf6)s8KSC+z?g<%weCeQ$-#J!g$o}
zlk<7h?fKCf^;EmRfDiD&IshN`-Urm}QMczHM%_NmWYiI(a)7w`c-q*;M;2Is{-=0%Qm
W`<Zs#UTW+-Uti7yH0$<q7Vro8$&m8^
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_button.svg b/dlls/light.msstyles/blue_button.svg
new file mode 100644
index 00000000000..99041a80209
--- /dev/null
+++ b/dlls/light.msstyles/blue_button.svg
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:22-32" width="22" height="138" version="1.1" viewBox="0 0 5.8208 36.512" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g transform="translate(-40.717 -1.1913)" stroke-width=".26458">
+ <g fill="#fff">
+ <rect x="40.849" y="1.3236" width="5.5563" height="5.8208" rx=".52917" ry=".52917" stroke="#aeaeae"/>
+ <rect x="40.849" y="19.58" width="5.5563" height="5.8208" rx=".52917" ry=".52917" stroke="#aeaeae"/>
+ <g stroke="#3096fa">
+ <rect x="40.849" y="25.665" width="5.5563" height="5.8208" rx=".52917" ry=".52917"/>
+ <rect x="40.849" y="31.751" width="5.5563" height="5.8208" rx=".52917" ry=".52917"/>
+ <rect x="40.849" y="7.409" width="5.5563" height="5.8208" rx=".52917" ry=".52917"/>
+ </g>
+ </g>
+ <rect x="40.849" y="13.494" width="5.5563" height="5.8208" rx=".52917" ry=".52917" fill="#2979ff" stroke="#2979ff"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_checkbox_13px.bmp b/dlls/light.msstyles/blue_checkbox_13px.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..a6b1903b236fae8ccbbcd272d143f36a01eca005
GIT binary patch
literal 8250
zcmeHM&2HL27&K|soGR282&k&mK-9)=I6yB*x%5y)mD)=s`U*Yu5QlK!++#^h5PgB7
z{BVdOB_t1kco9I{gQ3!PKF8~>4S4M$Sw*syVb}Z3?5(a)2N_S3Sv_cpCq*LQqYfTzGu
zAfcp{M=0AVe9T--Q6By%!gk+%{5C_8G(7gi&(6+L=jZ1)fC(@kQ2e^pYHeIxTy&r-
zqyEIxo$Hq3;8vis`j_#!`0DCv9hx!Cg|`JMi66CwkLg#^+<836b8t??8Z+ejkRR><
zU8bWr`GtG~q(a)lS5q<*t~mSTsQ6g$Y=04BhEK=Es~zqNs~!w#}#R^9UTD8<3801y33
z_<U{H*B9&1jDb)dC4STzKBiwu&&A{X8H1D&YfRaC@;Te<13zru0lG~0-~;%De4}rs
zQQiVU{MI3V-XCeH$+3DfF;o*^J}^x~y}obkY=G058fuxfBpyY4YHU|{|1!Sw4t~5?
z#~5Rp3vUZj^0^1$a?Y|EuJ<cxEFS0M1}P)fm?75(e$noxbxoJ)C{BLC^K|a(YI;)N
zzC~T?H;WH{#(VwJ`2qbO$q?`LOYHTl;?Zigx`rI4i5%t2qVFKYoqUurmcX+$!0(~G
z4}6}d6E)!1aNkA#lsr8>)leTm|H-QpHK>;^FE5{Q4s<!R4S^55jY?4?w(~m1&Vw^*
zx7&NXO{O6pI0e!{|K7fL-U07tUI|SR_$6rKe3bH!CGt^LRn}NJ(`4oBLXV318@|{Q
z;5N|K1NzX;^{7j8kgegq%l4lqnV!{<YYmV;&3M$M(X%C{zj8dv4qxUFAF}<d%cG)Z
zo(a)bDE<-r-T!%fGdG7a^EITkEkIb(S=h{o0x!L>YUYr?KioR50)QSvDAlcs5GFZ3wl
zRz7X50aFsVZy*=$0e!Qs&Go3LnH+01+;>@HCyAU%Lwx|<j7LR{SyxNU`0LThiIzir
zXdbC9kBS<apZA&=Z}Q-b#>cN6kIFRE$Mi%iknXpkS{@Cev2=!3#Cx$kYHQ+r6lV>x
zGYY<L3(lU_5N`qtJ&L_c+~*SDHh><`2j+Uzqp5+{1(JXU41gJrdNd_)obOT8bHEUA
zdDNppc;?EZWdt}L4WOY;3broPUJp$Xusmvy6Lx(fJ9|PNlfoS1^HD5V&?}&KT-~jJ
z=D+o5d_EfenX1dYJ~u&gOR<Y3G;uzP^Dx;t8h_Vph0aI$oMmOuJW=c?VolifiO)w@
S<hM}KQ-1Y$umAVoLjM5TYj8mT
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_checkbox_13px.svg b/dlls/light.msstyles/blue_checkbox_13px.svg
new file mode 100644
index 00000000000..fbbca0ae2f6
--- /dev/null
+++ b/dlls/light.msstyles/blue_checkbox_13px.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:13-32" width="13" height="156" fill="#000000" version="1.1" viewBox="0 0 13 156" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g fill="none">
+ <path d="m0 0h24v24h-24z"/>
+ <rect x=".5" y=".5" width="12" height="12" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x=".5" y="13.5" width="12" height="12" rx="2" ry="2" stroke="#3096fa"/>
+ <path d="m0.5 25.5h24v24h-24z"/>
+ <rect x=".5" y="26.5" width="12" height="12" rx="2" ry="2" stroke="#2979ff"/>
+ <rect x=".5" y="39.5" width="12" height="12" rx="2" ry="2" stroke="#aeaeae"/>
+ <path d="m4.1723e-7 52h24v24h-24z"/>
+ <rect x=".5" y="52.5" width="12" height="12" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x=".5" y="65.5" width="12" height="12" rx="2" ry="2" stroke="#3096fa"/>
+ <path d="m0.5 77.5h24v24h-24z"/>
+ <rect x=".5" y="78.5" width="12" height="12" rx="2" ry="2" stroke="#2979ff"/>
+ <rect x=".5" y="91.5" width="12" height="12" rx="2" ry="2" stroke="#aeaeae"/>
+ <path d="m-1.9073e-6 104h24v24h-24z"/>
+ <rect x=".5" y="104.5" width="12" height="12" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x=".5" y="117.5" width="12" height="12" rx="2" ry="2" stroke="#3096fa"/>
+ <path d="m0.5 129.5h24v24h-24z"/>
+ <rect x=".5" y="130.5" width="12" height="12" rx="2" ry="2" stroke="#2979ff"/>
+ <rect x=".5" y="143.5" width="12" height="12" rx="2" ry="2" stroke="#aeaeae"/>
+ </g>
+ <path d="m4.8636 60.537-2.1477-2.194-0.71591 0.73134 2.8636 2.9254 6.1364-6.2687-0.71591-0.73134z"/>
+ <g>
+ <path d="m4.8636 73.537-2.1477-2.194-0.71591 0.73134 2.8636 2.9254 6.1364-6.2687-0.71591-0.73134z" fill="#3096fa"/>
+ <path d="m4.8636 99.537-2.1477-2.194-0.71591 0.73134 2.8636 2.9254 6.1364-6.2687-0.71591-0.73134z" fill="#aeaeae"/>
+ <path d="m4.8636 86.537-2.1477-2.194-0.71591 0.73135 2.8636 2.9254 6.1364-6.2687-0.71591-0.73134z" fill="#2979ff"/>
+ </g>
+ <path d="m2 110h9v1h-9z"/>
+ <g>
+ <path d="m2 123h9v1h-9z" fill="#3096fa"/>
+ <path d="m2 136h9v1h-9z" fill="#2979ff"/>
+ <path d="m2 149h9v1h-9z" fill="#aeaeae"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_checkbox_16px.bmp b/dlls/light.msstyles/blue_checkbox_16px.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..3504ce48ff7b2a97db094252fc1bd13f6ab5fa00
GIT binary patch
literal 12426
zcmeHNJx|+E6m`_9VW>oxPDmuGP#|HjBN#grmP(bnRLaH=VCmE$A7seX0Wl$xPzlsM
zQo(a)D=AyNk>CPp?U79<vi5GRG#a~)seI0^Q1IwY2#INay!d)}Ad5x&o?f8Ev;qio}M
z9(V`*0YXYtc?GMO_o><|LQ%Ru<Pz(jzy0Xlb60z93#(SEky@>G3h01v35q?bR4VgF
zM(a)MzEkwg8Bt?7}M6boJ+Z5aK^aJkXr<Kr;+EgCQTWG!)h#HV$TfnuA#4A)q58((($
z?fp+HUms)tl8zccMy3slCC!ocfGGH9fRuhs-A2S#JR-93Q$PoVOHk~INH5RB)<rgv
z6NP2h`lnd%@<6v=2`+CE(a)qHl-ehV=6BKu`5as9&Qxwy5oP8(a)5kv(L#|IaK#jxDPK}
z;!Fr%m)ZL~S9AYDM(a)tPLBhyA#KhPX$FS8VdJp*L*TPN*5>?I(a)ZqITLYX*wWWLf1>$
z$-}RedBoQ{B`qf^68cAMr=;e&Um5Q6`t2(a)+(RYi+%RX7lbCu<B{3P*tEN(5$fn%+8
z_BmNAhw5Gm_u++0oC)FUW9(mOF4^dmlNp&dD3&yb`PU!HTC`nO&rp}rufc`(gZF>m
z<PYP%zmLn8mNDL0{g8i6_4~gM^&i4UJOsWtZO9S(ZwEZmLKFD-QX50~X_K3UJqPZ9
zWngHr(a)i!3k1pG9EXJIda8z2e{6dS*afCGT$&t(pkYv2la&rY^B{tW!a(G%Y{Z4CAn
zxB%XoKEv4f)?4=aDjfGf0|@g?2|iKQfEG{#jB!fxK~qw|Bd|vo9{5Dt1PW9!`BSZb
zzvcfBZb)R}hscK<^^cf={9j}eJEp&h^NknvZ|9(a)mwBgGvWpO5Qj{2QQCr0Yu$``rB
z2CkoA4gHJshgsx>m+;+Cjz{~=Ui$dicoo+NG=Gj0Td_I#t}(7FkzE+je;>aPoe`-)
z{bLL<#NEPPAn)wczm?B(a)4zprwaTT%mXrn=SFUPp$Q(a)qG6t|7i9a`76EQ-*J}kx8V$
zc?1mo%ks(a)OHt~!KM!ma#g8YAi(a)_!+eP`j8s{JXC?>VH`N*e<F&roY)KsxRu_&c~TX
zntaI3vasjCoxZ1z)W4Olm(&ehKjB=ZtN&jsv$(!QTQ`*B(SEZRE5B1pR@)`@facF}
z&9XX&m}}rl>?Q~FZ{>^MpJqfQHSqVpwWr1qcMDvIV!!^aeC~6YZSN;n5qnR$uE4ns
z$GGKFJf6iG;#-}fR^xHX(a)Tm=~Z3>)6z|g-epW472Hua)b=+=$%vLOGTtnYuc|AY5`
z+MtROy#IICfqw_@|J^eeoxlJ2F#qRg?Pxvbf6wg(d|#a3(OHkD66F8E_kYSEJ#8M4
zyyTzOz5(a)Q>`Hgjboa+B+{et{|g7SZ-XKuakCI1Wfy%h-7FUbGRJR<o2-<~X7*Mj`P
L7x}|ffB*Xjzuufm
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_checkbox_16px.svg b/dlls/light.msstyles/blue_checkbox_16px.svg
new file mode 100644
index 00000000000..4646a259e62
--- /dev/null
+++ b/dlls/light.msstyles/blue_checkbox_16px.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:16-32" width="16" height="192" fill="#000000" version="1.1" viewBox="0 0 16 192" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g fill="none">
+ <rect x=".5" y=".5" width="15" height="15" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x=".5" y="16.5" width="15" height="15" rx="2" ry="2" stroke="#3096fa"/>
+ <rect x=".5" y="32.5" width="15" height="15" rx="2" ry="2" stroke="#2979ff"/>
+ <rect x=".5" y="48.5" width="15" height="15" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x=".5" y="64.5" width="15" height="15" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x=".5" y="80.5" width="15" height="15" rx="2" ry="2" stroke="#3096fa"/>
+ <rect x=".5" y="96.5" width="15" height="15" rx="2" ry="2" stroke="#2979ff"/>
+ <rect x=".5" y="112.5" width="15" height="15" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x=".5" y="128.5" width="15" height="15" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x=".5" y="144.5" width="15" height="15" rx="2" ry="2" stroke="#3096fa"/>
+ <rect x=".5" y="160.5" width="15" height="15" rx="2" ry="2" stroke="#2979ff"/>
+ <rect x=".5" y="176.5" width="15" height="15" rx="2" ry="2" stroke="#aeaeae"/>
+ </g>
+ <path d="m5.8182 74.91-2.8636-3.1343-0.95455 1.0448 3.8182 4.1791 8.1818-8.9552-0.95455-1.0448z"/>
+ <path d="m5.8182 90.91-2.8636-3.1343-0.95455 1.0448 3.8182 4.1791 8.1818-8.9552-0.95455-1.0448z" fill="#3096fa"/>
+ <path d="m5.8182 106.91-2.8636-3.1343-0.95455 1.0448 3.8182 4.1791 8.1818-8.9552-0.95455-1.0448z" fill="#2979ff"/>
+ <path d="m5.8182 122.91-2.8636-3.1343-0.95454 1.0448 3.8182 4.1791 8.1818-8.9552-0.95455-1.0448z"/>
+ <g>
+ <path d="m2 135h12v2h-12z"/>
+ <path d="m2 151h12v2h-12z" fill="#3096fa"/>
+ <path d="m2 167h12v2h-12z" fill="#2979ff"/>
+ <path d="m2 183h12v2h-12z"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_checkbox_25px.bmp b/dlls/light.msstyles/blue_checkbox_25px.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..8720209c6081e0c7f097a0822be7c621895e56d4
GIT binary patch
literal 30138
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
I)$m#BzuylKPXGV_
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_checkbox_25px.svg b/dlls/light.msstyles/blue_checkbox_25px.svg
new file mode 100644
index 00000000000..0815af16e31
--- /dev/null
+++ b/dlls/light.msstyles/blue_checkbox_25px.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:25-32" width="25" height="300" fill="#000000" version="1.1" viewBox="0 0 25 300" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <rect x="1" y="1" width="23" height="23" rx="2" ry="2" fill="none" stroke="#aeaeae" stroke-width="2"/>
+ <path d="m9.4091 116.87-4.0568-4.7015-1.3523 1.5672 5.4091 6.2687 11.591-13.433-1.3523-1.5672z"/>
+ <path d="m4 211h17v3h-17z"/>
+ <g fill="none" stroke-width="2">
+ <rect x="1" y="26" width="23" height="23" rx="2" ry="2" stroke="#3096fa"/>
+ <rect x="1" y="51" width="23" height="23" rx="2" ry="2" stroke="#2979ff"/>
+ <rect x="1" y="76" width="23" height="23" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x="1" y="101" width="23" height="23" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x="1" y="126" width="23" height="23" rx="2" ry="2" stroke="#3096fa"/>
+ <rect x="1" y="151" width="23" height="23" rx="2" ry="2" stroke="#2979ff"/>
+ <rect x="1" y="176" width="23" height="23" rx="2" ry="2" stroke="#aeaeae"/>
+ </g>
+ <g>
+ <path d="m9.4091 141.87-4.0568-4.7015-1.3523 1.5672 5.4091 6.2687 11.591-13.433-1.3523-1.5672z" fill="#3096fa"/>
+ <path d="m9.4091 166.87-4.0568-4.7015-1.3523 1.5672 5.4091 6.2687 11.591-13.433-1.3523-1.5672z" fill="#2979ff"/>
+ <path d="m9.4091 191.87-4.0568-4.7015-1.3523 1.5672 5.4091 6.2687 11.591-13.433-1.3523-1.5672z" fill="#aeaeae"/>
+ </g>
+ <g fill="none" stroke-width="2">
+ <rect x="1" y="201" width="23" height="23" rx="2" ry="2" stroke="#aeaeae"/>
+ <rect x="1" y="226" width="23" height="23" rx="2" ry="2" stroke="#3096fa"/>
+ <rect x="1" y="251" width="23" height="23" rx="2" ry="2" stroke="#2979ff"/>
+ <rect x="1" y="276" width="23" height="23" rx="2" ry="2" stroke="#aeaeae"/>
+ </g>
+ <g>
+ <path d="m4 236h17v3h-17z" fill="#3096fa"/>
+ <path d="m4 261h17v3h-17z" fill="#2979ff"/>
+ <path d="m4 286h17v3h-17z" fill="#aeaeae"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_commandlink.bmp b/dlls/light.msstyles/blue_commandlink.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..73f06fe6040b47966522ef122e007712a0d6d9b4
GIT binary patch
literal 13074
zcmeI1y;8zJ6ote1SJ>Hu6pllL8G^h4jg^fLVP|ClAuwa<SUQpnuizW-_gX(a)d;(9jA
z&cu)q3mf%h*zD%+ne6iAX77dV-JW%=<aoh(gmQ{<S+T5&Rkse%e!j+O=Mc-%AJrqh
zo4dyyNr~Yw)4!f}Yth7+N4~Q`k({y#eP{MDX;sm;h$oIGuNNno+a#CD9tWMV(nA}{
zd-FI?XKYFjT{5n*?W(a)h)_GwHXwVDJukb`+AR84=NKhPi21pbXbl*ePlYpf4p<abuF
z-|ow_d$dami3jYl?+l?`tOKX6^k_$BZOPP86ttJ?x6ZjL+gt-<<mMWo${muNMCBS7
zqbP?^cFb{P?pLHU^JlJMNH7K%62=G3^}d=~O@|!FA^o1vALtJ`{!pH4=->W2*9ba;
zqWG=jd(a)9#KE&-n_%pcIVP<cjrPHd9^36KB(a)kN^pgz)us9ezPX7JxAG~NKR4qnRu-#
z>V*t!PaX>PP+&*@IMKUyC{HDOC`!K__dDMU+GKvzl7sRA`h$KG$blR*0dgRRG=VSv
zP#%vFud$Yd;x<-@<9)d=*h7I`+^Zq9$OjtrMDN;>S%)&UvM<H6xrc(s!T%h!Pm%*U
lXaeLw4rv1Phct~}x=wNrCH)ZDCIJ#40TLhq68LijJ^`<tISl{+
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_commandlink.svg b/dlls/light.msstyles/blue_commandlink.svg
new file mode 100644
index 00000000000..77f23aca6e1
--- /dev/null
+++ b/dlls/light.msstyles/blue_commandlink.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:11-32" width="11" height="294" version="1.1" viewBox="0 0 2.9104 77.788" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g fill="none" stroke-linecap="round" stroke-width=".26458">
+ <rect x=".13229" y="13.097" width="2.6456" height="12.7" rx=".52917" ry=".52917" stroke="#3096fa"/>
+ <rect x=".13229" y="26.061" width="2.6456" height="12.7" rx=".52917" ry=".52917" stroke="#2979ff"/>
+ <rect x=".13229" y="51.991" width="2.6456" height="12.7" rx=".52917" ry=".52917" stroke="#3096fa"/>
+ <rect x=".13229" y="64.955" width="2.6456" height="12.7" rx=".52917" ry=".52917" stroke="#3096fa"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_commandlink_glyph_30px.bmp b/dlls/light.msstyles/blue_commandlink_glyph_30px.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..e52b192007ce04e5d3180ed01e8b810873ce12bf
GIT binary patch
literal 18138
zcmeI2T~32Q5XUik4&$SIMCld!pid(a)7;UqrTHYVlK_-yGV__&WZp_q)bv>;8Jv|E-T
z(Ld<`U3TXWzZsTHvg3!ZJFD70c>l(B$riJnSy$FMA0Ic@`Lwl>WvzdzjmGy+FRhD5
zon9Q(3!Oj!1pW(wV&O;1B%ilf-gv9nFWE?3JNCm`yIlHn(dULX=`vS2V#;*1O=&7W
zMLc?!$g^TG3RrLbUP03+@<G^s-nvaZrRQk%T(a)cD4qk)1m5C8!X009sH0c`?#p3jwO
z59}}?%QBDcn~et04q3N^c836J4rSISGgomkWjeWLN^|2!q#jJuG+(a)0dxB2+jHCK{s
zId`5}PgFBW61R>g$2QV@?K*W=dQv&m=|(Xa1V8`;KmY_lpfdrQIgzr?jx-$5%=Tz%
zmuw`iJ#oTDdvYyW2NSf3G?`a9qVmLqX=oeKtM7Sci_~T`b%Q3ip{X$=9qu{^+gHc^
zji>Y+t-cE~d3%^XdVl~3fB*=900{I+0P98jq`U3Az<N=v7u`+?qyGk3(}*>yMq}7^
zR$#qo8wbuo00ck)1V8`;dLn>&uqUv4+(a)c=zQ4j9P3sX&~2ThUO^)m=t)PuW$Knn<f
IKraM-0R9zDg8%>k
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_commandlink_glyph_30px.svg b/dlls/light.msstyles/blue_commandlink_glyph_30px.svg
new file mode 100644
index 00000000000..cb367b792a2
--- /dev/null
+++ b/dlls/light.msstyles/blue_commandlink_glyph_30px.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:30-32" width="30" height="150" version="1.1" viewBox="0 0 7.9375 39.688" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g stroke-width=".26458">
+ <path d="m4.7625 2.1167-0.37306 0.37306 1.2118 1.2144h-4.2783v0.52917h4.2783l-1.2144 1.2144 0.37571 0.37306 1.8521-1.8521z" fill="#3096fa"/>
+ <path d="m4.7625 10.054-0.37306 0.37306 1.2118 1.2144h-4.2783v0.52917h4.2783l-1.2144 1.2144 0.37571 0.37306 1.8521-1.8521z" fill="#3096fa"/>
+ <path d="m4.7625 17.992-0.37306 0.37306 1.2118 1.2144h-4.2783v0.52917h4.2783l-1.2144 1.2144 0.37571 0.37306 1.8521-1.8521z" fill="#2979ff"/>
+ <path d="m4.7625 25.929-0.37306 0.37306 1.2118 1.2144h-4.2783v0.52917h4.2783l-1.2144 1.2144 0.37571 0.37306 1.8521-1.8521z" fill="#aeaeae"/>
+ <path d="m4.7625 33.867-0.37306 0.37306 1.2118 1.2144h-4.2783v0.52917h4.2783l-1.2144 1.2144 0.37571 0.37306 1.8521-1.8521z" fill="#3096fa"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_commandlink_glyph_45px.bmp b/dlls/light.msstyles/blue_commandlink_glyph_45px.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..a450715cf8a86a62713750564169cb2102860e36
GIT binary patch
literal 40638
zcmeI5&rj1}7{@n%L=SpVFKSFQF|y4cYoqZ(a)xOnp75l@;RCr=Pyz+s7=ObFs^mnGr|
zaw6f^X1M7Rju4K7a3S%J5W@&OK5bXlcEga;SDq$c;%iIC-hKG+?AcqM^`Yze&#wvl
z;{*Rc%HtuAUp$hD+ljNhebTs{cRe4JNI3tjW7PHRMW5%!W9^<h)>q++U;qYS00v+H
z24En52I^+^Ro&FSQNA-4OP+c$+snNBJZR6<EA;8^1<BTl5=nMEZSlHe*VL+1?z||T
zyQmp1b7Na0<NhV_+(vf7&#kY}WXEOk+@?O}=hjx~%l#{oxh=L`L(BWPi~2f!etK0p
z_nw&@^l_Wo29+LP7td{I{XT9ZyZO7I-#7`kZ$3}1Qha=C$9QlnEVp8|!+hQPIQoy6
zF>n7VJh~H>S(a)r$)ih3VAJ~;Hu(a)w`*a-c<d#Vdsxq-e}>q@^k6&wXom6>ig}Q`n$te
zuyT>1tx0_ybk=v;xR2MAyWX&Q4ZYy!)kLrBn03m_8;A8X$7~NX+vh1ZukiB}_c_h1
z-ON72`Qf~K3|kn00T_S*7=Qs7fB_hQ0T_S*7=Qs7fC04z=I7^M^O&jCYO$!%&&|#C
zGVeYQ;!#~*UKU=Xr{u!I!gPbzVz$Qja=9$LMsIT)0q)xD?5yw_JtdiWBEY?}w6r9=
zMsIVEdAT`m*4VfB8a+QJ^ImS=U$0iHVrxKdMrF>y0QUxeFXC(T%-kQ~-sCtrQB5;2
zpPQ$YZrSyArBVr9J3bBO#$$%A(Vr6Y*5cw~==Van&lgo&j)Ok-a^P{Z$@%(3?>SM$
zYR$`>vC125c-Q%u*!NIzJiPP7f|Y|-rM?al+3Te70I%5fhQ-T%3jtoy>pEtg3h-8?
zub-K>hlhQh!oDlg&r{rd$*kSXJyR-`P@{LHU<(5<00S(a)p126ysFaQHE00S@p126ys
ziVe_E<~8L~GjX|&o^qL9%BA;t5RWRo6(a)DE(w|rvG=?1UGOf;1KPWjuiYxEZPaN6*3
z=h8LG3%`!u;vPzW3~;Z|fbi?+?KsJd1-RGPxA+=84QKKJ?se+BC%#6{aWWX--r$%Q
zU!&(7*w5StP4>(tjodp?jlMaTomZVa<>XkE``a|y5xPcyO3dsd6}m=$O3Yg{624!7
z;w4C;5zn4D<9HtE5L=^<Ti$4!pK~d(HG0m$@BPn{)T-3iL2lP+t?$PDylJuP4Tm>V
z2=Izt*D>pqk9R0j5x?%wrFxjzIZufJubbm(IMr>R55B>5^sW<ZVE_hT00v+H24DaN
zU;qYS00v+H24Fz70ra|8Yq-%1^;_I}by7ZYrf%qyUT)qO-4oUNNjkk;(d%AqRQqQ~
zuY11_)t~L5*S)PckemL|o4)yXMxwb7dfi7E<LGrCrOnp4(Cfa{NmNJB>pm)zN6%9)
zYGrTUjzzC~Q+vbA@#}S8)Lx?3{n4?ATVMbNU;qYS00v+H24DaNU;qYS00v+{g#py)
zRakA#>HH2Ce~-RtMC~4G^lJUKn;kX!c2?9KLyg{X>#f`T-+k2Rql|9U=%cjRIu~m6
qtxlpkf*O5PCXb#6HTt97M19LHYV=Vn#e6UT126ysFaQGz4g3W~>mIoP
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_commandlink_glyph_45px.svg b/dlls/light.msstyles/blue_commandlink_glyph_45px.svg
new file mode 100644
index 00000000000..b724ef6bd96
--- /dev/null
+++ b/dlls/light.msstyles/blue_commandlink_glyph_45px.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:45-32" width="45" height="225" version="1.1" viewBox="0 0 11.906 59.531" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g stroke-width=".26458">
+ <path d="m7.1834 3.175-0.57825 0.55959 1.8783 1.8217h-6.6314v0.79375h6.6314l-1.8824 1.8217 0.58235 0.55959 2.8707-2.7781z" fill="#3096fa"/>
+ <path d="m7.1834 15.081-0.57825 0.5596 1.8783 1.8217h-6.6314v0.79375h6.6314l-1.8824 1.8217 0.58235 0.55959 2.8707-2.7781z" fill="#3096fa"/>
+ <path d="m7.1834 26.988-0.57825 0.5596 1.8783 1.8217h-6.6314v0.79375h6.6314l-1.8824 1.8217 0.58235 0.55959 2.8707-2.7781z" fill="#2979ff"/>
+ <path d="m7.1834 50.8-0.57825 0.5596 1.8783 1.8217h-6.6314v0.79375h6.6314l-1.8824 1.8217 0.58235 0.55959 2.8707-2.7781z" fill="#3096fa"/>
+ <path d="m7.1834 38.894-0.57825 0.5596 1.8783 1.8217h-6.6314v0.79375h6.6314l-1.8824 1.8217 0.58235 0.55959 2.8707-2.7781z" fill="#aeaeae"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_groupbox.bmp b/dlls/light.msstyles/blue_groupbox.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..9ef6c2136a694370f4339982703425ade854f185
GIT binary patch
literal 1898
zcmZ?r&0=Q&gDxOh1H(a)uLECR%g3<?a)K>7h2kiY={85kf4B=g_NJ*XH%2>}5XH2Jk_
z*UGP3w{8~@{{-Uy6k?DWJ6Ek*CAWV4`rSaYtAK2*K0$K^UM|QCpm{Ywv%&79hM6!6
zw{6?T4m9@%$lowAYSADwN6lqm7!3zViW&`v(QrU6TWFjfe$t?v1eNc5fw+PiW`oQC
X)e)e&0*DoW=I#Mvs?<Z!`bQoBr(a)jye
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_groupbox.svg b/dlls/light.msstyles/blue_groupbox.svg
new file mode 100644
index 00000000000..4354fac3d32
--- /dev/null
+++ b/dlls/light.msstyles/blue_groupbox.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:22-32" width="22" height="20" version="1.1" viewBox="0 0 5.8208 5.2917" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g transform="translate(0,-1)">
+ <rect x=".13229" y="1.1323" width="5.5563" height="5.0271" rx=".52917" ry=".52917" fill="none" stroke="#aeaeae" stroke-width=".26458"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_radiobutton_13px.bmp b/dlls/light.msstyles/blue_radiobutton_13px.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..636992294934772b6821a1bdebbc8c625c46c738
GIT binary patch
literal 5546
zcmeHLyG~m{5OowDO;V;KkOB#8B76}gMv7=6#YBqo5jIV#NCbxz)F}~M$3<FWSv(tr
zD{9O)a9v>Y0f2a1kT&P+Biz?Qq@;j|D<-ouduDfb_K2M@^}hZhCBN_Z_Z#FnWCrpi
z^(yrg`jwu?Fz|^~O8w9$rrv)19GLv0Vb?9F_4V}}WChZOTtW^Z)wQ*?iD=mF?rs<S
zF6LX%#d^Ko59y(XZ-#!z5^*M0;~QIBTRd*;qaQI1#&HrlhZxV`G0wxc2RWf$U0r=g
zoQ`826B`>FHAsPejTgX%#KghRJgbnS&CSi1j6v*v6tC?)z2*RHSs$L4KG?^Wm}Aaw
zZ*TWv{sPiLPJQ&<wU4f2J9r+%PbcjI%m=QCwTqaq;w+QU2Uz17{W`9R`BRLk^YpWB
z7<=&LXk+YRtsN6bU+^>cL!9v&9&jDR7FfqhrP2+%k2d|p2YFy(nI|wc?B9X-)Y_K$
z7+g?`FC#foO0PiLkV{b-K7_7{(ol?}V&P2}=3Gcilrlxc_KSs)9;xRtGs>S{BF^lg
z(a)eMIMl*m!~foVV_M|D1)!HciyJm&TwCt6F6>Nw;vGy#82%neJ9YP^6iDk(a)IpiSwn8
z#QbZ?QH=K!@Qjxn74zu<j8%PbUY-s1u_Z=wRD2rj#ry(a)NBW4FBM=`#AAJ$Xtb90{3
z(a)HBkUv(T0tmG>a;D>I4l0q#R`6!(a@;U;jWQlpMCZ&h!Pb=K#=eP(t{9DTtra6i8}
z8sLG)y0ea=Fy75`O1qTyu&*2BfmsuKAy3>F>rzVlTGvcI1{c&<%h{aoW>>CUr|rAW
z<yF}^^vg~aI+3HmxR91#&KA!r<NcyO(nIaLV>8n4Iw6h{f9X06(a)zcUl_&E=p<fzKW
z(a)eKajb@G_ogPc%b|8Nx75C^-(Jh68TW64pC7qCNO;$)sUAND*tTUH$Pm!176UfYtR
z=SyP)ran9`>xcPcON`>^;$Sc4FA&!`TO5(a)fy>lPbQSB2rPdPiCv=8!^9OXU8`*KGo
zfjbb(ilf&mt_j~Mq{+H4Z`KvI$2#kC;C{w-OdNf|k9d7QA&z1V^1y=>SVvJA(a)8&sa
zYkwj~uVkKMHP!_<UuoDnpWxnR%-{Ktd;8WSPu7-PInnyow_fAX9kD|SiHyTpV{bih
z`w^^(wZ8ShlZyry)YiBDu6>f;dc;gy_PO<~*KtkgQwX)>=tF$#9{@*D-uP$hN8`w_
z$HLJtC}N?viuI!rNX$&?M`NIf!@|)BDr_RR#C|l4y0IQ2M|J;qZ~M`k>V`+Qel(1V
zTOy$!jibVzq<%Dvh+9ehXdD&x;4WhQXc!T<Z2f2)sXV%FkNs%i|4isP{;D6f*4omK
z+VIAo)Q_4un@;LSZCK+M3H_*<vuXDA(SFp1HGW$^YUZQ*u^;{Se|w77*w~M6y{g3j
H`quvf$~kDv
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_radiobutton_13px.svg b/dlls/light.msstyles/blue_radiobutton_13px.svg
new file mode 100644
index 00000000000..41f2b6e976a
--- /dev/null
+++ b/dlls/light.msstyles/blue_radiobutton_13px.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:13-32" width="13" height="104" version="1.1" viewBox="0 0 13 104" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path d="m10 58.5a3.5 3.5 0 0 1-3.5 3.5 3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5 3.5 3.5 0 0 1 3.5 3.5z"/>
+ <g fill="none">
+ <ellipse cx="6.5" cy="6.5" rx="6" ry="6" stroke="#aeaeae"/>
+ <ellipse cx="6.5" cy="19.5" rx="6" ry="6" stroke="#3096fa"/>
+ <ellipse cx="6.5" cy="32.5" rx="6" ry="6" stroke="#2979ff"/>
+ <ellipse cx="6.5" cy="45.5" rx="6" ry="6" stroke="#aeaeae"/>
+ <ellipse cx="6.5" cy="58.5" rx="6" ry="6" stroke="#aeaeae"/>
+ <ellipse cx="6.5" cy="71.5" rx="6" ry="6" stroke="#3096fa"/>
+ <ellipse cx="6.5" cy="84.5" rx="6" ry="6" stroke="#2979ff"/>
+ <ellipse cx="6.5" cy="97.5" rx="6" ry="6" stroke="#aeaeae"/>
+ </g>
+ <g>
+ <path d="m10 71.5a3.5 3.5 0 0 1-3.5 3.5 3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5 3.5 3.5 0 0 1 3.5 3.5z" fill="#3096fa"/>
+ <path d="m10 84.5a3.5 3.5 0 0 1-3.5 3.5 3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5 3.5 3.5 0 0 1 3.5 3.5z" fill="#2979ff"/>
+ <path d="m10 97.5a3.5 3.5 0 0 1-3.5 3.5 3.5 3.5 0 0 1-3.5-3.5 3.5 3.5 0 0 1 3.5-3.5 3.5 3.5 0 0 1 3.5 3.5z" fill="#aeaeae"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_radiobutton_16px.bmp b/dlls/light.msstyles/blue_radiobutton_16px.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..9b8ffe570b308de67845223ad0c3d1d409f430ac
GIT binary patch
literal 8330
zcmeHM%}yLg5MB}o4#p;rU`3X^KfunAL!`*EB9bVFU|Gt0<d8TDEWay7NXU@@13QpI
zUI5s|zF4xv0`CCJ3nXE=E|A0S9y;GwGadI1JwK76C~+9M=$@+js;jE2HC^8E$ItF%
z<avg_v!M4uWl&${Uglkl7%Y#<Wc+`WsqrtqdTLRMW!;LEW-`0GyM?{Iy_H(6b^^K#
z=osTNWl`|$?d|?*wYm<ybBuGKG4KXSoP$448Emgn*R;cT$m*c#t5>h?nlf_^y&>rE
z**9&#W(8~PmdoXLs1NxB=m4bsuS5PNWz+$`Mn3}GVZ1i=x|lD5l#O8H2Vw$0&R(a)KE
zk%!(Y_;cjr{jm*a^0XgVe*yeuPy<vX9^)a%y0*cuQx|*Tf+u_Q^5x4r0iN+D;ak*Y
zywGidE)mb*U%+2bml$9#K&K$>{}JX%>mLx0_#NmTgH}N^<Y9aQO2SVBx~!*V<a`9<
znURB~7#oYk2C+AFJ!4NiV0M&JeSvNIaRmMq3G+klEoDLdfL&eZJ0I8^fDY?zNBiMR
zdjE1=;C7)`H|tm1fQ)`Lk(*iO=k(a)E?w(a)KV<@&Z{Uj5SvY^6?zH4cOEEv&NX`VN=&O
zSCjdID&<x{C!ouKj(a)49dnKB!OJXJ3At5SX)`sdJ{Q`5OI(a)CJoAFJ<RNR?4nX*R<nf
zvvtU;s(e54{Hw_ihG4e_y?xULcoj9B-&N&|oPVq}0bdTF7x)j`(>Xc+)bVX(<@{ql
z485ja7uZF-s|b?wFMcr2QX!96R~fJ5U?%%G0{6zA_G2o$AUQ4N8fvm2=LgusM0_bL
z=U+|bUFiCI^!)=l|9EG-Z`QKU<@_^V=(YrdeG>oE;pP0xzLs(q$ls~q|55V#c{%@T
zy5K;Ub;bP2`A2;{Nyca8{7XGaO=d(a)cIa4|Z)48Q+8(BI3LF`Rk&(QZ^ZwH(a)NIsbtl
zjO8kzLxsJS9I<{_r>J#Z!|Ln%1Ae{1M&O5*nWL=BI>jEE^(%J82K_)SmU6R_pYKL*
zE0Vw0vm#@yht5yW8k5XN_BnJLAnkuc@{C$Hb#3$ZMzPTGoE6Xs=rW+=&Ze_WnGHjp
z+Aj2WD(-rx;+%Ik-MP-j=$NYD{DU~}dhR(a)B9j~}XUDJ+WJ+}^>s#^Q#t}1_W3-ix9
zmEt#~?uPp*dFrPRhq(a)J~*4ZrXn>OHErRx>t{C6wGhh5M4t>d|^w&!$6oOd^!Ux59X
z=U;5V5BkvF935_Z#U|G!7V%zzR0Lg#4fw%W+FNcOYp*h1`1YQ^ZX{N0(hrGm(^+6n
zu}-72<re*TomRxUhChsDbR0Qwp(}f&etvKVK0Iw#7;F6ckhhVmZy7J<T<?;5lpgQ;
zc<!s`T!2o+|1Ib9z(a)Fi&%@_EO{Y3s8=(Da?k<*zVe`nyu;*q~!gZh|f{@Uv!BiQ3J
z$-##E2=m`#Y+(P24;ef6T-P)7J=n$fKhp=_9$_EP;2(11vUZr$7WY=LtRK`VYhBl{
zTDw00oddCfy^vUt59V3w7jvm!))?v(HtS~n(oSH*qhHXOWq#C;IQt;(HF=aF=1Lf=
z{ou%aV9n?7rvYLulN!u3Yu(hf&3PxnU1J4zh5zjRA93*;!SBpvK>TK=y8lCu-w1pP
ztQ33y2ZrB>D6Hm-AIR|na=Z-s^ZpO)VG4ZY{U2DytJjGdBk%ty(a)sam`;Ez(QA9?==
z_DKr7eE*R*>-``2r5GEj?*D-wM;NaH;=cSZ?*DJe`NwwIpQQfZj_T#2{~AL5UF-jQ
zwc_6*&VM|}kg_L)4?X?AAx(a)my`u{|bp<wI(4RPWW(a)n7rz6G4VT%=tI8?9-(F-;VOR
zH~qgoJM2mRE&adUL!X<}|HomqEUN$4(a)-(Be^#5saTF2J^YgwAn*8iu$X&qbtuVraQ
zTmPR1r*)$Ge=Uz2lluR7>`nh~%a8Q%e^dW&vrk@{{yz$<`EmWf)=3)aN4Wn_!i44M
z6?^*susrEK-2W%(hvnh^KP*prm;cu>`u`;Tusq!VhviA{=)te`|4A4vkL&-nPShy%
plhFT1VsHBYf8_VSsQi<EbN~0Vb94W%MgIPmqJHqx+S~E_-yax7=H&nY
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_radiobutton_16px.svg b/dlls/light.msstyles/blue_radiobutton_16px.svg
new file mode 100644
index 00000000000..158279ee557
--- /dev/null
+++ b/dlls/light.msstyles/blue_radiobutton_16px.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:16-32" width="16" height="128" version="1.1" viewBox="0 0 16 128" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path d="m13 72a5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5 5 5 0 0 1 5 5z"/>
+ <g fill="none">
+ <circle cx="8" cy="8" r="7.5" stroke="#aeaeae"/>
+ <circle cx="8" cy="24" r="7.5" stroke="#3096fa"/>
+ <circle cx="8" cy="40" r="7.5" stroke="#2979ff"/>
+ <circle cx="8" cy="56" r="7.5" stroke="#aeaeae"/>
+ <circle cx="8" cy="72" r="7.5" stroke="#aeaeae"/>
+ <circle cx="8" cy="88" r="7.5" stroke="#3096fa"/>
+ <circle cx="8" cy="104" r="7.5" stroke="#2979ff"/>
+ <circle cx="8" cy="120" r="7.5" stroke="#aeaeae"/>
+ </g>
+ <g>
+ <path d="m13 88a5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5 5 5 0 0 1 5 5z" fill="#3096fa" stroke="#3096fa"/>
+ <path d="m13 104a5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5 5 5 0 0 1 5 5z" fill="#2979ff"/>
+ <path d="m13 120a5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5 5 5 0 0 1 5 5z" fill="#aeaeae"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/blue_radiobutton_25px.bmp b/dlls/light.msstyles/blue_radiobutton_25px.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..cab87f62316ed9d409412a5b32a1c30b394a6e1b
GIT binary patch
literal 20138
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
literal 0
HcmV?d00001
diff --git a/dlls/light.msstyles/blue_radiobutton_25px.svg b/dlls/light.msstyles/blue_radiobutton_25px.svg
new file mode 100644
index 00000000000..f105f57095c
--- /dev/null
+++ b/dlls/light.msstyles/blue_radiobutton_25px.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="bitmap:25-32" width="25" height="200" version="1.1" viewBox="0 0 25 200" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g fill="none" stroke-width="2">
+ <ellipse cx="12.5" cy="12.5" rx="11.5" ry="11.5" stroke="#aeaeae"/>
+ <ellipse cx="12.5" cy="37.5" rx="11.5" ry="11.5" stroke="#3096fa"/>
+ <ellipse cx="12.5" cy="62.5" rx="11.5" ry="11.5" stroke="#2979ff"/>
+ <ellipse cx="12.5" cy="87.5" rx="11.5" ry="11.5" stroke="#aeaeae"/>
+ <ellipse cx="12.5" cy="112.5" rx="11.5" ry="11.5" stroke="#aeaeae"/>
+ <ellipse cx="12.5" cy="137.5" rx="11.5" ry="11.5" stroke="#3096fa"/>
+ <ellipse cx="12.5" cy="162.5" rx="11.5" ry="11.5" stroke="#2979ff"/>
+ <ellipse cx="12.5" cy="187.5" rx="11.5" ry="11.5" stroke="#aeaeae"/>
+ </g>
+ <path d="m20 112.5a7.5 7.5 0 0 1-7.5 7.5 7.5 7.5 0 0 1-7.5-7.5 7.5 7.5 0 0 1 7.5-7.5 7.5 7.5 0 0 1 7.5 7.5z"/>
+ <g>
+ <path d="m20 137.5a7.5 7.5 0 0 1-7.5 7.5 7.5 7.5 0 0 1-7.5-7.5 7.5 7.5 0 0 1 7.5-7.5 7.5 7.5 0 0 1 7.5 7.5z" fill="#3096fa"/>
+ <path d="m20 162.5a7.5 7.5 0 0 1-7.5 7.5 7.5 7.5 0 0 1-7.5-7.5 7.5 7.5 0 0 1 7.5-7.5 7.5 7.5 0 0 1 7.5 7.5z" fill="#2979ff"/>
+ <path d="m20 187.5a7.5 7.5 0 0 1-7.5 7.5 7.5 7.5 0 0 1-7.5-7.5 7.5 7.5 0 0 1 7.5-7.5 7.5 7.5 0 0 1 7.5 7.5z" fill="#aeaeae"/>
+ </g>
+</svg>
diff --git a/dlls/light.msstyles/light.rc b/dlls/light.msstyles/light.rc
index dccda341b7c..cc5b371da8c 100644
--- a/dlls/light.msstyles/light.rc
+++ b/dlls/light.msstyles/light.rc
@@ -179,8 +179,157 @@ BLUE_INI TEXTFILE
"\r\n; Flat menus\r\n"
"FlatMenus = true\r\n"
+
+"\r\n; Button\r\n"
+"[Button.Pushbutton]\r\n"
+"BgType = ImageFile\r\n"
+"SizingMargins = 8, 8, 8, 8\r\n"
+"SizingType = Stretch\r\n"
+"ContentMargins = 3, 3, 3, 3\r\n"
+"ImageFile = blue_button.bmp\r\n"
+"ImageCount = 6\r\n"
+"ImageLayout = Vertical\r\n"
+"TextColor = 0 0 0\r\n"
+"MinSize = 10, 5\r\n"
+
+"[Button.Pushbutton(Pressed)]\r\n"
+"TextColor = 255 255 255\r\n"
+
+"[Button.Pushbutton(Disabled)]\r\n"
+"TextColor = 166 166 166\r\n"
+
+"[Button.Checkbox]\r\n"
+"BgType = ImageFile\r\n"
+"ImageLayout = Vertical\r\n"
+"SizingType = TrueSize\r\n"
+"SizingMargins = 0, 0, 0, 0\r\n"
+"ContentMargins = 0, 0, 0, 0\r\n"
+"ImageCount = 12\r\n"
+"MirrorImage = False\r\n"
+"ImageSelectType = Dpi\r\n"
+"UniformSizing = True\r\n"
+"Transparent = True\r\n"
+"ImageFile1 = blue_checkbox_13px.bmp\r\n"
+"ImageFile2 = blue_checkbox_16px.bmp\r\n"
+"ImageFile3 = blue_checkbox_25px.bmp\r\n"
+"MinDpi1 = 96\r\n"
+"MinDpi2 = 118\r\n"
+"MinDpi3 = 185\r\n"
+
+"[Button.Checkbox(Checkeddisabled)]\r\n"
+"TextColor = 189 189 189\r\n"
+
+"[Button.Checkbox(Uncheckeddisabled)]\r\n"
+"TextColor = 189 189 189\r\n"
+
+"[Button.Checkbox(Mixeddisabled)]\r\n"
+"TextColor = 189 189 189\r\n"
+
+"[Button.Radiobutton]\r\n"
+"BgType = ImageFile\r\n"
+"ImageLayout = Vertical\r\n"
+"Transparent = True\r\n"
+"SizingType = TrueSize\r\n"
+"SizingMargins = 0, 0, 0, 0\r\n"
+"ContentMargins = 0, 0, 0, 0\r\n"
+"ImageCount = 8\r\n"
+"ImageSelectType = Dpi\r\n"
+"UniformSizing = True\r\n"
+"ImageFile1 = blue_radiobutton_13px.bmp\r\n"
+"ImageFile2 = blue_radiobutton_16px.bmp\r\n"
+"ImageFile3 = blue_radiobutton_25px.bmp\r\n"
+"MinDpi1 = 96\r\n"
+"MinDpi2 = 118\r\n"
+"MinDpi3 = 185\r\n"
+
+"[Button.Radiobutton(Checkeddisabled)]\r\n"
+"TextColor = 189 189 189\r\n"
+
+"[Button.Radiobutton(Uncheckeddisabled)]\r\n"
+"TextColor = 189 189 189\r\n"
+
+"[Button.Groupbox]\r\n"
+"TextColor = 0 0 0\r\n"
+"BgType = ImageFile\r\n"
+"SizingMargins = 5, 5, 5, 5\r\n"
+"SizingType = Tile\r\n"
+"ImageFile = blue_groupbox.bmp\r\n"
+"BorderOnly = True\r\n"
+"Transparent = True\r\n"
+
+"[Button.Commandlink]\r\n"
+"BgType = ImageFile\r\n"
+"BorderSize = 0\r\n"
+"ContentMargins = 7, 7, 10, 10\r\n"
+"Font = Tahoma, 10\r\n"
+"BodyFont = Tahoma, 8\r\n"
+"ImageFile = blue_commandlink.bmp\r\n"
+"ImageCount = 6\r\n"
+"ImageLayout = Vertical\r\n"
+"SizingType = Stretch\r\n"
+"SizingMargins = 5, 5, 24, 24\r\n"
+"Transparent = True\r\n"
+"TextColor = 0 0 0\r\n"
+"MinSize = 10, 5\r\n"
+
+"[Button.Commandlink(Hot)]\r\n"
+"TextColor = 48 150 250\r\n"
+
+"[Button.Commandlink(Pressed)]\r\n"
+"TextColor = 41 121 255\r\n"
+
+"[Button.Commandlink(Disabled)]\r\n"
+"TextColor = 174 174 174\r\n"
+
+"[Button.CommandlinkGlyph]\r\n"
+"BgType = ImageFile\r\n"
+"SizingType = TrueSize\r\n"
+"ImageCount = 5\r\n"
+"Transparent = True\r\n"
+"ImageLayout = Vertical\r\n"
+"ImageSelectType = Dpi\r\n"
+"Transparent = True\r\n"
+"UniformSizing = True\r\n"
+"ImageFile1 = blue_commandlink_glyph_30px.bmp\r\n"
+"ImageFile2 = blue_commandlink_glyph_45px.bmp\r\n"
+"MinDpi1 = 96\r\n"
+"MinDpi2 = 144\r\n"
}
+/* Button */
+/* @makedep: blue_button.bmp */
+BLUE_BUTTON_BMP BITMAP "blue_button.bmp"
+
+/* @makedep: blue_checkbox_13px.bmp */
+BLUE_CHECKBOX_13PX_BMP BITMAP "blue_checkbox_13px.bmp"
+
+/* @makedep: blue_checkbox_16px.bmp */
+BLUE_CHECKBOX_16PX_BMP BITMAP "blue_checkbox_16px.bmp"
+
+/* @makedep: blue_checkbox_25px.bmp */
+BLUE_CHECKBOX_25PX_BMP BITMAP "blue_checkbox_25px.bmp"
+
+/* @makedep: blue_radiobutton_13px.bmp */
+BLUE_RADIOBUTTON_13PX_BMP BITMAP "blue_radiobutton_13px.bmp"
+
+/* @makedep: blue_radiobutton_16px.bmp */
+BLUE_RADIOBUTTON_16PX_BMP BITMAP "blue_radiobutton_16px.bmp"
+
+/* @makedep: blue_radiobutton_25px.bmp */
+BLUE_RADIOBUTTON_25PX_BMP BITMAP "blue_radiobutton_25px.bmp"
+
+/* @makedep: blue_groupbox.bmp */
+BLUE_GROUPBOX_BMP BITMAP "blue_groupbox.bmp"
+
+/* @makedep: blue_commandlink.bmp */
+BLUE_COMMANDLINK_BMP BITMAP "blue_commandlink.bmp"
+
+/* @makedep: blue_commandlink_glyph_30px.bmp */
+BLUE_COMMANDLINK_GLYPH_30PX_BMP BITMAP "blue_commandlink_glyph_30px.bmp"
+
+/* @makedep: blue_commandlink_glyph_45px.bmp */
+BLUE_COMMANDLINK_GLYPH_45PX_BMP BITMAP "blue_commandlink_glyph_45px.bmp"
+
/* File version */
#define WINE_FILEDESCRIPTION_STR "Light Theme"
#define WINE_FILENAME_STR "light.msstyles"
--
2.30.2
1
0
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/nsi/tests/Makefile.in | 5 ++
dlls/nsi/tests/nsi.c | 146 +++++++++++++++++++++++++++++++++++++
include/ifmib.h | 72 ++++++++++++++++++
3 files changed, 223 insertions(+)
create mode 100644 dlls/nsi/tests/Makefile.in
create mode 100644 dlls/nsi/tests/nsi.c
diff --git a/dlls/nsi/tests/Makefile.in b/dlls/nsi/tests/Makefile.in
new file mode 100644
index 00000000000..98129935198
--- /dev/null
+++ b/dlls/nsi/tests/Makefile.in
@@ -0,0 +1,5 @@
+TESTDLL = nsi.dll
+IMPORTS = nsi uuid iphlpapi
+
+C_SRCS = \
+ nsi.c
diff --git a/dlls/nsi/tests/nsi.c b/dlls/nsi/tests/nsi.c
new file mode 100644
index 00000000000..96806e444de
--- /dev/null
+++ b/dlls/nsi/tests/nsi.c
@@ -0,0 +1,146 @@
+/*
+ * Network Store Interface tests
+ *
+ * Copyright 2021 Huw Davies
+ *
+ * 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 "winsock2.h"
+#include "winternl.h"
+#include "ws2ipdef.h"
+#include "iphlpapi.h"
+#include "netioapi.h"
+#include "iptypes.h"
+#include "netiodef.h"
+
+#include "wine/test.h"
+
+static int bounded( ULONG64 val, ULONG64 lo, ULONG64 hi )
+{
+ return lo <= val && val <= hi;
+}
+
+static void test_ndis_ifinfo( void )
+{
+ DWORD rw_sizes[] = { FIELD_OFFSET(struct nsi_ndis_ifinfo_rw, name2), FIELD_OFFSET(struct nsi_ndis_ifinfo_rw, unk),
+ sizeof(struct nsi_ndis_ifinfo_rw) };
+ struct nsi_ndis_ifinfo_rw *rw_tbl;
+ struct nsi_ndis_ifinfo_dynamic *dyn_tbl, *dyn_tbl_2;
+ struct nsi_ndis_ifinfo_static *stat_tbl;
+ DWORD err, count, i, rw_size;
+ NET_LUID *luid_tbl, *luid_tbl_2;
+ MIB_IF_TABLE2 *table;
+
+ /* Contents of GetIfTable2() keyed by luids */
+
+ for (i = 0; i < ARRAY_SIZE(rw_sizes); i++)
+ {
+ err = NsiAllocateAndGetTable( 1, &NPI_MS_NDIS_MODULEID, NSI_NDIS_IFINFO_TABLE, (void **)&luid_tbl, sizeof(*luid_tbl),
+ (void **)&rw_tbl, rw_sizes[i], (void **)&dyn_tbl, sizeof(*dyn_tbl),
+ (void **)&stat_tbl, sizeof(*stat_tbl), &count, 0 );
+ if (!err) break;
+ }
+todo_wine
+ ok( !err, "got %d\n", err );
+ if (err) return;
+ rw_size = rw_sizes[i];
+
+ err = GetIfTable2( &table );
+ ok( !err, "got %d\n", err );
+ ok( table->NumEntries == count, "table entries %d count %d\n", table->NumEntries, count );
+
+ /* Grab the dyn table again to provide an upper bound for the stats returned from GetIfTable2().
+ (The luids must be retrieved again otherwise NsiAllocateAndGetTable() fails). */
+ err = NsiAllocateAndGetTable( 1, &NPI_MS_NDIS_MODULEID, NSI_NDIS_IFINFO_TABLE, (void **)&luid_tbl_2, sizeof(*luid_tbl_2),
+ NULL, 0, (void **)&dyn_tbl_2, sizeof(*dyn_tbl_2),
+ NULL, 0, &count, 0 );
+ ok( !err, "got %d\n", err );
+ ok( table->NumEntries == count, "table entries %d count %d\n", table->NumEntries, count );
+
+ for (i = 0; i < count; i++)
+ {
+ MIB_IF_ROW2 *row = table->Table + i;
+ NET_LUID *luid = luid_tbl + i;
+ struct nsi_ndis_ifinfo_rw *rw = (struct nsi_ndis_ifinfo_rw *)((BYTE *)rw_tbl + i * rw_size);
+ struct nsi_ndis_ifinfo_dynamic *dyn = dyn_tbl + i, *dyn_2 = dyn_tbl_2 + i;
+ struct nsi_ndis_ifinfo_static *stat = stat_tbl + i;
+
+ ok( row->InterfaceLuid.Value == luid->Value, "%d: mismatch\n", i );
+ ok( row->InterfaceIndex == stat->if_index, "%d: mismatch\n", i );
+ ok( IsEqualGUID( &row->InterfaceGuid, &stat->if_guid ), "%d: mismatch\n", i );
+ ok( !memcmp( row->Alias, rw->alias.String, rw->alias.Length ), "%d: mismatch\n", i );
+ ok( lstrlenW( row->Alias ) * 2 == rw->alias.Length, "%d: mismatch\n", i );
+ ok( !memcmp( row->Description, stat->descr.String, sizeof(row->Description) ), "%d: mismatch\n", i );
+ ok( lstrlenW( row->Description ) * 2 == stat->descr.Length, "%d: mismatch\n", i );
+ ok( row->PhysicalAddressLength == rw->phys_addr.Length, "%d: mismatch\n", i );
+ ok( !memcmp( row->PhysicalAddress, rw->phys_addr.Address, IF_MAX_PHYS_ADDRESS_LENGTH ), "%d: mismatch\n", i );
+ ok( row->PhysicalAddressLength == stat->perm_phys_addr.Length, "%d: mismatch\n", i );
+ ok( !memcmp( row->PermanentPhysicalAddress, stat->perm_phys_addr.Address, IF_MAX_PHYS_ADDRESS_LENGTH ), "%d: mismatch\n", i );
+ ok( row->Mtu == dyn->mtu, "%d: mismatch\n", i );
+ ok( row->Type == stat->type, "%d: mismatch\n", i );
+ /* TunnelType */
+ ok( row->MediaType == stat->media_type, "%d: mismatch\n", i );
+ ok( row->PhysicalMediumType == stat->phys_medium_type, "%d: mismatch\n", i );
+ ok( row->AccessType == stat->access_type, "%d: mismatch\n", i );
+ /* DirectionType */
+ ok( row->InterfaceAndOperStatusFlags.HardwareInterface == stat->flags.hw, "%d: mismatch\n", i );
+ ok( row->InterfaceAndOperStatusFlags.FilterInterface == stat->flags.filter, "%d: mismatch\n", i );
+ ok( row->InterfaceAndOperStatusFlags.ConnectorPresent == stat->conn_present, "%d: mismatch\n", i );
+ /* NotAuthenticated */
+ ok( row->InterfaceAndOperStatusFlags.NotMediaConnected == dyn->flags.not_media_conn, "%d: mismatch\n", i );
+ /* Paused */
+ /* LowPower */
+ /* EndPointInterface */
+ ok( row->OperStatus == dyn->oper_status, "%d: mismatch\n", i );
+ ok( row->AdminStatus == rw->admin_status, "%d: mismatch\n", i );
+ ok( row->MediaConnectState == dyn->media_conn_state, "%d: status mismatch\n", i );
+ ok( IsEqualGUID( &row->NetworkGuid, &rw->network_guid ), "%d: mismatch\n", i );
+ ok( row->ConnectionType == stat->conn_type, "%d: mismatch\n", i );
+ if (dyn->xmit_speed == ~0ULL) dyn->xmit_speed = 0;
+ ok( row->TransmitLinkSpeed == dyn->xmit_speed, "%d: mismatch\n", i );
+ if (dyn->rcv_speed == ~0ULL) dyn->rcv_speed = 0;
+ ok( row->ReceiveLinkSpeed == dyn->rcv_speed, "%d: mismatch\n", i );
+ ok( bounded( row->InOctets, dyn->in_octets, dyn_2->in_octets ), "%d: mismatch\n", i );
+ ok( bounded( row->InUcastPkts, dyn->in_ucast_pkts, dyn_2->in_ucast_pkts ), "%d: mismatch\n", i );
+ ok( bounded( row->InNUcastPkts, dyn->in_mcast_pkts + dyn->in_bcast_pkts,
+ dyn_2->in_mcast_pkts + dyn_2->in_bcast_pkts ), "%d: mismatch\n", i );
+ ok( bounded( row->InDiscards, dyn->in_discards, dyn_2->in_discards ), "%d: mismatch\n", i );
+ ok( bounded( row->InErrors, dyn->in_errors, dyn_2->in_errors ), "%d: mismatch\n", i );
+ /* InUnknownProtos */
+ ok( bounded( row->InUcastOctets, dyn->in_ucast_octs, dyn_2->in_ucast_octs ), "%d: mismatch\n", i );
+ ok( bounded( row->InMulticastOctets, dyn->in_mcast_octs, dyn_2->in_mcast_octs ), "%d: mismatch\n", i );
+ ok( bounded( row->InBroadcastOctets, dyn->in_bcast_octs, dyn_2->in_bcast_octs ), "%d: mismatch\n", i );
+ ok( bounded( row->OutOctets, dyn->out_octets, dyn_2->out_octets ), "%d: mismatch\n", i );
+ ok( bounded( row->OutUcastPkts, dyn->out_ucast_pkts, dyn_2->out_ucast_pkts ), "%d: mismatch\n", i );
+ ok( bounded( row->OutNUcastPkts, dyn->out_mcast_pkts + dyn->out_bcast_pkts,
+ dyn_2->out_mcast_pkts + dyn_2->out_bcast_pkts ), "%d: mismatch\n", i );
+ ok( bounded( row->OutDiscards, dyn->out_discards, dyn_2->out_discards ), "%d: mismatch\n", i );
+ ok( bounded( row->OutErrors, dyn->out_errors, dyn_2->out_errors ), "%d: mismatch\n", i );
+ ok( bounded( row->OutUcastOctets, dyn->out_ucast_octs, dyn_2->out_ucast_octs ), "%d: mismatch\n", i );
+ ok( bounded( row->OutMulticastOctets, dyn->out_mcast_octs, dyn_2->out_mcast_octs ), "%d: mismatch\n", i );
+ ok( bounded( row->OutBroadcastOctets, dyn->out_bcast_octs, dyn_2->out_bcast_octs ), "%d: mismatch\n", i );
+ /* OutQLen */
+ }
+
+ FreeMibTable( table );
+ NsiFreeTable( luid_tbl_2, NULL, dyn_tbl_2, NULL );
+ NsiFreeTable( luid_tbl, rw_tbl, dyn_tbl, stat_tbl );
+}
+
+START_TEST( nsi )
+{
+ test_ndis_ifinfo();
+}
diff --git a/include/ifmib.h b/include/ifmib.h
index 440ed144037..83f2c090945 100644
--- a/include/ifmib.h
+++ b/include/ifmib.h
@@ -66,5 +66,77 @@ typedef struct _MIB_IFTABLE
MIB_IFROW table[1];
} MIB_IFTABLE, *PMIB_IFTABLE;
+/* Undocumented NSI NDIS tables */
+#define NSI_NDIS_IFINFO_TABLE 0
+#define NSI_NDIS_INDEX_LUID_TABLE 2
+
+struct nsi_ndis_ifinfo_rw
+{
+ GUID network_guid;
+ DWORD admin_status;
+ IF_COUNTED_STRING alias; /* .Length in bytes not including '\0' */
+ IF_PHYSICAL_ADDRESS phys_addr;
+ USHORT pad;
+ IF_COUNTED_STRING name2;
+ DWORD unk;
+};
+
+struct nsi_ndis_ifinfo_dynamic
+{
+ DWORD oper_status;
+ struct
+ {
+ DWORD unk : 1;
+ DWORD not_media_conn : 1;
+ DWORD unk2 : 30;
+ } flags;
+ DWORD media_conn_state;
+ DWORD unk;
+ DWORD mtu;
+ ULONG64 xmit_speed;
+ ULONG64 rcv_speed;
+ ULONG64 in_errors;
+ ULONG64 in_discards;
+ ULONG64 out_errors;
+ ULONG64 out_discards;
+ ULONG64 unk2;
+ ULONG64 in_octets;
+ ULONG64 in_ucast_pkts;
+ ULONG64 in_mcast_pkts;
+ ULONG64 in_bcast_pkts;
+ ULONG64 out_octets;
+ ULONG64 out_ucast_pkts;
+ ULONG64 out_mcast_pkts;
+ ULONG64 out_bcast_pkts;
+ ULONG64 unk3[2];
+ ULONG64 in_ucast_octs;
+ ULONG64 in_mcast_octs;
+ ULONG64 in_bcast_octs;
+ ULONG64 out_ucast_octs;
+ ULONG64 out_mcast_octs;
+ ULONG64 out_bcast_octs;
+ ULONG64 unk4;
+};
+
+struct nsi_ndis_ifinfo_static
+{
+ DWORD if_index;
+ IF_COUNTED_STRING descr;
+ DWORD type;
+ DWORD access_type;
+ DWORD unk;
+ DWORD conn_type;
+ GUID if_guid;
+ USHORT conn_present;
+ IF_PHYSICAL_ADDRESS perm_phys_addr;
+ struct
+ {
+ DWORD hw : 1;
+ DWORD filter : 1;
+ DWORD unk : 30;
+ } flags;
+ DWORD media_type;
+ DWORD phys_medium_type;
+};
#endif /* __WINE_IFMIB_H */
--
2.23.0
1
0
[PATCH 4/5] nsi: Add stub implementations of NsiAllocateAndGetTable() and NsiFreeTable().
by Huw Davies 24 Jun '21
by Huw Davies 24 Jun '21
24 Jun '21
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/nsi/Makefile.in | 3 +++
dlls/nsi/nsi.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
dlls/nsi/nsi.spec | 4 ++--
include/netiodef.h | 6 ++++++
4 files changed, 55 insertions(+), 2 deletions(-)
create mode 100644 dlls/nsi/nsi.c
diff --git a/dlls/nsi/Makefile.in b/dlls/nsi/Makefile.in
index 634c4011ed9..68126cab6c6 100644
--- a/dlls/nsi/Makefile.in
+++ b/dlls/nsi/Makefile.in
@@ -2,3 +2,6 @@ MODULE = nsi.dll
IMPORTLIB = nsi
EXTRADLLFLAGS = -mno-cygwin
+
+C_SRCS = \
+ nsi.c
diff --git a/dlls/nsi/nsi.c b/dlls/nsi/nsi.c
new file mode 100644
index 00000000000..3d6429a9113
--- /dev/null
+++ b/dlls/nsi/nsi.c
@@ -0,0 +1,44 @@
+/*
+ * Network Store Interface
+ *
+ * Copyright 2021 Huw Davies
+ *
+ * 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 "winsock2.h"
+#include "winternl.h"
+#include "ws2ipdef.h"
+#include "iphlpapi.h"
+#include "netioapi.h"
+#include "iptypes.h"
+#include "netiodef.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(nsi);
+
+DWORD WINAPI NsiAllocateAndGetTable( DWORD unk, const NPI_MODULEID *module, DWORD table, void **key_data, DWORD key_size,
+ void **rw_data, DWORD rw_size, void **dynamic_data, DWORD dynamic_size,
+ void **static_data, DWORD static_size, DWORD *count, DWORD unk2 )
+{
+ FIXME( "%d %p %d %p %d %p %d %p %d %p %d %p %d: stub\n", unk, module, table, key_data, key_size,
+ rw_data, rw_size, dynamic_data, dynamic_size, static_data, static_size, count, unk2 );
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+void WINAPI NsiFreeTable( void *key_data, void *rw_data, void *dynamic_data, void *static_data )
+{
+ FIXME( "%p %p %p %p: stub\n", key_data, rw_data, dynamic_data, static_data );
+}
diff --git a/dlls/nsi/nsi.spec b/dlls/nsi/nsi.spec
index 2d500d30e94..fc2db9e35c1 100644
--- a/dlls/nsi/nsi.spec
+++ b/dlls/nsi/nsi.spec
@@ -1,5 +1,5 @@
@ stub NsiAllocateAndGetPersistentDataWithMaskTable
-@ stub NsiAllocateAndGetTable
+@ stdcall NsiAllocateAndGetTable(long ptr long ptr long ptr long ptr long ptr long ptr long)
@ stub NsiCancelChangeNotification
@ stub NsiDeregisterChangeNotification
@ stub NsiDeregisterChangeNotificationEx
@@ -7,7 +7,7 @@
@ stub NsiEnumerateObjectsAllParametersEx
@ stub NsiEnumerateObjectsAllPersistentParametersWithMask
@ stub NsiFreePersistentDataWithMaskTable
-@ stub NsiFreeTable
+@ stdcall NsiFreeTable(ptr ptr ptr ptr)
@ stub NsiGetAllParameters
@ stub NsiGetAllParametersEx
@ stub NsiGetAllPersistentParametersWithMask
diff --git a/include/netiodef.h b/include/netiodef.h
index 3089685bef1..2bc05399b63 100644
--- a/include/netiodef.h
+++ b/include/netiodef.h
@@ -96,4 +96,10 @@ DEFINE_NPI_MS_MODULEID( NPI_MS_NDIS_MODULEID, 0x11 );
#undef _U
#undef __U
+/* Undocumented Nsi api */
+DWORD WINAPI NsiAllocateAndGetTable( DWORD unk, const NPI_MODULEID *module, DWORD table, void **key_data, DWORD key_size,
+ void **rw_data, DWORD rw_size, void **dynamic_data, DWORD dynamic_size,
+ void **static_data, DWORD static_size, DWORD *count, DWORD unk2 );
+void WINAPI NsiFreeTable( void *key_data, void *rw_data, void *dynamic_data, void *static_data );
+
#endif /* __WINE_NETIODEF_H */
--
2.23.0
1
0
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/nsi/Makefile.in | 4 ++++
dlls/nsi/nsi.spec | 26 ++++++++++++++++++++++++++
2 files changed, 30 insertions(+)
create mode 100644 dlls/nsi/Makefile.in
create mode 100644 dlls/nsi/nsi.spec
diff --git a/dlls/nsi/Makefile.in b/dlls/nsi/Makefile.in
new file mode 100644
index 00000000000..634c4011ed9
--- /dev/null
+++ b/dlls/nsi/Makefile.in
@@ -0,0 +1,4 @@
+MODULE = nsi.dll
+IMPORTLIB = nsi
+
+EXTRADLLFLAGS = -mno-cygwin
diff --git a/dlls/nsi/nsi.spec b/dlls/nsi/nsi.spec
new file mode 100644
index 00000000000..2d500d30e94
--- /dev/null
+++ b/dlls/nsi/nsi.spec
@@ -0,0 +1,26 @@
+@ stub NsiAllocateAndGetPersistentDataWithMaskTable
+@ stub NsiAllocateAndGetTable
+@ stub NsiCancelChangeNotification
+@ stub NsiDeregisterChangeNotification
+@ stub NsiDeregisterChangeNotificationEx
+@ stub NsiEnumerateObjectsAllParameters
+@ stub NsiEnumerateObjectsAllParametersEx
+@ stub NsiEnumerateObjectsAllPersistentParametersWithMask
+@ stub NsiFreePersistentDataWithMaskTable
+@ stub NsiFreeTable
+@ stub NsiGetAllParameters
+@ stub NsiGetAllParametersEx
+@ stub NsiGetAllPersistentParametersWithMask
+@ stub NsiObjectSecurity
+@ stub NsiGetParameter
+@ stub NsiGetParameterEx
+@ stub NsiRegisterChangeNotification
+@ stub NsiRegisterChangeNotificationEx
+@ stub NsiRequestChangeNotification
+@ stub NsiRequestChangeNotificationEx
+@ stub NsiSetAllParameters
+@ stub NsiSetAllParametersEx
+@ stub NsiSetAllPersistentParametersWithMask
+@ stub NsiSetObjectSecurity
+@ stub NsiSetParameter
+@ stub NsiSetParameterEx
--
2.23.0
1
0