标签: pangocairo

GtkWindow和GdkWindow之间的区别?

在我的Gtk-Gdk-Cairo-Pango应用程序的开头,我创建了窗口:

GtkWidget   *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
Run Code Online (Sandbox Code Playgroud)

首先,有GtkWindow,但gtk_create_window返回GtkWidget,不是GtkWindow,为什么?

然后,一些功能,如gdk_window_process_updates(..)要求GdkWindow*.

gtk_window_set_geometry_hints()另一方面要求GtkWindow*.

在文档中也GdkWindow* gdk_window_new()有返回GdkWindow.

当然有文件说:

GdkWindow是屏幕上的矩形区域.它是一个低级对象,用于在GTK +级别实现高级对象,如GtkWidget和GtkWindow.GtkWindow是一个顶层窗口,用户可能会认为它是一个带有标题栏的"窗口"等等; 一个GtkWindow可能包含许多GdkWindow.

但它仍然没有告诉我,何时以及为什么我应该创建Gtk或Gdk窗口?这里的模式是什么?

现在你问,我想解决什么特别的问题?当然,我尝试在gtk + gdk之上使用cairo + pango在鼠标移动后立即绘制文本.问题是虽然实际绘图似乎表现得很快,但我无法像鼠标移动那样完成它.在我motion_notify_event刚刚调用的gtk_widget_queue_draw(GtkWidget)时候,实际鼠标在屏幕上移动有明显的滞后,即使我绘制单个字符,它在移动阶段也没有与鼠标指针对齐,只在鼠标停止后捕获它.

我尝试的是通过调用加速更新gdk_window_process_updates(GDK_WINDOW(window), false);,编译器吃它,但我得到了运行时断言:Gdk-CRITICAL **: gdk_window_process_updates: assertion 'GDK_IS_WINDOW (window)' failed.我找不到有关此宏的任何信息以及如何/何时使用它.

包括

#include <gtk/gtk.h>
#define TXT "1234567890"
int X = 0, Y = 0;
static void do_drawing(cairo_t *);
GtkWidget *window; …
Run Code Online (Sandbox Code Playgroud)

gtk pango cairo gdk pangocairo

11
推荐指数
1
解决办法
4727
查看次数

如何修复在 Linux/Fedora 31 上的 R 中未正确显示的度数符号

我制作的任何地图:

ggplot() + geom_sf()

生成预期的地图,但未正确显示度数符号,如下图所示。

带有错误度数符号的地图一角

这个答案中给出的答案 -地图轴标签中的度数符号不正确- 没有帮助,当我看到不同的标志时,我发布了一个单独的问题。

更改字体无济于事。

我还尝试sf在一个单独的项目中从 Github安装当前版本的(0.9) renv,但结果相同。

我在 Linux 上,Fedora 31。

复制:

library("ggplot2")
library("sf")
nc <- st_read(system.file("shape/nc.shp", package="sf"))

ggplot() +
  geom_sf(data = nc)
Run Code Online (Sandbox Code Playgroud)

2019-03-15 更新

该问题并非特定于 ggplot/geom_sf;正如评论中所建议的,我遇到了同样的问题plot.new(); text(0.5,0.5, bquote(120*degree*N), cex=5) 错误度数符号的附加示例

另外,澄清一下,我没有在?X11(). 如果我在我的终端中运行fc-match Symbol,我会得到:

StandardSymbolsPS.t1:“标准符号 PS”“常规”

更新 2019-03-19

在全新的 Fedora 31 和 Fedora 32 beta 安装中得到确认。可能是 Fedora 的问题。

我尝试使用不同的语言环境(包括例如“en_US.UTF-8”或“German”)和设备(例如cairo_pdf(), cairo_ps()),结果相同。

X11.options() 将“cairo”显示为类型(将其更改为 Xlib,或者 dbcairo 不会更改结果)。

使用TestChars()dww在下面的答案中提出的函数显示如下: 测试

但是,如果我用 knitr 编织到 pdf,我会得到大多数符号,包括°。

从pdf测试

如果我编织到 …

r pango plotmath pangocairo r-sf

8
推荐指数
2
解决办法
1161
查看次数

为Android NDK构建Pango Cairo

我发现有人在Pango Cairo上移植了Android NDK(博客文章源代码)。但是,我在编译他的示例项目方面还没有成功。有没有人设法做到这一点,并且可以告诉我我做错了什么?

到目前为止,这是我尝试过的:

  • git clone-递归http://dev.laptop.org/git/users/cscott/android-libs/
  • git由于某种原因找不到pixman,因此git clone http://cgit.freedesktop.org/pixman/并移至android-libs / jni / pixman
  • android-libs / jni /的内容复制到android-libs / examples / java-bitmap / jni(不确定要保留哪个Android.mk?)
  • java-bitmap / jni / Makefile.devel重命名为Makefile
  • 如下编辑了Java位图/ jni / Makefile:NDK = / cygdrive / f / android-ndk-r8b TOOLCHAIN = $(NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin
  • 试图在java-bitmap / jni中运行make

我收到以下错误:

checking for arm-linux-eabi-gcc... arm-linux-androideabi-gcc --sysroot /cygdrive/f/android-ndk-r8b/platforms/android-9/arch-arm -fpic -ffunction-sections -funwind-tables -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__  -mfpu=vfp …
Run Code Online (Sandbox Code Playgroud)

android pango cairo android-ndk pangocairo

6
推荐指数
1
解决办法
2474
查看次数

在 Cairo Surface 之前创建 Pango 布局

在我的应用程序中,我使用 Pango 和 Cairo 来创建文本纹理。这些纹理的宽度是固定的,但应缩放其高度以适合文本内容。然后,涉及这种情况的父对象将缩放其高度以匹配文本。

问题是,我初始化 Pango 和 Cairo 的方式不允许这样做。目前,该系统的设置是:

cairo_surface_t* cairoSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, sizeX, sizeY );
cairo_t* cairoContext = cairo_create( cairoSurface );
PangoLayout* pangoLayout = pango_cairo_create_layout( cairoContext );
Run Code Online (Sandbox Code Playgroud)

这固定了高度,至少是表面的高度——这是我不想做的事情,至少不是一直如此。

我的理解是,如果不指定布局高度,它会自动缩放高度,然后可以通过 找到pango_layout_get_size()。我想首先创建布局,然后使用此函数的输出来创建表面。

但是,pango_cairo_create_layout()需要已经创建表面,并且我一直无法找到通过开罗渲染布局的方法pango_layout_new()。API 文档中的渲染函数之一pango_cairo_update_layout(),指定pango_cairo_create_layout()必须用于创建布局;然而,更重要的功能,pango_cairo_show_layout(),没有这样的要求,我不确定这是否意味着允许任何 Pango 布局。虽然我可以测试它是否有效,但我担心反复试验可能会导致我出现未定义的行为。

我觉得我陷入了先有鸡还是先有蛋的困境,Pango 的文档主要是 API 参考,几乎没有解释该库的用途。有没有办法正确地做到这一点?

c++ text pango cairo pangocairo

6
推荐指数
1
解决办法
2066
查看次数

将 PangoCairo 与 PyGObject API 结合使用

我正在移植一个使用 Pango 将文本绘制到开罗表面的 Python2 脚本。使用带有pangocairo包的旧 PyGtk API 可以正常工作。我的系统 (Debian Jesse) 没有用于 PyGtk 的 Python3 软件包,而是使用带有 PyGObject API 的较新的 Gtk+ 库。

我想创建一个pangocairo.CairoContext对象,但新 API 中似乎缺少它。该PangoCairo包有一个create_context()函数,但它生成的PangoContext对象没有我需要的方法。

到目前为止,我有这个:

import cairo
from gi.repository import Pango
from gi.repository import PangoCairo

surf = cairo.ImageSurface(cairo.FORMAT_ARGB32, 8, 8)
ctx = cairo.Context(surf)
pctx = PangoCairo.create_context(ctx) # Creates a PangoContext
pctx.set_antialias(cairo.ANTIALIAS_SUBPIXEL) # This fails
Run Code Online (Sandbox Code Playgroud)

有效的旧 Python2 代码:

import cairo
import pango
import pangocairo

surf = cairo.ImageSurface(cairo.FORMAT_ARGB32, 8, 8)
ctx = cairo.Context(surf) …
Run Code Online (Sandbox Code Playgroud)

python pango pygobject pycairo pangocairo

5
推荐指数
1
解决办法
1610
查看次数

如何让Pango Cairo正确包装?

我在让Pango Cairo自言自语方面遇到了问题.下面是一些演示代码.我将布局的宽度设置为与红色矩形相同,所以我希望它包裹到红色矩形.实际上,它只是在每一行上放置一个单词,就好像宽度设置得非常小.如果我使用pango.WRAP_WORD_CHAR,我只能获得一行字符.

我究竟做错了什么?如何将布局包装到我指定的宽度?

编辑如果我将宽度设置为100000,则单词正确包装.这意味着set_width和构造参数使用不同的单位.有任何想法吗?

# -*- coding: utf-8 -*-
import sys

import cairo
import pango
import pangocairo

SIZE = 200
HALF = 100
QUARTER = 50

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, SIZE, SIZE)

context = cairo.Context(surface)
context.set_source_rgb(1, 0, 0)
context.rectangle(QUARTER, QUARTER, HALF, HALF)
context.fill()

context.set_source_rgb(1, 1, 0)

context.translate(QUARTER, QUARTER)

pangocairo_context = pangocairo.CairoContext(context)
layout = pangocairo_context.create_layout()

layout.set_width(HALF)
layout.set_alignment(pango.ALIGN_LEFT)
layout.set_wrap(pango.WRAP_WORD)
layout.set_font_description(pango.FontDescription("Arial 10"))
layout.set_text("The Quick Brown Fox Jumps Over The Piqued Gymnast")


pangocairo_context.update_layout(layout)
pangocairo_context.show_layout(layout)

context.show_page()

with file("test.png", "w") as op:
    surface.write_to_png(op)
Run Code Online (Sandbox Code Playgroud)

自动换行

pango cairo pycairo pangocairo

3
推荐指数
1
解决办法
2267
查看次数

AttributeError: 'module' 对象没有属性 'cairo_font_map_get_default'

如果我尝试从 cairo 网站运行此示例,则会得到:

AttributeError: 'module' object has no attribute 'cairo_font_map_get_default'
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些包裹?(我在 Ubuntu 14.04 上)

但是,我试图找到我需要的开发包,我找到的唯一答案是this,它从 GTK2 堆栈中推荐了一些东西,但如果有的话,我对 GTK3 感兴趣,而不是 2。

python pango cairo pycairo pangocairo

2
推荐指数
1
解决办法
1081
查看次数

使用 CAIRO 在单个 PDF 中包含多个页面?

我正在使用 c# 和 Cairo 创建一个 pdf 文件。我想制作一个多页的 pdf,但我找不到任何样本。我只找到了这个:http : //lists.cairographics.org/archives/cairo/ 2008-9月/014949.html

任何帮助或建议将不胜感激。

c# cairo pangocairo

1
推荐指数
1
解决办法
1979
查看次数

标签 统计

pangocairo ×8

pango ×7

cairo ×6

pycairo ×3

python ×2

android ×1

android-ndk ×1

c# ×1

c++ ×1

gdk ×1

gtk ×1

plotmath ×1

pygobject ×1

r ×1

r-sf ×1

text ×1