我想找到CSS像素和设备像素之间的比例.
编辑:我应该意识到这只是缩放级别.我已经添加了关于缩放级别的规范参考的答案.
CSS像素是我们几乎用于所有事物的单位 - 它是element.style.width,element.clientWidth,element.offsetWidth等的含义.设备像素是浏览器实际绘制的像素.在设备像素中测量一些属性,例如window.screen.width,其是在用户放大时不改变的屏幕尺寸(例如1024).
动机:当用户放大时,我想增加画布的宽度和高度(同时保持style.width和style.height相同的CSS像素值),scale()上下文,并在更加清晰的放大画布上重绘.
我在Surfin的Safari上读过Quirksmode的两个视口故事和高DPI,但他们都没有说如何获得这个比例.到目前为止,我唯一的想法是收集mousemoves并测量event.clientX中的更改除以event.screenX中的更改,或以编程方式创建媒体查询moz--min-device-pixel-ratio,使用getComputedStyle(),测试规则是否匹配,并使用二进制搜索缩小规模.我希望有一种更容易/更可靠的方式.
编辑:我尝试使用@media (-webkit-min-device-pixel-ratio:1)Chrome,Safari和Firefox 4 的查询,显然Webkit将属性视为一个恒定的设备像素到屏幕像素比率(不随缩放而变化),而Firefox 4将其视为设备像素与CSS像素比率(放大时会增加).因此在Firefox 4中,我可以使用二进制搜索发现CSS像素/设备像素比率,但不能使用Webkit.
所有std::sync::atomic::AtomicBool采用内存排序的方法(Relaxed,Release,Acquire,AcqRel和SeqCst),我以前没用过.在什么情况下应该使用这些值?该文档使用令人困惑的"加载"和"存储"术语,我并不理解.例如:
生成器线程改变由a持有的某个状态Mutex,然后调用AtomicBool: compare_and_swap(false, true, ordering):(以合并失效),如果它交换,则将"无效"消息发布到并发队列(例如,mpsc或winapi PostMessage).消费者线程重置AtomicBool,从队列中读取,并读取互斥锁持有的状态.生产者是否可以使用轻松排序,因为它之前是互斥锁,或者必须使用Release?消费者可以使用store(false, Relaxed)或必须使用它compare_and_swap(true, false, Acquire)来接收来自互斥锁的更改吗?
如果生产者和消费者共享一个RefCell而不是一个Mutex?
来自Python,我喜欢Coffeescript从Python和Perl借用的许多功能(范围/切片,理解,解构分配).Coffeescript中是否存在模仿Python enumerate或zip(itertools.izip)函数的语法糖?
以下是我不太关心的模式:
# an enumerate call would be helpful here
i = 0
for x in arr
... use x and i ...
i++
Run Code Online (Sandbox Code Playgroud)
和
# a zip would be useful here
n = Math.min(arr1.length,arr2.length)
for i in 0...n
x = arr1[i]; y = arr2[i]
... use x and y ...
Run Code Online (Sandbox Code Playgroud) 为什么Drop方法有签名fn drop(&mut self)而不是fn drop(self)?这使得很难将值移出字段,例如self.join_handle.join()或std::mem::drop(self.file)(错误:不能移出类型X,这定义了Drop特征).
我正在使用java.awt.Robot我的Swing应用程序的集成测试,但是我无法以正确的顺序运行我的操作.robot.mousePressed(...)在Swing完成调度该事件之前,如何告诉调用阻塞的线程?显然,robot.setAutoWaitForIdle(true)没有好处.
这是我的演示.我期待"机器人完成!" 消息总是在"动作完成阻止"之后出现,但相反,它经常发生得太快.
import java.awt.AWTException;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.sql.Date;
import java.text.DateFormat;
import java.util.logging.ConsoleHandler;
import java.util.logging.Formatter;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class RobotWaitForIdleDemo {
/**
* Create the device that contains the given point in screen coordinates.
* Robot has to be constructed differently for each monitor. …Run Code Online (Sandbox Code Playgroud) 有没有办法调用子进程,以便它及其所有后代发送一个中断,就像你Ctrl-C前台任务一样?我正在尝试杀死一个调用一个长期运行的孩子的启动器脚本.我已经尝试过kill -SIGINT $child(它不会向其后代发送中断,因此是无操作)和kill -SIGINT -$child(在交互式调用时有效但在脚本中运行时无效).
这是一个测试脚本.长期运行的脚本是test.sh --child.当你打电话时test.sh --parent,它会调用test.sh --child &然后尝试杀死它.如何让父母成功杀死孩子?
#!/bin/bash
if [ "$1" = "--child" ]; then
sleep 1000
elif [ "$1" = "--parent" ]; then
"$0" --child &
for child in $(jobs -p); do
echo kill -SIGINT "-$child" && kill -SIGINT "-$child"
done
wait $(jobs -p)
else
echo "Must be invoked with --child or --parent."
fi
Run Code Online (Sandbox Code Playgroud)
我知道你可以修改长时间运行的子trap信号,将它们发送到它的子进程,然后等待(从
Bash脚本杀死Ctrl + C上的背景(大)子),但有没有办法不修改子脚本?
我正在尝试使用OpenDyslexic作为Swing应用程序中的字体选项.但令人惊讶的是,OpenDyslexic看起来比同一点大小的任何其他字体大得多,即使它在其他应用程序中看起来通常很大.我尝试了一些其他OpenType字体,它们看起来并不特别大或小.为什么OpenDyslexic在Java中如此之大,如何让Java正常大小以便我不需要特殊情况下OpenDyslexic的大小?
在所有操作系统上的Oracle JRE(我试过1.7.0_11,1.7.0_15和最新的1.7.0_21)上,当Java加载字体文件时,字体太大了Font.createFont.但是,当我将字体安装到操作系统中时,所有3个平台上的行为都不同:
~/.fonts没有用.在安装字体之前和安装后,屏幕截图看起来一样.更新:有趣的是,OpenJDK(Linux中的7u21 Ubuntu软件包和OS X上的obuildfactory构建版本)都没有出现这个bug.OpenFDK上的15pt OpenDyslexic'm'应该是15px宽,无论是从文件创建字体还是由操作系统处理字体时都是如此.该错误发布在最新的Oracle JRE中,但不在最新的OpenJDK中.
这是我的示例程序.请注意,要尝试它,您需要将OpenDyslexic文件放入资源/.或者,将OpenDyslexic安装到您的系统中并取出registerFonts()呼叫.

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
public class FontFrame …Run Code Online (Sandbox Code Playgroud) 基本上,我想编写一个返回闭包的函数.我怎么能这样做而不必返回Box<FnOnce(u32)>?
从Rust书的闭包章节,我读到一个闭包只是一个结构的语法糖和一个impl FnOnce.这是我的尝试:
#[derive(Debug)]
struct MyError {
code: u32,
location: &'static str,
}
// Here is my closure:
struct MyErrorPartial {
location: &'static str,
}
impl FnOnce(u32) for MyErrorPartial {
type Output = MyError;
fn call_once(self, args: u32) -> MyError {
MyError {
code: args,
location: self.location,
}
}
}
fn error_at(location: &'static str) -> MyErrorPartial {
MyErrorPartial {location: location}
}
fn function_returning_code() -> Result<(), u32> {
Err(123)
}
fn function_with_error() -> Result<(), …Run Code Online (Sandbox Code Playgroud) 使用 javax.xml.XMLStreamWriter 时,有什么方法可以保留属性中的空格吗?我知道 XMLStreamReader 将执行Attribute-Value Normalization,将\r\n\tXML 转换为空格,因此编写者需要发出实体引用(例如 )以保留空格。有什么方法可以告诉作者对空白使用实体引用吗?我可以自己添加对属性的实体引用吗?
以下 JUnit3 测试通过。当我编码时"Hello,\r\n\tworld",我想得到同样的东西。但相反,解码后的值为"Hello world"(两个空格)。
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.stream.*;
import junit.framework.TestCase;
public class XmlStreamTest extends TestCase {
public void testAttribute() throws XMLStreamException {
StringWriter stringWriter = new StringWriter();
XMLStreamWriter xmlStreamWriter = XMLOutputFactory.newFactory().createXMLStreamWriter(stringWriter);
xmlStreamWriter.writeStartDocument();
xmlStreamWriter.writeStartElement("root");
xmlStreamWriter.writeAttribute("a", "Hello,\r\n\tWorld! ");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.writeEndDocument();
xmlStreamWriter.close();
assertEquals("<?xml version=\"1.0\" ?><root a=\"Hello,\r\n\tWorld! \"></root>", stringWriter.toString());
StringReader stringReader = new StringReader(stringWriter.toString());
XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(stringReader);
assertEquals(XMLStreamConstants.START_DOCUMENT, xmlStreamReader.getEventType());
assertEquals(XMLStreamConstants.START_ELEMENT, xmlStreamReader.next());
// This is …Run Code Online (Sandbox Code Playgroud) 我为一个名为ASN.1的文件格式编写了一个解析器,它使用Guice TypeLiteral.getFieldType(Field)将通用字段转换为特定的Java类型,因此我可以构造正确的类型(类似于Jackson或GSON数据绑定).但由于我已经依赖Guava并且它似乎有一个新的TypeLiteral替代品,我想改为使用TypeToken.根据Guave TypeToken文档:
TypeToken类似于Guice的TypeLiteral类,但有一个重要的区别:它支持非实现类型,如T,List<T>甚至List<? extends Number>; 而TypeLiteral不是.TypeToken也是可序列化的,并提供了许多额外的实用方法.
你能用一个字段的具体类型TypeToken吗?换句话说,我怎样才能在番石榴中做到以下几点?
import org.junit.Test;
import com.google.inject.TypeLiteral;
public class FieldTypeTest {
public static class A<T> {
T a;
}
public static class B {
A<String> b;
}
@Test
public void testTypeToken() throws SecurityException, NoSuchFieldException {
TypeLiteral<?> reifiedA = TypeLiteral.get(B.class).getFieldType(B.class.getDeclaredField("b"));
assertEquals(String.class, reifiedA.getFieldType(reifiedA.getRawType().getDeclaredField("a")).getRawType());
}
}
Run Code Online (Sandbox Code Playgroud)