Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
8b0efd7e
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8b0efd7e
编写于
4月 03, 2017
作者:
A
alitvinov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8167102: [macosx] PrintRequestAttributeSet breaks page size set using PageFormat
Reviewed-by: psadhukhan, prr
上级
1394065b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
240 addition
and
10 deletion
+240
-10
src/macosx/native/sun/awt/CPrinterJob.m
src/macosx/native/sun/awt/CPrinterJob.m
+2
-2
src/share/classes/sun/print/RasterPrinterJob.java
src/share/classes/sun/print/RasterPrinterJob.java
+0
-8
test/java/awt/print/PageFormat/WrongPaperPrintingTest.java
test/java/awt/print/PageFormat/WrongPaperPrintingTest.java
+238
-0
未找到文件。
src/macosx/native/sun/awt/CPrinterJob.m
浏览文件 @
8b0efd7e
...
...
@@ -365,7 +365,7 @@ static void javaPrinterJobToNSPrintInfo(JNIEnv* env, jobject srcPrinterJob, jobj
static JNF_MEMBER_CACHE(jm_getMaxPage, sjc_CPrinterJob, "getMaxPageAttrib", "()I");
static JNF_MEMBER_CACHE(jm_getSelectAttrib, sjc_CPrinterJob, "getSelectAttrib", "()I");
static JNF_MEMBER_CACHE(jm_getNumberOfPages, jc_Pageable, "getNumberOfPages", "()I");
static JNF_MEMBER_CACHE(jm_getPageFormat, sjc_CPrinterJob, "getPageFormat
FromAttributes", "(
)Ljava/awt/print/PageFormat;");
static JNF_MEMBER_CACHE(jm_getPageFormat, sjc_CPrinterJob, "getPageFormat
", "(I
)Ljava/awt/print/PageFormat;");
NSMutableDictionary* printingDictionary = [dst dictionary];
...
...
@@ -401,7 +401,7 @@ static void javaPrinterJobToNSPrintInfo(JNIEnv* env, jobject srcPrinterJob, jobj
[printingDictionary setObject:[NSNumber numberWithInteger:fromPage] forKey:NSPrintFirstPage];
[printingDictionary setObject:[NSNumber numberWithInteger:toPage] forKey:NSPrintLastPage];
jobject page = JNFCallObjectMethod(env, srcPrinterJob, jm_getPageFormat
);
jobject page = JNFCallObjectMethod(env, srcPrinterJob, jm_getPageFormat
, (jint)0);
if (page != NULL) {
javaPageFormatToNSPrintInfo(env, NULL, page, dst);
}
...
...
src/share/classes/sun/print/RasterPrinterJob.java
浏览文件 @
8b0efd7e
...
...
@@ -843,14 +843,6 @@ public abstract class RasterPrinterJob extends PrinterJob {
}
}
protected
PageFormat
getPageFormatFromAttributes
()
{
if
(
attributes
==
null
||
attributes
.
isEmpty
())
{
return
null
;
}
return
attributeToPageFormat
(
getPrintService
(),
this
.
attributes
);
}
/**
* Presents the user a dialog for changing properties of the
* print job interactively.
...
...
test/java/awt/print/PageFormat/WrongPaperPrintingTest.java
0 → 100644
浏览文件 @
8b0efd7e
/*
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
@bug 8167102
@summary PrintRequestAttributeSet breaks page size set using PageFormat
@run main/manual WrongPaperPrintingTest
*/
import
java.awt.BorderLayout
;
import
java.awt.Color
;
import
java.awt.FlowLayout
;
import
java.awt.Graphics
;
import
java.awt.event.WindowAdapter
;
import
java.awt.event.WindowEvent
;
import
java.awt.print.PageFormat
;
import
java.awt.print.Paper
;
import
java.awt.print.Printable
;
import
java.awt.print.PrinterException
;
import
java.awt.print.PrinterJob
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.TimeUnit
;
import
javax.print.attribute.HashPrintRequestAttributeSet
;
import
javax.print.attribute.PrintRequestAttributeSet
;
import
javax.print.attribute.Size2DSyntax
;
import
javax.print.attribute.standard.Chromaticity
;
import
javax.print.attribute.standard.MediaSize
;
import
javax.print.attribute.standard.MediaSizeName
;
import
javax.swing.JButton
;
import
javax.swing.JDialog
;
import
javax.swing.JLabel
;
import
javax.swing.JPanel
;
import
javax.swing.JTextArea
;
import
javax.swing.SwingUtilities
;
import
javax.swing.Timer
;
import
javax.swing.WindowConstants
;
public
class
WrongPaperPrintingTest
implements
Printable
{
private
static
final
CountDownLatch
testEndedSignal
=
new
CountDownLatch
(
1
);
private
static
final
int
testTimeout
=
300000
;
private
static
volatile
String
testFailureMsg
;
private
static
volatile
boolean
testPassed
;
private
static
volatile
boolean
testFinished
;
public
static
void
main
(
String
[]
args
)
{
SwingUtilities
.
invokeLater
(()
->
createAndShowTestDialog
());
try
{
if
(!
testEndedSignal
.
await
(
testTimeout
,
TimeUnit
.
MILLISECONDS
))
{
throw
new
RuntimeException
(
String
.
format
(
"Test timeout '%d ms' elapsed."
,
testTimeout
));
}
if
(!
testPassed
)
{
String
failureMsg
=
testFailureMsg
;
if
((
failureMsg
!=
null
)
&&
(!
failureMsg
.
trim
().
isEmpty
()))
{
throw
new
RuntimeException
(
failureMsg
);
}
else
{
throw
new
RuntimeException
(
"Test failed."
);
}
}
}
catch
(
InterruptedException
ie
)
{
throw
new
RuntimeException
(
ie
);
}
finally
{
testFinished
=
true
;
}
}
private
static
void
doTest
()
{
PrintRequestAttributeSet
aset
=
new
HashPrintRequestAttributeSet
();
aset
.
add
(
Chromaticity
.
MONOCHROME
);
MediaSize
isoA5Size
=
MediaSize
.
getMediaSizeForName
(
MediaSizeName
.
ISO_A5
);
float
[]
size
=
isoA5Size
.
getSize
(
Size2DSyntax
.
INCH
);
Paper
paper
=
new
Paper
();
paper
.
setSize
(
size
[
0
]
*
72.0
,
size
[
1
]
*
72.0
);
paper
.
setImageableArea
(
0.0
,
0.0
,
size
[
0
]
*
72.0
,
size
[
1
]
*
72.0
);
PageFormat
pf
=
new
PageFormat
();
pf
.
setPaper
(
paper
);
PrinterJob
job
=
PrinterJob
.
getPrinterJob
();
job
.
setPrintable
(
new
WrongPaperPrintingTest
(),
job
.
validatePage
(
pf
));
if
(
job
.
printDialog
())
{
try
{
job
.
print
(
aset
);
}
catch
(
PrinterException
pe
)
{
throw
new
RuntimeException
(
pe
);
}
}
}
private
static
void
pass
()
{
testPassed
=
true
;
testEndedSignal
.
countDown
();
}
private
static
void
fail
(
String
failureMsg
)
{
testFailureMsg
=
failureMsg
;
testPassed
=
false
;
testEndedSignal
.
countDown
();
}
private
static
String
convertMillisToTimeStr
(
int
millis
)
{
if
(
millis
<
0
)
{
return
"00:00:00"
;
}
int
hours
=
millis
/
3600000
;
int
minutes
=
(
millis
-
hours
*
3600000
)
/
60000
;
int
seconds
=
(
millis
-
hours
*
3600000
-
minutes
*
60000
)
/
1000
;
return
String
.
format
(
"%02d:%02d:%02d"
,
hours
,
minutes
,
seconds
);
}
private
static
void
createAndShowTestDialog
()
{
String
description
=
" To run this test it is required to have a virtual PDF\r\n"
+
" printer or any other printer supporting A5 paper size.\r\n"
+
"\r\n"
+
" 1. Verify that NOT A5 paper size is set as default for the\r\n"
+
" printer to be used.\r\n"
+
" 2. Click on \"Start Test\" button.\r\n"
+
" 3. In the shown print dialog select the printer and click\r\n"
+
" on \"Print\" button.\r\n"
+
" 4. Verify that a page with a drawn rectangle is printed on\r\n"
+
" a paper of A5 size which is (5.8 x 8.3 in) or\r\n"
+
" (148 x 210 mm).\r\n"
+
"\r\n"
+
" If the printed page size is correct, click on \"PASS\"\r\n"
+
" button, otherwise click on \"FAIL\" button."
;
final
JDialog
dialog
=
new
JDialog
();
dialog
.
setTitle
(
"WrongPaperPrintingTest"
);
dialog
.
setDefaultCloseOperation
(
WindowConstants
.
DISPOSE_ON_CLOSE
);
dialog
.
addWindowListener
(
new
WindowAdapter
()
{
@Override
public
void
windowClosing
(
WindowEvent
e
)
{
dialog
.
dispose
();
fail
(
"Main dialog was closed."
);
}
});
final
JLabel
testTimeoutLabel
=
new
JLabel
(
String
.
format
(
"Test timeout: %s"
,
convertMillisToTimeStr
(
testTimeout
)));
final
long
startTime
=
System
.
currentTimeMillis
();
final
Timer
timer
=
new
Timer
(
0
,
null
);
timer
.
setDelay
(
1000
);
timer
.
addActionListener
((
e
)
->
{
int
leftTime
=
testTimeout
-
(
int
)(
System
.
currentTimeMillis
()
-
startTime
);
if
((
leftTime
<
0
)
||
testFinished
)
{
timer
.
stop
();
dialog
.
dispose
();
}
testTimeoutLabel
.
setText
(
String
.
format
(
"Test timeout: %s"
,
convertMillisToTimeStr
(
leftTime
)));
});
timer
.
start
();
JTextArea
textArea
=
new
JTextArea
(
description
);
textArea
.
setEditable
(
false
);
final
JButton
testButton
=
new
JButton
(
"Start Test"
);
final
JButton
passButton
=
new
JButton
(
"PASS"
);
final
JButton
failButton
=
new
JButton
(
"FAIL"
);
testButton
.
addActionListener
((
e
)
->
{
testButton
.
setEnabled
(
false
);
new
Thread
(()
->
{
try
{
doTest
();
SwingUtilities
.
invokeLater
(()
->
{
passButton
.
setEnabled
(
true
);
failButton
.
setEnabled
(
true
);
});
}
catch
(
Throwable
t
)
{
t
.
printStackTrace
();
dialog
.
dispose
();
fail
(
"Exception occurred in a thread executing the test."
);
}
}).
start
();
});
passButton
.
setEnabled
(
false
);
passButton
.
addActionListener
((
e
)
->
{
dialog
.
dispose
();
pass
();
});
failButton
.
setEnabled
(
false
);
failButton
.
addActionListener
((
e
)
->
{
dialog
.
dispose
();
fail
(
"Size of a printed page is wrong."
);
});
JPanel
mainPanel
=
new
JPanel
(
new
BorderLayout
());
JPanel
labelPanel
=
new
JPanel
(
new
FlowLayout
());
labelPanel
.
add
(
testTimeoutLabel
);
mainPanel
.
add
(
labelPanel
,
BorderLayout
.
NORTH
);
mainPanel
.
add
(
textArea
,
BorderLayout
.
CENTER
);
JPanel
buttonPanel
=
new
JPanel
(
new
FlowLayout
());
buttonPanel
.
add
(
testButton
);
buttonPanel
.
add
(
passButton
);
buttonPanel
.
add
(
failButton
);
mainPanel
.
add
(
buttonPanel
,
BorderLayout
.
SOUTH
);
dialog
.
add
(
mainPanel
);
dialog
.
pack
();
dialog
.
setVisible
(
true
);
}
@Override
public
int
print
(
Graphics
g
,
PageFormat
pf
,
int
pageIndex
)
throws
PrinterException
{
if
(
pageIndex
==
0
)
{
g
.
setColor
(
Color
.
RED
);
g
.
drawRect
((
int
)
pf
.
getImageableX
(),
(
int
)
pf
.
getImageableY
(),
(
int
)
pf
.
getImageableWidth
(),
(
int
)
pf
.
getImageableHeight
());
return
Printable
.
PAGE_EXISTS
;
}
else
{
return
Printable
.
NO_SUCH_PAGE
;
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录