#14412 closed defect (fixed)

Label not wide enough

Reported by: pett Owned by: Tom Goddard
Priority: normal Milestone:
Component: Depiction Version:
Keywords: Cc:
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        macOS-13.3.1-arm64-arm-64bit
ChimeraX Version: 1.8.dev202401172022 (2024-01-17 20:22:24 UTC)
Description
labels in certain fonts aren't wide enough
open pubchem:94988
Actions->Label->Atoms->IDATM Type

then the (central) Npl labels are not wide enough in Times or Arial

Log:
Startup Messages  
---  
warning | Replacing fetcher for 'pdb_nmr' and format NMRSTAR from NMRSTAR
bundle with that from NMRSTAR bundle  
  
UCSF ChimeraX version: 1.8.dev202401172022 (2024-01-17)  
© 2016-2024 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> open pubchem:94988

Summary of feedback from opening 94988 fetched from pubchem  
---  
note | Fetching compressed PubChem 94988 from
https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/94988/SDF?record_type=3d  
  
PubChem entry 94988  
  

> label #1 atoms attribute idatm_type

> label font times

> label font helvetica

> label font arial

> label font copperplate




OpenGL version: 4.1 Metal - 83.1
OpenGL renderer: Apple M1 Max
OpenGL vendor: Apple

Python: 3.11.2
Locale: UTF-8
Qt version: PyQt6 6.6.1, Qt 6.6.1
Qt runtime version: 6.6.1
Qt platform: cocoa
Hardware:

    Hardware Overview:

      Model Name: Mac Studio
      Model Identifier: Mac13,1
      Model Number: Z14J0008FLL/A
      Chip: Apple M1 Max
      Total Number of Cores: 10 (8 performance and 2 efficiency)
      Memory: 32 GB
      System Firmware Version: 8422.100.650
      OS Loader Version: 8422.100.650

Software:

    System Software Overview:

      System Version: macOS 13.3.1 (a) (22E772610a)
      Kernel Version: Darwin 22.4.0
      Time since boot: 155 days, 20 hours, 26 minutes

Graphics/Displays:

    Apple M1 Max:

      Chipset Model: Apple M1 Max
      Type: GPU
      Bus: Built-In
      Total Number of Cores: 24
      Vendor: Apple (0x106b)
      Metal Support: Metal 3
      Displays:
        PHL 279P1:
          Resolution: 5120 x 2880 (5K/UHD+ - Ultra High Definition Plus)
          UI Looks like: 2560 x 1440 @ 60.00Hz
          Main Display: Yes
          Mirror: Off
          Online: Yes
          Rotation: Supported


Installed Packages:
    alabaster: 0.7.16
    appdirs: 1.4.4
    appnope: 0.1.3
    asttokens: 2.4.1
    Babel: 2.14.0
    backcall: 0.2.0
    beautifulsoup4: 4.11.2
    blockdiag: 3.0.0
    blosc2: 2.0.0
    build: 0.10.0
    certifi: 2022.12.7
    cftime: 1.6.3
    charset-normalizer: 3.3.2
    ChimeraX-AddCharge: 1.5.15
    ChimeraX-AddH: 2.2.5
    ChimeraX-AlignmentAlgorithms: 2.0.1
    ChimeraX-AlignmentHdrs: 3.4.3
    ChimeraX-AlignmentMatrices: 2.1
    ChimeraX-Alignments: 2.12.3
    ChimeraX-AlphaFold: 1.0
    ChimeraX-AltlocExplorer: 1.1.1
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Arrays: 1.1
    ChimeraX-Atomic: 1.52
    ChimeraX-AtomicLibrary: 12.1.4
    ChimeraX-AtomSearch: 2.0.1
    ChimeraX-AxesPlanes: 2.4
    ChimeraX-BasicActions: 1.1.2
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 2.1.2
    ChimeraX-BondRot: 2.0.4
    ChimeraX-BugReporter: 1.0.1
    ChimeraX-BuildStructure: 2.11
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.2.2
    ChimeraX-ButtonPanel: 1.0.1
    ChimeraX-CageBuilder: 1.0.1
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.4
    ChimeraX-ChangeChains: 1.1
    ChimeraX-CheckWaters: 1.3.2
    ChimeraX-ChemGroup: 2.0.1
    ChimeraX-Clashes: 2.2.4
    ChimeraX-ColorActions: 1.0.3
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.5
    ChimeraX-CommandLine: 1.2.5
    ChimeraX-ConnectStructure: 2.0.1
    ChimeraX-Contacts: 1.0.1
    ChimeraX-Core: 1.8.dev202401172022
    ChimeraX-CoreFormats: 1.2
    ChimeraX-coulombic: 1.4.3
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0.1
    ChimeraX-DataFormats: 1.2.3
    ChimeraX-Dicom: 1.2
    ChimeraX-DistMonitor: 1.4
    ChimeraX-DockPrep: 1.1.3
    ChimeraX-Dssp: 2.0
    ChimeraX-EMDB-SFF: 1.0
    ChimeraX-ESMFold: 1.0
    ChimeraX-FileHistory: 1.0.1
    ChimeraX-FunctionKey: 1.0.1
    ChimeraX-Geometry: 1.3
    ChimeraX-gltf: 1.0
    ChimeraX-Graphics: 1.1.1
    ChimeraX-Hbonds: 2.4
    ChimeraX-Help: 1.2.2
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.1
    ChimeraX-ImageFormats: 1.2
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0.1
    ChimeraX-ItemsInspection: 1.0.1
    ChimeraX-IUPAC: 1.0
    ChimeraX-Label: 1.1.9
    ChimeraX-ListInfo: 1.2.2
    ChimeraX-Log: 1.1.6
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Maestro: 1.9.1
    ChimeraX-Map: 1.1.4
    ChimeraX-MapData: 2.0
    ChimeraX-MapEraser: 1.0.1
    ChimeraX-MapFilter: 2.0.1
    ChimeraX-MapFit: 2.0
    ChimeraX-MapSeries: 2.1.1
    ChimeraX-Markers: 1.0.1
    ChimeraX-Mask: 1.0.2
    ChimeraX-MatchMaker: 2.1.2
    ChimeraX-MCopy: 1.0
    ChimeraX-MDcrds: 2.6.1
    ChimeraX-MedicalToolbar: 1.0.2
    ChimeraX-Meeting: 1.0.1
    ChimeraX-MLP: 1.1.1
    ChimeraX-mmCIF: 2.12.1
    ChimeraX-MMTF: 2.2
    ChimeraX-Modeller: 1.5.15
    ChimeraX-ModelPanel: 1.5
    ChimeraX-ModelSeries: 1.0.1
    ChimeraX-Mol2: 2.0.3
    ChimeraX-Mole: 1.0
    ChimeraX-Morph: 1.0.2
    ChimeraX-MouseModes: 1.2
    ChimeraX-Movie: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nifti: 1.1
    ChimeraX-NMRSTAR: 1.0.1
    ChimeraX-NRRD: 1.1
    ChimeraX-Nucleotides: 2.0.3
    ChimeraX-OpenCommand: 1.13.1
    ChimeraX-PDB: 2.7.3
    ChimeraX-PDBBio: 1.0.1
    ChimeraX-PDBLibrary: 1.0.4
    ChimeraX-PDBMatrices: 1.0
    ChimeraX-PickBlobs: 1.0.1
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.1
    ChimeraX-PubChem: 2.1
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1.2
    ChimeraX-RemoteControl: 1.0
    ChimeraX-RenderByAttr: 1.2.1
    ChimeraX-RenumberResidues: 1.1
    ChimeraX-ResidueFit: 1.0.1
    ChimeraX-RestServer: 1.2
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 4.0
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    ChimeraX-SaveCommand: 1.5.1
    ChimeraX-SchemeMgr: 1.0
    ChimeraX-SDF: 2.0.2
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0.1
    ChimeraX-SelInspector: 1.0
    ChimeraX-SeqView: 2.11.1
    ChimeraX-Shape: 1.0.1
    ChimeraX-Shell: 1.0.1
    ChimeraX-Shortcuts: 1.1.1
    ChimeraX-ShowSequences: 1.0.2
    ChimeraX-SideView: 1.0.1
    ChimeraX-Smiles: 2.1.2
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.15
    ChimeraX-STL: 1.0.1
    ChimeraX-Storm: 1.0
    ChimeraX-StructMeasure: 1.1.2
    ChimeraX-Struts: 1.0.1
    ChimeraX-Surface: 1.0.1
    ChimeraX-SwapAA: 2.0.1
    ChimeraX-SwapRes: 2.2.2
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-TaskManager: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.1.2
    ChimeraX-ToolshedUtils: 1.2.4
    ChimeraX-Topography: 1.0
    ChimeraX-ToQuest: 1.0
    ChimeraX-Tug: 1.0.1
    ChimeraX-UI: 1.33.5
    ChimeraX-uniprot: 2.3
    ChimeraX-UnitCell: 1.0.1
    ChimeraX-ViewDockX: 1.3.2
    ChimeraX-VIPERdb: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0.1
    ChimeraX-vrml: 1.0
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0.2
    ChimeraX-WebServices: 1.1.3
    ChimeraX-Zone: 1.0.1
    colorama: 0.4.6
    comm: 0.2.1
    contourpy: 1.2.0
    cxservices: 1.2.2
    cycler: 0.12.1
    Cython: 0.29.33
    debugpy: 1.8.0
    decorator: 5.1.1
    docutils: 0.19
    executing: 2.0.1
    filelock: 3.9.0
    fonttools: 4.47.2
    funcparserlib: 2.0.0a0
    glfw: 2.6.4
    grako: 3.16.5
    h5py: 3.10.0
    html2text: 2020.1.16
    idna: 3.6
    ihm: 0.43
    imagecodecs: 2024.1.1
    imagesize: 1.4.1
    ipykernel: 6.23.2
    ipython: 8.14.0
    ipython-genutils: 0.2.0
    ipywidgets: 8.1.1
    jedi: 0.18.2
    Jinja2: 3.1.2
    jupyter-client: 8.2.0
    jupyter-core: 5.7.1
    jupyterlab-widgets: 3.0.9
    kiwisolver: 1.4.5
    line-profiler: 4.0.2
    lxml: 4.9.2
    lz4: 4.3.3
    MarkupSafe: 2.1.3
    matplotlib: 3.8.2
    matplotlib-inline: 0.1.6
    msgpack: 1.0.7
    ndindex: 1.7
    nest-asyncio: 1.5.9
    netCDF4: 1.6.5
    networkx: 3.2.1
    nibabel: 5.0.1
    nptyping: 2.5.0
    numexpr: 2.8.8
    numpy: 1.26.3
    openvr: 1.26.701
    packaging: 21.3
    ParmEd: 3.4.3
    parso: 0.8.3
    pep517: 0.13.0
    pexpect: 4.9.0
    pickleshare: 0.7.5
    pillow: 10.2.0
    pip: 23.0
    pkginfo: 1.9.6
    platformdirs: 4.1.0
    prompt-toolkit: 3.0.43
    psutil: 5.9.7
    ptyprocess: 0.7.0
    pure-eval: 0.2.2
    py-cpuinfo: 9.0.0
    pycollada: 0.8
    pydicom: 2.3.0
    Pygments: 2.16.1
    pynmrstar: 3.3.2
    pynrrd: 1.0.0
    PyOpenGL: 3.1.7
    PyOpenGL-accelerate: 3.1.7
    pyopenxr: 1.0.3301
    pyparsing: 3.1.1
    pyproject-hooks: 1.0.0
    PyQt6-commercial: 6.6.1
    PyQt6-Qt6: 6.6.1
    PyQt6-sip: 13.6.0
    PyQt6-WebEngine-commercial: 6.6.0
    PyQt6-WebEngine-Qt6: 6.6.1
    python-dateutil: 2.8.2
    pytz: 2023.3.post1
    pyzmq: 25.1.2
    qtconsole: 5.4.3
    QtPy: 2.4.1
    RandomWords: 0.4.0
    requests: 2.31.0
    scipy: 1.11.4
    setuptools: 67.4.0
    setuptools-scm: 7.0.5
    sfftk-rw: 0.8.1
    six: 1.16.0
    snowballstemmer: 2.2.0
    sortedcontainers: 2.4.0
    soupsieve: 2.5
    sphinx: 6.1.3
    sphinx-autodoc-typehints: 1.22
    sphinxcontrib-applehelp: 1.0.8
    sphinxcontrib-blockdiag: 3.0.0
    sphinxcontrib-devhelp: 1.0.6
    sphinxcontrib-htmlhelp: 2.0.5
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 1.0.7
    sphinxcontrib-serializinghtml: 1.1.10
    stack-data: 0.6.3
    superqt: 0.5.0
    tables: 3.8.0
    tcia-utils: 1.5.1
    tifffile: 2023.12.9
    tinyarray: 1.2.4
    tomli: 2.0.1
    tornado: 6.4
    traitlets: 5.9.0
    typing-extensions: 4.9.0
    tzdata: 2023.4
    urllib3: 2.1.0
    wcwidth: 0.2.13
    webcolors: 1.12
    wheel: 0.38.4
    wheel-filename: 1.4.1
    widgetsnbextension: 4.0.9

Change History (4)

comment:1 by pett, 21 months ago

Component: UnassignedDepiction
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionLabel not wide enough

comment:2 by Tom Goddard, 21 months ago

The Npl and HC labels appear clipped on the right edge in the daily build Qt 6.6 but are not clipped in ChimeraX 1.7 with Qt 6.3.

Printing the size reported by QFontMetrics() for the text being used to set the label texture size gives 65 x 54 in Qt 6.6 and 69 x 54 in Qt 6.3 for Npl, and 64 x 54 in Qt 6.6 and 67 x 54 in Qt 6.3 for HC. They are requesting identical fonts, and look the same.

There are countless reports of QFontMetrics() giving the wrong size online.

This clipping was reported before in Linux for ChimeraX #9263 in Qt 6.4 and I modified the code to just add 4 pixels in width to what QFontMetrics reports on Linux. This seems like a bad fix since if I ask for label size 100 pt (default is 48) then the width discrepancy is 8 pixels between Qt 6.6 and Qt 6.3.

I see the some of the problem. The font metrics returns a rectangle, left, right, top, bottom are (4,68,-43,10) in Qt 6.6 for text drawn at origin 0,0. But I was using the rectangle width 65 (= 68-4+1) when really we need 69 pixels to cover the rectangle 0-68 since we draw at x = 0 (not at x=-4). Using right+1 as the width should be fine as long as the left is not negative. If the left is negative I would need to use a different origin for the text or it would probably be clipped on the left. I don't have any case of that to test, so I'm going to just go with texture width right+1 for now.

comment:3 by Tom Goddard, 21 months ago

Fixed.

QFontMetrics are tricky. My code was using the width of the rectangle returned, but the whole rectangle for text Npl was shifted right 4 pixels from the the drawing origin 0,0 so the code really needed to use rectangle.right() which is 4 pixels larger than width. I doubt I've solved all the cases. And I did not investigate why Qt 6.3 and 6.4 give different rectangles. There are a bunch of font metrics issues (e.g. right/left bearing, horizontal advance, ...) I don't understand. I'll improve the code when cases that fail arise.

comment:4 by Tom Goddard, 21 months ago

Resolution: fixed
Status: assignedclosed
Note: See TracTickets for help on using tickets.