write_xlsx 1.08.1 → 1.09.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +10 -0
- data/Changes +17 -0
- data/README.md +1 -1
- data/examples/background.rb +19 -0
- data/examples/ignore_errors.rb +39 -0
- data/examples/keep_leading_zeros.rb +17 -0
- data/lib/write_xlsx/chart/axis.rb +3 -3
- data/lib/write_xlsx/chart/scatter.rb +0 -15
- data/lib/write_xlsx/chart/series.rb +1 -1
- data/lib/write_xlsx/chart.rb +28 -28
- data/lib/write_xlsx/chartsheet.rb +3 -3
- data/lib/write_xlsx/drawing.rb +39 -39
- data/lib/write_xlsx/format.rb +11 -179
- data/lib/write_xlsx/package/app.rb +2 -2
- data/lib/write_xlsx/package/button.rb +8 -8
- data/lib/write_xlsx/package/comments.rb +8 -8
- data/lib/write_xlsx/package/content_types.rb +18 -9
- data/lib/write_xlsx/package/core.rb +5 -5
- data/lib/write_xlsx/package/custom.rb +2 -2
- data/lib/write_xlsx/package/metadata.rb +159 -0
- data/lib/write_xlsx/package/packager.rb +21 -0
- data/lib/write_xlsx/package/shared_strings.rb +6 -6
- data/lib/write_xlsx/package/styles.rb +11 -11
- data/lib/write_xlsx/package/table.rb +23 -23
- data/lib/write_xlsx/package/theme.rb +1 -1
- data/lib/write_xlsx/package/vml.rb +43 -43
- data/lib/write_xlsx/shape.rb +17 -15
- data/lib/write_xlsx/sparkline.rb +340 -340
- data/lib/write_xlsx/utility.rb +4 -23
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +171 -644
- data/lib/write_xlsx/worksheet/cell_data.rb +25 -3
- data/lib/write_xlsx/worksheet/data_validation.rb +20 -20
- data/lib/write_xlsx/worksheet/hyperlink.rb +4 -4
- data/lib/write_xlsx/worksheet/page_setup.rb +12 -12
- data/lib/write_xlsx/worksheet.rb +267 -4144
- data/test/perl_output/background.xlsx +0 -0
- data/test/perl_output/ignore_errors.xlsx +0 -0
- data/test/perl_output/keep_leading_zeros.xlsx +0 -0
- data/test/perl_output/multi_line.xlsx +0 -0
- data/test/regression/images/logo.gif +0 -0
- data/test/regression/images/logo.jpg +0 -0
- data/test/regression/images/red.gif +0 -0
- data/test/regression/test_background01.rb +23 -0
- data/test/regression/test_background02.rb +23 -0
- data/test/regression/test_background03.rb +24 -0
- data/test/regression/test_background04.rb +25 -0
- data/test/regression/test_background05.rb +25 -0
- data/test/regression/test_background06.rb +31 -0
- data/test/regression/test_background07.rb +37 -0
- data/test/regression/test_chart_axis47.rb +52 -0
- data/test/regression/test_chart_axis48.rb +53 -0
- data/test/regression/test_dynamic_array01.rb +25 -0
- data/test/regression/test_image56.rb +23 -0
- data/test/regression/test_image57.rb +23 -0
- data/test/regression/test_set_column10.rb +55 -0
- data/test/regression/test_set_column11.rb +48 -0
- data/test/regression/test_set_row01.rb +35 -0
- data/test/regression/test_set_row02.rb +35 -0
- data/test/regression/test_set_row03.rb +35 -0
- data/test/regression/test_set_row04.rb +35 -0
- data/test/regression/xlsx_files/background01.xlsx +0 -0
- data/test/regression/xlsx_files/background02.xlsx +0 -0
- data/test/regression/xlsx_files/background03.xlsx +0 -0
- data/test/regression/xlsx_files/background04.xlsx +0 -0
- data/test/regression/xlsx_files/background05.xlsx +0 -0
- data/test/regression/xlsx_files/background06.xlsx +0 -0
- data/test/regression/xlsx_files/background07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis47.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis48.xlsx +0 -0
- data/test/regression/xlsx_files/dynamic_array01.xlsx +0 -0
- data/test/regression/xlsx_files/image56.xlsx +0 -0
- data/test/regression/xlsx_files/image57.xlsx +0 -0
- data/test/regression/xlsx_files/set_row01.xlsx +0 -0
- data/test/regression/xlsx_files/set_row03.xlsx +0 -0
- data/test/test_example_match.rb +73 -0
- data/test/worksheet/test_pixels_to_row_col.rb +46 -0
- metadata +86 -2
@@ -117,8 +117,8 @@ module Writexlsx
|
|
117
117
|
)
|
118
118
|
elsif user_data[:total_string]
|
119
119
|
total_label_only(
|
120
|
-
|
121
|
-
|
120
|
+
@row2, col_num, col_data, user_data[:total_string], user_data[:format]
|
121
|
+
)
|
122
122
|
end
|
123
123
|
|
124
124
|
# Get the dxf format index.
|
@@ -181,7 +181,7 @@ module Writexlsx
|
|
181
181
|
row1, row2 = row2, row1 if row1 > row2
|
182
182
|
col1, col2 = col2, col1 if col1 > col2
|
183
183
|
|
184
|
-
|
184
|
+
# The final hash contains the validation parameters.
|
185
185
|
param ||= {}
|
186
186
|
|
187
187
|
# Turn on Excel's defaults.
|
@@ -208,17 +208,17 @@ module Writexlsx
|
|
208
208
|
# List of valid input parameters.
|
209
209
|
def valid_table_parameter
|
210
210
|
[
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
211
|
+
:autofilter,
|
212
|
+
:banded_columns,
|
213
|
+
:banded_rows,
|
214
|
+
:columns,
|
215
|
+
:data,
|
216
|
+
:first_column,
|
217
|
+
:header_row,
|
218
|
+
:last_column,
|
219
|
+
:name,
|
220
|
+
:style,
|
221
|
+
:total_row
|
222
222
|
]
|
223
223
|
end
|
224
224
|
|
@@ -331,12 +331,12 @@ module Writexlsx
|
|
331
331
|
xmlns = "#{schema}spreadsheetml/2006/main"
|
332
332
|
|
333
333
|
attributes = [
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
334
|
+
['xmlns', xmlns],
|
335
|
+
['id', id],
|
336
|
+
['name', @name],
|
337
|
+
['displayName', @name],
|
338
|
+
['ref', @range]
|
339
|
+
]
|
340
340
|
|
341
341
|
unless ptrue?(@header_row_count)
|
342
342
|
attributes << ['headerRowCount', 0]
|
@@ -378,9 +378,9 @@ module Writexlsx
|
|
378
378
|
#
|
379
379
|
def write_table_column(col_data)
|
380
380
|
attributes = [
|
381
|
-
|
382
|
-
|
383
|
-
|
381
|
+
['id', col_data.id],
|
382
|
+
['name', col_data.name]
|
383
|
+
]
|
384
384
|
|
385
385
|
if ptrue?(col_data.total_string)
|
386
386
|
attributes << [:totalsRowLabel, col_data.total_string]
|
@@ -36,7 +36,7 @@ module Writexlsx
|
|
36
36
|
#
|
37
37
|
def write_theme_file
|
38
38
|
theme =
|
39
|
-
%Q{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
39
|
+
%Q{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
40
40
|
<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:shade val="51000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="80000"><a:schemeClr val="phClr"><a:shade val="93000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="94000"/><a:satMod val="135000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme>}
|
41
41
|
@writer.write(theme)
|
42
42
|
end
|
@@ -37,8 +37,8 @@ module Writexlsx
|
|
37
37
|
end
|
38
38
|
unless comments_data.empty?
|
39
39
|
write_shape_type_and_shape(
|
40
|
-
|
41
|
-
|
40
|
+
comments_data,
|
41
|
+
vml_shape_id, z_index) do
|
42
42
|
write_comment_shapetype
|
43
43
|
end
|
44
44
|
end
|
@@ -84,9 +84,9 @@ module Writexlsx
|
|
84
84
|
def xml_attributes
|
85
85
|
schema = 'urn:schemas-microsoft-com:'
|
86
86
|
[
|
87
|
-
|
88
|
-
|
89
|
-
|
87
|
+
['xmlns:v', "#{schema}vml"],
|
88
|
+
['xmlns:o', "#{schema}office:office"],
|
89
|
+
['xmlns:x', "#{schema}office:excel"]
|
90
90
|
]
|
91
91
|
end
|
92
92
|
|
@@ -95,8 +95,8 @@ module Writexlsx
|
|
95
95
|
#
|
96
96
|
def write_shapelayout(data_id)
|
97
97
|
attributes = [
|
98
|
-
|
99
|
-
|
98
|
+
['v:ext', 'edit']
|
99
|
+
]
|
100
100
|
|
101
101
|
@writer.tag_elements('o:shapelayout', attributes) do
|
102
102
|
# Write the o:idmap element.
|
@@ -121,10 +121,10 @@ module Writexlsx
|
|
121
121
|
#
|
122
122
|
def write_comment_shapetype
|
123
123
|
attributes = [
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
124
|
+
['id', '_x0000_t202'],
|
125
|
+
['coordsize', '21600,21600'],
|
126
|
+
['o:spt', 202],
|
127
|
+
['path', 'm,l,21600r21600,l21600,xe']
|
128
128
|
]
|
129
129
|
|
130
130
|
@writer.tag_elements('v:shapetype', attributes) do
|
@@ -140,11 +140,11 @@ module Writexlsx
|
|
140
140
|
#
|
141
141
|
def write_button_shapetype
|
142
142
|
attributes = [
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
143
|
+
['id', '_x0000_t201'],
|
144
|
+
['coordsize', '21600,21600'],
|
145
|
+
['o:spt', 201],
|
146
|
+
['path', 'm,l,21600r21600,l21600,xe']
|
147
|
+
]
|
148
148
|
|
149
149
|
@writer.tag_elements('v:shapetype', attributes) do
|
150
150
|
# Write the v:stroke element.
|
@@ -169,14 +169,14 @@ module Writexlsx
|
|
169
169
|
stroked = 'f'
|
170
170
|
|
171
171
|
attributes = [
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
172
|
+
['id', id],
|
173
|
+
['coordsize', coordsize],
|
174
|
+
['o:spt', spt],
|
175
|
+
['o:preferrelative', o_preferrelative],
|
176
|
+
['path', path],
|
177
|
+
['filled', filled],
|
178
|
+
['stroked', stroked]
|
179
|
+
]
|
180
180
|
|
181
181
|
@writer.tag_elements('v:shapetype', attributes) do
|
182
182
|
# Write the v:stroke element.
|
@@ -198,12 +198,12 @@ module Writexlsx
|
|
198
198
|
#
|
199
199
|
def write_button_path
|
200
200
|
attributes = [
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
201
|
+
['shadowok', 'f'],
|
202
|
+
['o:extrusionok', 'f'],
|
203
|
+
['strokeok', 'f'],
|
204
|
+
['fillok', 'f'],
|
205
|
+
['o:connecttype', 'rect']
|
206
|
+
]
|
207
207
|
@writer.empty_tag('v:path', attributes)
|
208
208
|
end
|
209
209
|
|
@@ -216,10 +216,10 @@ module Writexlsx
|
|
216
216
|
connecttype = 'rect'
|
217
217
|
|
218
218
|
attributes = [
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
219
|
+
['o:extrusionok', extrusionok],
|
220
|
+
['gradientshapeok', gradientshapeok],
|
221
|
+
['o:connecttype', connecttype]
|
222
|
+
]
|
223
223
|
|
224
224
|
@writer.empty_tag('v:path', attributes)
|
225
225
|
end
|
@@ -229,9 +229,9 @@ module Writexlsx
|
|
229
229
|
#
|
230
230
|
def write_shapetype_lock
|
231
231
|
attributes = [
|
232
|
-
|
233
|
-
|
234
|
-
|
232
|
+
['v:ext', 'edit'],
|
233
|
+
['shapetype', 't']
|
234
|
+
]
|
235
235
|
@writer.empty_tag('o:lock', attributes)
|
236
236
|
end
|
237
237
|
|
@@ -240,9 +240,9 @@ module Writexlsx
|
|
240
240
|
#
|
241
241
|
def write_rotation_lock
|
242
242
|
attributes = [
|
243
|
-
|
244
|
-
|
245
|
-
|
243
|
+
['v:ext', 'edit'],
|
244
|
+
['rotation', 't']
|
245
|
+
]
|
246
246
|
@writer.empty_tag('o:lock', attributes)
|
247
247
|
end
|
248
248
|
|
@@ -254,9 +254,9 @@ module Writexlsx
|
|
254
254
|
aspectratio = 't'
|
255
255
|
|
256
256
|
attributes = [
|
257
|
-
|
258
|
-
|
259
|
-
|
257
|
+
['v:ext', ext],
|
258
|
+
['aspectratio', aspectratio]
|
259
|
+
]
|
260
260
|
|
261
261
|
@writer.empty_tag('o:lock', attributes)
|
262
262
|
end
|
data/lib/write_xlsx/shape.rb
CHANGED
@@ -154,15 +154,17 @@ module Writexlsx
|
|
154
154
|
# EMUs per point. Therefore, 12,700 * 3 /4 = 9,525 EMUs per pixel.
|
155
155
|
#
|
156
156
|
def calc_position_emus(worksheet)
|
157
|
-
c_start, r_start,
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
157
|
+
c_start, r_start,
|
158
|
+
xx1, yy1, c_end, r_end,
|
159
|
+
xx2, yy2, x_abslt, y_abslt =
|
160
|
+
worksheet.position_object_pixels(
|
161
|
+
@column_start,
|
162
|
+
@row_start,
|
163
|
+
@x_offset,
|
164
|
+
@y_offset,
|
165
|
+
@width * @scale_x,
|
166
|
+
@height * @scale_y
|
167
|
+
)
|
166
168
|
|
167
169
|
# Now that x2/y2 have been calculated with a potentially negative
|
168
170
|
# width/height we use the absolute value and convert to EMUs.
|
@@ -297,12 +299,12 @@ module Writexlsx
|
|
297
299
|
|
298
300
|
def dimensions
|
299
301
|
[
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
302
|
+
@column_start, @row_start,
|
303
|
+
@x1, @y1,
|
304
|
+
@column_end, @row_end,
|
305
|
+
@x2, @y2,
|
306
|
+
@x_abs, @y_abs,
|
307
|
+
@width_emu, @height_emu
|
306
308
|
]
|
307
309
|
end
|
308
310
|
end
|