#!/usr/bin/env kjscmd StdDirs.addResourceType("buttonmaker", StdDirs.kde_default("data") + "/buttonmaker"); var imgfx = new ImageFX(); var win = new TDEMainWindow(this); try { //var view = Factory.loadui(StdDirs.findResource("buttonmaker", "ButtonMakerUI.ui"), this, win); var view = Factory.loadui("ButtonMakerUI.ui", this, win); } catch(err) { alert( err ); exit(); } var quitAction = StdAction.quit( 0, 0, win.actionCollection() ); var saveAction = StdAction.save( 0, 0, win.actionCollection() ); var newAction = StdAction.fileNew( 0, 0, win.actionCollection() ); win.connect( quitAction, 'activated()', this, 'exit'); win.connect( saveAction, 'activated()', this, 'saveImage'); win.connect( newAction, 'activated()', this, 'resetView'); win.connect(view.TextBox.Font, 'fontSelected(const TQFont&)', this, 'updateUI' ); win.connect(view.TextBox.TextColors, 'fgChanged(const TQColor&)', this, 'updateUI' ); win.connect(view.TextBox.TextColors, 'bgChanged(const TQColor&)', this, 'updateUI' ); win.connect(view.TextBox.Offset, 'valueChanged(int)', this, 'updateUI' ); win.connect(view.TextBox.YOffset, 'valueChanged(int)', this, 'updateUI' ); win.connect(view.TextBox.XOffset, 'valueChanged(int)', this, 'updateUI' ); win.connect(view.Text, 'returnPressed(const TQString&)', this, 'updateUI'); win.connect(view.Mode, 'released(int)', this, 'changeMode'); win.connect(view.Mode.Xsize, 'valueChanged(int)', this, 'updatePillBox' ); win.connect(view.Mode.Ysize, 'valueChanged(int)', this, 'updatePillBox' ); win.connect(view.Mode.BaseColor, 'changed(const TQColor&)', this, 'updatePillBox' ); win.connect(view.Mode.BaseImage, 'urlSelected(const TQString&)', this, 'loadImage'); win.connect(view.Mode.Xscale, 'valueChanged(int)', this, 'updateUI' ); win.connect(view.Mode.Yscale, 'valueChanged(int)', this, 'updateUI' ); var bgimage = new Pixmap(); bgimage.resize(16,32); bgimage.fill("blue"); resetView(); win.createGUI("buttonmaker.rc"); win.setCentralWidget(view); win.setCaption("ButtonMaker"); win.show(); application.exec(); function CustomPillBox() { this.a = new Image(); this.b = new Image(); this.c = new Image(); this.d = new Image(); this.e = new Image(); this.f = new Image(); this.g = new Image(); this.h = new Image(); this.i = new Image(); this.height = function() { return this.a.height() + this.d.height() + this.g.height(); } this.width = function() { return this.a.width() + this.b.width() + this.c.width(); } this.loadImages = function() { return ( this.a.load(StdDirs.findResource("buttonmaker", "01.png")) && this.b.load(StdDirs.findResource("buttonmaker", "02.png")) && this.c.load(StdDirs.findResource("buttonmaker", "03.png")) && this.d.load(StdDirs.findResource("buttonmaker", "04.png")) && this.e.load(StdDirs.findResource("buttonmaker", "05.png")) && this.f.load(StdDirs.findResource("buttonmaker", "06.png")) && this.g.load(StdDirs.findResource("buttonmaker", "07.png")) && this.h.load(StdDirs.findResource("buttonmaker", "08.png")) && this.i.load(StdDirs.findResource("buttonmaker", "09.png"))); } this.colorize = function( color ) { var percent = 0.55; this.a = imgfx.blendColor( color, this.a, percent); this.b = imgfx.blendColor( color, this.b, percent); this.c = imgfx.blendColor( color, this.c, percent); this.d = imgfx.blendColor( color, this.d, percent); this.e = imgfx.blendColor( color, this.e, percent); this.f = imgfx.blendColor( color, this.f, percent); this.g = imgfx.blendColor( color, this.g, percent); this.h = imgfx.blendColor( color, this.h, percent); this.i = imgfx.blendColor( color, this.i, percent); } this.resize = function( newW, newH ) { this.b.smoothScale( newW - ( this.a.width() + this.c.width() ), this.b.height() ); this.h.smoothScale( newW - ( this.g.width() + this.i.width() ), this.h.height() ); this.d.smoothScale( this.d.width(), newH - ( this.a.height() + this.g.height() ) ); this.f.smoothScale( this.f.width(), newH - ( this.c.height() + this.i.height() ) ); this.e.smoothScale( newW - ( this.a.width() + this.c.width() ), newH - ( this.c.height() + this.i.height() ) ); } this.pixmap = function(width, height){ this.resize(width, height); var pix = new Pixmap(); pix.resize(width, height); pix.fill("white"); var painter = new Painter(); try { if( painter.begin(pix) ) { //painter.drawRect(0,0,this.width(), this.height()); painter.drawImage(0, 0, this.a, 0, 0, -1, -1, 0); painter.drawImage(0, this.a.height(), this.d, 0, 0, -1, -1, 0); painter.drawImage(0, ( this.height() - this.g.height() ) ,this.g, 0, 0, -1, -1, 0); painter.drawImage(this.a.width(), 0, this.b, 0, 0, -1, -1, 0); painter.drawImage(this.d.width(), this.b.height(), this.e, 0, 0, -1, -1, 0); painter.drawImage(this.g.width(), ( this.height() - this.h.height() ) ,this.h, 0, 0, -1, -1, 0); painter.drawImage(this.a.width() + this.b.width(), 0, this.c, 0, 0, -1, -1, 0); painter.drawImage(this.d.width() + this.e.width(), this.c.height(), this.f, 0, 0, -1, -1, 0); painter.drawImage(this.g.width() + this.h.width(), ( this.height() - this.i.height() ) ,this.i, 0, 0, -1, -1, 0); if( painter.end() ) pix = painter.pixmap(); } else alert("Could not paint to the pixmap."); } catch (err) { alert(err); } return pix; } } function render(txt, bgimg, font, offset, fgColor, bgColor, xOffset, yOffset) { var h = bgimg.height(); var w = bgimg.width(); var fg = new Pen(); var bg = new Pen(); fg.setColor(fgColor); bg.setColor(bgColor); var painter = new Painter(); try { if (painter.begin(bgimg)) { painter.scale( view.Mode.Xscale.value, view.Mode.Yscale.value ); painter.setPen(bg); painter.setFont(font); var box = painter.textBox(txt); var txtX = (w/2) - (box.width()/2) + xOffset; var txtY = (h/2) + (box.height()/2) + yOffset; painter.drawText(txtX+offset,txtY+offset,txt); painter.setPen(fg); painter.drawText(txtX,txtY,txt); painter.end() return painter.pixmap(); } else alert("Could not paint to the pixmap."); } catch (err) { alert(err); } return new Pixmap(); } function changeMode(mode) { if( mode == 0) { loadImage(view.Mode.BaseImage.url); } else { var pb = new CustomPillBox(); if ( !pb.loadImages() ) alert("Error Loading Resources!"); else { pb.colorize(view.Mode.BaseColor.color); bgimage = pb.pixmap(view.Mode.Xsize.value,view.Mode.Ysize.value); } updateUI(); } } function updatePillBox() { var pb = new CustomPillBox(); if ( !pb.loadImages() ) alert("Error Loading Resources!"); else { pb.colorize(view.Mode.BaseColor.color); bgimage = pb.pixmap(view.Mode.Xsize.value,view.Mode.Ysize.value); } updateUI(); } function updateUI() { view.PreviewBox.Preview.pixmap = render(view.Text.text, bgimage, view.TextBox.Font.font, view.TextBox.Offset.value, view.TextBox.TextColors.foreground, view.TextBox.TextColors.background, view.TextBox.XOffset.value, view.TextBox.YOffset.value); win.adjustSize(); } function saveImage() { var img = new Image(this); var fileName = StdDialog.getSaveFileName(); if( fileName != "") { var pixmap = render(view.Text.text, bgimage, view.TextBox.Font.font, view.TextBox.Offset.value, view.TextBox.TextColors.foreground, view.TextBox.TextColors.background, view.TextBox.XOffset.value, view.TextBox.YOffset.value); img.setPixmap(pixmap); img.save(fileName); } } function resetView() { view.TextBox.Offset.value = 1; if ( application.args.length > 0 ) view.Text.text = application.args[0]; else view.Text.text = ""; view.TextBox.Font.font = ""; view.TextBox.TextColors.foreground = "black"; view.TextBox.TextColors.background = "white"; view.Mode.BaseImage.url = StdDirs.findResource("buttonmaker", "default.png"); loadImage(view.Mode.BaseImage.url); } function loadImage(file) { var img = new Image(this); if (img.load(file) ) { bgimage = img.pixmap(); updateUI(); } }