From 0527e4b05fa87fa2e1a6a6dda49ab7d9410b5d13 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 13 Jun 2015 12:19:42 -0400 Subject: [PATCH] Adds dmitool import iconstate splicing Adds the ability to splice in specific directions and/or frames when importing icon states with dmitool. --- tools/dmitool/dmitool.jar | Bin 197142 -> 197672 bytes tools/dmitool/dmitool.py | 21 ++++--- .../src/main/java/dmitool/IconState.java | 30 ++++++++- tools/dmitool/src/main/java/dmitool/Main.java | 59 ++++++++++++------ 4 files changed, 81 insertions(+), 29 deletions(-) diff --git a/tools/dmitool/dmitool.jar b/tools/dmitool/dmitool.jar index f0fc1dc17be5ea9669116c9f20999c841922eb70..c7df4d8b7fddfad48441dbf5caef765269dc5f59 100644 GIT binary patch delta 11967 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

Xxk4?;w`6`-%D!y-TjdKw>xppo+Wfk!ml@W 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 OCJ2c1slVL`@&5oA^)B@Q diff --git a/tools/dmitool/dmitool.py b/tools/dmitool/dmitool.py index f24ce2c590..390f0d745f 100644 --- a/tools/dmitool/dmitool.py +++ b/tools/dmitool/dmitool.py @@ -8,7 +8,7 @@ _JAVA_PATH = ["java"] _DMITOOL_CMD = ["-jar", "dmitool.jar"] def _dmitool_call(*dmitool_args, **popen_args): - return Popen(_JAVA_PATH + _DMITOOL_CMD + list(dmitool_args), **popen_args) + return Popen(_JAVA_PATH + _DMITOOL_CMD + [str(arg) for arg in dmitool_args], **popen_args) def _safe_parse(dict, key, deferred_value): try: @@ -19,12 +19,14 @@ def _safe_parse(dict, key, deferred_value): return False def version(): - """ Prints the version to stdout. """ - return _dmitool_call("version") + """ Returns the version as a string. """ + stdout, stderr = _dmitool_call("version", stdout=PIPE).communicate() + return str(stdout).strip() def help(): - """ Prints the help text to stdout. """ - return _dmitool_call("help") + """ Returns the help text as a string. """ + stdout, stderr = _dmitool_call("help", stdout=PIPE).communicate() + return str(stdout).strip() def info(filepath): """ Totally not a hack that parses the output from dmitool into a dictionary. @@ -68,11 +70,11 @@ def extract_state(input_path, output_path, icon_state, direction=None, frame=Non If provided frame should be a frame number or a string of two frame number separated by a dash. """ args = ["extract", input_path, icon_state, output_path] - if direction: args.extend(("direction" , str(direction))) - if frame: args.extend(("frame" , str(frame))) + if direction is not None: args.extend(("direction" , str(direction))) + if frame is not None: args.extend(("frame" , str(frame))) return _dmitool_call(*args) -def import_state(target_path, input_path, icon_state, replace=False, delays=None, rewind=False, loop=None, ismovement=False, direction=None): +def import_state(target_path, input_path, icon_state, replace=False, delays=None, rewind=False, loop=None, ismovement=False, direction=None, frame=None): """ Inserts an input png given by the input_path into the target_path. """ args = ["import", target_path, icon_state, input_path] @@ -81,7 +83,8 @@ def import_state(target_path, input_path, icon_state, replace=False, delays=None if rewind: args.append("rewind") if ismovement: args.append("movement") if delays: args.extend(("delays", ",".join(delays))) - if direction: args.extend(("direction", direction)) + if direction is not None: args.extend(("direction", direction)) + if frame is not None: args.extend(("frame", frame)) if loop in ("inf", "infinity"): args.append("loop") diff --git a/tools/dmitool/src/main/java/dmitool/IconState.java b/tools/dmitool/src/main/java/dmitool/IconState.java index ee31b13792..2a2202c71c 100644 --- a/tools/dmitool/src/main/java/dmitool/IconState.java +++ b/tools/dmitool/src/main/java/dmitool/IconState.java @@ -203,7 +203,7 @@ public class IconState { px[bY][bX + 3]); } } - images[imageY + imageX*dirs] = new NonPalettedImage(w, h, pixels); + images[_getIndex(imageY, imageX, dirs)] = new NonPalettedImage(w, h, pixels); } } @@ -214,9 +214,35 @@ public class IconState { //Converts a desired dir and frame to an index into the images array. public int getIndex(int dir, int frame) { - return dir + frame*dirs; + return _getIndex(dir, frame, dirs); } + private static int _getIndex(int dir, int frame, int totalDirs) { + return dir + frame*totalDirs; + } + + public void insertDir(int dir, Image[] splice) { + int maxFrame = frames < splice.length? frames: splice.length; + for(int frameIdx = 0; frameIdx < maxFrame; frameIdx++) { + insertImage(dir, frameIdx, splice[frameIdx]); + } + } + + public void insertFrame(int frame, Image[] splice) { + int maxDir = dirs < splice.length? dirs: splice.length; + for(int dirIdx = 0; dirIdx < maxDir; dirIdx++) { + insertImage(dirIdx, frame, splice[dirIdx]); + } + } + + public void insertImage(int dir, int frame, Image splice) { + if(frame < 0 || frame >= frames) + throw new IllegalArgumentException("Provided frame is out of range: " + frame); + if(dir < 0 || dir >= dirs) + throw new IllegalArgumentException("Provided dir is out of range: " + dir); + + images[getIndex(dir, frame)] = splice; + } } diff --git a/tools/dmitool/src/main/java/dmitool/Main.java b/tools/dmitool/src/main/java/dmitool/Main.java index 55b453098e..fe6048ca3b 100644 --- a/tools/dmitool/src/main/java/dmitool/Main.java +++ b/tools/dmitool/src/main/java/dmitool/Main.java @@ -272,6 +272,7 @@ public class Main { String hotspot = null; float[] delays = null; String replaceDir = null; + String replaceFrame = null; while(!argq.isEmpty()) { String s = argq.pollFirst(); switch(s.toLowerCase()) { @@ -352,6 +353,15 @@ public class Main { return; } break; + case "f": + case "frame": + if(!argq.isEmpty()) { + replaceFrame = argq.pollFirst(); + } else { + System.out.println("Argument '" + s + "' requires a frame argument following it!"); + return; + } + break; default: System.out.println("Unknown import argument '" + s + "', ignoring."); break; @@ -363,26 +373,39 @@ public class Main { if(VERBOSITY >= 0) toImportTo.printInfo(); IconState is = IconState.importFromPNG(toImportTo, new FileInputStream(pngFile), stateName, delays, rewind, loop, hotspot, movement); - //If replaceDir is set, attempt to find an IconState with the same name. - //Then if nodup is set, replace the specified direction of that IconState with the (first direction) of the imported IconState. - //If nodup is not set, create a copy of the source IconState and apply the replace operation on that. - IconState targetIs; - if(replaceDir != null && (targetIs = toImportTo.getIconState(stateName)) != null) { - int dirToReplace = parseDir(replaceDir, targetIs); - int numFrames = is.frames < targetIs.frames? is.frames : targetIs.frames; + //image insertion + if(replaceDir != null || replaceFrame != null) { - if(noDup) { - for(int frameIdx = 0; frameIdx < numFrames; frameIdx++) { - targetIs.images[targetIs.getIndex(dirToReplace, frameIdx)] = is.images[is.getIndex(0, frameIdx)]; - } - } else { - targetIs = targetIs.clone(); - for(int frameIdx = 0; frameIdx < numFrames; frameIdx++) { - targetIs.images[targetIs.getIndex(dirToReplace, frameIdx)] = is.images[is.getIndex(0, frameIdx)]; - } - toImportTo.addIconState(null, targetIs); + IconState targetIs = toImportTo.getIconState(stateName); + if(targetIs == null) { + System.out.println("'direction' or 'frame' specified and no icon state '" + stateName + "' found, aborting!"); + return; } - } else { + if(is.images.length == 0) { + System.out.println("'direction' or 'frame' specified and imported is empty, aborting!"); + return; + } + + if(!noDup) targetIs = targetIs.clone(); + + int dirToReplace, frameToReplace; + if(replaceDir != null && replaceFrame != null) { + frameToReplace = parseFrame(replaceFrame, targetIs); + dirToReplace = parseDir(replaceDir, targetIs); + targetIs.insertImage(dirToReplace, frameToReplace, is.images[0]); + } + else if(replaceDir != null) { + dirToReplace = parseDir(replaceDir, targetIs); + targetIs.insertDir(dirToReplace, is.images); + } + else if(replaceFrame != null) { + frameToReplace = parseFrame(replaceFrame, targetIs); + targetIs.insertFrame(frameToReplace, is.images); + } + + if(!noDup) toImportTo.addIconState(null, targetIs); + } + else { if(noDup) { if(!toImportTo.setIconState(is)) { toImportTo.addIconState(null, is);