private static void triggerAnimation(JComponent c, Part part, State newState) {
   if (c instanceof javax.swing.JTabbedPane || part == Part.TP_BUTTON) {
     // idk: we can not handle tabs animation because
     // the same (component,part) is used to handle all the tabs
     // and we can not track the states
     // Vista theme might have transition duration for toolbar buttons
     // but native application does not seem to animate them
     return;
   }
   AnimationController controller = AnimationController.getAnimationController();
   State oldState = controller.getState(c, part);
   if (oldState != newState) {
     controller.putState(c, part, newState);
     if (newState == State.DEFAULTED) {
       // it seems for DEFAULTED button state Vista does animation from
       // HOT
       oldState = State.HOT;
     }
     if (oldState != null) {
       long duration;
       if (newState == State.DEFAULTED) {
         // Only button might have DEFAULTED state
         // idk: do not know how to get the value from Vista
         // one second seems plausible value
         duration = 1000;
       } else {
         XPStyle xp = XPStyle.getXP();
         duration =
             (xp != null)
                 ? xp.getThemeTransitionDuration(
                     c,
                     part,
                     normalizeState(oldState),
                     normalizeState(newState),
                     Prop.TRANSITIONDURATIONS)
                 : 1000;
       }
       controller.startAnimation(c, part, oldState, newState, duration);
     }
   }
 }