*/
#include <config.h>
-#include <gtkmm.h>
+
+// Too hard to make concept checks work with this file
+#ifdef _GLIBCPP_CONCEPT_CHECKS
+#undef _GLIBCPP_CONCEPT_CHECKS
+#endif
#include "GPainter.h"
-#include "LString.h"
#include "debug.h"
#include "GWorkArea.h"
#include "lyxrc.h"
#include "encoding.h"
#include "language.h"
+#include "LColor.h"
#include "xftFontLoader.h"
#include "xformsImage.h"
#include "frontends/font_metrics.h"
#include "codeConvert.h"
-#include "support/LAssert.h"
#include "support/lstrings.h"
-#include <boost/scoped_array.hpp>
+#include <gtkmm.h>
+#include <gdk/gdkx.h>
+
#include <X11/Xft/Xft.h>
+
+#include <boost/scoped_array.hpp>
+
#include <cmath>
+using std::string;
+
+namespace font_metrics {
+
+int width(wchar_t const * s, size_t n, LyXFont const & f);
+
+} // namespace font_metrics
+
+
+namespace lyx {
+namespace frontend {
GPainter::GPainter(GWorkArea & xwa)
: Painter(), owner_(xwa)
}
-void GPainter::setForeground(Glib::RefPtr<Gdk::GC> gc, LColor::color clr)
+void GPainter::setForeground(Glib::RefPtr<Gdk::GC> gc, LColor_color clr)
{
Gdk::Color * gclr = owner_.getColorHandler().getGdkColor(clr);
gc->set_foreground(*gclr);
void GPainter::setLineParam(Glib::RefPtr<Gdk::GC> gc,
line_style ls, line_width lw)
{
- int width;
- Gdk::LineStyle style;
+ int width = 0;
switch (lw) {
case Painter::line_thin:
width = 0;
break;
}
+ Gdk::LineStyle style = Gdk::LINE_SOLID;
switch (ls) {
case Painter::line_solid:
style = Gdk::LINE_SOLID;
}
-Painter & GPainter::point(int x, int y, LColor::color c)
+void GPainter::point(int x, int y, LColor_color c)
{
setForeground(owner_.getGC(), c);
owner_.getPixmap()->draw_point(owner_.getGC(), x, y);
- return *this;
}
-Painter & GPainter::line(int x1, int y1,
+void GPainter::line(int x1, int y1,
int x2, int y2,
- LColor::color col,
+ LColor_color col,
line_style ls,
line_width lw)
{
setForeground(owner_.getGC(), col);
setLineParam(owner_.getGC(), ls, lw);
owner_.getPixmap()->draw_line(owner_.getGC(), x1, y1, x2, y2);
- return *this;
}
-Painter & GPainter::lines(int const * xp, int const * yp,
- int np,
- LColor::color col,
+void GPainter::lines(int const * xp, int const * yp, int np,
+ LColor_color col,
line_style ls,
line_width lw)
{
points[i].set_y(yp[i]);
}
owner_.getPixmap()->draw_lines(owner_.getGC(), points);
- return *this;
}
-Painter & GPainter::rectangle(int x, int y,
- int w, int h,
- LColor::color col,
+void GPainter::rectangle(int x, int y, int w, int h,
+ LColor_color col,
line_style ls,
line_width lw)
{
setForeground(owner_.getGC(), col);
setLineParam(owner_.getGC(), ls, lw);
owner_.getPixmap()->draw_rectangle(owner_.getGC(), false, x, y, w, h);
- return *this;
}
-Painter & GPainter::fillRectangle(int x, int y,
- int w, int h,
- LColor::color col)
+void GPainter::fillRectangle(int x, int y, int w, int h,
+ LColor_color col)
{
setForeground(owner_.getGC(), col);
owner_.getPixmap()->draw_rectangle(owner_.getGC(), true, x, y, w, h);
- return *this;
}
-Painter & GPainter::fillPolygon(int const * xp, int const * yp,
- int np, LColor::color col)
+void GPainter::fillPolygon(int const * xp, int const * yp,
+ int np, LColor_color col)
{
setForeground(owner_.getGC(), col);
std::vector<Gdk::Point> points(np);
points[i].set_y(yp[i]);
}
owner_.getPixmap()->draw_polygon(owner_.getGC(), true, points);
- return *this;
}
-Painter & GPainter::arc(int x, int y,
- unsigned int w, unsigned int h,
- int a1, int a2, LColor::color col)
+void GPainter::arc(int x, int y, unsigned int w, unsigned int h,
+ int a1, int a2, LColor_color col)
{
setForeground(owner_.getGC(), col);
owner_.getPixmap()->draw_arc(owner_.getGC(),
false, x, y, w, h, a1, a2);
- return *this;
}
-Painter & GPainter::image(int x, int y,
- int w, int h,
- lyx::graphics::Image const & i)
+void GPainter::image(int x, int y, int w, int h,
+ graphics::Image const & i)
{
- lyx::graphics::xformsImage const & image =
- static_cast<lyx::graphics::xformsImage const &>(i);
+ graphics::xformsImage const & image =
+ static_cast<graphics::xformsImage const &>(i);
Pixmap pixmap = GDK_PIXMAP_XID(owner_.getPixmap()->gobj());
GC gc = GDK_GC_XGC(owner_.getGC()->gobj());
XCopyArea(owner_.getDisplay(), image.getPixmap(), pixmap,
gc, 0, 0, w, h, x, y);
- return *this;
}
-Painter & GPainter::text(int x, int y,
- string const & s, LyXFont const & f)
+void GPainter::text(int x, int y, std::string const & s, LyXFont const & f)
{
size_t size = s.length() + 1;
- wchar_t * wcs = (wchar_t *) alloca(size * sizeof(wchar_t));
- size = mbstowcs(wcs, s.c_str(), size);
- return text(x, y, wcs, size, f);
+ boost::scoped_array<wchar_t> wcs(new wchar_t[size]);
+ size = mbstowcs(wcs.get(), s.c_str(), size);
+ return text(x, y, wcs.get(), size, f);
}
-Painter & GPainter::text(int x, int y,
- char c, LyXFont const & f)
+void GPainter::text(int x, int y, char c, LyXFont const & f)
{
char s[2] = { c, '\0' };
- return text(x, y, s, 1, f);
+ text(x, y, s, 1, f);
}
}
-namespace font_metrics
-{
-
-int width(wchar_t const *s, size_t n, LyXFont const & f);
-
-}
-
-
-Painter & GPainter::text(int x, int y, wchar_t const * s, int ls,
- LyXFont const & f)
+void GPainter::text(int x, int y, wchar_t const * s, int ls, LyXFont const & f)
{
XftFont * font = getXftFont(f);
XftColor * xftClr = owner_.getColorHandler().
XftDraw * draw = owner_.getXftDraw();
if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) {
XftDrawString32(draw, xftClr, font, x, y,
- wcsToFcChar32StrFast(s), ls);
+ wcsToXftChar32StrFast(s), ls);
} else {
LyXFont smallfont(f);
smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE);
XftFont * fontS = getXftFont(smallfont);
wchar_t c;
int tmpx = x;
- for(int i = 0; i < ls; ++i) {
+ for (int i = 0; i < ls; ++i) {
c = lyx::support::uppercase(s[i]);
- if(c != s[i]) {
- XftDrawString32(draw, xftClr, fontS, tmpx, y,
- wcsToFcChar32StrFast(&c), 1);
+ if (c != s[i]) {
+ XftDrawString32(draw, xftClr, fontS, tmpx, y,
+ wcsToXftChar32StrFast(&c), 1);
tmpx += font_metrics::width(c, smallfont);
} else {
XftDrawString32(draw, xftClr, font, tmpx, y,
- wcsToFcChar32StrFast(&c), 1);
+ wcsToXftChar32StrFast(&c), 1);
tmpx += font_metrics::width(c, f);
}
}
}
if (f.underbar() == LyXFont::ON)
underline(f, x, y, font_metrics::width(s, ls, f));
- return *this;
}
-
-Painter & GPainter::text(int x, int y,
- char const * s, size_t ls,
- LyXFont const & f)
+
+void GPainter::text(int x, int y, char const * s, size_t ls, LyXFont const & f)
{
boost::scoped_array<wchar_t> wcs(new wchar_t[ls + 1]);
size_t len;
std::copy(us, us + ls, wcs.get());
} else
len = mbstowcs(wcs.get(), s, ls + 1);
- return text(x, y, wcs.get(), len, f);
+ text(x, y, wcs.get(), len, f);
}
+
+} // namespace frontend
+} // namespace lyx