ctrl目录下agg_slider_ctrl的基本使用

引言:

在agg/examples目录下,提供的很多例子都携带滚动条的,并且通过滚动条,可以动态看到图像色彩的渐变过程。因此一下agg::slider_ctrl工具类。

图形:

/*

*(x2,y2)

*     *

*             *

*                 *

*                       *

*                           *

*                               *

*                                     *

(x1,y1)**************************************(x2,y1)

*/

函数:

构造函数:slider_ctrl(double x1, double y1, doublex2, double y2, bool flip_y=false)

m_slider1.range(1, 100);//设置滚动条的取值范围

m_slider1.num_steps(10);//设置滚动条的步宽,

m_slider1.value(1.0);//设置初始值

m_slider1.label("Pixel size=%1.0f");//显示当前滚动条的值

m_slider1.no_transform();//不允许缩放

int nScaleX =m_slider1.value();//获取当前值

1)添加头文件

#include "agg/include/ctrl/agg_slider_ctrl.h"

2)定义:

agg::slider_ctrl<agg::rgba8>   m_slider1;

3)添加到事件响应列表

添加到windows platform例子中:

add_ctrl(m_slider1);

/*

通过上面的函数,将控件元素添加到事件监听列表中,当鼠标或者键盘发生事件的时候

,会传递给该控件,由该控件判断是否是属于自己的事件(是否正在滑动滚动条)。

通过注释该函数,作者可体会到,滑动进度条,没有任何的反映。

*/

4)渲染控件

agg::render_ctrl(ras, sl, renb, m_slider1);

5)由于是把代码放在on_draw,需要强行刷新

force_redraw();

简单的应用例子如下:

#include "agg/include/agg_basics.h"

#include "agg/include/agg_conv_curve.h"

#include "agg/include/agg_trans_perspective.h"

#include "agg/include/agg_renderer_scanline.h"

#include "agg/include/agg_rendering_buffer.h"

#include "agg/include/agg_rasterizer_scanline_aa.h"

#include "agg/include/agg_scanline_u.h"

#include "agg/include/agg_pixfmt_rgb.h"

#include "agg/include/platform/agg_platform_support.h"

#include "agg/include/agg_ellipse.h"

#include "agg/include/agg_conv_contour.h"

#include "agg/include/agg_conv_stroke.h"

#include "agg/include/agg_renderer_base.h"

#include "agg/include/agg_path_storage.h"

#include "agg/include/ctrl/agg_slider_ctrl.h"

class the_application:public agg::platform_support

{

public:

the_application(agg::pix_format_e format, bool flip_y):agg::platform_support(format,flip_y),pix_fmt(rbuf_window()),ren_bas(pix_fmt),

m_slider1(80, 250,    600-10, 276,    !flip_y),

{

add_ctrl(m_slider1);

m_slider1.range(1.0, 100.0);

m_slider1.num_steps(10);

m_slider1.value(1.0);

m_slider1.label("Pixel size=%1.0f");

m_slider1.no_transform();

}

void draw_ellipse()

{

//Rendering Buffer渲染的内存块,就是即将显示界面的颜色内存块,其中agg::rendering_buffer

//类提供了一系列直接操作某一个坐标点颜色的函数,例如row_ptr();

agg::rendering_buffer &rbuf = rbuf_window();

agg::pixfmt_bgr24 pixf(rbuf);

agg::rgba8 color(255,0,0);

agg::rgba c(344,1);

//Renderers渲染器,我们可以看成是油漆,颜料,

typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;

renderer_base_type renb(pixf);

//Scanline Rasterizer光栅化,说她是画册,描述了所有我们即将描绘图案,颜色,线条,

//但是并不切确,因为她只是一个容器,一个记载线段,标志,详细参数的规格说明书,

//连草图都不是,她更像是一张菜谱,里面记录了食材,记录了烹饪的过程,仅此而已。

agg::rasterizer_scanline_aa<> ras;

agg::scanline_u8 sl;

ren_bas.clear(agg::rgba8(255,255,255));

int nScaleX = 0;

int nScaleY = 0;

agg::path_storage ps;

ps.move_to(300,300);

ps.line_to(320,300);

ps.line_to(320,320);

ps.line_to(300,320);

ps.line_to(300,300);

nScaleX = int(m_slider1.value())/10;

nScaleY = int(m_slider2.value())/10;

agg::trans_affine mtx;

mtx.scale(nScaleX,nScaleY); //x轴缩小到原来的一半

// mtx.rotate(agg::deg2rad(40));//旋转30度

mtx.translate(-320*(nScaleX-1) ,-320*(nScaleY-1));//X,Y坐标分别平移100

typedef agg::conv_transform<agg::path_storage> ell_ct_type;

ell_ct_type ctell(ps,mtx); //矩阵变换

typedef agg::conv_stroke<ell_ct_type> ell_cc_cs_type;

ell_cc_cs_type csccell(ctell);

ras.add_path(csccell);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));

ras.reset();

// Render the controls

agg::render_ctrl(ras, sl, renb, m_slider1);

return;

}

virtual void on_draw()

{

draw_ellipse();

}

virtual void on_mouse_button_down(int x, int y, unsigned flags)

{

if (flags == agg::mouse_left)

{

char str[50];

sprintf(str,"Mouse location:(%d,%d)", x, y);

message(str);

}

}

private:

agg::slider_ctrl<agg::rgba8> m_slider1;

agg::pixfmt_rgb24 pix_fmt;

agg::renderer_base<agg::pixfmt_rgb24> ren_bas;

};

int agg_main(int argc, char* argv[])

{

the_application app(agg::pix_format_bgr24,false);

app.caption("AGG Example.Anti_Aliasing Demo");

if (app.init(1800, 1800, agg::window_resize))

{

return app.run();

}

return -1;

}

时间: 2024-10-12 07:17:19

ctrl目录下agg_slider_ctrl的基本使用的相关文章

windows下查找一个目录下所有文件内容

遇到这个问题的背景是我反编译了一个apk,得到了它的source code.我在jd-gui中查找一个String时,发现查找结果严重不全,于是我想,如果不用jd-gui自带的搜索功能,而直接从源码文件夹中查找这个String就好了. 但windows自带的查找功能,只能查找目录下的文件名,而无法查找文件内容.总不能把文件一个一个都打开,然后挨个find一遍吧? 办法总是有的,答案就是万能的notepad++(我爱notpad++): 首先ctrl+f,出现文件查找的框以后,点击第三个tab,就

busybox下 etc目录下文件分析

busybox下 etc目录下文件分析 2011年11月08日 10:46:02 大鹏1987 阅读数:3016 标签: permissionsshellcommentspathcommand 更多 个人分类: ARM/Linux 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yjp19871013/article/details/6946822 (1) /etc/passwd 用于存放用户基本信息的口令文件.该口令每行由七个域构成: user

linux怎么实时查看目录下是否有文件生成

安装inotify-tools $ sudo apt install inotify-tools -y 创建数据和日志目录 $ sudo mkdir -p /tmp/inotifywait/log/ /tmp/inotifywait/data/ 创建日志文件 $ touch /tmp/inotifywait/log/data.log 假设在 /tmp/inotifywait/data/ 中不断生成(删除,移动)数据,/tmp/inotifywait/log/data.log 文件中记录日志 开启

vi命令使用技巧及经常出现的错误、etc目录下重要文件、环境变量及别名功能

一.vi命令使用技巧补充 如何快速编辑文本内容 yy --- 快速复制文件内容 3yy --- 复制三行内容 p --- 快速粘贴文本内容 3p --- 粘贴三行内容 dd --- 快速删除文件内容(实质是剪切) 3dd --- 删除三行内容 dG --- 删除光标当结尾所有内容 u(undo) --- 撤回之前的操作 ctrl+r(redo) --- 取消撤销操作 r --- 快速替换字符信息 R --- 可以连续替换多个字符信息 二.vi使用时经常出现的错误(1)操作出现失误 vi /old

maven依赖本地非repository中的jar包-依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理

maven依赖本地非repository中的jar包 http://www.cnblogs.com/piaolingxue/archive/2011/10/12/2208871.html 博客分类: MAVEN 今天在使用maven编译打包一个web应用的时候,碰到一个问题: 项目在开发是引入了依赖jar包,放在了WEB-INF/lib目录下,并通过buildpath中将web libariary导入. 在eclipse中开发没有问题,但是使用maven编译插件开始便宜总是报找不到WEB-INF

Python 读取某个目录下的文件

读取某个目录下的文件,如'/Users/test/test_kmls'目录下有test1.txt.test2.txt. 第一种方法读出的all_files是test1.txt.test2.txt 1 import os 2 3 kml_path=os.path.abspath('/Users/test/test_kmls') 4 all_files=os.listdir(kml_path) 5 for file in all_files: 6 print file 第二种方法可以获得文件的全路径

C#解压多个文件夹下的多个zip到一个目录下

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.IO; 6 using ICSharpCode.SharpZipLib; 7 using ICSharpCode.SharpZipLib.Zip; 8 using ICSharpCode.SharpZipLib.Checksums; 9 10 namespace Unzip 11

使用Python处理目录(一):打印目录下的文件名

要想遍历某一目录下的文件名,使用os.walk再方便不过了.他返回的是一个以元组为元素的列表.每一个元素都包含三个内容:路径,该路径下的子目录,该路径下的文件. os.walk使用了生成器技术(关于该技术的说明请参考其它文档或者技术资料)yield,给使用者带来了非常大的使用上的灵活性.由于生成器技术使得会函数walk的调用一次只返回一个元组,节省了内存空间,提升了执行效率. 比如使用者只想得到当前目录这一层次的文件,而不想递归其子目录函数.如果walk没有使用生成器技术,则可能需要通过传参控制

JavaWeb项目中WEB-INF目录下class文件自动生成以及显示

问题一:WEB-INF目录下的class字节文件是自动生成的,还是需要手动创建相关目录,然后再将字节件复制进去? 可以让eclipse自动生成 source folder:存放.java源文件的根目录 output folder:.class编译输出的根目录纯"java project"中,一般把"src"设置为source folder,把bin设置为output folder "web project"中,一般把"src"