Subject: bug#56708: closed (Re: bug#56708: 29.0.50; [PATCH] Limit extreme shadow thickness on Lucid)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 23 Jul 2022 01:17:02 +0000

Your bug report

#56708: 29.0.50; [PATCH] Limit extreme shadow thickness on Lucid

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
56708: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=56708
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#56708: 29.0.50; [PATCH] Limit extreme shadow thickness on Lucid
From: Po Lu <[email-masked]>
To: Manuel Giraud <[email-masked]>
Cc: [email-masked]
Date: Sat, 23 Jul 2022 09:16:08 +0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Manuel Giraud <[email-masked]> writes:

> Hi,
>
> Here is a patch for the Lucid backend.  Its goal is to limit the
> thickness of shadows on arrows, toggle buttons and radio buttons.
> Otherwise with a rather large value of the shadowThickness resource
> those three widgets are incorrectly displayed.

I would rather leave it up to the user to set Emacs.*.shadowThickness
correctly.  This "DWIM" behavior leads to very confusing behavior for
someone trying to set the resource, which is also why most other X
programs don't have any resources that behave this way.

Thanks, but I don't think this is right for Emacs.  Closing.

Subject: 29.0.50; [PATCH] Limit extreme shadow thickness on Lucid
From: Manuel Giraud <[email-masked]>
To: [email-masked]
Date: Fri, 22 Jul 2022 19:30:12 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

Here is a patch for the Lucid backend.  Its goal is to limit the
thickness of shadows on arrows, toggle buttons and radio buttons.
Otherwise with a rather large value of the shadowThickness resource
those three widgets are incorrectly displayed.

>From 50c6267a3ba3b05b64ac40686723199e679e5ffc Mon Sep 17 00:00:00 2001
From: Manuel Giraud <[email-masked]>
Date: Fri, 22 Jul 2022 19:23:04 +0200
Subject: [PATCH] Limit extreme shadow thickness on Lucid backend

* lwlib/xlwmenu.c (tame_thickness): New function to limit shadow
thickness on arrows and buttons in the Lucid backend.
(draw_arrow, draw_shadow_rectangle, draw_shadow_rhombus): Use it.
---
 lwlib/xlwmenu.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c
index deea50c810..ce48fea078 100644
--- a/lwlib/xlwmenu.c
+++ b/lwlib/xlwmenu.c
@@ -561,6 +561,13 @@ size_menu (XlwMenuWidget mw, int level)
     }
 }
 
+/* Used to limit shadows thickness on arrows, toggle buttons and radio
+   buttons.  */
+static int
+tame_thickness(int width, int thickness)
+{
+  return ((width < (3 * thickness)) ? (width / 3) : thickness);
+}
 
 /* Display code */
 
@@ -575,7 +582,7 @@ draw_arrow (XlwMenuWidget mw,
 {
   Display *dpy = XtDisplay (mw);
   GC top_gc, bottom_gc;
-  int thickness = mw->menu.shadow_thickness;
+  int thickness = tame_thickness(width, mw->menu.shadow_thickness);
   int height = width;
   XPoint pt[10];
   /* alpha = atan (0.5)
@@ -655,6 +662,7 @@ draw_shadow_rectangle (XlwMenuWidget mw, Window window, int x, int y,
 	bottom_gc = mw->menu.shadow_bottom_gc;
     }
 
+  /* Toggle button case */
   if (!erase_p && width == height && width == toggle_button_width (mw))
     {
       points [0].x = x;
@@ -668,6 +676,8 @@ draw_shadow_rectangle (XlwMenuWidget mw, Window window, int x, int y,
       XFillPolygon (dpy, window,
                     down_p ? mw->menu.button_gc : mw->menu.inactive_button_gc,
                     points, 4, Convex, CoordModeOrigin);
+
+      thickness = tame_thickness(width, mw->menu.shadow_thickness);
     }
 
   if (!erase_p && down_p)
@@ -724,7 +734,7 @@ draw_shadow_rhombus (XlwMenuWidget mw, Window window, int x, int y,
 		     GC top_gc, GC bottom_gc)
 {
   Display *dpy = XtDisplay (mw);
-  int thickness = mw->menu.shadow_thickness;
+  int thickness = tame_thickness(width, mw->menu.shadow_thickness);
   XPoint points [4];
 
   /* Choose correct GC with a standard default if NULL */
-- 
2.37.0

In GNU Emacs 29.0.50 (build 1, x86_64-unknown-openbsd7.1, X toolkit, cairo version 1.17.6, Xaw scroll bars)
 of 2022-07-22 built on elite.giraud
Repository revision: 1767f796b0e0649219e37b6b205f4d414a4364c6
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101003
System Description: OpenBSD elite.giraud 7.1 GENERIC.MP#620 amd64

Configured using:
 'configure --prefix=/home/manuel/emacs --bindir=/home/manuel/bin
 --with-x-toolkit=athena --without-sound --without-compress-install
 CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib'

Configured features:
CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
LCMS2 LIBOTF LIBXML2 MODULES NOTIFY KQUEUE PDUMPER PNG RSVG SQLITE3
THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM LUCID
ZLIB

Important settings:
  value of $LC_ALL: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: C/*lh

Minor modes in effect:
  bug-reference-prog-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  auto-revert-mode: t
  icomplete-mode: t
  display-time-mode: t
  display-battery-mode: t
  shell-dirtrack-mode: t
  global-so-long-mode: t
  repeat-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  abbrev-mode: t

Load-path shadows:
/home/manuel/.emacs.d/elpa/transient-20220717.1713/transient hides /home/manuel/emacs/share/emacs/29.0.50/lisp/transient

Features:
(shadow sort mail-extr emacsbug gnus-topic mm-archive url-http url-gw
url-cache url-auth qp utf-7 nndoc nndraft nnmh network-stream nsm
nnfolder nnml gnus-agent gnus-srvr gnus-score score-mode nnvirtual nntp
gnus-cache nnrss w3m w3m-hist w3m-fb bookmark-w3m w3m-ems w3m-favicon
w3m-image tab-line w3m-proc w3m-util whitespace gnus-dired magit-patch
executable vc-svn bug-reference magit-extras cus-start pulse face-remap
magit-bookmark magit-submodule magit-obsolete magit-blame magit-stash
magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone
magit-remote magit-commit magit-sequence magit-notes magit-worktree
magit-tag magit-merge magit-branch magit-reset magit-files magit-refs
magit-status magit magit-repos magit-apply magit-wip magit-log
magit-diff smerge-mode diff git-commit log-edit pcvs-util add-log
magit-core magit-autorevert autorevert magit-margin magit-transient
magit-process with-editor magit-mode transient magit-git magit-base
which-func vc-git diff-mode vc-dir ewoc vc vc-dispatcher magit-section
benchmark dash compat-27 compat-26 compat compat-macs paredit edmacro
icomplete time battery exwm-randr xcb-randr exwm-config exwm exwm-input
xcb-keysyms exwm-manage exwm-floating xcb-cursor xcb-render exwm-layout
exwm-workspace exwm-core xcb-ewmh xcb-icccm xcb xcb-xkb xcb-xproto
xcb-types xcb-debug kmacro server stimmung-themes modus-operandi-theme
modus-themes osm bookmark mingus libmpdee reporter edebug debug
backtrace transmission diary-lib diary-loaddefs color calc-bin calc-ext
calc calc-loaddefs rect calc-macs w3m-load mu4e mu4e-org mu4e-main
mu4e-view mu4e-view-gnus mu4e-view-common mu4e-headers mu4e-compose
mu4e-context mu4e-draft mu4e-actions ido rfc2368 smtpmail mu4e-mark
mu4e-proc mu4e-utils doc-view filenotify jka-compr image-mode exif
mu4e-lists mu4e-message flow-fill mule-util hl-line mu4e-vars mu4e-meta
supercite regi ebdb-message ebdb-gnus gnus-msg nnselect gnus-art mm-uu
mml2015 ebdb-mua ebdb-com crm ebdb-format ebdb eieio-opt eieio-base
timezone org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro
org-footnote org-src ob-comint org-pcomplete org-list org-faces
org-entities org-version ob-emacs-lisp ob-core ob-eval org-table
oc-basic bibtex ol org-keys oc org-compat org-macs org-loaddefs
find-func cal-menu calendar cal-loaddefs gnus-sum shr pixel-fill kinsoku
url-file url-dired svg dom gnus-group mm-url gnus-undo gnus-start
gnus-dbus gnus-cloud nnimap nnmail mail-source imap rfc2104 utf7 netrc
nnoo gnus-spec gnus-int gnus-range gnus-win gnus message yank-media
rfc822 mml mailabbrev sendmail gmm-utils mailheader nnheader mail-utils
range visual-basic-mode cl web-mode disp-table erlang-start
smart-tabs-mode skeleton cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-langs cc-vars cc-defs cc-bytecomp
slime-asdf grep slime-tramp tramp tramp-loaddefs trampver
tramp-integration cus-edit cus-load wid-edit tramp-compat shell
pcomplete parse-time iso8601 ls-lisp format-spec slime-fancy
slime-indentation slime-cl-indent cl-indent slime-trace-dialog
slime-fontifying-fu slime-package-fu slime-references
slime-compiler-notes-tree slime-scratch slime-presentations bridge
slime-macrostep macrostep slime-mdot-fu slime-enclosing-context
slime-fuzzy slime-fancy-trace slime-fancy-inspector slime-c-p-c
slime-editing-commands slime-autodoc slime-repl elp slime-parse slime
lisp-mnt gud apropos etags fileloop generator xref project arc-mode
archive-mode noutline outline pp hyperspec thingatpt slime-autoloads
dired-aux dired-x dired desktop frameset dired-loaddefs so-long advice
notifications dbus xml repeat tex-site hyperbole-autoloads
magit-autoloads git-commit-autoloads magit-section-autoloads
dash-autoloads paredit-autoloads rust-mode-autoloads
stimmung-themes-autoloads transient-autoloads with-editor-autoloads info
speedbar imenu ezimage dframe compat-autoloads package let-alist
browse-url url url-proxy url-privacy url-expand url-methods url-history
url-cookie generate-lisp-file url-domsuf url-util mm-view mml-smime
mml-sec epa gnus-util time-date smime gnutls puny dig mailcap
url-handlers mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
rfc2045 mm-util ietf-drums mail-prsvr url-parse auth-source eieio
eieio-core password-cache json map byte-opt bytecomp byte-compile
compile rx text-property-search comint files-x ansi-color ring cconv
url-vars epg cl-extra help-mode derived cl-seq rfc6068 epg-config subr-x
easy-mmode cl-macs inline cl-loaddefs cl-lib gv pcase rmc iso-transl
tooltip eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
simple cl-generic indonesian philippine cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite emoji-zwj charscript charprop case-table
epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
loaddefs faces cus-face macroexp files window text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind kqueue lcms2
dynamic-setting system-font-setting font-render-setting cairo x-toolkit
xinput2 x multi-tty make-network-process emacs)

Memory information:
((conses 16 2582707 223778)
 (symbols 48 91240 13)
 (strings 32 248509 22276)
 (string-bytes 1 8706255)
 (vectors 16 41986)
 (vector-slots 8 2001870 210320)
 (floats 8 724 448)
 (intervals 56 12484 547)
 (buffers 992 21))

-- 
Manuel Giraud