gwenhywfar 5.10.1
fox16_htmltext.cpp
Go to the documentation of this file.
1/***************************************************************************
2 begin : Tue Feb 23 2010
3 copyright : (C) 2010 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10#ifdef HAVE_CONFIG_H
11# include <config.h>
12#endif
13
14#include "fox16_htmltext.hpp"
15#include "fox16_htmlctx.hpp"
16
17#include <gwenhywfar/debug.h>
18#include <gwenhywfar/i18n.h>
19
20#include <assert.h>
21
22
23#define MAX_DEFAULT_WIDTH 400
24#define BORDER 2
25
26
27
28FXDEFMAP(FOX16_HtmlText) FOX16_HtmlTextMap[]= {
29 FXMAPFUNC(SEL_PAINT,0,FOX16_HtmlText::onPaint),
30};
31
32
33
34// Object implementation
35FXIMPLEMENT(FOX16_HtmlText, FXScrollArea, FOX16_HtmlTextMap, ARRAYNUMBER(FOX16_HtmlTextMap))
36
37
38
39
40FOX16_HtmlText::FOX16_HtmlText(FXComposite* p, const FXString& text,
41 FXuint opts,
42 FXint x, FXint y, FXint w, FXint h)
43 :FXScrollArea(p, opts, x, y, w, h)
44 ,m_htmlCtx(NULL)
45 ,m_minWidth(0)
46 ,m_maxDefaultWidth(MAX_DEFAULT_WIDTH)
47 ,m_haveDefaultDims(false)
48 ,margintop(BORDER)
49 ,marginbottom(BORDER)
50 ,marginleft(BORDER)
51 ,marginright(BORDER)
52 ,barwidth(8) {
53 setText(text);
54 flags|=FLAG_ENABLED;
55}
56
57
58
60 :FXScrollArea()
61 ,m_htmlCtx(NULL)
62 ,m_minWidth(0) {
63 flags|=FLAG_ENABLED;
64}
65
66
67
69 if (m_htmlCtx)
70 delete m_htmlCtx;
71}
72
73
74
75void FOX16_HtmlText::setText(const FXString& text) {
77 m_text=text;
78 updateHtml();
79 flags|=FLAG_DIRTY;
80 layout();
81 recalc();
82 update();
83}
84
85
86
88 int w;
89 int wNeeded;
90
91 m_htmlCtx->layout(-1, -1);
92 wNeeded=m_htmlCtx->getWidth();
93 w=wNeeded;
96 if (w<viewport_w)
97 w=viewport_w;
98 //if (w<wNeeded) {
99 m_htmlCtx->layout(w-BORDER*2, -1);
100 //}
104}
105
106
107
109 if (m_htmlCtx==NULL)
110 updateHtml();
111
114
116 return m_htmlCtx->getWidth();
117}
118
119
120
122 if (m_htmlCtx==NULL)
123 updateHtml();
124
127
128 return m_htmlCtx->getHeight();
129}
130
131
132
133long FOX16_HtmlText::onPaint(FXObject*, FXSelector, void *ptr) {
134 FXEvent* event=(FXEvent*)ptr;
135 FXDCWindow dc(this,event);
136 //dc.setFont(font);
137 //dc.setForeground(FXRGB(255,0,0));
138 //dc.fillRectangle(event->rect.x,event->rect.y,event->rect.w,event->rect.h);
139
140 dc.setForeground(backColor);
141 dc.fillRectangle(event->rect.x, event->rect.y, event->rect.w, event->rect.h);
142
143 // Paint top margin
144 if (event->rect.y<=margintop) {
145 dc.setForeground(backColor);
146 dc.fillRectangle(0, 0, viewport_w, margintop);
147 }
148
149 // Paint bottom margin
150 if (event->rect.y+event->rect.h>=viewport_h-marginbottom) {
151 dc.setForeground(backColor);
152 dc.fillRectangle(0, viewport_h-marginbottom, viewport_w, marginbottom);
153 }
154
155 // Paint left margin
156 if(event->rect.x<marginleft) {
157 dc.setForeground(backColor);
158 dc.fillRectangle(0, margintop, marginleft, viewport_h-margintop-marginbottom);
159 }
160
161 // Paint right margin
162 if(event->rect.x+event->rect.w>=viewport_w-marginright) {
163 dc.setForeground(backColor);
164 dc.fillRectangle(viewport_w-marginright, margintop, marginright, viewport_h-margintop-marginbottom);
165 }
166
167 // Paint text
168 //dc.setClipRectangle(marginleft, margintop, viewport_w-marginright-marginleft, viewport_h-margintop-marginbottom);
169
170 //drawContents(dc, event->rect.x, event->rect.y, event->rect.w, event->rect.h);
171
172 if (m_htmlCtx) {
173#if 0 /* this doesn work */
174 m_htmlCtx->paintAt(&dc, -marginleft-pos_x, -margintop-pos_y,
175 event->rect.x,
176 event->rect.y,
177 event->rect.w,
178 event->rect.h);
179#else
180 m_htmlCtx->paintAt(&dc, -marginleft-pos_x, -margintop-pos_y,
181 0, 0,
182 viewport_w-(marginleft+marginright+barwidth),
183 viewport_h-(margintop+marginbottom));
184#endif
185 }
186 else {
187 DBG_ERROR(GWEN_LOGDOMAIN, "No HtmlContext");
188 }
189
190 return 1;
191}
192
193
194
195
197 int w;
198
199 m_haveDefaultDims=false;
200 if (options & FLAGS_NO_WORDWRAP)
201 w=-1;
202 else
203 w=viewport_w;
204
205 if (m_htmlCtx==NULL)
206 updateHtml();
208
209 // Scrollbars adjusted
210 FXScrollArea::layout();
211
212 update();
213 flags&=~FLAG_DIRTY;
214}
215
216
217
219 if (m_htmlCtx)
220 delete m_htmlCtx;
222 m_htmlCtx->setBackgroundColor(backColor);
223 m_htmlCtx->setForegroundColor(fxcolorfromname("black"));
224 m_htmlCtx->setText(m_text.text());
225 flags|=FLAG_DIRTY;
226}
227
228
230 FXint xPos, yPos;
231
232 xPos=pos_x;
233 yPos=getContentHeight()-viewport_h;
234 if (xPos>=0 && yPos>=0)
235 setPosition(-xPos, -yPos);
236}
237
238
239
240
241
#define NULL
Definition: binreloc.c:300
void setText(const char *s)
int layout(int width, int height)
void setForegroundColor(FXColor c)
void paintAt(FXDC *dc, int xOffset, int yOffset, int xText, int yText, int w, int h)
void setBackgroundColor(FXColor c)
long onPaint(FXObject *, FXSelector, void *)
FOX16_HtmlCtx * m_htmlCtx
virtual FXint getContentWidth()
virtual FXint getContentHeight()
void setText(const FXString &text)
Set the text for this label.
void makePositionVisible(FXint pos)
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
FXIMPLEMENT(FOX16_GuiSortingList, FXFoldingList, FOX16_GuiSortingListMap, ARRAYNUMBER(FOX16_GuiSortingListMap)) FOX16_GuiSortingList
#define MAX_DEFAULT_WIDTH
#define BORDER
FXDEFMAP(FOX16_HtmlText) FOX16_HtmlTextMap[]
#define GWEN_LOGDOMAIN
Definition: logger.h:35