/* ==================================================================== | |
Licensed to the Apache Software Foundation (ASF) under one or more | |
contributor license agreements. See the NOTICE file distributed with | |
this work for additional information regarding copyright ownership. | |
The ASF licenses this file to You 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.hwmf.record; | |
/** | |
* A 16-bit unsigned integer that defines the mapping mode. | |
* | |
* The MapMode defines how logical units are mapped to physical units; | |
* that is, assuming that the origins in both the logical and physical coordinate systems | |
* are at the same point on the drawing surface, what is the physical coordinate (x',y') | |
* that corresponds to logical coordinate (x,y). | |
* | |
* For example, suppose the mapping mode is MM_TEXT. Given the following definition of that | |
* mapping mode, and an origin (0,0) at the top left corner of the drawing surface, logical | |
* coordinate (4,5) would map to physical coordinate (4,5) in pixels. | |
* | |
* Now suppose the mapping mode is MM_LOENGLISH, with the same origin as the previous | |
* example. Given the following definition of that mapping mode, logical coordinate (4,-5) | |
* would map to physical coordinate (0.04,0.05) in inches. | |
*/ | |
public enum HwmfMapMode { | |
/** | |
* Each logical unit is mapped to one device pixel. | |
* Positive x is to the right; positive y is down. | |
*/ | |
MM_TEXT(0x0001, 0), | |
/** | |
* Each logical unit is mapped to 0.1 millimeter. | |
* Positive x is to the right; positive y is up. | |
*/ | |
MM_LOMETRIC(0x0002, 254), | |
/** | |
* Each logical unit is mapped to 0.01 millimeter. | |
* Positive x is to the right; positive y is up. | |
*/ | |
MM_HIMETRIC(0x0003, 2540), | |
/** | |
* Each logical unit is mapped to 0.01 inch. | |
* Positive x is to the right; positive y is up. | |
*/ | |
MM_LOENGLISH(0x0004, 100), | |
/** | |
* Each logical unit is mapped to 0.001 inch. | |
* Positive x is to the right; positive y is up. | |
*/ | |
MM_HIENGLISH(0x0005, 1000), | |
/** | |
* Each logical unit is mapped to one twentieth (1/20) of a point. | |
* In printing, a point is 1/72 of an inch; therefore, 1/20 of a point is 1/1440 of an inch. | |
* This unit is also known as a "twip". | |
* Positive x is to the right; positive y is up. | |
*/ | |
MM_TWIPS(0x0006, 1440), | |
/** | |
* Logical units are mapped to arbitrary device units with equally scaled axes; | |
* that is, one unit along the x-axis is equal to one unit along the y-axis. | |
* The META_SETWINDOWEXT and META_SETVIEWPORTEXT records specify the units and the | |
* orientation of the axes. | |
* The processing application SHOULD make adjustments as necessary to ensure the x and y | |
* units remain the same size. For example, when the window extent is set, the viewport | |
* SHOULD be adjusted to keep the units isotropic. | |
*/ | |
MM_ISOTROPIC(0x0007, -1), | |
/** | |
* Logical units are mapped to arbitrary units with arbitrarily scaled axes. | |
*/ | |
MM_ANISOTROPIC(0x0008, -1); | |
/** | |
* native flag | |
*/ | |
public final int flag; | |
/** | |
* transformation units - usually scale relative to current dpi. | |
* when scale == 0, then don't scale | |
* when scale == -1, then scale relative to window dimension. | |
*/ | |
public final int scale; | |
HwmfMapMode(int flag, int scale) { | |
this.flag = flag; | |
this.scale = scale; | |
} | |
static HwmfMapMode valueOf(int flag) { | |
for (HwmfMapMode mm : values()) { | |
if (mm.flag == flag) return mm; | |
} | |
return MM_ISOTROPIC; | |
} | |
} |