@Override protected void loadSizes(boolean update) { bounds = new Rectangle(0, 0, 0, 0); min_size = new Dimension(); max_size = new Dimension(); margin = new LengthSet(); emargin = margin; padding = new LengthSet(); border = new LengthSet(); isempty = true; displayed = false; visible = false; coords = new LengthSet(); if (colwidth.equals("")) // no width set - try to get from style { int contw = cblock.getContentWidth(); CSSDecoder dec = new CSSDecoder(ctx); CSSProperty.Width wprop = style.getProperty("width"); if (wprop != null && wprop != CSSProperty.Width.AUTO) { TermLengthOrPercent width = getLengthValue("width"); abswidth = dec.getLength(width, false, 0, 0, contw); content.width = abswidth; wset = true; if (width.isPercentage()) { wrelative = true; percent = Math.round(width.getValue()); if (percent == 0) wrelative = false; // consider 0% as absolute 0 } } } bounds.width = content.width; }
/** * Converts a length from a CSS length or percentage to 'pt'. * * @param spec the CSS length specification * @param whole the value that corresponds to 100%. It is used only when spec is a percentage. * @return the length in 'pt' */ public double ptLength(TermLengthOrPercent spec, double whole) { float nval = spec.getValue(); if (spec.isPercentage()) return (whole * nval) / 100; else { TermLength.Unit unit = spec.getUnit(); double ret = 0; if (unit == TermLength.Unit.pt) { ret = nval; } else if (unit == TermLength.Unit.in) { ret = nval * 72; } else if (unit == TermLength.Unit.cm) { ret = (nval * 72) / 2.54; } else if (unit == TermLength.Unit.mm) { ret = (nval * 72) / 25.4; } else if (unit == TermLength.Unit.pc) { ret = nval * 12; } else if (unit == TermLength.Unit.px) { ret = (nval * 72) / dpi; } else if (unit == TermLength.Unit.em) { ret = (em * nval * 72) / dpi; // em is in pixels } else if (unit == TermLength.Unit.rem) { ret = (rem * nval * 72) / dpi; } else if (unit == TermLength.Unit.ex) { ret = (ex * nval * 72) / dpi; } else if (unit == TermLength.Unit.ch) { ret = (ch * nval * 72) / dpi; } else if (unit == TermLength.Unit.vw) { return (viewport.getVisibleRect().getWidth() * nval * 72) / (100.0 * dpi); } else if (unit == TermLength.Unit.vh) { return (viewport.getVisibleRect().getHeight() * nval * 72) / (100.0 * dpi); } else if (unit == TermLength.Unit.vmin) { return (Math.min( viewport.getVisibleRect().getWidth(), viewport.getVisibleRect().getHeight()) * nval * 72) / (100.0 * dpi); } else if (unit == TermLength.Unit.vmax) { return (Math.max( viewport.getVisibleRect().getWidth(), viewport.getVisibleRect().getHeight()) * nval * 72) / (100.0 * dpi); } return ret; } }