public static float GetActualBorderWidth(CssLength borderValue, IHasEmHeight b) { //------------------------------ //plan: use extended cssunit //------------------------------ switch (borderValue.UnitOrNames) { case CssUnitOrNames.EmptyValue: //as medium case CssUnitOrNames.BorderMedium: return(2f); case CssUnitOrNames.BorderThin: return(1f); case CssUnitOrNames.BorderThick: return(4f); default: return(Math.Abs(ConvertToPx(borderValue, 1, b))); } }
/// <summary> /// get length in pixel /// </summary> /// <param name="length"></param> /// <param name="hundredPercent"></param> /// <param name="box"></param> /// <returns></returns> public static float ConvertToPx(CssLength length, float hundredPercent, IHasEmHeight box) { //Return zero if no length specified, zero specified switch (length.UnitOrNames) { case CssUnitOrNames.EmptyValue: return(0); case CssUnitOrNames.Percent: return((length.Number / 100f) * hundredPercent); case CssUnitOrNames.Ems: return(length.Number * box.GetEmHeight()); case CssUnitOrNames.Ex: return(length.Number * (box.GetEmHeight() / 2)); case CssUnitOrNames.Pixels: //atodo: check support for hi dpi return(length.Number); case CssUnitOrNames.Milimeters: return(length.Number * 3.779527559f); //3 pixels per millimeter case CssUnitOrNames.Centimeters: return(length.Number * 37.795275591f); //37 pixels per centimeter case CssUnitOrNames.Inches: return(length.Number * 96f); //96 pixels per inch case CssUnitOrNames.Points: return(length.Number * (96f / 72f)); // 1 point = 1/72 of inch case CssUnitOrNames.Picas: return(length.Number * 16f); // 1 pica = 12 points default: return(0); } }