"Panels" magic tool; convert image to 2x2 repeat
Useful for making 4-panel comics; or repeat multiple times to create a compound-eye effect. Closes https://sourceforge.net/p/tuxpaint/feature-requests/204/
This commit is contained in:
parent
fed3b80359
commit
8d67915b3e
10 changed files with 93 additions and 12 deletions
|
|
@ -8,7 +8,14 @@ http://www.tuxpaint.org/
|
||||||
|
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
2021.September.2 (0.9.27)
|
2021.September.4 (0.9.27)
|
||||||
|
* New Magic Tools:
|
||||||
|
----------------
|
||||||
|
* "Panels" - Convert your picture to 4-panel-comic-style
|
||||||
|
2x2 image, repeating the original. (Repeat for "compound eye"
|
||||||
|
style effects!)
|
||||||
|
(Closes https://sourceforge.net/p/tuxpaint/feature-requests/204/)
|
||||||
|
|
||||||
* Documentation updates
|
* Documentation updates
|
||||||
---------------------
|
---------------------
|
||||||
* Ensured Tux Paint's built-in help ("tuxpaint --help"),
|
* Ensured Tux Paint's built-in help ("tuxpaint --help"),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
Creating Tux Paint Magic Tool Plugins
|
Creating Tux Paint Magic Tool Plugins
|
||||||
|
|
||||||
Copyright 2007-2018 by various contributors; see AUTHORS.txt
|
Copyright 2007-2021 by various contributors; see AUTHORS.txt
|
||||||
http://www.tuxpaint.org/
|
http://www.tuxpaint.org/
|
||||||
|
|
||||||
July 5, 2007 - February 20, 2021
|
July 5, 2007 - February 20, 2021
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ alink="#FF00FF">
|
||||||
<center>
|
<center>
|
||||||
<h1>Creating Tux Paint Magic Tool Plugins</h1>
|
<h1>Creating Tux Paint Magic Tool Plugins</h1>
|
||||||
|
|
||||||
<p>Copyright 2007-2018 by various contributors; see AUTHORS.txt<br/>
|
<p>Copyright 2007-2021 by various contributors; see AUTHORS.txt<br/>
|
||||||
<a href="http://www.tuxpaint.org/">http://www.tuxpaint.org/</a></p>
|
<a href="http://www.tuxpaint.org/">http://www.tuxpaint.org/</a></p>
|
||||||
|
|
||||||
<p>July 5, 2007 - February 20, 2021</p>
|
<p>July 5, 2007 - February 20, 2021</p>
|
||||||
|
|
|
||||||
BIN
magic/icons/panels.png
Normal file
BIN
magic/icons/panels.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.6 KiB |
|
|
@ -39,6 +39,7 @@
|
||||||
<li><a href="square_mosaic.html">Square Mosaic</a></li>
|
<li><a href="square_mosaic.html">Square Mosaic</a></li>
|
||||||
<li><a href="negative.html">Negative</a></li>
|
<li><a href="negative.html">Negative</a></li>
|
||||||
<li><a href="noise.html">Noise</a></li>
|
<li><a href="noise.html">Noise</a></li>
|
||||||
|
<li><a href="panels.html">Panels</a></li>
|
||||||
<li><a href="pattern.html">Pattern</a></li>
|
<li><a href="pattern.html">Pattern</a></li>
|
||||||
<li><a href="perspective.html">Perspective</a></li>
|
<li><a href="perspective.html">Perspective</a></li>
|
||||||
<li><a href="picasso.html">Picasso</a></li>
|
<li><a href="picasso.html">Picasso</a></li>
|
||||||
|
|
|
||||||
9
magic/magic-docs/en/html/panels.html
Normal file
9
magic/magic-docs/en/html/panels.html
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<body><html><head><title>Tux Paint "Magic" Tool: Panels</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#FF0000" alink="#FF00FF">
|
||||||
|
<h1 align="center">Tux Paint "Magic" Tool: Panels</h1>
|
||||||
|
<h2 align="center">By Bill Kendrick <<a href="mailto:bill@newbreedsoftware.com">bill@newbreedsoftware.com</a>></h2>
|
||||||
|
<p>Shrink the image and repeat it four times in a 2-by-2 grid. Useful for creating 4-panel comics. Can also be used to create a compound-eye effect.</p>
|
||||||
|
</body></html>
|
||||||
|
|
@ -35,6 +35,7 @@
|
||||||
* Square Mosaic
|
* Square Mosaic
|
||||||
* Negative
|
* Negative
|
||||||
* Noise
|
* Noise
|
||||||
|
* Panels
|
||||||
* Pattern
|
* Pattern
|
||||||
* Perspective
|
* Perspective
|
||||||
* Picasso
|
* Picasso
|
||||||
|
|
|
||||||
6
magic/magic-docs/en/panels.txt
Normal file
6
magic/magic-docs/en/panels.txt
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
Tux Paint "Magic" Tool: Panels
|
||||||
|
|
||||||
|
By Bill Kendrick <bill@newbreedsoftware.com>
|
||||||
|
|
||||||
|
Shrink the image and repeat it four times in a 2-by-2 grid. Useful for
|
||||||
|
creating 4-panel comics. Can also be used to create a compound-eye effect.
|
||||||
|
|
@ -221,6 +221,10 @@ $tools = array(
|
||||||
'desc'=>'Add random noise and static to your picture.',
|
'desc'=>'Add random noise and static to your picture.',
|
||||||
'author'=>$AUTHOR_ANDREWC),
|
'author'=>$AUTHOR_ANDREWC),
|
||||||
|
|
||||||
|
array('name'=>'Panels',
|
||||||
|
'desc'=>'Shrink the image and repeat it four times in a 2-by-2 grid. Useful for creating 4-panel comics. Can also be used to create a compound-eye effect.',
|
||||||
|
'author'=>$AUTHOR_KENDRICK),
|
||||||
|
|
||||||
array('name'=>'Pattern',
|
array('name'=>'Pattern',
|
||||||
'desc'=>'Draws a tiled pattern around the picture.',
|
'desc'=>'Draws a tiled pattern around the picture.',
|
||||||
'author'=>$AUTHOR_PERE,
|
'author'=>$AUTHOR_PERE,
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
Credits: Andrew Corcoran <akanewbie@gmail.com>
|
Credits: Andrew Corcoran <akanewbie@gmail.com>
|
||||||
|
|
||||||
Copyright (c) 2002-2019 by Bill Kendrick and others; see AUTHORS.txt
|
Copyright (c) 2002-2021 by Bill Kendrick and others; see AUTHORS.txt
|
||||||
bill@newbreedsoftware.com
|
bill@newbreedsoftware.com
|
||||||
http://www.tuxpaint.org/
|
http://www.tuxpaint.org/
|
||||||
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
(See COPYING.txt)
|
(See COPYING.txt)
|
||||||
|
|
||||||
Last updated: August 29, 2019
|
Last updated: September 4, 2021
|
||||||
$Id$
|
$Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -114,6 +114,7 @@ float top_advc_y, right_advc_y, bottom_advc_y, left_advc_y;
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TOOL_PERSPECTIVE,
|
TOOL_PERSPECTIVE,
|
||||||
|
TOOL_PANELS,
|
||||||
TOOL_ZOOM,
|
TOOL_ZOOM,
|
||||||
perspective_NUM_TOOLS
|
perspective_NUM_TOOLS
|
||||||
};
|
};
|
||||||
|
|
@ -134,28 +135,29 @@ static Mix_Chunk *perspective_snd_effect[perspective_NUM_TOOLS + 1];
|
||||||
|
|
||||||
const char *perspective_snd_filenames[perspective_NUM_TOOLS + 1] = {
|
const char *perspective_snd_filenames[perspective_NUM_TOOLS + 1] = {
|
||||||
"perspective.ogg",
|
"perspective.ogg",
|
||||||
|
"zoom_down.ogg", /* TODO: Could use a different sound */
|
||||||
"zoom_up.ogg",
|
"zoom_up.ogg",
|
||||||
"zoom_down.ogg",
|
"zoom_down.ogg",
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *perspective_icon_filenames[perspective_NUM_TOOLS] = {
|
const char *perspective_icon_filenames[perspective_NUM_TOOLS] = {
|
||||||
"perspective.png",
|
"perspective.png",
|
||||||
|
"panels.png",
|
||||||
"zoom.png",
|
"zoom.png",
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *perspective_names[perspective_NUM_TOOLS] = {
|
const char *perspective_names[perspective_NUM_TOOLS] = {
|
||||||
gettext_noop("Perspective"),
|
gettext_noop("Perspective"),
|
||||||
|
gettext_noop("Panels"),
|
||||||
gettext_noop("Zoom"),
|
gettext_noop("Zoom"),
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *perspective_descs[perspective_NUM_TOOLS] = {
|
const char *perspective_descs[perspective_NUM_TOOLS] = {
|
||||||
gettext_noop("Click on the corners and drag where you want to stretch the picture."),
|
gettext_noop("Click on the corners and drag where you want to stretch the picture."),
|
||||||
|
|
||||||
|
gettext_noop("Click to turn your picture into 2-by-2 panels."),
|
||||||
|
|
||||||
gettext_noop("Click and drag up to zoom in or drag down to zoom out the picture."),
|
gettext_noop("Click and drag up to zoom in or drag down to zoom out the picture."),
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Uint32 perspective_api_version(void)
|
Uint32 perspective_api_version(void)
|
||||||
|
|
@ -358,8 +360,56 @@ void perspective_click(magic_api * api, int which, int mode ATTRIBUTE_UNUSED,
|
||||||
old_h = new_h;
|
old_h = new_h;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TOOL_PANELS:
|
||||||
|
{
|
||||||
|
SDL_Surface *scaled_surf;
|
||||||
|
|
||||||
|
scaled_surf = api->scale(canvas, canvas->w / 2, canvas->h / 2, 0);
|
||||||
|
|
||||||
|
/* Top left */
|
||||||
|
update_rect->x = 0;
|
||||||
|
update_rect->y = 0;
|
||||||
|
update_rect->w = scaled_surf->w;
|
||||||
|
update_rect->h = scaled_surf->h;
|
||||||
|
SDL_BlitSurface(scaled_surf, NULL, canvas, update_rect);
|
||||||
|
|
||||||
|
/* Top right */
|
||||||
|
update_rect->x = scaled_surf->w;
|
||||||
|
update_rect->y = 0;
|
||||||
|
update_rect->w = scaled_surf->w;
|
||||||
|
update_rect->h = scaled_surf->h;
|
||||||
|
SDL_BlitSurface(scaled_surf, NULL, canvas, update_rect);
|
||||||
|
|
||||||
|
/* Bottom left */
|
||||||
|
update_rect->x = 0;
|
||||||
|
update_rect->y = scaled_surf->h;
|
||||||
|
update_rect->w = scaled_surf->w;
|
||||||
|
update_rect->h = scaled_surf->h;
|
||||||
|
SDL_BlitSurface(scaled_surf, NULL, canvas, update_rect);
|
||||||
|
|
||||||
|
/* Bottom right */
|
||||||
|
update_rect->x = scaled_surf->w;
|
||||||
|
update_rect->y = scaled_surf->h;
|
||||||
|
update_rect->w = scaled_surf->w;
|
||||||
|
update_rect->h = scaled_surf->h;
|
||||||
|
SDL_BlitSurface(scaled_surf, NULL, canvas, update_rect);
|
||||||
|
|
||||||
|
update_rect->x = 0;
|
||||||
|
update_rect->y = 0;
|
||||||
|
update_rect->w = canvas->w;
|
||||||
|
update_rect->h = canvas->h;
|
||||||
|
|
||||||
|
SDL_FreeSurface(scaled_surf);
|
||||||
|
|
||||||
|
api->playsound(perspective_snd_effect[which], 127, 255);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (which != TOOL_PANELS)
|
||||||
|
{
|
||||||
perspective_drag(api, which, canvas, last, x, y, x, y, update_rect);
|
perspective_drag(api, which, canvas, last, x, y, x, y, update_rect);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -482,7 +532,6 @@ void perspective_preview(magic_api * api, int which ATTRIBUTE_UNUSED,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// No setup happened:
|
|
||||||
void perspective_shutdown(magic_api * api ATTRIBUTE_UNUSED)
|
void perspective_shutdown(magic_api * api ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
//Clean up sounds
|
//Clean up sounds
|
||||||
|
|
@ -546,9 +595,13 @@ void perspective_switchout(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE
|
||||||
SDL_FreeSurface(canvas_back);
|
SDL_FreeSurface(canvas_back);
|
||||||
}
|
}
|
||||||
|
|
||||||
int perspective_modes(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
|
int perspective_modes(magic_api * api ATTRIBUTE_UNUSED, int which)
|
||||||
{
|
{
|
||||||
|
if (which == TOOL_PANELS) {
|
||||||
|
return (MODE_FULLSCREEN);
|
||||||
|
} else {
|
||||||
return (MODE_PAINT_WITH_PREVIEW);
|
return (MODE_PAINT_WITH_PREVIEW);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void perspective_line(void *ptr_to_api, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas,
|
void perspective_line(void *ptr_to_api, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue