diff options
author | Mark Wielaard <mark@klomp.org> | 2006-12-08 11:19:22 +0000 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2006-12-08 11:19:22 +0000 |
commit | b77f88df258fa3ee1833555426a75a612b4fa9b4 (patch) | |
tree | bfe98f4fa2f33220577b9c4201629869c84a7398 /javax/swing/text/html/ImageView.java | |
parent | 9ebb135b531c52db2ef1c254372a506b12e22a04 (diff) | |
download | classpath-b77f88df258fa3ee1833555426a75a612b4fa9b4.tar.gz |
2006-12-05 Roman Kennke <kennke@aicas.com>
* javax/swing/text/html/ImageView.java
(imageUpdate): Use spans field to determine if the CSS width/height
are set. Call safePreferenceChanged to protect view structure
from threading issues.
(spans): Made package private.
(ImageView): Initialize loadOnDemand with false.
(loadImage): Call Toolkit.prepareImage() to make sure we have
our Observer registered.
(safePreferenceChanged): New helper method. Calls preferenceChanged
in a thread safe environment.
2006-12-05 Roman Kennke <kennke@aicas.com>
* NEWS: Add entry about improved HTML support.
2006-12-05 Roman Kennke <kennke@aicas.com>
* javax/swing/text/html/ImageView.java
(ImageView): Initialize spans array here.
(setPropertiesFromAttributes): Moved init of spans array to
constructor.
2006-12-05 Roman Kennke <kennke@aicas.com>
* javax/swing/text/html/BlockView.java
(painter): Made package visible.
* javax/swing/text/html/StyleSheet.java
(translateBorder): New helper method.
(translateHTMLToCSS): Add mappings for border attributes.
* javax/swing/text/html/TableView.java
Made class subclass of BlockView to get CSS goodness.
(CellView.rowSpan): New field.
(CellView.setPropertiesFromAttributes): Fetch rowspan.
(RowView.overlap): New field.
(RowView.rowIndex): New field.
(RowView.layoutMajorAxis): Skip overlapping cells.
(RowView.layoutMinorAxis): Layout cells that span more than 1 row.
(numColumns): New field.
(tmpRect): New field.
(TableView): Initialize tmpRect.
(calculateColumnRequirements): Adjusted and fixed for multirows.
(getAlignment): Overridden to center tables.
(paint): Overridden to fix clipping.
(getStyleSheet): Made protected.
(layoutMajorAxis): Invalidate rows.
(setPropertiesFromAttributes): Made protected and call super.
(updateGrid): Update the overlapping information for multirows.
2006-12-05 Roman Kennke <kennke@aicas.com>
* javax/swing/text/html/HTMLEditorKit.java
(HTMLFactory.create): Removed debug output.
* javax/swing/text/html/InlineView.java
(getBreakWeight): Likewise.
* javax/swing/text/html/StyleSheet.java
(addRule): Likewise.
(ListPainter.paint): Removed debug output.
2006-12-06 Roman Kennke <kennke@aicas.com>
* javax/swing/text/html/BlockView.java
(getAlignment): Align blocks horizontally by the superclass.
* javax/swing/text/html/HTMLEditorKit.java
(HTMLFactory.create): Replace equals comparison by == for efficiency.
Add mapping for misplaced tr, td and th tags. Include object mapping.
* javax/swing/text/html/TableView.java
(RowView.replace): Invalidate grid early.
(gridValid): Initialize with false.
(create): Only create RowView and CellView for correctly placed
tags. Avoid unnecessary casts.
(getAlignment): Removed.
(replace): Invalidate grid early.
2006-12-06 Roman Kennke <kennke@aicas.com>
* javax/swing/text/html/TableView.java
(RowView.layoutMajorAxis): Check column index for invalid value.
(updateGrid): Check column index for invalid value.
2006-12-06 Roman Kennke <kennke@aicas.com>
* javax/swing/JEditorPane.java
(getStream): Buffer the stream for efficiency.
(setPage): Don't scroll the view at this point.
* javax/swing/plaf/basic/BasicTextUI.java
(RootView.paint): Call RootView's setSize to get synchronization.
(RootView.setSize): Synchronize to prevent race in layout code.
* javax/swing/text/AbstractDocument.java
(notifyListeners): New field.
(fireChangedUpdate): Track notifyListener field.
(fireRemoveUpdate): Track notifyListener field.
(fireIndertUpdate): Track notifyListener field.
(writeLock): Check notifyListener and throw IllegalStateException.
* javax/swing/text/View.java
(preferenceChanged): Create local var for better thread safety and
more efficiency.
2006-12-06 Roman Kennke <kennke@aicas.com>
* examples/gnu/classpath/examples/icons/back.png,
* examples/gnu/classpath/examples/icons/reload.png:
New icons for the HTML browser.
* examples/gnu/classpath/examples/swing/HtmlDemo.java
(history): New field. Manages the browsing history.
(HtmlDemo): Initialize history.
(createContent): Set location and add history. Add toolbar.
(createToolBar): New helper method.
(main): Make default size bigger.
* examples/gnu/classpath/examples/swing/frame1.html,
* examples/gnu/classpath/examples/swing/frame2.html,
* examples/gnu/classpath/examples/swing/frame3.html,
* examples/gnu/classpath/examples/swing/frame4.html,
* examples/gnu/classpath/examples/swing/frames.html,
* examples/gnu/classpath/examples/swing/tables.html:
New example pages.
* examples/gnu/classpath/examples/swing/welcome.html
Add a couple of links and new test pages.
2006-12-06 Roman Kennke <kennke@aicas.com>
* examples/gnu/classpath/examples/swing/Demo.java
(getIcon): Made package private.
* examples/gnu/classpath/examples/swing/HtmlDemo.java
(hyperlinkUpdate): Convert URL to string.
2006-12-06 Roman Kennke <kennke@aicas.com>
* javax/swing/text/DefaultCaret.java
(appear): Adjust visibility here.
(setDotImpl): Don't adjust visibility here.
(moveDotImpl): Don't adjust visibility here.
2006-12-06 Roman Kennke <kennke@aicas.com>
* javax/swing/text/html/FormView.java
(SubmitThread.postData): Implemented.
(SubmitThread.run): Pass data to postData().
(actionPerformed): Reset form when reset button is activated.
(createComponent): Add support for select lists and comboboxes.
Don't set value of text and password fields here, this is done
now in HTMLDocument for consistency.
(getElementFormData): Add support for fetching form data from
select lists and comboboxes as well as textareas.
(getSelectData): New helper method. Fetches form data from
select boxes.
(getTextAreaData): New helper method. Fetches form data from
textareas.
(resetForm): New helper method. Resets the entire form.
* javax/swing/text/html/HTMLDocument.java
(HTMLReader.FormAction.end): Handle SELECT and OPTION tags.
(HTMLReader.FormAction.start): Handle SELECT and OPTION tags.
(HTMLReader.FormAction.setModel): Initialize text and password
values here. Also, use the resetable special models.
Group radio buttons into ButtonGroup for exclusive selection.
(HTMLReader.FormTagAction): New class. Handles FORM tags.
(HTMLReader.buttonGroups): New field.
(HTMLReader.numOptions): New field.
(HTMLReader.option): New field.
(HTMLReader.selectModel): New field.
(HTMLReader.textAreaDocument): Make ResetablePlainDocument.
(HTMLReader.handleText): Handle OPTION text.
(HTMLReader.initTags): Map FORM tags to FormTagAction.
(HTMLReader.textAreaContent): Set initial content.
* javax/swing/text/html/Option.java
(Option): Make copy of attribute set. Initialize selected state.
(getValue): Fetch value from attribute set.
* javax/swing/text/html/ResetableModel.java: New interface.
* javax/swing/text/html/ResetablePlainDocument.java: New class.
Supports resetting the state.
* javax/swing/text/html/ResetableToggleButtonModel.java: Likewise.
* javax/swing/text/html/SelectComboBoxModel.java: Likewise.
* javax/swing/text/html/SelectListModel.java: Likewise.
2006-12-06 Roman Kennke <kennke@aicas.com>
* examples/gnu/classpath/examples/swing/BrowserEditorKit.java:
New class.
* examples/gnu/classpath/examples/swing/HtmlDemo.java
(LoadActionListener): Call setPage() helper method.
(createContent): Register tweaked editor kit. For FormSubmitEvents
call submitForm(), otherwise setPage().
(postData): Helper method for posting form data.
(setPage): Helper method for navigating to a new URL.
(submitForm): Helper method for submitting a form.
* examples/gnu/classpath/examples/swing/forms.html:
Added text/password fields and select boxes.
* examples/gnu/classpath/examples/swing/welcome.html: Fixed typo.
2006-12-07 Mark Wielaard <mark@klomp.org>
* java/net/URL.java (URL(URL,String,URLStreamHandler,boolean)): New
private constructor.
(URL(URL,String,URLStreamHandler)): Call new constructor.
(URL(URL,String)): Likewise.
(URL(String)): Likewise.
2006-12-07 Mark Wielaard <mark@klomp.org>
* javax/swing/JEditorPane.java (createEditorKitForContentType):
Always load from system class loader.
Diffstat (limited to 'javax/swing/text/html/ImageView.java')
-rw-r--r-- | javax/swing/text/html/ImageView.java | 65 |
1 files changed, 54 insertions, 11 deletions
diff --git a/javax/swing/text/html/ImageView.java b/javax/swing/text/html/ImageView.java index 050eb16e2..bf906e450 100644 --- a/javax/swing/text/html/ImageView.java +++ b/javax/swing/text/html/ImageView.java @@ -1,6 +1,5 @@ package javax.swing.text.html; -import gnu.javax.swing.text.html.CombinedAttributes; import gnu.javax.swing.text.html.ImageViewIconFactory; import gnu.javax.swing.text.html.css.Length; @@ -15,6 +14,8 @@ import java.net.MalformedURLException; import java.net.URL; import javax.swing.Icon; +import javax.swing.SwingUtilities; +import javax.swing.text.AbstractDocument; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.Document; @@ -40,16 +41,15 @@ public class ImageView extends View public boolean imageUpdate(Image image, int flags, int x, int y, int width, int height) { boolean widthChanged = false; - if ((flags & ImageObserver.WIDTH) != 0 - && ! getElement().getAttributes().isDefined(HTML.Attribute.WIDTH)) + if ((flags & ImageObserver.WIDTH) != 0 && spans[X_AXIS] == null) widthChanged = true; boolean heightChanged = false; - if ((flags & ImageObserver.HEIGHT) != 0 - && ! getElement().getAttributes().isDefined(HTML.Attribute.HEIGHT)) - widthChanged = true; + if ((flags & ImageObserver.HEIGHT) != 0 && spans[Y_AXIS] == null) + heightChanged = true; if (widthChanged || heightChanged) - preferenceChanged(ImageView.this, widthChanged, heightChanged); - return (flags & ALLBITS) != 0; + safePreferenceChanged(ImageView.this, widthChanged, heightChanged); + boolean ret = (flags & ALLBITS) != 0; + return ret; } } @@ -112,8 +112,10 @@ public class ImageView extends View /** * The CSS width and height. + * + * Package private to avoid synthetic accessor methods. */ - private Length[] spans; + Length[] spans; /** * The cached attributes. @@ -128,9 +130,11 @@ public class ImageView extends View public ImageView(Element element) { super(element); + spans = new Length[2]; observer = new Observer(); reloadProperties = true; reloadImage = true; + loadOnDemand = false; } /** @@ -416,7 +420,6 @@ public class ImageView extends View StyleSheet ss = getStyleSheet(); float emBase = ss.getEMBase(atts); float exBase = ss.getEXBase(atts); - spans = new Length[2]; spans[X_AXIS] = (Length) atts.getAttribute(CSS.Attribute.WIDTH); if (spans[X_AXIS] != null) { @@ -487,7 +490,9 @@ public class ImageView extends View if (src != null) { // Call getImage(URL) to allow the toolkit caching of that image URL. - newImage = Toolkit.getDefaultToolkit().getImage(src); + Toolkit tk = Toolkit.getDefaultToolkit(); + newImage = tk.getImage(src); + tk.prepareImage(newImage, -1, -1, observer); if (newImage != null && getLoadsSynchronously()) { // Load image synchronously. @@ -548,4 +553,42 @@ public class ImageView extends View tk.prepareImage(newIm, -1, -1, observer); } } + + /** + * Calls preferenceChanged from the event dispatch thread and within + * a read lock to protect us from threading issues. + * + * @param v the view + * @param width true when the width changed + * @param height true when the height changed + */ + void safePreferenceChanged(final View v, final boolean width, + final boolean height) + { + if (SwingUtilities.isEventDispatchThread()) + { + Document doc = getDocument(); + if (doc instanceof AbstractDocument) + ((AbstractDocument) doc).readLock(); + try + { + preferenceChanged(v, width, height); + } + finally + { + if (doc instanceof AbstractDocument) + ((AbstractDocument) doc).readUnlock(); + } + } + else + { + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + safePreferenceChanged(v, width, height); + } + }); + } + } } |