Project

General

Profile

test_canvas_renderer.html

Sergey Ivanovskiy, 06/14/2018 05:20 PM

Download (6.01 KB)

 
1
<!DOCTYPE html>
2
<html lang="en">
3
   <head>
4
      <meta charset="utf-8" />
5
      <title>Canvas Renderer Test</title>
6
<script type="text/javascript" >
7
var p2j = {};
8

9
/** OS detection flags. */
10
p2j.isWindows = navigator.appVersion.indexOf('Win') > -1;
11
p2j.isMac = navigator.appVersion.indexOf('Mac') > -1;
12
p2j.isUnix = navigator.appVersion.indexOf('X11') > -1;
13
p2j.isLinux = navigator.appVersion.indexOf('Linux') > -1;
14

15
/** Browser detection flags. */
16

17
p2j.isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
18
p2j.isChrome  = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
19
p2j.isChromium = !!window.chrome;
20
p2j.isIE11 = navigator.userAgent.indexOf("Trident") > -1
21
                                                   || navigator.userAgent.indexOf("Edge") > -1;
22
p2j.isIe = !!window.ActiveXObject || p2j.isIE11;
23
p2j.isSafari  = (navigator.userAgent.toLowerCase().indexOf('safari/') > -1) && !p2j.isChrome;
24
</script>
25
      <script type="text/javascript" src="./driver/web/res/p2j.js"></script>
26
      <script type="text/javascript" src="./driver/web/res/p2j.logger.js"></script>
27
      <script type="text/javascript" src="./driver/web/res/p2j.sound.js"></script>
28
      <script type="text/javascript" src="./gui/driver/web/res/p2j.strokes.js"></script>
29
      <script type="text/javascript" src="./gui/driver/web/res/p2j.canvas_renderer.js"></script>
30
      <script type="text/javascript" src="./gui/driver/web/res/p2j.virtual_desktop.js"></script>
31
      <script type="text/javascript" src="./gui/driver/web/res/p2j.mouse.js"></script>
32
      <script type="text/javascript" src="./gui/driver/web/res/p2j.screen.js"></script>
33
      <script type="text/javascript" src="./driver/web/res/p2j.socket.js"></script>
34
      <script type="text/javascript" src="./driver/web/res/p2j.keymap.js"></script>
35
      <script type="text/javascript" src="./driver/web/res/p2j.keyboard.js"></script>
36
      <script type="text/javascript" src="./gui/driver/web/res/p2j.clipboard_helpers.js"></script>
37
      <script type="text/javascript" src="./driver/web/res/p2j.clipboard.js"></script>
38
      <script type="text/javascript" src="./driver/web/res/p2j.fonts.js"></script>
39
      
40
      <script>
41
         "use strict";
42
         var dojo = {};
43
         dojo.style = function(element, styleObj)
44
         {
45
            for (var prop in styleObj)
46
            {
47
               if (styleObj.hasOwnProperty(prop))
48
               {
49
                  element.style[prop] = styleObj[prop];
50
               }
51
            }
52
         };
53
         var canvas;
54
         
55
         var ctx;
56
         
57
         var offscreenCanvas;
58
         
59
         var offscreenContext;
60
         
61
         var strokesManager;
62
         
63
         var strokeStyle;
64
         
65
         var yStep;
66

67
         var xStep;
68

69
         var xFrom;
70

71
         var yFrom;
72
         
73
         var pixel;
74
         
75
         var pixData;
76
         
77
         var renderer;
78
         
79
         function initCanvas(canvas, ctx, x, y, width, height)
80
         {
81
            canvas.style.top = y.toString() + "px";
82
            canvas.style.left = x.toString() + "px";
83
            canvas.width = width;
84
            canvas.height = height;
85
         };
86
         
87
         function applyStrokeStyle()
88
         {
89
            renderer.setLineStroke(strokeStyle, 2);
90
         };
91

92
         window.onload = function()
93
         {
94
            p2j.isGui = true;
95
            p2j.fonts.init({
96
               'font' : {'name' : 'serif', 'size' : 10, 'color' : {'f' : '#000000000', 'b' : '#255255255'}},
97
            });
98
            p2j.logger.init(4096, true);
99
            strokesManager = new LineStrokes();
100
            canvas = document.getElementById("canvas");
101
            ctx = canvas.getContext('2d', {alpha : true});
102
            initCanvas(canvas, ctx, 40, 80, 800, 600);
103
            /** Creates canvas renderer. */
104
            renderer = new CanvasRenderer(canvas, ctx,
105
                                                     canvas, strokesManager, p2j.fonts, p2j.logger);
106
            strokeStyle = 0;
107
            applyStrokeStyle();
108
         };
109
         
110
         function blankCanvas() {
111
            ctx.setTransform(1,0,0,1,0,0);
112
            ctx.clearRect(0, 0, canvas.width, canvas.height);
113
            ctx.fillStyle   = "rgba(228,228,228,0.5)";
114
            ctx.fillRect(0, 0, canvas.width, canvas.height);
115
         };
116
         
117
         function whiteCanvas() {
118
            ctx.setTransform(1,0,0,1,0,0);
119
            ctx.clearRect(0, 0, canvas.width, canvas.height);
120
            ctx.fillStyle   = "rgba(255,255,255,0.5)";
121
            ctx.fillRect(0, 0, canvas.width, canvas.height);
122
         };
123
         
124
         function drawXORLine()
125
         {
126
            renderer.setColor([128, 128, 128]);
127
            renderer.setXORComposite();
128
            for(var i = 0; i < 800; i += 10)
129
            {
130
               renderer.strokeLineSegment(i, 100, i, 500, renderer.rawColor);
131
            }
132
            console.debug("renderer.rawColor=" + renderer.rawColor);
133
            
134
            renderer.resetComposite();
135
         }
136
   </script>
137
   </head>
138
   <body>
139
      <canvas id="canvas" style="position:absolute; z-index:0">No HTML5 support in your browser!</canvas>
140
      <div style="position:absolute;top:10px;left:10px;">
141
         <button style="position:relative" onclick="drawXORLine();">Draw XOR X-Line Series with grey color</button>
142
         <button style="position:relative" onclick="whiteCanvas();">Clear with half-transparent white</button>
143
         <button style="display:inline;position:relative" onclick="blankCanvas();">Clear with half-transparent light grey</button>
144
      </div>
145
      <div style="position:absolute;top:80px;left:850px;">
146
         <div style="display:inline">Stroke Styles</div>
147
         <select id="strokeStyleSelector" style="display:block" onchange="strokeStyle = Number(this.value);applyStrokeStyle();">
148
            <option value="0">Default</option>
149
            <option value="1">Fixed Width</option>
150
            <option value="2">Dots</option>
151
            <option value="3">Small Dots</option>
152
            <option value="4">Small Thin Dots</option>
153
         </select>
154
      </div>
155
   </body>
156
</html>