/*
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.swing.text.html;
import java.awt.*;
import java.text.BreakIterator;
import javax.swing.event.DocumentEvent;
import javax.swing.text.*;
Displays the inline element styles
based upon css attributes.
Author: Timothy Prinzing
/**
* Displays the <dfn>inline element</dfn> styles
* based upon css attributes.
*
* @author Timothy Prinzing
*/
public class InlineView extends LabelView {
Constructs a new view wrapped on an element.
Params: - elem – the element
/**
* Constructs a new view wrapped on an element.
*
* @param elem the element
*/
public InlineView(Element elem) {
super(elem);
StyleSheet sheet = getStyleSheet();
attr = sheet.getViewAttributes(this);
}
Gives notification that something was inserted into
the document in a location that this view is responsible for.
If either parameter is null
, behavior of this method is
implementation dependent.
Params: - e – the change information from the associated document
- a – the current allocation of the view
- f – the factory to use to rebuild if the view has children
See Also: Since: 1.5
/**
* Gives notification that something was inserted into
* the document in a location that this view is responsible for.
* If either parameter is <code>null</code>, behavior of this method is
* implementation dependent.
*
* @param e the change information from the associated document
* @param a the current allocation of the view
* @param f the factory to use to rebuild if the view has children
* @since 1.5
* @see View#insertUpdate
*/
public void insertUpdate(DocumentEvent e, Shape a, ViewFactory f) {
super.insertUpdate(e, a, f);
}
Gives notification that something was removed from the document
in a location that this view is responsible for.
If either parameter is null
, behavior of this method is
implementation dependent.
Params: - e – the change information from the associated document
- a – the current allocation of the view
- f – the factory to use to rebuild if the view has children
See Also: Since: 1.5
/**
* Gives notification that something was removed from the document
* in a location that this view is responsible for.
* If either parameter is <code>null</code>, behavior of this method is
* implementation dependent.
*
* @param e the change information from the associated document
* @param a the current allocation of the view
* @param f the factory to use to rebuild if the view has children
* @since 1.5
* @see View#removeUpdate
*/
public void removeUpdate(DocumentEvent e, Shape a, ViewFactory f) {
super.removeUpdate(e, a, f);
}
Gives notification from the document that attributes were changed
in a location that this view is responsible for.
Params: - e – the change information from the associated document
- a – the current allocation of the view
- f – the factory to use to rebuild if the view has children
See Also:
/**
* Gives notification from the document that attributes were changed
* in a location that this view is responsible for.
*
* @param e the change information from the associated document
* @param a the current allocation of the view
* @param f the factory to use to rebuild if the view has children
* @see View#changedUpdate
*/
public void changedUpdate(DocumentEvent e, Shape a, ViewFactory f) {
super.changedUpdate(e, a, f);
StyleSheet sheet = getStyleSheet();
attr = sheet.getViewAttributes(this);
preferenceChanged(null, true, true);
}
Fetches the attributes to use when rendering. This is
implemented to multiplex the attributes specified in the
model with a StyleSheet.
/**
* Fetches the attributes to use when rendering. This is
* implemented to multiplex the attributes specified in the
* model with a StyleSheet.
*/
public AttributeSet getAttributes() {
return attr;
}
Determines how attractive a break opportunity in
this view is. This can be used for determining which
view is the most attractive to call breakView
on in the process of formatting. A view that represents
text that has whitespace in it might be more attractive
than a view that has no whitespace, for example. The
higher the weight, the more attractive the break. A
value equal to or lower than BadBreakWeight
should not be considered for a break. A value greater
than or equal to ForcedBreakWeight
should
be broken.
This is implemented to provide the default behavior
of returning BadBreakWeight
unless the length
is greater than the length of the view in which case the
entire view represents the fragment. Unless a view has
been written to support breaking behavior, it is not
attractive to try and break the view. An example of
a view that does support breaking is LabelView
.
An example of a view that uses break weight is
ParagraphView
.
Params: - axis – may be either View.X_AXIS or View.Y_AXIS
- pos – the potential location of the start of the
broken view >= 0. This may be useful for calculating tab
positions.
- len – specifies the relative length from pos
where a potential break is desired >= 0.
See Also: Returns: the weight, which should be a value between
ForcedBreakWeight and BadBreakWeight.
/**
* Determines how attractive a break opportunity in
* this view is. This can be used for determining which
* view is the most attractive to call <code>breakView</code>
* on in the process of formatting. A view that represents
* text that has whitespace in it might be more attractive
* than a view that has no whitespace, for example. The
* higher the weight, the more attractive the break. A
* value equal to or lower than <code>BadBreakWeight</code>
* should not be considered for a break. A value greater
* than or equal to <code>ForcedBreakWeight</code> should
* be broken.
* <p>
* This is implemented to provide the default behavior
* of returning <code>BadBreakWeight</code> unless the length
* is greater than the length of the view in which case the
* entire view represents the fragment. Unless a view has
* been written to support breaking behavior, it is not
* attractive to try and break the view. An example of
* a view that does support breaking is <code>LabelView</code>.
* An example of a view that uses break weight is
* <code>ParagraphView</code>.
*
* @param axis may be either View.X_AXIS or View.Y_AXIS
* @param pos the potential location of the start of the
* broken view >= 0. This may be useful for calculating tab
* positions.
* @param len specifies the relative length from <em>pos</em>
* where a potential break is desired >= 0.
* @return the weight, which should be a value between
* ForcedBreakWeight and BadBreakWeight.
* @see LabelView
* @see ParagraphView
* @see javax.swing.text.View#BadBreakWeight
* @see javax.swing.text.View#GoodBreakWeight
* @see javax.swing.text.View#ExcellentBreakWeight
* @see javax.swing.text.View#ForcedBreakWeight
*/
public int getBreakWeight(int axis, float pos, float len) {
if (nowrap) {
return BadBreakWeight;
}
return super.getBreakWeight(axis, pos, len);
}
Tries to break this view on the given axis. Refer to View.breakView
for a complete description of this method. Behavior of this method is unspecified in case axis
is neither View.X_AXIS
nor View.Y_AXIS
, and
in case offset
, pos
, or len
is null.
Params: - axis – may be either
View.X_AXIS
or
View.Y_AXIS
- offset – the location in the document model
that a broken fragment would occupy >= 0. This
would be the starting offset of the fragment
returned
- pos – the position along the axis that the
broken view would occupy >= 0. This may be useful for
things like tab calculations
- len – specifies the distance along the axis
where a potential break is desired >= 0
See Also: Returns: the fragment of the view that represents the
given span. Since: 1.5
/**
* Tries to break this view on the given axis. Refer to
* {@link javax.swing.text.View#breakView} for a complete
* description of this method.
* <p>Behavior of this method is unspecified in case <code>axis</code>
* is neither <code>View.X_AXIS</code> nor <code>View.Y_AXIS</code>, and
* in case <code>offset</code>, <code>pos</code>, or <code>len</code>
* is null.
*
* @param axis may be either <code>View.X_AXIS</code> or
* <code>View.Y_AXIS</code>
* @param offset the location in the document model
* that a broken fragment would occupy >= 0. This
* would be the starting offset of the fragment
* returned
* @param pos the position along the axis that the
* broken view would occupy >= 0. This may be useful for
* things like tab calculations
* @param len specifies the distance along the axis
* where a potential break is desired >= 0
* @return the fragment of the view that represents the
* given span.
* @since 1.5
* @see javax.swing.text.View#breakView
*/
public View breakView(int axis, int offset, float pos, float len) {
return super.breakView(axis, offset, pos, len);
}
Set the cached properties from the attributes.
/**
* Set the cached properties from the attributes.
*/
protected void setPropertiesFromAttributes() {
super.setPropertiesFromAttributes();
AttributeSet a = getAttributes();
Object decor = a.getAttribute(CSS.Attribute.TEXT_DECORATION);
boolean u = (decor != null) ?
(decor.toString().indexOf("underline") >= 0) : false;
setUnderline(u);
boolean s = (decor != null) ?
(decor.toString().indexOf("line-through") >= 0) : false;
setStrikeThrough(s);
Object vAlign = a.getAttribute(CSS.Attribute.VERTICAL_ALIGN);
s = (vAlign != null) ? (vAlign.toString().indexOf("sup") >= 0) : false;
setSuperscript(s);
s = (vAlign != null) ? (vAlign.toString().indexOf("sub") >= 0) : false;
setSubscript(s);
Object whitespace = a.getAttribute(CSS.Attribute.WHITE_SPACE);
if ((whitespace != null) && whitespace.equals("nowrap")) {
nowrap = true;
} else {
nowrap = false;
}
HTMLDocument doc = (HTMLDocument)getDocument();
// fetches background color from stylesheet if specified
Color bg = doc.getBackground(a);
if (bg != null) {
setBackground(bg);
}
}
Convenient method to get the StyleSheet.
Returns: the StyleSheet
/**
* Convenient method to get the StyleSheet.
*
* @return the StyleSheet
*/
protected StyleSheet getStyleSheet() {
HTMLDocument doc = (HTMLDocument) getDocument();
return doc.getStyleSheet();
}
private boolean nowrap;
private AttributeSet attr;
}