Use gparted from external disk (e.g., Ubuntu Live USB disk) and adjust partition sizes as you want.
note: gparted has bugs around handling HFS, so it behaves as if it has hung while it is moving a partition that contains HFS. Be patient and let it work. It may take more than 2 hours.
If Windows won’t boot after this, you have to either reconfigure legacy MBR or rebuild BCD.