Hi,

I have made a python plugin that registers a couple of scripts (I
wanted something that does less than 'Make seamless' does; the script
is attached for the curious).

They scripts appear in the image's menu, but I would like to be able
to add them to a toolbox (even better, to the main toolbox).

Is this possible? For example, is it possible to:
* put a button in a toolbox
* attach an icon to the button
* attach a script to the button

Is there a way to register my scripts so that they appear next to the
compiled-in tools (like the 'Pencil', 'Paintbrush', etc) ?

Thanx,

Ionutz
#! /usr/bin/python

from gimpfu import *

def hide_visible(img):
	"hide visible layers and returns them as a list"
	ret = []
	for l in img.layers:
		if l.visible:
			ret.append(l)
			l.visible = 0
	return ret

def get_position(img, l0):
	"retrieve position for layer l0"
	ret = 0
	for l in img.layers[::-1]:
		if l == l0:
			return ret
		ret += 1
	return ret

def set_position(img, l0, pos):
	"move layer l0 to position pos"
	pos0 = get_position(img, l0)

	if pos > pos0:
		for x in range(pos - pos0):
			img.raise_layer(l0)
	elif pos < pos0:
		for x in range(pos0 - pos):
			img.lower_layer(l0)

def tileable(timage, tdrawable, x1, x2, y1, y2):
	img = timage

	# compute some values
	w = img.width
	h = img.height
	
	w1 = int(w * x1 / float(x1 + x2))
	w2 = w - w1

	h1 = int(h * y1 / float(y1 + y2))
	h2 = h - h1

	img.undo_group_start()

	l0 = timage.active_layer

	pos = get_position(img, l0) # store layer position
	visible = hide_visible(img) # hides existing layers, storing their visibility

	# create 4 layers and displace them
	l1 = l0.copy()
	l1.translate(w1,h1)
	l1.visible = 1
	img.add_layer(l1, 0)
	
	l2 = l0.copy()
	l2.translate(-w2,-h2)
	l2.visible = 1
	img.add_layer(l2, 0)

	l3 = l0.copy()
	l3.translate(w1,-h2)
	l3.visible = 1
	img.add_layer(l3, 0)

	l4 = l0.copy()
	l4.translate(-w2,h1)
	l4.visible = 1
	img.add_layer(l4, 0)
	
	# merge the visible layers
	l5 = img.merge_visible_layers(CLIP_TO_IMAGE)
	
	# restore old visibility
	for l in visible:
		l.visible = 1
	
	# remove the original layer and set the name of the 
	# new one the same with that of the original
	name = l0.name
	img.remove_layer(l0)
	l5.name = name

	# set the new layer in the same position as the old one
	set_position(img, l5, pos)

	img.undo_group_end()

def tileable31(timage, tdrawable):
	tileable(timage, tdrawable, 3, 1, 3, 1)

def tileable13(timage, tdrawable):
	tileable(timage, tdrawable, 1, 3, 1, 3)

def tileable22(timage, tdrawable):
	tileable(timage, tdrawable, 2, 2, 2, 2)

def tileable2V(timage, tdrawable):
	tileable(timage, tdrawable, 2, 0, 2, 2)

def tileable2H(timage, tdrawable):
	tileable(timage, tdrawable, 2, 2, 2, 0)

register(
	"python_fu_tileable13",
	"Split image in 2x2 rects and swap them (for creating tileable textures)",
	"Split image in 2x2 rects and swap them (for creating tileable textures)",
	"Ionutz Borcoman",
	"Ionutz Borcoman",
	"2009",
	"<Image>/IonSoft/Tileable texture 1-3...",
	"RGB*, GRAY*",
	[],
	[],
	tileable13
	)

register(
	"python_fu_tileable31",
	"Split image in 2x2 rects and swap them (for creating tileable textures)",
	"Split image in 2x2 rects and swap them (for creating tileable textures)",
	"Ionutz Borcoman",
	"Ionutz Borcoman",
	"2009",
	"<Image>/IonSoft/Tileable texture 3-1...",
	"RGB*, GRAY*",
	[],
	[],
	tileable31
	)

register(
	"python_fu_tileable22",
	"Split image in 2x2 equal rects and swap them (for creating tileable textures)",
	"Split image in 2x2 equal rects and swap them (for creating tileable textures)",
	"Ionutz Borcoman",
	"Ionutz Borcoman",
	"2009",
	"<Image>/IonSoft/Tileable texture 2-2...",
	"RGB*, GRAY*",
	[],
	[],
	tileable22
	)

register(
	"python_fu_tileable2V",
	"Split image in 2x2 equal rects and swap them (for creating tileable textures)",
	"Split image in 2x2 equal rects and swap them (for creating tileable textures)",
	"Ionutz Borcoman",
	"Ionutz Borcoman",
	"2009",
	"<Image>/IonSoft/Tileable texture 2V...",
	"RGB*, GRAY*",
	[],
	[],
	tileable2V
	)

register(
	"python_fu_tileable2H",
	"Split image in 2x2 equal rects and swap them (for creating tileable textures)",
	"Split image in 2x2 equal rects and swap them (for creating tileable textures)",
	"Ionutz Borcoman",
	"Ionutz Borcoman",
	"2009",
	"<Image>/IonSoft/Tileable texture 2H...",
	"RGB*, GRAY*",
	[],
	[],
	tileable2H
	)

main()
_______________________________________________
Gimp-developer mailing list
Gimp-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer

Reply via email to