Skip to main content

front end - Why do PopupMenus render inconsistently on Macs?


This has been bugging me for years but because it doesn't effect performance I've never got around to asking. The problem below occurs for me in V8, 9, 10 with OS X 10.8, 10.9 and 10.10. I've tested the same code on Windows over the years and never observed any problems.


Here is a typical example in which a popups display different rendering.


enter image description here


What you will notice is that the rendering of say the first column of popups is consistent with the OS 10.10 however across some of the rows you will notice that the rendering harks back to, from memory, OS 10.6 and below.


As I said above it does not effect performance but it seems like a bug of sorts. Can anyone else 1) reproduce it (by creating say a grid of popups); and 2) know what the cause is and therefore have a possible fix?


Edit


Rendering the code in the comment by @SquareOne with V10.0.2 gives a grid with all popups the same but unfortunately they all render in the old 10.6 format rather than the Yosemite format.


enter image description here



The same with V9 on Yosemite:


enter image description here


Note that in all cases above Mathematica is rendering differently to the defaults for this operating system, just as it did with Mavericks. Here is what the OS popups look like in Yosemite:


enter image description here


Whereas the rendering done by Mathematica harks back to OS X from many years ago.


Edit #2


I've traced this to my default stylesheet. Specifically to the PopupMenu style with an option for FontSize.


Cell[StyleData["PopupMenu"],
some options,
FontSize->11]


With this setting you get a mix of two different renderings (Yosemite and old OS X), and which popups are rendered differently is random.


enter image description here


Setting a font size for BaseStyle in the PopupMenuBox options at the cell level will switch off the problem.


Having said the above the inclusion of a font size in the PopupMenu style was an error because this was intended to control to menu font size and therefore should be in PopupMenuLabel style. Nevertheless the problem now seems to be that Mathematica has shown it is capable of rendering the correct Yosemite renderings (even if it is randomly under strange conditions) but by default is not doing that.


Edit 3


It seems no one here had any ideas about the origin of this problem so I am cross posting at Wolfram Community and hopefully someone from Wolfram will respond.




Comments

Popular posts from this blog

functions - Get leading series expansion term?

Given a function f[x] , I would like to have a function leadingSeries that returns just the leading term in the series around x=0 . For example: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x)] x and leadingSeries[(1/x + 2 + (1 - 1/x^3)/4)/(4 + x)] -(1/(16 x^3)) Is there such a function in Mathematica? Or maybe one can implement it efficiently? EDIT I finally went with the following implementation, based on Carl Woll 's answer: lds[ex_,x_]:=( (ex/.x->(x+O[x]^2))/.SeriesData[U_,Z_,L_List,Mi_,Ma_,De_]:>SeriesData[U,Z,{L[[1]]},Mi,Mi+1,De]//Quiet//Normal) The advantage is, that this one also properly works with functions whose leading term is a constant: lds[Exp[x],x] 1 Answer Update 1 Updated to eliminate SeriesData and to not return additional terms Perhaps you could use: leadingSeries[expr_, x_] := Normal[expr /. x->(x+O[x]^2) /. a_List :> Take[a, 1]] Then for your examples: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x), x] leadingSeries[Exp[x], x] leadingSeries[(1/x + 2 + (1 - 1/x...

mathematical optimization - Minimizing using indices, error: Part::pkspec1: The expression cannot be used as a part specification

I want to use Minimize where the variables to minimize are indices pointing into an array. Here a MWE that hopefully shows what my problem is. vars = u@# & /@ Range[3]; cons = Flatten@ { Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; Minimize[{Total@((vec1[[#]] - vec2[[u[#]]])^2 & /@ Range[1, 3]), cons}, vars, Integers] The error I get: Part::pkspec1: The expression u[1] cannot be used as a part specification. >> Answer Ok, it seems that one can get around Mathematica trying to evaluate vec2[[u[1]]] too early by using the function Indexed[vec2,u[1]] . The working MWE would then look like the following: vars = u@# & /@ Range[3]; cons = Flatten@{ Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; NMinimize[ {Total@((vec1[[#]] - Indexed[vec2, u[#]])^2 & /@ R...

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]