]> source.dussan.org Git - poi.git/commitdiff
Record support for ColorSchemeAtom (no model support as yet)
authorNick Burch <nick@apache.org>
Sun, 19 Jun 2005 15:36:55 +0000 (15:36 +0000)
committerNick Burch <nick@apache.org>
Sun, 19 Jun 2005 15:36:55 +0000 (15:36 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353718 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hslf/record/ColorSchemeAtom.java [new file with mode: 0644]
src/scratchpad/src/org/apache/poi/hslf/record/Record.java

diff --git a/src/scratchpad/src/org/apache/poi/hslf/record/ColorSchemeAtom.java b/src/scratchpad/src/org/apache/poi/hslf/record/ColorSchemeAtom.java
new file mode 100644 (file)
index 0000000..61c67ae
--- /dev/null
@@ -0,0 +1,187 @@
+
+/* ====================================================================
+   Copyright 2002-2004   Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+        
+
+package org.apache.poi.hslf.record;
+
+import org.apache.poi.util.LittleEndian;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.ByteArrayOutputStream;
+
+/**
+ * A ColorSchemeAtom (type 2032). Holds the 8 RGB values for the different
+ *  colours of bits of text, that makes up a given colour scheme.
+ * Slides (presumably) link to a given colour scheme atom, and that 
+ *  defines the colours to be used
+ *
+ * @author Nick Burch
+ */
+
+public class ColorSchemeAtom extends RecordAtom
+{
+       private byte[] _header;
+       private static long _type = 2032l;
+
+       private int backgroundColourRGB;
+       private int textAndLinesColourRGB;
+       private int shadowsColourRGB;
+       private int titleTextColourRGB;
+       private int fillsColourRGB;
+       private int accentColourRGB;
+       private int accentAndHyperlinkColourRGB;
+       private int accentAndFollowingHyperlinkColourRGB;
+
+       /** Fetch the RGB value for Background Colour */
+       public int getBackgroundColourRGB() { return backgroundColourRGB; }
+       /** Set the RGB value for Background Colour */
+       public void setBackgroundColourRGB(int rgb) { backgroundColourRGB = rgb; }
+
+       /** Fetch the RGB value for Text And Lines Colour */
+       public int getTextAndLinesColourRGB() { return textAndLinesColourRGB; }
+       /** Set the RGB value for Text And Lines Colour */
+       public void setTextAndLinesColourRGB(int rgb) { textAndLinesColourRGB = rgb; }
+
+       /** Fetch the RGB value for Shadows Colour */
+       public int getShadowsColourRGB() { return shadowsColourRGB; }
+       /** Set the RGB value for Shadows Colour */
+       public void setShadowsColourRGB(int rgb) { shadowsColourRGB = rgb; }
+
+       /** Fetch the RGB value for Title Text Colour */
+       public int getTitleTextColourRGB() { return titleTextColourRGB; }
+       /** Set the RGB value for Title Text Colour */
+       public void setTitleTextColourRGB(int rgb) { titleTextColourRGB = rgb; }
+
+       /** Fetch the RGB value for Fills Colour */
+       public int getFillsColourRGB() { return fillsColourRGB; }
+       /** Set the RGB value for Fills Colour */
+       public void setFillsColourRGB(int rgb) { fillsColourRGB = rgb; }
+
+       /** Fetch the RGB value for Accent Colour */
+       public int getAccentColourRGB() { return accentColourRGB; }
+       /** Set the RGB value for Accent Colour */
+       public void setAccentColourRGB(int rgb) { accentColourRGB = rgb; }
+
+       /** Fetch the RGB value for Accent And Hyperlink Colour */
+       public int getAccentAndHyperlinkColourRGB()
+               { return accentAndHyperlinkColourRGB; }
+       /** Set the RGB value for Accent And Hyperlink Colour */
+       public void setAccentAndHyperlinkColourRGB(int rgb)
+                       { accentAndHyperlinkColourRGB = rgb; }
+
+       /** Fetch the RGB value for Accent And Following Hyperlink Colour */
+       public int getAccentAndFollowingHyperlinkColourRGB() 
+               { return accentAndFollowingHyperlinkColourRGB; }
+       /** Set the RGB value for Accent And Following Hyperlink Colour */
+       public void setAccentAndFollowingHyperlinkColourRGB(int rgb)
+                       { accentAndFollowingHyperlinkColourRGB = rgb; }
+
+       /* *************** record code follows ********************** */
+
+       /** 
+        * For the Colour Scheme (ColorSchem) Atom
+        */
+       protected ColorSchemeAtom(byte[] source, int start, int len) {
+               // Sanity Checking - we're always 40 bytes long
+               if(len < 40) {
+                       len = 40;
+                       if(source.length - start < 40) {
+                               throw new RuntimeException("Not enough data to form a ColorSchemeAtom (always 40 bytes long) - found " + (source.length - start));
+                       }
+               }
+
+               // Get the header
+               _header = new byte[8];
+               System.arraycopy(source,start,_header,0,8);
+
+               // Grab the rgb values
+               backgroundColourRGB = (int)LittleEndian.getInt(source,start+8+0);
+               textAndLinesColourRGB = (int)LittleEndian.getInt(source,start+8+4);
+               shadowsColourRGB = (int)LittleEndian.getInt(source,start+8+8);
+               titleTextColourRGB = (int)LittleEndian.getInt(source,start+8+12);
+               fillsColourRGB = (int)LittleEndian.getInt(source,start+8+16);
+               accentColourRGB = (int)LittleEndian.getInt(source,start+8+20);
+               accentAndHyperlinkColourRGB = (int)LittleEndian.getInt(source,start+8+24);
+               accentAndFollowingHyperlinkColourRGB = (int)LittleEndian.getInt(source,start+8+28);
+       }
+
+       /**
+        * We are of type 3999
+        */
+       public long getRecordType() { return _type; }
+
+
+       /**
+        * Convert from an integer RGB value to individual R, G, B 0-255 values
+        */
+       public static byte[] splitRGB(int rgb) {
+               byte[] ret = new byte[3];
+
+               // Serialise to bytes, then grab the right ones out
+               ByteArrayOutputStream baos = new ByteArrayOutputStream();
+               try {
+                       writeLittleEndian(rgb,baos);
+               } catch(IOException ie) {
+                       // Should never happen
+                       throw new RuntimeException(ie);
+               }
+               byte[] b = baos.toByteArray();
+               System.arraycopy(b,0,ret,0,3);
+
+               return ret;
+       }
+
+       /**
+        * Convert from split R, G, B values to an integer RGB value
+        */
+       public static int joinRGB(byte r, byte g, byte b) {
+               return joinRGB(new byte[] { r,g,b });
+       }
+       /**
+        * Convert from split R, G, B values to an integer RGB value
+        */
+       public static int joinRGB(byte[] rgb) {
+               if(rgb.length != 3) {
+                       throw new RuntimeException("joinRGB accepts a byte array of 3 values, but got one of " + rgb.length + " values!");
+               }
+               byte[] with_zero = new byte[4];
+               System.arraycopy(rgb,0,with_zero,0,3);
+               with_zero[3] = 0;
+               int ret = (int)LittleEndian.getInt(with_zero,0);
+               return ret;
+       }
+
+
+       /**
+        * Write the contents of the record back, so it can be written
+        *  to disk
+        */
+       public void writeOut(OutputStream out) throws IOException {
+               // Header - size or type unchanged
+               out.write(_header);
+
+               // Write out the rgb values
+               writeLittleEndian(backgroundColourRGB,out);
+               writeLittleEndian(textAndLinesColourRGB,out);
+               writeLittleEndian(shadowsColourRGB,out);
+               writeLittleEndian(titleTextColourRGB,out);
+               writeLittleEndian(fillsColourRGB,out);
+               writeLittleEndian(accentColourRGB,out);
+               writeLittleEndian(accentAndHyperlinkColourRGB,out);
+               writeLittleEndian(accentAndFollowingHyperlinkColourRGB,out);
+       }
+}
index c13be3a6e25d2ecaa5d0c32218868648dc7f2887..b1bbf77cf7537158b6577879ec161ed698ba2cd8 100644 (file)
@@ -173,6 +173,11 @@ public abstract class Record
                                toReturn = new PPDrawing(b,start,len);
                                break;
 
+                       // ColorSchemeAtom (Holds the colours that make up a colour scheme)
+                       case 2032:
+                               toReturn = new ColorSchemeAtom(b,start,len);
+                               break;
+
                        // TextHeaderAtom (Holds details on following text)
                        case 3999:
                                toReturn = new TextHeaderAtom(b,start,len);