diff --git a/CMakeLists.txt b/CMakeLists.txt
index 163ea2c943..04bcdde4c2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -980,6 +980,10 @@ else()
set(DOLPHIN_WC_IS_STABLE "0")
endif()
+# Remove in-tree revision information generated by Visual Studio
+# This is because the compiler will check in-tree first and use this, even if it is outdated
+file(REMOVE "${PROJECT_SOURCE_DIR}/Source/Core/Common/scmrev.h")
+
configure_file(
"${PROJECT_SOURCE_DIR}/Source/Core/Common/scmrev.h.in"
"${PROJECT_BINARY_DIR}/Source/Core/Common/scmrev.h"
diff --git a/Externals/hidapi/CMakeLists.txt b/Externals/hidapi/CMakeLists.txt
index 1cf77404f0..a5d88df5fe 100644
--- a/Externals/hidapi/CMakeLists.txt
+++ b/Externals/hidapi/CMakeLists.txt
@@ -9,7 +9,7 @@ if(APPLE)
elseif(MSVC)
target_sources(hidapi PRIVATE windows/hid.c)
else()
- find_package(Libudev)
+ find_package(LIBUDEV)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND LIBUDEV_FOUND)
target_sources(hidapi PRIVATE linux/hid.c)
target_link_libraries(hidapi PRIVATE udev)
diff --git a/Installer/Installer.nsi b/Installer/Installer.nsi
index c08ada69c9..1ad09ddce8 100644
--- a/Installer/Installer.nsi
+++ b/Installer/Installer.nsi
@@ -154,20 +154,6 @@ Section "Base" SEC01
SetOutPath "$TEMP"
SetOverwrite on
- File /r "dxredist"
- File /r "vcredist"
-SectionEnd
-
-Section "DirectX Runtime" SEC02
- DetailPrint "Running DirectX runtime setup..."
- ExecWait '"$TEMP\dxredist\DXSETUP.exe" /silent'
- DetailPrint "Finished DirectX runtime setup"
-SectionEnd
-
-Section "Visual C++ 2015 Redistributable" SEC03
- DetailPrint "Running Visual C++ 2015 Redistributable setup..."
- ExecWait '"$TEMP\vcredist\vc_redist.x64.exe" /install /quiet /norestart'
- DetailPrint "Finished Visual C++ 2015 Redistributable setup"
SectionEnd
Section -AdditionalIcons
@@ -193,8 +179,6 @@ SectionEnd
; Section descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Installs all files required to run the Dolphin Emulator."
- !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Installs the recommended DirectX runtime libraries that are needed by Dolphin."
- !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "Installs the required Visual C++ 2015 Redistributable that is needed by Dolphin."
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Section Uninstall
diff --git a/Installer/dxredist/APR2007_xinput_x64.cab b/Installer/dxredist/APR2007_xinput_x64.cab
deleted file mode 100644
index 732f8a8f36..0000000000
Binary files a/Installer/dxredist/APR2007_xinput_x64.cab and /dev/null differ
diff --git a/Installer/dxredist/APR2007_xinput_x86.cab b/Installer/dxredist/APR2007_xinput_x86.cab
deleted file mode 100644
index f414d55571..0000000000
Binary files a/Installer/dxredist/APR2007_xinput_x86.cab and /dev/null differ
diff --git a/Installer/dxredist/DSETUP.dll b/Installer/dxredist/DSETUP.dll
deleted file mode 100644
index 691025af7e..0000000000
Binary files a/Installer/dxredist/DSETUP.dll and /dev/null differ
diff --git a/Installer/dxredist/DXSETUP.exe b/Installer/dxredist/DXSETUP.exe
deleted file mode 100644
index 5d062aa978..0000000000
Binary files a/Installer/dxredist/DXSETUP.exe and /dev/null differ
diff --git a/Installer/dxredist/dsetup32.dll b/Installer/dxredist/dsetup32.dll
deleted file mode 100644
index 1781afa4b0..0000000000
Binary files a/Installer/dxredist/dsetup32.dll and /dev/null differ
diff --git a/Installer/dxredist/dxupdate.cab b/Installer/dxredist/dxupdate.cab
deleted file mode 100644
index ed3b5b89f5..0000000000
Binary files a/Installer/dxredist/dxupdate.cab and /dev/null differ
diff --git a/Installer/vcredist/vc_redist.x64.exe b/Installer/vcredist/vc_redist.x64.exe
deleted file mode 100644
index f986317bff..0000000000
Binary files a/Installer/vcredist/vc_redist.x64.exe and /dev/null differ
diff --git a/Readme.md b/Readme.md
index 699e943c44..a6747c9cba 100644
--- a/Readme.md
+++ b/Readme.md
@@ -16,7 +16,7 @@ Primehack is now supported on MacOS thanks to the efforts of [Brandon Sorensen](
# Original Dolphin Readme file contents:
-[Homepage](https://dolphin-emu.org/) | [Project Site](https://github.com/dolphin-emu/dolphin) | [Buildbot](https://dolphin.ci) | [Forums](https://forums.dolphin-emu.org) | [Wiki](https://wiki.dolphin-emu.org) | [Github Wiki](https://github.com/dolphin-emu/dolphin/wiki) | [Issue Tracker](https://bugs.dolphin-emu.org/projects/emulator/issues) | [Coding Style](https://github.com/dolphin-emu/dolphin/blob/master/Contributing.md) | [Transifex Page](https://www.transifex.com/projects/p/dolphin-emu)
+[Homepage](https://dolphin-emu.org/) | [Project Site](https://github.com/dolphin-emu/dolphin) | [Buildbot](https://dolphin.ci/) | [Forums](https://forums.dolphin-emu.org/) | [Wiki](https://wiki.dolphin-emu.org/) | [GitHub Wiki](https://github.com/dolphin-emu/dolphin/wiki) | [Issue Tracker](https://bugs.dolphin-emu.org/projects/emulator/issues) | [Coding Style](https://github.com/dolphin-emu/dolphin/blob/master/Contributing.md) | [Transifex Page](https://explore.transifex.com/delroth/dolphin-emu/)
Dolphin is an emulator for running GameCube and Wii games on Windows,
Linux, macOS, and recent Android devices. It's licensed under the terms
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatListFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatListFragment.java
index efc446d50e..a2cf37dba8 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatListFragment.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatListFragment.java
@@ -14,9 +14,10 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import com.google.android.material.divider.MaterialDividerItemDecoration;
+
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel;
-import org.dolphinemu.dolphinemu.ui.DividerItemDecoration;
public class CheatListFragment extends Fragment
{
@@ -38,6 +39,10 @@ public class CheatListFragment extends Fragment
recyclerView.setAdapter(new CheatsAdapter(activity, viewModel));
recyclerView.setLayoutManager(new LinearLayoutManager(activity));
- recyclerView.addItemDecoration(new DividerItemDecoration(activity, null));
+
+ MaterialDividerItemDecoration divider =
+ new MaterialDividerItemDecoration(requireActivity(), LinearLayoutManager.VERTICAL);
+ divider.setLastItemDecorated(false);
+ recyclerView.addItemDecoration(divider);
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java
index 86a5650de5..89587ea535 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java
@@ -14,10 +14,11 @@ import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import com.google.android.material.divider.MaterialDividerItemDecoration;
+
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
-import org.dolphinemu.dolphinemu.ui.DividerItemDecoration;
import java.util.ArrayList;
import java.util.HashMap;
@@ -136,7 +137,11 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
recyclerView.setAdapter(mAdapter);
recyclerView.setLayoutManager(manager);
- recyclerView.addItemDecoration(new DividerItemDecoration(requireActivity(), null));
+
+ MaterialDividerItemDecoration divider =
+ new MaterialDividerItemDecoration(requireActivity(), LinearLayoutManager.VERTICAL);
+ divider.setLastItemDecorated(false);
+ recyclerView.addItemDecoration(divider);
SettingsActivityView activity = (SettingsActivityView) getActivity();
mPresenter.onViewCreated(menuTag, activity.getSettings());
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/DividerItemDecoration.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/DividerItemDecoration.java
deleted file mode 100644
index f7a1689af5..0000000000
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/DividerItemDecoration.java
+++ /dev/null
@@ -1,162 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-package org.dolphinemu.dolphinemu.ui;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.util.AttributeSet;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-/**
- * Implementation from:
- * https://gist.github.com/lapastillaroja/858caf1a82791b6c1a36
- */
-public final class DividerItemDecoration extends RecyclerView.ItemDecoration
-{
-
- private Drawable mDivider;
- private boolean mShowFirstDivider = false;
- private boolean mShowLastDivider = false;
-
- public DividerItemDecoration(Context context, AttributeSet attrs)
- {
- final TypedArray a = context
- .obtainStyledAttributes(attrs, new int[]{android.R.attr.listDivider});
- mDivider = a.getDrawable(0);
- a.recycle();
- }
-
- public DividerItemDecoration(Context context, AttributeSet attrs, boolean showFirstDivider,
- boolean showLastDivider)
- {
- this(context, attrs);
- mShowFirstDivider = showFirstDivider;
- mShowLastDivider = showLastDivider;
- }
-
- public DividerItemDecoration(Drawable divider)
- {
- mDivider = divider;
- }
-
- public DividerItemDecoration(Drawable divider, boolean showFirstDivider,
- boolean showLastDivider)
- {
- this(divider);
- mShowFirstDivider = showFirstDivider;
- mShowLastDivider = showLastDivider;
- }
-
- @Override
- public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,
- @NonNull RecyclerView parent,
- @NonNull RecyclerView.State state)
- {
- super.getItemOffsets(outRect, view, parent, state);
- if (mDivider == null)
- {
- return;
- }
- if (parent.getChildAdapterPosition(view) < 1)
- {
- return;
- }
-
- if (getOrientation(parent) == LinearLayoutManager.VERTICAL)
- {
- outRect.top = mDivider.getIntrinsicHeight();
- }
- else
- {
- outRect.left = mDivider.getIntrinsicWidth();
- }
- }
-
- @Override
- public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent,
- @NonNull RecyclerView.State state)
- {
- if (mDivider == null)
- {
- super.onDrawOver(c, parent, state);
- return;
- }
-
- // Initialization needed to avoid compiler warning
- int left = 0, right = 0, top = 0, bottom = 0, size;
- int orientation = getOrientation(parent);
- int childCount = parent.getChildCount();
-
- if (orientation == LinearLayoutManager.VERTICAL)
- {
- size = mDivider.getIntrinsicHeight();
- left = parent.getPaddingLeft();
- right = parent.getWidth() - parent.getPaddingRight();
- }
- else
- { //horizontal
- size = mDivider.getIntrinsicWidth();
- top = parent.getPaddingTop();
- bottom = parent.getHeight() - parent.getPaddingBottom();
- }
-
- for (int i = mShowFirstDivider ? 0 : 1; i < childCount; i++)
- {
- View child = parent.getChildAt(i);
- RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
-
- if (orientation == LinearLayoutManager.VERTICAL)
- {
- top = child.getTop() - params.topMargin;
- bottom = top + size;
- }
- else
- { //horizontal
- left = child.getLeft() - params.leftMargin;
- right = left + size;
- }
- mDivider.setBounds(left, top, right, bottom);
- mDivider.draw(c);
- }
-
- // show last divider
- if (mShowLastDivider && childCount > 0)
- {
- View child = parent.getChildAt(childCount - 1);
- RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
- if (orientation == LinearLayoutManager.VERTICAL)
- {
- top = child.getBottom() + params.bottomMargin;
- bottom = top + size;
- }
- else
- { // horizontal
- left = child.getRight() + params.rightMargin;
- right = left + size;
- }
- mDivider.setBounds(left, top, right, bottom);
- mDivider.draw(c);
- }
- }
-
- private int getOrientation(RecyclerView parent)
- {
- if (parent.getLayoutManager() instanceof LinearLayoutManager)
- {
- LinearLayoutManager layoutManager = (LinearLayoutManager) parent.getLayoutManager();
- return layoutManager.getOrientation();
- }
- else
- {
- throw new IllegalStateException(
- "DividerItemDecoration can only be used with a LinearLayoutManager.");
- }
- }
-}
diff --git a/Source/Android/app/src/main/res/layout-land/activity_user_data.xml b/Source/Android/app/src/main/res/layout-land/activity_user_data.xml
index 597e598266..24863dcd5f 100644
--- a/Source/Android/app/src/main/res/layout-land/activity_user_data.xml
+++ b/Source/Android/app/src/main/res/layout-land/activity_user_data.xml
@@ -50,7 +50,7 @@
app:layout_constraintWidth_max="400dp"
app:layout_constraintEnd_toStartOf="@id/divider"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="@id/divider"
+ app:layout_constraintTop_toTopOf="parent"
tools:text="@string/user_data_new_location" />
-
diff --git a/Source/Android/app/src/main/res/layout-w680dp-land/activity_convert.xml b/Source/Android/app/src/main/res/layout-w680dp-land/activity_convert.xml
index 8091203873..1c00d679a6 100644
--- a/Source/Android/app/src/main/res/layout-w680dp-land/activity_convert.xml
+++ b/Source/Android/app/src/main/res/layout-w680dp-land/activity_convert.xml
@@ -53,11 +53,10 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/divider" />
-
-
-
-
-
-
+ android:layout_marginBottom="16dp" />