1). 前提(condition)
+ jedit4.2final
+ jdk 1.4
2). 步骤(steps)
1. add this at org.gjt.sp.jedit.textarea.TextAreaPainter
in method paintComponent(...)
after:
extensionMgr.paintScreenLineRange(textArea, gfx, firstInvalid,
lastInvalid, y, height);
add:
{ // paint wallpaper after all that should be paint
Rectangle rect = this.getVisibleRect();
Wallpaper.paintWallpaper(gfx, rect.x, rect.y, rect.width,
rect.width, this);
}
2. add in org.gjt.sp.jedit.textarea.JEditTextArea
// {{{ changeWallpaperDialog() method
// for change the wallpaper
/**
* Displays the 'changeWallpaperDialog' dialog box.
* @author neoedmund
*/
public void changeWallpaperDialog()
{
if (Wallpaper.changeWallpaper(this)){
repaint();
}
} //}}}
3. add new class org.gjt.sp.jedit.textarea.Wallpaper
/*
* Created on 2005-3-26
*/
package org.gjt.sp.jedit.textarea;
import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
/**
* @author neoe
*/
public class Wallpaper {
static BufferedImage pic;
private static final String DEFALUT_IMG = "org/gjt/sp/jedit/icons/wallpaper.jpg";
static{
System.out.println("hello Wallpaper");
loadPic(ClassLoader
.getSystemResourceAsStream(DEFALUT_IMG));
}
static AlphaComposite alpha = AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, 0.2f);
/**
* @param gfx
* @param width
* @param height
*/
public static void paintWallpaper(Graphics2D g, int cx, int cy, int width, int height, JComponent view) {
if (pic==null){
return;
}
int y = 0;
int w = pic.getWidth();
int h = pic.getHeight();
Composite old = g.getComposite();
g.setComposite(alpha);
while (true) {
int x = 0;
while (true) {
g.drawImage(pic, cx+x, cy+y, view);
x += w;
if (w <= 0 || x >= width) {
break;
}
}
y += h;
if (h <= 0 || y >= height) {
break;
}
}
g.setComposite(old);
}
/**
* @param in
*/
private static void loadPic(InputStream in) {
try {
pic = ImageIO.read(in);
} catch (IOException e) {
e.printStackTrace();
}
}
static File f;
/**
*
*/
public static boolean changeWallpaper(JComponent parent) {
JFileChooser jfc = new JFileChooser(f);
int returnVal = jfc.showOpenDialog(parent);
if (returnVal == JFileChooser.APPROVE_OPTION) {
f = jfc.getSelectedFile();
try {
loadPic(new FileInputStream(f));
return true;
} catch (IOException e1) {
e1.printStackTrace();
}
}
return false;
}
}
4. copy default wallpaper whatever you like into org/gjt/sp/jedit/icons/wallpaper.jpg
5. add this into org\gjt\sp\jedit\actions.xml
<ACTION NAME="change-wallpaper">
<CODE>
textArea.changeWallpaperDialog();
</CODE>
</ACTION>
6. change org\gjt\sp\jedit\jedit_gui.props, add "change-wallpaper" in tool bar
#{{{ Tool bar
view.toolbar=new-file open-file close-buffer save - print page-setup - undo redo cut copy paste - find find-next - new-view unsplit split-horizontal split-vertical - buffer-options global-options - plugin-manager - help - change-wallpaper
...
...
...
change-wallpaper.icon=Help.png
....
....
change-wallpaper.label=Change $Wallpaper
7. last step, rebuild source, restart jedit, have fun.
notes: I don`t know if it is something slowdown, but I like it :)