Updated: Wed Sep 22 10:48:29 AM CEST 2021
This commit is contained in:
parent
f41b12fbe8
commit
704bcab096
@ -176,7 +176,6 @@ FLAG_FILTER_NONGNU=(
|
||||
'-frerun-cse-after-loop'
|
||||
'-fsched*'
|
||||
'-fsection-anchors'
|
||||
'-fstack-clash-protection'
|
||||
'-ftree*'
|
||||
'-funsafe-loop*'
|
||||
'-fuse-linker-plugin'
|
||||
|
6
env/temp.conf
vendored
Normal file
6
env/temp.conf
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
COMMON_FLAGS="-march=native -O3 -pipe -fno-strict-aliasing"
|
||||
LDFLAGS="${LDFLAGS} -Wl,--defsym=__gentoo_check_ldflags__=0"
|
||||
CFLAGS="${COMMON_FLAGS}"
|
||||
CXXFLAGS="${COMMON_FLAGS}"
|
||||
FCFLAGS="${COMMON_FLAGS}"
|
||||
FFLAGS="${COMMON_FLAGS}"
|
152
kernel-config
152
kernel-config
@ -1,11 +1,13 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86 5.12.13-gentoo Kernel Configuration
|
||||
# Linux/x86 5.13.0-gentoo Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="x86_64-pc-linux-gnu-gcc (Gentoo 10.2.0-r5 p6) 10.2.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
CONFIG_GCC_VERSION=100200
|
||||
CONFIG_CLANG_VERSION=0
|
||||
CONFIG_AS_IS_GNU=y
|
||||
CONFIG_AS_VERSION=23502
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=23502
|
||||
CONFIG_LLD_VERSION=0
|
||||
@ -98,6 +100,19 @@ CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
# end of Timers subsystem
|
||||
|
||||
CONFIG_BPF=y
|
||||
CONFIG_HAVE_EBPF_JIT=y
|
||||
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
|
||||
|
||||
#
|
||||
# BPF subsystem
|
||||
#
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
# CONFIG_BPF_JIT is not set
|
||||
# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
|
||||
# CONFIG_BPF_PRELOAD is not set
|
||||
# end of BPF subsystem
|
||||
|
||||
# CONFIG_PREEMPT_NONE is not set
|
||||
CONFIG_PREEMPT_VOLUNTARY=y
|
||||
# CONFIG_PREEMPT is not set
|
||||
@ -144,7 +159,6 @@ CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
|
||||
#
|
||||
# Scheduler features
|
||||
#
|
||||
# CONFIG_SCHED_ALT is not set
|
||||
# CONFIG_UCLAMP_TASK is not set
|
||||
# end of Scheduler features
|
||||
|
||||
@ -173,6 +187,7 @@ CONFIG_CGROUP_DEVICE=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_CGROUP_PERF=y
|
||||
# CONFIG_CGROUP_BPF is not set
|
||||
# CONFIG_CGROUP_MISC is not set
|
||||
# CONFIG_CGROUP_DEBUG is not set
|
||||
CONFIG_SOCK_CGROUP_DATA=y
|
||||
CONFIG_NAMESPACES=y
|
||||
@ -203,7 +218,6 @@ CONFIG_SYSCTL=y
|
||||
CONFIG_HAVE_UID16=y
|
||||
CONFIG_SYSCTL_EXCEPTION_TRACE=y
|
||||
CONFIG_HAVE_PCSPKR_PLATFORM=y
|
||||
CONFIG_BPF=y
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_UID16=y
|
||||
CONFIG_MULTIUSER=y
|
||||
@ -232,9 +246,6 @@ CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y
|
||||
CONFIG_KALLSYMS_BASE_RELATIVE=y
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
|
||||
# CONFIG_BPF_PRELOAD is not set
|
||||
# CONFIG_USERFAULTFD is not set
|
||||
CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
|
||||
CONFIG_KCMP=y
|
||||
@ -283,7 +294,6 @@ CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_ARCH_HAS_CPU_RELAX=y
|
||||
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
|
||||
CONFIG_ARCH_HAS_FILTER_PGPROT=y
|
||||
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
|
||||
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
|
||||
@ -321,39 +331,10 @@ CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
|
||||
CONFIG_SCHED_OMIT_FRAME_POINTER=y
|
||||
# CONFIG_HYPERVISOR_GUEST is not set
|
||||
# CONFIG_MK8 is not set
|
||||
# CONFIG_MK8SSE3 is not set
|
||||
# CONFIG_MK10 is not set
|
||||
# CONFIG_MBARCELONA is not set
|
||||
# CONFIG_MBOBCAT is not set
|
||||
# CONFIG_MJAGUAR is not set
|
||||
# CONFIG_MBULLDOZER is not set
|
||||
# CONFIG_MPILEDRIVER is not set
|
||||
# CONFIG_MSTEAMROLLER is not set
|
||||
# CONFIG_MEXCAVATOR is not set
|
||||
# CONFIG_MZEN is not set
|
||||
# CONFIG_MZEN2 is not set
|
||||
# CONFIG_MPSC is not set
|
||||
# CONFIG_MCORE2 is not set
|
||||
# CONFIG_MATOM is not set
|
||||
# CONFIG_MNEHALEM is not set
|
||||
# CONFIG_MWESTMERE is not set
|
||||
# CONFIG_MSILVERMONT is not set
|
||||
# CONFIG_MGOLDMONT is not set
|
||||
# CONFIG_MGOLDMONTPLUS is not set
|
||||
# CONFIG_MSANDYBRIDGE is not set
|
||||
# CONFIG_MIVYBRIDGE is not set
|
||||
# CONFIG_MHASWELL is not set
|
||||
# CONFIG_MBROADWELL is not set
|
||||
# CONFIG_MSKYLAKE is not set
|
||||
# CONFIG_MSKYLAKEX is not set
|
||||
# CONFIG_MCANNONLAKE is not set
|
||||
# CONFIG_MICELAKE is not set
|
||||
# CONFIG_MCASCADELAKE is not set
|
||||
# CONFIG_MCOOPERLAKE is not set
|
||||
# CONFIG_MTIGERLAKE is not set
|
||||
CONFIG_GENERIC_CPU=y
|
||||
# CONFIG_MNATIVE_INTEL is not set
|
||||
# CONFIG_MNATIVE_AMD is not set
|
||||
CONFIG_X86_INTERNODE_CACHE_SHIFT=6
|
||||
CONFIG_X86_L1_CACHE_SHIFT=6
|
||||
CONFIG_X86_TSC=y
|
||||
@ -473,10 +454,7 @@ CONFIG_HAVE_LIVEPATCH=y
|
||||
# end of Processor type and features
|
||||
|
||||
CONFIG_ARCH_HAS_ADD_PAGES=y
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
|
||||
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
|
||||
CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
|
||||
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
|
||||
|
||||
#
|
||||
# Power management and ACPI options
|
||||
@ -783,6 +761,8 @@ CONFIG_COMPAT_OLD_SIGACTION=y
|
||||
CONFIG_COMPAT_32BIT_TIME=y
|
||||
CONFIG_HAVE_ARCH_VMAP_STACK=y
|
||||
CONFIG_VMAP_STACK=y
|
||||
CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
|
||||
# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
|
||||
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
|
||||
CONFIG_STRICT_KERNEL_RWX=y
|
||||
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
|
||||
@ -831,8 +811,12 @@ CONFIG_MODULE_SIG_SHA1=y
|
||||
# CONFIG_MODULE_SIG_SHA384 is not set
|
||||
# CONFIG_MODULE_SIG_SHA512 is not set
|
||||
CONFIG_MODULE_SIG_HASH="sha1"
|
||||
# CONFIG_MODULE_COMPRESS is not set
|
||||
CONFIG_MODULE_COMPRESS_NONE=y
|
||||
# CONFIG_MODULE_COMPRESS_GZIP is not set
|
||||
# CONFIG_MODULE_COMPRESS_XZ is not set
|
||||
# CONFIG_MODULE_COMPRESS_ZSTD is not set
|
||||
# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set
|
||||
CONFIG_MODPROBE_PATH="/sbin/modprobe"
|
||||
# CONFIG_TRIM_UNUSED_KSYMS is not set
|
||||
CONFIG_MODULES_TREE_LOOKUP=y
|
||||
CONFIG_BLOCK=y
|
||||
@ -935,19 +919,23 @@ CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
|
||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||
CONFIG_HAVE_FAST_GUP=y
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||
CONFIG_MEMORY_HOTPLUG=y
|
||||
CONFIG_MEMORY_HOTPLUG_SPARSE=y
|
||||
# CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE is not set
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
|
||||
# CONFIG_MEMORY_HOTREMOVE is not set
|
||||
CONFIG_MHP_MEMMAP_ON_MEMORY=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
|
||||
CONFIG_MEMORY_BALLOON=y
|
||||
CONFIG_BALLOON_COMPACTION=y
|
||||
CONFIG_COMPACTION=y
|
||||
CONFIG_PAGE_REPORTING=y
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
|
||||
CONFIG_CONTIG_ALLOC=y
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_BOUNCE=y
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_MMU_NOTIFIER=y
|
||||
CONFIG_KSM=y
|
||||
@ -967,6 +955,7 @@ CONFIG_ARCH_WANTS_THP_SWAP=y
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
|
||||
# CONFIG_IDLE_PAGE_TRACKING is not set
|
||||
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
|
||||
CONFIG_ARCH_HAS_PTE_DEVMAP=y
|
||||
CONFIG_HMM_MIRROR=y
|
||||
CONFIG_VMAP_PFN=y
|
||||
@ -1113,7 +1102,7 @@ CONFIG_NETFILTER_NETLINK_QUEUE=m
|
||||
CONFIG_NETFILTER_NETLINK_LOG=m
|
||||
CONFIG_NETFILTER_NETLINK_OSF=m
|
||||
CONFIG_NF_CONNTRACK=m
|
||||
# CONFIG_NF_LOG_NETDEV is not set
|
||||
# CONFIG_NF_LOG_SYSLOG is not set
|
||||
CONFIG_NETFILTER_CONNCOUNT=m
|
||||
CONFIG_NF_CONNTRACK_MARK=y
|
||||
CONFIG_NF_CONNTRACK_SECMARK=y
|
||||
@ -1174,6 +1163,7 @@ CONFIG_NFT_HASH=m
|
||||
# CONFIG_NFT_SYNPROXY is not set
|
||||
# CONFIG_NF_FLOW_TABLE is not set
|
||||
CONFIG_NETFILTER_XTABLES=y
|
||||
CONFIG_NETFILTER_XTABLES_COMPAT=y
|
||||
|
||||
#
|
||||
# Xtables combined modules
|
||||
@ -1471,10 +1461,10 @@ CONFIG_BRIDGE_IGMP_SNOOPING=y
|
||||
# CONFIG_BRIDGE_VLAN_FILTERING is not set
|
||||
# CONFIG_BRIDGE_MRP is not set
|
||||
# CONFIG_BRIDGE_CFM is not set
|
||||
CONFIG_HAVE_NET_DSA=y
|
||||
CONFIG_NET_DSA=m
|
||||
# CONFIG_NET_DSA_TAG_AR9331 is not set
|
||||
# CONFIG_NET_DSA_TAG_BRCM is not set
|
||||
# CONFIG_NET_DSA_TAG_BRCM_LEGACY is not set
|
||||
# CONFIG_NET_DSA_TAG_BRCM_PREPEND is not set
|
||||
# CONFIG_NET_DSA_TAG_HELLCREEK is not set
|
||||
# CONFIG_NET_DSA_TAG_GSWIP is not set
|
||||
@ -1483,7 +1473,6 @@ CONFIG_NET_DSA=m
|
||||
# CONFIG_NET_DSA_TAG_MTK is not set
|
||||
# CONFIG_NET_DSA_TAG_KSZ is not set
|
||||
# CONFIG_NET_DSA_TAG_RTL4_A is not set
|
||||
# CONFIG_NET_DSA_TAG_OCELOT is not set
|
||||
# CONFIG_NET_DSA_TAG_QCA is not set
|
||||
# CONFIG_NET_DSA_TAG_LAN9303 is not set
|
||||
# CONFIG_NET_DSA_TAG_SJA1105 is not set
|
||||
@ -1615,6 +1604,7 @@ CONFIG_NET_SWITCHDEV=y
|
||||
# CONFIG_NET_L3_MASTER_DEV is not set
|
||||
# CONFIG_QRTR is not set
|
||||
# CONFIG_NET_NCSI is not set
|
||||
CONFIG_PCPU_DEV_REFCNT=y
|
||||
CONFIG_RPS=y
|
||||
CONFIG_RFS_ACCEL=y
|
||||
CONFIG_SOCK_RX_QUEUE_MAPPING=y
|
||||
@ -1623,7 +1613,6 @@ CONFIG_XPS=y
|
||||
CONFIG_CGROUP_NET_CLASSID=y
|
||||
CONFIG_NET_RX_BUSY_POLL=y
|
||||
CONFIG_BQL=y
|
||||
# CONFIG_BPF_JIT is not set
|
||||
CONFIG_NET_FLOW_LIMIT=y
|
||||
|
||||
#
|
||||
@ -1674,6 +1663,7 @@ CONFIG_CAN_SJA1000_PLATFORM=m
|
||||
# CONFIG_CAN_8DEV_USB is not set
|
||||
CONFIG_CAN_EMS_USB=m
|
||||
# CONFIG_CAN_ESD_USB2 is not set
|
||||
# CONFIG_CAN_ETAS_ES58X is not set
|
||||
# CONFIG_CAN_GS_USB is not set
|
||||
# CONFIG_CAN_KVASER_USB is not set
|
||||
# CONFIG_CAN_MCBA_USB is not set
|
||||
@ -1697,6 +1687,7 @@ CONFIG_BT_HS=y
|
||||
CONFIG_BT_LE=y
|
||||
# CONFIG_BT_LEDS is not set
|
||||
# CONFIG_BT_MSFTEXT is not set
|
||||
# CONFIG_BT_AOSPEXT is not set
|
||||
CONFIG_BT_DEBUGFS=y
|
||||
# CONFIG_BT_SELFTEST is not set
|
||||
|
||||
@ -1729,6 +1720,7 @@ CONFIG_BT_MRVL=m
|
||||
CONFIG_BT_MRVL_SDIO=m
|
||||
# CONFIG_BT_ATH3K is not set
|
||||
# CONFIG_BT_MTKSDIO is not set
|
||||
# CONFIG_BT_VIRTIO is not set
|
||||
# end of Bluetooth device drivers
|
||||
|
||||
# CONFIG_AF_RXRPC is not set
|
||||
@ -1783,10 +1775,11 @@ CONFIG_NET_9P_RDMA=m
|
||||
# CONFIG_LWTUNNEL is not set
|
||||
CONFIG_DST_CACHE=y
|
||||
CONFIG_GRO_CELLS=y
|
||||
CONFIG_NET_SELFTESTS=m
|
||||
CONFIG_NET_SOCK_MSG=y
|
||||
CONFIG_NET_DEVLINK=y
|
||||
CONFIG_FAILOVER=m
|
||||
CONFIG_ETHTOOL_NETLINK=y
|
||||
CONFIG_HAVE_EBPF_JIT=y
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
@ -2069,7 +2062,6 @@ CONFIG_BLK_DEV_FD=m
|
||||
CONFIG_CDROM=m
|
||||
# CONFIG_PARIDE is not set
|
||||
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
|
||||
# CONFIG_BLK_DEV_UMEM is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
@ -2121,9 +2113,9 @@ CONFIG_SENSORS_TSL2550=m
|
||||
# CONFIG_HMC6352 is not set
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_SRAM is not set
|
||||
# CONFIG_DW_XDATA_PCIE is not set
|
||||
# CONFIG_PCI_ENDPOINT_TEST is not set
|
||||
# CONFIG_XILINX_SDFEC is not set
|
||||
CONFIG_PVPANIC=y
|
||||
# CONFIG_C2PORT is not set
|
||||
|
||||
#
|
||||
@ -2162,6 +2154,9 @@ CONFIG_VMWARE_VMCI=m
|
||||
# CONFIG_MISC_RTSX_USB is not set
|
||||
# CONFIG_HABANA_AI is not set
|
||||
# CONFIG_UACCE is not set
|
||||
CONFIG_PVPANIC=y
|
||||
# CONFIG_PVPANIC_MMIO is not set
|
||||
# CONFIG_PVPANIC_PCI is not set
|
||||
# end of Misc devices
|
||||
|
||||
CONFIG_HAVE_IDE=y
|
||||
@ -2679,6 +2674,7 @@ CONFIG_IXGBEVF=m
|
||||
# CONFIG_ICE is not set
|
||||
# CONFIG_FM10K is not set
|
||||
# CONFIG_IGC is not set
|
||||
CONFIG_NET_VENDOR_MICROSOFT=y
|
||||
CONFIG_JME=m
|
||||
CONFIG_NET_VENDOR_MARVELL=y
|
||||
# CONFIG_MVMDIO is not set
|
||||
@ -2839,11 +2835,13 @@ CONFIG_LXT_PHY=m
|
||||
CONFIG_LSI_ET1011C_PHY=m
|
||||
CONFIG_MARVELL_PHY=m
|
||||
# CONFIG_MARVELL_10G_PHY is not set
|
||||
# CONFIG_MARVELL_88X2222_PHY is not set
|
||||
# CONFIG_MICREL_PHY is not set
|
||||
# CONFIG_MICROCHIP_PHY is not set
|
||||
# CONFIG_MICROCHIP_T1_PHY is not set
|
||||
# CONFIG_MICROSEMI_PHY is not set
|
||||
CONFIG_NATIONAL_PHY=m
|
||||
# CONFIG_NXP_C45_TJA11XX_PHY is not set
|
||||
# CONFIG_NXP_TJA11XX_PHY is not set
|
||||
# CONFIG_AT803X_PHY is not set
|
||||
CONFIG_QSEMI_PHY=m
|
||||
@ -3199,6 +3197,7 @@ CONFIG_HDLC_PPP=m
|
||||
# CONFIG_FARSYNC is not set
|
||||
# CONFIG_SBNI is not set
|
||||
CONFIG_IEEE802154_DRIVERS=m
|
||||
# CONFIG_WWAN is not set
|
||||
CONFIG_VMXNET3=m
|
||||
# CONFIG_FUJITSU_ES is not set
|
||||
# CONFIG_NETDEVSIM is not set
|
||||
@ -3313,7 +3312,6 @@ CONFIG_TABLET_USB_KBTAB=m
|
||||
# CONFIG_TABLET_USB_PEGASUS is not set
|
||||
# CONFIG_TABLET_SERIAL_WACOM4 is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_PROPERTIES=y
|
||||
# CONFIG_TOUCHSCREEN_AD7879 is not set
|
||||
# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
@ -3332,7 +3330,9 @@ CONFIG_TOUCHSCREEN_EETI=m
|
||||
CONFIG_TOUCHSCREEN_FUJITSU=m
|
||||
# CONFIG_TOUCHSCREEN_GOODIX is not set
|
||||
# CONFIG_TOUCHSCREEN_HIDEEP is not set
|
||||
# CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set
|
||||
# CONFIG_TOUCHSCREEN_ILI210X is not set
|
||||
# CONFIG_TOUCHSCREEN_ILITEK is not set
|
||||
# CONFIG_TOUCHSCREEN_S6SY761 is not set
|
||||
CONFIG_TOUCHSCREEN_GUNZE=m
|
||||
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
|
||||
@ -3344,6 +3344,7 @@ CONFIG_TOUCHSCREEN_WACOM_W8001=m
|
||||
CONFIG_TOUCHSCREEN_MCS5000=m
|
||||
# CONFIG_TOUCHSCREEN_MMS114 is not set
|
||||
# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set
|
||||
# CONFIG_TOUCHSCREEN_MSG2638 is not set
|
||||
CONFIG_TOUCHSCREEN_MTOUCH=m
|
||||
CONFIG_TOUCHSCREEN_INEXIO=m
|
||||
# CONFIG_TOUCHSCREEN_MK712 is not set
|
||||
@ -3415,6 +3416,7 @@ CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
|
||||
# CONFIG_INPUT_ADXL34X is not set
|
||||
# CONFIG_INPUT_IMS_PCU is not set
|
||||
# CONFIG_INPUT_IQS269A is not set
|
||||
# CONFIG_INPUT_IQS626A is not set
|
||||
# CONFIG_INPUT_CMA3000 is not set
|
||||
# CONFIG_INPUT_IDEAPAD_SLIDEBAR is not set
|
||||
# CONFIG_INPUT_DRV260X_HAPTICS is not set
|
||||
@ -3508,18 +3510,13 @@ CONFIG_SERIAL_JSM=m
|
||||
|
||||
CONFIG_SERIAL_MCTRL_GPIO=y
|
||||
CONFIG_SERIAL_NONSTANDARD=y
|
||||
# CONFIG_ROCKETPORT is not set
|
||||
CONFIG_CYCLADES=m
|
||||
# CONFIG_CYZ_INTR is not set
|
||||
# CONFIG_MOXA_INTELLIO is not set
|
||||
# CONFIG_MOXA_SMARTIO is not set
|
||||
CONFIG_SYNCLINK_GT=m
|
||||
# CONFIG_ISI is not set
|
||||
CONFIG_N_HDLC=m
|
||||
# CONFIG_N_GSM is not set
|
||||
CONFIG_NOZOMI=m
|
||||
# CONFIG_NULL_TTY is not set
|
||||
# CONFIG_TRACE_SINK is not set
|
||||
CONFIG_HVC_DRIVER=y
|
||||
# CONFIG_SERIAL_DEV_BUS is not set
|
||||
# CONFIG_TTY_PRINTK is not set
|
||||
@ -3559,7 +3556,6 @@ CONFIG_IPWIRELESS=m
|
||||
|
||||
# CONFIG_MWAVE is not set
|
||||
CONFIG_DEVMEM=y
|
||||
# CONFIG_DEVKMEM is not set
|
||||
CONFIG_NVRAM=m
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=8192
|
||||
@ -3664,6 +3660,7 @@ CONFIG_I2C_XILINX=m
|
||||
# External I2C/SMBus adapter drivers
|
||||
#
|
||||
CONFIG_I2C_DIOLAN_U2C=m
|
||||
# CONFIG_I2C_CP2615 is not set
|
||||
CONFIG_I2C_PARPORT=m
|
||||
CONFIG_I2C_ROBOTFUZZ_OSIF=m
|
||||
CONFIG_I2C_TAOS_EVM=m
|
||||
@ -3855,6 +3852,7 @@ CONFIG_BATTERY_MAX17040=m
|
||||
# CONFIG_CHARGER_BQ256XX is not set
|
||||
# CONFIG_CHARGER_SMB347 is not set
|
||||
# CONFIG_BATTERY_GAUGE_LTC2941 is not set
|
||||
# CONFIG_BATTERY_GOLDFISH is not set
|
||||
# CONFIG_CHARGER_RT9455 is not set
|
||||
# CONFIG_CHARGER_BD99954 is not set
|
||||
CONFIG_HWMON=y
|
||||
@ -3887,7 +3885,6 @@ CONFIG_SENSORS_ADT7475=m
|
||||
CONFIG_SENSORS_K8TEMP=m
|
||||
CONFIG_SENSORS_K10TEMP=m
|
||||
CONFIG_SENSORS_FAM15H_POWER=m
|
||||
# CONFIG_SENSORS_AMD_ENERGY is not set
|
||||
CONFIG_SENSORS_APPLESMC=m
|
||||
CONFIG_SENSORS_ASB100=m
|
||||
# CONFIG_SENSORS_ASPEED is not set
|
||||
@ -3966,6 +3963,7 @@ CONFIG_SENSORS_PC87427=m
|
||||
# CONFIG_SENSORS_NCT7802 is not set
|
||||
# CONFIG_SENSORS_NCT7904 is not set
|
||||
# CONFIG_SENSORS_NPCM7XX is not set
|
||||
# CONFIG_SENSORS_NZXT_KRAKEN2 is not set
|
||||
CONFIG_SENSORS_PCF8591=m
|
||||
# CONFIG_PMBUS is not set
|
||||
# CONFIG_SENSORS_SBTSI is not set
|
||||
@ -4050,6 +4048,7 @@ CONFIG_X86_PKG_TEMP_THERMAL=m
|
||||
# end of ACPI INT340X thermal drivers
|
||||
|
||||
# CONFIG_INTEL_PCH_THERMAL is not set
|
||||
# CONFIG_INTEL_TCC_COOLING is not set
|
||||
# end of Intel thermal drivers
|
||||
|
||||
CONFIG_WATCHDOG=y
|
||||
@ -4206,7 +4205,6 @@ CONFIG_MFD_INTEL_LPSS_PCI=y
|
||||
CONFIG_MFD_SM501=m
|
||||
CONFIG_MFD_SM501_GPIO=y
|
||||
# CONFIG_MFD_SKY81452 is not set
|
||||
# CONFIG_ABX500_CORE is not set
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
# CONFIG_MFD_TI_AM335X_TSCADC is not set
|
||||
# CONFIG_MFD_LP3943 is not set
|
||||
@ -4234,6 +4232,7 @@ CONFIG_MFD_SM501_GPIO=y
|
||||
# CONFIG_MFD_WM831X_I2C is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
# CONFIG_MFD_WM8994 is not set
|
||||
# CONFIG_MFD_ATC260X_I2C is not set
|
||||
# end of Multifunction device drivers
|
||||
|
||||
CONFIG_REGULATOR=y
|
||||
@ -5017,6 +5016,7 @@ CONFIG_DRM_I915_USERPTR=y
|
||||
#
|
||||
# drm/i915 Profile Guided Optimisation
|
||||
#
|
||||
CONFIG_DRM_I915_REQUEST_TIMEOUT=20000
|
||||
CONFIG_DRM_I915_FENCE_TIMEOUT=10000
|
||||
CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250
|
||||
CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
|
||||
@ -5057,6 +5057,7 @@ CONFIG_DRM_PANEL_BRIDGE=y
|
||||
# CONFIG_DRM_CIRRUS_QEMU is not set
|
||||
# CONFIG_DRM_GM12U320 is not set
|
||||
# CONFIG_DRM_VBOXVIDEO is not set
|
||||
# CONFIG_DRM_GUD is not set
|
||||
CONFIG_DRM_LEGACY=y
|
||||
# CONFIG_DRM_TDFX is not set
|
||||
# CONFIG_DRM_R128 is not set
|
||||
@ -5218,6 +5219,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
CONFIG_SND_VMASTER=y
|
||||
CONFIG_SND_DMA_SGBUF=y
|
||||
CONFIG_SND_CTL_LED=m
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_SEQUENCER_OSS=m
|
||||
@ -5384,6 +5386,7 @@ CONFIG_SND_PCMCIA=y
|
||||
CONFIG_SND_X86=y
|
||||
# CONFIG_HDMI_LPE_AUDIO is not set
|
||||
CONFIG_SND_SYNTH_EMUX=m
|
||||
# CONFIG_SND_VIRTIO is not set
|
||||
CONFIG_AC97_BUS=m
|
||||
|
||||
#
|
||||
@ -5424,6 +5427,7 @@ CONFIG_HID_GENERIC=y
|
||||
# CONFIG_HID_ELECOM is not set
|
||||
# CONFIG_HID_ELO is not set
|
||||
# CONFIG_HID_EZKEY is not set
|
||||
# CONFIG_HID_FT260 is not set
|
||||
# CONFIG_HID_GEMBIRD is not set
|
||||
# CONFIG_HID_GFRM is not set
|
||||
# CONFIG_HID_GLORIOUS is not set
|
||||
@ -5466,6 +5470,7 @@ CONFIG_HID_GENERIC=y
|
||||
# CONFIG_HID_ROCCAT is not set
|
||||
# CONFIG_HID_SAITEK is not set
|
||||
# CONFIG_HID_SAMSUNG is not set
|
||||
# CONFIG_HID_SEMITEK is not set
|
||||
# CONFIG_HID_SONY is not set
|
||||
# CONFIG_HID_SPEEDLINK is not set
|
||||
# CONFIG_HID_STEAM is not set
|
||||
@ -5838,11 +5843,6 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
|
||||
# CONFIG_LEDS_TRIGGER_PATTERN is not set
|
||||
CONFIG_LEDS_TRIGGER_AUDIO=m
|
||||
# CONFIG_LEDS_TRIGGER_TTY is not set
|
||||
|
||||
#
|
||||
# LED Blink
|
||||
#
|
||||
# CONFIG_LEDS_BLINK is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
CONFIG_INFINIBAND=m
|
||||
CONFIG_INFINIBAND_USER_MAD=m
|
||||
@ -5859,7 +5859,6 @@ CONFIG_INFINIBAND_CXGB4=m
|
||||
CONFIG_MLX4_INFINIBAND=m
|
||||
# CONFIG_INFINIBAND_OCRDMA is not set
|
||||
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
|
||||
# CONFIG_INFINIBAND_BNXT_RE is not set
|
||||
# CONFIG_INFINIBAND_RDMAVT is not set
|
||||
# CONFIG_RDMA_RXE is not set
|
||||
# CONFIG_RDMA_SIW is not set
|
||||
@ -5991,6 +5990,7 @@ CONFIG_RTC_DRV_V3020=m
|
||||
#
|
||||
# HID Sensor RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_GOLDFISH is not set
|
||||
CONFIG_DMADEVICES=y
|
||||
# CONFIG_DMADEVICES_DEBUG is not set
|
||||
|
||||
@ -6005,7 +6005,6 @@ CONFIG_DMA_ACPI=y
|
||||
# CONFIG_INTEL_IDXD is not set
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
# CONFIG_PLX_DMA is not set
|
||||
# CONFIG_XILINX_ZYNQMP_DPDMA is not set
|
||||
# CONFIG_QCOM_HIDMA_MGMT is not set
|
||||
# CONFIG_QCOM_HIDMA is not set
|
||||
CONFIG_DW_DMAC_CORE=y
|
||||
@ -6091,9 +6090,9 @@ CONFIG_VHOST_NET=m
|
||||
# end of Microsoft Hyper-V guest support
|
||||
|
||||
# CONFIG_GREYBUS is not set
|
||||
# CONFIG_COMEDI is not set
|
||||
CONFIG_STAGING=y
|
||||
# CONFIG_PRISM2_USB is not set
|
||||
# CONFIG_COMEDI is not set
|
||||
# CONFIG_RTL8192U is not set
|
||||
# CONFIG_RTLLIB is not set
|
||||
# CONFIG_RTL8723BS is not set
|
||||
@ -6116,21 +6115,9 @@ CONFIG_STAGING=y
|
||||
# CONFIG_GS_FPGABOOT is not set
|
||||
# CONFIG_UNISYSSPAR is not set
|
||||
# CONFIG_KS7010 is not set
|
||||
|
||||
#
|
||||
# Gasket devices
|
||||
#
|
||||
# CONFIG_STAGING_GASKET_FRAMEWORK is not set
|
||||
# end of Gasket devices
|
||||
|
||||
# CONFIG_FIELDBUS_DEV is not set
|
||||
# CONFIG_KPC2000 is not set
|
||||
CONFIG_QLGE=m
|
||||
CONFIG_WIMAX=m
|
||||
CONFIG_WIMAX_DEBUG_LEVEL=8
|
||||
CONFIG_WIMAX_I2400M=m
|
||||
CONFIG_WIMAX_I2400M_USB=m
|
||||
CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
|
||||
# CONFIG_WFX is not set
|
||||
CONFIG_X86_PLATFORM_DEVICES=y
|
||||
CONFIG_ACPI_WMI=m
|
||||
@ -6141,10 +6128,12 @@ CONFIG_WMI_BMOF=m
|
||||
CONFIG_MXM_WMI=m
|
||||
# CONFIG_PEAQ_WMI is not set
|
||||
# CONFIG_XIAOMI_WMI is not set
|
||||
# CONFIG_GIGABYTE_WMI is not set
|
||||
# CONFIG_ACERHDF is not set
|
||||
# CONFIG_ACER_WIRELESS is not set
|
||||
# CONFIG_ACER_WMI is not set
|
||||
# CONFIG_AMD_PMC is not set
|
||||
# CONFIG_ADV_SWBUTTON is not set
|
||||
# CONFIG_APPLE_GMUX is not set
|
||||
# CONFIG_ASUS_LAPTOP is not set
|
||||
# CONFIG_ASUS_WIRELESS is not set
|
||||
@ -6479,6 +6468,8 @@ CONFIG_CUSE=m
|
||||
#
|
||||
# Caches
|
||||
#
|
||||
CONFIG_NETFS_SUPPORT=m
|
||||
# CONFIG_NETFS_STATS is not set
|
||||
CONFIG_FSCACHE=m
|
||||
CONFIG_FSCACHE_STATS=y
|
||||
# CONFIG_FSCACHE_HISTOGRAM is not set
|
||||
@ -6771,6 +6762,7 @@ CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256
|
||||
# CONFIG_SECURITY_YAMA is not set
|
||||
# CONFIG_SECURITY_SAFESETID is not set
|
||||
# CONFIG_SECURITY_LOCKDOWN_LSM is not set
|
||||
# CONFIG_SECURITY_LANDLOCK is not set
|
||||
CONFIG_INTEGRITY=y
|
||||
# CONFIG_INTEGRITY_SIGNATURE is not set
|
||||
CONFIG_INTEGRITY_AUDIT=y
|
||||
@ -6861,6 +6853,7 @@ CONFIG_CRYPTO_RSA=y
|
||||
# CONFIG_CRYPTO_DH is not set
|
||||
CONFIG_CRYPTO_ECC=m
|
||||
CONFIG_CRYPTO_ECDH=m
|
||||
# CONFIG_CRYPTO_ECDSA is not set
|
||||
# CONFIG_CRYPTO_ECRDSA is not set
|
||||
# CONFIG_CRYPTO_SM2 is not set
|
||||
# CONFIG_CRYPTO_CURVE25519 is not set
|
||||
@ -7203,6 +7196,7 @@ CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
|
||||
# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B is not set
|
||||
CONFIG_STACK_VALIDATION=y
|
||||
# CONFIG_VMLINUX_MAP is not set
|
||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||
# end of Compile-time checks and compiler options
|
||||
|
||||
@ -7468,6 +7462,7 @@ CONFIG_RUNTIME_TESTING_MENU=y
|
||||
# CONFIG_TEST_LIST_SORT is not set
|
||||
# CONFIG_TEST_MIN_HEAP is not set
|
||||
# CONFIG_TEST_SORT is not set
|
||||
# CONFIG_TEST_DIV64 is not set
|
||||
# CONFIG_KPROBES_SANITY_TEST is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_RBTREE_TEST is not set
|
||||
@ -7505,6 +7500,7 @@ CONFIG_ASYNC_RAID6_TEST=m
|
||||
# CONFIG_TEST_MEMINIT is not set
|
||||
# CONFIG_TEST_FREE_PAGES is not set
|
||||
# CONFIG_TEST_FPU is not set
|
||||
CONFIG_ARCH_USE_MEMTEST=y
|
||||
# CONFIG_MEMTEST is not set
|
||||
# end of Kernel Testing and Coverage
|
||||
# end of Kernel hacking
|
||||
|
@ -1,5 +1,6 @@
|
||||
acct-group/audio
|
||||
acct-group/avahi
|
||||
acct-group/cron
|
||||
acct-group/crontab
|
||||
acct-group/docker
|
||||
acct-group/input
|
||||
@ -19,6 +20,7 @@ acct-group/render
|
||||
acct-group/sshd
|
||||
acct-group/video
|
||||
acct-user/avahi
|
||||
acct-user/cron
|
||||
acct-user/ldap
|
||||
acct-user/mail
|
||||
acct-user/man
|
||||
@ -54,6 +56,7 @@ app-crypt/gcr
|
||||
app-crypt/gnupg
|
||||
app-crypt/gpgme
|
||||
app-crypt/libb2
|
||||
app-crypt/libmd
|
||||
app-crypt/libsecret
|
||||
app-crypt/mhash
|
||||
app-crypt/mit-krb5
|
||||
@ -83,6 +86,7 @@ app-eselect/eselect-lua
|
||||
app-eselect/eselect-notify-send
|
||||
app-eselect/eselect-pinentry
|
||||
app-eselect/eselect-python
|
||||
app-eselect/eselect-ruby
|
||||
app-eselect/eselect-rust
|
||||
app-eselect/eselect-vi
|
||||
app-i18n/uchardet
|
||||
@ -118,6 +122,8 @@ app-text/asciidoc
|
||||
app-text/aspell
|
||||
app-text/build-docbook-catalog
|
||||
app-text/djvu
|
||||
app-text/docbook-dsssl-stylesheets
|
||||
app-text/docbook-sgml-dtd
|
||||
app-text/docbook-xml-dtd
|
||||
app-text/docbook-xsl-ns-stylesheets
|
||||
app-text/docbook-xsl-stylesheets
|
||||
@ -157,6 +163,7 @@ app-text/ps2eps
|
||||
app-text/ps2pkm
|
||||
app-text/psutils
|
||||
app-text/qpdf
|
||||
app-text/rarian
|
||||
app-text/rman
|
||||
app-text/sgml-common
|
||||
app-text/t1utils
|
||||
@ -184,6 +191,7 @@ dev-lang/perl
|
||||
dev-lang/python
|
||||
dev-lang/python-exec
|
||||
dev-lang/python-exec-conf
|
||||
dev-lang/ruby
|
||||
dev-lang/rust
|
||||
dev-lang/spidermonkey
|
||||
dev-lang/swig
|
||||
@ -278,8 +286,12 @@ dev-libs/protobuf
|
||||
dev-libs/ptexenc
|
||||
dev-libs/rapidjson
|
||||
dev-libs/rasqal
|
||||
dev-libs/re2
|
||||
dev-libs/redland
|
||||
dev-libs/stfl
|
||||
dev-libs/tinyxml
|
||||
dev-libs/tinyxml2
|
||||
dev-libs/tree-sitter
|
||||
dev-libs/unibilium
|
||||
dev-libs/univalue
|
||||
dev-libs/vala-common
|
||||
@ -293,7 +305,10 @@ dev-lua/mpack
|
||||
dev-perl/Archive-Zip
|
||||
dev-perl/Authen-SASL
|
||||
dev-perl/B-Hooks-EndOfScope
|
||||
dev-perl/Capture-Tiny
|
||||
dev-perl/Class-Data-Inheritable
|
||||
dev-perl/Config-AutoConf
|
||||
dev-perl/CPAN-Meta-Check
|
||||
dev-perl/Crypt-RC4
|
||||
dev-perl/Data-OptList
|
||||
dev-perl/Date-Manip
|
||||
@ -308,11 +323,13 @@ dev-perl/Encode-Locale
|
||||
dev-perl/Error
|
||||
dev-perl/Eval-Closure
|
||||
dev-perl/Exception-Class
|
||||
dev-perl/ExtUtils-HasCompiler
|
||||
dev-perl/File-BaseDir
|
||||
dev-perl/File-DesktopEntry
|
||||
dev-perl/File-HomeDir
|
||||
dev-perl/File-Listing
|
||||
dev-perl/File-MimeInfo
|
||||
dev-perl/File-Slurper
|
||||
dev-perl/File-Which
|
||||
dev-perl/HTML-Parser
|
||||
dev-perl/HTML-Tagset
|
||||
@ -348,6 +365,7 @@ dev-perl/PadWalker
|
||||
dev-perl/Params-Util
|
||||
dev-perl/Params-ValidationCompiler
|
||||
dev-perl/Parse-Yapp
|
||||
dev-perl/PerlIO-utf8_strict
|
||||
dev-perl/Perl-Tidy
|
||||
dev-perl/Pod-Parser
|
||||
dev-perl/Ref-Util
|
||||
@ -376,6 +394,7 @@ dev-perl/URI
|
||||
dev-perl/Variable-Magic
|
||||
dev-perl/WWW-RobotRules
|
||||
dev-perl/XML-Parser
|
||||
dev-perl/XString
|
||||
dev-perl/YAML-Tiny
|
||||
dev-python/alabaster
|
||||
dev-python/appdirs
|
||||
@ -389,11 +408,15 @@ dev-python/bleach
|
||||
dev-python/certifi
|
||||
dev-python/cffi
|
||||
dev-python/chardet
|
||||
dev-python/charset_normalizer
|
||||
dev-python/click
|
||||
dev-python/constantly
|
||||
dev-python/cppy
|
||||
dev-python/cryptography
|
||||
dev-python/cycler
|
||||
dev-python/cython
|
||||
dev-python/dbus-python
|
||||
dev-python/debugpy
|
||||
dev-python/decorator
|
||||
dev-python/defusedxml
|
||||
dev-python/distro
|
||||
@ -419,12 +442,15 @@ dev-python/jsonschema
|
||||
dev-python/jupyter_client
|
||||
dev-python/jupyter_core
|
||||
dev-python/jupyterlab_pygments
|
||||
dev-python/kiwisolver
|
||||
dev-python/linecache2
|
||||
dev-python/lxml
|
||||
dev-python/m2crypto
|
||||
dev-python/m2r
|
||||
dev-python/mako
|
||||
dev-python/markupsafe
|
||||
dev-python/matplotlib
|
||||
dev-python/matplotlib-inline
|
||||
dev-python/mistune
|
||||
dev-python/namespace-sphinxcontrib
|
||||
dev-python/namespace-zope
|
||||
@ -434,6 +460,8 @@ dev-python/nbformat
|
||||
dev-python/nest_asyncio
|
||||
dev-python/nose
|
||||
dev-python/notebook
|
||||
dev-python/numpy
|
||||
dev-python/olefile
|
||||
dev-python/packaging
|
||||
dev-python/pandocfilters
|
||||
dev-python/parso
|
||||
@ -441,6 +469,7 @@ dev-python/path-py
|
||||
dev-python/pbr
|
||||
dev-python/pexpect
|
||||
dev-python/pickleshare
|
||||
dev-python/pillow
|
||||
dev-python/pip
|
||||
dev-python/ply
|
||||
dev-python/prometheus_client
|
||||
@ -453,6 +482,7 @@ dev-python/pycountry
|
||||
dev-python/pycparser
|
||||
dev-python/pycryptodome
|
||||
dev-python/pycurl
|
||||
dev-python/pydevd
|
||||
dev-python/pygments
|
||||
dev-python/pygobject
|
||||
dev-python/pyhamcrest
|
||||
@ -490,11 +520,14 @@ dev-python/terminado
|
||||
dev-python/testpath
|
||||
dev-python/testtools
|
||||
dev-python/toml
|
||||
dev-python/tomli
|
||||
dev-python/traceback2
|
||||
dev-python/traitlets
|
||||
dev-python/twisted
|
||||
dev-python/typing-extensions
|
||||
dev-python/unittest2
|
||||
dev-python/urllib3
|
||||
dev-python/versioneer
|
||||
dev-python/wcwidth
|
||||
dev-python/webcolors
|
||||
dev-python/webencodings
|
||||
@ -516,6 +549,25 @@ dev-qt/qttest
|
||||
dev-qt/qtwidgets
|
||||
dev-qt/qtx11extras
|
||||
dev-qt/qtxml
|
||||
dev-ruby/asciidoctor
|
||||
dev-ruby/bundler
|
||||
dev-ruby/did_you_mean
|
||||
dev-ruby/json
|
||||
dev-ruby/kpeg
|
||||
dev-ruby/minitest
|
||||
dev-ruby/net-telnet
|
||||
dev-ruby/power_assert
|
||||
dev-ruby/racc
|
||||
dev-ruby/rake
|
||||
dev-ruby/rbs
|
||||
dev-ruby/rdoc
|
||||
dev-ruby/rexml
|
||||
dev-ruby/rss
|
||||
dev-ruby/rubygems
|
||||
dev-ruby/test-unit
|
||||
dev-ruby/typeprof
|
||||
dev-ruby/webrick
|
||||
dev-ruby/xmlrpc
|
||||
dev-tex/bibtexu
|
||||
dev-tex/latex-beamer
|
||||
dev-tex/latexmk
|
||||
@ -540,13 +592,16 @@ dev-util/ccache
|
||||
dev-util/ccls
|
||||
dev-util/cmake
|
||||
dev-util/cmocka
|
||||
dev-util/colm
|
||||
dev-util/cppunit
|
||||
dev-util/desktop-file-utils
|
||||
dev-util/ebuildtester
|
||||
dev-util/gdbus-codegen
|
||||
dev-util/glib-utils
|
||||
dev-util/gn
|
||||
dev-util/google-perftools
|
||||
dev-util/gperf
|
||||
dev-util/gtk-doc
|
||||
dev-util/gtk-doc-am
|
||||
dev-util/gtk-update-icon-cache
|
||||
dev-util/intltool
|
||||
@ -557,6 +612,7 @@ dev-util/meson-format-array
|
||||
dev-util/netsurf-buildsystem
|
||||
dev-util/ninja
|
||||
dev-util/pkgconf
|
||||
dev-util/ragel
|
||||
dev-util/re2c
|
||||
dev-util/shadowman
|
||||
dev-util/shellcheck-bin
|
||||
@ -575,12 +631,14 @@ kde-frameworks/extra-cmake-modules
|
||||
lxde-base/lxappearance
|
||||
mail-client/neomutt
|
||||
mail-mta/msmtp
|
||||
media-fonts/dejavu
|
||||
media-fonts/encodings
|
||||
media-fonts/font-util
|
||||
media-fonts/joypixels
|
||||
media-fonts/kochi-substitute
|
||||
media-fonts/liberation-fonts
|
||||
media-fonts/nerd-fonts
|
||||
media-fonts/stix-fonts
|
||||
media-fonts/terminus-font
|
||||
media-fonts/urw-fonts
|
||||
media-gfx/exiv2
|
||||
@ -637,6 +695,7 @@ media-libs/nv-codec-headers
|
||||
media-libs/openh264
|
||||
media-libs/openjpeg
|
||||
media-libs/opus
|
||||
media-libs/qhull
|
||||
media-libs/raptor
|
||||
media-libs/speex
|
||||
media-libs/speexdsp
|
||||
@ -707,6 +766,7 @@ net-misc/streamlink
|
||||
net-misc/wget
|
||||
net-misc/youtube-dl
|
||||
net-nds/openldap
|
||||
net-news/newsboat
|
||||
net-p2p/bitcoin-qt
|
||||
net-print/cups
|
||||
net-print/cups-filters
|
||||
@ -716,9 +776,12 @@ net-wireless/bluez
|
||||
net-wireless/crda
|
||||
net-wireless/wireless-regdb
|
||||
net-wireless/wpa_supplicant
|
||||
perl-core/Encode
|
||||
perl-core/File-Temp
|
||||
perl-core/Scalar-List-Utils
|
||||
sci-calculators/qalculate-gtk
|
||||
sci-libs/colamd
|
||||
sci-libs/libqalculate
|
||||
sci-libs/suitesparseconfig
|
||||
sci-mathematics/lpsolve
|
||||
sys-apps/acl
|
||||
@ -788,6 +851,7 @@ sys-devel/clang-runtime
|
||||
sys-devel/flex
|
||||
sys-devel/gcc
|
||||
sys-devel/gcc-config
|
||||
sys-devel/gdb
|
||||
sys-devel/gettext
|
||||
sys-devel/gnuconfig
|
||||
sys-devel/libtool
|
||||
@ -826,6 +890,7 @@ sys-libs/libomp
|
||||
sys-libs/libseccomp
|
||||
sys-libs/libunwind
|
||||
sys-libs/liburing
|
||||
sys-libs/libxcrypt
|
||||
sys-libs/mtdev
|
||||
sys-libs/ncurses
|
||||
sys-libs/pam
|
||||
@ -912,6 +977,8 @@ virtual/perl-XSLoader
|
||||
virtual/pkgconfig
|
||||
virtual/python-cffi
|
||||
virtual/resolvconf
|
||||
virtual/rubygems
|
||||
virtual/ruby-ssl
|
||||
virtual/rust
|
||||
virtual/secret-service
|
||||
virtual/service-manager
|
||||
@ -923,10 +990,9 @@ virtual/udev
|
||||
virtual/w3m
|
||||
virtual/yacc
|
||||
www-client/firefox
|
||||
www-client/google-chrome
|
||||
www-client/lynx
|
||||
www-client/ungoogled-chromium
|
||||
www-client/w3m
|
||||
www-plugins/chrome-binary-plugins
|
||||
www-servers/tornado
|
||||
x11-apps/bdftopcf
|
||||
x11-apps/iceauth
|
||||
|
@ -16,11 +16,11 @@ GENTOO_MIRRORS="https://mirror.eu.oneandone.net/linux/distributions/gentoo/gento
|
||||
http://ftp.vectranet.pl/gentoo/ \
|
||||
http://mirror.eu.oneandone.net/linux/distributions/gentoo/gentoo/"
|
||||
|
||||
#MAKEOPTS="-j8 --load-average=6.4"
|
||||
#EMERGE_DEFAULT_OPTS="--jobs=8 --load-average=6.4 --with-bdeps=y --keep-going=y --quiet-build"
|
||||
MAKEOPTS="-j8 --load-average=6.4"
|
||||
EMERGE_DEFAULT_OPTS="--jobs=8 --load-average=6.4 --with-bdeps=y --keep-going=y --quiet-build"
|
||||
|
||||
MAKEOPTS="-j3 --load-average=3.3"
|
||||
EMERGE_DEFAULT_OPTS="--jobs=3 --load-average=3.3 --with-bdeps=y --keep-going=y --quiet-build"
|
||||
#MAKEOPTS="-j3 --load-average=3.3"
|
||||
#EMERGE_DEFAULT_OPTS="--jobs=3 --load-average=3.3 --with-bdeps=y --keep-going=y --quiet-build"
|
||||
|
||||
ACCEPT_LICENSE="*"
|
||||
ACCEPT_KEYWORDS="~amd64"
|
||||
|
@ -16,3 +16,4 @@ dev-lang/ruby no-lto.conf
|
||||
net-analyzer/wireshark no-lto.conf
|
||||
dev-qt/* no-lto.conf
|
||||
net-libs/webkit-gtk no-lto.conf
|
||||
mail-client/heirloom-mailx temp.conf
|
||||
|
@ -1,4 +1,4 @@
|
||||
dev-haskell/*::gentoo
|
||||
x11-drivers/nvidia-drivers::hossie
|
||||
net-misc/megasync::guru
|
||||
#net-misc/megasync::guru
|
||||
sys-apps/flatpak::guru
|
||||
|
@ -50,6 +50,7 @@ media-sound/teamspeak-client alsa pulseaudio
|
||||
>=media-libs/libvpx-1.8.1 svc
|
||||
>=sys-libs/zlib-1.2.11-r2 minizip abi_x86_32 static-libs
|
||||
>=virtual/libcrypt-1 abi_x86_32
|
||||
>=sys-libs/libxcrypt-4.4.23-r1 abi_x86_32
|
||||
>=app-arch/zstd-1.4.4-r2 abi_x86_32
|
||||
media-sound/cmus alsa ffmpeg pulseaudio
|
||||
sys-devel/gcc graphite lto pgo
|
||||
@ -99,7 +100,7 @@ dev-util/pkgconfig abi_x86_32
|
||||
gnome-base/librsvg abi_x86_32
|
||||
media-gfx/graphite2 abi_x86_32
|
||||
media-libs/fontconfig abi_x86_32
|
||||
media-libs/freetype abi_x86_32
|
||||
media-libs/freetype harfbuzz abi_x86_32
|
||||
media-libs/harfbuzz abi_x86_32
|
||||
media-libs/libpng abi_x86_32
|
||||
edia-libs/openal abi_x86_32
|
||||
@ -420,3 +421,6 @@ net-dns/avahi python
|
||||
|
||||
#BB
|
||||
>=sys-libs/db-4.8.30-r6:4.8 cxx
|
||||
|
||||
# Ungoogled-chrome
|
||||
>=net-libs/nodejs-14.17.5-r1 inspector
|
||||
|
738
patches/x11-libs/libXft-2.3.3/emojifont-2.3.3.patch
Normal file
738
patches/x11-libs/libXft-2.3.3/emojifont-2.3.3.patch
Normal file
@ -0,0 +1,738 @@
|
||||
From 7808631e7a9a605d5fe7a1077129c658d9ec47fc Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Coste <mawww@kakoune.org>
|
||||
Date: Tue, 22 Oct 2019 22:46:49 +1100
|
||||
Subject: [PATCH] Add support for BGRA glyphs display and scaling
|
||||
|
||||
Display is done using an XRender Picture, as XRender
|
||||
glyphs are incompatible with BGRA rendering due to
|
||||
their use of the glyph bitmap as a mask.
|
||||
|
||||
Scaling is done by averaging all relevant pixel, which gives
|
||||
much better result than nearest pixel sampling while staying
|
||||
simple enough and not too computationally expensive.
|
||||
|
||||
This enables color emoji rendering support.
|
||||
|
||||
Fixes: #6
|
||||
|
||||
Signed-off-by: Maxime Coste <mawww@kakoune.org>
|
||||
---
|
||||
src/xftfreetype.c | 18 ++++-
|
||||
src/xftglyphs.c | 200 ++++++++++++++++++++++++++++++++++++++++++----
|
||||
src/xftint.h | 2 +
|
||||
src/xftrender.c | 168 ++++++++++++++++++++++++--------------
|
||||
4 files changed, 307 insertions(+), 81 deletions(-)
|
||||
|
||||
diff --git a/src/xftfreetype.c b/src/xftfreetype.c
|
||||
index a3b8332..a639a03 100644
|
||||
--- a/src/xftfreetype.c
|
||||
+++ b/src/xftfreetype.c
|
||||
@@ -514,7 +514,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi)
|
||||
/*
|
||||
* Compute glyph load flags
|
||||
*/
|
||||
- fi->load_flags = FT_LOAD_DEFAULT;
|
||||
+ fi->load_flags = FT_LOAD_DEFAULT | FT_LOAD_COLOR;
|
||||
|
||||
#ifndef XFT_EMBEDDED_BITMAP
|
||||
#define XFT_EMBEDDED_BITMAP "embeddedbitmap"
|
||||
@@ -766,6 +766,7 @@ XftFontOpenInfo (Display *dpy,
|
||||
FcChar32 hash_value;
|
||||
FcChar32 rehash_value;
|
||||
FcBool antialias;
|
||||
+ FcBool color;
|
||||
int max_glyph_memory;
|
||||
int alloc_size;
|
||||
int ascent, descent, height;
|
||||
@@ -822,12 +823,16 @@ XftFontOpenInfo (Display *dpy,
|
||||
if (!(face->face_flags & FT_FACE_FLAG_SCALABLE))
|
||||
antialias = FcFalse;
|
||||
|
||||
+ color = FT_HAS_COLOR(face) ? FcTrue : FcFalse;
|
||||
+
|
||||
/*
|
||||
* Find the appropriate picture format
|
||||
*/
|
||||
if (fi->render)
|
||||
{
|
||||
- if (antialias)
|
||||
+ if (color)
|
||||
+ format = XRenderFindStandardFormat (dpy, PictStandardARGB32);
|
||||
+ else if (antialias)
|
||||
{
|
||||
switch (fi->rgba) {
|
||||
case FC_RGBA_RGB:
|
||||
@@ -842,9 +847,7 @@ XftFontOpenInfo (Display *dpy,
|
||||
}
|
||||
}
|
||||
else
|
||||
- {
|
||||
format = XRenderFindStandardFormat (dpy, PictStandardA1);
|
||||
- }
|
||||
|
||||
if (!format)
|
||||
goto bail2;
|
||||
@@ -959,6 +962,13 @@ XftFontOpenInfo (Display *dpy,
|
||||
* which doesn't happen in XftFontInfoFill
|
||||
*/
|
||||
font->info.antialias = antialias;
|
||||
+
|
||||
+ /*
|
||||
+ * Set color value, which is only known once the
|
||||
+ * font was loaded
|
||||
+ */
|
||||
+ font->info.color = color;
|
||||
+
|
||||
/*
|
||||
* bump XftFile reference count
|
||||
*/
|
||||
diff --git a/src/xftglyphs.c b/src/xftglyphs.c
|
||||
index 4b5fb82..af2e3c1 100644
|
||||
--- a/src/xftglyphs.c
|
||||
+++ b/src/xftglyphs.c
|
||||
@@ -26,6 +26,8 @@
|
||||
|
||||
#include FT_SYNTHESIS_H
|
||||
|
||||
+#include FT_GLYPH_H
|
||||
+
|
||||
/*
|
||||
* Validate the memory info for a font
|
||||
*/
|
||||
@@ -78,9 +80,11 @@ _XftFontValidateMemory (Display *dpy, XftFont *public)
|
||||
static int
|
||||
_compute_xrender_bitmap_size( FT_Bitmap* target,
|
||||
FT_GlyphSlot slot,
|
||||
- FT_Render_Mode mode )
|
||||
+ FT_Render_Mode mode,
|
||||
+ FT_Matrix* matrix )
|
||||
{
|
||||
FT_Bitmap* ftbit;
|
||||
+ FT_Vector vector;
|
||||
int width, height, pitch;
|
||||
|
||||
if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
|
||||
@@ -88,9 +92,18 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
|
||||
|
||||
// compute the size of the final bitmap
|
||||
ftbit = &slot->bitmap;
|
||||
-
|
||||
width = ftbit->width;
|
||||
height = ftbit->rows;
|
||||
+
|
||||
+ if ( matrix && mode == FT_RENDER_MODE_NORMAL )
|
||||
+ {
|
||||
+ vector.x = ftbit->width;
|
||||
+ vector.y = ftbit->rows;
|
||||
+ FT_Vector_Transform(&vector, matrix);
|
||||
+
|
||||
+ width = vector.x;
|
||||
+ height = vector.y;
|
||||
+ }
|
||||
pitch = (width+3) & ~3;
|
||||
|
||||
switch ( ftbit->pixel_mode )
|
||||
@@ -112,6 +125,10 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case FT_PIXEL_MODE_BGRA:
|
||||
+ pitch = width * 4;
|
||||
+ break;
|
||||
+
|
||||
case FT_PIXEL_MODE_LCD:
|
||||
if ( mode != FT_RENDER_MODE_LCD )
|
||||
return -1;
|
||||
@@ -142,6 +159,105 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
|
||||
return pitch * height;
|
||||
}
|
||||
|
||||
+/* this functions converts the glyph bitmap found in a FT_GlyphSlot
|
||||
+ * into a different format while scaling by applying the given matrix
|
||||
+ * (see _compute_xrender_bitmap_size)
|
||||
+ *
|
||||
+ * you should call this function after _compute_xrender_bitmap_size
|
||||
+ *
|
||||
+ * target :: target bitmap descriptor. Note that its 'buffer' pointer
|
||||
+ * must point to memory allocated by the caller
|
||||
+ *
|
||||
+ * source :: the source bitmap descriptor
|
||||
+ *
|
||||
+ * matrix :: the scaling matrix to apply
|
||||
+ */
|
||||
+static void
|
||||
+_scaled_fill_xrender_bitmap( FT_Bitmap* target,
|
||||
+ FT_Bitmap* source,
|
||||
+ const FT_Matrix* matrix )
|
||||
+{
|
||||
+ unsigned char* src_buf = source->buffer;
|
||||
+ unsigned char* dst_line = target->buffer;
|
||||
+ int src_pitch = source->pitch;
|
||||
+ int width = target->width;
|
||||
+ int height = target->rows;
|
||||
+ int pitch = target->pitch;
|
||||
+ int h;
|
||||
+ FT_Vector vector;
|
||||
+ FT_Matrix inverse = *matrix;
|
||||
+ int sampling_width;
|
||||
+ int sampling_height;
|
||||
+ int sample_count;
|
||||
+
|
||||
+ if ( src_pitch < 0 )
|
||||
+ src_buf -= src_pitch*(source->rows-1);
|
||||
+
|
||||
+ FT_Matrix_Invert(&inverse);
|
||||
+
|
||||
+ /* compute how many source pixels a target pixel spans */
|
||||
+ vector.x = 1;
|
||||
+ vector.y = 1;
|
||||
+ FT_Vector_Transform(&vector, &inverse);
|
||||
+ sampling_width = vector.x / 2;
|
||||
+ sampling_height = vector.y / 2;
|
||||
+ sample_count = (2 * sampling_width + 1) * (2 * sampling_height + 1);
|
||||
+
|
||||
+ for ( h = height; h > 0; h--, dst_line += pitch )
|
||||
+ {
|
||||
+ int x;
|
||||
+
|
||||
+ for ( x = 0; x < width; x++ )
|
||||
+ {
|
||||
+ unsigned char* src;
|
||||
+
|
||||
+#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
|
||||
+
|
||||
+ /* compute target pixel location in source space */
|
||||
+ vector.x = (x * 0x10000) + 0x10000 / 2;
|
||||
+ vector.y = ((height - h) * 0x10000) + 0x10000 / 2;
|
||||
+ FT_Vector_Transform(&vector, &inverse);
|
||||
+ vector.x = CLAMP(FT_RoundFix(vector.x) / 0x10000, 0, source->width - 1);
|
||||
+ vector.y = CLAMP(FT_RoundFix(vector.y) / 0x10000, 0, source->rows - 1);
|
||||
+
|
||||
+ switch ( source->pixel_mode )
|
||||
+ {
|
||||
+ case FT_PIXEL_MODE_MONO: /* convert mono to 8-bit gray, scale using nearest pixel */
|
||||
+ src = src_buf + (vector.y * src_pitch);
|
||||
+ if ( src[(vector.x >> 3)] & (0x80 >> (vector.x & 7)) )
|
||||
+ dst_line[x] = 0xff;
|
||||
+ break;
|
||||
+
|
||||
+ case FT_PIXEL_MODE_GRAY: /* scale using nearest pixel */
|
||||
+ src = src_buf + (vector.y * src_pitch);
|
||||
+ dst_line[x] = src[vector.x];
|
||||
+ break;
|
||||
+
|
||||
+ case FT_PIXEL_MODE_BGRA: /* scale by averaging all relevant source pixels, keep BGRA format */
|
||||
+ {
|
||||
+ int sample_x, sample_y;
|
||||
+ int bgra[4] = {};
|
||||
+ for (sample_y = - sampling_height; sample_y < sampling_height + 1; ++sample_y)
|
||||
+ {
|
||||
+ int src_y = CLAMP(vector.y + sample_y, 0, source->rows - 1);
|
||||
+ src = src_buf + (src_y * src_pitch);
|
||||
+ for (sample_x = - sampling_width; sample_x < sampling_width + 1; ++sample_x)
|
||||
+ {
|
||||
+ int src_x = CLAMP(vector.x + sample_x, 0, source->width - 1);
|
||||
+ for (int i = 0; i < 4; ++i)
|
||||
+ bgra[i] += src[src_x * 4 + i];
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ for (int i = 0; i < 4; ++i)
|
||||
+ dst_line[4 * x + i] = bgra[i] / sample_count;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/* this functions converts the glyph bitmap found in a FT_GlyphSlot
|
||||
* into a different format (see _compute_xrender_bitmap_size)
|
||||
*
|
||||
@@ -244,6 +360,11 @@ _fill_xrender_bitmap( FT_Bitmap* target,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case FT_PIXEL_MODE_BGRA: /* Preserve BGRA format */
|
||||
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
|
||||
+ memcpy( dstLine, srcLine, width * 4 );
|
||||
+ break;
|
||||
+
|
||||
case FT_PIXEL_MODE_LCD:
|
||||
if ( !bgr )
|
||||
{
|
||||
@@ -365,6 +486,8 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
FT_Vector vector;
|
||||
FT_Face face;
|
||||
FT_Render_Mode mode = FT_RENDER_MODE_MONO;
|
||||
+ FcBool transform;
|
||||
+ FcBool glyph_transform;
|
||||
|
||||
if (!info)
|
||||
return;
|
||||
@@ -374,6 +497,8 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
if (!face)
|
||||
return;
|
||||
|
||||
+ if (font->info.color)
|
||||
+ mode = FT_RENDER_MODE_NORMAL;
|
||||
if (font->info.antialias)
|
||||
{
|
||||
switch (font->info.rgba) {
|
||||
@@ -390,6 +515,8 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
}
|
||||
}
|
||||
|
||||
+ transform = font->info.transform && mode != FT_RENDER_MODE_MONO;
|
||||
+
|
||||
while (nglyph--)
|
||||
{
|
||||
glyphindex = *glyphs++;
|
||||
@@ -440,7 +567,7 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
/*
|
||||
* Compute glyph metrics from FreeType information
|
||||
*/
|
||||
- if(font->info.transform && glyphslot->format != FT_GLYPH_FORMAT_BITMAP)
|
||||
+ if (transform)
|
||||
{
|
||||
/*
|
||||
* calculate the true width by transforming all four corners.
|
||||
@@ -487,7 +614,7 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
* Clip charcell glyphs to the bounding box
|
||||
* XXX transformed?
|
||||
*/
|
||||
- if (font->info.spacing >= FC_CHARCELL && !font->info.transform)
|
||||
+ if (font->info.spacing >= FC_CHARCELL && !transform)
|
||||
{
|
||||
if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
|
||||
{
|
||||
@@ -519,18 +646,20 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
}
|
||||
}
|
||||
|
||||
+ glyph_transform = transform;
|
||||
if ( glyphslot->format != FT_GLYPH_FORMAT_BITMAP )
|
||||
{
|
||||
error = FT_Render_Glyph( face->glyph, mode );
|
||||
if (error)
|
||||
continue;
|
||||
+ glyph_transform = False;
|
||||
}
|
||||
|
||||
FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_NONE );
|
||||
|
||||
if (font->info.spacing >= FC_MONO)
|
||||
{
|
||||
- if (font->info.transform)
|
||||
+ if (transform)
|
||||
{
|
||||
if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
|
||||
{
|
||||
@@ -613,14 +742,27 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
}
|
||||
}
|
||||
|
||||
- size = _compute_xrender_bitmap_size( &local, glyphslot, mode );
|
||||
+ size = _compute_xrender_bitmap_size( &local, glyphslot, mode, glyph_transform ? &font->info.matrix : NULL );
|
||||
if ( size < 0 )
|
||||
continue;
|
||||
|
||||
xftg->metrics.width = local.width;
|
||||
xftg->metrics.height = local.rows;
|
||||
- xftg->metrics.x = - glyphslot->bitmap_left;
|
||||
- xftg->metrics.y = glyphslot->bitmap_top;
|
||||
+ if (transform)
|
||||
+ {
|
||||
+ vector.x = - glyphslot->bitmap_left;
|
||||
+ vector.y = glyphslot->bitmap_top;
|
||||
+
|
||||
+ FT_Vector_Transform(&vector, &font->info.matrix);
|
||||
+
|
||||
+ xftg->metrics.x = vector.x;
|
||||
+ xftg->metrics.y = vector.y;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ xftg->metrics.x = - glyphslot->bitmap_left;
|
||||
+ xftg->metrics.y = glyphslot->bitmap_top;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* If the glyph is relatively large (> 1% of server memory),
|
||||
@@ -645,9 +787,12 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
|
||||
local.buffer = bufBitmap;
|
||||
|
||||
- _fill_xrender_bitmap( &local, glyphslot, mode,
|
||||
- (font->info.rgba == FC_RGBA_BGR ||
|
||||
- font->info.rgba == FC_RGBA_VBGR ) );
|
||||
+ if (mode == FT_RENDER_MODE_NORMAL && glyph_transform)
|
||||
+ _scaled_fill_xrender_bitmap(&local, &glyphslot->bitmap, &font->info.matrix);
|
||||
+ else
|
||||
+ _fill_xrender_bitmap( &local, glyphslot, mode,
|
||||
+ (font->info.rgba == FC_RGBA_BGR ||
|
||||
+ font->info.rgba == FC_RGBA_VBGR ) );
|
||||
|
||||
/*
|
||||
* Copy or convert into local buffer.
|
||||
@@ -662,6 +807,7 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
*/
|
||||
glyph = (Glyph) glyphindex;
|
||||
|
||||
+ xftg->picture = 0;
|
||||
xftg->glyph_memory = size + sizeof (XftGlyph);
|
||||
if (font->format)
|
||||
{
|
||||
@@ -685,15 +831,35 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
}
|
||||
}
|
||||
}
|
||||
- else if ( mode != FT_RENDER_MODE_NORMAL )
|
||||
+ else if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA || mode != FT_RENDER_MODE_NORMAL)
|
||||
{
|
||||
/* invert ARGB <=> BGRA */
|
||||
if (ImageByteOrder (dpy) != XftNativeByteOrder ())
|
||||
XftSwapCARD32 ((CARD32 *) bufBitmap, size >> 2);
|
||||
}
|
||||
- XRenderAddGlyphs (dpy, font->glyphset, &glyph,
|
||||
- &xftg->metrics, 1,
|
||||
- (char *) bufBitmap, size);
|
||||
+
|
||||
+ if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA)
|
||||
+ {
|
||||
+ Pixmap pixmap = XCreatePixmap(dpy, DefaultRootWindow(dpy), local.width, local.rows, 32);
|
||||
+ GC gc = XCreateGC(dpy, pixmap, 0, NULL);
|
||||
+ XImage image = {
|
||||
+ local.width, local.rows, 0, ZPixmap, (char *)bufBitmap,
|
||||
+ dpy->byte_order, dpy->bitmap_unit, dpy->bitmap_bit_order, 32,
|
||||
+ 32, local.width * 4 - local.pitch, 32,
|
||||
+ 0, 0, 0
|
||||
+ };
|
||||
+
|
||||
+ XInitImage(&image);
|
||||
+ XPutImage(dpy, pixmap, gc, &image, 0, 0, 0, 0, local.width, local.rows);
|
||||
+ xftg->picture = XRenderCreatePicture(dpy, pixmap, font->format, 0, NULL);
|
||||
+
|
||||
+ XFreeGC(dpy, gc);
|
||||
+ XFreePixmap(dpy, pixmap);
|
||||
+ }
|
||||
+ else
|
||||
+ XRenderAddGlyphs (dpy, font->glyphset, &glyph,
|
||||
+ &xftg->metrics, 1,
|
||||
+ (char *) bufBitmap, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -744,7 +910,9 @@ XftFontUnloadGlyphs (Display *dpy,
|
||||
{
|
||||
if (font->format)
|
||||
{
|
||||
- if (font->glyphset)
|
||||
+ if (xftg->picture)
|
||||
+ XRenderFreePicture(dpy, xftg->picture);
|
||||
+ else if (font->glyphset)
|
||||
{
|
||||
glyphBuf[nused++] = (Glyph) glyphindex;
|
||||
if (nused == sizeof (glyphBuf) / sizeof (glyphBuf[0]))
|
||||
diff --git a/src/xftint.h b/src/xftint.h
|
||||
index c06ac3c..b263520 100644
|
||||
--- a/src/xftint.h
|
||||
+++ b/src/xftint.h
|
||||
@@ -85,6 +85,7 @@ typedef struct _XftGlyph {
|
||||
XGlyphInfo metrics;
|
||||
void *bitmap;
|
||||
unsigned long glyph_memory;
|
||||
+ Picture picture;
|
||||
} XftGlyph;
|
||||
|
||||
/*
|
||||
@@ -134,6 +135,7 @@ struct _XftFontInfo {
|
||||
FT_F26Dot6 xsize, ysize; /* pixel size */
|
||||
FcBool antialias; /* doing antialiasing */
|
||||
FcBool embolden; /* force emboldening */
|
||||
+ FcBool color; /* contains color glyphs */
|
||||
int rgba; /* subpixel order */
|
||||
int lcd_filter; /* lcd filter */
|
||||
FT_Matrix matrix; /* glyph transformation matrix */
|
||||
diff --git a/src/xftrender.c b/src/xftrender.c
|
||||
index b280c03..9a789cb 100644
|
||||
--- a/src/xftrender.c
|
||||
+++ b/src/xftrender.c
|
||||
@@ -25,6 +25,35 @@
|
||||
#define NUM_LOCAL 1024
|
||||
#define NUM_ELT_LOCAL 128
|
||||
|
||||
+/*
|
||||
+ * Dispatch glyph drawing to the correct XRenderCompositeString function
|
||||
+ */
|
||||
+static void
|
||||
+_XftCompositeString (Display *dpy, int op, Picture src, Picture dst, XRenderPictFormat* format, GlyphSet glyphset, int srcx, int srcy, int dstx, int dsty, int charwidth, unsigned int* chars, int nchars)
|
||||
+{
|
||||
+ if (nchars == 0)
|
||||
+ return;
|
||||
+
|
||||
+ switch (charwidth) {
|
||||
+ case 1:
|
||||
+ default:
|
||||
+ XRenderCompositeString8 (dpy, op,
|
||||
+ src, dst, format, glyphset,
|
||||
+ srcx, srcy, dstx, dsty, (char*)chars, nchars);
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ XRenderCompositeString16(dpy, op,
|
||||
+ src, dst, format, glyphset,
|
||||
+ srcx, srcy, dstx, dsty, (unsigned short*)chars, nchars);
|
||||
+ break;
|
||||
+ case 4:
|
||||
+ XRenderCompositeString32(dpy, op,
|
||||
+ src, dst, format, glyphset,
|
||||
+ srcx, srcy, dstx, dsty, (unsigned int*)chars, nchars);
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Use the Render extension to draw the glyphs
|
||||
*/
|
||||
@@ -43,12 +72,14 @@ XftGlyphRender (Display *dpy,
|
||||
int nglyphs)
|
||||
{
|
||||
XftFontInt *font = (XftFontInt *) pub;
|
||||
- int i;
|
||||
+ int i, j;
|
||||
FT_UInt missing[XFT_NMISSING];
|
||||
int nmissing;
|
||||
FT_UInt g, max;
|
||||
int size, width;
|
||||
+ int dstx, dsty;
|
||||
Glyph wire;
|
||||
+ XftGlyph* glyph;
|
||||
char *char8;
|
||||
unsigned short *char16;
|
||||
unsigned int *char32;
|
||||
@@ -100,43 +131,75 @@ XftGlyphRender (Display *dpy,
|
||||
if (!chars)
|
||||
goto bail1;
|
||||
}
|
||||
+ dstx = x;
|
||||
+ dsty = y;
|
||||
char8 = (char *) chars;
|
||||
char16 = (unsigned short *) chars;
|
||||
char32 = (unsigned int *) chars;
|
||||
- for (i = 0; i < nglyphs; i++)
|
||||
+ for (i = 0, j = 0; i < nglyphs; i++)
|
||||
{
|
||||
wire = (Glyph) glyphs[i];
|
||||
if (wire >= font->num_glyphs || !font->glyphs[wire])
|
||||
wire = 0;
|
||||
- switch (width) {
|
||||
- case 1: char8[i] = (char) wire; break;
|
||||
- case 2: char16[i] = (unsigned short) wire; break;
|
||||
- case 4: char32[i] = (unsigned long) wire; break;
|
||||
+ glyph = font->glyphs[wire];
|
||||
+ if (glyph->picture)
|
||||
+ {
|
||||
+ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset, srcx, srcy, x, y, width, chars, j);
|
||||
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None, dst, 0, 0, 0, 0, dstx, dsty - glyph->metrics.y, glyph->metrics.width, glyph->metrics.height);
|
||||
+ x = dstx = dstx + glyph->metrics.xOff;
|
||||
+ x = dsty = dsty + glyph->metrics.yOff;
|
||||
+ j = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ switch (width) {
|
||||
+ case 1: char8[j] = (char) wire; break;
|
||||
+ case 2: char16[j] = (unsigned short) wire; break;
|
||||
+ case 4: char32[j] = (unsigned long) wire; break;
|
||||
+ }
|
||||
+ dstx += glyph->metrics.xOff;
|
||||
+ dsty += glyph->metrics.yOff;
|
||||
+ ++j;
|
||||
}
|
||||
}
|
||||
- switch (width) {
|
||||
+ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset, srcx, srcy, x, y, width, chars, j);
|
||||
+ if (chars != char_local)
|
||||
+ free (chars);
|
||||
+bail1:
|
||||
+ if (glyphs_loaded)
|
||||
+ _XftFontManageMemory (dpy, pub);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Dispatch glyph drawing to the correct XRenderCompositeText function
|
||||
+ */
|
||||
+static void
|
||||
+_XftCompositeText (Display *dpy, int op, Picture src, Picture dst, XRenderPictFormat* format, int srcx, int srcy, int dstx, int dsty, int eltwidth, XGlyphElt8* elts, int nelt)
|
||||
+{
|
||||
+ if (nelt == 0)
|
||||
+ return;
|
||||
+
|
||||
+ switch (eltwidth) {
|
||||
case 1:
|
||||
default:
|
||||
- XRenderCompositeString8 (dpy, op,
|
||||
- src, dst, font->format, font->glyphset,
|
||||
- srcx, srcy, x, y, char8, nglyphs);
|
||||
+ XRenderCompositeText8 (dpy, op,
|
||||
+ src, dst, format,
|
||||
+ srcx, srcy, dstx, dsty,
|
||||
+ (XGlyphElt8*)elts, nelt);
|
||||
break;
|
||||
case 2:
|
||||
- XRenderCompositeString16(dpy, op,
|
||||
- src, dst, font->format, font->glyphset,
|
||||
- srcx, srcy, x, y, char16, nglyphs);
|
||||
+ XRenderCompositeText16(dpy, op,
|
||||
+ src, dst, format,
|
||||
+ srcx, srcy, dstx, dsty,
|
||||
+ (XGlyphElt16*)elts, nelt);
|
||||
break;
|
||||
case 4:
|
||||
- XRenderCompositeString32(dpy, op,
|
||||
- src, dst, font->format, font->glyphset,
|
||||
- srcx, srcy, x, y, char32, nglyphs);
|
||||
+ XRenderCompositeText32(dpy, op,
|
||||
+ src, dst, format,
|
||||
+ srcx, srcy, dstx, dsty,
|
||||
+ (XGlyphElt32*)elts, nelt);
|
||||
break;
|
||||
}
|
||||
- if (chars != char_local)
|
||||
- free (chars);
|
||||
-bail1:
|
||||
- if (glyphs_loaded)
|
||||
- _XftFontManageMemory (dpy, pub);
|
||||
}
|
||||
|
||||
_X_EXPORT void
|
||||
@@ -251,9 +314,10 @@ XftGlyphSpecRender (Display *dpy,
|
||||
g = 0;
|
||||
/*
|
||||
* check to see if the glyph is placed where it would
|
||||
- * fall using the normal spacing
|
||||
+ * fall using the normal spacing and if it would render
|
||||
+ * as a XRender glyph
|
||||
*/
|
||||
- if ((glyph = font->glyphs[g]))
|
||||
+ if ((glyph = font->glyphs[g]) && !glyph->picture)
|
||||
{
|
||||
if (x != glyphs[i].x || y != glyphs[i].y)
|
||||
{
|
||||
@@ -267,7 +331,7 @@ XftGlyphSpecRender (Display *dpy,
|
||||
}
|
||||
|
||||
elts = elts_local;
|
||||
- if (nelt > NUM_ELT_LOCAL)
|
||||
+ if (!font->info.color && nelt > NUM_ELT_LOCAL)
|
||||
{
|
||||
elts = malloc (nelt * sizeof (XGlyphElt8));
|
||||
if (!elts)
|
||||
@@ -275,7 +339,7 @@ XftGlyphSpecRender (Display *dpy,
|
||||
}
|
||||
|
||||
/*
|
||||
- * Generate the list of glyph elts
|
||||
+ * Generate the list of glyph elts or render color glyphs
|
||||
*/
|
||||
nelt = 0;
|
||||
x = y = 0;
|
||||
@@ -289,6 +353,11 @@ XftGlyphSpecRender (Display *dpy,
|
||||
g = 0;
|
||||
if ((glyph = font->glyphs[g]))
|
||||
{
|
||||
+ if (glyph->picture)
|
||||
+ {
|
||||
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None, dst, 0, 0, 0, 0, glyphs[i].x, glyphs[i].y - glyph->metrics.y, glyph->metrics.width, glyph->metrics.height);
|
||||
+ continue;
|
||||
+ }
|
||||
if (!i || x != glyphs[i].x || y != glyphs[i].y)
|
||||
{
|
||||
if (n)
|
||||
@@ -320,23 +389,9 @@ XftGlyphSpecRender (Display *dpy,
|
||||
elts[nelt].nchars = n;
|
||||
nelt++;
|
||||
}
|
||||
- switch (width) {
|
||||
- case 1:
|
||||
- XRenderCompositeText8 (dpy, op, src, dst, font->format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- elts, nelt);
|
||||
- break;
|
||||
- case 2:
|
||||
- XRenderCompositeText16 (dpy, op, src, dst, font->format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- (XGlyphElt16 *) elts, nelt);
|
||||
- break;
|
||||
- case 4:
|
||||
- XRenderCompositeText32 (dpy, op, src, dst, font->format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- (XGlyphElt32 *) elts, nelt);
|
||||
- break;
|
||||
- }
|
||||
+ _XftCompositeText(dpy, op, src, dst, font->format,
|
||||
+ srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
+ width, elts, nelt);
|
||||
|
||||
if (elts != elts_local)
|
||||
free (elts);
|
||||
@@ -535,7 +590,7 @@ XftGlyphFontSpecRender (Display *dpy,
|
||||
* check to see if the glyph is placed where it would
|
||||
* fall using the normal spacing
|
||||
*/
|
||||
- if ((glyph = font->glyphs[g]))
|
||||
+ if ((glyph = font->glyphs[g]) && !glyph->picture)
|
||||
{
|
||||
if (pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
|
||||
{
|
||||
@@ -560,7 +615,7 @@ XftGlyphFontSpecRender (Display *dpy,
|
||||
}
|
||||
|
||||
/*
|
||||
- * Generate the list of glyph elts
|
||||
+ * Generate the list of glyph elts and render color glyphs
|
||||
*/
|
||||
nelt = 0;
|
||||
x = y = 0;
|
||||
@@ -578,6 +633,11 @@ XftGlyphFontSpecRender (Display *dpy,
|
||||
g = 0;
|
||||
if ((glyph = font->glyphs[g]))
|
||||
{
|
||||
+ if (glyph->picture)
|
||||
+ {
|
||||
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None, dst, 0, 0, 0, 0, glyphs[i].x, glyphs[i].y - glyph->metrics.y, glyph->metrics.width, glyph->metrics.height);
|
||||
+ continue;
|
||||
+ }
|
||||
if (!i || pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
|
||||
{
|
||||
if (n)
|
||||
@@ -610,23 +670,9 @@ XftGlyphFontSpecRender (Display *dpy,
|
||||
elts[nelt].nchars = n;
|
||||
nelt++;
|
||||
}
|
||||
- switch (width) {
|
||||
- case 1:
|
||||
- XRenderCompositeText8 (dpy, op, src, dst, format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- elts, nelt);
|
||||
- break;
|
||||
- case 2:
|
||||
- XRenderCompositeText16 (dpy, op, src, dst, format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- (XGlyphElt16 *) elts, nelt);
|
||||
- break;
|
||||
- case 4:
|
||||
- XRenderCompositeText32 (dpy, op, src, dst, format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- (XGlyphElt32 *) elts, nelt);
|
||||
- break;
|
||||
- }
|
||||
+ _XftCompositeText(dpy, op, src, dst, format,
|
||||
+ srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
+ width, elts, nelt);
|
||||
|
||||
if (elts != elts_local)
|
||||
free (elts);
|
||||
--
|
||||
2.26.2
|
||||
|
861
patches/x11-libs/libXft-2.3.4/emojifont-2.3.4.patch
Normal file
861
patches/x11-libs/libXft-2.3.4/emojifont-2.3.4.patch
Normal file
@ -0,0 +1,861 @@
|
||||
From 723092ece088559f1af299236305911f4ee4d450 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Coste <mawww@kakoune.org>
|
||||
Date: Thu, 28 Jan 2021 19:59:10 +1100
|
||||
Subject: [PATCH 1/3] Introduce a _XftCompositeString helper function
|
||||
|
||||
Dispatch to XRenderCompositeString{8,16,32} based off the given width.
|
||||
|
||||
Signed-off-by: Maxime Coste <mawww@kakoune.org>
|
||||
---
|
||||
src/xftrender.c | 61 ++++++++++++++++++++++++++++++++++---------------
|
||||
1 file changed, 43 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/xftrender.c b/src/xftrender.c
|
||||
index a352737..181c27a 100644
|
||||
--- a/src/xftrender.c
|
||||
+++ b/src/xftrender.c
|
||||
@@ -25,6 +25,47 @@
|
||||
#define NUM_LOCAL 1024
|
||||
#define NUM_ELT_LOCAL 128
|
||||
|
||||
+/*
|
||||
+ * Dispatch glyph drawing to the correct XRenderCompositeString function
|
||||
+ */
|
||||
+static void
|
||||
+_XftCompositeString (Display *dpy,
|
||||
+ int op,
|
||||
+ Picture src,
|
||||
+ Picture dst,
|
||||
+ XRenderPictFormat *format,
|
||||
+ GlyphSet glyphset,
|
||||
+ int srcx,
|
||||
+ int srcy,
|
||||
+ int dstx,
|
||||
+ int dsty,
|
||||
+ int charwidth,
|
||||
+ unsigned int *chars,
|
||||
+ int nchars)
|
||||
+{
|
||||
+ if (nchars == 0)
|
||||
+ return;
|
||||
+
|
||||
+ switch (charwidth) {
|
||||
+ case 1:
|
||||
+ default:
|
||||
+ XRenderCompositeString8 (dpy, op,
|
||||
+ src, dst, format, glyphset,
|
||||
+ srcx, srcy, dstx, dsty, (char*)chars, nchars);
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ XRenderCompositeString16(dpy, op,
|
||||
+ src, dst, format, glyphset,
|
||||
+ srcx, srcy, dstx, dsty, (unsigned short*)chars, nchars);
|
||||
+ break;
|
||||
+ case 4:
|
||||
+ XRenderCompositeString32(dpy, op,
|
||||
+ src, dst, format, glyphset,
|
||||
+ srcx, srcy, dstx, dsty, (unsigned int*)chars, nchars);
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Use the Render extension to draw the glyphs
|
||||
*/
|
||||
@@ -114,24 +155,8 @@ XftGlyphRender (Display *dpy,
|
||||
case 4: char32[i] = (unsigned int) wire; break;
|
||||
}
|
||||
}
|
||||
- switch (width) {
|
||||
- case 1:
|
||||
- default:
|
||||
- XRenderCompositeString8 (dpy, op,
|
||||
- src, dst, font->format, font->glyphset,
|
||||
- srcx, srcy, x, y, char8, nglyphs);
|
||||
- break;
|
||||
- case 2:
|
||||
- XRenderCompositeString16(dpy, op,
|
||||
- src, dst, font->format, font->glyphset,
|
||||
- srcx, srcy, x, y, char16, nglyphs);
|
||||
- break;
|
||||
- case 4:
|
||||
- XRenderCompositeString32(dpy, op,
|
||||
- src, dst, font->format, font->glyphset,
|
||||
- srcx, srcy, x, y, char32, nglyphs);
|
||||
- break;
|
||||
- }
|
||||
+ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset,
|
||||
+ srcx, srcy, x, y, width, chars, nglyphs);
|
||||
if (chars != char_local)
|
||||
free (chars);
|
||||
bail1:
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From e0fc4ce7e87ab9c4b47e5c8e693f070dfd0d2f7b Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Coste <mawww@kakoune.org>
|
||||
Date: Thu, 28 Jan 2021 20:05:13 +1100
|
||||
Subject: [PATCH 2/3] Introduce a _XftCompositeText helper function
|
||||
|
||||
Dispatch to XRenderCompositeText{8,16,32} based off the given width.
|
||||
|
||||
Signed-off-by: Maxime Coste <mawww@kakoune.org>
|
||||
---
|
||||
src/xftrender.c | 83 +++++++++++++++++++++++++++++--------------------
|
||||
1 file changed, 49 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/src/xftrender.c b/src/xftrender.c
|
||||
index 181c27a..5852b2e 100644
|
||||
--- a/src/xftrender.c
|
||||
+++ b/src/xftrender.c
|
||||
@@ -164,6 +164,49 @@ bail1:
|
||||
_XftFontManageMemory (dpy, pub);
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Dispatch glyph drawing to the correct XRenderCompositeText function
|
||||
+ */
|
||||
+static void
|
||||
+_XftCompositeText (Display *dpy,
|
||||
+ int op,
|
||||
+ Picture src,
|
||||
+ Picture dst,
|
||||
+ XRenderPictFormat *format,
|
||||
+ int srcx,
|
||||
+ int srcy,
|
||||
+ int dstx,
|
||||
+ int dsty,
|
||||
+ int eltwidth,
|
||||
+ XGlyphElt8 *elts,
|
||||
+ int nelt)
|
||||
+{
|
||||
+ if (nelt == 0)
|
||||
+ return;
|
||||
+
|
||||
+ switch (eltwidth) {
|
||||
+ case 1:
|
||||
+ default:
|
||||
+ XRenderCompositeText8 (dpy, op,
|
||||
+ src, dst, format,
|
||||
+ srcx, srcy, dstx, dsty,
|
||||
+ (XGlyphElt8*)elts, nelt);
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ XRenderCompositeText16(dpy, op,
|
||||
+ src, dst, format,
|
||||
+ srcx, srcy, dstx, dsty,
|
||||
+ (XGlyphElt16*)elts, nelt);
|
||||
+ break;
|
||||
+ case 4:
|
||||
+ XRenderCompositeText32(dpy, op,
|
||||
+ src, dst, format,
|
||||
+ srcx, srcy, dstx, dsty,
|
||||
+ (XGlyphElt32*)elts, nelt);
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
_X_EXPORT void
|
||||
XftGlyphSpecRender (Display *dpy,
|
||||
int op,
|
||||
@@ -345,23 +388,9 @@ XftGlyphSpecRender (Display *dpy,
|
||||
elts[nelt].nchars = n;
|
||||
nelt++;
|
||||
}
|
||||
- switch (width) {
|
||||
- case 1:
|
||||
- XRenderCompositeText8 (dpy, op, src, dst, font->format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- elts, nelt);
|
||||
- break;
|
||||
- case 2:
|
||||
- XRenderCompositeText16 (dpy, op, src, dst, font->format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- (XGlyphElt16 *) elts, nelt);
|
||||
- break;
|
||||
- case 4:
|
||||
- XRenderCompositeText32 (dpy, op, src, dst, font->format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- (XGlyphElt32 *) elts, nelt);
|
||||
- break;
|
||||
- }
|
||||
+ _XftCompositeText(dpy, op, src, dst, font->format,
|
||||
+ srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
+ width, elts, nelt);
|
||||
|
||||
if (elts != elts_local)
|
||||
free (elts);
|
||||
@@ -635,23 +664,9 @@ XftGlyphFontSpecRender (Display *dpy,
|
||||
elts[nelt].nchars = n;
|
||||
nelt++;
|
||||
}
|
||||
- switch (width) {
|
||||
- case 1:
|
||||
- XRenderCompositeText8 (dpy, op, src, dst, format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- elts, nelt);
|
||||
- break;
|
||||
- case 2:
|
||||
- XRenderCompositeText16 (dpy, op, src, dst, format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- (XGlyphElt16 *) elts, nelt);
|
||||
- break;
|
||||
- case 4:
|
||||
- XRenderCompositeText32 (dpy, op, src, dst, format,
|
||||
- srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
- (XGlyphElt32 *) elts, nelt);
|
||||
- break;
|
||||
- }
|
||||
+ _XftCompositeText(dpy, op, src, dst, format,
|
||||
+ srcx, srcy, glyphs[0].x, glyphs[0].y,
|
||||
+ width, elts, nelt);
|
||||
|
||||
if (elts != elts_local)
|
||||
free (elts);
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From d385aa3e5320d18918413df0e8aef3a713a47e0b Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Coste <mawww@kakoune.org>
|
||||
Date: Tue, 22 Oct 2019 22:46:49 +1100
|
||||
Subject: [PATCH 3/3] Add support for BGRA glyphs display and scaling
|
||||
|
||||
Display is done using an XRender Picture, as XRender
|
||||
glyphs are incompatible with BGRA rendering due to
|
||||
their use of the glyph bitmap as a mask.
|
||||
|
||||
Scaling is done by averaging all relevant pixel, which gives
|
||||
much better result than nearest pixel sampling while staying
|
||||
simple enough and not too computationally expensive.
|
||||
|
||||
This enables color emoji rendering support.
|
||||
|
||||
Fixes: #6
|
||||
|
||||
Signed-off-by: Maxime Coste <mawww@kakoune.org>
|
||||
---
|
||||
src/xftfreetype.c | 18 +++-
|
||||
src/xftglyphs.c | 234 +++++++++++++++++++++++++++++++++++++++++++---
|
||||
src/xftint.h | 2 +
|
||||
src/xftrender.c | 69 +++++++++++---
|
||||
4 files changed, 293 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/src/xftfreetype.c b/src/xftfreetype.c
|
||||
index 1f79a81..4325d65 100644
|
||||
--- a/src/xftfreetype.c
|
||||
+++ b/src/xftfreetype.c
|
||||
@@ -523,7 +523,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi)
|
||||
/*
|
||||
* Compute glyph load flags
|
||||
*/
|
||||
- fi->load_flags = FT_LOAD_DEFAULT;
|
||||
+ fi->load_flags = FT_LOAD_DEFAULT | FT_LOAD_COLOR;
|
||||
|
||||
#ifndef XFT_EMBEDDED_BITMAP
|
||||
#define XFT_EMBEDDED_BITMAP "embeddedbitmap"
|
||||
@@ -775,6 +775,7 @@ XftFontOpenInfo (Display *dpy,
|
||||
FcChar32 hash_value;
|
||||
FcChar32 rehash_value;
|
||||
FcBool antialias;
|
||||
+ FcBool color;
|
||||
int max_glyph_memory;
|
||||
int alloc_size;
|
||||
int ascent, descent, height;
|
||||
@@ -831,12 +832,18 @@ XftFontOpenInfo (Display *dpy,
|
||||
if (!(face->face_flags & FT_FACE_FLAG_SCALABLE))
|
||||
antialias = FcFalse;
|
||||
|
||||
+ color = FT_HAS_COLOR(face) ? FcTrue : FcFalse;
|
||||
+
|
||||
/*
|
||||
* Find the appropriate picture format
|
||||
*/
|
||||
if (fi->render)
|
||||
{
|
||||
- if (antialias)
|
||||
+ if (color)
|
||||
+ {
|
||||
+ format = XRenderFindStandardFormat (dpy, PictStandardARGB32);
|
||||
+ }
|
||||
+ else if (antialias)
|
||||
{
|
||||
switch (fi->rgba) {
|
||||
case FC_RGBA_RGB:
|
||||
@@ -968,6 +975,13 @@ XftFontOpenInfo (Display *dpy,
|
||||
* which doesn't happen in XftFontInfoFill
|
||||
*/
|
||||
font->info.antialias = antialias;
|
||||
+
|
||||
+ /*
|
||||
+ * Set color value, which is only known once the
|
||||
+ * font was loaded
|
||||
+ */
|
||||
+ font->info.color = color;
|
||||
+
|
||||
/*
|
||||
* bump XftFile reference count
|
||||
*/
|
||||
diff --git a/src/xftglyphs.c b/src/xftglyphs.c
|
||||
index b536df4..e0bad10 100644
|
||||
--- a/src/xftglyphs.c
|
||||
+++ b/src/xftglyphs.c
|
||||
@@ -26,6 +26,8 @@
|
||||
|
||||
#include FT_SYNTHESIS_H
|
||||
|
||||
+#include FT_GLYPH_H
|
||||
+
|
||||
/*
|
||||
* Validate the memory info for a font
|
||||
*/
|
||||
@@ -78,9 +80,11 @@ _XftFontValidateMemory (Display *dpy, XftFont *public)
|
||||
static int
|
||||
_compute_xrender_bitmap_size( FT_Bitmap* target,
|
||||
FT_GlyphSlot slot,
|
||||
- FT_Render_Mode mode )
|
||||
+ FT_Render_Mode mode,
|
||||
+ FT_Matrix* matrix )
|
||||
{
|
||||
FT_Bitmap* ftbit;
|
||||
+ FT_Vector vector;
|
||||
int width, height, pitch;
|
||||
|
||||
if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
|
||||
@@ -91,6 +95,16 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
|
||||
|
||||
width = (int)ftbit->width;
|
||||
height = (int)ftbit->rows;
|
||||
+
|
||||
+ if ( matrix && mode == FT_RENDER_MODE_NORMAL )
|
||||
+ {
|
||||
+ vector.x = ftbit->width;
|
||||
+ vector.y = ftbit->rows;
|
||||
+ FT_Vector_Transform(&vector, matrix);
|
||||
+
|
||||
+ width = (int)vector.x;
|
||||
+ height = (int)vector.y;
|
||||
+ }
|
||||
pitch = (width+3) & ~3;
|
||||
|
||||
switch ( ftbit->pixel_mode )
|
||||
@@ -112,6 +126,10 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case FT_PIXEL_MODE_BGRA:
|
||||
+ pitch = width * 4;
|
||||
+ break;
|
||||
+
|
||||
case FT_PIXEL_MODE_LCD:
|
||||
if ( mode != FT_RENDER_MODE_LCD )
|
||||
return -1;
|
||||
@@ -142,6 +160,105 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
|
||||
return pitch * height;
|
||||
}
|
||||
|
||||
+/* this functions converts the glyph bitmap found in a FT_GlyphSlot
|
||||
+ * into a different format while scaling by applying the given matrix
|
||||
+ * (see _compute_xrender_bitmap_size)
|
||||
+ *
|
||||
+ * you should call this function after _compute_xrender_bitmap_size
|
||||
+ *
|
||||
+ * target :: target bitmap descriptor. Note that its 'buffer' pointer
|
||||
+ * must point to memory allocated by the caller
|
||||
+ *
|
||||
+ * source :: the source bitmap descriptor
|
||||
+ *
|
||||
+ * matrix :: the scaling matrix to apply
|
||||
+ */
|
||||
+static void
|
||||
+_scaled_fill_xrender_bitmap( FT_Bitmap* target,
|
||||
+ FT_Bitmap* source,
|
||||
+ const FT_Matrix* matrix )
|
||||
+{
|
||||
+ unsigned char* src_buf = source->buffer;
|
||||
+ unsigned char* dst_line = target->buffer;
|
||||
+ int src_pitch = source->pitch;
|
||||
+ int width = target->width;
|
||||
+ int height = target->rows;
|
||||
+ int pitch = target->pitch;
|
||||
+ int h;
|
||||
+ FT_Vector vector;
|
||||
+ FT_Matrix inverse = *matrix;
|
||||
+ int sampling_width;
|
||||
+ int sampling_height;
|
||||
+ int sample_count;
|
||||
+
|
||||
+ if ( src_pitch < 0 )
|
||||
+ src_buf -= src_pitch * (source->rows - 1);
|
||||
+
|
||||
+ FT_Matrix_Invert(&inverse);
|
||||
+
|
||||
+ /* compute how many source pixels a target pixel spans */
|
||||
+ vector.x = 1;
|
||||
+ vector.y = 1;
|
||||
+ FT_Vector_Transform(&vector, &inverse);
|
||||
+ sampling_width = vector.x / 2;
|
||||
+ sampling_height = vector.y / 2;
|
||||
+ sample_count = (2 * sampling_width + 1) * (2 * sampling_height + 1);
|
||||
+
|
||||
+ for ( h = height; h > 0; h--, dst_line += pitch )
|
||||
+ {
|
||||
+ int x;
|
||||
+
|
||||
+ for ( x = 0; x < width; x++ )
|
||||
+ {
|
||||
+ unsigned char* src;
|
||||
+
|
||||
+#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
|
||||
+
|
||||
+ /* compute target pixel location in source space */
|
||||
+ vector.x = (x * 0x10000) + 0x10000 / 2;
|
||||
+ vector.y = ((height - h) * 0x10000) + 0x10000 / 2;
|
||||
+ FT_Vector_Transform(&vector, &inverse);
|
||||
+ vector.x = CLAMP(FT_RoundFix(vector.x) / 0x10000, 0, source->width - 1);
|
||||
+ vector.y = CLAMP(FT_RoundFix(vector.y) / 0x10000, 0, source->rows - 1);
|
||||
+
|
||||
+ switch ( source->pixel_mode )
|
||||
+ {
|
||||
+ case FT_PIXEL_MODE_MONO: /* convert mono to 8-bit gray, scale using nearest pixel */
|
||||
+ src = src_buf + (vector.y * src_pitch);
|
||||
+ if ( src[(vector.x >> 3)] & (0x80 >> (vector.x & 7)) )
|
||||
+ dst_line[x] = 0xff;
|
||||
+ break;
|
||||
+
|
||||
+ case FT_PIXEL_MODE_GRAY: /* scale using nearest pixel */
|
||||
+ src = src_buf + (vector.y * src_pitch);
|
||||
+ dst_line[x] = src[vector.x];
|
||||
+ break;
|
||||
+
|
||||
+ case FT_PIXEL_MODE_BGRA: /* scale by averaging all relevant source pixels, keep BGRA format */
|
||||
+ {
|
||||
+ int sample_x, sample_y;
|
||||
+ int bgra[4] = {};
|
||||
+ for (sample_y = - sampling_height; sample_y < sampling_height + 1; ++sample_y)
|
||||
+ {
|
||||
+ int src_y = CLAMP(vector.y + sample_y, 0, source->rows - 1);
|
||||
+ src = src_buf + (src_y * src_pitch);
|
||||
+ for (sample_x = - sampling_width; sample_x < sampling_width + 1; ++sample_x)
|
||||
+ {
|
||||
+ int src_x = CLAMP(vector.x + sample_x, 0, source->width - 1);
|
||||
+ for (int i = 0; i < 4; ++i)
|
||||
+ bgra[i] += src[src_x * 4 + i];
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ for (int i = 0; i < 4; ++i)
|
||||
+ dst_line[4 * x + i] = bgra[i] / sample_count;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/* this functions converts the glyph bitmap found in a FT_GlyphSlot
|
||||
* into a different format (see _compute_xrender_bitmap_size)
|
||||
*
|
||||
@@ -244,6 +361,11 @@ _fill_xrender_bitmap( FT_Bitmap* target,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case FT_PIXEL_MODE_BGRA: /* Preserve BGRA format */
|
||||
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
|
||||
+ memcpy( dstLine, srcLine, width * 4 );
|
||||
+ break;
|
||||
+
|
||||
case FT_PIXEL_MODE_LCD:
|
||||
if ( !bgr )
|
||||
{
|
||||
@@ -339,6 +461,55 @@ _fill_xrender_bitmap( FT_Bitmap* target,
|
||||
}
|
||||
}
|
||||
|
||||
+/* This function creates a Picture for the given glyph on the default root window
|
||||
+ * It will only work in Xinerama mode
|
||||
+ *
|
||||
+ * dpy :: target display
|
||||
+ *
|
||||
+ * format :: target pixmap format
|
||||
+ *
|
||||
+ * width :: picture width
|
||||
+ *
|
||||
+ * width :: picture height
|
||||
+ *
|
||||
+ * data :: bitmap data
|
||||
+ *
|
||||
+ */
|
||||
+static Picture
|
||||
+_create_glyph_bgra_picture (Display *dpy,
|
||||
+ XRenderPictFormat *format,
|
||||
+ int width,
|
||||
+ int height,
|
||||
+ unsigned char *data)
|
||||
+{
|
||||
+ XImage image = {
|
||||
+ width, height, 0, ZPixmap, (char *)data,
|
||||
+ dpy->byte_order, dpy->bitmap_unit, dpy->bitmap_bit_order, 32,
|
||||
+ 32, 0, 32,
|
||||
+ 0, 0, 0
|
||||
+ };
|
||||
+ Picture picture;
|
||||
+ Pixmap pixmap;
|
||||
+ GC gc;
|
||||
+
|
||||
+ pixmap = XCreatePixmap(dpy, DefaultRootWindow(dpy), width, height, 32);
|
||||
+ if (!pixmap)
|
||||
+ return None;
|
||||
+
|
||||
+ gc = XCreateGC(dpy, pixmap, 0, NULL);
|
||||
+ if (!gc)
|
||||
+ return None;
|
||||
+
|
||||
+ XInitImage(&image);
|
||||
+ XPutImage(dpy, pixmap, gc, &image, 0, 0, 0, 0, width, height);
|
||||
+ picture = XRenderCreatePicture(dpy, pixmap, format, 0, NULL);
|
||||
+
|
||||
+ XFreeGC(dpy, gc);
|
||||
+ XFreePixmap(dpy, pixmap);
|
||||
+
|
||||
+ return picture;
|
||||
+}
|
||||
+
|
||||
_X_EXPORT void
|
||||
XftFontLoadGlyphs (Display *dpy,
|
||||
XftFont *pub,
|
||||
@@ -365,6 +536,8 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
FT_Vector vector;
|
||||
FT_Face face;
|
||||
FT_Render_Mode mode = FT_RENDER_MODE_MONO;
|
||||
+ FcBool transform;
|
||||
+ FcBool glyph_transform;
|
||||
|
||||
if (!info)
|
||||
return;
|
||||
@@ -374,6 +547,8 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
if (!face)
|
||||
return;
|
||||
|
||||
+ if (font->info.color)
|
||||
+ mode = FT_RENDER_MODE_NORMAL;
|
||||
if (font->info.antialias)
|
||||
{
|
||||
switch (font->info.rgba) {
|
||||
@@ -390,6 +565,8 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
}
|
||||
}
|
||||
|
||||
+ transform = font->info.transform && mode != FT_RENDER_MODE_MONO;
|
||||
+
|
||||
while (nglyph--)
|
||||
{
|
||||
glyphindex = *glyphs++;
|
||||
@@ -440,7 +617,7 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
/*
|
||||
* Compute glyph metrics from FreeType information
|
||||
*/
|
||||
- if(font->info.transform && glyphslot->format != FT_GLYPH_FORMAT_BITMAP)
|
||||
+ if (transform)
|
||||
{
|
||||
/*
|
||||
* calculate the true width by transforming all four corners.
|
||||
@@ -487,7 +664,7 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
* Clip charcell glyphs to the bounding box
|
||||
* XXX transformed?
|
||||
*/
|
||||
- if (font->info.spacing >= FC_CHARCELL && !font->info.transform)
|
||||
+ if (font->info.spacing >= FC_CHARCELL && !transform)
|
||||
{
|
||||
if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
|
||||
{
|
||||
@@ -519,18 +696,20 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
}
|
||||
}
|
||||
|
||||
+ glyph_transform = transform;
|
||||
if ( glyphslot->format != FT_GLYPH_FORMAT_BITMAP )
|
||||
{
|
||||
error = FT_Render_Glyph( face->glyph, mode );
|
||||
if (error)
|
||||
continue;
|
||||
+ glyph_transform = False;
|
||||
}
|
||||
|
||||
FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_NONE );
|
||||
|
||||
if (font->info.spacing >= FC_MONO)
|
||||
{
|
||||
- if (font->info.transform)
|
||||
+ if (transform)
|
||||
{
|
||||
if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
|
||||
{
|
||||
@@ -613,14 +792,27 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
}
|
||||
}
|
||||
|
||||
- size = _compute_xrender_bitmap_size( &local, glyphslot, mode );
|
||||
+ size = _compute_xrender_bitmap_size( &local, glyphslot, mode, glyph_transform ? &font->info.matrix : NULL );
|
||||
if ( size < 0 )
|
||||
continue;
|
||||
|
||||
xftg->metrics.width = (unsigned short)local.width;
|
||||
xftg->metrics.height = (unsigned short)local.rows;
|
||||
- xftg->metrics.x = (short)(- glyphslot->bitmap_left);
|
||||
- xftg->metrics.y = (short)( glyphslot->bitmap_top);
|
||||
+ if (transform)
|
||||
+ {
|
||||
+ vector.x = - glyphslot->bitmap_left;
|
||||
+ vector.y = glyphslot->bitmap_top;
|
||||
+
|
||||
+ FT_Vector_Transform(&vector, &font->info.matrix);
|
||||
+
|
||||
+ xftg->metrics.x = (short)vector.x;
|
||||
+ xftg->metrics.y = (short)vector.y;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ xftg->metrics.x = (short)(- glyphslot->bitmap_left);
|
||||
+ xftg->metrics.y = (short)( glyphslot->bitmap_top);
|
||||
+ }
|
||||
|
||||
/*
|
||||
* If the glyph is relatively large (> 1% of server memory),
|
||||
@@ -645,9 +837,12 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
|
||||
local.buffer = bufBitmap;
|
||||
|
||||
- _fill_xrender_bitmap( &local, glyphslot, mode,
|
||||
- (font->info.rgba == FC_RGBA_BGR ||
|
||||
- font->info.rgba == FC_RGBA_VBGR ) );
|
||||
+ if (mode == FT_RENDER_MODE_NORMAL && glyph_transform)
|
||||
+ _scaled_fill_xrender_bitmap(&local, &glyphslot->bitmap, &font->info.matrix);
|
||||
+ else
|
||||
+ _fill_xrender_bitmap( &local, glyphslot, mode,
|
||||
+ (font->info.rgba == FC_RGBA_BGR ||
|
||||
+ font->info.rgba == FC_RGBA_VBGR ) );
|
||||
|
||||
/*
|
||||
* Copy or convert into local buffer.
|
||||
@@ -662,6 +857,7 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
*/
|
||||
glyph = (Glyph) glyphindex;
|
||||
|
||||
+ xftg->picture = 0;
|
||||
xftg->glyph_memory = (size_t)size + sizeof (XftGlyph);
|
||||
if (font->format)
|
||||
{
|
||||
@@ -685,15 +881,21 @@ XftFontLoadGlyphs (Display *dpy,
|
||||
}
|
||||
}
|
||||
}
|
||||
- else if ( mode != FT_RENDER_MODE_NORMAL )
|
||||
+ else if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA || mode != FT_RENDER_MODE_NORMAL)
|
||||
{
|
||||
/* invert ARGB <=> BGRA */
|
||||
if (ImageByteOrder (dpy) != XftNativeByteOrder ())
|
||||
XftSwapCARD32 ((CARD32 *) bufBitmap, size >> 2);
|
||||
}
|
||||
- XRenderAddGlyphs (dpy, font->glyphset, &glyph,
|
||||
- &xftg->metrics, 1,
|
||||
- (char *) bufBitmap, size);
|
||||
+
|
||||
+ if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA)
|
||||
+ xftg->picture = _create_glyph_bgra_picture(dpy, font->format,
|
||||
+ local.width, local.rows,
|
||||
+ bufBitmap);
|
||||
+ else
|
||||
+ XRenderAddGlyphs (dpy, font->glyphset, &glyph,
|
||||
+ &xftg->metrics, 1,
|
||||
+ (char *) bufBitmap, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -744,7 +946,9 @@ XftFontUnloadGlyphs (Display *dpy,
|
||||
{
|
||||
if (font->format)
|
||||
{
|
||||
- if (font->glyphset)
|
||||
+ if (xftg->picture)
|
||||
+ XRenderFreePicture(dpy, xftg->picture);
|
||||
+ else if (font->glyphset)
|
||||
{
|
||||
glyphBuf[nused++] = (Glyph) glyphindex;
|
||||
if (nused == sizeof (glyphBuf) / sizeof (glyphBuf[0]))
|
||||
diff --git a/src/xftint.h b/src/xftint.h
|
||||
index ced9a02..1af40fe 100644
|
||||
--- a/src/xftint.h
|
||||
+++ b/src/xftint.h
|
||||
@@ -85,6 +85,7 @@ typedef struct _XftGlyph {
|
||||
XGlyphInfo metrics;
|
||||
void *bitmap;
|
||||
unsigned long glyph_memory;
|
||||
+ Picture picture;
|
||||
} XftGlyph;
|
||||
|
||||
/*
|
||||
@@ -134,6 +135,7 @@ struct _XftFontInfo {
|
||||
FT_F26Dot6 xsize, ysize; /* pixel size */
|
||||
FcBool antialias; /* doing antialiasing */
|
||||
FcBool embolden; /* force emboldening */
|
||||
+ FcBool color; /* contains color glyphs */
|
||||
int rgba; /* subpixel order */
|
||||
int lcd_filter; /* lcd filter */
|
||||
FT_Matrix matrix; /* glyph transformation matrix */
|
||||
diff --git a/src/xftrender.c b/src/xftrender.c
|
||||
index 5852b2e..bd001be 100644
|
||||
--- a/src/xftrender.c
|
||||
+++ b/src/xftrender.c
|
||||
@@ -84,12 +84,14 @@ XftGlyphRender (Display *dpy,
|
||||
int nglyphs)
|
||||
{
|
||||
XftFontInt *font = (XftFontInt *) pub;
|
||||
- int i;
|
||||
+ int i, j;
|
||||
FT_UInt missing[XFT_NMISSING];
|
||||
int nmissing;
|
||||
FT_UInt g, max;
|
||||
int size, width;
|
||||
+ int dstx, dsty;
|
||||
Glyph wire;
|
||||
+ XftGlyph* glyph;
|
||||
char *char8;
|
||||
unsigned short *char16;
|
||||
unsigned int *char32;
|
||||
@@ -141,22 +143,46 @@ XftGlyphRender (Display *dpy,
|
||||
if (!chars)
|
||||
goto bail1;
|
||||
}
|
||||
+ dstx = x;
|
||||
+ dsty = y;
|
||||
char8 = (char *) chars;
|
||||
char16 = (unsigned short *) chars;
|
||||
char32 = (unsigned int *) chars;
|
||||
- for (i = 0; i < nglyphs; i++)
|
||||
+ for (i = 0, j = 0; i < nglyphs; i++)
|
||||
{
|
||||
wire = (Glyph) glyphs[i];
|
||||
if (wire >= font->num_glyphs || !font->glyphs[wire])
|
||||
wire = 0;
|
||||
- switch (width) {
|
||||
- case 1: char8[i] = (char) wire; break;
|
||||
- case 2: char16[i] = (unsigned short) wire; break;
|
||||
- case 4: char32[i] = (unsigned int) wire; break;
|
||||
+ glyph = font->glyphs[wire];
|
||||
+ if (glyph->picture)
|
||||
+ {
|
||||
+ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset,
|
||||
+ srcx, srcy, x, y, width, chars, j);
|
||||
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None,
|
||||
+ dst, 0, 0, 0, 0, dstx, dsty - glyph->metrics.y,
|
||||
+ glyph->metrics.width, glyph->metrics.height);
|
||||
+
|
||||
+ dstx += glyph->metrics.xOff;
|
||||
+ dsty += glyph->metrics.yOff;
|
||||
+
|
||||
+ x = dstx;
|
||||
+ y = dsty;
|
||||
+ j = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ switch (width) {
|
||||
+ case 1: char8[j] = (char) wire; break;
|
||||
+ case 2: char16[j] = (unsigned short) wire; break;
|
||||
+ case 4: char32[j] = (unsigned int) wire; break;
|
||||
+ }
|
||||
+ dstx += glyph->metrics.xOff;
|
||||
+ dsty += glyph->metrics.yOff;
|
||||
+ ++j;
|
||||
}
|
||||
}
|
||||
_XftCompositeString(dpy, op, src, dst, font->format, font->glyphset,
|
||||
- srcx, srcy, x, y, width, chars, nglyphs);
|
||||
+ srcx, srcy, x, y, width, chars, j);
|
||||
if (chars != char_local)
|
||||
free (chars);
|
||||
bail1:
|
||||
@@ -319,9 +345,10 @@ XftGlyphSpecRender (Display *dpy,
|
||||
g = 0;
|
||||
/*
|
||||
* check to see if the glyph is placed where it would
|
||||
- * fall using the normal spacing
|
||||
+ * fall using the normal spacing and if it would render
|
||||
+ * as a XRender glyph
|
||||
*/
|
||||
- if ((glyph = font->glyphs[g]))
|
||||
+ if ((glyph = font->glyphs[g]) && !glyph->picture)
|
||||
{
|
||||
if (x != glyphs[i].x || y != glyphs[i].y)
|
||||
{
|
||||
@@ -335,7 +362,7 @@ XftGlyphSpecRender (Display *dpy,
|
||||
}
|
||||
|
||||
elts = elts_local;
|
||||
- if (nelt > NUM_ELT_LOCAL)
|
||||
+ if (!font->info.color && nelt > NUM_ELT_LOCAL)
|
||||
{
|
||||
elts = malloc ((size_t)nelt * sizeof (XGlyphElt8));
|
||||
if (!elts)
|
||||
@@ -343,7 +370,7 @@ XftGlyphSpecRender (Display *dpy,
|
||||
}
|
||||
|
||||
/*
|
||||
- * Generate the list of glyph elts
|
||||
+ * Generate the list of glyph elts or render color glyphs
|
||||
*/
|
||||
nelt = 0;
|
||||
x = y = 0;
|
||||
@@ -357,6 +384,14 @@ XftGlyphSpecRender (Display *dpy,
|
||||
g = 0;
|
||||
if ((glyph = font->glyphs[g]))
|
||||
{
|
||||
+ if (glyph->picture)
|
||||
+ {
|
||||
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None,
|
||||
+ dst, 0, 0, 0, 0,
|
||||
+ glyphs[i].x, glyphs[i].y - glyph->metrics.y,
|
||||
+ glyph->metrics.width, glyph->metrics.height);
|
||||
+ continue;
|
||||
+ }
|
||||
if (!i || x != glyphs[i].x || y != glyphs[i].y)
|
||||
{
|
||||
if (n)
|
||||
@@ -589,7 +624,7 @@ XftGlyphFontSpecRender (Display *dpy,
|
||||
* check to see if the glyph is placed where it would
|
||||
* fall using the normal spacing
|
||||
*/
|
||||
- if ((glyph = font->glyphs[g]))
|
||||
+ if ((glyph = font->glyphs[g]) && !glyph->picture)
|
||||
{
|
||||
if (pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
|
||||
{
|
||||
@@ -614,7 +649,7 @@ XftGlyphFontSpecRender (Display *dpy,
|
||||
}
|
||||
|
||||
/*
|
||||
- * Generate the list of glyph elts
|
||||
+ * Generate the list of glyph elts and render color glyphs
|
||||
*/
|
||||
nelt = 0;
|
||||
x = y = 0;
|
||||
@@ -632,6 +667,14 @@ XftGlyphFontSpecRender (Display *dpy,
|
||||
g = 0;
|
||||
if ((glyph = font->glyphs[g]))
|
||||
{
|
||||
+ if (glyph->picture)
|
||||
+ {
|
||||
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None,
|
||||
+ dst, 0, 0, 0, 0,
|
||||
+ glyphs[i].x, glyphs[i].y - glyph->metrics.y,
|
||||
+ glyph->metrics.width, glyph->metrics.height);
|
||||
+ continue;
|
||||
+ }
|
||||
if (!i || pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
|
||||
{
|
||||
if (n)
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,6 +1,6 @@
|
||||
[DEFAULT]
|
||||
main-repo = gentoo
|
||||
uync-user = yorune
|
||||
sync-user = yorune
|
||||
|
||||
[gentoo]
|
||||
location = /var/db/repos/gentoo
|
||||
@ -77,3 +77,10 @@ location = /var/db/repos/lto-overlay
|
||||
sync-type = git
|
||||
sync-uri = https://github.com/InBetweenNames/gentooLTO.git
|
||||
auto-sync = Yes
|
||||
|
||||
[pf4public]
|
||||
priority = 100
|
||||
location = /var/db/repos/pf4public
|
||||
sync-type = git
|
||||
sync-uri = https://github.com/PF4Public/gentoo-overlay.git
|
||||
auto-sync = Yes
|
||||
|
1200
savedconfig/sys-apps/busybox-1.33.1-r2
Normal file
1200
savedconfig/sys-apps/busybox-1.33.1-r2
Normal file
File diff suppressed because it is too large
Load Diff
2471
savedconfig/sys-kernel/linux-firmware-20210818
Normal file
2471
savedconfig/sys-kernel/linux-firmware-20210818
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user