When I tried using the methods described here based on the Appearance
option for Button
it seems that only bitmaps were valid, i.e. primitives didn't seem to be valid ...unless I have not coded correctly.
I normally prefer not to use bitmap images in interfaces because the aesthetics breaks down when the magnification changes -- you can always lock that down but not ideal for your users. Appearance differs across platforms as well. So in an ideal world buttons and controls based on primitives are better.
By redefining @b3m2a1 function this can be achieved:
makeDisk2[gradSpec_, n_] :=
Module[{img, disk, edge},
img = RadialGradientImage[gradSpec, n];
Graphics[{
Inset[img, Center, Center, Scaled[1]],
White, Annulus[{0, 0}, {1, 2}], GrayLevel[.8], EdgeForm[Gray],
Annulus[{0, 0}, {1, 1.1}]},
Background -> None,
PlotRange -> {{-1.2, 1.2}, {-1.2, 1.2}},
ImageSize -> n]];
With[{n = 30},
imOut1 =
makeDisk2[{{.8*n, 5}, {n, n}} -> {Hue[.6, .6, 1], Hue[.6, 1, 1],
Hue[.6, .3, 1]}, n];
imHov1 =
makeDisk2[{{.8*n, 5}, {n, n}} -> {Hue[.6, .4, 1], Hue[.6, .8, 1],
Hue[.6, .3, 1]}, n];
imIn1 = makeDisk2[{{.3*n, .6*n}, {n, 5}} ->
Reverse@{Hue[.6, .6, 1], Hue[.6, 1, 1], Hue[.6, 1, 1]}, n];
{imOut1, imHov1, imIn1}
]
Button[Dynamic@Overlay[{
Which[
CurrentValue["MouseOver"] == True&&CurrentValue["MouseButtons"] == {1}, button = imIn1,
CurrentValue["MouseOver"] == True, button = imHov1,
True, button = imOut1],
Style["?", White, 18, Bold]
},
Alignment -> Center],
Appearance -> None]
here is a pick of primitive (top) and raster buttons (bottom) at 100%

and again at 200%

Style["?", Black, Bold]
? $\endgroup$